diff --git a/.devcontainer/.gitignore b/.devcontainer/.gitignore index 1f8ec242b8..5682fe1190 100644 --- a/.devcontainer/.gitignore +++ b/.devcontainer/.gitignore @@ -1 +1,3 @@ -.Xauthority \ No newline at end of file +.Xauthority +.env +.host/ \ No newline at end of file diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e72704bfd0..a24c524047 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,6 +1,15 @@ FROM ghcr.io/commaai/openpilot-base:latest -# remove gitconfig if exists, since its gonna be replaced by host one -RUN rm -f /root/.gitconfig -RUN apt update && apt install -y vim net-tools usbutils htop ripgrep +RUN apt update && apt install -y vim net-tools usbutils htop ripgrep tmux wget mesa-utils xvfb libxtst6 libxv1 libglu1-mesa libegl1-mesa RUN pip install ipython jupyter jupyterlab + +RUN cd /tmp && \ + ARCH=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) && \ + curl -L -o virtualgl.deb "https://downloads.sourceforge.net/project/virtualgl/3.1/virtualgl_3.1_$ARCH.deb" && \ + dpkg -i virtualgl.deb + +USER batman + +RUN cd $HOME && \ + curl -O https://raw.githubusercontent.com/commaai/agnos-builder/master/userspace/home/.tmux.conf && \ + curl -O https://raw.githubusercontent.com/commaai/agnos-builder/master/userspace/home/.vimrc diff --git a/.devcontainer/container_post_create.sh b/.devcontainer/container_post_create.sh new file mode 100755 index 0000000000..dee1c61101 --- /dev/null +++ b/.devcontainer/container_post_create.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +TARGET_USER=batman +source .devcontainer/.host/.env + +# override display flag for mac hosts +if [[ $HOST_OS == darwin ]]; then + echo "Setting up DISPLAY override for macOS..." + cat <> /home/$TARGET_USER/.bashrc +source .devcontainer/.host/.env +if [ -n "\$HOST_DISPLAY" ]; then + DISPLAY_NUM=\$(echo "\$HOST_DISPLAY" | awk -F: '{print \$NF}') + export DISPLAY=host.docker.internal:\$DISPLAY_NUM +fi +EOF +fi + +# setup virtualgl for mac hosts +if [[ $HOST_OS == darwin ]]; then + echo "Setting up virtualgl for macOS..." + cat <> /home/$TARGET_USER/.bashrc +if [ -n "\$HOST_DISPLAY" ]; then + export VGL_PORT=10000 + export VGL_CLIENT=host.docker.internal + export VGL_COMPRESS=rgb + export VGL_DISPLAY=:99 + export VGL_FPS=60 + # prevent vglrun from running exec + alias exec=:; source vglrun :; unalias exec +fi +EOF +fi + +# These lines are temporary, to remain backwards compatible with old devcontainers +# that were running as root and therefore had their caches written as root +sudo chown -R $TARGET_USER: /tmp/scons_cache +sudo chown -R $TARGET_USER: /tmp/comma_download_cache +sudo chown -R $TARGET_USER: /home/batman/.comma diff --git a/.devcontainer/container_post_start.sh b/.devcontainer/container_post_start.sh new file mode 100755 index 0000000000..1521b9c3fb --- /dev/null +++ b/.devcontainer/container_post_start.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +source .devcontainer/.host/.env + +# setup safe directories for submodules +SUBMODULE_DIRS=$(git config --file .gitmodules --get-regexp path | awk '{ print $2 }') +for DIR in $SUBMODULE_DIRS; do + git config --global --add safe.directory "$PWD/$DIR" +done + +# virtual display for virtualgl +if [[ "$HOST_OS" == "darwin" ]] && [[ -n "$HOST_DISPLAY" ]]; then + echo "Starting virtual display at :99 ..." + tmux new-session -d -s fakedisplay Xvfb :99 -screen 0 1920x1080x24 +fi diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 2dfe46b4f0..a7a63658ed 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,23 +3,36 @@ "build": { "dockerfile": "Dockerfile" }, - "postCreateCommand": "bash -c 'if [[ $DISPLAY == *xquartz* ]]; then echo \"export DISPLAY=host.docker.internal:0\" >> /root/.bashrc; fi'", - "postStartCommand": "git config --file .gitmodules --get-regexp path | awk '{ print $2 }' | xargs -I{} git config --global --add safe.directory \"$PWD/{}\"", - "initializeCommand": ".devcontainer/setup_host.sh", + "postCreateCommand": ".devcontainer/container_post_create.sh", + "postStartCommand": ".devcontainer/container_post_start.sh", + "initializeCommand": [".devcontainer/host_setup"], "privileged": true, "containerEnv": { "DISPLAY": "${localEnv:DISPLAY}", "PYTHONPATH": "${containerWorkspaceFolder}", + "TERM": "xterm-256color", "force_color_prompt": "1" }, "runArgs": [ "--volume=/tmp/.X11-unix:/tmp/.X11-unix", - "--volume=${localWorkspaceFolder}/.devcontainer/.Xauthority:/root/.Xauthority", - "--volume=${localEnv:HOME}/.comma:/root/.comma", + "--volume=${localWorkspaceFolder}/.devcontainer/.host/.Xauthority:/home/batman/.Xauthority", + "--volume=${localEnv:HOME}/.comma:/home/batman/.comma", "--volume=/tmp/comma_download_cache:/tmp/comma_download_cache", "--volume=/tmp/devcontainer_scons_cache:/tmp/scons_cache", - "--shm-size=1G" + "--shm-size=1G", + "--add-host=host.docker.internal:host-gateway", // required to use host.docker.internal on linux + "--publish=0.0.0.0:8070-8079:8070-8079" // body ZMQ services ], + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": false, + "installOhMyZsh": false, + "upgradePackages": false, + "username": "batman" + } + }, + "containerUser": "batman", + "remoteUser": "batman", "customizations": { "vscode": { "extensions": [ diff --git a/.devcontainer/host_setup b/.devcontainer/host_setup new file mode 100755 index 0000000000..8ff81ebe42 --- /dev/null +++ b/.devcontainer/host_setup @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +# pull base image +if [[ -z $USE_LOCAL_IMAGE ]]; then + echo "Updating openpilot_base image if needed..." + docker pull ghcr.io/commaai/openpilot-base:latest +fi + +# setup .host dir +mkdir -p .devcontainer/.host + +# setup links to Xauthority +XAUTHORITY_LINK=".devcontainer/.host/.Xauthority" +rm -f $XAUTHORITY_LINK +if [[ -z $XAUTHORITY ]]; then + echo "XAUTHORITY not set. Fallback to ~/.Xauthority ..." + if ! [[ -f $HOME/.Xauthority ]]; then + echo "~/.XAuthority file does not exist. GUI tools may not work properly." + touch $XAUTHORITY_LINK # dummy file to satisfy container volume mount + else + ln -sf $HOME/.Xauthority $XAUTHORITY_LINK + fi +else + ln -sf $XAUTHORITY $XAUTHORITY_LINK +fi + +# setup host env file +HOST_INFO_FILE=".devcontainer/.host/.env" +SYSTEM=$(uname -s | tr '[:upper:]' '[:lower:]') +echo "HOST_OS=\"$SYSTEM\"" > $HOST_INFO_FILE +echo "HOST_DISPLAY=\"$DISPLAY\"" >> $HOST_INFO_FILE + +# run virtualgl if macos +if [[ $SYSTEM == "darwin" ]]; then + echo + if [[ -f /opt/VirtualGL/bin/vglclient ]]; then + echo "Starting VirtualGL client at port 10000..." + VGL_LOG_FILE=".devcontainer/.host/.vgl/vglclient.log" + mkdir -p "$(dirname $VGL_LOG_FILE)" + /opt/VirtualGL/bin/vglclient -l "$VGL_LOG_FILE" -display "$DISPLAY" -port 10000 -detach + else + echo "VirtualGL not found. GUI tools may not work properly. Some GUI tools require OpenGL to work properly. To use them with XQuartz on mac, VirtualGL needs to be installed. To install it run:" + echo + echo " brew install --cask virtualgl" + echo + fi +fi diff --git a/.devcontainer/host_setup.cmd b/.devcontainer/host_setup.cmd new file mode 100644 index 0000000000..885bd27f25 --- /dev/null +++ b/.devcontainer/host_setup.cmd @@ -0,0 +1,10 @@ +:: pull base image +IF NOT DEFINED USE_LOCAL_IMAGE ^ +echo "Updating openpilot_base image if needed..." && ^ +docker pull ghcr.io/commaai/openpilot-base:latest + +:: setup .host dir +mkdir .devcontainer\.host + +:: setup host env file +echo "" > .devcontainer\.host\.env \ No newline at end of file diff --git a/.devcontainer/setup_host.sh b/.devcontainer/setup_host.sh deleted file mode 100755 index 5c3c5e900c..0000000000 --- a/.devcontainer/setup_host.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -# setup links to Xauthority -XAUTHORITY_LINK=".devcontainer/.Xauthority" -rm -f $XAUTHORITY_LINK -if [[ -z $XAUTHORITY ]]; then - echo "XAUTHORITY not set. Fallback to ~/.Xauthority ..." - if ! [[ -f $HOME/.Xauthority ]]; then - echo "~/.XAuthority file does not exist. GUI tools may not work properly." - touch $XAUTHORITY_LINK # dummy file to satisfy container volume mount - else - ln -sf $HOME/.Xauthority $XAUTHORITY_LINK - fi -else - ln -sf $XAUTHORITY $XAUTHORITY_LINK -fi diff --git a/.dir-locals.el b/.dir-locals.el deleted file mode 100644 index 53017c9fb2..0000000000 --- a/.dir-locals.el +++ /dev/null @@ -1,3 +0,0 @@ -((c++-mode (flycheck-gcc-language-standard . "c++11") - (flycheck-clang-language-standard . "c++11") - )) diff --git a/.dockerignore b/.dockerignore index 1f261adf30..cfc34e5848 100644 --- a/.dockerignore +++ b/.dockerignore @@ -28,10 +28,8 @@ chffr/app2 chffr/backend/env selfdrive/nav selfdrive/baseui -chffr/lib/vidindex/vidindex selfdrive/test/simulator2 **/cache_data -xx/chffr/lib/vidindex/vidindex xx/plus xx/community xx/projects diff --git a/.gitattributes b/.gitattributes index 2d1df43fd3..8781a7371f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,24 @@ +* text=auto + +# to move existing files into LFS: +# git add --renormalize . *.dlc filter=lfs diff=lfs merge=lfs -text *.onnx filter=lfs diff=lfs merge=lfs -text +*.svg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text + selfdrive/car/tests/test_models_segs.txt filter=lfs diff=lfs merge=lfs -text +system/hardware/tici/updater filter=lfs diff=lfs merge=lfs -text +selfdrive/ui/qt/spinner_larch64 filter=lfs diff=lfs merge=lfs -text +selfdrive/ui/qt/text_larch64 filter=lfs diff=lfs merge=lfs -text +third_party/**/*.a filter=lfs diff=lfs merge=lfs -text +third_party/**/*.so filter=lfs diff=lfs merge=lfs -text +third_party/**/*.so.* filter=lfs diff=lfs merge=lfs -text +third_party/**/*.dylib filter=lfs diff=lfs merge=lfs -text +third_party/acados/*/t_renderer filter=lfs diff=lfs merge=lfs -text +third_party/qt5/larch64/bin/lrelease filter=lfs diff=lfs merge=lfs -text +third_party/qt5/larch64/bin/lupdate filter=lfs diff=lfs merge=lfs -text +third_party/catch2/include/catch2/catch.hpp filter=lfs diff=lfs merge=lfs -text diff --git a/.github/PULL_REQUEST_TEMPLATE/car_port.md b/.github/PULL_REQUEST_TEMPLATE/car_port.md index 4264363ba2..690c24c9b0 100644 --- a/.github/PULL_REQUEST_TEMPLATE/car_port.md +++ b/.github/PULL_REQUEST_TEMPLATE/car_port.md @@ -8,7 +8,7 @@ assignees: '' **Checklist** -- [ ] added to README +- [ ] added entry to CarInfo in selfdrive/car/*/values.py and ran `selfdrive/car/docs.py` to generate new docs - [ ] test route added to [routes.py](https://github.com/commaai/openpilot/blob/master/selfdrive/car/tests/routes.py) - [ ] route with openpilot: - [ ] route with stock system: diff --git a/.github/PULL_REQUEST_TEMPLATE/fingerprint.md b/.github/PULL_REQUEST_TEMPLATE/fingerprint.md index 466d4f98f4..b94f7dc53f 100644 --- a/.github/PULL_REQUEST_TEMPLATE/fingerprint.md +++ b/.github/PULL_REQUEST_TEMPLATE/fingerprint.md @@ -6,6 +6,8 @@ labels: 'fingerprint' assignees: '' --- -Discord username: [] +**Car** +Which car (make, model, year) this fingerprint is for -Route: [] +**Route** +A route with the fingerprint \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE/tuning.md b/.github/PULL_REQUEST_TEMPLATE/tuning.md index 05e4312699..4397e5ad20 100644 --- a/.github/PULL_REQUEST_TEMPLATE/tuning.md +++ b/.github/PULL_REQUEST_TEMPLATE/tuning.md @@ -28,5 +28,4 @@ Longitudinal: Lateral: * Straight driving at ~25, ~45 and ~65mph * Turns driving at ~25, ~45 and ~65mph - ---> +--> \ No newline at end of file diff --git a/.github/build.py b/.github/build.py new file mode 100644 index 0000000000..e141ea05df --- /dev/null +++ b/.github/build.py @@ -0,0 +1,30 @@ +import pathlib + +GITHUB_FOLDER = pathlib.Path(__file__).parent + +PULL_REQUEST_TEMPLATES = (GITHUB_FOLDER / "PULL_REQUEST_TEMPLATE") + +order = ["fingerprint", "car_bugfix", "bugfix", "car_port", "refactor"] + +def create_pull_request_template(): + with open(GITHUB_FOLDER / "pull_request_template.md", "w") as f: + f.write("\n\n") + + for t in order: + template = PULL_REQUEST_TEMPLATES / f"{t}.md" + text = template.read_text() + + # Remove metadata for GitHub + start = text.find("---") + end = text.find("---", start+1) + text = text[end + 4:] + + # Remove comments + text = text.replace("", "") + + f.write(f"\n\n") + +create_pull_request_template() diff --git a/.github/labeler.yaml b/.github/labeler.yaml index 4c4d371d43..47d0d480a9 100644 --- a/.github/labeler.yaml +++ b/.github/labeler.yaml @@ -1,61 +1,79 @@ CI / testing: - - all: - - changed-files: ['.github/**'] - - all: - - changed-files: ['**/test_*'] + - changed-files: + - any-glob-to-all-files: "{.github/**,**/test_*,Jenkinsfile}" -car: - - all: - - changed-files: ['selfdrive/car/**'] +car: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/**' body: - - all: - - changed-files: ['selfdrive/car/body/*'] + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/body/*' + chrysler: - - all: - - changed-files: ['selfdrive/car/chrysler/*'] -ford: - - all: - - changed-files: ['selfdrive/car/ford/*'] -gm: - - all: - - changed-files: ['selfdrive/car/gm/*'] -honda: - - all: - - changed-files: ['selfdrive/car/honda/*'] -hyundai: - - all: - - changed-files: ['selfdrive/car/hyundai/*'] -mazda: - - all: - - changed-files: ['selfdrive/car/mazda/*'] -nissan: - - all: - - changed-files: ['selfdrive/car/nissan/*'] -subaru: - - all: - - changed-files: ['selfdrive/car/subaru/*'] -tesla: - - all: - - changed-files: ['selfdrive/car/tesla/*'] -toyota: - - all: - - changed-files: ['selfdrive/car/toyota/*'] -volkswagen: - - all: - - changed-files: ['selfdrive/car/volkswagen/*'] + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/chrysler/*' + +ford: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/ford/*' + +gm: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/gm/*' + +honda: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/honda/*' + +hyundai: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/hyundai/*' + +mazda: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/mazda/*' + +nissan: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/nissan/*' + +subaru: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/subaru/*' + +tesla: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/telsa/*' + +toyota: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/toyota/*' + +volkswagen: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/volkswagen/*' + +fingerprint: + - changed-files: + - any-glob-to-all-files: 'selfdrive/car/*/fingerprints.py' simulation: - - all: - - changed-files: ['tools/sim/**'] + - changed-files: + - any-glob-to-all-files: 'tools/sim/**' + ui: - - all: - - changed-files: ['selfdrive/ui/**'] -tools: - - all: - - changed-files: ['tools/**'] + - changed-files: + - any-glob-to-all-files: 'selfdrive/ui/**' + +tools: + - changed-files: + - any-glob-to-all-files: 'tools/**' multilanguage: - - all: - - changed-files: ['selfdrive/ui/translations/**'] + - changed-files: + - any-glob-to-all-files: 'selfdrive/ui/translations/**' +research: + - changed-files: + - any-glob-to-all-files: "{selfdrive/modeld/models/**,selfdrive/test/process_replay/model_replay_ref_commit}" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index efa947a91a..3e3f42dcbc 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,38 +1,68 @@ - + + - - - + + + diff --git a/.github/workflows/auto-cache/action.yaml b/.github/workflows/auto-cache/action.yaml new file mode 100644 index 0000000000..173803f7f0 --- /dev/null +++ b/.github/workflows/auto-cache/action.yaml @@ -0,0 +1,49 @@ +name: 'automatically cache based on current runner' + +inputs: + path: + description: 'path to cache' + required: true + key: + description: 'key' + required: true + restore-keys: + description: 'restore-keys' + required: true + save: + description: 'whether to save the cache' + default: 'false' + required: false + +runs: + using: "composite" + steps: + - name: setup namespace cache + if: ${{ contains(runner.name, 'nsc') }} + uses: namespacelabs/nscloud-cache-action@v1 + with: + path: ${{ inputs.path }} + + - name: setup github cache + if: ${{ !contains(runner.name, 'nsc') && inputs.save != 'false' }} + uses: 'actions/cache@v3' + with: + path: ${{ inputs.path }} + key: ${{ inputs.key }} + restore-keys: ${{ inputs.restore-keys }} + + - name: setup github cache + if: ${{ !contains(runner.name, 'nsc') && inputs.save == 'false' }} + uses: 'actions/cache/restore@v3' + with: + path: ${{ inputs.path }} + key: ${{ inputs.key }} + restore-keys: ${{ inputs.restore-keys }} + + # make the directory manually in case we didn't get a hit, so it doesn't fail on future steps + - id: scons-cache-setup + shell: bash + run: | + mkdir -p ${{ inputs.path }} + sudo chmod -R 777 ${{ inputs.path }} + sudo chown -R $USER ${{ inputs.path }} \ No newline at end of file diff --git a/.github/workflows/auto_pr_review.yaml b/.github/workflows/auto_pr_review.yaml new file mode 100644 index 0000000000..abb6c38d6b --- /dev/null +++ b/.github/workflows/auto_pr_review.yaml @@ -0,0 +1,207 @@ +name: "PR review" +on: + pull_request_target: + types: [opened, reopened, synchronize, edited, edited] + +jobs: + labeler: + name: apply labels + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: false + - uses: actions/labeler@v5.0.0 + with: + dot: true + configuration-path: .github/labeler.yaml + + pr_branch_check: + name: check branch + runs-on: ubuntu-latest + if: github.repository == 'commaai/openpilot' + steps: + - uses: Vankka/pr-target-branch-action@69ab6dd5c221de3548b3b6c4d102c1f4913d3baa + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + target: /^(?!master$).*/ + exclude: /commaai:.*/ + change-to: ${{ github.base_ref }} + already-exists-action: close_this + already-exists-comment: "Your PR should be made against the `master` branch" + + check-pr-template: + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + pull-requests: write + actions: read + if: github.event.pull_request.head.repo.full_name != 'commaai/openpilot' + steps: + - uses: actions/github-script@v7 + with: + script: | + // Comment to add to the PR if no template has been used + const NO_TEMPLATE_MESSAGE = + "It looks like you didn't use one of the Pull Request templates. Please check [the contributing docs](https://github.com/commaai/openpilot/blob/master/docs/CONTRIBUTING.md). \ + Also make sure that you didn't modify any of the checkboxes or headings within the template."; + // body data for future requests + const body_data = { + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + }; + + // Utility function to extract all headings + const extractHeadings = (markdown) => { + const headingRegex = /^(#{1,6})\s+(.+)$/gm; + const boldTextRegex = /^(?:\*\*|__)(.+?)(?:\*\*|__)\s*$/gm; + const headings = []; + let headingMatch; + while ((headingMatch = headingRegex.exec(markdown))) { + headings.push(headingMatch[2].trim()); + } + let boldMatch; + while ((boldMatch = boldTextRegex.exec(markdown))) { + headings.push(boldMatch[1].trim()); + } + return headings; + }; + + // Utility function to extract all check box descriptions + const extractCheckBoxTexts = (markdown) => { + const checkboxRegex = /^\s*-\s*\[( |x)\]\s+(.+)$/gm; + const checkboxes = []; + let match; + while ((match = checkboxRegex.exec(markdown))) { + checkboxes.push(match[2].trim()); + } + return checkboxes; + }; + + // Utility function to check if a list is a subset of another list + isSubset = (subset, superset) => { + return subset.every((item) => superset.includes(item)); + }; + + // Utility function to check if a list of checkboxes is a subset of another list of checkboxes + isCheckboxSubset = (templateCheckBoxTexts, prTextCheckBoxTexts) => { + // Check if each template checkbox text is a substring of at least one PR checkbox text + // (user should be allowed to add additional text) + return templateCheckBoxTexts.every((item) => prTextCheckBoxTexts.some((element) => element.includes(item))) + } + + // Get filenames of all currently checked-in PR templates + const template_contents = await github.rest.repos.getContent({ + owner: context.repo.owner, + repo: context.repo.repo, + path: ".github/PULL_REQUEST_TEMPLATE", + }); + var template_filenames = []; + for (const content of template_contents.data) { + template_filenames.push(content.path); + } + console.debug("Received template filenames: " + template_filenames); + // Retrieve templates + var templates = []; + for (const template_filename of template_filenames) { + const template_response = await github.rest.repos.getContent({ + owner: context.repo.owner, + repo: context.repo.repo, + path: template_filename, + }); + // Convert Base64 content back + const decoded_template = atob(template_response.data.content); + const headings = extractHeadings(decoded_template); + const checkboxes = extractCheckBoxTexts(decoded_template); + if (!headings.length && !checkboxes.length) { + console.warn( + "Invalid template! Contains neither headings nor checkboxes, ignoring it: \n" + + decoded_template + ); + } else { + templates.push({ headings: headings, checkboxes: checkboxes }); + } + } + // Retrieve the PR Body + const pull_request = await github.rest.issues.get({ + ...body_data, + }); + const pull_request_text = pull_request.data.body; + console.debug("Received Pull Request body: \n" + pull_request_text); + + /* Check if the PR Body matches one of the templates + A template is defined by all headings and checkboxes it contains + We extract all Headings and Checkboxes from the PR text and check if any of the templates is a subset of that + */ + const pr_headings = extractHeadings(pull_request_text); + const pr_checkboxes = extractCheckBoxTexts(pull_request_text); + console.debug("Found Headings in PR body:\n" + pr_headings); + console.debug("Found Checkboxes in PR body:\n" + pr_checkboxes); + var template_found = false; + // Iterate over each template to check if it applies + for (const template of templates) { + console.log( + "Checking for headings: [" + + template.headings + + "] and checkboxes: [" + + template.checkboxes + "]" + ); + if ( + isCheckboxSubset(template.checkboxes, pr_checkboxes) && + isSubset(template.headings, pr_headings) + ) { + console.debug("Found matching template!"); + template_found = true; + } + } + + // List comments from previous runs + var existing_comments = []; + const comments = await github.rest.issues.listComments({ + ...body_data, + }); + for (const comment of comments.data) { + if (comment.body === NO_TEMPLATE_MESSAGE) { + existing_comments.push(comment); + } + } + + // Add a comment to the PR that it is not using a the template (but only if this comment does not exist already) + if (!template_found) { + var comment_already_sent = false; + + // Add an 'in-bot-review' label since this PR doesn't have the template + github.rest.issues.addLabels({ + ...body_data, + labels: ["in-bot-review"], + }); + + if (existing_comments.length < 1) { + github.rest.issues.createComment({ + ...body_data, + body: NO_TEMPLATE_MESSAGE, + }); + } + } else { + // If template has been found, delete any old comment about missing template + for (const existing_comment of existing_comments) { + github.rest.issues.deleteComment({ + ...body_data, + comment_id: existing_comment.id, + }); + } + // Remove the 'in-bot-review' label after the review is done and the PR has passed + github.rest.issues.removeLabel({ + ...body_data, + name: "in-bot-review", + }).catch((error) => { + console.log("Label 'in-bot-review' not found, ignoring"); + }); + } + diff --git a/.github/workflows/badges.yaml b/.github/workflows/badges.yaml index a2c2daab1a..2f1a7d67c4 100644 --- a/.github/workflows/badges.yaml +++ b/.github/workflows/badges.yaml @@ -7,15 +7,17 @@ on: env: BASE_IMAGE: openpilot-base DOCKER_REGISTRY: ghcr.io/commaai - RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/sh -c + RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/bash -c jobs: badges: name: create badges runs-on: ubuntu-20.04 if: github.repository == 'commaai/openpilot' + permissions: + contents: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -23,6 +25,8 @@ jobs: run: | ${{ env.RUN }} "scons -j$(nproc) && python selfdrive/ui/translations/create_badges.py" + rm .gitattributes + git checkout --orphan badges git rm -rf --cached . git config user.email "badge-researcher@comma.ai" diff --git a/.github/workflows/compile-openpilot/action.yaml b/.github/workflows/compile-openpilot/action.yaml index 8775c96262..2945b67d2e 100644 --- a/.github/workflows/compile-openpilot/action.yaml +++ b/.github/workflows/compile-openpilot/action.yaml @@ -1,11 +1,5 @@ name: 'compile openpilot' -inputs: - cache_key_prefix: - description: 'Prefix for caching key' - required: false - default: 'scons' - runs: using: "composite" steps: @@ -24,4 +18,4 @@ runs: if: github.ref == 'refs/heads/master' with: path: .ci_cache/scons_cache - key: ${{ inputs.cache_key_prefix }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }} + key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }} diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000000..c555eafc73 --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,64 @@ +name: docs + +on: + push: + branches: + - master + pull_request: + +concurrency: + group: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }} + cancel-in-progress: true + +env: + BASE_IMAGE: openpilot-base + + BUILD: selfdrive/test/docker_build.sh base + + RUN: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c + +jobs: + docs: + name: build docs + runs-on: ubuntu-20.04 + timeout-minutes: 45 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: ./.github/workflows/setup-with-retry + - name: Build openpilot + run: | + ${{ env.RUN }} "scons -j$(nproc)" + - name: Build docs + run: | + ${{ env.RUN }} "apt update && apt install -y doxygen && cd docs && make -j$(nproc) html" + + - uses: actions/checkout@v4 + if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot' + with: + path: openpilot-docs + ssh-key: ${{ secrets.OPENPILOT_DOCS_KEY }} + repository: commaai/openpilot-docs + - name: Push + if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot' + run: | + set -x + + source release/identity.sh + + cd openpilot-docs + + git checkout --orphan tmp + git rm -rf . + + cp -r ../build/docs/html/ docs/ + cp -r ../docs/README.md . + touch docs/.nojekyll + echo -n docs.comma.ai > docs/CNAME + git add -f . + + git commit -m "build docs" + + # docs live in different repo to not bloat openpilot's full clone size + git push -f origin tmp:gh-pages diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml deleted file mode 100644 index 20f7260ef7..0000000000 --- a/.github/workflows/labeler.yaml +++ /dev/null @@ -1,18 +0,0 @@ -name: "Pull Request Labeler" -on: - pull_request_target: - -jobs: - labeler: - permissions: - contents: read - pull-requests: write - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: false - - uses: actions/labeler@v5.0.0-alpha.1 - with: - dot: true - configuration-path: .github/labeler.yaml \ No newline at end of file diff --git a/.github/workflows/prebuilt.yaml b/.github/workflows/prebuilt.yaml index 3558d7eb7e..990be73f72 100644 --- a/.github/workflows/prebuilt.yaml +++ b/.github/workflows/prebuilt.yaml @@ -5,7 +5,7 @@ on: workflow_dispatch: env: - DOCKER_GHCR_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} + DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} BUILD: selfdrive/test/docker_build.sh prebuilt jobs: @@ -15,19 +15,25 @@ jobs: if: github.repository == 'commaai/openpilot' env: PUSH_IMAGE: true + permissions: + checks: read + contents: read + packages: write steps: - name: Wait for green check mark if: ${{ github.event_name != 'workflow_dispatch' }} - uses: lewagon/wait-on-check-action@e2558238c09778af25867eb5de5a3ce4bbae3dcd + uses: lewagon/wait-on-check-action@595dabb3acf442d47e29c9ec9ba44db0c6bdd18f with: ref: master wait-interval: 30 running-workflow-name: 'build prebuilt' + repo-token: ${{ secrets.GITHUB_TOKEN }} check-regexp: ^((?!.*(build master-ci).*).)*$ - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true + - run: git lfs pull - name: Build and Push docker image run: | - $DOCKER_GHCR_LOGIN + $DOCKER_LOGIN eval "$BUILD" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c57a17bbd2..38dbf07a47 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,7 +1,7 @@ name: release on: schedule: - - cron: '0 * * * *' + - cron: '0 10 * * *' workflow_dispatch: jobs: @@ -14,6 +14,9 @@ jobs: image: ghcr.io/commaai/openpilot-base:latest runs-on: ubuntu-20.04 if: github.repository == 'commaai/openpilot' + permissions: + checks: read + contents: write steps: - name: Install wait-on-check-action dependencies run: | @@ -21,13 +24,14 @@ jobs: sudo apt-get install -y libyaml-dev - name: Wait for green check mark if: ${{ github.event_name != 'workflow_dispatch' }} - uses: lewagon/wait-on-check-action@e2558238c09778af25867eb5de5a3ce4bbae3dcd + uses: lewagon/wait-on-check-action@595dabb3acf442d47e29c9ec9ba44db0c6bdd18f with: ref: master wait-interval: 30 running-workflow-name: 'build master-ci' + repo-token: ${{ secrets.GITHUB_TOKEN }} check-regexp: ^((?!.*(build prebuilt).*).)*$ - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 diff --git a/.github/workflows/repo-maintenance.yaml b/.github/workflows/repo-maintenance.yaml index 060b7f3e6c..bd882210fa 100644 --- a/.github/workflows/repo-maintenance.yaml +++ b/.github/workflows/repo-maintenance.yaml @@ -2,17 +2,42 @@ name: repo maintenance on: schedule: - - cron: "0 15 * * 2" + - cron: "0 12 * * 1" # every Monday at 12am UTC (4am PST) workflow_dispatch: jobs: - updates: - name: updates + bump_submodules: + name: bump_submodules runs-on: ubuntu-20.04 container: image: ghcr.io/commaai/openpilot-base:latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + submodules: true + - name: bump submodules + run: | + git config --global --add safe.directory '*' + git -c submodule."tinygrad".update=none submodule update --remote + git add . + - name: Create Pull Request + uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5 + with: + token: ${{ secrets.ACTIONS_CREATE_PR_PAT }} + commit-message: bump submodules + title: '[bot] Bump submodules' + branch: auto-bump-submodules + base: master + delete-branch: true + body: 'Automatic PR from repo-maintenance -> bump_submodules' + labels: bot + package_updates: + name: package_updates + runs-on: ubuntu-20.04 + container: + image: ghcr.io/commaai/openpilot-base:latest + steps: + - uses: actions/checkout@v4 - name: poetry lock run: | pip install poetry @@ -26,7 +51,9 @@ jobs: with: token: ${{ secrets.ACTIONS_CREATE_PR_PAT }} commit-message: Update Python packages and pre-commit hooks - title: 'Update Python packages and pre-commit hooks' + title: '[bot] Update Python packages and pre-commit hooks' branch: auto-package-updates base: master delete-branch: true + body: 'Automatic PR from repo-maintenance -> package_updates' + labels: bot diff --git a/.github/workflows/selfdrive_tests.yaml b/.github/workflows/selfdrive_tests.yaml index f7aba648a4..964c36776e 100644 --- a/.github/workflows/selfdrive_tests.yaml +++ b/.github/workflows/selfdrive_tests.yaml @@ -5,6 +5,7 @@ on: branches: - master pull_request: + workflow_dispatch: concurrency: group: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }} @@ -16,18 +17,16 @@ env: CL_BASE_IMAGE: openpilot-base-cl AZURE_TOKEN: ${{ secrets.AZURE_COMMADATACI_OPENPILOTCI_TOKEN }} - DOCKER_GHCR_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} - DOCKER_HUB_LOGIN: docker login -u adeebshihadeh -p ${{ secrets.DOCKER_HUB_PAT }} + DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} BUILD: selfdrive/test/docker_build.sh base - RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONWARNINGS=error -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/sh -c + RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e CI=1 -e PRE_COMMIT_HOME=/tmp/pre-commit -e PYTHONWARNINGS=error -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/pre-commit:/tmp/pre-commit -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c BUILD_CL: selfdrive/test/docker_build.sh cl - RUN_CL: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONWARNINGS=error -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $CL_BASE_IMAGE /bin/sh -c + RUN_CL: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e CI=1 -e PYTHONWARNINGS=error -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $CL_BASE_IMAGE /bin/bash -c - UNIT_TEST: coverage run --append -m unittest discover - PYTEST: pytest --continue-on-collection-errors --cov --cov-report=xml --cov-append --durations=0 --durations-min=5 + PYTEST: pytest --continue-on-collection-errors --cov --cov-report=xml --cov-append --durations=0 --durations-min=5 --hypothesis-seed 0 jobs: build_release: @@ -36,12 +35,14 @@ jobs: env: STRIPPED_DIR: /tmp/releasepilot steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true + - run: git lfs pull - name: Build devel timeout-minutes: 1 run: TARGET_DIR=$STRIPPED_DIR release/build_devel.sh + - uses: ./.github/workflows/setup-pre-commit - uses: ./.github/workflows/setup-with-retry - name: Check submodules if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot' @@ -51,13 +52,13 @@ jobs: timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache run: | cd $STRIPPED_DIR - ${{ env.RUN }} "CI=1 python selfdrive/manager/build.py" + ${{ env.RUN }} "python selfdrive/manager/build.py" - name: Run tests - timeout-minutes: 2 + timeout-minutes: 3 run: | cd $STRIPPED_DIR ${{ env.RUN }} "release/check-dirty.sh && \ - python -m unittest discover selfdrive/car" + MAX_EXAMPLES=5 $PYTEST selfdrive/car" - name: pre-commit timeout-minutes: 3 run: | @@ -66,145 +67,45 @@ jobs: cp pyproject.toml $STRIPPED_DIR cp poetry.lock $STRIPPED_DIR cd $STRIPPED_DIR - ${{ env.RUN }} "unset PYTHONWARNINGS && pre-commit run --all" + ${{ env.RUN }} "unset PYTHONWARNINGS && SKIP=check-added-large-files pre-commit run --all && chmod -R 777 /tmp/pre-commit" build: strategy: matrix: - arch: ${{ fromJson( (github.repository == 'commaai/openpilot') && '["x86_64", "aarch64"]' || '["x86_64"]' ) }} - runs-on: ${{ (matrix.arch == 'aarch64') && 'buildjet-2vcpu-ubuntu-2204-arm' || 'ubuntu-20.04' }} + arch: ${{ fromJson( + ((github.repository == 'commaai/openpilot') && + ((github.event_name != 'pull_request') || + (github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && '["x86_64", "aarch64"]' || '["x86_64"]' ) }} + runs-on: ${{ (matrix.arch == 'aarch64') && 'namespace-profile-arm64-2x8' || 'ubuntu-20.04' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - # login only on arm machines, due to buildjet rate limits - - name: Setup docker - if: contains(runner.name, 'buildjet') - run: | - $DOCKER_HUB_LOGIN - uses: ./.github/workflows/setup-with-retry with: - cache_key_prefix: scons_${{ matrix.arch }} + docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }} - uses: ./.github/workflows/compile-openpilot timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 15 || 30) }} # allow more time when we missed the scons cache - with: - cache_key_prefix: scons_${{ matrix.arch }} - - build_mac: - name: build macos - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - name: Determine pre-existing Homebrew packages - if: steps.dependency-cache.outputs.cache-hit != 'true' - run: | - echo 'EXISTING_CELLAR<> $GITHUB_ENV - brew list --formula -1 >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - name: Restore scons cache - id: scons-restore-cache - uses: actions/cache/restore@v3 - with: - path: /tmp/scons_cache - key: macos_scons-${{ github.sha }} - restore-keys: macos_scons- - - name: Cache dependencies - id: dependency-cache - uses: actions/cache@v3 - with: - path: | - .env - .venv - ~/github_brew_cache_entries.txt - ~/.pyenv - ~/Library/Caches/pypoetry - /usr/local/Cellar - /usr/local/opt - /usr/local/Caskroom/gcc-arm-* - /opt/homebrew/Cellar - /opt/homebrew/opt - /opt/homebrew/Caskroom/gcc-arm-* - /Applications/ArmGNUToolchain/*/*/* - key: macos_deps-${{ hashFiles('tools/mac_setup.sh', 'tools/install_python_dependencies.sh', 'poetry.lock') }} - restore-keys: macos_deps- - - name: Brew link restored dependencies - run: | - if [ -f ~/github_brew_cache_entries.txt ]; then - brew link --force --overwrite $(cat ~/github_brew_cache_entries.txt) # `--force` for keg-only packages - if [ -d /Applications/ArmGNUToolchain ]; then # link gcc-arm-embedded manually - GCC_TOOLCHAIN="$(echo /Applications/ArmGNUToolchain/**/**/bin)" - echo "$GCC_TOOLCHAIN" >> $GITHUB_PATH - fi - else - echo "Cache entries not found" - fi - - name: Install dependencies - if: steps.dependency-cache.outputs.cache-hit != 'true' - run: ./tools/mac_setup.sh - env: - # package install has DeprecationWarnings - PYTHONWARNINGS: default - - name: Build openpilot - run: | - eval "$(pyenv init --path)" - poetry run scons -j$(nproc) - - name: Run tests - run: | - eval "$(pyenv init --path)" - poetry run tools/plotjuggler/test_plotjuggler.py - - name: Pre Cache - Cleanup scons cache - if: github.ref == 'refs/heads/master' - run: | - rm -rf /tmp/scons_cache/* - eval "$(pyenv init --path)" - poetry run scons -j$(nproc) --cache-populate - - name: Save scons cache - id: scons-save-cache - uses: actions/cache/save@v3 - if: github.ref == 'refs/heads/master' - with: - path: /tmp/scons_cache - key: macos_scons-${{ github.sha }} - - name: Pre Cache - Remove pre-existing Homebrew packages - if: steps.dependency-cache.outputs.cache-hit != 'true' - run: | - new_cellar=$(brew list --formula -1) - exceptions="zstd lz4 xz" # caching step needs zstd - comm -12 <(echo "$EXISTING_CELLAR") <(echo "$new_cellar") | while read pkg; do - if [[ " $exceptions " != *" $pkg "* ]]; then - rm -rf "$(brew --cellar)/$pkg" - fi - done - comm -13 <(echo "$EXISTING_CELLAR") <(echo "$new_cellar") | tee ~/github_brew_cache_entries.txt - # .fseventsd directory causes permission errors in dep caching step - # its used by the system to observe changes within the directory - toolchain works without it, just remove it - sudo rm -rf /Applications/ArmGNUToolchain/*/*/.fseventsd docker_push: + name: docker push strategy: matrix: arch: ${{ fromJson( (github.repository == 'commaai/openpilot') && '["x86_64", "aarch64"]' || '["x86_64"]' ) }} - runs-on: ${{ (matrix.arch == 'aarch64') && 'buildjet-2vcpu-ubuntu-2204-arm' || 'ubuntu-20.04' }} + runs-on: ${{ (matrix.arch == 'aarch64') && 'namespace-profile-arm64-2x8' || 'ubuntu-20.04' }} if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Setup to push to repo run: | echo "PUSH_IMAGE=true" >> "$GITHUB_ENV" echo "TARGET_ARCHITECTURE=${{ matrix.arch }}" >> "$GITHUB_ENV" - $DOCKER_GHCR_LOGIN - # login only on arm machines, due to buildjet rate limits - - name: Additional setup for buildjet - if: contains(runner.name, 'buildjet') - run: | - $DOCKER_HUB_LOGIN + $DOCKER_LOGIN - uses: ./.github/workflows/setup-with-retry with: - git-lfs: false + docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }} - name: Build and push CL Docker image if: matrix.arch == 'x86_64' run: | @@ -217,12 +118,12 @@ jobs: if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' needs: [docker_push] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: false - name: Setup docker run: | - $DOCKER_GHCR_LOGIN + $DOCKER_LOGIN - name: Merge x64 and arm64 tags run: | export PUSH_IMAGE=true @@ -230,22 +131,24 @@ jobs: static_analysis: name: static analysis - runs-on: ubuntu-20.04 + runs-on: ${{ ((github.repository == 'commaai/openpilot') && + ((github.event_name != 'pull_request') || + (github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - - name: Build Docker image - run: eval "$BUILD" + - uses: ./.github/workflows/setup-pre-commit + - uses: ./.github/workflows/setup-with-retry - name: pre-commit timeout-minutes: 4 - run: ${{ env.RUN }} "unset PYTHONWARNINGS && pre-commit run --all" + run: ${{ env.RUN }} "unset PYTHONWARNINGS && pre-commit run --all && chmod -R 777 /tmp/pre-commit" valgrind: name: valgrind runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -261,36 +164,47 @@ jobs: unit_tests: name: unit tests - runs-on: ubuntu-20.04 + runs-on: ${{ ((github.repository == 'commaai/openpilot') && + ((github.event_name != 'pull_request') || + (github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry + with: + docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }} - name: Build openpilot timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache run: ${{ env.RUN }} "scons -j$(nproc)" - name: Run unit tests - timeout-minutes: 40 + timeout-minutes: 15 run: | - ${{ env.RUN }} "export SKIP_LONG_TESTS=1 && \ - $PYTEST -n auto --dist=loadscope --timeout 30 -o cpp_files=test_* && \ + ${{ env.RUN }} "source selfdrive/test/setup_xvfb.sh && \ + export MAPBOX_TOKEN='pk.eyJ1Ijoiam5ld2IiLCJhIjoiY2xxNW8zZXprMGw1ZzJwbzZneHd2NHljbSJ9.gV7VPRfbXFetD-1OVF0XZg' && \ + $PYTEST --timeout 60 -m 'not slow' -n $(nproc) && \ ./selfdrive/ui/tests/create_test_translations.sh && \ QT_QPA_PLATFORM=offscreen ./selfdrive/ui/tests/test_translations && \ - ./selfdrive/ui/tests/test_translations.py && \ - ./system/camerad/test/ae_gray_test && \ - ./selfdrive/test/process_replay/test_fuzzy.py" + ./selfdrive/ui/tests/test_translations.py" - name: "Upload coverage to Codecov" uses: codecov/codecov-action@v3 + with: + name: ${{ github.job }} + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} process_replay: name: process replay - runs-on: ${{ ((github.event.pull_request.head.repo.full_name == 'commaai/openpilot') || (github.repository == 'commaai/openpilot')) && 'buildjet-8vcpu-ubuntu-2004' || 'ubuntu-20.04' }} + runs-on: ${{ ((github.repository == 'commaai/openpilot') && + ((github.event_name != 'pull_request') || + (github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry + with: + docker_hub_pat: ${{ secrets.DOCKER_HUB_PAT }} - name: Cache test routes id: dependency-cache uses: actions/cache@v3 @@ -303,14 +217,15 @@ jobs: - name: Run replay timeout-minutes: 30 run: | - ${{ env.RUN }} "CI=1 coverage run selfdrive/test/process_replay/test_processes.py -j$(nproc) && \ + ${{ env.RUN }} "coverage run selfdrive/test/process_replay/test_processes.py -j$(nproc) && \ chmod -R 777 /tmp/comma_download_cache && \ + coverage combine && \ coverage xml" - name: Print diff id: print-diff if: always() run: cat selfdrive/test/process_replay/diff.txt - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 if: always() continue-on-error: true with: @@ -319,15 +234,46 @@ jobs: - name: Upload reference logs if: ${{ failure() && steps.print-diff.outcome == 'success' && github.repository == 'commaai/openpilot' && env.AZURE_TOKEN != '' }} run: | - ${{ env.RUN }} "unset PYTHONWARNINGS && CI=1 AZURE_TOKEN='$AZURE_TOKEN' python selfdrive/test/process_replay/test_processes.py -j$(nproc) --upload-only" + ${{ env.RUN }} "unset PYTHONWARNINGS && AZURE_TOKEN='$AZURE_TOKEN' python selfdrive/test/process_replay/test_processes.py -j$(nproc) --upload-only" - name: "Upload coverage to Codecov" uses: codecov/codecov-action@v3 + with: + name: ${{ github.job }} + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + regen: + name: regen + runs-on: 'ubuntu-20.04' + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: ./.github/workflows/setup-with-retry + - name: Cache test routes + id: dependency-cache + uses: actions/cache@v3 + with: + path: .ci_cache/comma_download_cache + key: regen-${{ hashFiles('.github/workflows/selfdrive_tests.yaml', 'selfdrive/test/process_replay/test_regen.py') }} + - name: Build base Docker image + run: eval "$BUILD" + - name: Build Docker image + run: eval "$BUILD_CL" + - name: Build openpilot + run: | + ${{ env.RUN }} "scons -j$(nproc)" + - name: Run regen + timeout-minutes: 30 + run: | + ${{ env.RUN_CL }} "ONNXCPU=1 $PYTEST selfdrive/test/process_replay/test_regen.py && \ + chmod -R 777 /tmp/comma_download_cache" test_modeld: name: model tests runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -341,35 +287,41 @@ jobs: ${{ env.RUN }} "scons -j$(nproc)" # PYTHONWARNINGS triggers a SyntaxError in onnxruntime - name: Run model replay with ONNX - timeout-minutes: 3 + timeout-minutes: 4 run: | ${{ env.RUN_CL }} "unset PYTHONWARNINGS && \ - ONNXCPU=1 CI=1 NO_NAV=1 coverage run selfdrive/test/process_replay/model_replay.py && \ + ONNXCPU=1 NO_NAV=1 coverage run selfdrive/test/process_replay/model_replay.py && \ + coverage combine && \ coverage xml" - name: Run unit tests timeout-minutes: 4 run: | ${{ env.RUN_CL }} "unset PYTHONWARNINGS && \ - $UNIT_TEST selfdrive/modeld && \ - coverage xml" + $PYTEST selfdrive/modeld" - name: "Upload coverage to Codecov" uses: codecov/codecov-action@v3 + with: + name: ${{ github.job }} + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} test_cars: name: cars - runs-on: ubuntu-20.04 + runs-on: ${{ ((github.repository == 'commaai/openpilot') && + ((github.event_name != 'pull_request') || + (github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'namespace-profile-amd64-8x16' || 'ubuntu-20.04' }} strategy: fail-fast: false matrix: job: [0, 1, 2, 3, 4] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry - name: Cache test routes id: dependency-cache - uses: actions/cache@v3 + uses: ./.github/workflows/auto-cache with: path: .ci_cache/comma_download_cache key: car_models-${{ hashFiles('selfdrive/car/tests/test_models.py', 'selfdrive/car/tests/routes.py') }}-${{ matrix.job }} @@ -378,32 +330,38 @@ jobs: - name: Test car models timeout-minutes: 25 run: | - ${{ env.RUN }} "$PYTEST -n auto --dist=loadscope selfdrive/car/tests/test_models.py && \ + ${{ env.RUN }} "$PYTEST selfdrive/car/tests/test_models.py && \ chmod -R 777 /tmp/comma_download_cache" env: NUM_JOBS: 5 JOB_ID: ${{ matrix.job }} - name: "Upload coverage to Codecov" uses: codecov/codecov-action@v3 + with: + name: ${{ github.job }}-${{ matrix.job }} + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} car_docs_diff: name: PR comments runs-on: ubuntu-20.04 if: github.event_name == 'pull_request' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true ref: ${{ github.event.pull_request.base.ref }} + - run: git lfs pull - uses: ./.github/workflows/setup-with-retry - name: Get base car info run: | ${{ env.RUN }} "scons -j$(nproc) && python selfdrive/debug/dump_car_info.py --path /tmp/openpilot_cache/base_car_info" sudo chown -R $USER:$USER ${{ github.workspace }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true path: current + - run: cd current && git lfs pull - name: Save car docs diff id: save_diff run: | @@ -437,3 +395,25 @@ jobs: repo: context.repo.repo, comment_id: ${{ steps.fc.outputs.comment-id }} }) + + create_ui_report: + name: Create UI Report + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: ./.github/workflows/setup-with-retry + - name: Build openpilot + run: ${{ env.RUN }} "scons -j$(nproc)" + - name: Create Test Report + run: > + ${{ env.RUN }} "PYTHONWARNINGS=ignore && + source selfdrive/test/setup_xvfb.sh && + export MAPBOX_TOKEN='pk.eyJ1Ijoiam5ld2IiLCJhIjoiY2xxNW8zZXprMGw1ZzJwbzZneHd2NHljbSJ9.gV7VPRfbXFetD-1OVF0XZg' && + python selfdrive/ui/tests/test_ui/run.py" + - name: Upload Test Report + uses: actions/upload-artifact@v2 + with: + name: report + path: selfdrive/ui/tests/test_ui/report \ No newline at end of file diff --git a/.github/workflows/setup-pre-commit/action.yaml b/.github/workflows/setup-pre-commit/action.yaml new file mode 100644 index 0000000000..1b3e16e73f --- /dev/null +++ b/.github/workflows/setup-pre-commit/action.yaml @@ -0,0 +1,12 @@ +name: 'set up pre-commit environment' + +runs: + using: "composite" + steps: + - uses: ./.github/workflows/auto-cache + with: + path: .ci_cache/pre-commit + key: pre-commit-${{ hashFiles('**/.pre-commit-config.yaml') }} + restore-keys: | + pre-commit- + save: ${{ github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' }} diff --git a/.github/workflows/setup-with-retry/action.yaml b/.github/workflows/setup-with-retry/action.yaml index e4c97af3ce..369ac45c9a 100644 --- a/.github/workflows/setup-with-retry/action.yaml +++ b/.github/workflows/setup-with-retry/action.yaml @@ -1,14 +1,10 @@ name: 'openpilot env setup, with retry on failure' inputs: - git_lfs: - description: 'Whether or not to pull the git lfs' + docker_hub_pat: + description: 'Auth token for Docker Hub, required for BuildJet jobs' required: false - default: 'true' - cache_key_prefix: - description: 'Prefix for caching key' - required: false - default: 'scons_x86_64' + default: '' sleep_time: description: 'Time to sleep between retries' required: false @@ -21,8 +17,7 @@ runs: uses: ./.github/workflows/setup continue-on-error: true with: - git_lfs: ${{ inputs.git_lfs }} - cache_key_prefix: ${{ inputs.cache_key_prefix }} + docker_hub_pat: ${{ inputs.docker_hub_pat }} is_retried: true - if: steps.setup1.outcome == 'failure' shell: bash @@ -32,8 +27,7 @@ runs: uses: ./.github/workflows/setup continue-on-error: true with: - git_lfs: ${{ inputs.git_lfs }} - cache_key_prefix: ${{ inputs.cache_key_prefix }} + docker_hub_pat: ${{ inputs.docker_hub_pat }} is_retried: true - if: steps.setup2.outcome == 'failure' shell: bash @@ -42,6 +36,5 @@ runs: if: steps.setup2.outcome == 'failure' uses: ./.github/workflows/setup with: - git_lfs: ${{ inputs.git_lfs }} - cache_key_prefix: ${{ inputs.cache_key_prefix }} + docker_hub_pat: ${{ inputs.docker_hub_pat }} is_retried: true diff --git a/.github/workflows/setup/action.yaml b/.github/workflows/setup/action.yaml index eebc376346..970d62030d 100644 --- a/.github/workflows/setup/action.yaml +++ b/.github/workflows/setup/action.yaml @@ -1,14 +1,10 @@ name: 'openpilot env setup' inputs: - git_lfs: - description: 'Whether or not to pull the git lfs' - required: false - default: 'true' - cache_key_prefix: - description: 'Prefix for caching key' - required: false - default: 'scons_x86_64' + docker_hub_pat: + description: 'Auth token for Docker Hub, required for BuildJet jobs' + required: true + default: '' is_retried: description: 'A mock param that asserts that we use the setup-with-retry instead of this action directly' required: false @@ -26,28 +22,35 @@ runs: # do this after checkout to ensure our custom LFS config is used to pull from GitLab - shell: bash - if: ${{ inputs.git_lfs == 'true' }} run: git lfs pull + # on BuildJet runners, must be logged into DockerHub to avoid rate limiting + # https://buildjet.com/for-github-actions/docs/guides/docker + - shell: bash + if: ${{ contains(runner.name, 'buildjet') && inputs.docker_hub_pat == '' }} + run: | + echo "Need to set the Docker Hub PAT secret as an input to this action" + exit 1 + - name: Login to Docker Hub + if: contains(runner.name, 'buildjet') + shell: bash + run: | + docker login -u adeebshihadeh -p ${{ inputs.docker_hub_pat }} + # build cache - id: date shell: bash run: echo "CACHE_COMMIT_DATE=$(git log -1 --pretty='format:%cd' --date=format:'%Y-%m-%d-%H:%M')" >> $GITHUB_ENV - shell: bash run: echo "$CACHE_COMMIT_DATE" - - id: restore-scons-cache - uses: actions/cache/restore@v3 + - id: scons-cache + uses: ./.github/workflows/auto-cache with: path: .ci_cache/scons_cache - key: ${{ inputs.cache_key_prefix }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }} + key: scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }} restore-keys: | - ${{ inputs.cache_key_prefix }}-${{ env.CACHE_COMMIT_DATE }}- - ${{ inputs.cache_key_prefix }}- - # if we didn't get a cache hit, make the directory manually so it doesn't fail on future steps - - id: scons-cache-setup - shell: bash - if: steps.restore-scons-cache.outputs.cache-hit != 'true' - run: mkdir -p $GITHUB_WORKSPACE/.ci_cache/scons_cache + scons-${{ runner.arch }}-${{ env.CACHE_COMMIT_DATE }} + scons-${{ runner.arch }} # as suggested here: https://github.com/moby/moby/issues/32816#issuecomment-910030001 - id: normalize-file-permissions shell: bash @@ -55,12 +58,6 @@ runs: run: | find . -type f -executable -not -perm 755 -exec chmod 755 {} \; find . -type f -not -executable -not -perm 644 -exec chmod 644 {} \; - - id: setup-buildx-action - if: contains(runner.name, 'buildjet') - name: Set up Docker Buildx on buildjet to ensure a consistent cache - uses: docker/setup-buildx-action@v2 - with: - driver: docker-container # build our docker image - shell: bash run: eval ${{ env.BUILD }} \ No newline at end of file diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml new file mode 100644 index 0000000000..2d60d2f0e9 --- /dev/null +++ b/.github/workflows/stale.yaml @@ -0,0 +1,28 @@ +name: stale +on: + schedule: + - cron: '30 1 * * *' + workflow_dispatch: + +env: + DAYS_BEFORE_PR_CLOSE: 7 + DAYS_BEFORE_PR_STALE: 30 + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v8 + with: + exempt-milestones: true + + # pull request config + stale-pr-message: 'This PR has had no activity for ${{ env.DAYS_BEFORE_PR_STALE }} days. It will be automatically closed in ${{ env.DAYS_BEFORE_PR_CLOSE }} days if there is no activity.' + close-pr-message: 'This PR has been automatically closed due to inactivity. Feel free to re-open once activity resumes.' + delete-branch: ${{ github.event.pull_request.head.repo.full_name == 'commaai/openpilot' }} # only delete branches on the main repo + exempt-pr-labels: "ignore stale,needs testing,car port" # if wip or it needs testing from the community, don't mark as stale + days-before-pr-stale: ${{ env.DAYS_BEFORE_PR_STALE }} + days-before-pr-close: ${{ env.DAYS_BEFORE_PR_CLOSE }} + + # issue config + days-before-issue-stale: -1 # ignore issues for now diff --git a/.github/workflows/tools_tests.yaml b/.github/workflows/tools_tests.yaml index 27c362fcd6..c185fd1d3c 100644 --- a/.github/workflows/tools_tests.yaml +++ b/.github/workflows/tools_tests.yaml @@ -13,15 +13,15 @@ concurrency: env: BASE_IMAGE: openpilot-base CL_BASE_IMAGE: openpilot-base-cl - DOCKER_GHCR_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} + DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} BUILD: selfdrive/test/docker_build.sh base - RUN: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/sh -c + RUN: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/bash -c BUILD_CL: selfdrive/test/docker_build.sh cl - RUN_CL: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $CL_BASE_IMAGE /bin/sh -c + RUN_CL: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $CL_BASE_IMAGE /bin/bash -c jobs: @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-20.04 timeout-minutes: 45 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -48,7 +48,7 @@ jobs: if: github.repository == 'commaai/openpilot' timeout-minutes: 45 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -58,43 +58,52 @@ jobs: if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot' run: | echo "PUSH_IMAGE=true" >> "$GITHUB_ENV" - $DOCKER_GHCR_LOGIN + $DOCKER_LOGIN - name: Build and push sim image run: | selfdrive/test/docker_build.sh sim - docs: - name: build docs - runs-on: ubuntu-20.04 - timeout-minutes: 45 - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - uses: ./.github/workflows/setup-with-retry - with: - git_lfs: false - - name: Setup to push to repo - if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' - run: | - echo "PUSH_IMAGE=true" >> "$GITHUB_ENV" - $DOCKER_GHCR_LOGIN - - name: Build and push docs image - run: | - selfdrive/test/docker_build.sh docs - devcontainer: name: devcontainer runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true + - uses: ./.github/workflows/setup-with-retry + - name: Use local image for testing devcontainer with latest base image + run: | + echo "USE_LOCAL_IMAGE=true" >> "$GITHUB_ENV" - name: Setup Dev Container CLI run: npm install -g @devcontainers/cli - name: Build dev container image run: devcontainer build --workspace-folder . - name: Run dev container - run: devcontainer up --workspace-folder . + run: | + mkdir -p /tmp/devcontainer_scons_cache/ + cp -r $GITHUB_WORKSPACE/.ci_cache/scons_cache/. /tmp/devcontainer_scons_cache/ + devcontainer up --workspace-folder . - name: Test environment - run: devcontainer exec --workspace-folder . scons --dry-run + run: | + devcontainer exec --workspace-folder . scons -j$(nproc) cereal/ common/ + devcontainer exec --workspace-folder . pip install pip-install-test + devcontainer exec --workspace-folder . touch /home/batman/.comma/auth.json + devcontainer exec --workspace-folder . sudo touch /root/test.txt + + notebooks: + name: notebooks + runs-on: ubuntu-20.04 + if: github.repository == 'commaai/openpilot' + timeout-minutes: 45 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: ./.github/workflows/setup-with-retry + - name: Build openpilot + timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache + run: ${{ env.RUN }} "scons -j$(nproc)" + - name: Test notebooks + timeout-minutes: 2 + run: | + ${{ env.RUN }} "pip install nbmake && pytest --nbmake tools/car_porting/examples/" \ No newline at end of file diff --git a/.gitignore b/.gitignore index a0c8df3142..3e91531d08 100644 --- a/.gitignore +++ b/.gitignore @@ -46,8 +46,8 @@ selfdrive/boardd/boardd selfdrive/logcatd/logcatd selfdrive/mapd/default_speeds_by_region.json system/proclogd/proclogd -selfdrive/ui/_ui selfdrive/ui/translations/alerts_generated.h +selfdrive/ui/translations/tmp selfdrive/test/longitudinal_maneuvers/out selfdrive/car/tests/cars_dump system/camerad/camerad @@ -78,6 +78,7 @@ comma*.sh selfdrive/modeld/thneed/compile selfdrive/modeld/models/*.thneed +selfdrive/modeld/models/*.pkl *.bz2 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000..5f0cdc3cef --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,204 @@ +variables: + BUILD_DIR: "/data/openpilot" + OUTPUT_DIR: "${CI_PROJECT_DIR}/output" + CI_DIR: "${CI_PROJECT_DIR}/release/ci" + VERSION: 'echo $(date "+%Y.%m.%d")' + GIT_SUBMODULE_STRATEGY: recursive + GIT_DISCOVERY_ACROSS_FILESYSTEM: 1 + DEV_C3_SOURCE_BRANCH: "master-dev-c3" + GIT_CONFIG_USER_EMAIL: "gitlab@pipeline.com" + GIT_CONFIG_USER_NAME: "Gitlab Pipeline" + PUBLIC_REPO_URL: "https://github.com/sunnyhaibin/sunnypilot" + +stages: + - build + - publish + - notify + +default: + retry: 2 + tags: + - sunnypilot + - x86 + +.default_before_script: &default_before_script + - 'export VERSION=$(eval $VERSION)${EXTRA_VERSION_IDENTIFIER}' + - 'mkdir -p "${BUILD_DIR}/"' + - 'git config --global user.email "${GIT_CONFIG_USER_EMAIL}"' + - 'git config --global user.name "${GIT_CONFIG_USER_NAME}"' + + +workflow: # If running on any branch other than main, use the `aws-datacontracts-dev` account; otherwise use `aws-datacontracts` + rules: + # We are an MR, but it's a draft, we won't proceed with anything. + - if: '$CI_MERGE_REQUEST_TITLE =~ /^wip:/i || $CI_MERGE_REQUEST_TITLE =~ /^draft:/i' + when: never + # We are a merge request + - if: $CI_MERGE_REQUEST_IID #|| $CI_COMMIT_REF_NAME == "gitlab-pipelines" # TBD once merged + variables: + EXTRA_VERSION_IDENTIFIER: "-${CI_PIPELINE_IID}" + NEW_BRANCH: ${CI_COMMIT_REF_NAME}-prebuilt + when: always + + # Below are the rules when a commit is done (code has been added to the branch) + # Commit to master-dev-c3 + - if: $CI_COMMIT_REF_NAME == $DEV_C3_SOURCE_BRANCH + variables: + EXTRA_VERSION_IDENTIFIER: "-${CI_PIPELINE_IID}" + NEW_BRANCH: "dev-c3" + when: always + #commit made to main (master) + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH + variables: + NEW_BRANCH: "staging-c3" + VERSION: 'cat common/version.h | grep COMMA_VERSION | sed -e "s/[^0-9|.]//g"' + EXTRA_VERSION_IDENTIFIER: "-staging" + when: always + # if tag + - if: $CI_COMMIT_TAG + variables: + NEW_BRANCH: "release-c3" + VERSION: 'cat common/version.h | grep COMMA_VERSION | sed -e "s/[^0-9|.]//g"' + EXTRA_VERSION_IDENTIFIER: "-release" + - when: always + + +build: + stage: build + cache: + key: "${CI_COMMIT_REF_SLUG}" + paths: + - "${CI_DIR}/scons_cache" + before_script: + - *default_before_script + - "echo Starting build stage..." + - "echo BUILD_DIR: ${BUILD_DIR}" + - "echo CI_DIR: ${CI_DIR}" + - "echo VERSION: ${VERSION}" + - "echo CI_COMMIT_REF_NAME: ${CI_COMMIT_REF_NAME}" + - git config --global --add safe.directory ${CI_PROJECT_DIR} + script: + - export PYTHONPATH="$BUILD_DIR" + - "echo Calling to build [${CI_DIR}/build.sh ${CI_PROJECT_DIR} ${BUILD_DIR} ${VERSION}]" + - "echo Building Panda..." + - scons -j$(nproc) cache_dir=${CI_DIR}/scons_cache ${CI_PROJECT_DIR}/panda + - mkdir -p ${BUILD_DIR} + - ls -la ${BUILD_DIR} + - "echo Building Rest..." + - cp -pR --parents $(cat release/files_common release/files_tici | sort | uniq) $BUILD_DIR/ 2> >(grep -v 'warning:' >&2) + - cd $BUILD_DIR + - sed -i '/from .board.jungle import PandaJungle, PandaJungleDFU/s/^/#/' panda/__init__.py # comment panda jungle when prebuilt + - scons -j$(nproc) cache_dir=${CI_DIR}/scons_cache + + # Cleanup + - echo "Doing cleanup for prebuilt\n\n" + - echo "Deleting specified files..." + - find ${BUILD_DIR} \( -name '*.a' -o -name '*.o' -o -name '*.os' -o -name '*.pyc' -o -name 'moc_*' -o -name '*.cc' -o -name "Jenkinsfile" -o -name "supercombo.onnx" -o -name ".sconsign.dblite" \) -print -delete + + - echo "Deleting Headers from selfdrive/ui path..." + - find ${BUILD_DIR}/selfdrive/ui -type f -name '*.h' -print -delete + + - echo "Deleting the following folders and subdirectories..." + - find "${BUILD_DIR}" -type d \( -path "*panda/board" -o -path "*panda/certs" -o -path "*panda/crypto" -o -path "*release" -o -path "*.github" -o -path "*selfdrive/ui/replay" -o -path "*__pycache__" \) -print -exec rm -rf {} + + + # Move back signed panda fw + - mkdir -p ${BUILD_DIR}/panda/board/obj + - cp ${CI_PROJECT_DIR}/panda/board/obj/panda.bin.signed ${BUILD_DIR}/panda/board/obj/panda.bin.signed + - cp ${CI_PROJECT_DIR}/panda/board/obj/panda_h7.bin.signed ${BUILD_DIR}/panda/board/obj/panda_h7.bin.signed + - cp ${CI_PROJECT_DIR}/panda/board/obj/bootstub.panda.bin ${BUILD_DIR}/panda/board/obj/bootstub.panda.bin + - cp ${CI_PROJECT_DIR}/panda/board/obj/bootstub.panda_h7.bin ${BUILD_DIR}/panda/board/obj/bootstub.panda_h7.bin + - touch ${BUILD_DIR}/prebuilt + - mkdir -p ${OUTPUT_DIR} + - shopt -s dotglob && mv ${BUILD_DIR}/* ${OUTPUT_DIR} + - sudo chown -R comma:comma ${OUTPUT_DIR} + artifacts: + paths: + - ${OUTPUT_DIR}/ + tags: [ 'sunnypilot', 'tici' ] + rules: + - if: $CI_MERGE_REQUEST_IID + when: manual + - if: $NEW_BRANCH + when: always + +.publish_base: &publish_base + variables: + GIT_SUBMODULE_STRATEGY: normal + stage: publish + needs: + - job: build + artifacts: true + before_script: + - 'apk update && apk upgrade' + - 'apk add git bash openssh' + - 'eval $(ssh-agent -s)' + - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - 'mkdir -p ~/.ssh/' + - 'chmod 700 ~/.ssh' + - export HOST=$(echo ${GIT_ORIGIN} | cut -d'@' -f2 | cut -d':' -f1) + - echo fetching ssh pub keys for ${HOST} + - 'ssh-keyscan -H ${HOST} >> ~/.ssh/known_hosts' # Adding gitlab to trusted + - 'chmod 644 ~/.ssh/known_hosts' + - *default_before_script + script: + - echo "${GIT_ORIGIN}" + - echo "Calling to publish [${CI_DIR}/publish.sh ${CI_PROJECT_DIR} ${OUTPUT_DIR} ${NEW_BRANCH} ${VERSION} ${GIT_ORIGIN}]" + - git config --global --add safe.directory ${OUTPUT_DIR} + - $CI_DIR/publish.sh "${CI_PROJECT_DIR}" "${OUTPUT_DIR}" "${NEW_BRANCH}" "${VERSION}" "${GIT_ORIGIN}" "${EXTRA_VERSION_IDENTIFIER}" + +publish to private gitlab prebuilt: + extends: ".publish_base" + variables: + GIT_ORIGIN: git@gitlab.com:sunnypilot/public/sunnypilot.git + rules: + - if: $NEW_BRANCH + when: on_success + - when: never + +publish to public github prebuilt: + extends: ".publish_base" + variables: + GIT_ORIGIN: git@github.com:sunnyhaibin/sunnypilot.git + GIT_CONFIG_USER_EMAIL: "jason.wen@sunnypilot.ai" + GIT_CONFIG_USER_NAME: "Jason Wen" + rules: + - if: $NEW_BRANCH + when: manual + - when: never + +.notify_discord: ¬ify_discord + stage: notify + needs: ["build"] + variables: + DISCORD_HOOK: "${DISCORD_MANUAL_BUILD_WEBHOOK_URL}" # Default hook if not overriden by children + before_script: + - 'apk add curl jq envsubst' + script: + - echo using [${TEMPLATE}] + - cat release/ci/${TEMPLATE} | envsubst | tee payload.json + - 'curl -X POST -H "Content-Type: application/json" -d "$(cat payload.json)" ${DISCORD_HOOK} | jq .' + rules: + - if: $NEW_BRANCH + when: on_success + - when: never + allow_failure: true + +notify pending action: + extends: ".notify_discord" + variables: + TEMPLATE: "discord_template_notify_dev_private.json" + before_script: + - !reference [".notify_discord", "before_script"] + - export AVATAR_URL=$(curl -s -X GET "https://gitlab.com/api/v4/avatar?email=${GITLAB_USER_EMAIL}" | jq -r '.avatar_url') + +notify new dev build: + extends: ".notify_discord" + stage: notify + needs: ["publish to public github prebuilt"] # This notify shall only happen after a publish to github public + variables: + TEMPLATE: "discord_template_notify_dev_public.json" + rules: + - if: $NEW_BRANCH == "dev-c3" + variables: + DISCORD_HOOK: "${DISCORD_NEW_BUILD_WEBHOOK_URL}" # Overriding hook because we know we are dev-c3 + - !reference [".notify_discord", "rules"] diff --git a/.gitmodules b/.gitmodules index 8a98b520e3..b6525f649e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,19 +3,19 @@ url = ../../sunnyhaibin/panda-special.git [submodule "opendbc"] path = opendbc - url = ../../sunnyhaibin/opendbc.git -[submodule "laika_repo"] - path = laika_repo - url = ../../commaai/laika.git + url = https://github.com/sunnyhaibin/opendbc.git [submodule "cereal"] path = cereal - url = ../../sunnyhaibin/cereal.git + url = https://github.com/sunnyhaibin/cereal.git [submodule "rednose_repo"] path = rednose_repo - url = ../../commaai/rednose.git + url = https://github.com/commaai/rednose.git [submodule "body"] path = body - url = ../../commaai/body.git + url = https://github.com/commaai/body.git +[submodule "teleoprtc_repo"] + path = teleoprtc_repo + url = https://github.com/commaai/teleoprtc [submodule "tinygrad"] path = tinygrad_repo url = https://github.com/geohot/tinygrad.git diff --git a/.idea/customTargets.xml b/.idea/customTargets.xml new file mode 100644 index 0000000000..457f9942d0 --- /dev/null +++ b/.idea/customTargets.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/tools/External Tools.xml b/.idea/tools/External Tools.xml new file mode 100644 index 0000000000..75b33a6fd7 --- /dev/null +++ b/.idea/tools/External Tools.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a5da03b266..fa05b5b8a2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,11 +5,12 @@ repos: - id: check-hooks-apply - id: check-useless-excludes - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.5.0 hooks: - id: check-ast exclude: '^(third_party)/' - id: check-json + exclude: '.devcontainer/devcontainer.json' # this supports JSON with comments - id: check-toml - id: check-xml - id: check-yaml @@ -18,15 +19,18 @@ repos: - id: check-executables-have-shebangs - id: check-shebang-scripts-are-executable - id: check-added-large-files - args: ['--maxkb=100'] + exclude: '(docs/CARS.md)|(poetry.lock)|(third_party/acados/include/blasfeo/include/blasfeo_d_kernel.h)' + args: + - --maxkb=120 + - --enforce-all - repo: https://github.com/codespell-project/codespell - rev: v2.2.5 + rev: v2.2.6 hooks: - id: codespell - exclude: '^(third_party/)|(body/)|(cereal/)|(rednose/)|(panda/)|(laika/)|(opendbc/)|(laika_repo/)|(rednose_repo/)|(selfdrive/ui/translations/.*.ts)|(poetry.lock)' + exclude: '^(third_party/)|(body/)|(cereal/)|(panda/)|(opendbc/)|(rednose/)|(rednose_repo/)|(teleoprtc/)|(teleoprtc_repo/)|(selfdrive/ui/translations/.*.ts)|(poetry.lock)' args: # if you've got a short variable name that's getting flagged, add it here - - -L bu,ro,te,ue,alo,hda,ois,nam,nams,ned,som,parm,setts,inout,warmup,bumb,nd,sie + - -L bu,ro,te,ue,alo,hda,ois,nam,nams,ned,som,parm,setts,inout,warmup,bumb,nd,sie,preints - --builtins clear,rare,informal,usage,code,names,en-GB_to_en-US - repo: local hooks: @@ -35,13 +39,15 @@ repos: entry: mypy language: system types: [python] - args: ['--explicit-package-bases'] - exclude: '^(third_party/)|(cereal/)|(opendbc/)|(panda/)|(laika/)|(laika_repo/)|(rednose/)|(rednose_repo/)|(tinygrad/)|(tinygrad_repo/)|(xx/)' + args: + - --local-partial-types + - --explicit-package-bases + exclude: '^(third_party/)|(cereal/)|(opendbc/)|(panda/)|(rednose/)|(rednose_repo/)|(tinygrad/)|(tinygrad_repo/)|(teleoprtc/)|(teleoprtc_repo/)|(xx/)' - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.0.288 + rev: v0.1.14 hooks: - id: ruff - exclude: '^(third_party/)|(cereal/)|(rednose/)|(panda/)|(laika/)|(laika_repo/)|(rednose_repo/)|(tinygrad/)|(tinygrad_repo/)' + exclude: '^(third_party/)|(cereal/)|(panda/)|(rednose/)|(rednose_repo/)|(tinygrad/)|(tinygrad_repo/)|(teleoprtc/)|(teleoprtc_repo/)' - repo: local hooks: - id: cppcheck @@ -75,15 +81,15 @@ repos: entry: selfdrive/ui/tests/test_translations.py language: script pass_filenames: false + files: 'selfdrive/ui/translations/*' - repo: https://github.com/python-poetry/poetry - rev: '1.6.0' + rev: '1.7.0' hooks: - id: poetry-check - - id: poetry-lock name: validate poetry lock args: - - --check + - --lock - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.26.3 + rev: 0.27.3 hooks: - id: check-github-workflows diff --git a/.run/Build Debug.run.xml b/.run/Build Debug.run.xml new file mode 100644 index 0000000000..a7b47c9011 --- /dev/null +++ b/.run/Build Debug.run.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.run/Build Release.run.xml b/.run/Build Release.run.xml new file mode 100644 index 0000000000..cbf6343e87 --- /dev/null +++ b/.run/Build Release.run.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/CHANGELOGS.md b/CHANGELOGS.md index 381d8e0326..76cbb73382 100644 --- a/CHANGELOGS.md +++ b/CHANGELOGS.md @@ -1,35 +1,168 @@ -sunnypilot - 0.9.5.1 (2023-09-27) +sunnypilot - 0.9.6.0 (2024-xx-xx) ======================== -* UPDATED: Synced with commaai's 0.9.5 release -* NEW❗: Non-Inflatable driving model +* UPDATED: Synced with commaai's master commit c9bd4e4 (February 2, 2024) +* NEW❗: Default Driving Model: Los Angeles v2 (January 24, 2024) +* UPDATED: Driving Model Selector v3 + * NEW❗: Driving Model additions + * Certified Herbalist (February 5, 2024) - CH + * Los Angeles v2 (January 24, 2024) - LAv2 + * Los Angeles (January 22, 2024) - LAv1 + * NEW❗: Model Caching thanks to DevTekVE! + * Model caching allows the selection of previously downloaded Driving Model + * Users can now access cached versions of selected models, eliminating redundant downloads for previously fetched models + * Legacy Driving Models support + * New Delhi (December 21, 2023) - ND + * Blue Diamond v2 (December 11, 2023) - BDv2 + * Blue Diamond (November 18, 2023) - BDv1 + * Farmville (November 7, 2023) - FV + * Night Strike (October 3, 2023) - NS + * Certain features are deprecated with Legacy Driving Models + * Dynamic Lane Profile + * Custom Offsets +* UPDATED: Dynamic Lane Profile (DLP) + * Continued support for Legacy Driving Models (e.g., ND, BDv2, BDv1, FV, NS) + * Deprecate support for newer Driving Models (e.g., CH, LAv2, LAv1) +* UPDATED: Custom Offsets + * Continued support for Legacy Driving Models (e.g., ND, BDv2, BDv1, FV, NS) + * Deprecate support for newer Driving Models (e.g., CH, LAv2, LAv1) +* FIXED: New comma 3X support +* FIXED: New comma eSIM support +* Bug fixes and performance improvements + +sunnypilot - 0.9.5.3 (2023-12-24) +======================== +* UPDATED: Dynamic Experimental Control (DEC) + * Synced with dragonpilot-community/dragonpilot:lp-dp-beta2 commit 578d38b +* UPDATED: Driving Model Selector v2 + * Driving models sort in descending order based on availability date + * Experimental/unmerged driving models are only available in "dev-c3" branch + * To select and use experimental driving models, navigate to "Software" panel, select the "dev-c3" branch, and check for update +* UPDATED: Vision-based Turn Speed Control (V-TSC) implementation + * Refactored implementation thanks to pfeiferj! + * More accurate and consistent velocity calculation to achieve smoother longitudinal control in curves +* NEW❗: Speed Limit Warning + * Display alert and/or chime to warn the driver when the cruising speed is faster than the speed limit plus the Warning Offset + * Customizable Warning Offset, independent of Speed Limit Control (SLC)'s Limit Offset +* UPDATED: Speed Limit Source Policy + * Selectable speed limit source for Speed Limit Control and Speed Limit Warning + * Applicable to: Speed Limit Control, Speed Limit Warning +* UPDATED: Speed Limit Control (SLC) + * Engage Mode: Removed "Warning Only" mode - this has been replaced by the new Speed Limit Warning sub-menu +* UPDATED: OpenStreetMap (OSM) implementation + * Refactored implementation thanks to pfeiferj! + * Less resource impact + * Significantly smaller sizes with databases + * All regions are available to download + * Weekly map updates thanks to pfeiferj! + * Increased the font size of the road name + * C3X-specific changes + * Altitude (ALT.) display on Developer UI + * Current street name on top of driving screen when "OSM Debug UI" is enabled +* UPDATED: Map-based Turn Speed Control (M-TSC) implementation + * Only available in "staging-c3" and "dev-c3" branches. If you are using "release-c3" branch, navigate to "Software" panel, select the desired target branch, and check for update + * Refactored implementation thanks to pfeiferj! + * Based on the new OpenStreetMap implementation + * Improved predicted curvature calculations from OpenStreetMap data +* UI updates + * RE-ENABLED: Navigation: Full screen support + * Display the map view in full screen + * To switch back to driving view, tap on the border edge +* Hyundai Bayon Non-SCC 2019 support thanks to polein78! + +sunnypilot - 0.9.5.2 (2023-12-07) +======================== +* NEW❗: MADS: Allow Navigate on openpilot in Chill Mode + * Allow navigation to feed map view into the driving model while using Chill Mode + * Support all platforms, including platforms that do not support openpilot longitudinal control & Experimental Mode +* NEW❗: Neural Network Lateral Controller + * Formerly known as "NNFF", this replaces the lateral "torque" controller with one using a neural network trained on each car's (actually, each separate EPS firmware) driving data for increased controls accuracy + * Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported +* NEW❗: Driving Model Selector + * Easily switch between driving models without reinstalling branches. Offering immediate access to the latest models upon release + * An internet connection is required for downloading models. Each model switch currently involves downloading the model again. Future updates may allow for offline switching + * Warning is displayed for metered connections to avoid unexpected data usage if on cellular data + * Change driving models via **Settings -> Software -> Current Driving Model**. +* NEW❗: Hyundai CAN longitudinal: + * NEW❗: Enable radar tracks for certain Santa Fe platforms + * Internal Combustion Engine (ICE) 2021-23 + * Hybrid 2022-23 + * Plug-in Hybrid 2022-23 +* NEW❗: Lane Change: When manually braking with steering engaged, turning on the turn signal will default to Nudge mode +* Volkswagen MQB CC only platforms (radar or no radar) support thanks to jyoung8607! + +sunnypilot - 0.9.5.1 (2023-11-17) +======================== +* UPDATED: Synced with commaai's master commit e94c3c5 +* NEW❗: Farmville driving model * NEW❗: Onroad Settings Panel * Onroad buttons (i.e., DLP, GAC) moved to its dedicated panel * Driving Personality * Dynamic Lane Profile (DLP) + * Dynamic Experimental Control (DEC) * Speed Limit Control (SLC) * NEW❗: Display main feature status on onroad view in real-time * GAP - Driving Personality * DLP - Dynamic Lane Profile + * DEC - Dynamic Experimental Control * SLC - Speed Limit Control +* NEW❗: Dynamic Experimental Control (DEC) thanks to dragonpilot-community! + * Automatically determines and selects between openpilot ACC and openpilot End to End longitudinal based on conditions for a more natural drive + * Dynamic Experimental Control is only active while in Experimental Mode + * When Dynamic Experimental Control is ON, initially setting cruise speed will set to the vehicle's current speed +* NEW❗: Hyundai CAN longitudinal: + * NEW❗: Parse lead info for camera-based SCC platforms + * Improve lead tracking when using openpilot longitudinal + * NEW❗: Parse lead distance to display on car cluster + * Introduced better lead distance calculation to display on the car's cluster, replacing the binary "lead visible" indication on the SCC cluster + * Lead distance is now categorized into different ranges for more detailed and comprehensive information to the driver similar to how stock ACC does it + * NEW❗: Parse speed limit sign recognition from camera for certain supported platforms * NEW❗: Subaru - Stop and Go auto-resume support thanks to martinl! * Global (excluding Gen 2 and Hybrid) and Pre-Global support * NEW❗: Toyota - Stop and Go hack * Allow some Toyota/Lexus cars to auto resume during stop and go traffic * Only applicable to certain models and model years -* NEW❗: Wide camera view when the steering angle is more than 45° * NEW❗: Toyota: ZSS support thanks to dragonpilot-community and ErichMoraga! +* NEW❗: MSPA (Cereal structs refactor) + * Make sunnypilot Parsable Again - @sshane + * sunnypilot is now parsable with stock openpilot tools +* NEW❗: Display 3D buildings on map thanks to jakethesnake420! * openpilot Longitudianl Control capable cars only * UPDATED: Gap Adjust Cruise is now a part of Driving Personality * [DISTANCE/FOLLOW DISTANCE/GAP DISTANCE] physical button on the steering wheel to select Driving Personality on by default * Status now viewable in onroad view or Onroad Settings Panel * REMOVED: Gap Adjust Cruise toggle +* UPDATED: Speed Limit Control (SLC) + * NEW❗: Speed Limit Engage Mode + * Select the desired mode to set the cruising speed to the speed limit + * Warning Only: Warn the driver when the vehicle is driven faster than the speed limit + * Auto: Automatic speed adjustment on motorways based on speed limit data + * User Confirm: Inform the driver to change set speed of Adaptive Cruise Control to help the driver stay within the speed limit + * Supported platforms + * openpilot Longitudinal Control available cars (Excluding certain Toyota/Lexus, Ford, explained below) + * Custom Stock Longitudinal Control available cars + * Unsupported platforms + * Toyota/Lexus and Ford - most platforms do not allow us to control the PCM's set speed, requires testers to verify + * NEW❗: Speed limit source selector + * Select the desired precedence order of sources used to adapt cruise speed to road limits * UPDATED: Custom Stock Longitudinal Control * RE-ENABLED: Hyundai/Kia/Genesis CAN-FD platforms -* UPDATED: Auto-detect custom Mapbox token +* UPDATED: Custom Offsets reimplementation + * Camera Offset only works in Laneful (Laneful Only or Laneful in Auto mode when using Dynamic Lane Profile) + * Path Offset can be applied to both Laneless and Laneful +* UPDATED: Refactored Torque Lateral Control custom tuning menu + * NEW❗: Less Restrict Settings for Self-Tune (Beta) + * NEW❗: Custom Tuning for setting offline and live values in real-time +* UPDATED: Auto-detect custom Mapbox token if a personal Mapbox token is provided * REMOVED: "Enable Mapbox Navigation" toggle -* UPDATED: Developer UI: Bottom row now hidden when there are active alerts +* UI updates + * New Settings menu redesign and improved interactions +* FIXED: Retain hotspot/tethering state was not consistently saved * FIXED: Map stuck in "Map Loading" if comma Prime is active -* FIXED: UI elements adjustments +* FIXED: OpenStreetMap implementation on C3X devices + * M-TSC + * Altitude (ALT.) display on Developer UI + * Current street name on top of driving screen when "OSM Debug UI" is enabled +* Hyundai Kona Non-SCC 2019 support thanks to Quex! * Kia Seltos Non-SCC 2023-24 support thanks to Moodkiller and jeroid_! sunnypilot - 0.9.4.1 (2023-08-11) diff --git a/Dockerfile.openpilot b/Dockerfile.openpilot index 3541be92b0..1e15722bb9 100644 --- a/Dockerfile.openpilot +++ b/Dockerfile.openpilot @@ -13,9 +13,8 @@ COPY SConstruct ${OPENPILOT_PATH} COPY ./openpilot ${OPENPILOT_PATH}/openpilot COPY ./third_party ${OPENPILOT_PATH}/third_party COPY ./site_scons ${OPENPILOT_PATH}/site_scons -COPY ./laika ${OPENPILOT_PATH}/laika -COPY ./laika_repo ${OPENPILOT_PATH}/laika_repo COPY ./rednose ${OPENPILOT_PATH}/rednose +COPY ./rednose_repo/site_scons ${OPENPILOT_PATH}/rednose_repo/site_scons COPY ./tools ${OPENPILOT_PATH}/tools COPY ./release ${OPENPILOT_PATH}/release COPY ./common ${OPENPILOT_PATH}/common diff --git a/Dockerfile.openpilot_base b/Dockerfile.openpilot_base index e0581bd46e..d280d2c9ec 100644 --- a/Dockerfile.openpilot_base +++ b/Dockerfile.openpilot_base @@ -4,7 +4,7 @@ ENV PYTHONUNBUFFERED 1 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - apt-get install -y --no-install-recommends sudo tzdata locales ssh && \ + apt-get install -y --no-install-recommends sudo tzdata locales ssh pulseaudio xvfb x11-xserver-utils gnome-screenshot && \ rm -rf /var/lib/apt/lists/* RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && locale-gen @@ -22,18 +22,27 @@ RUN cd /tmp && \ rm -rf arm/ && \ rm -rf thumb/nofp thumb/v6* thumb/v8* thumb/v7+fp thumb/v7-r+fp.sp +ARG USER=batman +ARG USER_UID=1000 +RUN useradd -m -s /bin/bash -u $USER_UID $USER +RUN usermod -aG sudo $USER +RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers +USER $USER + ENV POETRY_VIRTUALENVS_CREATE=false ENV PYENV_VERSION=3.11.4 -ENV PYENV_ROOT="/root/.pyenv" +ENV PYENV_ROOT="/home/$USER/pyenv" ENV PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH" -COPY pyproject.toml poetry.lock .python-version /tmp/ -COPY tools/install_python_dependencies.sh /tmp/tools/ +COPY --chown=$USER pyproject.toml poetry.lock .python-version /tmp/ +COPY --chown=$USER tools/install_python_dependencies.sh /tmp/tools/ RUN cd /tmp && \ tools/install_python_dependencies.sh && \ rm -rf /tmp/* && \ - rm -rf /root/.cache && \ - pip uninstall -y poetry + rm -rf /home/$USER/.cache && \ + find /home/$USER/pyenv -type d -name ".git" | xargs rm -rf && \ + rm -rf /home/$USER/pyenv/versions/3.11.4/lib/python3.11/test -RUN sudo git config --global --add safe.directory /tmp/openpilot +USER root +RUN sudo git config --global --add safe.directory /tmp/openpilot \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile index 176c82bcc9..816c2971c0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,7 +1,18 @@ +def retryWithDelay(int maxRetries, int delay, Closure body) { + for (int i = 0; i < maxRetries; i++) { + try { + return body() + } catch (Exception e) { + sleep(delay) + } + } + throw Exception("Failed after ${maxRetries} retries") +} + def device(String ip, String step_label, String cmd) { withCredentials([file(credentialsId: 'id_rsa', variable: 'key_file')]) { def ssh_cmd = """ -ssh -tt -o StrictHostKeyChecking=no -i ${key_file} 'comma@${ip}' /usr/bin/bash <<'END' +ssh -tt -o ConnectTimeout=30 -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o BatchMode=yes -o StrictHostKeyChecking=no -i ${key_file} 'comma@${ip}' /usr/bin/bash <<'END' set -e @@ -14,6 +25,9 @@ export GIT_BRANCH=${env.GIT_BRANCH} export GIT_COMMIT=${env.GIT_COMMIT} export AZURE_TOKEN='${env.AZURE_TOKEN}' export MAPBOX_TOKEN='${env.MAPBOX_TOKEN}' +# only use 1 thread for tici tests since most require HIL +export PYTEST_ADDOPTS="-n 0" + export GIT_SSH_COMMAND="ssh -i /data/gitkey" @@ -21,6 +35,10 @@ source ~/.bash_profile if [ -f /TICI ]; then source /etc/profile + rm -rf /tmp/tmp* + rm -rf ~/.commacache + rm -rf /dev/shm/* + if ! systemctl is-active --quiet systemd-resolved; then echo "restarting resolved" sudo systemctl start systemd-resolved @@ -51,19 +69,26 @@ END""" } } -def deviceStage(String stageName, String deviceType, List env, def steps) { +def deviceStage(String stageName, String deviceType, List extra_env, def steps) { stage(stageName) { if (currentBuild.result != null) { return } - def extra = env.collect { "export ${it}" }.join('\n'); + def extra = extra_env.collect { "export ${it}" }.join('\n'); + def branch = env.BRANCH_NAME ?: 'master'; docker.image('ghcr.io/commaai/alpine-ssh').inside('--user=root') { - lock(resource: "", label: deviceType, inversePrecedence: true, variable: 'device_ip', quantity: 1) { + lock(resource: "", label: deviceType, inversePrecedence: true, variable: 'device_ip', quantity: 1, resourceSelectStrategy: 'random') { timeout(time: 20, unit: 'MINUTES') { - device(device_ip, "git checkout", extra + "\n" + readFile("selfdrive/test/setup_device_ci.sh")) + retry (3) { + device(device_ip, "git checkout", extra + "\n" + readFile("selfdrive/test/setup_device_ci.sh")) + } steps.each { item -> + if (branch != "master" && item.size() == 3 && !hasDirectoryChanged(item[2])) { + println "Skipped '${item[0]}', no relevant changes were detected." + return; + } device(device_ip, item[0], item[1]) } } @@ -81,22 +106,31 @@ def pcStage(String stageName, Closure body) { checkout scm - def dockerArgs = '--user=root -v /tmp/comma_download_cache:/tmp/comma_download_cache -v /tmp/scons_cache:/tmp/scons_cache'; - docker.build("openpilot-base:build-${env.GIT_COMMIT}", "-f Dockerfile.openpilot_base .").inside(dockerArgs) { - timeout(time: 20, unit: 'MINUTES') { - try { - sh "git config --global --add safe.directory '*'" - sh "git submodule update --init --recursive" - sh "git lfs pull" - body() - } finally { - sh "rm -rf ${env.WORKSPACE}/* || true" - sh "rm -rf .* || true" + def dockerArgs = "--user=batman -v /tmp/comma_download_cache:/tmp/comma_download_cache -v /tmp/scons_cache:/tmp/scons_cache -e PYTHONPATH=${env.WORKSPACE}"; + + def openpilot_base = retryWithDelay (3, 15) { + return docker.build("openpilot-base:build-${env.GIT_COMMIT}", "-f Dockerfile.openpilot_base .") + } + + lock(resource: "", label: 'pc', inversePrecedence: true, quantity: 1) { + openpilot_base.inside(dockerArgs) { + timeout(time: 20, unit: 'MINUTES') { + try { + retryWithDelay (3, 15) { + sh "git config --global --add safe.directory '*'" + sh "git submodule update --init --recursive" + sh "git lfs pull" + } + body() + } finally { + sh "rm -rf ${env.WORKSPACE}/* || true" + sh "rm -rf .* || true" + } + } } } } } - } } def setupCredentials() { @@ -109,6 +143,21 @@ def setupCredentials() { } } +def hasDirectoryChanged(List paths) { + for (change in currentBuild.changeSets) { + for (item in change.items) { + for (affectedPath in item.affectedPaths) { + for (path in paths) { + if (affectedPath.startsWith(path)) { + return true + } + } + } + } + } + return false +} + node { env.CI = "1" env.PYTHONWARNINGS = "error" @@ -120,7 +169,7 @@ node { env.GIT_COMMIT = checkout(scm).GIT_COMMIT def excludeBranches = ['master-ci', 'devel', 'devel-staging', 'release3', 'release3-staging', - 'dashcam3', 'dashcam3-staging', 'testing-closet*', 'hotfix-*'] + 'testing-closet*', 'hotfix-*'] def excludeRegex = excludeBranches.join('|').replaceAll('\\*', '.*') if (env.BRANCH_NAME != 'master') { @@ -132,7 +181,7 @@ node { try { if (env.BRANCH_NAME == 'devel-staging') { deviceStage("build release3-staging", "tici-needs-can", [], [ - ["build release3-staging & dashcam3-staging", "RELEASE_BRANCH=release3-staging DASHCAM_BRANCH=dashcam3-staging $SOURCE_DIR/release/build_release.sh"], + ["build release3-staging", "RELEASE_BRANCH=release3-staging $SOURCE_DIR/release/build_release.sh"], ]) } @@ -146,23 +195,23 @@ node { parallel ( // tici tests 'onroad tests': { - deviceStage("onroad", "tici-needs-can", ["SKIP_COPY=1"], [ - ["build master-ci", "cd $SOURCE_DIR/release && TARGET_DIR=$TEST_DIR ./build_devel.sh"], + deviceStage("onroad", "tici-needs-can", [], [ + // TODO: ideally, this test runs in master-ci, but it takes 5+m to build it + //["build master-ci", "cd $SOURCE_DIR/release && TARGET_DIR=$TEST_DIR $SOURCE_DIR/scripts/retry.sh ./build_devel.sh"], ["build openpilot", "cd selfdrive/manager && ./build.py"], ["check dirty", "release/check-dirty.sh"], - ["onroad tests", "cd selfdrive/test/ && ./test_onroad.py"], - ["time to onroad", "cd selfdrive/test/ && pytest test_time_to_onroad.py"], + ["onroad tests", "pytest selfdrive/test/test_onroad.py -s"], + ["time to onroad", "pytest selfdrive/test/test_time_to_onroad.py"], ]) }, 'HW + Unit Tests': { deviceStage("tici", "tici-common", ["UNSAFE=1"], [ ["build", "cd selfdrive/manager && ./build.py"], - ["test pandad", "pytest selfdrive/boardd/tests/test_pandad.py"], + ["test pandad", "pytest selfdrive/boardd/tests/test_pandad.py", ["panda/", "selfdrive/boardd/"]], ["test power draw", "./system/hardware/tici/tests/test_power_draw.py"], ["test encoder", "LD_LIBRARY_PATH=/usr/local/lib pytest system/loggerd/tests/test_encoder.py"], ["test pigeond", "pytest system/sensord/tests/test_pigeond.py"], ["test manager", "pytest selfdrive/manager/test/test_manager.py"], - ["test nav", "pytest selfdrive/navd/tests/"], ]) }, 'loopback': { @@ -186,27 +235,27 @@ node { 'sensord': { deviceStage("LSM + MMC", "tici-lsmc", ["UNSAFE=1"], [ ["build", "cd selfdrive/manager && ./build.py"], - ["test sensord", "cd system/sensord/tests && pytest test_sensord.py"], + ["test sensord", "pytest system/sensord/tests/test_sensord.py"], ]) deviceStage("BMX + LSM", "tici-bmx-lsm", ["UNSAFE=1"], [ ["build", "cd selfdrive/manager && ./build.py"], - ["test sensord", "cd system/sensord/tests && pytest test_sensord.py"], + ["test sensord", "pytest system/sensord/tests/test_sensord.py"], ]) }, 'replay': { deviceStage("tici", "tici-replay", ["UNSAFE=1"], [ ["build", "cd selfdrive/manager && ./build.py"], - ["model replay", "cd selfdrive/test/process_replay && ./model_replay.py"], + ["model replay", "selfdrive/test/process_replay/model_replay.py"], ]) }, 'tizi': { deviceStage("tizi", "tizi", ["UNSAFE=1"], [ ["build openpilot", "cd selfdrive/manager && ./build.py"], ["test boardd loopback", "SINGLE_PANDA=1 pytest selfdrive/boardd/tests/test_boardd_loopback.py"], - ["test pandad", "pytest selfdrive/boardd/tests/test_pandad.py"], + ["test pandad", "pytest selfdrive/boardd/tests/test_pandad.py", ["panda/", "selfdrive/boardd/"]], ["test amp", "pytest system/hardware/tici/tests/test_amplifier.py"], ["test hw", "pytest system/hardware/tici/tests/test_hardware.py"], - ["test rawgpsd", "pytest system/sensord/rawgps/test_rawgps.py"], + ["test qcomgpsd", "pytest system/qcomgpsd/tests/test_qcomgpsd.py", ["system/qcomgpsd/"]], ]) }, @@ -215,15 +264,16 @@ node { pcStage("PC tests") { // tests that our build system's dependencies are configured properly, // needs a machine with lots of cores - sh label: "test multi-threaded build", script: "scons --no-cache --random -j42" + sh label: "test multi-threaded build", + script: '''#!/bin/bash + scons --no-cache --random -j$(nproc)''' } }, 'car tests': { pcStage("car tests") { - sh "scons -j30" - sh label: "test_models.py", script: "INTERNAL_SEG_CNT=250 INTERNAL_SEG_LIST=selfdrive/car/tests/test_models_segs.txt FILEREADER_CACHE=1 \ - pytest -n42 --dist=loadscope selfdrive/car/tests/test_models.py" - sh label: "test_car_interfaces.py", script: "MAX_EXAMPLES=100 pytest -n42 selfdrive/car/tests/test_car_interfaces.py" + sh label: "build", script: "selfdrive/manager/build.py" + sh label: "run car tests", script: "cd selfdrive/car/tests && MAX_EXAMPLES=300 INTERNAL_SEG_CNT=300 FILEREADER_CACHE=1 \ + INTERNAL_SEG_LIST=selfdrive/car/tests/test_models_segs.txt pytest test_models.py test_car_interfaces.py" } }, diff --git a/RELEASES.md b/RELEASES.md index 89f864dd71..aa3a80d56d 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,12 +1,35 @@ -Version 0.9.5 (2023-09-27) +Version 0.9.6 (2024-02-XX) +======================== +* New driving model + * Vision model trained on more data + * Improved driving performance + * Directly outputs curvature for lateral control +* New driver monitoring model + * Trained on larger dataset +* AGNOS 9 +* comma body streaming and controls over WebRTC +* Improved fuzzy fingerprinting for many makes and models +* Hyundai Staria 2023 support thanks to sunnyhaibin! +* Kia Niro Plug-in Hybrid 2022 support thanks to sunnyhaibin! +* Toyota RAV4 2023-24 support +* Toyota RAV4 Hybrid 2023-24 support + +Version 0.9.5 (2023-11-17) ======================== * New driving model * Improved navigate on openpilot performance using navigation instructions as an additional model input + * Do lateral planning inside the model + * New vision transformer architecture +* Cadillac Escalade ESV 2019 support thanks to twilsonco! * Hyundai Azera 2022 support thanks to sunnyhaibin! -* Hyundai Ioniq 6 2023 support thanks to sunnyhaibin, alamo3, and sshane! +* Hyundai Azera Hybrid 2020 support thanks to chanhojung and haram-KONA! +* Hyundai Custin 2023 support thanks to sunnyhaibin and Saber422! +* Hyundai Ioniq 6 2023 support thanks to sunnyhaibin and alamo3! * Hyundai Kona Electric 2023 (Korean version) support thanks to sunnyhaibin and haram-KONA! * Kia K8 Hybrid (with HDA II) 2023 support thanks to sunnyhaibin! +* Kia Optima Hybrid 2019 support * Kia Sorento Hybrid 2023 support thanks to sunnyhaibin! +* Lexus GS F 2016 support thanks to snyperifle! * Lexus IS 2023 support thanks to L3R5! Version 0.9.4 (2023-07-27) diff --git a/SConstruct b/SConstruct index a086f8448a..9dab1f4764 100644 --- a/SConstruct +++ b/SConstruct @@ -9,11 +9,16 @@ import SCons.Errors SCons.Warnings.warningAsException(True) +# pending upstream fix - https://github.com/SCons/scons/issues/4461 +#SetOption('warn', 'all') + TICI = os.path.isfile('/TICI') AGNOS = TICI Decider('MD5-timestamp') +SetOption('num_jobs', int(os.cpu_count()/2)) + AddOption('--kaitai', action='store_true', help='Regenerate kaitai struct parsers') @@ -26,6 +31,10 @@ AddOption('--ubsan', action='store_true', help='turn on UBSan') +AddOption('--coverage', + action='store_true', + help='build with test coverage options') + AddOption('--clazy', action='store_true', help='build with clazy') @@ -34,6 +43,12 @@ AddOption('--compile_db', action='store_true', help='build clang compilation database') +AddOption('--ccflags', + action='store', + type='string', + default='', + help='pass arbitrary flags over the command line') + AddOption('--snpe', action='store_true', help='use SNPE on PC') @@ -52,7 +67,7 @@ AddOption('--pc-thneed', AddOption('--minimal', action='store_false', dest='extras', - default=os.path.islink(Dir('#laika/').abspath), + default=os.path.islink(Dir('#rednose/').abspath), # minimal by default on release branch (where rednose is not a link) help='the minimum build to run openpilot. no tests, tools, etc.') ## Architecture name breakdown (arch) @@ -106,10 +121,7 @@ else: cflags = [] cxxflags = [] cpppath = [] - rpath += [ - Dir("#cereal").abspath, - Dir("#common").abspath - ] + rpath += [] # MacOS if arch == "Darwin": @@ -133,9 +145,6 @@ else: libpath = [ f"#third_party/acados/{arch}/lib", f"#third_party/libyuv/{arch}/lib", - f"#third_party/mapbox-gl-native-qt/{arch}", - "#cereal", - "#common", "/usr/lib", "/usr/local/lib", ] @@ -166,6 +175,10 @@ if arch != "Darwin": cflags += ['-DSWAGLOG="\\"common/swaglog.h\\""'] cxxflags += ['-DSWAGLOG="\\"common/swaglog.h\\""'] +ccflags_option = GetOption('ccflags') +if ccflags_option: + ccflags += ccflags_option.split(' ') + env = Environment( ENV=lenv, CCFLAGS=[ @@ -194,11 +207,12 @@ env = Environment( "#third_party/json11", "#third_party/linux/include", "#third_party/snpe/include", - "#third_party/mapbox-gl-native-qt/include", "#third_party/qrcode", "#third_party", "#cereal", "#opendbc/can", + "#third_party/maplibre-native-qt/include", + f"#third_party/maplibre-native-qt/{arch}/include" ], CC='clang', @@ -215,10 +229,13 @@ env = Environment( "#opendbc/can", "#selfdrive/boardd", "#common", + "#rednose/helpers", ], CYTHONCFILESUFFIX=".cpp", COMPILATIONDB_USE_ABSPATH=True, - tools=["default", "cython", "compilation_db"], + REDNOSE_ROOT="#", + tools=["default", "cython", "compilation_db", "rednose_filter"], + toolpath=["#rednose_repo/site_scons/site_tools"], ) if arch == "Darwin": @@ -230,7 +247,8 @@ if GetOption('compile_db'): env.CompilationDatabase('compile_commands.json') # Setup cache dir -cache_dir = '/data/scons_cache' if AGNOS else '/tmp/scons_cache' +default_cache_dir = '/data/scons_cache' if AGNOS else '/tmp/scons_cache' +cache_dir = ARGUMENTS.get('cache_dir', default_cache_dir) CacheDir(cache_dir) Clean(["."], cache_dir) @@ -280,8 +298,11 @@ else: qt_env['QTDIR'] = qt_install_prefix qt_dirs = [ f"{qt_install_headers}", - f"{qt_install_headers}/QtGui/5.12.8/QtGui", ] + + qt_gui_path = os.path.join(qt_install_headers, "QtGui") + qt_gui_dirs = [d for d in os.listdir(qt_gui_path) if os.path.isdir(os.path.join(qt_gui_path, d))] + qt_dirs += [f"{qt_install_headers}/QtGui/{qt_gui_dirs[0]}/QtGui", ] if qt_gui_dirs else [] qt_dirs += [f"{qt_install_headers}/Qt{m}" for m in qt_modules] qt_libs = [f"Qt5{m}" for m in qt_modules] @@ -298,7 +319,7 @@ try: except SCons.Errors.UserError: qt_env.Tool('qt') -qt_env['CPPPATH'] += qt_dirs + ["#selfdrive/ui/qt/"] +qt_env['CPPPATH'] += qt_dirs# + ["#selfdrive/ui/qt/"] qt_flags = [ "-D_REENTRANT", "-DQT_NO_DEBUG", @@ -311,7 +332,8 @@ qt_flags = [ "-DQT_MESSAGELOGCONTEXT", ] qt_env['CXXFLAGS'] += qt_flags -qt_env['LIBPATH'] += ['#selfdrive/ui'] +qt_env['LIBPATH'] += ['#selfdrive/ui', f"#third_party/maplibre-native-qt/{arch}/lib"] +qt_env['RPATH'] += [Dir(f"#third_party/maplibre-native-qt/{arch}/lib").srcnode().abspath] qt_env['LIBS'] = qt_libs if GetOption("clazy"): @@ -353,36 +375,11 @@ SConscript([ 'panda/SConscript', ]) -# Build rednose library and ekf models -rednose_deps = [ - "#selfdrive/locationd/models/constants.py", - "#selfdrive/locationd/models/gnss_helpers.py", -] - -rednose_config = { - 'generated_folder': '#selfdrive/locationd/models/generated', - 'to_build': { - 'gnss': ('#selfdrive/locationd/models/gnss_kf.py', True, [], rednose_deps), - 'live': ('#selfdrive/locationd/models/live_kf.py', True, ['live_kf_constants.h'], rednose_deps), - 'car': ('#selfdrive/locationd/models/car_kf.py', True, [], rednose_deps), - }, -} - -if arch != "larch64": - rednose_config['to_build'].update({ - 'loc_4': ('#selfdrive/locationd/models/loc_kf.py', True, [], rednose_deps), - 'lane': ('#selfdrive/locationd/models/lane_kf.py', True, [], rednose_deps), - 'pos_computer_4': ('#rednose/helpers/lst_sq_computer.py', False, [], []), - 'pos_computer_5': ('#rednose/helpers/lst_sq_computer.py', False, [], []), - 'feature_handler_5': ('#rednose/helpers/feature_handler.py', False, [], []), - }) - -Export('rednose_config') +# Build rednose library SConscript(['rednose/SConscript']) # Build system services SConscript([ - 'system/clocksd/SConscript', 'system/proclogd/SConscript', 'system/ubloxd/SConscript', 'system/loggerd/SConscript', diff --git a/body b/body index 6ff44357a3..61ace31efa 160000 --- a/body +++ b/body @@ -1 +1 @@ -Subproject commit 6ff44357a3e416d29044b1d085a3e9223db9691a +Subproject commit 61ace31efad27ae0d6d86888842f82bc92545e72 diff --git a/cereal b/cereal index 318da0bb3e..d6beb2482e 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit 318da0bb3efd4071b4d6402b4b0afe0a6d77daa0 +Subproject commit d6beb2482e471538e05e701ee770b443b423a908 diff --git a/codecov.yml b/codecov.yml index 83427c3ee8..519e7d1a38 100644 --- a/codecov.yml +++ b/codecov.yml @@ -6,3 +6,8 @@ coverage: informational: true patch: off +ignore: + - "**/test_*.py" + - "selfdrive/test/**" + - "system/version.py" # codecov changes depending on if we are in a branch or not + - "tools" diff --git a/common/SConscript b/common/SConscript index 97322b248d..829db6eeec 100644 --- a/common/SConscript +++ b/common/SConscript @@ -2,7 +2,6 @@ Import('env', 'envCython', 'arch') common_libs = [ 'params.cc', - 'statlog.cc', 'swaglog.cc', 'util.cc', 'i2c.cc', @@ -24,18 +23,17 @@ Export('_common', '_gpucommon') if GetOption('extras'): env.Program('tests/test_common', - ['tests/test_runner.cc', 'tests/test_util.cc', 'tests/test_swaglog.cc', 'tests/test_ratekeeper.cc'], + ['tests/test_runner.cc', 'tests/test_params.cc', 'tests/test_util.cc', 'tests/test_swaglog.cc'], LIBS=[_common, 'json11', 'zmq', 'pthread']) # Cython bindings params_python = envCython.Program('params_pyx.so', 'params_pyx.pyx', LIBS=envCython['LIBS'] + [_common, 'zmq', 'json11']) SConscript([ - 'kalman/SConscript', - 'transformations/SConscript' + 'transformations/SConscript', ]) -Import('simple_kalman_python', 'transformations_python') -common_python = [params_python, simple_kalman_python, transformations_python] +Import('transformations_python') +common_python = [params_python, transformations_python] Export('common_python') diff --git a/common/api/__init__.py b/common/api/__init__.py index 0eb8aa7627..79875023a2 100644 --- a/common/api/__init__.py +++ b/common/api/__init__.py @@ -2,7 +2,7 @@ import jwt import os import requests from datetime import datetime, timedelta -from openpilot.common.basedir import PERSIST +from openpilot.system.hardware.hw import Paths from openpilot.system.version import get_version API_HOST = os.getenv('API_HOST', 'https://api.commadotai.com') @@ -10,7 +10,7 @@ API_HOST = os.getenv('API_HOST', 'https://api.commadotai.com') class Api(): def __init__(self, dongle_id): self.dongle_id = dongle_id - with open(PERSIST+'/comma/id_rsa') as f: + with open(Paths.persist_root()+'/comma/id_rsa') as f: self.private_key = f.read() def get(self, *args, **kwargs): diff --git a/common/basedir.py b/common/basedir.py index b4486f9f08..6b4811e53c 100644 --- a/common/basedir.py +++ b/common/basedir.py @@ -1,11 +1,4 @@ import os -from pathlib import Path -from openpilot.system.hardware import PC BASEDIR = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../")) - -if PC: - PERSIST = os.path.join(str(Path.home()), ".comma", "persist") -else: - PERSIST = "/persist" diff --git a/common/ffi_wrapper.py b/common/ffi_wrapper.py index a228b40256..01741c6f42 100644 --- a/common/ffi_wrapper.py +++ b/common/ffi_wrapper.py @@ -1,55 +1,8 @@ -import os -import sys -import fcntl -import hashlib import platform -from cffi import FFI + def suffix(): if platform.system() == "Darwin": return ".dylib" else: return ".so" - -def ffi_wrap(name, c_code, c_header, tmpdir="/tmp/ccache", cflags="", libraries=None): - if libraries is None: - libraries = [] - - cache = name + "_" + hashlib.sha1(c_code.encode('utf-8')).hexdigest() - try: - os.mkdir(tmpdir) - except OSError: - pass - - fd = os.open(tmpdir, 0) - fcntl.flock(fd, fcntl.LOCK_EX) - try: - sys.path.append(tmpdir) - try: - mod = __import__(cache) - except Exception: - print(f"cache miss {cache}") - compile_code(cache, c_code, c_header, tmpdir, cflags, libraries) - mod = __import__(cache) - finally: - os.close(fd) - - return mod.ffi, mod.lib - - -def compile_code(name, c_code, c_header, directory, cflags="", libraries=None): - if libraries is None: - libraries = [] - - ffibuilder = FFI() - ffibuilder.set_source(name, c_code, source_extension='.cpp', libraries=libraries) - ffibuilder.cdef(c_header) - os.environ['OPT'] = "-fwrapv -O2 -DNDEBUG -std=c++1z" - os.environ['CFLAGS'] = cflags - ffibuilder.compile(verbose=True, debug=False, tmpdir=directory) - - -def wrap_compiled(name, directory): - sys.path.append(directory) - mod = __import__(name) - return mod.ffi, mod.lib diff --git a/common/file_helpers.py b/common/file_helpers.py index 227d614d72..dea298a529 100644 --- a/common/file_helpers.py +++ b/common/file_helpers.py @@ -1,60 +1,7 @@ import os -import shutil import tempfile -from atomicwrites import AtomicWriter - - -def mkdirs_exists_ok(path): - if path.startswith(('http://', 'https://')): - raise ValueError('URL path') - try: - os.makedirs(path) - except OSError: - if not os.path.isdir(path): - raise - - -def rm_not_exists_ok(path): - try: - os.remove(path) - except OSError: - if os.path.exists(path): - raise - - -def rm_tree_or_link(path): - if os.path.islink(path): - os.unlink(path) - elif os.path.isdir(path): - shutil.rmtree(path) - - -def get_tmpdir_on_same_filesystem(path): - normpath = os.path.normpath(path) - parts = normpath.split("/") - if len(parts) > 1 and parts[1] == "scratch": - return "/scratch/tmp" - elif len(parts) > 2 and parts[2] == "runner": - return f"/{parts[1]}/runner/tmp" - return "/tmp" - - -class NamedTemporaryDir(): - def __init__(self, temp_dir=None): - self._path = tempfile.mkdtemp(dir=temp_dir) - - @property - def name(self): - return self._path - - def close(self): - shutil.rmtree(self._path) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, traceback): - self.close() +import contextlib +from typing import Optional class CallbackReader: @@ -76,24 +23,16 @@ class CallbackReader: return chunk -def _get_fileobject_func(writer, temp_dir): - def _get_fileobject(): - return writer.get_fileobject(dir=temp_dir) - return _get_fileobject +@contextlib.contextmanager +def atomic_write_in_dir(path: str, mode: str = 'w', buffering: int = -1, encoding: Optional[str] = None, newline: Optional[str] = None, + overwrite: bool = False): + """Write to a file atomically using a temporary file in the same directory as the destination file.""" + dir_name = os.path.dirname(path) -def atomic_write_on_fs_tmp(path, **kwargs): - """Creates an atomic writer using a temporary file in a temporary directory - on the same filesystem as path. - """ - # TODO(mgraczyk): This use of AtomicWriter relies on implementation details to set the temp - # directory. - writer = AtomicWriter(path, **kwargs) - return writer._open(_get_fileobject_func(writer, get_tmpdir_on_same_filesystem(path))) + if not overwrite and os.path.exists(path): + raise FileExistsError(f"File '{path}' already exists. To overwrite it, set 'overwrite' to True.") - -def atomic_write_in_dir(path, **kwargs): - """Creates an atomic writer using a temporary file in the same directory - as the destination file. - """ - writer = AtomicWriter(path, **kwargs) - return writer._open(_get_fileobject_func(writer, os.path.dirname(path))) + with tempfile.NamedTemporaryFile(mode=mode, buffering=buffering, encoding=encoding, newline=newline, dir=dir_name, delete=False) as tmp_file: + yield tmp_file + tmp_file_name = tmp_file.name + os.replace(tmp_file_name, path) diff --git a/common/kalman/.gitignore b/common/kalman/.gitignore deleted file mode 100644 index d86912e7d0..0000000000 --- a/common/kalman/.gitignore +++ /dev/null @@ -1 +0,0 @@ -simple_kalman_impl.c diff --git a/common/kalman/SConscript b/common/kalman/SConscript deleted file mode 100644 index 7cba4a9a61..0000000000 --- a/common/kalman/SConscript +++ /dev/null @@ -1,5 +0,0 @@ -Import('envCython') - -simple_kalman_python = envCython.Program('simple_kalman_impl.so', 'simple_kalman_impl.pyx') - -Export('simple_kalman_python') diff --git a/common/kalman/simple_kalman.py b/common/kalman/simple_kalman.py deleted file mode 100644 index 5e1b6ce1fb..0000000000 --- a/common/kalman/simple_kalman.py +++ /dev/null @@ -1,12 +0,0 @@ -from openpilot.common.kalman.simple_kalman_impl import KF1D as KF1D -assert KF1D -import numpy as np - -def get_kalman_gain(dt, A, C, Q, R, iterations=100): - P = np.zeros_like(Q) - for _ in range(iterations): - P = A.dot(P).dot(A.T) + dt * Q - S = C.dot(P).dot(C.T) + R - K = P.dot(C.T).dot(np.linalg.inv(S)) - P = (np.eye(len(P)) - K.dot(C)).dot(P) - return K \ No newline at end of file diff --git a/common/kalman/simple_kalman_impl.pxd b/common/kalman/simple_kalman_impl.pxd deleted file mode 100644 index cb39a45bca..0000000000 --- a/common/kalman/simple_kalman_impl.pxd +++ /dev/null @@ -1,18 +0,0 @@ -# cython: language_level = 3 - -cdef class KF1D: - cdef public: - double x0_0 - double x1_0 - double K0_0 - double K1_0 - double A0_0 - double A0_1 - double A1_0 - double A1_1 - double C0_0 - double C0_1 - double A_K_0 - double A_K_1 - double A_K_2 - double A_K_3 diff --git a/common/kalman/simple_kalman_impl.pyx b/common/kalman/simple_kalman_impl.pyx deleted file mode 100644 index 16aefba2e5..0000000000 --- a/common/kalman/simple_kalman_impl.pyx +++ /dev/null @@ -1,37 +0,0 @@ -# distutils: language = c++ -# cython: language_level=3 - -cdef class KF1D: - def __init__(self, x0, A, C, K): - self.x0_0 = x0[0][0] - self.x1_0 = x0[1][0] - self.A0_0 = A[0][0] - self.A0_1 = A[0][1] - self.A1_0 = A[1][0] - self.A1_1 = A[1][1] - self.C0_0 = C[0] - self.C0_1 = C[1] - self.K0_0 = K[0][0] - self.K1_0 = K[1][0] - - self.A_K_0 = self.A0_0 - self.K0_0 * self.C0_0 - self.A_K_1 = self.A0_1 - self.K0_0 * self.C0_1 - self.A_K_2 = self.A1_0 - self.K1_0 * self.C0_0 - self.A_K_3 = self.A1_1 - self.K1_0 * self.C0_1 - - def update(self, meas): - cdef double x0_0 = self.A_K_0 * self.x0_0 + self.A_K_1 * self.x1_0 + self.K0_0 * meas - cdef double x1_0 = self.A_K_2 * self.x0_0 + self.A_K_3 * self.x1_0 + self.K1_0 * meas - self.x0_0 = x0_0 - self.x1_0 = x1_0 - - return [self.x0_0, self.x1_0] - - @property - def x(self): - return [[self.x0_0], [self.x1_0]] - - @x.setter - def x(self, x): - self.x0_0 = x[0][0] - self.x1_0 = x[1][0] diff --git a/common/kalman/simple_kalman_old.py b/common/kalman/simple_kalman_old.py deleted file mode 100644 index d11770faf6..0000000000 --- a/common/kalman/simple_kalman_old.py +++ /dev/null @@ -1,23 +0,0 @@ -import numpy as np - - -class KF1D: - # this EKF assumes constant covariance matrix, so calculations are much simpler - # the Kalman gain also needs to be precomputed using the control module - - def __init__(self, x0, A, C, K): - self.x = x0 - self.A = A - self.C = np.atleast_2d(C) - self.K = K - - self.A_K = self.A - np.dot(self.K, self.C) - - # K matrix needs to be pre-computed as follow: - # import control - # (x, l, K) = control.dare(np.transpose(self.A), np.transpose(self.C), Q, R) - # self.K = np.transpose(K) - - def update(self, meas): - self.x = np.dot(self.A_K, self.x) + np.dot(self.K, meas) - return self.x diff --git a/common/kalman/tests/test_simple_kalman.py b/common/kalman/tests/test_simple_kalman.py deleted file mode 100644 index 32cc79fc3d..0000000000 --- a/common/kalman/tests/test_simple_kalman.py +++ /dev/null @@ -1,87 +0,0 @@ -import unittest -import random -import timeit -import numpy as np - -from openpilot.common.kalman.simple_kalman import KF1D -from openpilot.common.kalman.simple_kalman_old import KF1D as KF1D_old - - -class TestSimpleKalman(unittest.TestCase): - def setUp(self): - dt = 0.01 - x0_0 = 0.0 - x1_0 = 0.0 - A0_0 = 1.0 - A0_1 = dt - A1_0 = 0.0 - A1_1 = 1.0 - C0_0 = 1.0 - C0_1 = 0.0 - K0_0 = 0.12287673 - K1_0 = 0.29666309 - - self.kf_old = KF1D_old(x0=np.array([[x0_0], [x1_0]]), - A=np.array([[A0_0, A0_1], [A1_0, A1_1]]), - C=np.array([C0_0, C0_1]), - K=np.array([[K0_0], [K1_0]])) - - self.kf = KF1D(x0=[[x0_0], [x1_0]], - A=[[A0_0, A0_1], [A1_0, A1_1]], - C=[C0_0, C0_1], - K=[[K0_0], [K1_0]]) - - def test_getter_setter(self): - self.kf.x = [[1.0], [1.0]] - self.assertEqual(self.kf.x, [[1.0], [1.0]]) - - def update_returns_state(self): - x = self.kf.update(100) - self.assertEqual(x, self.kf.x) - - def test_old_equal_new(self): - for _ in range(1000): - v_wheel = random.uniform(0, 200) - - x_old = self.kf_old.update(v_wheel) - x = self.kf.update(v_wheel) - - # Compare the output x, verify that the error is less than 1e-4 - np.testing.assert_almost_equal(x_old[0], x[0]) - np.testing.assert_almost_equal(x_old[1], x[1]) - - def test_new_is_faster(self): - setup = """ -import numpy as np - -from openpilot.common.kalman.simple_kalman import KF1D -from openpilot.common.kalman.simple_kalman_old import KF1D as KF1D_old - -dt = 0.01 -x0_0 = 0.0 -x1_0 = 0.0 -A0_0 = 1.0 -A0_1 = dt -A1_0 = 0.0 -A1_1 = 1.0 -C0_0 = 1.0 -C0_1 = 0.0 -K0_0 = 0.12287673 -K1_0 = 0.29666309 - -kf_old = KF1D_old(x0=np.array([[x0_0], [x1_0]]), - A=np.array([[A0_0, A0_1], [A1_0, A1_1]]), - C=np.array([C0_0, C0_1]), - K=np.array([[K0_0], [K1_0]])) - -kf = KF1D(x0=[[x0_0], [x1_0]], - A=[[A0_0, A0_1], [A1_0, A1_1]], - C=[C0_0, C0_1], - K=[[K0_0], [K1_0]]) - """ - kf_speed = timeit.timeit("kf.update(1234)", setup=setup, number=10000) - kf_old_speed = timeit.timeit("kf_old.update(1234)", setup=setup, number=10000) - self.assertTrue(kf_speed < kf_old_speed / 4) - -if __name__ == "__main__": - unittest.main() diff --git a/common/lazy_property.py b/common/lazy_property.py deleted file mode 100644 index 919dd9e87e..0000000000 --- a/common/lazy_property.py +++ /dev/null @@ -1,12 +0,0 @@ -class lazy_property(): - """Defines a property whose value will be computed only once and as needed. - - This can only be used on instance methods. - """ - def __init__(self, func): - self._func = func - - def __get__(self, obj_self, cls): - value = self._func(obj_self) - setattr(obj_self, self._func.__name__, value) - return value diff --git a/common/logging_extra.py b/common/logging_extra.py index 5e0584c7bc..f53d503108 100644 --- a/common/logging_extra.py +++ b/common/logging_extra.py @@ -65,7 +65,7 @@ class SwagFormatter(logging.Formatter): return record_dict - def format(self, record): # noqa: A003 + def format(self, record): if self.swaglogger is None: raise Exception("must set swaglogger before calling format()") return json_robust_dumps(self.format_dict(record)) @@ -95,7 +95,7 @@ class SwagLogFileFormatter(SwagFormatter): k += "$a" return k, v - def format(self, record): # noqa: A003 + def format(self, record): if isinstance(record, str): v = json.loads(record) else: diff --git a/common/mock/__init__.py b/common/mock/__init__.py new file mode 100644 index 0000000000..e0dbf45c74 --- /dev/null +++ b/common/mock/__init__.py @@ -0,0 +1,51 @@ +""" +Utilities for generating mock messages for testing. +example in common/tests/test_mock.py +""" + + +import functools +import threading +from typing import List, Union +from cereal.messaging import PubMaster +from cereal.services import SERVICE_LIST +from openpilot.common.mock.generators import generate_liveLocationKalman +from openpilot.common.realtime import Ratekeeper + + +MOCK_GENERATOR = { + "liveLocationKalman": generate_liveLocationKalman +} + + +def generate_messages_loop(services: List[str], done: threading.Event): + pm = PubMaster(services) + rk = Ratekeeper(100) + i = 0 + while not done.is_set(): + for s in services: + should_send = i % (100/SERVICE_LIST[s].frequency) == 0 + if should_send: + message = MOCK_GENERATOR[s]() + pm.send(s, message) + i += 1 + rk.keep_time() + + +def mock_messages(services: Union[List[str], str]): + if isinstance(services, str): + services = [services] + + def decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + done = threading.Event() + t = threading.Thread(target=generate_messages_loop, args=(services, done)) + t.start() + try: + return func(*args, **kwargs) + finally: + done.set() + t.join() + return wrapper + return decorator diff --git a/common/mock/generators.py b/common/mock/generators.py new file mode 100644 index 0000000000..40951faf85 --- /dev/null +++ b/common/mock/generators.py @@ -0,0 +1,20 @@ +from cereal import messaging + + +LOCATION1 = (32.7174, -117.16277) +LOCATION2 = (32.7558, -117.2037) + +LLK_DECIMATION = 10 +RENDER_FRAMES = 15 +DEFAULT_ITERATIONS = RENDER_FRAMES * LLK_DECIMATION + + +def generate_liveLocationKalman(location=LOCATION1): + msg = messaging.new_message('liveLocationKalman') + msg.liveLocationKalman.positionGeodetic = {'value': [*location, 0], 'std': [0., 0., 0.], 'valid': True} + msg.liveLocationKalman.positionECEF = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} + msg.liveLocationKalman.calibratedOrientationNED = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} + msg.liveLocationKalman.velocityCalibrated = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} + msg.liveLocationKalman.status = 'valid' + msg.liveLocationKalman.gpsOK = True + return msg diff --git a/common/model.h b/common/model.h index cdffd64108..828a198694 100644 --- a/common/model.h +++ b/common/model.h @@ -1 +1 @@ -#define CURRENT_MODEL "Non-Inflatable (August 9, 2023)" +#define CURRENT_MODEL "Los Angeles v2 (January 24, 2024)" diff --git a/common/modeldata.h b/common/modeldata.h deleted file mode 100644 index 6dc02cc792..0000000000 --- a/common/modeldata.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include -#include "common/mat.h" -#include "system/hardware/hw.h" - -const int TRAJECTORY_SIZE = 33; -const int LAT_MPC_N = 16; -const int LON_MPC_N = 32; -const float MIN_DRAW_DISTANCE = 10.0; -const float MAX_DRAW_DISTANCE = 100.0; - -const float RYG_GREEN = 0.01165; -const float RYG_YELLOW = 0.06157; - -template -constexpr std::array build_idxs(float max_val) { - std::array result{}; - for (int i = 0; i < size; ++i) { - result[i] = max_val * ((i / (double)(size - 1)) * (i / (double)(size - 1))); - } - return result; -} - -constexpr auto T_IDXS = build_idxs(10.0); -constexpr auto T_IDXS_FLOAT = build_idxs(10.0); -constexpr auto X_IDXS = build_idxs(192.0); -constexpr auto X_IDXS_FLOAT = build_idxs(192.0); - -const mat3 FCAM_INTRINSIC_MATRIX = (mat3){{2648.0, 0.0, 1928.0 / 2, - 0.0, 2648.0, 1208.0 / 2, - 0.0, 0.0, 1.0}}; - -// tici ecam focal probably wrong? magnification is not consistent across frame -// Need to retrain model before this can be changed -const mat3 ECAM_INTRINSIC_MATRIX = (mat3){{567.0, 0.0, 1928.0 / 2, - 0.0, 567.0, 1208.0 / 2, - 0.0, 0.0, 1.0}}; diff --git a/common/numpy_helpers.py b/common/numpy_helpers.py deleted file mode 100644 index 7b1efe8976..0000000000 --- a/common/numpy_helpers.py +++ /dev/null @@ -1,22 +0,0 @@ -import numpy as np - - -def deep_interp_np(x, xp, fp, axis=None): - if axis is not None: - fp = fp.swapaxes(0,axis) - x = np.atleast_1d(x) - xp = np.array(xp) - if len(xp) < 2: - return np.repeat(fp, len(x), axis=0) - if min(np.diff(xp)) < 0: - raise RuntimeError('Bad x array for interpolation') - j = np.searchsorted(xp, x) - 1 - j = np.clip(j, 0, len(xp)-2) - d = np.divide(x - xp[j], xp[j + 1] - xp[j], out=np.ones_like(x, dtype=np.float64), where=xp[j + 1] - xp[j] != 0) - vals_interp = (fp[j].T*(1 - d)).T + (fp[j + 1].T*d).T - if axis is not None: - vals_interp = vals_interp.swapaxes(0,axis) - if len(vals_interp) == 1: - return vals_interp[0] - else: - return vals_interp diff --git a/common/params.cc b/common/params.cc index 0c19b6dc76..354f6b400f 100644 --- a/common/params.cc +++ b/common/params.cc @@ -4,9 +4,11 @@ #include #include +#include #include #include +#include "common/queue.h" #include "common/swaglog.h" #include "common/util.h" #include "system/hardware/hw.h" @@ -64,7 +66,9 @@ bool create_params_path(const std::string ¶m_path, const std::string &key_pa std::string ensure_params_path(const std::string &prefix, const std::string &path = {}) { std::string params_path = path.empty() ? Path::params() : path; if (!create_params_path(params_path, params_path + prefix)) { - throw std::runtime_error(util::string_format("Failed to ensure params path, errno=%d", errno)); + throw std::runtime_error(util::string_format( + "Failed to ensure params path, errno=%d, path=%s, param_prefix=%s", + errno, params_path.c_str(), prefix.c_str())); } return params_path; } @@ -86,11 +90,12 @@ private: std::unordered_map keys = { {"AccessToken", CLEAR_ON_MANAGER_START | DONT_LOG}, {"ApiCache_Device", PERSISTENT}, - {"ApiCache_DriveStats", PERSISTENT}, {"ApiCache_NavDestinations", PERSISTENT}, {"AssistNowToken", PERSISTENT}, {"AthenadPid", PERSISTENT}, {"AthenadUploadQueue", PERSISTENT}, + {"AthenadRecentlyViewedRoutes", PERSISTENT}, + {"BootCount", PERSISTENT}, {"CalibrationParams", PERSISTENT}, {"CameraDebugExpGain", CLEAR_ON_MANAGER_START}, {"CameraDebugExpTime", CLEAR_ON_MANAGER_START}, @@ -98,6 +103,7 @@ std::unordered_map keys = { {"CarParams", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, {"CarParamsCache", CLEAR_ON_MANAGER_START}, {"CarParamsPersistent", PERSISTENT}, + {"CarParamsPrevRoute", PERSISTENT}, {"CarVin", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, {"CompletedTrainingVersion", PERSISTENT}, {"ControlsReady", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, @@ -112,7 +118,7 @@ std::unordered_map keys = { {"DoReboot", CLEAR_ON_MANAGER_START}, {"DoShutdown", CLEAR_ON_MANAGER_START}, {"DoUninstall", CLEAR_ON_MANAGER_START}, - {"ExperimentalLongitudinalEnabled", PERSISTENT}, + {"ExperimentalLongitudinalEnabled", PERSISTENT | DEVELOPMENT_ONLY}, {"ExperimentalMode", PERSISTENT}, {"ExperimentalModeConfirmed", PERSISTENT}, {"FirmwareQueryDone", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, @@ -138,22 +144,19 @@ std::unordered_map keys = { {"IsOnroad", PERSISTENT}, {"IsRhdDetected", PERSISTENT}, {"IsReleaseBranch", CLEAR_ON_MANAGER_START}, + {"IsReleaseSPBranch", CLEAR_ON_MANAGER_START}, {"IsTakingSnapshot", CLEAR_ON_MANAGER_START}, {"IsTestedBranch", CLEAR_ON_MANAGER_START}, - {"IsUpdateAvailable", CLEAR_ON_MANAGER_START}, {"JoystickDebugMode", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, - {"LaikadEphemerisV3", PERSISTENT | DONT_LOG}, {"LanguageSetting", PERSISTENT}, {"LastAthenaPingTime", CLEAR_ON_MANAGER_START}, {"LastGPSPosition", PERSISTENT}, {"LastManagerExitReason", CLEAR_ON_MANAGER_START}, {"LastOffroadStatusPacket", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, {"LastPowerDropDetected", CLEAR_ON_MANAGER_START}, - {"LastSystemShutdown", CLEAR_ON_MANAGER_START}, {"LastUpdateException", CLEAR_ON_MANAGER_START}, {"LastUpdateTime", PERSISTENT}, {"LiveParameters", PERSISTENT}, - {"LiveTorqueCarParams", PERSISTENT}, {"LiveTorqueParameters", PERSISTENT | DONT_LOG}, {"LongitudinalPersonality", PERSISTENT}, {"NavDestination", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, @@ -161,7 +164,7 @@ std::unordered_map keys = { {"NavPastDestinations", PERSISTENT}, {"NavSettingLeftSide", PERSISTENT}, {"NavSettingTime24h", PERSISTENT}, - {"NavdRender", PERSISTENT}, + {"NetworkMetered", PERSISTENT}, {"ObdMultiplexingChanged", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, {"ObdMultiplexingEnabled", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, {"Offroad_BadNvme", CLEAR_ON_MANAGER_START}, @@ -177,26 +180,24 @@ std::unordered_map keys = { {"Offroad_TemperatureTooHigh", CLEAR_ON_MANAGER_START}, {"Offroad_UnofficialHardware", CLEAR_ON_MANAGER_START}, {"Offroad_UpdateFailed", CLEAR_ON_MANAGER_START}, + {"Offroad_OSMUpdateRequired", CLEAR_ON_MANAGER_START}, {"OpenpilotEnabledToggle", PERSISTENT}, {"PandaHeartbeatLost", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, - {"PandaLogState", PERSISTENT}, + {"PandaSomResetTriggered", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, {"PandaSignatures", CLEAR_ON_MANAGER_START}, - {"Passive", PERSISTENT}, {"PrimeType", PERSISTENT}, {"RecordFront", PERSISTENT}, {"RecordFrontLock", PERSISTENT}, // for the internal fleet {"ReplayControlsState", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, - {"ShouldDoUpdate", CLEAR_ON_MANAGER_START}, {"SnoozeUpdate", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION}, {"SshEnabled", PERSISTENT}, - {"SubscriberInfo", PERSISTENT}, {"TermsVersion", PERSISTENT}, {"Timezone", PERSISTENT}, {"TrainingVersion", PERSISTENT}, {"UbloxAvailable", PERSISTENT}, {"UpdateAvailable", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION}, {"UpdateFailedCount", CLEAR_ON_MANAGER_START}, - {"UpdaterAvailableBranches", CLEAR_ON_MANAGER_START}, + {"UpdaterAvailableBranches", PERSISTENT}, {"UpdaterCurrentDescription", CLEAR_ON_MANAGER_START}, {"UpdaterCurrentReleaseNotes", CLEAR_ON_MANAGER_START}, {"UpdaterFetchAvailable", CLEAR_ON_MANAGER_START}, @@ -204,6 +205,7 @@ std::unordered_map keys = { {"UpdaterNewReleaseNotes", CLEAR_ON_MANAGER_START}, {"UpdaterState", CLEAR_ON_MANAGER_START}, {"UpdaterTargetBranch", CLEAR_ON_MANAGER_START}, + {"UpdaterLastFetchTime", PERSISTENT}, {"Version", PERSISTENT}, {"VisionRadarToggle", PERSISTENT}, {"WheeledBody", PERSISTENT}, @@ -211,6 +213,7 @@ std::unordered_map keys = { {"AccMadsCombo", PERSISTENT}, {"AmapKey1", PERSISTENT}, {"AmapKey2", PERSISTENT}, + {"ApiCache_DriveStats", PERSISTENT}, {"AutoLaneChangeTimer", PERSISTENT}, {"AutoLaneChangeBsmDelay", PERSISTENT}, {"BelowSpeedPause", PERSISTENT}, @@ -224,23 +227,26 @@ std::unordered_map keys = { {"CarModelText", PERSISTENT}, {"ChevronInfo", PERSISTENT}, {"CustomBootScreen", PERSISTENT}, + {"CustomDrivingModel", PERSISTENT}, {"CustomMapboxTokenPk", PERSISTENT}, {"CustomMapboxTokenSk", PERSISTENT}, {"CustomOffsets", PERSISTENT}, {"CustomStockLong", PERSISTENT}, {"CustomTorqueLateral", PERSISTENT}, - {"DevUI", PERSISTENT}, {"DevUIInfo", PERSISTENT}, {"DisableOnroadUploads", PERSISTENT}, {"DisengageLateralOnBrake", PERSISTENT}, + {"DrivingModelGeneration", PERSISTENT}, + {"DrivingModelMetadataText", PERSISTENT}, + {"DrivingModelName", PERSISTENT}, + {"DrivingModelText", PERSISTENT}, + {"DrivingModelUrl", PERSISTENT}, {"DynamicExperimentalControl", PERSISTENT}, - {"DynamicExperimentalControlToggle", PERSISTENT}, {"DynamicLaneProfile", PERSISTENT}, - {"DynamicLaneProfileToggle", PERSISTENT}, {"EnableAmap", PERSISTENT}, - {"EnableDebugSnapshot", PERSISTENT}, {"EnableGmap", PERSISTENT}, {"EnableMads", PERSISTENT}, + {"EnableSlc", PERSISTENT}, {"EndToEndLongAlertLead", PERSISTENT}, {"EndToEndLongAlertLight", PERSISTENT}, {"EndToEndLongAlertUI", PERSISTENT}, @@ -249,8 +255,6 @@ std::unordered_map keys = { {"EnhancedScc", PERSISTENT}, {"FleetManagerPin", PERSISTENT}, {"GmapKey", PERSISTENT}, - {"GpxDeleteAfterUpload", PERSISTENT}, - {"GpxDeleteIfUploaded", PERSISTENT}, {"HandsOnWheelMonitoring", PERSISTENT}, {"HideVEgoUi", PERSISTENT}, {"HkgSmoothStop", PERSISTENT}, @@ -264,18 +268,22 @@ std::unordered_map keys = { {"MadsCruiseMain", PERSISTENT}, {"MadsIconToggle", PERSISTENT}, {"MapboxFullScreen", PERSISTENT}, + {"MapTargetVelocities", PERSISTENT}, {"Map3DBuildings", PERSISTENT}, {"MaxTimeOffroad", PERSISTENT}, + {"NavModelText", PERSISTENT}, + {"NavModelUrl", PERSISTENT}, + {"NNFF", PERSISTENT}, + {"NNFFCarModel", PERSISTENT}, {"OnroadScreenOff", PERSISTENT}, {"OnroadScreenOffBrightness", PERSISTENT}, {"OnroadScreenOffEvent", PERSISTENT}, - {"OsmDbUpdatesCheck", PERSISTENT}, {"OsmLocal", PERSISTENT}, - {"OsmLocalDb", PERSISTENT}, {"OsmLocationName", PERSISTENT}, {"OsmLocationTitle", PERSISTENT}, {"OsmLocationUrl", PERSISTENT}, {"OsmWayTest", PERSISTENT}, + {"OsmDownloadedDate", PERSISTENT}, {"PathOffset", PERSISTENT}, {"QuietDrive", PERSISTENT}, {"RoadEdge", PERSISTENT}, @@ -283,12 +291,15 @@ std::unordered_map keys = { {"ReverseDmCam", PERSISTENT}, {"ScreenRecorder", PERSISTENT}, {"ShowDebugUI", PERSISTENT}, - {"SidebarTemperature", PERSISTENT}, {"SidebarTemperatureOptions", PERSISTENT}, - {"SpeedLimitControl", PERSISTENT}, - {"SpeedLimitPercOffset", PERSISTENT}, + {"SpeedLimitControlPolicy", PERSISTENT}, + {"SpeedLimitEngageType", PERSISTENT}, {"SpeedLimitValueOffset", PERSISTENT}, {"SpeedLimitOffsetType", PERSISTENT}, + {"SpeedLimitWarningFlash", PERSISTENT}, + {"SpeedLimitWarningType", PERSISTENT}, + {"SpeedLimitWarningValueOffset", PERSISTENT}, + {"SpeedLimitWarningOffsetType", PERSISTENT}, {"StandStillTimer", PERSISTENT}, {"StockLongToyota", PERSISTENT}, {"SubaruManualParkingBrakeSng", PERSISTENT}, @@ -304,15 +315,38 @@ std::unordered_map keys = { {"DriverCameraHardwareMissing", PERSISTENT}, {"VisionCurveLaneless", PERSISTENT}, {"VwAccType", PERSISTENT}, + {"VwCCOnly", PERSISTENT}, {"Offroad_SupersededUpdate", PERSISTENT}, + + // PFEIFER - MAPD {{ + {"MapdVersion", PERSISTENT}, + {"RoadName", CLEAR_ON_ONROAD_TRANSITION}, + {"MapSpeedLimit", CLEAR_ON_ONROAD_TRANSITION}, + {"MapAdvisorySpeedLimit", CLEAR_ON_ONROAD_TRANSITION}, + {"NextMapSpeedLimit", CLEAR_ON_ONROAD_TRANSITION}, + {"OSMDownloadBounds", PERSISTENT}, + {"OSMDownloadLocations", PERSISTENT}, + {"OsmDownloadedDate", PERSISTENT}, + {"OsmStateTitle", PERSISTENT}, + {"OsmStateName", PERSISTENT}, + {"OSMDownloadProgress", CLEAR_ON_MANAGER_START}, + {"OsmDbUpdatesCheck", CLEAR_ON_MANAGER_START}, // mapd database update happens with device ON, reset on boot + // }} PFEIFER - MAPD }; } // namespace Params::Params(const std::string &path) { - prefix = "/" + util::getenv("OPENPILOT_PREFIX", "d"); - params_path = ensure_params_path(prefix, path); + params_prefix = "/" + util::getenv("OPENPILOT_PREFIX", "d"); + params_path = ensure_params_path(params_prefix, path); +} + +Params::~Params() { + if (future.valid()) { + future.wait(); + } + assert(queue.empty()); } std::vector Params::allKeys() const { @@ -425,3 +459,20 @@ void Params::clearAll(ParamKeyType key_type) { fsync_dir(getParamPath()); } + +void Params::putNonBlocking(const std::string &key, const std::string &val) { + queue.push(std::make_pair(key, val)); + // start thread on demand + if (!future.valid() || future.wait_for(std::chrono::milliseconds(0)) == std::future_status::ready) { + future = std::async(std::launch::async, &Params::asyncWriteThread, this); + } +} + +void Params::asyncWriteThread() { + // TODO: write the latest one if a key has multiple values in the queue. + std::pair p; + while (queue.try_pop(p, 0)) { + // Params::put is Thread-Safe + put(p.first, p.second); + } +} diff --git a/common/params.h b/common/params.h index fbe0bba6b0..d726a6185f 100644 --- a/common/params.h +++ b/common/params.h @@ -1,21 +1,28 @@ #pragma once +#include #include #include +#include +#include #include +#include "common/queue.h" + enum ParamKeyType { PERSISTENT = 0x02, CLEAR_ON_MANAGER_START = 0x04, CLEAR_ON_ONROAD_TRANSITION = 0x08, CLEAR_ON_OFFROAD_TRANSITION = 0x10, DONT_LOG = 0x20, + DEVELOPMENT_ONLY = 0x40, ALL = 0xFFFFFFFF }; class Params { public: explicit Params(const std::string &path = {}); + ~Params(); // Not copyable. Params(const Params&) = delete; Params& operator=(const Params&) = delete; @@ -24,7 +31,7 @@ public: bool checkKey(const std::string &key); ParamKeyType getKeyType(const std::string &key); inline std::string getParamPath(const std::string &key = {}) { - return params_path + prefix + (key.empty() ? "" : "/" + key); + return params_path + params_prefix + (key.empty() ? "" : "/" + key); } // Delete a value @@ -46,8 +53,18 @@ public: inline int putBool(const std::string &key, bool val) { return put(key.c_str(), val ? "1" : "0", 1); } + void putNonBlocking(const std::string &key, const std::string &val); + inline void putBoolNonBlocking(const std::string &key, bool val) { + putNonBlocking(key, val ? "1" : "0"); + } private: + void asyncWriteThread(); + std::string params_path; - std::string prefix; + std::string params_prefix; + + // for nonblocking write + std::future future; + SafeQueue> queue; }; diff --git a/common/params.py b/common/params.py index ea8ac7514a..66808083dc 100644 --- a/common/params.py +++ b/common/params.py @@ -1,10 +1,7 @@ -from openpilot.common.params_pyx import Params, ParamKeyType, UnknownKeyName, put_nonblocking, \ - put_bool_nonblocking +from openpilot.common.params_pyx import Params, ParamKeyType, UnknownKeyName assert Params assert ParamKeyType assert UnknownKeyName -assert put_nonblocking -assert put_bool_nonblocking if __name__ == "__main__": import sys diff --git a/common/params_pyx.pyx b/common/params_pyx.pyx index abb3199d05..47d2075df2 100644 --- a/common/params_pyx.pyx +++ b/common/params_pyx.pyx @@ -3,7 +3,6 @@ from libcpp cimport bool from libcpp.string cimport string from libcpp.vector cimport vector -import threading cdef extern from "common/params.h": cpdef enum ParamKeyType: @@ -11,14 +10,17 @@ cdef extern from "common/params.h": CLEAR_ON_MANAGER_START CLEAR_ON_ONROAD_TRANSITION CLEAR_ON_OFFROAD_TRANSITION + DEVELOPMENT_ONLY ALL cdef cppclass c_Params "Params": - c_Params(string) nogil + c_Params(string) except + nogil string get(string, bool) nogil bool getBool(string, bool) nogil int remove(string) nogil int put(string, string) nogil + void putNonBlocking(string, string) nogil + void putBoolNonBlocking(string, bool) nogil int putBool(string, bool) nogil bool checkKey(string) nogil string getParamPath(string) nogil @@ -79,7 +81,7 @@ cdef class Params: """ Warning: This function blocks until the param is written to disk! In very rare cases this can take over a second, and your code will hang. - Use the put_nonblocking helper function in time sensitive code, but + Use the put_nonblocking, put_bool_nonblocking in time sensitive code, but in general try to avoid writing params as much as possible. """ cdef string k = self.check_key(key) @@ -92,6 +94,17 @@ cdef class Params: with nogil: self.p.putBool(k, val) + def put_nonblocking(self, key, dat): + cdef string k = self.check_key(key) + cdef string dat_bytes = ensure_bytes(dat) + with nogil: + self.p.putNonBlocking(k, dat_bytes) + + def put_bool_nonblocking(self, key, bool val): + cdef string k = self.check_key(key) + with nogil: + self.p.putBoolNonBlocking(k, val) + def remove(self, key): cdef string k = self.check_key(key) with nogil: @@ -103,9 +116,3 @@ cdef class Params: def all_keys(self): return self.p.allKeys() - -def put_nonblocking(key, val, d=""): - threading.Thread(target=lambda: Params(d).put(key, val)).start() - -def put_bool_nonblocking(key, bool val, d=""): - threading.Thread(target=lambda: Params(d).put_bool(key, val)).start() diff --git a/common/prefix.py b/common/prefix.py index 6b7e7e2fd7..d027e3e5a1 100644 --- a/common/prefix.py +++ b/common/prefix.py @@ -6,14 +6,17 @@ from typing import Optional from openpilot.common.params import Params from openpilot.system.hardware.hw import Paths +from openpilot.system.hardware.hw import DEFAULT_DOWNLOAD_CACHE_ROOT class OpenpilotPrefix: - def __init__(self, prefix: Optional[str] = None, clean_dirs_on_exit: bool = True): + def __init__(self, prefix: Optional[str] = None, clean_dirs_on_exit: bool = True, shared_download_cache: bool = False): self.prefix = prefix if prefix else str(uuid.uuid4().hex[0:15]) self.msgq_path = os.path.join('/dev/shm', self.prefix) self.clean_dirs_on_exit = clean_dirs_on_exit + self.shared_download_cache = shared_download_cache def __enter__(self): + self.original_prefix = os.environ.get('OPENPILOT_PREFIX', None) os.environ['OPENPILOT_PREFIX'] = self.prefix try: os.mkdir(self.msgq_path) @@ -21,6 +24,9 @@ class OpenpilotPrefix: pass os.makedirs(Paths.log_root(), exist_ok=True) + if self.shared_download_cache: + os.environ["COMMA_CACHE"] = DEFAULT_DOWNLOAD_CACHE_ROOT + return self def __exit__(self, exc_type, exc_obj, exc_tb): @@ -28,6 +34,8 @@ class OpenpilotPrefix: self.clean_dirs() try: del os.environ['OPENPILOT_PREFIX'] + if self.original_prefix is not None: + os.environ['OPENPILOT_PREFIX'] = self.original_prefix except KeyError: pass return False @@ -39,5 +47,6 @@ class OpenpilotPrefix: os.remove(symlink_path) shutil.rmtree(self.msgq_path, ignore_errors=True) shutil.rmtree(Paths.log_root(), ignore_errors=True) - shutil.rmtree(Paths.download_cache_root(), ignore_errors=True) + if not os.environ.get("COMMA_CACHE", False): + shutil.rmtree(Paths.download_cache_root(), ignore_errors=True) shutil.rmtree(Paths.comma_home(), ignore_errors=True) diff --git a/common/profiler.py b/common/profiler.py deleted file mode 100644 index 8b1a7a8cfa..0000000000 --- a/common/profiler.py +++ /dev/null @@ -1,45 +0,0 @@ -import time - -class Profiler(): - def __init__(self, enabled=False): - self.enabled = enabled - self.cp = {} - self.cp_ignored = [] - self.iter = 0 - self.start_time = time.time() - self.last_time = self.start_time - self.tot = 0. - - def reset(self, enabled=False): - self.enabled = enabled - self.cp = {} - self.cp_ignored = [] - self.iter = 0 - self.start_time = time.time() - self.last_time = self.start_time - - def checkpoint(self, name, ignore=False): - # ignore flag needed when benchmarking threads with ratekeeper - if not self.enabled: - return - tt = time.time() - if name not in self.cp: - self.cp[name] = 0. - if ignore: - self.cp_ignored.append(name) - self.cp[name] += tt - self.last_time - if not ignore: - self.tot += tt - self.last_time - self.last_time = tt - - def display(self): - if not self.enabled: - return - self.iter += 1 - print("******* Profiling %d *******" % self.iter) - for n, ms in sorted(self.cp.items(), key=lambda x: -x[1]): - if n in self.cp_ignored: - print("%30s: %9.2f avg: %7.2f percent: %3.0f IGNORED" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100)) - else: - print("%30s: %9.2f avg: %7.2f percent: %3.0f" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100)) - print(f"Iter clock: {self.tot / self.iter:2.6f} TOTAL: {self.tot:2.2f}") diff --git a/common/realtime.py b/common/realtime.py index 05e19e770f..d9168b09bd 100644 --- a/common/realtime.py +++ b/common/realtime.py @@ -2,6 +2,8 @@ import gc import os import time +import threading +import psutil from collections import deque from typing import Optional, List, Union @@ -45,6 +47,14 @@ def config_realtime_process(cores: Union[int, List[int]], priority: int) -> None set_core_affinity(c) +def set_thread_affinity(thread: threading.Thread, cores: List[int]) -> None: + try: + process = psutil.Process(thread.ident) + process.cpu_affinity(cores) + except Exception as e: + print(f"Error setting thread affinity: {e}") + + class Ratekeeper: def __init__(self, rate: float, print_delay_threshold: Optional[float] = 0.0) -> None: """Rate in Hz for ratekeeping. print_delay_threshold must be nonnegative.""" @@ -78,7 +88,7 @@ class Ratekeeper: time.sleep(self._remaining) return lagged - # this only monitor the cumulative lag, but does not enforce a rate + # Monitors the cumulative lag, but does not enforce a rate def monitor_time(self) -> bool: prev = self._last_monitor_time self._last_monitor_time = time.monotonic() diff --git a/common/retry.py b/common/retry.py new file mode 100644 index 0000000000..9bd4ac9522 --- /dev/null +++ b/common/retry.py @@ -0,0 +1,30 @@ +import time +import functools + +from openpilot.common.swaglog import cloudlog + + +def retry(attempts=3, delay=1.0, ignore_failure=False): + def decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + for _ in range(attempts): + try: + return func(*args, **kwargs) + except Exception: + cloudlog.exception(f"{func.__name__} failed, trying again") + time.sleep(delay) + + if ignore_failure: + cloudlog.error(f"{func.__name__} failed after retry") + else: + raise Exception(f"{func.__name__} failed after retry") + return wrapper + return decorator + + +if __name__ == "__main__": + @retry(attempts=10) + def abc(): + raise ValueError("abc failed :(") + abc() diff --git a/common/simple_kalman.py b/common/simple_kalman.py new file mode 100644 index 0000000000..194b27204b --- /dev/null +++ b/common/simple_kalman.py @@ -0,0 +1,54 @@ +import numpy as np + + +def get_kalman_gain(dt, A, C, Q, R, iterations=100): + P = np.zeros_like(Q) + for _ in range(iterations): + P = A.dot(P).dot(A.T) + dt * Q + S = C.dot(P).dot(C.T) + R + K = P.dot(C.T).dot(np.linalg.inv(S)) + P = (np.eye(len(P)) - K.dot(C)).dot(P) + return K + + +class KF1D: + # this EKF assumes constant covariance matrix, so calculations are much simpler + # the Kalman gain also needs to be precomputed using the control module + + def __init__(self, x0, A, C, K): + self.x0_0 = x0[0][0] + self.x1_0 = x0[1][0] + self.A0_0 = A[0][0] + self.A0_1 = A[0][1] + self.A1_0 = A[1][0] + self.A1_1 = A[1][1] + self.C0_0 = C[0] + self.C0_1 = C[1] + self.K0_0 = K[0][0] + self.K1_0 = K[1][0] + + self.A_K_0 = self.A0_0 - self.K0_0 * self.C0_0 + self.A_K_1 = self.A0_1 - self.K0_0 * self.C0_1 + self.A_K_2 = self.A1_0 - self.K1_0 * self.C0_0 + self.A_K_3 = self.A1_1 - self.K1_0 * self.C0_1 + + # K matrix needs to be pre-computed as follow: + # import control + # (x, l, K) = control.dare(np.transpose(self.A), np.transpose(self.C), Q, R) + # self.K = np.transpose(K) + + def update(self, meas): + #self.x = np.dot(self.A_K, self.x) + np.dot(self.K, meas) + x0_0 = self.A_K_0 * self.x0_0 + self.A_K_1 * self.x1_0 + self.K0_0 * meas + x1_0 = self.A_K_2 * self.x0_0 + self.A_K_3 * self.x1_0 + self.K1_0 * meas + self.x0_0 = x0_0 + self.x1_0 = x1_0 + return [self.x0_0, self.x1_0] + + @property + def x(self): + return [[self.x0_0], [self.x1_0]] + + def set_x(self, x): + self.x0_0 = x[0][0] + self.x1_0 = x[1][0] diff --git a/common/statlog.cc b/common/statlog.cc deleted file mode 100644 index 587f3e8620..0000000000 --- a/common/statlog.cc +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include "common/statlog.h" -#include "common/util.h" - -#include -#include -#include -#include - -class StatlogState : public LogState { - public: - StatlogState() : LogState("ipc:///tmp/stats") {} -}; - -static StatlogState s = {}; - -static void log(const char* metric_type, const char* metric, const char* fmt, ...) { - std::lock_guard lk(s.lock); - if (!s.initialized) s.initialize(); - - char* value_buf = nullptr; - va_list args; - va_start(args, fmt); - int ret = vasprintf(&value_buf, fmt, args); - va_end(args); - - if (ret > 0 && value_buf) { - char* line_buf = nullptr; - ret = asprintf(&line_buf, "%s:%s|%s", metric, value_buf, metric_type); - if (ret > 0 && line_buf) { - zmq_send(s.sock, line_buf, ret, ZMQ_NOBLOCK); - free(line_buf); - } - free(value_buf); - } -} - -void statlog_log(const char* metric_type, const char* metric, int value) { - log(metric_type, metric, "%d", value); -} - -void statlog_log(const char* metric_type, const char* metric, float value) { - log(metric_type, metric, "%f", value); -} diff --git a/common/statlog.h b/common/statlog.h deleted file mode 100644 index 5d223bb666..0000000000 --- a/common/statlog.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#define STATLOG_GAUGE "g" -#define STATLOG_SAMPLE "sa" - -void statlog_log(const char* metric_type, const char* metric, int value); -void statlog_log(const char* metric_type, const char* metric, float value); - -#define statlog_gauge(metric, value) statlog_log(STATLOG_GAUGE, metric, value) -#define statlog_sample(metric, value) statlog_log(STATLOG_SAMPLE, metric, value) diff --git a/common/swaglog.cc b/common/swaglog.cc index bcd597a257..873836b725 100644 --- a/common/swaglog.cc +++ b/common/swaglog.cc @@ -5,30 +5,29 @@ #include "common/swaglog.h" #include -#include -#include #include #include #include #include +#include #include "third_party/json11/json11.hpp" - -#include "common/util.h" #include "common/version.h" #include "system/hardware/hw.h" -class SwaglogState : public LogState { - public: - SwaglogState() : LogState(Path::swaglog_ipc().c_str()) {} +class SwaglogState { +public: + SwaglogState() { + zctx = zmq_ctx_new(); + sock = zmq_socket(zctx, ZMQ_PUSH); - json11::Json::object ctx_j; + // Timeout on shutdown for messages to be received by the logging process + int timeout = 100; + zmq_setsockopt(sock, ZMQ_LINGER, &timeout, sizeof(timeout)); + zmq_connect(sock, Path::swaglog_ipc().c_str()); - inline void initialize() { - ctx_j = json11::Json::object {}; print_level = CLOUDLOG_WARNING; - const char* print_lvl = getenv("LOGPRINT"); - if (print_lvl) { + if (const char* print_lvl = getenv("LOGPRINT")) { if (strcmp(print_lvl, "debug") == 0) { print_level = CLOUDLOG_DEBUG; } else if (strcmp(print_lvl, "info") == 0) { @@ -38,39 +37,44 @@ class SwaglogState : public LogState { } } - // openpilot bindings - char* dongle_id = getenv("DONGLE_ID"); - if (dongle_id) { + ctx_j = json11::Json::object{}; + if (char* dongle_id = getenv("DONGLE_ID")) { ctx_j["dongle_id"] = dongle_id; } - char* daemon_name = getenv("MANAGER_DAEMON"); - if (daemon_name) { + if (char* daemon_name = getenv("MANAGER_DAEMON")) { ctx_j["daemon"] = daemon_name; } ctx_j["version"] = COMMA_VERSION; ctx_j["dirty"] = !getenv("CLEAN"); - - // device type ctx_j["device"] = Hardware::get_name(); - LogState::initialize(); } + + ~SwaglogState() { + zmq_close(sock); + zmq_ctx_destroy(zctx); + } + + void log(int levelnum, const char* filename, int lineno, const char* func, const char* msg, const std::string& log_s) { + std::lock_guard lk(lock); + if (levelnum >= print_level) { + printf("%s: %s\n", filename, msg); + } + zmq_send(sock, log_s.data(), log_s.length(), ZMQ_NOBLOCK); + } + + std::mutex lock; + void* zctx = nullptr; + void* sock = nullptr; + int print_level; + json11::Json::object ctx_j; }; -static SwaglogState s = {}; bool LOG_TIMESTAMPS = getenv("LOG_TIMESTAMPS"); uint32_t NO_FRAME_ID = std::numeric_limits::max(); -static void log(int levelnum, const char* filename, int lineno, const char* func, const char* msg, const std::string& log_s) { - if (levelnum >= s.print_level) { - printf("%s: %s\n", filename, msg); - } - zmq_send(s.sock, log_s.data(), log_s.length(), ZMQ_NOBLOCK); -} - static void cloudlog_common(int levelnum, const char* filename, int lineno, const char* func, char* msg_buf, const json11::Json::object &msg_j={}) { - std::lock_guard lk(s.lock); - if (!s.initialized) s.initialize(); + static SwaglogState s; json11::Json::object log_j = json11::Json::object { {"ctx", s.ctx_j}, @@ -89,7 +93,7 @@ static void cloudlog_common(int levelnum, const char* filename, int lineno, cons std::string log_s; log_s += (char)levelnum; ((json11::Json)log_j).dump(log_s); - log(levelnum, filename, lineno, func, msg_buf, log_s); + s.log(levelnum, filename, lineno, func, msg_buf, log_s); free(msg_buf); } diff --git a/system/swaglog.py b/common/swaglog.py similarity index 100% rename from system/swaglog.py rename to common/swaglog.py diff --git a/common/tests/test_file_helpers.py b/common/tests/test_file_helpers.py index e36df57a32..1817f77cd2 100644 --- a/common/tests/test_file_helpers.py +++ b/common/tests/test_file_helpers.py @@ -2,7 +2,6 @@ import os import unittest from uuid import uuid4 -from openpilot.common.file_helpers import atomic_write_on_fs_tmp from openpilot.common.file_helpers import atomic_write_in_dir @@ -11,14 +10,12 @@ class TestFileHelpers(unittest.TestCase): path = f"/tmp/tmp{uuid4()}" with atomic_write_func(path) as f: f.write("test") + assert not os.path.exists(path) with open(path) as f: self.assertEqual(f.read(), "test") os.remove(path) - def test_atomic_write_on_fs_tmp(self): - self.run_atomic_write_func(atomic_write_on_fs_tmp) - def test_atomic_write_in_dir(self): self.run_atomic_write_func(atomic_write_in_dir) diff --git a/common/tests/test_params.cc b/common/tests/test_params.cc new file mode 100644 index 0000000000..f8d6c79f55 --- /dev/null +++ b/common/tests/test_params.cc @@ -0,0 +1,27 @@ +#include "catch2/catch.hpp" +#define private public +#include "common/params.h" +#include "common/util.h" + +TEST_CASE("params_nonblocking_put") { + char tmp_path[] = "/tmp/asyncWriter_XXXXXX"; + const std::string param_path = mkdtemp(tmp_path); + auto param_names = {"CarParams", "IsMetric"}; + { + Params params(param_path); + for (const auto &name : param_names) { + params.putNonBlocking(name, "1"); + // param is empty + REQUIRE(params.get(name).empty()); + } + + // check if thread is running + REQUIRE(params.future.valid()); + REQUIRE(params.future.wait_for(std::chrono::milliseconds(0)) == std::future_status::timeout); + } + // check results + Params p(param_path); + for (const auto &name : param_names) { + REQUIRE(p.get(name) == "1"); + } +} diff --git a/common/tests/test_params.py b/common/tests/test_params.py index fb6f320ea4..490ee122be 100644 --- a/common/tests/test_params.py +++ b/common/tests/test_params.py @@ -4,7 +4,7 @@ import time import uuid import unittest -from openpilot.common.params import Params, ParamKeyType, UnknownKeyName, put_nonblocking, put_bool_nonblocking +from openpilot.common.params import Params, ParamKeyType, UnknownKeyName class TestParams(unittest.TestCase): def setUp(self): @@ -86,7 +86,7 @@ class TestParams(unittest.TestCase): q = Params() def _delayed_writer(): time.sleep(0.1) - put_nonblocking("CarParams", "test") + Params().put_nonblocking("CarParams", "test") threading.Thread(target=_delayed_writer).start() assert q.get("CarParams") is None assert q.get("CarParams", True) == b"test" @@ -95,7 +95,7 @@ class TestParams(unittest.TestCase): q = Params() def _delayed_writer(): time.sleep(0.1) - put_bool_nonblocking("CarParams", True) + Params().put_bool_nonblocking("CarParams", True) threading.Thread(target=_delayed_writer).start() assert q.get("CarParams") is None assert q.get("CarParams", True) == b"1" diff --git a/common/tests/test_ratekeeper.cc b/common/tests/test_ratekeeper.cc deleted file mode 100644 index 32c7dfe58c..0000000000 --- a/common/tests/test_ratekeeper.cc +++ /dev/null @@ -1,23 +0,0 @@ -#include "catch2/catch.hpp" -#include "common/ratekeeper.h" -#include "common/timing.h" -#include "common/util.h" - -TEST_CASE("RateKeeper") { - float freq = GENERATE(10, 50, 100); - RateKeeper rk("Test RateKeeper", freq); - - int lags = 0; - int bad_keep_times = 0; - for (int i = 0; i < freq; ++i) { - double begin = seconds_since_boot(); - util::sleep_for(util::random_int(0, 1000.0 / freq - 1)); - bool lagged = rk.keepTime(); - lags += lagged; - bad_keep_times += (seconds_since_boot() - begin - (1 / freq)) > 1e-3; - } - - // need a tolerance here due to scheduling - REQUIRE(lags < 5); - REQUIRE(bad_keep_times < 5); -} diff --git a/common/tests/test_simple_kalman.py b/common/tests/test_simple_kalman.py new file mode 100644 index 0000000000..f641cd19e6 --- /dev/null +++ b/common/tests/test_simple_kalman.py @@ -0,0 +1,35 @@ +import unittest + +from openpilot.common.simple_kalman import KF1D + + +class TestSimpleKalman(unittest.TestCase): + def setUp(self): + dt = 0.01 + x0_0 = 0.0 + x1_0 = 0.0 + A0_0 = 1.0 + A0_1 = dt + A1_0 = 0.0 + A1_1 = 1.0 + C0_0 = 1.0 + C0_1 = 0.0 + K0_0 = 0.12287673 + K1_0 = 0.29666309 + + self.kf = KF1D(x0=[[x0_0], [x1_0]], + A=[[A0_0, A0_1], [A1_0, A1_1]], + C=[C0_0, C0_1], + K=[[K0_0], [K1_0]]) + + def test_getter_setter(self): + self.kf.set_x([[1.0], [1.0]]) + self.assertEqual(self.kf.x, [[1.0], [1.0]]) + + def update_returns_state(self): + x = self.kf.update(100) + self.assertEqual(x, self.kf.x) + + +if __name__ == "__main__": + unittest.main() diff --git a/common/time.py b/common/time.py index b9da106fd0..f2e49eb546 100644 --- a/common/time.py +++ b/common/time.py @@ -1,6 +1,6 @@ import datetime -MIN_DATE = datetime.datetime(year=2023, month=6, day=1) +MIN_DATE = datetime.datetime(year=2024, month=1, day=28) def system_time_valid(): - return datetime.datetime.now() > MIN_DATE \ No newline at end of file + return datetime.datetime.now() > MIN_DATE diff --git a/common/transformations/README.md b/common/transformations/README.md index 13878cb99c..42a060da80 100644 --- a/common/transformations/README.md +++ b/common/transformations/README.md @@ -11,7 +11,7 @@ by generating a rotation matrix and multiplying. | :-------------: |:-------------:| :-----:| :----: | | Geodetic | [Latitude, Longitude, Altitude] | geodetic coordinates | Sometimes used as [lon, lat, alt], avoid this frame. | | ECEF | [x, y, z] | meters | We use **ITRF14 (IGS14)**, NOT NAD83.
This is the global Mesh3D frame. | -| NED | [North, East, Down] | meters | Relative to earth's surface, useful for vizualizing. | +| NED | [North, East, Down] | meters | Relative to earth's surface, useful for visualizing. | | Device | [Forward, Right, Down] | meters | This is the Mesh3D local frame.
Relative to camera, **not imu.**
![img](http://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/RPY_angles_of_airplanes.png/440px-RPY_angles_of_airplanes.png)| | Calibrated | [Forward, Right, Down] | meters | This is the frame the model outputs are in.
More details below.
| | Car | [Forward, Right, Down] | meters | This is useful for estimating position of points on the road.
More details below.
| diff --git a/common/util.h b/common/util.h index 5c0ef7fec5..0cbad5bd31 100644 --- a/common/util.h +++ b/common/util.h @@ -3,7 +3,6 @@ #include #include #include -#include #include #include @@ -180,36 +179,3 @@ void update_max_atomic(std::atomic& max, T const& value) { T prev = max; while (prev < value && !max.compare_exchange_weak(prev, value)) {} } - -class LogState { - public: - bool initialized = false; - std::mutex lock; - void *zctx = nullptr; - void *sock = nullptr; - int print_level; - std::string endpoint; - - LogState(std::string _endpoint) { - endpoint = _endpoint; - } - - inline void initialize() { - zctx = zmq_ctx_new(); - sock = zmq_socket(zctx, ZMQ_PUSH); - - // Timeout on shutdown for messages to be received by the logging process - int timeout = 100; - zmq_setsockopt(sock, ZMQ_LINGER, &timeout, sizeof(timeout)); - - zmq_connect(sock, endpoint.c_str()); - initialized = true; - } - - ~LogState() { - if (initialized) { - zmq_close(sock); - zmq_ctx_destroy(zctx); - } - } -}; diff --git a/common/version.h b/common/version.h index 78d9d61ab4..a0147beadf 100644 --- a/common/version.h +++ b/common/version.h @@ -1 +1 @@ -#define COMMA_VERSION "0.9.5.1" +#define COMMA_VERSION "0.9.6.0" diff --git a/common/window.py b/common/window.py deleted file mode 100644 index 95886c0c92..0000000000 --- a/common/window.py +++ /dev/null @@ -1,61 +0,0 @@ -import sys -import pygame -import cv2 - -class Window: - def __init__(self, w, h, caption="window", double=False, halve=False): - self.w = w - self.h = h - pygame.display.init() - pygame.display.set_caption(caption) - self.double = double - self.halve = halve - if self.double: - self.rw, self.rh = w*2, h*2 - elif self.halve: - self.rw, self.rh = w//2, h//2 - else: - self.rw, self.rh = w, h - self.screen = pygame.display.set_mode((self.rw, self.rh)) - pygame.display.flip() - - # hack for xmonad, it shrinks the window by 6 pixels after the display.flip - if self.screen.get_width() != self.rw: - self.screen = pygame.display.set_mode((self.rw+(self.rw-self.screen.get_width()), self.rh+(self.rh-self.screen.get_height()))) - pygame.display.flip() - - def draw(self, out): - pygame.event.pump() - if self.double: - out2 = cv2.resize(out, (self.w*2, self.h*2)) - pygame.surfarray.blit_array(self.screen, out2.swapaxes(0, 1)) - elif self.halve: - out2 = cv2.resize(out, (self.w//2, self.h//2)) - pygame.surfarray.blit_array(self.screen, out2.swapaxes(0, 1)) - else: - pygame.surfarray.blit_array(self.screen, out.swapaxes(0, 1)) - pygame.display.flip() - - def getkey(self): - while 1: - event = pygame.event.wait() - if event.type == pygame.QUIT: - pygame.quit() - sys.exit() - if event.type == pygame.KEYDOWN: - return event.key - - def getclick(self): - for event in pygame.event.get(): - if event.type == pygame.MOUSEBUTTONDOWN: - mx, my = pygame.mouse.get_pos() - return mx, my - -if __name__ == "__main__": - import numpy as np - win = Window(200, 200, double=True) - img: np.ndarray = np.zeros((200, 200, 3), np.uint8) - while 1: - print("draw") - img += 1 - win.draw(img) diff --git a/common/xattr.py b/common/xattr.py deleted file mode 100644 index 26616fd638..0000000000 --- a/common/xattr.py +++ /dev/null @@ -1,46 +0,0 @@ -import os -from cffi import FFI -from typing import Any, List - -# Workaround for the EON/termux build of Python having os.*xattr removed. -ffi = FFI() -ffi.cdef(""" -int setxattr(const char *path, const char *name, const void *value, size_t size, int flags); -ssize_t getxattr(const char *path, const char *name, void *value, size_t size); -ssize_t listxattr(const char *path, char *list, size_t size); -int removexattr(const char *path, const char *name); -""") -libc = ffi.dlopen(None) - -def setxattr(path, name, value, flags=0) -> None: - path = path.encode() - name = name.encode() - if libc.setxattr(path, name, value, len(value), flags) == -1: - raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: setxattr({path}, {name}, {value}, {flags})") - -def getxattr(path, name, size=128): - path = path.encode() - name = name.encode() - value = ffi.new(f"char[{size}]") - l = libc.getxattr(path, name, value, size) - if l == -1: - # errno 61 means attribute hasn't been set - if ffi.errno == 61: - return None - raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: getxattr({path}, {name}, {size})") - return ffi.buffer(value)[:l] - -def listxattr(path, size=128) -> List[Any]: - path = path.encode() - attrs = ffi.new(f"char[{size}]") - l = libc.listxattr(path, attrs, size) - if l == -1: - raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: listxattr({path}, {size})") - # attrs is b'\0' delimited values (so chop off trailing empty item) - return [a.decode() for a in ffi.buffer(attrs)[:l].split(b"\0")[0:-1]] - -def removexattr(path, name) -> None: - path = path.encode() - name = name.encode() - if libc.removexattr(path, name) == -1: - raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: removexattr({path}, {name})") diff --git a/conftest.py b/conftest.py index e139ab8400..c4eb259a35 100644 --- a/conftest.py +++ b/conftest.py @@ -1,10 +1,82 @@ +import os import pytest +import random from openpilot.common.prefix import OpenpilotPrefix +from openpilot.selfdrive.manager import manager +from openpilot.system.hardware import TICI + + +def pytest_sessionstart(session): + # TODO: fix tests and enable test order randomization + if session.config.pluginmanager.hasplugin('randomly'): + session.config.option.randomly_reorganize = False + + +@pytest.hookimpl(hookwrapper=True, trylast=True) +def pytest_runtest_call(item): + # ensure we run as a hook after capturemanager's + if item.get_closest_marker("nocapture") is not None: + capmanager = item.config.pluginmanager.getplugin("capturemanager") + with capmanager.global_and_fixture_disabled(): + yield + else: + yield @pytest.fixture(scope="function", autouse=True) -def global_setup_and_teardown(): +def openpilot_function_fixture(request): + starting_env = dict(os.environ) + + random.seed(0) + # setup a clean environment for each test - with OpenpilotPrefix(): + with OpenpilotPrefix(shared_download_cache=request.node.get_closest_marker("shared_download_cache") is not None) as prefix: + prefix = os.environ["OPENPILOT_PREFIX"] + yield + + # ensure the test doesn't change the prefix + assert "OPENPILOT_PREFIX" in os.environ and prefix == os.environ["OPENPILOT_PREFIX"] + + os.environ.clear() + os.environ.update(starting_env) + + # cleanup any started processes + manager.manager_cleanup() + +# If you use setUpClass, the environment variables won't be cleared properly, +# so we need to hook both the function and class pytest fixtures +@pytest.fixture(scope="class", autouse=True) +def openpilot_class_fixture(): + starting_env = dict(os.environ) + + yield + + os.environ.clear() + os.environ.update(starting_env) + + +@pytest.hookimpl(tryfirst=True) +def pytest_collection_modifyitems(config, items): + skipper = pytest.mark.skip(reason="Skipping tici test on PC") + for item in items: + if not TICI and "tici" in item.keywords: + item.add_marker(skipper) + + if "xdist_group_class_property" in item.keywords: + class_property_name = item.get_closest_marker('xdist_group_class_property').args[0] + class_property_value = getattr(item.cls, class_property_name) + item.add_marker(pytest.mark.xdist_group(class_property_value)) + + +@pytest.hookimpl(trylast=True) +def pytest_configure(config): + config_line = "xdist_group_class_property: group tests by a property of the class that contains them" + config.addinivalue_line("markers", config_line) + + config_line = "nocapture: don't capture test output" + config.addinivalue_line("markers", config_line) + + config_line = "shared_download_cache: share download cache between tests" + config.addinivalue_line("markers", config_line) diff --git a/docs/BOUNTIES.md b/docs/BOUNTIES.md new file mode 100644 index 0000000000..5ff5dd939f --- /dev/null +++ b/docs/BOUNTIES.md @@ -0,0 +1,62 @@ +# [Bounties](https://github.com/orgs/commaai/projects/26/views/1) + +Get paid to improve openpilot! + +## Rules + +* code must be merged into openpilot master +* bounty eligibility is solely at our discretion +* once you open a PR, the bounty is locked to you until you stop working on it +* open a ticket at [comma.ai/support](https://comma.ai/support/shop-order) with links to your PRs to claim +* get an extra 20% if you redeem your bounty in [comma shop](https://comma.ai/shop) credit (including refunds on previous orders) + +New bounties can be proposed in the [**#contributing**](https://discord.com/channels/469524606043160576/1183173332531687454) channel in Discord. + +## Issue bounties + +We've tagged bounty-eligible issues across openpilot and the rest of our repos; check out all the open ones [here](https://github.com/orgs/commaai/projects/26/views/1). These bounties roughly work out like this: +* **$100** - a few hours of work for an experienced openpilot developer; a good intro for someone new to openpilot +* **$300** - a day of work for an experienced openpilot developer +* **$500** - a few days of work for an experienced openpilot developer +* **$1k+** - a week or two of work (could be less for the right person) + +## Car bounties + +The car bounties only apply to cars that have a path to ship in openpilot release, which excludes unsupportable cars (e.g. Fords with a steering lockout) or cars that require extra hardware (Honda Accord with serial steering). + +#### Brand or platform port - $2000 +Example PR: [commaai/openpilot#23331](https://github.com/commaai/openpilot/pull/23331) + +This is for adding support for an entirely new brand or a substantially new ADAS platform within a brand (e.g. the Volkswagen PQ platform). + +#### Model port - $250 +Example PR: [commaai/openpilot#30245](https://github.com/commaai/openpilot/pull/30245) + +This is for porting a new car model that runs on a platform openpilot already supports. +In the average case, this is a few hours of work for an experienced software developer. + +This bounty also covers getting openpilot supported on a previously unsupported trim of an already supported car, e.g. the Chevy Bolt without ACC. + +#### Reverse Engineering a new Actuation Message - $300 + +This is for cars that are already supported, and it has three components: +* reverse a new steering, adaptive cruise, or AEB message +* merge the DBC definitions to [opendbc](http://github.com/commaai/opendbc) +* merge the openpilot code to use it and post a demo route + +The control doesn't have to be perfect, but it should generally do what it's supposed to do. + +### Specific Cars + +#### Rivian R1T or R1S - $3000 + +Get a Rivian driving with openpilot. +Requires a merged port with lateral control and at least a POC of longitudinal control. + +#### Toyota SecOc - $5000 + +We're contributing $5k to the [community-organized bounty](https://github.com/commaai/openpilot/discussions/19932). + +#### Chevy Bolt with SuperCruise - $2500 + +The Bolt is already supported on the trim with standard ACC. Get openpilot working on the trim with SuperCruise. It must be a normal install: no extra pandas or other hardware, no ECU reflashes, etc. The full bounty is for a port with lateral and longitudinal control. $1500 of the bounty can be claimed with a lateral-only port. diff --git a/docs/CARS.md b/docs/CARS.md index 8bb318c13e..5620bc703c 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -4,272 +4,285 @@ A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified. -# 262 Supported Cars +# 275 Supported Cars |Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Resume from stop|Hardware Needed
 |Video| |---|---|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:| -|Acura|ILX 2016-19|AcuraWatch Plus|openpilot|25 mph|25 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Acura|RDX 2016-18|AcuraWatch Plus|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Acura|RDX 2019-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Audi|A3 2014-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Audi|A3 Sportback e-tron 2017-18|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Audi|Q2 2018|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Audi|Q3 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Audi|RS3 2018|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Audi|S3 2015-17|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Buick|LaCrosse 2017-19[4](#footnotes)|Driver Confidence Package 2|openpilot|18 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma three
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Cadillac|Escalade 2017[4](#footnotes)|Driver Assist Package|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma three
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Cadillac|Escalade ESV 2016[4](#footnotes)|Adaptive Cruise Control (ACC) & LKAS|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma three
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chevrolet|Bolt EUV 2022-23|Premier or Premier Redline Trim without Super Cruise Package|openpilot available[1](#footnotes)|3 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chevrolet|Bolt EV 2022-23|2LT Trim with Adaptive Cruise Control Package|openpilot available[1](#footnotes)|3 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chevrolet|Silverado 1500 2020-21|Safety Package II|openpilot available[1](#footnotes)|0 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chevrolet|Trailblazer 2021-22|Adaptive Cruise Control (ACC)|openpilot available[1](#footnotes)|3 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chevrolet|Volt 2017-18[4](#footnotes)|Adaptive Cruise Control (ACC)|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma three
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chrysler|Pacifica 2017-18|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chrysler|Pacifica 2019-20|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chrysler|Pacifica 2021|All|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chrysler|Pacifica Hybrid 2017-18|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chrysler|Pacifica Hybrid 2019-23|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Acura|ILX 2016-19|AcuraWatch Plus|openpilot|25 mph|25 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Acura|RDX 2016-18|AcuraWatch Plus|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Acura|RDX 2019-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Audi|A3 2014-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Audi|A3 Sportback e-tron 2017-18|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Audi|Q2 2018|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Audi|Q3 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Audi|RS3 2018|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Audi|S3 2015-17|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Buick|LaCrosse 2017-19[4](#footnotes)|Driver Confidence Package 2|openpilot|18 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma 3X
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Cadillac|Escalade 2017[4](#footnotes)|Driver Assist Package|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma 3X
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Cadillac|Escalade ESV 2016[4](#footnotes)|Adaptive Cruise Control (ACC) & LKAS|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma 3X
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Cadillac|Escalade ESV 2019[4](#footnotes)|Adaptive Cruise Control (ACC) & LKAS|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma 3X
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chevrolet|Bolt EUV 2022-23|Premier or Premier Redline Trim without Super Cruise Package|openpilot available[1](#footnotes)|3 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 comma 3X
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chevrolet|Bolt EV 2022-23|2LT Trim with Adaptive Cruise Control Package|openpilot available[1](#footnotes)|3 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 comma 3X
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chevrolet|Silverado 1500 2020-21|Safety Package II|openpilot available[1](#footnotes)|0 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 comma 3X
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chevrolet|Trailblazer 2021-22|Adaptive Cruise Control (ACC)|openpilot available[1](#footnotes)|3 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 comma 3X
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chevrolet|Volt 2017-18[4](#footnotes)|Adaptive Cruise Control (ACC)|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma 3X
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chrysler|Pacifica 2017-18|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chrysler|Pacifica 2019-20|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chrysler|Pacifica 2021-23|All|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chrysler|Pacifica Hybrid 2017|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chrysler|Pacifica Hybrid 2018|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chrysler|Pacifica Hybrid 2019-23|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |comma|body|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|None|| -|Ford|Bronco Sport 2021-22|Co-Pilot360 Assist+|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ford|Escape 2020-22|Co-Pilot360 Assist+|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ford|Explorer 2020-22|Co-Pilot360 Assist+|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ford|Focus 2018[3](#footnotes)|Adaptive Cruise Control with Lane Centering|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ford|Kuga 2020-22|Adaptive Cruise Control with Lane Centering|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ford|Maverick 2022|LARIAT Luxury|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ford|Maverick 2023|Co-Pilot360 Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|G70 2018-19|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|G70 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|G80 2017|All|Stock|19 mph|37 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai J connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|G80 2018-19|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|G90 2017-18|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|GV60 (Advanced Trim) 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|GV60 (Performance Trim) 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|GV70 (2.5T Trim) 2022-23[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|GV70 (3.5T Trim) 2022-23[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai M connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|GV80 2023[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai M connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|GMC|Acadia 2018[4](#footnotes)|Adaptive Cruise Control (ACC)|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma three
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|GMC|Sierra 1500 2020-21|Driver Alert Package II|openpilot available[1](#footnotes)|0 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Accord 2018-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Accord Hybrid 2018-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Civic 2016-18|Honda Sensing|openpilot|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Civic 2019-21|All|openpilot available[1](#footnotes)|0 mph|2 mph[5](#footnotes)|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Civic 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Civic Hatchback 2017-21|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Civic Hatchback 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|CR-V 2015-16|Touring Trim|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|CR-V 2017-22|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|CR-V Hybrid 2017-19|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|e 2020|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Fit 2018-20|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Freed 2020|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|HR-V 2019-22|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|HR-V 2023|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Insight 2019-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Inspire 2018|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Odyssey 2018-20|Honda Sensing|openpilot|25 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Passport 2019-23|All|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Pilot 2016-22|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Ridgeline 2017-23|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Azera 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Elantra 2017-19|Smart Cruise Control (SCC)|Stock|19 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Elantra 2021-23|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Elantra GT 2017-19|Smart Cruise Control (SCC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Elantra Hybrid 2021-23|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Genesis 2015-16|Smart Cruise Control (SCC)|Stock|19 mph|37 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai J connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|i30 2017-19|Smart Cruise Control (SCC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq 5 (Southeast Asia only) 2022-23[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai Q connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq 5 (with HDA II) 2022-23[6](#footnotes)|Highway Driving Assist II|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai Q connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq 5 (without HDA II) 2022-23[6](#footnotes)|Highway Driving Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq 6 (with HDA II) 2023[6](#footnotes)|Highway Driving Assist II|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai P connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq Electric 2019|Smart Cruise Control (SCC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq Electric 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq Hybrid 2017-19|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq Hybrid 2020-22|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq Plug-in Hybrid 2019|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Ioniq Plug-in Hybrid 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Kona 2020|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Kona Electric 2018-21|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Kona Electric 2022-23|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai O connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Kona Electric (with HDA II, Korea only) 2023[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai R connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Kona Hybrid 2020|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai I connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Palisade 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Santa Cruz 2022-23[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Santa Fe 2019-20|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai D connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Santa Fe 2021-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Santa Fe Hybrid 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Santa Fe Plug-in Hybrid 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Sonata 2018-19|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Sonata 2020-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Sonata Hybrid 2020-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Tucson 2021|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Tucson 2022[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Tucson 2023[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Tucson Diesel 2019|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Tucson Hybrid 2022-23[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Hyundai|Veloster 2019-20|Smart Cruise Control (SCC)|Stock|5 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Jeep|Grand Cherokee 2016-18|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Carnival 2023-24[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Carnival (China only) 2023[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Ceed 2019|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|EV6 (Southeast Asia only) 2022-23[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai P connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|EV6 (with HDA II) 2022-23[6](#footnotes)|Highway Driving Assist II|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai P connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|EV6 (without HDA II) 2022-23[6](#footnotes)|Highway Driving Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Forte 2019-21|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Forte 2023|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|K5 2021-22|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|K5 Hybrid 2020|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|K8 Hybrid (with HDA II) 2023[6](#footnotes)|Highway Driving Assist II|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai Q connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro EV 2019|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro EV 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro EV 2021|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro EV 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro EV 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro Hybrid 2021-22|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro Hybrid 2023[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro Plug-in Hybrid 2018-19|All|Stock|10 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Niro Plug-in Hybrid 2020|All|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai D connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Optima 2017|Advanced Smart Cruise Control|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Optima 2019-20|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Seltos 2021|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Sorento 2018|Advanced Smart Cruise Control|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Sorento 2019|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Sorento 2021-23[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Sorento Hybrid 2023[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Sorento Plug-in Hybrid 2022-23[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Sportage 2023[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Sportage Hybrid 2023[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Stinger 2018-20|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Stinger 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Kia|Telluride 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|CT Hybrid 2017-18|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES 2019-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES Hybrid 2017-18|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|ES Hybrid 2019-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|IS 2017-19|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|IS 2023|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX Hybrid 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|NX Hybrid 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RC 2018-20|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX Hybrid 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|RX Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lexus|UX Hybrid 2019-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Lincoln|Aviator 2020-21|Co-Pilot360 Plus|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|MAN|eTGE 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|MAN|TGE 2017-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Mazda|CX-5 2022-23|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Mazda connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Mazda|CX-9 2021-23|All|Stock|0 mph|28 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Mazda connector
- 1 RJ45 cable (7 ft)
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Nissan|Altima 2019-20|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan B connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Nissan|Leaf 2018-23|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan A connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Nissan|Rogue 2018-20|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan A connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Nissan|X-Trail 2017|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan A connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Ram|1500 2019-23|Adaptive Cruise Control (ACC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Ram connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|SEAT|Ateca 2018|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|SEAT|Leon 2014-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Subaru|Ascent 2019-21|All[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|Crosstrek 2020-23|EyeSight Driver Assistance[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|Forester 2019-21|All[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|Impreza 2017-19|EyeSight Driver Assistance[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|Impreza 2020-22|EyeSight Driver Assistance[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|Legacy 2020-22|All[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru B connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|Outback 2020-22|All[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru B connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|XV 2018-19|EyeSight Driver Assistance[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Subaru|XV 2020-21|EyeSight Driver Assistance[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| -|Škoda|Fabia 2022-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Škoda|Kamiq 2021[9,11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Škoda|Karoq 2019-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Škoda|Kodiaq 2017-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Škoda|Octavia 2015-19[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Škoda|Octavia RS 2016[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Škoda|Scala 2020-23[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Škoda|Superb 2015-22[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Alphard 2019-20|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Alphard Hybrid 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon Hybrid 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Avalon Hybrid 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR 2021|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR Hybrid 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|C-HR Hybrid 2021-22|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry 2018-20|All|Stock|0 mph[8](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry 2021-23|All|openpilot|0 mph[8](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry Hybrid 2018-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Camry Hybrid 2021-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla 2017-19|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Cross (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Hatchback 2019-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Corolla Hybrid (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Highlander Hybrid 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Mirai 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius Prime 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius Prime 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Prius v 2017|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2017-18|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|RAV4 Hybrid 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Toyota|Sienna 2018-20|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma power v2
- 1 comma three
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Arteon 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Arteon eHybrid 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Arteon R 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Atlas 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Atlas Cross Sport 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|California 2021|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Caravelle 2020|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|CC 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Crafter 2017-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|e-Crafter 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|e-Golf 2014-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Golf 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Golf Alltrack 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Golf GTD 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Golf GTE 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Golf GTI 2015-21|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Golf R 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Golf SportsVan 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Grand California 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Jetta 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Jetta GLI 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Passat 2015-22[10](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Passat Alltrack 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Passat GTE 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Polo 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Volkswagen|Polo GTI 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Volkswagen|T-Cross 2021|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Volkswagen|T-Roc 2021|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[13](#footnotes)|| -|Volkswagen|Taos 2022-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Teramont 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Teramont Cross Sport 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Teramont X 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Tiguan 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Tiguan eHybrid 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Volkswagen|Touran 2016-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma three
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Bronco Sport 2021-22|Co-Pilot360 Assist+|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Escape 2020-22|Co-Pilot360 Assist+|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Explorer 2020-23|Co-Pilot360 Assist+|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Focus 2018[3](#footnotes)|Adaptive Cruise Control with Lane Centering|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Kuga 2020-22|Adaptive Cruise Control with Lane Centering|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Maverick 2022|LARIAT Luxury|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ford|Maverick 2023|Co-Pilot360 Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|G70 2018-19|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|G70 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|G80 2017|All|Stock|19 mph|37 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai J connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|G80 2018-19|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|G90 2017-18|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|GV60 (Advanced Trim) 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|GV60 (Performance Trim) 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|GV70 (2.5T Trim) 2022-23[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|GV70 (3.5T Trim) 2022-23[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai M connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|GV80 2023[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai M connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|GMC|Acadia 2018[4](#footnotes)|Adaptive Cruise Control (ACC)|openpilot|0 mph|7 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 OBD-II connector
- 1 comma 3X
- 2 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|GMC|Sierra 1500 2020-21|Driver Alert Package II|openpilot available[1](#footnotes)|0 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 comma 3X
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Accord 2018-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Accord Hybrid 2018-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Civic 2016-18|Honda Sensing|openpilot|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Civic 2019-21|All|openpilot available[1](#footnotes)|0 mph|2 mph[5](#footnotes)|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Civic 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Civic Hatchback 2017-21|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Civic Hatchback 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|CR-V 2015-16|Touring Trim|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|CR-V 2017-22|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|CR-V Hybrid 2017-20|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|e 2020|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Fit 2018-20|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Freed 2020|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|HR-V 2019-22|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|HR-V 2023|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Insight 2019-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Inspire 2018|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Odyssey 2018-20|Honda Sensing|openpilot|25 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Passport 2019-23|All|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Pilot 2016-22|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Ridgeline 2017-23|Honda Sensing|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Azera 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Azera Hybrid 2019|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Azera Hybrid 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Custin 2023|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Elantra 2017-18|Smart Cruise Control (SCC)|Stock|19 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Elantra 2019|Smart Cruise Control (SCC)|Stock|19 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Elantra 2021-23|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Elantra GT 2017-19|Smart Cruise Control (SCC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Elantra Hybrid 2021-23|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Genesis 2015-16|Smart Cruise Control (SCC)|Stock|19 mph|37 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai J connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|i30 2017-19|Smart Cruise Control (SCC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq 5 (Southeast Asia only) 2022-23[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai Q connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq 5 (with HDA II) 2022-23[6](#footnotes)|Highway Driving Assist II|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai Q connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq 5 (without HDA II) 2022-23[6](#footnotes)|Highway Driving Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq 6 (with HDA II) 2023[6](#footnotes)|Highway Driving Assist II|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai P connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq Electric 2019|Smart Cruise Control (SCC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq Electric 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq Hybrid 2017-19|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq Hybrid 2020-22|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq Plug-in Hybrid 2019|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Ioniq Plug-in Hybrid 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Kona 2020|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Kona Electric 2018-21|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Kona Electric 2022-23|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai O connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Kona Electric (with HDA II, Korea only) 2023[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai R connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Kona Hybrid 2020|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai I connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Palisade 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Santa Cruz 2022-23[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Santa Fe 2019-20|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai D connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Santa Fe 2021-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Santa Fe Hybrid 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Santa Fe Plug-in Hybrid 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Sonata 2018-19|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Sonata 2020-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Sonata Hybrid 2020-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Staria 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Tucson 2021|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Tucson 2022[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Tucson 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Tucson Diesel 2019|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Tucson Hybrid 2022-24[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Hyundai|Veloster 2019-20|Smart Cruise Control (SCC)|Stock|5 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Jeep|Grand Cherokee 2016-18|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Carnival 2022-24[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Carnival (China only) 2023[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Ceed 2019|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|EV6 (Southeast Asia only) 2022-23[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai P connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|EV6 (with HDA II) 2022-23[6](#footnotes)|Highway Driving Assist II|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai P connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|EV6 (without HDA II) 2022-23[6](#footnotes)|Highway Driving Assist|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Forte 2019-21|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Forte 2023|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|K5 2021-24|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|K5 Hybrid 2020-22|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|K8 Hybrid (with HDA II) 2023[6](#footnotes)|Highway Driving Assist II|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai Q connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro EV 2019|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro EV 2020|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro EV 2021|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro EV 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro EV 2023[6](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro Hybrid 2021|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai D connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro Hybrid 2022|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro Hybrid 2023[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro Plug-in Hybrid 2018-19|All|Stock|10 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro Plug-in Hybrid 2020|All|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai D connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Niro Plug-in Hybrid 2022|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai F connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Optima 2017|Advanced Smart Cruise Control|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Optima 2019-20|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai G connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Optima Hybrid 2019|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Seltos 2021|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Sorento 2018|Advanced Smart Cruise Control & LKAS|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Sorento 2019|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai E connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Sorento 2021-23[6](#footnotes)|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Sorento Hybrid 2021-23[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Sorento Plug-in Hybrid 2022-23[6](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Sportage 2023[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Sportage Hybrid 2023[6](#footnotes)|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai N connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Stinger 2018-20|Smart Cruise Control (SCC)|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Stinger 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Kia|Telluride 2020-22|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai H connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|CT Hybrid 2017-18|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES 2019-24|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES Hybrid 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|ES Hybrid 2019-24|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|GS F 2016|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|IS 2017-19|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|IS 2022-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX Hybrid 2018-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|NX Hybrid 2020-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RC 2018-20|All|Stock|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX Hybrid 2016|Lexus Safety System+|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|RX Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lexus|UX Hybrid 2019-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Lincoln|Aviator 2020-21|Co-Pilot360 Plus|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Ford Q3 connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|MAN|eTGE 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|MAN|TGE 2017-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Mazda|CX-5 2022-24|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Mazda connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Mazda|CX-9 2021-23|All|Stock|0 mph|28 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Mazda connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Nissan|Altima 2019-20|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan B connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Nissan|Leaf 2018-23|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan A connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Nissan|Rogue 2018-20|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan A connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Nissan|X-Trail 2017|ProPILOT Assist|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Nissan A connector
- 1 RJ45 cable (7 ft)
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Ram|1500 2019-24|Adaptive Cruise Control (ACC)|Stock|0 mph|32 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Ram connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|SEAT|Ateca 2018|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|SEAT|Leon 2014-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Subaru|Ascent 2019-21|All[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|Crosstrek 2020-23|EyeSight Driver Assistance[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|Forester 2019-21|All[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|Impreza 2017-19|EyeSight Driver Assistance[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|Impreza 2020-22|EyeSight Driver Assistance[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|Legacy 2020-22|All[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru B connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|Outback 2020-22|All[7](#footnotes)|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru B connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|XV 2018-19|EyeSight Driver Assistance[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Subaru|XV 2020-21|EyeSight Driver Assistance[7](#footnotes)|openpilot available[1,8](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Subaru A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
Tools- 1 Pry Tool
- 1 Socket Wrench 8mm or 5/16" (deep)
|| +|Škoda|Fabia 2022-23[12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[14](#footnotes)|| +|Škoda|Kamiq 2021-23[10,12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[14](#footnotes)|| +|Škoda|Karoq 2019-23[12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Škoda|Kodiaq 2017-23[12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Škoda|Octavia 2015-19[12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Škoda|Octavia RS 2016[12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Škoda|Scala 2020-23[12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[14](#footnotes)|| +|Škoda|Superb 2015-22[12](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Alphard 2019-20|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Alphard Hybrid 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon Hybrid 2019-21|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Avalon Hybrid 2022|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR 2021|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR Hybrid 2017-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|C-HR Hybrid 2021-22|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry 2018-20|All|Stock|0 mph[9](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry 2021-24|All|openpilot|0 mph[9](#footnotes)|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry Hybrid 2018-20|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Camry Hybrid 2021-24|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla 2017-19|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Cross (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Hatchback 2019-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Hybrid 2020-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Corolla Hybrid (Non-US only) 2020-23|All|openpilot|17 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander Hybrid 2017-19|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Highlander Hybrid 2020-23|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Mirai 2021|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius Prime 2017-20|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius Prime 2021-22|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Prius v 2017|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2017-18|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 2023-24|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2016|Toyota Safety Sense P|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2017-18|All|openpilot available[2](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2019-21|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2022|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|RAV4 Hybrid 2023-24|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Toyota|Sienna 2018-20|All|openpilot available[2](#footnotes)|19 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 RJ45 cable (7 ft)
- 1 Toyota A connector
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Arteon 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Arteon eHybrid 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Arteon R 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Atlas 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Atlas Cross Sport 2020-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|California 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Caravelle 2020|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|CC 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Crafter 2017-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|e-Crafter 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|e-Golf 2014-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Golf 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Golf Alltrack 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Golf GTD 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Golf GTE 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Golf GTI 2015-21|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Golf R 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Golf SportsVan 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Grand California 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|31 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 angled mount (8 degrees)
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Jetta 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Jetta GLI 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Passat 2015-22[11](#footnotes)|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Passat Alltrack 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Passat GTE 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Polo 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[14](#footnotes)|| +|Volkswagen|Polo GTI 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[14](#footnotes)|| +|Volkswagen|T-Cross 2021|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[14](#footnotes)|| +|Volkswagen|T-Roc 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
[14](#footnotes)|| +|Volkswagen|Taos 2022-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Teramont 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Teramont Cross Sport 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Teramont X 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Tiguan 2018-24|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Tiguan eHybrid 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Volkswagen|Touran 2016-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,13](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 J533 connector
- 1 USB-C coupler
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| ### Footnotes 1openpilot Longitudinal Control (Alpha) is available behind a toggle; the toggle is only available in non-release branches such as `devel` or `master-ci`.
@@ -277,14 +290,15 @@ A supported vehicle is one that just works when you install a comma device. All 3Refers only to the Focus Mk4 (C519) available in Europe/China/Taiwan/Australasia, not the Focus Mk3 (C346) in North and South America/Southeast Asia.
4Requires a community built ASCM harness. NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).
52019 Honda Civic 1.6L Diesel Sedan does not have ALC below 12mph.
-6Requires a comma 3X or CAN FD panda kit for this CAN FD car.
+6Requires a CAN FD panda kit if not using comma 3X for this CAN FD car.
7In the non-US market, openpilot requires the car to come equipped with EyeSight with Lane Keep Assistance.
-8openpilot operates above 28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.
-9Not including the China market Kamiq, which is based on the (currently) unsupported PQ34 platform.
-10Refers only to the MQB-based European B8 Passat, not the NMS Passat in the USA/China/Mideast markets.
-11Some Škoda vehicles are equipped with heated windshields, which are known to block GPS signal needed for some comma three functionality.
-12Only available for vehicles using a gateway (J533) harness. At this time, vehicles using a camera harness are limited to using stock ACC.
-13Model-years 2022 and beyond may have a combined CAN gateway and BCM, which is supported by openpilot in software, but doesn't yet have a harness available from the comma store.
+8Enabling longitudinal control (alpha) will disable all EyeSight functionality, including AEB, LDW, and RAB.
+9openpilot operates above 28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.
+10Not including the China market Kamiq, which is based on the (currently) unsupported PQ34 platform.
+11Refers only to the MQB-based European B8 Passat, not the NMS Passat in the USA/China/Mideast markets.
+12Some Škoda vehicles are equipped with heated windshields, which are known to block GPS signal needed for some comma 3X functionality.
+13Only available for vehicles using a gateway (J533) harness. At this time, vehicles using a camera harness are limited to using stock ACC.
+14Model-years 2022 and beyond may have a combined CAN gateway and BCM, which is supported by openpilot in software, but doesn't yet have a harness available from the comma store.
## Community Maintained Cars Although they're not upstream, the community has openpilot running on other makes and models. See the 'Community Supported Models' section of each make [on our wiki](https://wiki.comma.ai/). @@ -313,7 +327,7 @@ If your car has the following packages or features, then it's a good candidate f ### FlexRay -All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a CAN bus isn't the only way that the cars in your computer can communicate. Most, if not all, vehicles from the following manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars may one day be supported, but we have no immediate plans to support FlexRay. +All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a CAN bus isn't the only way that the computers in your car can communicate. Most, if not all, vehicles from the following manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars may one day be supported, but we have no immediate plans to support FlexRay. ### Toyota Security diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 7a074f12de..30f4e0dfd3 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,26 +1,50 @@ # How to contribute -Our software is open source so you can solve your own problems without needing help from others. And if you solve a problem and are so kind, you can upstream it for the rest of the world to use. Check out our [post about externalization](https://blog.comma.ai/a-2020-theme-externalization/). - -Most open source development activity is coordinated through our [GitHub Discussions](https://github.com/commaai/openpilot/discussions) and [Discord](https://discord.comma.ai). A lot of documentation is available at https://docs.comma.ai and on our [blog](https://blog.comma.ai/). +Our software is open source so you can solve your own problems without needing help from others. And if you solve a problem and are so kind, you can upstream it for the rest of the world to use. Check out our [post about externalization](https://blog.comma.ai/a-2020-theme-externalization/). Development activity is coordinated through our GitHub Issues, [GitHub Discussions](https://github.com/commaai/openpilot/discussions), and [Discord](https://discord.comma.ai). ### Getting Started - * Setup your [development environment](../tools/) - * Join our [Discord](https://discord.comma.ai) - * Make sure you have a [GitHub account](https://github.com/signup/free) - * Fork [our repositories](https://github.com/commaai) on GitHub +* Setup your [development environment](../tools/) +* Read about the [development workflow](WORKFLOW.md) +* Join our [Discord](https://discord.comma.ai) +* Docs are at https://docs.comma.ai and https://blog.comma.ai + +## What contributions are we looking for? + +**openpilot's priorities are [safety](SAFETY.md), stability, quality, and features, in that order.** openpilot is part of comma's mission to *solve self-driving cars while delivering shippable intermediaries*, and **all** development is towards that goal. + +### What gets merged? + +The probability of a pull request being merged is a function of its value to the project and the effort it will take us to get it merged. +If a PR offers *some* value but will take lots of time to get merged, it will be closed. +Simple, well-tested bug fixes are the easiest to merge, and new features are the hardest to get merged. + +All of these are examples of good PRs: +* typo fix: https://github.com/commaai/openpilot/pull/30678 +* removing unused code: https://github.com/commaai/openpilot/pull/30573 +* simple car model port: https://github.com/commaai/openpilot/pull/30245 +* car brand port: https://github.com/commaai/openpilot/pull/23331 + +### What doesn't get merged? + +* **arbitrary style changes**: code is art, and it's up to the author to make it beautiful +* **500+ line PRs**: clean it up, break it up into smaller PRs, or both +* **PRs without a clear goal**: every PR must have a singular and clear goal +* **UI design changes**: we do not have a good review process for this yet +* **New features**: We believe openpilot is mostly feature-complete, and the rest is a matter of refinement and fixing bugs. As a result of this, most feature PRs will be immediately closed, however the beauty of open source is that forks can and do offer features that upstream openpilot doesn't. ### First contribution -Try out some of these first pull requests ideas to dive into the codebase: -* Increase our [mypy](http://mypy-lang.org/) coverage -* Write some documentation -* Tackle an open [good first issue](https://github.com/commaai/openpilot/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +Check out any [good first issue](https://github.com/commaai/openpilot/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) to get started. + +### What do I need to contribute? + +A lot of openpilot work requires only a PC, and some requires a comma device. +Most car-related contributions require access to that car, plus a comma device installed in the car. ## Pull Requests -Pull requests should be against the master branch. Welcomed contributions include bug reports, car ports, and any [open issue](https://github.com/commaai/openpilot/issues). If you're unsure about a contribution, feel free to open a discussion, issue, or draft PR to discuss the problem you're trying to solve. +Pull requests should be against the master branch. If you're unsure about a contribution, feel free to open a discussion, issue, or draft PR to discuss the problem you're trying to solve. A good pull request has all of the following: * a clearly stated purpose @@ -31,18 +55,11 @@ A good pull request has all of the following: * if you've improved your car's tuning, post before and after plots * passes the CI tests -### Car Ports +## Contributing without Code -We've released a [Model Port guide](https://blog.comma.ai/openpilot-port-guide-for-toyota-models/) for porting to Toyota/Lexus models. - -If you port openpilot to a substantially new car brand, see this more generic [Brand Port guide](https://blog.comma.ai/how-to-write-a-car-port-for-openpilot/). - -## Testing - -### Automated Testing - -All PRs and commits are automatically checked by GitHub Actions. Check out `.github/workflows/` for what GitHub Actions runs. Any new tests should be added to GitHub Actions. - -### Code Style and Linting - -Code is automatically checked for style by GitHub Actions as part of the automated tests. You can also run these tests yourself by running `pre-commit run --all`. +* Report bugs in GitHub issues. +* Report driving issues in the `#driving-feedback` Discord channel. +* Consider opting into driver camera uploads to improve the driver monitoring model. +* Connect your device to Wi-Fi regularly, so that we can pull data for training better driving models. +* Run the `nightly` branch and report issues. This branch is like `master` but it's built just like a release. +* Annotate images in the [comma10k dateset](https://github.com/commaai/comma10k). diff --git a/docs/HOW-TOS.md b/docs/HOW-TOS.md index 8f5033a6d6..a66786c200 100644 --- a/docs/HOW-TOS.md +++ b/docs/HOW-TOS.md @@ -61,11 +61,10 @@ to go back to the default values. 1) Create a free mapbox account. Account will ask for a credit card for verification. You will not be charged for the free tier. 2) On the Dashboard, you will see a section called Access Tokens. Click `Create a Token`. Name it whatever you like. Set the scopes to allow everything for both Public and Secret. Copy both of these keys. **YOU WON'T BE ABLE TO ACCESS THE SECRET KEY AFTER THIS WINDOW.** -3) On your C3, go to `SP - Visuals` and toggle `Enable Mapbox Navigation*`. Accept the reboot. -4) Once rebooted, connect your C3 to a network with internet access and find the C3’s IP address. -5) In a browser, navigate to that IP with **port 8082** (i.e 192.168.1.69:8082). You should be greeted with the Comma logo and a public key input field. -6) Paste your Public token (pk.xx), click enter, paste your Secret key (sk.xx), click enter. You can now search for places. This page will be available at your devices’s IP address/port 8082 to search for destinations. -7) To set Home and Work addresses, search for a place, select Home/Work from the dropdown and click Navigate. For non-Home/Work destinations, select Recent Places.
*At this time, it is not possible to search directly on the C3.* +3) Once rebooted, connect your C3 to a network with internet access and find the C3’s IP address. +4) In a browser, navigate to that IP with **port 8082** (i.e 192.168.1.69:8082). You should be greeted with the Comma logo and a public key input field. +5) Paste your Public token (pk.xx), click enter, paste your Secret key (sk.xx), click enter. You can now search for places. This page will be available at your devices’s IP address/port 8082 to search for destinations. +6) To set Home and Work addresses, search for a place, select Home/Work from the dropdown and click Navigate. For non-Home/Work destinations, select Recent Places.
*At this time, it is not possible to search directly on the C3.* **TIPS:** - If your C3 is showing a black screen that says “Map Loading”, performing a reboot via the UI should fix it. diff --git a/docs/Makefile b/docs/Makefile index dee660f770..09103e206e 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -41,13 +41,13 @@ clean: @echo "Building rst files..." sphinx-apidoc -o "$(DOCSBUILDDIR)" ../ \ - ../xx ../laika_repo ../rednose_repo ../notebooks ../panda_jungle \ + ../xx ../rednose_repo ../notebooks ../panda_jungle \ ../third_party \ ../panda/examples \ ../scripts \ ../selfdrive/modeld \ ../selfdrive/debug \ - $(shell find .. -type d -name "*test*") + $(shell find .. -type d -name "*test* -not -path "**.venv**" \") @echo "Building html files..." @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(DOCSBUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..838b00e7ae --- /dev/null +++ b/docs/README.md @@ -0,0 +1,3 @@ +# openpilot-docs + +These docs are autogenerated from [this folder](https://github.com/commaai/openpilot/tree/master/docs) in the main openpilot repository. \ No newline at end of file diff --git a/docs/WORKFLOW.md b/docs/WORKFLOW.md new file mode 100644 index 0000000000..85ae8d86f4 --- /dev/null +++ b/docs/WORKFLOW.md @@ -0,0 +1,42 @@ +# openpilot development workflow + +Aside from the ML models, most tools used for openpilot development are in this repo. + +Most development happens on normal Ubuntu workstations, and not in cars or directly on comma devices. See the [setup guide](../tools) for getting your PC setup for openpilot development. + +## Quick start + +```bash +# get the latest stuff +git pull +git submodule update --init --recursive + +# update dependencies +tools/ubuntu_setup.sh + +# build everything +scons -j$(nproc) + +# build just the ui with either of these +scons -j8 selfdrive/ui/ +cd selfdrive/ui/ && scons -u -j8 + +# test everything +pytest . + +# test just logging services +cd system/loggerd && pytest . + +# run the linter +pre-commit run --all +``` + +## Testing + +### Automated Testing + +All PRs and commits are automatically checked by GitHub Actions. Check out `.github/workflows/` for what GitHub Actions runs. Any new tests should be added to GitHub Actions. + +### Code Style and Linting + +Code is automatically checked for style by GitHub Actions as part of the automated tests. You can also run these tests yourself by running `pre-commit run --all`. diff --git a/docs/_static/logo.png b/docs/_static/logo.png index 2699565085..0e7577dae1 100644 Binary files a/docs/_static/logo.png and b/docs/_static/logo.png differ diff --git a/docs/assets/icon-star-empty.svg b/docs/assets/icon-star-empty.svg index 5d3c32d671..448b20b937 100644 --- a/docs/assets/icon-star-empty.svg +++ b/docs/assets/icon-star-empty.svg @@ -1,56 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:3142658fa2782d266028dcab491e02ab329a2cadcf9efb1846a5f9631d64cac1 +size 1947 diff --git a/docs/assets/icon-star-full.svg b/docs/assets/icon-star-full.svg index 294db2b7f2..0e0bf52cd8 100644 --- a/docs/assets/icon-star-full.svg +++ b/docs/assets/icon-star-full.svg @@ -1,56 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5fdcc85f3d8c9d0c2fb76b98ddd9f118c0e4a12c859a4281a04a0870d5de12c8 +size 1950 diff --git a/docs/assets/icon-star-half.svg b/docs/assets/icon-star-half.svg index ab905fddcb..11398fa6f1 100644 --- a/docs/assets/icon-star-half.svg +++ b/docs/assets/icon-star-half.svg @@ -1,66 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:cdf5e7ae57626f4cda35973873a4696252babbbe473913fe0aafdd8ba39d7fc3 +size 2508 diff --git a/docs/assets/icon-youtube.svg b/docs/assets/icon-youtube.svg index 4e2c9fdfa9..f738dca10a 100644 --- a/docs/assets/icon-youtube.svg +++ b/docs/assets/icon-youtube.svg @@ -1,12 +1,3 @@ - - - - - - - - - - - - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:6cb64f9da10b818c56763a7c48347f6043da20a2a77fb14f6d60d9457c575b6b +size 1278 diff --git a/docs/c_docs.rst b/docs/c_docs.rst index 5619cc8a51..6e8808ec20 100644 --- a/docs/c_docs.rst +++ b/docs/c_docs.rst @@ -29,8 +29,6 @@ camerad ^^^^^^^ .. autodoxygenindex:: :project: system_camerad_cameras -.. autodoxygenindex:: - :project: system_camerad_imgproc locationd ^^^^^^^^^ @@ -43,12 +41,6 @@ ui .. autodoxygenindex:: :project: selfdrive_ui -soundd -"""""" -.. autodoxygenindex:: - :project: selfdrive_ui_soundd - - replay """""" .. autodoxygenindex:: diff --git a/docs/docker/Dockerfile b/docs/docker/Dockerfile deleted file mode 100644 index 1bae2be24a..0000000000 --- a/docs/docker/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -FROM ghcr.io/commaai/openpilot-base:latest - -ENV PYTHONUNBUFFERED 1 - -ENV OPENPILOT_PATH /tmp/openpilot -ENV PYTHONPATH ${OPENPILOT_PATH}:${PYTHONPATH} -ENV POETRY_VIRUALENVS_CREATE false - -RUN mkdir -p ${OPENPILOT_PATH} -WORKDIR ${OPENPILOT_PATH} - -COPY SConstruct ${OPENPILOT_PATH} - -COPY ./openpilot ${OPENPILOT_PATH}/openpilot -COPY ./body ${OPENPILOT_PATH}/body -COPY ./third_party ${OPENPILOT_PATH}/third_party -COPY ./site_scons ${OPENPILOT_PATH}/site_scons -COPY ./laika_repo ${OPENPILOT_PATH}/laika_repo -RUN ln -s ${OPENPILOT_PATH}/laika_repo/laika/ ${OPENPILOT_PATH}/laika -COPY ./rednose ${OPENPILOT_PATH}/rednose -COPY ./rednose_repo ${OPENPILOT_PATH}/rednose_repo -COPY ./tools ${OPENPILOT_PATH}/tools -COPY ./release ${OPENPILOT_PATH}/release -COPY ./common ${OPENPILOT_PATH}/common -COPY ./opendbc ${OPENPILOT_PATH}/opendbc -COPY ./cereal ${OPENPILOT_PATH}/cereal -COPY ./panda ${OPENPILOT_PATH}/panda -COPY ./selfdrive ${OPENPILOT_PATH}/selfdrive -COPY ./system ${OPENPILOT_PATH}/system -COPY ./*.md ${OPENPILOT_PATH}/ - -RUN --mount=type=bind,source=.ci_cache/scons_cache,target=/tmp/scons_cache,rw scons -j$(nproc) --cache-readonly - -RUN apt update && apt install doxygen -y -COPY ./docs ${OPENPILOT_PATH}/docs -RUN git init . -WORKDIR ${OPENPILOT_PATH}/docs -RUN make html - -FROM nginx:1.21 -COPY --from=0 /tmp/openpilot/build/docs/html /usr/share/nginx/html -COPY ./docs/docker/nginx.conf /etc/nginx/conf.d/default.conf diff --git a/docs/docker/nginx.conf b/docs/docker/nginx.conf deleted file mode 100644 index 21fb226368..0000000000 --- a/docs/docker/nginx.conf +++ /dev/null @@ -1,15 +0,0 @@ -server { - listen 80; - listen [::]:80; - server_name localhost; - - gzip on; - gzip_types text/html text/plain text/css text/xml text/javascript application/javascript application/x-javascript; - gzip_min_length 1024; - gzip_vary on; - - root /usr/share/nginx/html; - location / { - try_files $uri $uri/ /index.html; - } -} diff --git a/docs/overview.rst b/docs/overview.rst index b9a5700528..8c552077f3 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -18,14 +18,6 @@ cereal cereal/README.md cereal/messaging/msgq.md -laika -========= - -.. toctree:: - :maxdepth: 4 - - laika_repo/README.md - models ========= diff --git a/installer/custom/install_osm.sh b/installer/custom/install_osm.sh deleted file mode 100755 index 5eeeeed018..0000000000 --- a/installer/custom/install_osm.sh +++ /dev/null @@ -1,35 +0,0 @@ -# OSM Installation instructions: -# https://wiki.openstreetmap.org/wiki/Overpass_API/Installation - -# Install expat. All other needed libraries are already installed. -# g++ make expat libexpat1-dev zlib1g-dev -#sudo apt-get update -#sudo apt-get install expat - -# Add required path variables to environment -export OSM_ROOT=/data/media/0/osm -export OSM_VERSION=0.7.57 -export GZ_FILE=osm-3s_v${OSM_VERSION}.tar.xz -export OSM_DIR=${OSM_ROOT}/v${OSM_VERSION} -# export DB_DIR=/data/osm/db/ - -# Download and extract overpass library - -if [ ! -d ${OSM_ROOT} ]; then - mkdir -p ${OSM_ROOT} -fi -tar -vxf /data/openpilot/selfdrive/mapd/assets/${GZ_FILE} -C ${OSM_ROOT} - -# Configure and install overpass -#cd $(ls | grep $SOURCE_FILE_ROOT\.[0-9]*) -#cd osm-3s_v0.7.56 -#./configure CXXFLAGS="-O2" --prefix=$EXEC_DIR -#make install - -# Remove source files after installation -#cd .. -if [ -d ${OSM_DIR} ]; then - rm -rf ${OSM_DIR} -fi - -mv ${OSM_ROOT}/osm-3s_v${OSM_VERSION} ${OSM_ROOT}/v${OSM_VERSION} diff --git a/installer/custom/install_osm_db.sh b/installer/custom/install_osm_db.sh deleted file mode 100755 index 759a1ee139..0000000000 --- a/installer/custom/install_osm_db.sh +++ /dev/null @@ -1,35 +0,0 @@ -export OSM_DIR=/data/media/0/osm -export DB_DIR=${OSM_DIR}/db - -export OSM_LOCATION=$(cat /data/params/d/OsmLocationUrl) - -export OSM_LOCATION_TEXT=$(cat /data/params/d/OsmLocationName) - -export XZ_MAP_FILE_NAME=${OSM_LOCATION_TEXT}.tar.xz -export XZ_MAP_FILE=${OSM_DIR}/${XZ_MAP_FILE_NAME} - -# WD -cd $OSM_DIR - -# Remove legacy compressed map file if existing -rm -rf $XZ_MAP_FILE - -# Download map file -wget -O ${XZ_MAP_FILE_NAME} ${OSM_LOCATION} - -if [[ "$?" != 0 ]]; then - echo "Error downloading map file" -else - echo "Successfully downloaded map file" - # Remove current db dir if existing - rm -rf $DB_DIR - if [ -d ${OSM_DIR}/${OSM_LOCATION_TEXT} ]; then - rm -rf ${OSM_DIR}/${OSM_LOCATION_TEXT} - fi - # Decompressing - tar -vxf ${XZ_MAP_FILE_NAME} - mv ${OSM_LOCATION_TEXT} db - - # Remove compressed map files after expanding - rm -rf $XZ_MAP_FILE -fi diff --git a/laika b/laika deleted file mode 120000 index 1c7429f4ac..0000000000 --- a/laika +++ /dev/null @@ -1 +0,0 @@ -laika_repo/laika/ \ No newline at end of file diff --git a/laika_repo b/laika_repo deleted file mode 160000 index 8861844c9b..0000000000 --- a/laika_repo +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8861844c9b577ff7de7d03fab9f4d7f560415fc9 diff --git a/launch_chffrplus.sh b/launch_chffrplus.sh index 45757e1a61..04a5e60efb 100755 --- a/launch_chffrplus.sh +++ b/launch_chffrplus.sh @@ -9,11 +9,6 @@ source "$BASEDIR/launch_env.sh" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" function agnos_init { - # wait longer for weston to come up - if [ -f "$BASEDIR/prebuilt" ]; then - sleep 3 - fi - # TODO: move this to agnos sudo rm -f /data/etc/NetworkManager/system-connections/*.nmmeta @@ -35,9 +30,6 @@ function launch { # Remove orphaned git lock if it exists on boot [ -f "$DIR/.git/index.lock" ] && rm -f $DIR/.git/index.lock - # Pull time from panda - $DIR/selfdrive/boardd/set_time.py - # Check to see if there's a valid overlay-based update available. Conditions # are as follows: # @@ -77,18 +69,19 @@ function launch { export PYTHONPATH="$PWD" # hardware specific init - agnos_init + if [ -f /AGNOS ]; then + agnos_init + fi # write tmux scrollback to a file tmux capture-pane -pq -S-1000 > /tmp/launch_log # start manager cd selfdrive/manager - if [ ! -f "/data/params/d/OsmLocal" ]; then - ./custom_dep.py && ./build.py && ./manager.py - else - ./custom_dep.py && ./build.py && ./local_osm_install.py && ./manager.py + if [ ! -f $DIR/prebuilt ]; then + ./build.py fi + ./mapd_installer.py && ./manager.py # if broken, keep on screen error while true; do sleep 1; done diff --git a/launch_env.sh b/launch_env.sh index d07fbe33de..d86ec63593 100755 --- a/launch_env.sh +++ b/launch_env.sh @@ -7,11 +7,7 @@ export OPENBLAS_NUM_THREADS=1 export VECLIB_MAXIMUM_THREADS=1 if [ -z "$AGNOS_VERSION" ]; then - export AGNOS_VERSION="8.2" -fi - -if [ -z "$PASSIVE" ]; then - export PASSIVE="1" + export AGNOS_VERSION="9.3" fi export STAGING_ROOT="/data/safe_staging" diff --git a/launch_openpilot.sh b/launch_openpilot.sh index 1525e1715f..2888814c22 100755 --- a/launch_openpilot.sh +++ b/launch_openpilot.sh @@ -1,5 +1,3 @@ #!/usr/bin/bash -export PASSIVE="0" exec ./launch_chffrplus.sh - diff --git a/opendbc b/opendbc index ab68094723..aff840356a 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit ab68094723d9a615ca940eece04db2f2f755c4ff +Subproject commit aff840356a2ecf5e82a04e91a5aade3a3b4cf9a3 diff --git a/panda b/panda index 68e08a639d..bf568e7817 160000 --- a/panda +++ b/panda @@ -1 +1 @@ -Subproject commit 68e08a639d214d01d724f2551d95901bd348a549 +Subproject commit bf568e7817a185a4805b01b937948d7f302c910e diff --git a/poetry.lock b/poetry.lock index 2c134ec32d..4cd6f5062e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,111 +2,98 @@ [[package]] name = "aiohttp" -version = "3.8.5" +version = "3.9.2" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, + {file = "aiohttp-3.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:772fbe371788e61c58d6d3d904268e48a594ba866804d08c995ad71b144f94cb"}, + {file = "aiohttp-3.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:edd4f1af2253f227ae311ab3d403d0c506c9b4410c7fc8d9573dec6d9740369f"}, + {file = "aiohttp-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cfee9287778399fdef6f8a11c9e425e1cb13cc9920fd3a3df8f122500978292b"}, + {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc158466f6a980a6095ee55174d1de5730ad7dec251be655d9a6a9dd7ea1ff9"}, + {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54ec82f45d57c9a65a1ead3953b51c704f9587440e6682f689da97f3e8defa35"}, + {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abeb813a18eb387f0d835ef51f88568540ad0325807a77a6e501fed4610f864e"}, + {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc91d07280d7d169f3a0f9179d8babd0ee05c79d4d891447629ff0d7d8089ec2"}, + {file = "aiohttp-3.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b65e861f4bebfb660f7f0f40fa3eb9f2ab9af10647d05dac824390e7af8f75b7"}, + {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:04fd8ffd2be73d42bcf55fd78cde7958eeee6d4d8f73c3846b7cba491ecdb570"}, + {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3d8d962b439a859b3ded9a1e111a4615357b01620a546bc601f25b0211f2da81"}, + {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:8ceb658afd12b27552597cf9a65d9807d58aef45adbb58616cdd5ad4c258c39e"}, + {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0e4ee4df741670560b1bc393672035418bf9063718fee05e1796bf867e995fad"}, + {file = "aiohttp-3.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2dec87a556f300d3211decf018bfd263424f0690fcca00de94a837949fbcea02"}, + {file = "aiohttp-3.9.2-cp310-cp310-win32.whl", hash = "sha256:3e1a800f988ce7c4917f34096f81585a73dbf65b5c39618b37926b1238cf9bc4"}, + {file = "aiohttp-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:ea510718a41b95c236c992b89fdfc3d04cc7ca60281f93aaada497c2b4e05c46"}, + {file = "aiohttp-3.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6aaa6f99256dd1b5756a50891a20f0d252bd7bdb0854c5d440edab4495c9f973"}, + {file = "aiohttp-3.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a27d8c70ad87bcfce2e97488652075a9bdd5b70093f50b10ae051dfe5e6baf37"}, + {file = "aiohttp-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:54287bcb74d21715ac8382e9de146d9442b5f133d9babb7e5d9e453faadd005e"}, + {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb3d05569aa83011fcb346b5266e00b04180105fcacc63743fc2e4a1862a891"}, + {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8534e7d69bb8e8d134fe2be9890d1b863518582f30c9874ed7ed12e48abe3c4"}, + {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd9d5b989d57b41e4ff56ab250c5ddf259f32db17159cce630fd543376bd96b"}, + {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa6904088e6642609981f919ba775838ebf7df7fe64998b1a954fb411ffb4663"}, + {file = "aiohttp-3.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda42eb410be91b349fb4ee3a23a30ee301c391e503996a638d05659d76ea4c2"}, + {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:193cc1ccd69d819562cc7f345c815a6fc51d223b2ef22f23c1a0f67a88de9a72"}, + {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b9f1cb839b621f84a5b006848e336cf1496688059d2408e617af33e3470ba204"}, + {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:d22a0931848b8c7a023c695fa2057c6aaac19085f257d48baa24455e67df97ec"}, + {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4112d8ba61fbd0abd5d43a9cb312214565b446d926e282a6d7da3f5a5aa71d36"}, + {file = "aiohttp-3.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c4ad4241b52bb2eb7a4d2bde060d31c2b255b8c6597dd8deac2f039168d14fd7"}, + {file = "aiohttp-3.9.2-cp311-cp311-win32.whl", hash = "sha256:ee2661a3f5b529f4fc8a8ffee9f736ae054adfb353a0d2f78218be90617194b3"}, + {file = "aiohttp-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:4deae2c165a5db1ed97df2868ef31ca3cc999988812e82386d22937d9d6fed52"}, + {file = "aiohttp-3.9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6f4cdba12539215aaecf3c310ce9d067b0081a0795dd8a8805fdb67a65c0572a"}, + {file = "aiohttp-3.9.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:84e843b33d5460a5c501c05539809ff3aee07436296ff9fbc4d327e32aa3a326"}, + {file = "aiohttp-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8008d0f451d66140a5aa1c17e3eedc9d56e14207568cd42072c9d6b92bf19b52"}, + {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61c47ab8ef629793c086378b1df93d18438612d3ed60dca76c3422f4fbafa792"}, + {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc71f748e12284312f140eaa6599a520389273174b42c345d13c7e07792f4f57"}, + {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a1c3a4d0ab2f75f22ec80bca62385db2e8810ee12efa8c9e92efea45c1849133"}, + {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a87aa0b13bbee025faa59fa58861303c2b064b9855d4c0e45ec70182bbeba1b"}, + {file = "aiohttp-3.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2cc0d04688b9f4a7854c56c18aa7af9e5b0a87a28f934e2e596ba7e14783192"}, + {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1956e3ac376b1711c1533266dec4efd485f821d84c13ce1217d53e42c9e65f08"}, + {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:114da29f39eccd71b93a0fcacff178749a5c3559009b4a4498c2c173a6d74dff"}, + {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3f17999ae3927d8a9a823a1283b201344a0627272f92d4f3e3a4efe276972fe8"}, + {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:f31df6a32217a34ae2f813b152a6f348154f948c83213b690e59d9e84020925c"}, + {file = "aiohttp-3.9.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7a75307ffe31329928a8d47eae0692192327c599113d41b278d4c12b54e1bd11"}, + {file = "aiohttp-3.9.2-cp312-cp312-win32.whl", hash = "sha256:972b63d589ff8f305463593050a31b5ce91638918da38139b9d8deaba9e0fed7"}, + {file = "aiohttp-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:200dc0246f0cb5405c80d18ac905c8350179c063ea1587580e3335bfc243ba6a"}, + {file = "aiohttp-3.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:158564d0d1020e0d3fe919a81d97aadad35171e13e7b425b244ad4337fc6793a"}, + {file = "aiohttp-3.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:da1346cd0ccb395f0ed16b113ebb626fa43b7b07fd7344fce33e7a4f04a8897a"}, + {file = "aiohttp-3.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eaa9256de26ea0334ffa25f1913ae15a51e35c529a1ed9af8e6286dd44312554"}, + {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1543e7fb00214fb4ccead42e6a7d86f3bb7c34751ec7c605cca7388e525fd0b4"}, + {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:186e94570433a004e05f31f632726ae0f2c9dee4762a9ce915769ce9c0a23d89"}, + {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d52d20832ac1560f4510d68e7ba8befbc801a2b77df12bd0cd2bcf3b049e52a4"}, + {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c45e4e815ac6af3b72ca2bde9b608d2571737bb1e2d42299fc1ffdf60f6f9a1"}, + {file = "aiohttp-3.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa906b9bdfd4a7972dd0628dbbd6413d2062df5b431194486a78f0d2ae87bd55"}, + {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:68bbee9e17d66f17bb0010aa15a22c6eb28583edcc8b3212e2b8e3f77f3ebe2a"}, + {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4c189b64bd6d9a403a1a3f86a3ab3acbc3dc41a68f73a268a4f683f89a4dec1f"}, + {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8a7876f794523123bca6d44bfecd89c9fec9ec897a25f3dd202ee7fc5c6525b7"}, + {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d23fba734e3dd7b1d679b9473129cd52e4ec0e65a4512b488981a56420e708db"}, + {file = "aiohttp-3.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b141753be581fab842a25cb319f79536d19c2a51995d7d8b29ee290169868eab"}, + {file = "aiohttp-3.9.2-cp38-cp38-win32.whl", hash = "sha256:103daf41ff3b53ba6fa09ad410793e2e76c9d0269151812e5aba4b9dd674a7e8"}, + {file = "aiohttp-3.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:328918a6c2835861ff7afa8c6d2c70c35fdaf996205d5932351bdd952f33fa2f"}, + {file = "aiohttp-3.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5264d7327c9464786f74e4ec9342afbbb6ee70dfbb2ec9e3dfce7a54c8043aa3"}, + {file = "aiohttp-3.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07205ae0015e05c78b3288c1517afa000823a678a41594b3fdc870878d645305"}, + {file = "aiohttp-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0a1e638cffc3ec4d4784b8b4fd1cf28968febc4bd2718ffa25b99b96a741bd"}, + {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d43302a30ba1166325974858e6ef31727a23bdd12db40e725bec0f759abce505"}, + {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16a967685907003765855999af11a79b24e70b34dc710f77a38d21cd9fc4f5fe"}, + {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fa3ee92cd441d5c2d07ca88d7a9cef50f7ec975f0117cd0c62018022a184308"}, + {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b500c5ad9c07639d48615a770f49618130e61be36608fc9bc2d9bae31732b8f"}, + {file = "aiohttp-3.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c07327b368745b1ce2393ae9e1aafed7073d9199e1dcba14e035cc646c7941bf"}, + {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cc7d6502c23a0ec109687bf31909b3fb7b196faf198f8cff68c81b49eb316ea9"}, + {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:07be2be7071723c3509ab5c08108d3a74f2181d4964e869f2504aaab68f8d3e8"}, + {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:122468f6fee5fcbe67cb07014a08c195b3d4c41ff71e7b5160a7bcc41d585a5f"}, + {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:00a9abcea793c81e7f8778ca195a1714a64f6d7436c4c0bb168ad2a212627000"}, + {file = "aiohttp-3.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a9825fdd64ecac5c670234d80bb52bdcaa4139d1f839165f548208b3779c6c6"}, + {file = "aiohttp-3.9.2-cp39-cp39-win32.whl", hash = "sha256:5422cd9a4a00f24c7244e1b15aa9b87935c85fb6a00c8ac9b2527b38627a9211"}, + {file = "aiohttp-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:7d579dcd5d82a86a46f725458418458fa43686f6a7b252f2966d359033ffc8ab"}, + {file = "aiohttp-3.9.2.tar.gz", hash = "sha256:b0ad0a5e86ce73f5368a164c10ada10504bf91869c05ab75d982c6048217fbf7"}, ] [package.dependencies] aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] +speedups = ["Brotli", "aiodns", "brotlicffi"] [[package]] name = "aioice" @@ -125,75 +112,48 @@ ifaddr = ">=0.2.0" [[package]] name = "aiortc" -version = "1.5.0" +version = "1.7.0" description = "An implementation of WebRTC and ORTC" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "aiortc-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1d3f2d6cc22fae5ea57b0371895b7830e878b9e3705fd3742b3453cdfa0fd51"}, - {file = "aiortc-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2eaf758b5e0bb16f22a9aeb8ab88eb947345f47e2e46cfca18b2815d44726c4e"}, - {file = "aiortc-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee76f6b30d7f39442ba7ac25d58114f077ead1460c5632d0c9e18179d01ad419"}, - {file = "aiortc-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a766052d93474e9bf4186465298b7c8fb9af062ef7f83ba33f191baa79dac1e"}, - {file = "aiortc-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fec292636978ed50728f1ce9b7a9f0d7d2e38bd0b920bb53e091e5728b79e231"}, - {file = "aiortc-1.5.0-cp310-cp310-win32.whl", hash = "sha256:27e879b73377d4b94bd86e4c3e8cd8913905fdca1de90a9a4efb0d9d3779dbf4"}, - {file = "aiortc-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:a720d0dd53553f6dfc28a53bee2ffce4f13283b4cbbc7db548000054cc63a4f9"}, - {file = "aiortc-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5e8cbfce84badd9a8355819343570bbec1e4eef725996cad6aebe4cc3d03ae8"}, - {file = "aiortc-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7931512dbb2ff91fb78f5512ad9ca96546452d7bb627f61bd7393bf59ee48ad3"}, - {file = "aiortc-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6abeb857a98014fc97265891ebf4fd989987d2ee091e0844e3c8fc543b6e2f0"}, - {file = "aiortc-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dead42dc3a31570fb6f5b94f9be9c78e28b1dc045f71489858116840f299862e"}, - {file = "aiortc-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a1a8081ba6d7cabc5896d10462cb50f6db7a8ccf34e6aa3e6c4a0d2d5bc5db5"}, - {file = "aiortc-1.5.0-cp311-cp311-win32.whl", hash = "sha256:cbd5d35bd34b22b8f711c708d266889c973c0dcb38da14a2a9f757266987a181"}, - {file = "aiortc-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:6749145e3d527ac98c80837d72fd832b0c403eded3546aeb7cec6f25592b4d5e"}, - {file = "aiortc-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:50e8e8903cf55f6f2cda9b61c115fca8e444d48f299cdd071980a3b5cec594fa"}, - {file = "aiortc-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15218a1b81f4fa1521f3b839eefdce638b34c46306e8eaf069cee7283fe8c838"}, - {file = "aiortc-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25bca7c7bbd3619296b5737a810dd0e2fc7f6264e767fca10e65a709a443bf39"}, - {file = "aiortc-1.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f1d88ae0f8b3047a279e4da06f09a35777cfbe0a9177ca8b053865a98a67912"}, - {file = "aiortc-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:f86b68b182537022d4ada49a7723c7a56f39372d6fbc31a29f57315d335cdc29"}, - {file = "aiortc-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e4bbc2f2b97651f7aa6f5e82c69a22590901962454fc02617c4a559a1b51c21a"}, - {file = "aiortc-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7243bce7c3b95e47e56ddf961fbf6015702ddbbf3579b0bbf18c6173b6a6357a"}, - {file = "aiortc-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:883db8926deaf01fdcd32fbd74fcf055db63e968324ceff41d5a46ec86dff90c"}, - {file = "aiortc-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd663f67344e6fe240c6372f620988db5285c9b1b8336306e9fec76ffb4e5493"}, - {file = "aiortc-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe2766f5a7a8e10b445cbf83a510b791a88180c7b1f9adef3f730840fa208afc"}, - {file = "aiortc-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba212562025843e8d9faf66e6156b682148f8f9995a19e5c66e8ea802f3fa121"}, - {file = "aiortc-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b7432c9c78e68811ee060ade8b0f867ac42a21677e4d1a9136bb88cd93ab8299"}, - {file = "aiortc-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ac6e285d4035298f3025b5767dc8f8b0a5a81b2b8744aaa19c75a8fe76f3ad8"}, - {file = "aiortc-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aa3c9306d892635dd9c38cc83c6ba67fb608c7da289f422d40f9542e104b7a0f"}, - {file = "aiortc-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:55dab49a38a212556adadb85ea06f6041d2a9e537e01092f9160b21b186b5039"}, - {file = "aiortc-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db93641b6f31315b8fd4c81e14881aef28fbb0700f220926f82909baedfa9888"}, - {file = "aiortc-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f63fd1168df72498afe0ee06555cc86b8496115ef128519a01d1ea8e404784b8"}, - {file = "aiortc-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e436f49617887f2009c6ada872c2da201e3c8010b387e7c1057eab229ae438c3"}, - {file = "aiortc-1.5.0-cp39-cp39-win32.whl", hash = "sha256:6f23495d4e11610117d1bad8686d42d529168d463687a1a1e0bec795d1ec33ce"}, - {file = "aiortc-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:76206601082e39fdb56d86221729f04f8bd79d65f9fd6b82121947eabf7efd6d"}, - {file = "aiortc-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3b2a3b4c120a73242ea0b843ecc3efeaea32861682c771e67f7f08f9d18fddc"}, - {file = "aiortc-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d3f6511f2442f49dfaf4e69865b47e0d6d95440fee2f66e6a03a8b4fa1b28e3"}, - {file = "aiortc-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ae221c734864c8749c27cc8add22d296ef3e06ae5f6982dbcbe2d0976b10e1"}, - {file = "aiortc-1.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7732c825ee96e9bc7fb779a4008be768e7663f7f9bf0ab3cccdd412dd7f1c820"}, - {file = "aiortc-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:56ffdd67161488c6d934b090a8c2d277bba8806906a3a18493f46b42976569c1"}, - {file = "aiortc-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f73ba04ca3f331b0ddea0b4ff78424ba30bfd7a49d0b8bd926c75a66ad60f447"}, - {file = "aiortc-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69eedeec467bd7bcac7ace6ad398133e27f18eeae195a3ad0ffda74255a8b812"}, - {file = "aiortc-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e095e5fe22f5a2efd4e0657abec1fea7aca864cb32ae3f0816fbcd340a4f2b7"}, - {file = "aiortc-1.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dffd6899a5d3db4356d2c17521021032468931ae168545b1ff4815764a5e2873"}, - {file = "aiortc-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:af3eed686d621af93befd7e68bd73d6d8a8aa3e721e8fa3ce7e21b3225e37c38"}, - {file = "aiortc-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:15e222a308dcfc44351bd9acff21723c8065cdcd75d6649d53b2986ada64b6be"}, - {file = "aiortc-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9ecd61c42e6a78c089805a47542a68eeeec6ba98bf7a2e30cafa3d3f4e94a7f"}, - {file = "aiortc-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d839437c6000d77511ff1889133150f23fbc8a7365971260c45ce06ff007b0f"}, - {file = "aiortc-1.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:025847ad6b8c5686f2895394e1de92c043e20e7d90c266de201eef1b1108c8df"}, - {file = "aiortc-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:85583166ab9c9052d2539bee3ba05f27af7f7b93b15c2259c2fc1bd3de5b31d5"}, - {file = "aiortc-1.5.0.tar.gz", hash = "sha256:82b4131d84f862e24e1c3550b73f78412cc9554140a2575577eb3f04675bbad2"}, + {file = "aiortc-1.7.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aba47eac61ee7fb7e89876f40e4132aa66a13ed2a730dff003342e57219f34c0"}, + {file = "aiortc-1.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:169abaaa0c11a1695942b3eeea9d9032ea4992c6e84958c1b31c6ba22fcf4b0e"}, + {file = "aiortc-1.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5323a347d02d53989e61944eead19e550d930afbb872dd0fb51b3d065aaa833"}, + {file = "aiortc-1.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71c18762ebfeb239352705672e598c57f0e56e5c1b7955dba27651c801c56ea2"}, + {file = "aiortc-1.7.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:817526c2e429a1ef1226ca9cdb4ff3c5d03857eb31de0f5a00433dc4cb5569f3"}, + {file = "aiortc-1.7.0-cp38-abi3-win32.whl", hash = "sha256:a63c4da5c4a9d96ef6e3948c1f4675e02b0b908605eff4cea8b5e2fa5a34da4e"}, + {file = "aiortc-1.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:e60f19f810a552690bf6e969429c624df39af2b5079ee0d95fb75d110b978e20"}, + {file = "aiortc-1.7.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7407d7065cbc649adf866927c007d84f94eeb3fcaa65f44eb94def8c2c5bbca"}, + {file = "aiortc-1.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35e1dce2697762841dd3cc5a6e23ef8a0d96207e3fd33b834b5a8686748f6143"}, + {file = "aiortc-1.7.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f77cc2d757d7c3c37c6157cce36fe13fc161c5cb5aea62759c8b0d3e6d7f45f9"}, + {file = "aiortc-1.7.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80465daa66f89e4fd22b6afd3a6ae71ffd506343cf30025dbc36eb5453f95330"}, + {file = "aiortc-1.7.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8fcf352df6fabad32fd337dc51b629060de80d06987a8544c3c842ecc04254f8"}, + {file = "aiortc-1.7.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b1427673e3ef8889dbd1c4f05d3d2aa7895cbfdc985532d54892ad6f96fc08c"}, + {file = "aiortc-1.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2d018bd01c7532188be5842e11de252a1346156880ff3387d4f879c9f163d2"}, + {file = "aiortc-1.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f21e0024c0c7b07fec87e1ffcc30b6dbd57d1b822324d9c0128731388a82f08"}, + {file = "aiortc-1.7.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd267c338bd6578b46fb8f664418f9a48ad5d1582895eb029b4c5087e105fc89"}, + {file = "aiortc-1.7.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:919b6edbc1e462cb00e313d44368798066c3ebe81525ec6fb6008e0cad572c97"}, + {file = "aiortc-1.7.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:573314501d4aa2ef5e8826abe7e675742c92d25908f5f6b48ea2f5fababdfb4b"}, + {file = "aiortc-1.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:791f525577033572ee937853159cff2c63121d1e30d9c93df4ef3a4c94eec5ec"}, + {file = "aiortc-1.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52e945b2ba536e4e78c106e6c923f73b1838bf0c35592d729ea9b3ba6791b108"}, + {file = "aiortc-1.7.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89a8aef4067c68ccbc97872d506b9b80d5ed39e0cc41a46d641b66c518e00240"}, + {file = "aiortc-1.7.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0b7248716706c52e3bc1f21a89a1a9ca205e95a74c0b4aa4b2863d2162fd2552"}, + {file = "aiortc-1.7.0.tar.gz", hash = "sha256:4fd900797b419a9189443b7c95a2ce4bf5aa0d9542d8d19edfabf30aa5fbc296"}, ] [package.dependencies] aioice = ">=0.9.0,<1.0.0" -av = ">=9.0.0,<11.0.0" +av = ">=9.0.0,<12.0.0" cffi = ">=1.0.0" -cryptography = ">=2.2" +cryptography = ">=42.0.0" google-crc32c = ">=1.1" pyee = ">=9.0.0" -pylibsrtp = ">=0.5.6" -pyopenssl = ">=23.1.0" +pylibsrtp = ">=0.10.0" +pyopenssl = ">=24.0.0" [package.extras] -dev = ["aiohttp (>=3.7.0)", "coverage (>=5.0)", "numpy (>=1.19.0)"] +dev = ["aiohttp (>=3.7.0)", "coverage[toml] (>=7.2.2)", "numpy (>=1.19.0)"] [[package]] name = "aiosignal" @@ -211,120 +171,101 @@ frozenlist = ">=1.1.0" [[package]] name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" +version = "0.7.16" +description = "A light, configurable Sphinx theme" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] - -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "atomicwrites" -version = "1.4.1" -description = "Atomic file writes." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, + {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, + {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "av" -version = "10.0.0" +version = "11.0.0" description = "Pythonic bindings for FFmpeg's libraries." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "av-10.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d19bb54197155d045a2b683d993026d4bcb06e31c2acad0327e3e8711571899c"}, - {file = "av-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dba96a85cd37315529998e6dbbe3fa05c2344eb19a431dc24996be030a904ee"}, - {file = "av-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27d6d38c7c8d46d578c008ffcb8aad1eae14d0621fff41f4ad62395589045fe4"}, - {file = "av-10.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51037f4bde03daf924236af4f444e17345792ad7f6f70760a5e5863407e14f2b"}, - {file = "av-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0577a38664e453b4ffb63d616a0d23c295827b16ae96a090e89527a753de8718"}, - {file = "av-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:07c971573035d22ce50069d3f2bbdb4d6d02d626ab13db12fda3ce519cda3f22"}, - {file = "av-10.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e5085d11345484c0097898994bb3f515002e7e1deeb43dd11d30dd6f45402c49"}, - {file = "av-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:157bde3ffd1615a9006b56e4daf3b46848d3ee2bd46b0394f7568e43ed7ab5a9"}, - {file = "av-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115e144d5a1f205378a4b3a3657b7ed3e45918ebe5d2003a891e45984e8f443a"}, - {file = "av-10.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7d6e2b3fbda6464f74fe010dbcff361394bb014b0cb4aa4dc9f2bb713ce882"}, - {file = "av-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69fd5a38395191a0f4b71adf31057ff177c9f0762914d73d8797742339ad67d0"}, - {file = "av-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:836d69a9543d284976b229cc8d4343ffcfc0bbaf05239e13fb7e613b13d5291d"}, - {file = "av-10.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:eba192274538617bbe60097a013d83637f1a5ba9844bbbcf3ca7e43c6499b9d5"}, - {file = "av-10.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1301e4cf1a2c899851073720cd541066c8539b64f9eb0d52216f8d0a59f20429"}, - {file = "av-10.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eebd5aa9d8b1e33e715c5409544a712f13ec805bb0110d75f394ff28d2fb64ad"}, - {file = "av-10.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04cd0ce13a87870fb0a0ea4673f04934af2b9ac7ae844eafe92e2c19c092ab11"}, - {file = "av-10.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:10facb5b933551dd6a30d8015bc91eef5d1c864ee86aa3463ffbaff1a99f6c6a"}, - {file = "av-10.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:088636ded03724a2ab51136f6f4be0bc457bdb3c0d2ac7158792fe81150d4c1a"}, - {file = "av-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff0f7d3b1003a9ed0d06038f3f521a5ff0d3e056ec5111e2a78e303f98b815a7"}, - {file = "av-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccaf786e747b126a5b3b9a8f5ffbb6a20c5f528775cc7084c95732ca72606fba"}, - {file = "av-10.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c579d718b52beb812ea2a7bd68f812d0920b00937804d52d31d41bb71aa5557"}, - {file = "av-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2cfd39baa5d82768d2a8898de7bfd450a083ef22b837d57e5dc1b6de3244218"}, - {file = "av-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:81b5264d9752f49286bc1dc4d2cc66187418c4948a326dbed837c766c9892139"}, - {file = "av-10.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16bd82b63d0b4c1b855b3c36b13337f7cdc5925bd8284fab893bdf6c290fc3a9"}, - {file = "av-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a6c8f3f8c26d35eefe45b849c81fd0816ba4b6f589baec7357c25b4c5537d3c4"}, - {file = "av-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91ea46fea7259abdfabe00b0ed3a9ca18e7fff7ce80d2a2c66a28f797cce838a"}, - {file = "av-10.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a62edd533d330aa61902ae8cd82966affa487fa337a0c4f58ae8866ccb5d31c0"}, - {file = "av-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b67b7d028c9cf68215376662fd2e0be6ca0cc02d32d3ed8514fec67b12db9cbd"}, - {file = "av-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:0f9c88062ebfd2ce547c522b64f79e487ed2b0a6a9d6693c801b28df0d944607"}, - {file = "av-10.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:63dbafcd02415127d97509523bc285f1ab260988f87b744d7fb1baee6ffbdf96"}, - {file = "av-10.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2ea4424d0be62fe18c843420284a0907bcb38d577062d62c4b75a8e940e6057"}, - {file = "av-10.0.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b6326fd0755761e3ee999e4bf90339e869fe71d548b679fee89157858b8d04a"}, - {file = "av-10.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3fae238751ec0db6377b2106e13762ca84dbe104bd44c1ce9b424163aef4ab5"}, - {file = "av-10.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:86bb3f6e8cce62ad18cd34eb2eadd091d99f51b40be81c929b53fbd8fecf6d90"}, - {file = "av-10.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f7b508813abbc100162d305a1ac9b2dd16e5128d56f2ac69639fc6a4b5aca69e"}, - {file = "av-10.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98cc376199c0aa6e9365d03e0f4e67cfb209e40fe9c0cf566372f9daf2a0c779"}, - {file = "av-10.0.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b459ca0ef25c1a0e370112556bdc5b7752f76dc9bd497acaf3e653171e4b946"}, - {file = "av-10.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab930735112c1f788cc4d47c42c59ba0dd214d815aa906e1addf39af91d15194"}, - {file = "av-10.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13fe0b48b9211539323ecebbf84154c86c72d16723c6d0af76e29ae5c3a614b2"}, - {file = "av-10.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2eeec7beaebfe9e2213b3c94b482381187d0afdcb632f93239b44dc668b97df"}, - {file = "av-10.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dac2a8b0791c3373270e32f6cd27e6b60628565a188e40a5d9660d3aab05e33"}, - {file = "av-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cdede2325cb750b5bf79238bbf06f9c2a70b757b12726003769a43493b7233a"}, - {file = "av-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9788e6e15db0910fb8e1548ba7540799d07066177710590a5794a524c4910e05"}, - {file = "av-10.0.0.tar.gz", hash = "sha256:8afd3d5610e1086f3b2d8389d66672ea78624516912c93612de64dcaa4c67e05"}, + {file = "av-11.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a01f13b37eb6d181e03bbbbda29093fe2d68f10755795188220acdc89560ec27"}, + {file = "av-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b2236faee1b5d71dff3cdef81ef6eec22cc8b71dbfb45eb037e6437fe80f24e7"}, + {file = "av-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40543a08e5c84aecd2bc84da5d43548743201897f0ba21bf5ae3a4dcddefca2b"}, + {file = "av-11.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2907376884d956376aaf3bc1905fa4e0dcb9ba4e0d183e519392a19d89317d1b"}, + {file = "av-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8d5581dcdc81cd601e3ce036809f14da82c46ff187bcefe981ec819390e0ab0"}, + {file = "av-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:150490f2a62cfa470f3cb60f3a0060ff93afd807e2b7b3b0eeeb5a992eb8d67b"}, + {file = "av-11.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d9bac0de62f09e2cb4e2132b5a46a89bc31c898189aa285b484c17351d991afe"}, + {file = "av-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2122ff8bdace4ce50207920f37de472517921e2ca1f0503464f748fdb8e20506"}, + {file = "av-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:527d840697fee6ad4cf47eba987eaf30cd76bd96b2d20eaa907e166b9b8065c8"}, + {file = "av-11.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abeaedddfca9101886eb6fc47318c5f5ece8480d330d73aacf6917d7421981a2"}, + {file = "av-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13790fbb889b955baf885fe3761e923e85537ef414173465ec293177cedb7b99"}, + {file = "av-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc27e27f52480287f44226ad4ae3eb53346bf027959d0f00a9154530bd98b371"}, + {file = "av-11.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:892583e2c6b8c2500e5d24310f499caefcdaa2e48c8f7169ad41041aaaf4da11"}, + {file = "av-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6943679d70a9f4de974049e7ae2cf0b20afe0d7ddab650526c02a6cf9adcd08f"}, + {file = "av-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6d73b038ccf1df5c16bc643eee5c694fb7732e09375e2f4903c1f4ce90dfb72"}, + {file = "av-11.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c83422db3333e97b9680700df5185139352fc3a568b14179da3bdcbeb2f0e91b"}, + {file = "av-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8413900f6a3639e0088c018a3a516a1656d4d16799e7aa759a16ddf3bd268e2b"}, + {file = "av-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:908e49ee336223801d8f2f7dca5a1deb64e9d8256138b8e7a79013b682a6ebb5"}, + {file = "av-11.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:82411ae4a562da07b76028d2f349fb0e6a86aa78ad2b18d2d7bf5b06b17fba14"}, + {file = "av-11.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:621104bd63e38fa4eca554da3722b1aac329619de39152f27eec8999acc72342"}, + {file = "av-11.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:442878990c094455a16c10127edcc54bc4e78d355e6a13ad2a27608b0ecda38f"}, + {file = "av-11.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:658199c92987dc72511f5ee8ade62faef6234b7a04c8b5788de99e366be5e073"}, + {file = "av-11.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4b381665c49267b46f87297573898b85e5c41384750fee2e70267fbc4ba318"}, + {file = "av-11.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:60de14f71293e36ca4e297cc8a8460f0cf74f38a201694f3c6fc7f40301582f2"}, + {file = "av-11.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a90f04af96374dab94028a7471597bdfcf03083338b9be2eb8ca4805a8ec7ab5"}, + {file = "av-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8821ab2d23e4cb5c8abea6b08d2b1bfceca6af2d88fab1d1dc1b3ec7b34933c7"}, + {file = "av-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a92342ed307eeaf9509a6b0f3bafd4337c4880c851b50acc18df48c625b63b6"}, + {file = "av-11.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe3502975bc844f5d432c1f24d331bf6ef3e05532ebf06f7ed08b60719b8ea5"}, + {file = "av-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c278b3a4fd111b4c9190abe6b1a5ca358d5f91e851d470b62577b957e0187b09"}, + {file = "av-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:478aa1d54fbc3058ea65ff41086b6adbe1326b456a027d2f3b59dbe60b4ac2ca"}, + {file = "av-11.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e8df10bb2d56a981d02a8a0b41491912b76dad06305d174a2575ef55ad451100"}, + {file = "av-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30c51e597785a89241bd61865faff2dbd3327856a8285a1e120dbf60e18348b"}, + {file = "av-11.0.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8b8bd92edb096699b306e7b090ad096925ca3bdae6f89656f023fa2a2da627d"}, + {file = "av-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9383af733abfc44f6fc29307a6c922fbf671ee343dc97b78b74eac6a2346a46d"}, + {file = "av-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a9df4a60579198b560f641cdfe4c2139948a70193ddc096b275f2cf6d94e3e04"}, + {file = "av-11.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8ae5f7ae0a7093fb813686d4aa4c554531f80a28480427f5c155da51b747eff0"}, + {file = "av-11.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50fb7d606f8236891d773c701d5650b93af8dbf78eeaac36fc7e1f7f64a9d664"}, + {file = "av-11.0.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:543e0f9bf6ff02dedbe66d906fbc89c8907c80a8ea7413fc3fed68ce4a6e9b44"}, + {file = "av-11.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daa279c884457ab194ce78bdd89c0aa391af733da95fb3258d4c6eb8c258299a"}, + {file = "av-11.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1aacc21f4cf96447117a61edfb776afb73186750a5e08a21484ddfc3599aefb5"}, + {file = "av-11.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2568b38eef777b916a5d02e42b8f67f92e12023531239ddd32e1ca4f3cdf8c5b"}, + {file = "av-11.0.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747c6d347e27c59cc2e78c9c505d23cd88eceff0cc9386be73693ae9009a577c"}, + {file = "av-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bbd8f4941b9d3450eff40003b9b9d904667aec7ab085fa31f0f9bca32d755e0"}, + {file = "av-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f39c1244ba0cf185b2722aeec116b8a98a2ee5728ce687cec0bda60ee0360dfc"}, + {file = "av-11.0.0.tar.gz", hash = "sha256:48223f000a252070f8e700ff634bb7fb3aa1b7bc7e450373029fbdd6f369ac31"}, ] [[package]] name = "azure-core" -version = "1.29.4" +version = "1.29.7" description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "azure-core-1.29.4.tar.gz", hash = "sha256:500b3aa9bf2e90c5ccc88bb105d056114ca0ce7d0ce73afb8bc4d714b2fc7568"}, - {file = "azure_core-1.29.4-py3-none-any.whl", hash = "sha256:b03261bcba22c0b9290faf9999cedd23e849ed2577feee90515694cea6bc74bf"}, + {file = "azure-core-1.29.7.tar.gz", hash = "sha256:2944faf1a7ff1558b1f457cabf60f279869cabaeef86b353bed8eb032c7d8c5e"}, + {file = "azure_core-1.29.7-py3-none-any.whl", hash = "sha256:95a7b41b4af102e5fcdfac9500fcc82ff86e936c7145a099b7848b9ac0501250"}, ] [package.dependencies] -requests = ">=2.18.4" +requests = ">=2.21.0" six = ">=1.11.0" typing-extensions = ">=4.6.0" @@ -333,30 +274,30 @@ aio = ["aiohttp (>=3.0)"] [[package]] name = "azure-identity" -version = "1.14.0" +version = "1.15.0" description = "Microsoft Azure Identity Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "azure-identity-1.14.0.zip", hash = "sha256:72441799f8c5c89bfe21026965e266672a7c5d050c2c65119ef899dd5362e2b1"}, - {file = "azure_identity-1.14.0-py3-none-any.whl", hash = "sha256:edabf0e010eb85760e1dd19424d5e8f97ba2c9caff73a16e7b30ccbdbcce369b"}, + {file = "azure-identity-1.15.0.tar.gz", hash = "sha256:4c28fc246b7f9265610eb5261d65931183d019a23d4b0e99357facb2e6c227c8"}, + {file = "azure_identity-1.15.0-py3-none-any.whl", hash = "sha256:a14b1f01c7036f11f148f22cd8c16e05035293d714458d6b44ddf534d93eb912"}, ] [package.dependencies] -azure-core = ">=1.11.0,<2.0.0" +azure-core = ">=1.23.0,<2.0.0" cryptography = ">=2.5" -msal = ">=1.20.0,<2.0.0" +msal = ">=1.24.0,<2.0.0" msal-extensions = ">=0.3.0,<2.0.0" [[package]] name = "azure-storage-blob" -version = "12.17.0" +version = "12.19.0" description = "Microsoft Azure Blob Storage Client Library for Python" optional = false python-versions = ">=3.7" files = [ - {file = "azure-storage-blob-12.17.0.zip", hash = "sha256:c14b785a17050b30fc326a315bdae6bc4a078855f4f94a4c303ad74a48dc8c63"}, - {file = "azure_storage_blob-12.17.0-py3-none-any.whl", hash = "sha256:0016e0c549a80282d7b4920c03f2f4ba35c53e6e3c7dbcd2a4a8c8eb3882c1e7"}, + {file = "azure-storage-blob-12.19.0.tar.gz", hash = "sha256:26c0a4320a34a3c2a1b74528ba6812ebcb632a04cd67b1c7377232c4b01a5897"}, + {file = "azure_storage_blob-12.19.0-py3-none-any.whl", hash = "sha256:7bbc2c9c16678f7a420367fef6b172ba8730a7e66df7f4d7a55d5b3c8216615b"}, ] [package.dependencies] @@ -370,15 +311,18 @@ aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"] [[package]] name = "babel" -version = "2.12.1" +version = "2.14.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "breathe" version = "4.35.0" @@ -394,20 +338,6 @@ files = [ docutils = ">=0.12" Sphinx = ">=4.0,<5.0.0 || >5.0.0" -[[package]] -name = "carla" -version = "0.9.14" -description = "Python API for communicating with the CARLA server." -optional = false -python-versions = "*" -files = [ - {file = "carla-0.9.14-cp311-cp311-linux_x86_64.whl", hash = "sha256:f0a8ce0c760d1fef3577e2ef90e9d468e3d85e65bd6d68b44bce51f0d5a0723a"}, -] - -[package.source] -type = "url" -url = "https://github.com/commaai/carla/releases/download/3.11.4/carla-0.9.14-cp311-cp311-linux_x86_64.whl" - [[package]] name = "casadi" version = "3.6.3" @@ -465,86 +395,74 @@ numpy = "*" [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -563,86 +481,101 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -695,13 +628,13 @@ test = ["pytest-cov"] [[package]] name = "cloudpickle" -version = "2.2.1" -description = "Extended pickling support for Python objects" +version = "3.0.0" +description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cloudpickle-2.2.1-py3-none-any.whl", hash = "sha256:61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f"}, - {file = "cloudpickle-2.2.1.tar.gz", hash = "sha256:d89684b8de9e34a2a43b3460fbca07d09d6e25ce858df4d5a44240403b6178f5"}, + {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, + {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, ] [[package]] @@ -734,61 +667,66 @@ cron = ["capturer (>=2.4)"] [[package]] name = "contourpy" -version = "1.1.0" +version = "1.2.0" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, - {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, - {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, - {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, - {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, - {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, - {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, - {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, - {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, - {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, - {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, + {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, + {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, + {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, + {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, + {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, + {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, + {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, + {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, + {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, ] [package.dependencies] -numpy = ">=1.16" +numpy = ">=1.20,<2.0" [package.extras] bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "wurlitzer"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "control" @@ -813,63 +751,63 @@ test = ["pytest", "pytest-timeout"] [[package]] name = "coverage" -version = "7.3.1" +version = "7.4.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, - {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, - {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, - {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, - {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, - {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, - {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, - {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, - {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, - {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, - {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, - {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, - {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, - {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, + {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, + {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, + {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, + {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, + {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, + {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, + {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, + {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, + {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, + {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, + {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, + {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, ] [package.extras] @@ -887,125 +825,138 @@ files = [ [[package]] name = "cryptography" -version = "41.0.3" +version = "42.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, - {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, - {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, - {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, - {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, - {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, - {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, - {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, - {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, - {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, + {file = "cryptography-42.0.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:265bdc693570b895eb641410b8fc9e8ddbce723a669236162b9d9cfb70bd8d77"}, + {file = "cryptography-42.0.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:160fa08dfa6dca9cb8ad9bd84e080c0db6414ba5ad9a7470bc60fb154f60111e"}, + {file = "cryptography-42.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:727387886c9c8de927c360a396c5edcb9340d9e960cda145fca75bdafdabd24c"}, + {file = "cryptography-42.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d84673c012aa698555d4710dcfe5f8a0ad76ea9dde8ef803128cc669640a2e0"}, + {file = "cryptography-42.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e6edc3a568667daf7d349d7e820783426ee4f1c0feab86c29bd1d6fe2755e009"}, + {file = "cryptography-42.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:d50718dd574a49d3ef3f7ef7ece66ef281b527951eb2267ce570425459f6a404"}, + {file = "cryptography-42.0.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9544492e8024f29919eac2117edd8c950165e74eb551a22c53f6fdf6ba5f4cb8"}, + {file = "cryptography-42.0.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ab6b302d51fbb1dd339abc6f139a480de14d49d50f65fdc7dff782aa8631d035"}, + {file = "cryptography-42.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2fe16624637d6e3e765530bc55caa786ff2cbca67371d306e5d0a72e7c3d0407"}, + {file = "cryptography-42.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ed1b2130f5456a09a134cc505a17fc2830a1a48ed53efd37dcc904a23d7b82fa"}, + {file = "cryptography-42.0.1-cp37-abi3-win32.whl", hash = "sha256:e5edf189431b4d51f5c6fb4a95084a75cef6b4646c934eb6e32304fc720e1453"}, + {file = "cryptography-42.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:6bfd823b336fdcd8e06285ae8883d3d2624d3bdef312a0e2ef905f332f8e9302"}, + {file = "cryptography-42.0.1-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:351db02c1938c8e6b1fee8a78d6b15c5ccceca7a36b5ce48390479143da3b411"}, + {file = "cryptography-42.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430100abed6d3652208ae1dd410c8396213baee2e01a003a4449357db7dc9e14"}, + {file = "cryptography-42.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dff7a32880a51321f5de7869ac9dde6b1fca00fc1fef89d60e93f215468e824"}, + {file = "cryptography-42.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b512f33c6ab195852595187af5440d01bb5f8dd57cb7a91e1e009a17f1b7ebca"}, + {file = "cryptography-42.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:95d900d19a370ae36087cc728e6e7be9c964ffd8cbcb517fd1efb9c9284a6abc"}, + {file = "cryptography-42.0.1-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:6ac8924085ed8287545cba89dc472fc224c10cc634cdf2c3e2866fe868108e77"}, + {file = "cryptography-42.0.1-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cb2861a9364fa27d24832c718150fdbf9ce6781d7dc246a516435f57cfa31fe7"}, + {file = "cryptography-42.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25ec6e9e81de5d39f111a4114193dbd39167cc4bbd31c30471cebedc2a92c323"}, + {file = "cryptography-42.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9d61fcdf37647765086030d81872488e4cb3fafe1d2dda1d487875c3709c0a49"}, + {file = "cryptography-42.0.1-cp39-abi3-win32.whl", hash = "sha256:16b9260d04a0bfc8952b00335ff54f471309d3eb9d7e8dbfe9b0bd9e26e67881"}, + {file = "cryptography-42.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:7911586fc69d06cd0ab3f874a169433db1bc2f0e40988661408ac06c4527a986"}, + {file = "cryptography-42.0.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d3594947d2507d4ef7a180a7f49a6db41f75fb874c2fd0e94f36b89bfd678bf2"}, + {file = "cryptography-42.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8d7efb6bf427d2add2f40b6e1e8e476c17508fa8907234775214b153e69c2e11"}, + {file = "cryptography-42.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:126e0ba3cc754b200a2fb88f67d66de0d9b9e94070c5bc548318c8dab6383cb6"}, + {file = "cryptography-42.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:802d6f83233cf9696b59b09eb067e6b4d5ae40942feeb8e13b213c8fad47f1aa"}, + {file = "cryptography-42.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0b7cacc142260ada944de070ce810c3e2a438963ee3deb45aa26fd2cee94c9a4"}, + {file = "cryptography-42.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:32ea63ceeae870f1a62e87f9727359174089f7b4b01e4999750827bf10e15d60"}, + {file = "cryptography-42.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3902c779a92151f134f68e555dd0b17c658e13429f270d8a847399b99235a3f"}, + {file = "cryptography-42.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:50aecd93676bcca78379604ed664c45da82bc1241ffb6f97f6b7392ed5bc6f04"}, + {file = "cryptography-42.0.1.tar.gz", hash = "sha256:fd33f53809bb363cf126bebe7a99d97735988d9b0131a2be59fbf83e1259a5b7"}, ] [package.dependencies] -cffi = ">=1.12" +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] nox = ["nox"] -pep8test = ["black", "check-sdist", "mypy", "ruff"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] name = "cycler" -version = "0.11.0" +version = "0.12.1" description = "Composable style cycles" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, ] +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "cython" -version = "3.0.2" +version = "3.0.8" description = "The Cython compiler for writing C extensions in the Python language." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "Cython-3.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ccb91d2254e34724f1541b2a6fcdfacdb88284185b0097ae84e0ddf476c7a38"}, - {file = "Cython-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c298b1589205ecaaed0457ad05e0c8a43e7db2053607f48ed4a899cb6aa114df"}, - {file = "Cython-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e825e682cef76d0c33384f38b56b7e87c76152482a914dfc78faed6ff66ce05a"}, - {file = "Cython-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77ec0134fc1b10aebef2013936a91c07bff2498ec283bc2eca099ee0cb94d12e"}, - {file = "Cython-3.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c90eeb94395315e65fd758a2f86b92904fce7b50060b4d45a878ef6767f9276e"}, - {file = "Cython-3.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:38085523fa7a299638d051ae08144222785639882f6291bd275c0b12db1034ff"}, - {file = "Cython-3.0.2-cp310-cp310-win32.whl", hash = "sha256:b032cb0c69082f0665b2c5fb416d041157062f1538336d0edf823b9ee500e39c"}, - {file = "Cython-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:067b2b9eb487bd61367b296f11b7c1c70a084b3eb7d5a572f607cd1fc5ca5586"}, - {file = "Cython-3.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:213ff9f95de319e54b520bf31edd6aa7a1fa4fbf617c2beb0f92362595e6476a"}, - {file = "Cython-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bebbca13078125a35937966137af4bd0300a0c66fd7ae4ce36adc049b13bdf3"}, - {file = "Cython-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e5587128e8c2423aefcffa4ded4ddf60d44898938fbb7c0f236636a750a94f"}, - {file = "Cython-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78e2853d484643c6b7ac3bdb48392753442da1c71b689468fa3176b619bebe54"}, - {file = "Cython-3.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e722732e9aa9bde667ed6d87525234823eb7766ca234cfb19d7e0c095a2ef4"}, - {file = "Cython-3.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:989787fc24a95100a26918b6577d06e15a8868a3ed267009c5cfcf1a906179ac"}, - {file = "Cython-3.0.2-cp311-cp311-win32.whl", hash = "sha256:d21801981db44b7e9f9768f121317946461d56b51de1e6eff3c42e8914048696"}, - {file = "Cython-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:809617cf4825b2138ce0ec827e1f28e39668743c81ac8286373f8d148c05f088"}, - {file = "Cython-3.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5682293d344b7dbad97ce6eceb9e887aca6e53499709db9da726ca3424e5559d"}, - {file = "Cython-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e08ff5da5f5b969639784b1bffcd880a0c0f048d182aed7cba9945ee8b367c2"}, - {file = "Cython-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8850269ff59f77a1629e26d0576701925360d732011d6d3516ccdc5b2c2bc310"}, - {file = "Cython-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:550b3fbe9b3c555b44ded934f4822f9fcc04dfcee512167ebcbbd370ccede20e"}, - {file = "Cython-3.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4db017b104f47b1185237702f6ed2651839c8124614683efa7c489f3fa4e19d9"}, - {file = "Cython-3.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:75a2395cc7b78cff59be6e9b7f92bbb5d7b8d25203f6d3fb6f72bdb7d3f49777"}, - {file = "Cython-3.0.2-cp312-cp312-win32.whl", hash = "sha256:786b6034a91e886116bb562fe42f8bf0f97c3e00c02e56791d02675959ed65b1"}, - {file = "Cython-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc9d173ab8b167cae674f6deed8c65ba816574797a2bd6d8aa623277d1fa81ca"}, - {file = "Cython-3.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8948504338d7a140ce588333177dcabf0743a68dbc83b0174f214f5b959634d5"}, - {file = "Cython-3.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a51efba0e136b2af358e5a347bae09678b17460c35cf1eab24f0476820348991"}, - {file = "Cython-3.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05cb2a73810f045d328b7579cf98f550a9e601df5e282d1fea0512d8ad589011"}, - {file = "Cython-3.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22ba78e48bdb65977928ecb275ac8c82df7b0eefa075078a1363a5af4606b42e"}, - {file = "Cython-3.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:302281b927409b3e0ef8cd9251eab782cf1acd2578eab305519fbae5d184b7e9"}, - {file = "Cython-3.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a1c3675394b81024aaf56e4f53c2b4f81d9a116c7049e9d4706f810899c9134e"}, - {file = "Cython-3.0.2-cp36-cp36m-win32.whl", hash = "sha256:34f7b014ebce5d325c8084e396c81cdafbd8d82be56780dffe6b67b28c891f1b"}, - {file = "Cython-3.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:477cd3549597f09a1608da7b05e16ba641e9aedd171b868533a5a07790ed886f"}, - {file = "Cython-3.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a49dde9f9e29ea82f29aaf3bb1a270b6eb90b75d627c7ff2f5dd3764540ae646"}, - {file = "Cython-3.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1c8013fad0933f5201186eccc5f2be223cafd6a8dcd586d3f7bb6ba84dc845"}, - {file = "Cython-3.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b75e9c9d7ad7c9dd85d45241d1d4e3c5f66079c1f84eec91689c26d98bc3349"}, - {file = "Cython-3.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f43c4d3ecd9e3b8b7afe834e519f55cf4249b1088f96d11b96f02c55cbaeff7"}, - {file = "Cython-3.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:dab6a923e21e212aa3dc6dde9b22a190f5d7c449315a94e57ddc019ea74a979b"}, - {file = "Cython-3.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae453cfa933b919c0a19d2cc5dc9fb28486268e95dc2ab7a11ab7f99cf8c3883"}, - {file = "Cython-3.0.2-cp37-cp37m-win32.whl", hash = "sha256:b1f023d36a3829069ed11017c670128be3f135a9c17bd64c35d3b3442243b05c"}, - {file = "Cython-3.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:011c4e0b75baee1843334562487eb4fbc0c59ddb2cc32a978b972a81eedcbdcc"}, - {file = "Cython-3.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:832bbee87bca760efeae248ddf19ccd77f9a2355cb6f8a64f20cc377e56957b3"}, - {file = "Cython-3.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fe806d154b6b7f0ab746dac36c022889e2e7cf47546ff9afdc29a62cfa692d0"}, - {file = "Cython-3.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e486331a29e7700b1ad5f4f753bef483c81412a5e64a873df46d6cb66f9a65de"}, - {file = "Cython-3.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54d41a1dfbaab74449873e7f8e6cd4239850fe7a50f7f784dd99a560927f3bac"}, - {file = "Cython-3.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4dca13c86d6cd523c7d8bbf8db1b2bbf8faedd0addedb229158d8015ad1819e1"}, - {file = "Cython-3.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:10cbfb37f31938371a6213cc8b5459c639954aed053efeded3c012d4c5915db9"}, - {file = "Cython-3.0.2-cp38-cp38-win32.whl", hash = "sha256:e663c237579c033deaa2cb362b74651da7712f56e441c11382510a8c4c4f2dd7"}, - {file = "Cython-3.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:2f84bd6cefa5130750c492038170c44f1cbd6f42e9ed85e168fd9cb453f85160"}, - {file = "Cython-3.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f37e4287f520f3748a06ad5eaae09ba4ac68f52e155d70de5f75780d83575c43"}, - {file = "Cython-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd30826ca8b27b2955a63c8ffe8aacc9f0779582b4bd154cf7b441ac10dae2cb"}, - {file = "Cython-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08d67c7225a09eeb77e090c8d4f60677165b052ccf76e3a57d8237064e5c2de2"}, - {file = "Cython-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e625eec8c5c9a8cb062a318b257cc469d301bed952c7daf86e38bbd3afe7c91"}, - {file = "Cython-3.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1b12a8f23270675b537d1c3b988f845bea4bbcc66ae0468857f5ede0526d4522"}, - {file = "Cython-3.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:62dd78afdf748a58dae9c9b9c42a1519ae30787b28ce5f84a0e1bb54144142ca"}, - {file = "Cython-3.0.2-cp39-cp39-win32.whl", hash = "sha256:d0d0cc4ecc05f41c5e02af14ac0083552d22efed976f79eb7bade55fed63b25d"}, - {file = "Cython-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:147cc1d3dda8b06de9d86df5e59cdf15f0a522620168b7349a5ec88b48104d7d"}, - {file = "Cython-3.0.2-py2.py3-none-any.whl", hash = "sha256:8f1c9e4b8e413da211dd7942440cf410ff0eafb081309e04e81f4fafbb146bf2"}, - {file = "Cython-3.0.2.tar.gz", hash = "sha256:9594818dca8bb22ae6580c5222da2bc5cc32334350bd2d294a00d8669bcc61b5"}, + {file = "Cython-3.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a846e0a38e2b24e9a5c5dc74b0e54c6e29420d88d1dafabc99e0fc0f3e338636"}, + {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45523fdc2b78d79b32834cc1cc12dc2ca8967af87e22a3ee1bff20e77c7f5520"}, + {file = "Cython-3.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa0b7f3f841fe087410cab66778e2d3fb20ae2d2078a2be3dffe66c6574be39"}, + {file = "Cython-3.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e87294e33e40c289c77a135f491cd721bd089f193f956f7b8ed5aa2d0b8c558f"}, + {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a1df7a129344b1215c20096d33c00193437df1a8fcca25b71f17c23b1a44f782"}, + {file = "Cython-3.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:13c2a5e57a0358da467d97667297bf820b62a1a87ae47c5f87938b9bb593acbd"}, + {file = "Cython-3.0.8-cp310-cp310-win32.whl", hash = "sha256:96b028f044f5880e3cb18ecdcfc6c8d3ce9d0af28418d5ab464509f26d8adf12"}, + {file = "Cython-3.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:8140597a8b5cc4f119a1190f5a2228a84f5ca6d8d9ec386cfce24663f48b2539"}, + {file = "Cython-3.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aae26f9663e50caf9657148403d9874eea41770ecdd6caf381d177c2b1bb82ba"}, + {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:547eb3cdb2f8c6f48e6865d5a741d9dd051c25b3ce076fbca571727977b28ac3"}, + {file = "Cython-3.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a567d4b9ba70b26db89d75b243529de9e649a2f56384287533cf91512705bee"}, + {file = "Cython-3.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51d1426263b0e82fb22bda8ea60dc77a428581cc19e97741011b938445d383f1"}, + {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c26daaeccda072459b48d211415fd1e5507c06bcd976fa0d5b8b9f1063467d7b"}, + {file = "Cython-3.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:289ce7838208211cd166e975865fd73b0649bf118170b6cebaedfbdaf4a37795"}, + {file = "Cython-3.0.8-cp311-cp311-win32.whl", hash = "sha256:c8aa05f5e17f8042a3be052c24f2edc013fb8af874b0bf76907d16c51b4e7871"}, + {file = "Cython-3.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:000dc9e135d0eec6ecb2b40a5b02d0868a2f8d2e027a41b0fe16a908a9e6de02"}, + {file = "Cython-3.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90d3fe31db55685d8cb97d43b0ec39ef614fcf660f83c77ed06aa670cb0e164f"}, + {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e24791ddae2324e88e3c902a765595c738f19ae34ee66bfb1a6dac54b1833419"}, + {file = "Cython-3.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f020fa1c0552052e0660790b8153b79e3fc9a15dbd8f1d0b841fe5d204a6ae6"}, + {file = "Cython-3.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18bfa387d7a7f77d7b2526af69a65dbd0b731b8d941aaff5becff8e21f6d7717"}, + {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fe81b339cffd87c0069c6049b4d33e28bdd1874625ee515785bf42c9fdff3658"}, + {file = "Cython-3.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:80fd94c076e1e1b1ee40a309be03080b75f413e8997cddcf401a118879863388"}, + {file = "Cython-3.0.8-cp312-cp312-win32.whl", hash = "sha256:85077915a93e359a9b920280d214dc0cf8a62773e1f3d7d30fab8ea4daed670c"}, + {file = "Cython-3.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:0cb2dcc565c7851f75d496f724a384a790fab12d1b82461b663e66605bec429a"}, + {file = "Cython-3.0.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:870d2a0a7e3cbd5efa65aecdb38d715ea337a904ea7bb22324036e78fb7068e7"}, + {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e8f2454128974905258d86534f4fd4f91d2f1343605657ecab779d80c9d6d5e"}, + {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1949d6aa7bc792554bee2b67a9fe41008acbfe22f4f8df7b6ec7b799613a4b3"}, + {file = "Cython-3.0.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9f2c6e1b8f3bcd6cb230bac1843f85114780bb8be8614855b1628b36bb510e0"}, + {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:05d7eddc668ae7993643f32c7661f25544e791edb745758672ea5b1a82ecffa6"}, + {file = "Cython-3.0.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bfabe115deef4ada5d23c87bddb11289123336dcc14347011832c07db616dd93"}, + {file = "Cython-3.0.8-cp36-cp36m-win32.whl", hash = "sha256:0c38c9f0bcce2df0c3347285863621be904ac6b64c5792d871130569d893efd7"}, + {file = "Cython-3.0.8-cp36-cp36m-win_amd64.whl", hash = "sha256:6c46939c3983217d140999de7c238c3141f56b1ea349e47ca49cae899969aa2c"}, + {file = "Cython-3.0.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:115f0a50f752da6c99941b103b5cb090da63eb206abbc7c2ad33856ffc73f064"}, + {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c0f29246734561c90f36e70ed0506b61aa3d044e4cc4cba559065a2a741fae"}, + {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ab75242869ff71e5665fe5c96f3378e79e792fa3c11762641b6c5afbbbbe026"}, + {file = "Cython-3.0.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6717c06e9cfc6c1df18543cd31a21f5d8e378a40f70c851fa2d34f0597037abc"}, + {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9d3f74388db378a3c6fd06e79a809ed98df3f56484d317b81ee762dbf3c263e0"}, + {file = "Cython-3.0.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae7ac561fd8253a9ae96311e91d12af5f701383564edc11d6338a7b60b285a6f"}, + {file = "Cython-3.0.8-cp37-cp37m-win32.whl", hash = "sha256:97b2a45845b993304f1799664fa88da676ee19442b15fdcaa31f9da7e1acc434"}, + {file = "Cython-3.0.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9e2be2b340fea46fb849d378f9b80d3c08ff2e81e2bfbcdb656e2e3cd8c6b2dc"}, + {file = "Cython-3.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2cde23c555470db3f149ede78b518e8274853745289c956a0e06ad8d982e4db9"}, + {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7990ca127e1f1beedaf8fc8bf66541d066ef4723ad7d8d47a7cbf842e0f47580"}, + {file = "Cython-3.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b983c8e6803f016146c26854d9150ddad5662960c804ea7f0c752c9266752f0"}, + {file = "Cython-3.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a973268d7ca1a2bdf78575e459a94a78e1a0a9bb62a7db0c50041949a73b02ff"}, + {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:61a237bc9dd23c7faef0fcfce88c11c65d0c9bb73c74ccfa408b3a012073c20e"}, + {file = "Cython-3.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3a3d67f079598af49e90ff9655bf85bd358f093d727eb21ca2708f467c489cae"}, + {file = "Cython-3.0.8-cp38-cp38-win32.whl", hash = "sha256:17a642bb01a693e34c914106566f59844b4461665066613913463a719e0dd15d"}, + {file = "Cython-3.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:2cdfc32252f3b6dc7c94032ab744dcedb45286733443c294d8f909a4854e7f83"}, + {file = "Cython-3.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa97893d99385386925d00074654aeae3a98867f298d1e12ceaf38a9054a9bae"}, + {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05c0bf9d085c031df8f583f0d506aa3be1692023de18c45d0aaf78685bbb944"}, + {file = "Cython-3.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de892422582f5758bd8de187e98ac829330ec1007bc42c661f687792999988a7"}, + {file = "Cython-3.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:314f2355a1f1d06e3c431eaad4708cf10037b5e91e4b231d89c913989d0bdafd"}, + {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:78825a3774211e7d5089730f00cdf7f473042acc9ceb8b9eeebe13ed3a5541de"}, + {file = "Cython-3.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df8093deabc55f37028190cf5e575c26aad23fc673f34b85d5f45076bc37ce39"}, + {file = "Cython-3.0.8-cp39-cp39-win32.whl", hash = "sha256:1aca1b97e0095b3a9a6c33eada3f661a4ed0d499067d121239b193e5ba3bb4f0"}, + {file = "Cython-3.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:16873d78be63bd38ffb759da7ab82814b36f56c769ee02b1d5859560e4c3ac3c"}, + {file = "Cython-3.0.8-py2.py3-none-any.whl", hash = "sha256:171b27051253d3f9108e9759e504ba59ff06e7f7ba944457f94deaf9c21bf0b6"}, + {file = "Cython-3.0.8.tar.gz", hash = "sha256:8333423d8fd5765e7cceea3a9985dd1e0a5dfeb2734629e1a2ed2d6233d39de6"}, ] [[package]] @@ -1027,43 +978,44 @@ tests = ["check-manifest (>=0.42)", "mock (>=1.3.0)", "pytest (==5.4.3)", "pytes [[package]] name = "distlib" -version = "0.3.7" +version = "0.3.8" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] [[package]] name = "dnspython" -version = "2.4.2" +version = "2.5.0" description = "DNS toolkit" optional = false -python-versions = ">=3.8,<4.0" +python-versions = ">=3.8" files = [ - {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, - {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, + {file = "dnspython-2.5.0-py3-none-any.whl", hash = "sha256:6facdf76b73c742ccf2d07add296f178e629da60be23ce4b0a9c927b1e02c3a6"}, + {file = "dnspython-2.5.0.tar.gz", hash = "sha256:a0034815a59ba9ae888946be7ccca8f7c157b286f8455b379c692efb51022a15"}, ] [package.extras] -dnssec = ["cryptography (>=2.6,<42.0)"] -doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=5.0.3)", "mypy (>=1.0.1)", "pylint (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0.0)", "sphinx (>=7.0.0)", "twine (>=4.0.0)", "wheel (>=0.41.0)"] +dnssec = ["cryptography (>=41)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.25.1)"] doq = ["aioquic (>=0.9.20)"] -idna = ["idna (>=2.1,<4.0)"] -trio = ["trio (>=0.14,<0.23)"] -wmi = ["wmi (>=1.5.1,<2.0.0)"] +idna = ["idna (>=2.1)"] +trio = ["trio (>=0.14)"] +wmi = ["wmi (>=1.5.1)"] [[package]] name = "docutils" -version = "0.18.1" +version = "0.20.1" description = "Docutils -- Python Documentation Utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" files = [ - {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, - {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] [[package]] @@ -1093,46 +1045,51 @@ files = [ [[package]] name = "filelock" -version = "3.12.3" +version = "3.13.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.12.3-py3-none-any.whl", hash = "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb"}, - {file = "filelock-3.12.3.tar.gz", hash = "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d"}, + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] [[package]] name = "fiona" -version = "1.9.4.post1" +version = "1.9.5" description = "Fiona reads and writes spatial data files" optional = false python-versions = ">=3.7" files = [ - {file = "Fiona-1.9.4.post1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:d6483a20037db2209c8e9a0c6f1e552f807d03c8f42ed0c865ab500945a37c4d"}, - {file = "Fiona-1.9.4.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dbe158947099a83ad16f9acd3a21f50ff01114c64e2de67805e382e6b6e0083a"}, - {file = "Fiona-1.9.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2c7b09eecee3bb074ef8aa518cd6ab30eb663c6fdd0eff3c88d454a9746eaa"}, - {file = "Fiona-1.9.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:1da8b954f6f222c3c782bc285586ea8dd9d7e55e1bc7861da9cd772bca671660"}, - {file = "Fiona-1.9.4.post1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c671d8832287cda397621d79c5a635d52e4631f33a8f0e6fdc732a79a93cb96c"}, - {file = "Fiona-1.9.4.post1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b633a2e550e083805c638d2ab8059c283ca112aaea8241e170c012d2ee0aa905"}, - {file = "Fiona-1.9.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1faa625d5202b8403471bbc9f9c96b1bf9099cfcb0ee02a80a3641d3d02383e"}, - {file = "Fiona-1.9.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:39baf11ff0e4318397e2b2197de427b4eebdc49d4a9a7c1366f8a7ed682978a4"}, - {file = "Fiona-1.9.4.post1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d93c993265f6378b23f47708c83bddb3377ca6814a1f0b5a0ae0bee9c8d72cf8"}, - {file = "Fiona-1.9.4.post1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:b0387cae39e27f338fd948b3b50b6e6ce198cc4cec257fc91660849697c69dc3"}, - {file = "Fiona-1.9.4.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:450561d308d3ce7c7e30294822b1de3f4f942033b703ddd4a91a7f7f5f506ca0"}, - {file = "Fiona-1.9.4.post1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:71b023ef5248ebfa5524e7a875033f7db3bbfaf634b1b5c1ae36958d1eb82083"}, - {file = "Fiona-1.9.4.post1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74511d3755695d75cea0f4ff6f5e0c6c5d5be8e0d46dafff124c6a219e99b1eb"}, - {file = "Fiona-1.9.4.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:285f3dd4f96aa0a3955ed469f0543375b20989731b2dddc85124453f11ac62bc"}, - {file = "Fiona-1.9.4.post1-cp38-cp38-win_amd64.whl", hash = "sha256:a670ea4262cb9140445bcfc97cbfd2f508a058be342f4a97e966b8ce7696601f"}, - {file = "Fiona-1.9.4.post1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:ea7c44c15b3a653452b9b3173181490b7afc5f153b0473c145c43c0fbf90448b"}, - {file = "Fiona-1.9.4.post1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7bfb1f49e0e53f6cd7ad64ae809d72646266b37a7b9881205977408b443a8d79"}, - {file = "Fiona-1.9.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a585002a6385cc8ab0f66ddf3caf18711f531901906abd011a67a0cc89ab7b0"}, - {file = "Fiona-1.9.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:f5da66b723a876142937e683431bbaa5c3d81bb2ed3ec98941271bc99b7f8cd0"}, - {file = "Fiona-1.9.4.post1.tar.gz", hash = "sha256:5679d3f7e0d513035eb72e59527bb90486859af4405755dfc739138633106120"}, + {file = "fiona-1.9.5-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:5f40a40529ecfca5294260316cf987a0420c77a2f0cf0849f529d1afbccd093e"}, + {file = "fiona-1.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:374efe749143ecb5cfdd79b585d83917d2bf8ecfbfc6953c819586b336ce9c63"}, + {file = "fiona-1.9.5-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:35dae4b0308eb44617cdc4461ceb91f891d944fdebbcba5479efe524ec5db8de"}, + {file = "fiona-1.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:5b4c6a3df53bee8f85bb46685562b21b43346be1fe96419f18f70fa1ab8c561c"}, + {file = "fiona-1.9.5-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:6ad04c1877b9fd742871b11965606c6a52f40706f56a48d66a87cc3073943828"}, + {file = "fiona-1.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9fb9a24a8046c724787719e20557141b33049466145fc3e665764ac7caf5748c"}, + {file = "fiona-1.9.5-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:d722d7f01a66f4ab6cd08d156df3fdb92f0669cf5f8708ddcb209352f416f241"}, + {file = "fiona-1.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:7ede8ddc798f3d447536080c6db9a5fb73733ad8bdb190cb65eed4e289dd4c50"}, + {file = "fiona-1.9.5-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:8b098054a27c12afac4f819f98cb4d4bf2db9853f70b0c588d7d97d26e128c39"}, + {file = "fiona-1.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d9f29e9bcbb33232ff7fa98b4a3c2234db910c1dc6c4147fc36c0b8b930f2e0"}, + {file = "fiona-1.9.5-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:f1af08da4ecea5036cb81c9131946be4404245d1b434b5b24fd3871a1d4030d9"}, + {file = "fiona-1.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:c521e1135c78dec0d7774303e5a1b4c62e0efb0e602bb8f167550ef95e0a2691"}, + {file = "fiona-1.9.5-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:fce4b1dd98810cabccdaa1828430c7402d283295c2ae31bea4f34188ea9e88d7"}, + {file = "fiona-1.9.5-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:3ea04ec2d8c57b5f81a31200fb352cb3242aa106fc3e328963f30ffbdf0ff7c8"}, + {file = "fiona-1.9.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4877cc745d9e82b12b3eafce3719db75759c27bd8a695521202135b36b58c2e7"}, + {file = "fiona-1.9.5-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:ac2c250f509ec19fad7959d75b531984776517ef3c1222d1cc5b4f962825880b"}, + {file = "fiona-1.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4df21906235928faad856c288cfea0298e9647f09c9a69a230535cbc8eadfa21"}, + {file = "fiona-1.9.5-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:81d502369493687746cb8d3cd77e5ada4447fb71d513721c9a1826e4fb32b23a"}, + {file = "fiona-1.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:ce3b29230ef70947ead4e701f3f82be81082b7f37fd4899009b1445cc8fc276a"}, + {file = "fiona-1.9.5-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:8b53ce8de773fcd5e2e102e833c8c58479edd8796a522f3d83ef9e08b62bfeea"}, + {file = "fiona-1.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bd2355e859a1cd24a3e485c6dc5003129f27a2051629def70036535ffa7e16a4"}, + {file = "fiona-1.9.5-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:9a2da52f865db1aff0eaf41cdd4c87a7c079b3996514e8e7a1ca38457309e825"}, + {file = "fiona-1.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:cfef6db5b779d463298b1113b50daa6c5b55f26f834dc9e37752116fa17277c1"}, + {file = "fiona-1.9.5.tar.gz", hash = "sha256:99e2604332caa7692855c2ae6ed91e1fffdf9b59449aa8032dd18e070e59a2f7"}, ] [package.dependencies] @@ -1141,6 +1098,7 @@ certifi = "*" click = ">=8.0,<9.0" click-plugins = ">=1.0" cligj = ">=0.5" +setuptools = "*" six = "*" [package.extras] @@ -1149,6 +1107,17 @@ calc = ["shapely"] s3 = ["boto3 (>=1.3.1)"] test = ["Fiona[s3]", "pytest (>=7)", "pytest-cov", "pytz"] +[[package]] +name = "flaky" +version = "3.7.0" +description = "Plugin for nose or pytest that automatically reruns flaky tests." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "flaky-3.7.0-py2.py3-none-any.whl", hash = "sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c"}, + {file = "flaky-3.7.0.tar.gz", hash = "sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d"}, +] + [[package]] name = "flatbuffers" version = "23.5.26" @@ -1162,51 +1131,59 @@ files = [ [[package]] name = "fonttools" -version = "4.42.1" +version = "4.47.2" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ed1a13a27f59d1fc1920394a7f596792e9d546c9ca5a044419dca70c37815d7c"}, - {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9b1ce7a45978b821a06d375b83763b27a3a5e8a2e4570b3065abad240a18760"}, - {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f720fa82a11c0f9042376fd509b5ed88dab7e3cd602eee63a1af08883b37342b"}, - {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db55cbaea02a20b49fefbd8e9d62bd481aaabe1f2301dabc575acc6b358874fa"}, - {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a35981d90feebeaef05e46e33e6b9e5b5e618504672ca9cd0ff96b171e4bfff"}, - {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:68a02bbe020dc22ee0540e040117535f06df9358106d3775e8817d826047f3fd"}, - {file = "fonttools-4.42.1-cp310-cp310-win32.whl", hash = "sha256:12a7c247d1b946829bfa2f331107a629ea77dc5391dfd34fdcd78efa61f354ca"}, - {file = "fonttools-4.42.1-cp310-cp310-win_amd64.whl", hash = "sha256:a398bdadb055f8de69f62b0fc70625f7cbdab436bbb31eef5816e28cab083ee8"}, - {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:689508b918332fb40ce117131633647731d098b1b10d092234aa959b4251add5"}, - {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e36344e48af3e3bde867a1ca54f97c308735dd8697005c2d24a86054a114a71"}, - {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7db825c8adee96fac0692e6e1ecd858cae9affb3b4812cdb9d934a898b29e"}, - {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:113337c2d29665839b7d90b39f99b3cac731f72a0eda9306165a305c7c31d341"}, - {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:37983b6bdab42c501202500a2be3a572f50d4efe3237e0686ee9d5f794d76b35"}, - {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6ed2662a3d9c832afa36405f8748c250be94ae5dfc5283d668308391f2102861"}, - {file = "fonttools-4.42.1-cp311-cp311-win32.whl", hash = "sha256:179737095eb98332a2744e8f12037b2977f22948cf23ff96656928923ddf560a"}, - {file = "fonttools-4.42.1-cp311-cp311-win_amd64.whl", hash = "sha256:f2b82f46917d8722e6b5eafeefb4fb585d23babd15d8246c664cd88a5bddd19c"}, - {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:62f481ac772fd68901573956231aea3e4b1ad87b9b1089a61613a91e2b50bb9b"}, - {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2f806990160d1ce42d287aa419df3ffc42dfefe60d473695fb048355fe0c6a0"}, - {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db372213d39fa33af667c2aa586a0c1235e88e9c850f5dd5c8e1f17515861868"}, - {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d18fc642fd0ac29236ff88ecfccff229ec0386090a839dd3f1162e9a7944a40"}, - {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8708b98c278012ad267ee8a7433baeb809948855e81922878118464b274c909d"}, - {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c95b0724a6deea2c8c5d3222191783ced0a2f09bd6d33f93e563f6f1a4b3b3a4"}, - {file = "fonttools-4.42.1-cp38-cp38-win32.whl", hash = "sha256:4aa79366e442dbca6e2c8595645a3a605d9eeabdb7a094d745ed6106816bef5d"}, - {file = "fonttools-4.42.1-cp38-cp38-win_amd64.whl", hash = "sha256:acb47f6f8680de24c1ab65ebde39dd035768e2a9b571a07c7b8da95f6c8815fd"}, - {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb289b7a815638a7613d46bcf324c9106804725b2bb8ad913c12b6958ffc4ec"}, - {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:53eb5091ddc8b1199330bb7b4a8a2e7995ad5d43376cadce84523d8223ef3136"}, - {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46a0ec8adbc6ff13494eb0c9c2e643b6f009ce7320cf640de106fb614e4d4360"}, - {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cc7d685b8eeca7ae69dc6416833fbfea61660684b7089bca666067cb2937dcf"}, - {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:be24fcb80493b2c94eae21df70017351851652a37de514de553435b256b2f249"}, - {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:515607ec756d7865f23070682622c49d922901943697871fc292277cf1e71967"}, - {file = "fonttools-4.42.1-cp39-cp39-win32.whl", hash = "sha256:0eb79a2da5eb6457a6f8ab904838454accc7d4cccdaff1fd2bd3a0679ea33d64"}, - {file = "fonttools-4.42.1-cp39-cp39-win_amd64.whl", hash = "sha256:7286aed4ea271df9eab8d7a9b29e507094b51397812f7ce051ecd77915a6e26b"}, - {file = "fonttools-4.42.1-py3-none-any.whl", hash = "sha256:9398f244e28e0596e2ee6024f808b06060109e33ed38dcc9bded452fd9bbb853"}, - {file = "fonttools-4.42.1.tar.gz", hash = "sha256:c391cd5af88aacaf41dd7cfb96eeedfad297b5899a39e12f4c2c3706d0a3329d"}, + {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, + {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, + {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, + {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, + {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, + {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, + {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, + {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, + {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, + {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, + {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, + {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, + {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, + {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, + {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, + {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, + {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, + {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, + {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, + {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, + {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, + {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, + {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, + {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, + {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, + {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, + {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, + {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] +interpolatable = ["munkres", "pycairo", "scipy"] lxml = ["lxml (>=4.0,<5)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] @@ -1214,115 +1191,137 @@ repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.0.0)"] +unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] name = "frozenlist" -version = "1.4.0" +version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] [[package]] name = "ft4222" -version = "1.8.1" +version = "1.10.0" description = "Python wrapper around libFT4222." optional = false python-versions = "*" files = [ - {file = "ft4222-1.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:32125b9462945db7b8881bba32e73d7202998572b2a8c27d738163ca4a1e5c2a"}, - {file = "ft4222-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:791cfca70aaf2570892a637d0389fddd88f28d1474cdae810778be45024ea10a"}, - {file = "ft4222-1.8.1-cp310-cp310-win32.whl", hash = "sha256:386b2c98cc95a889809fb509cf0144fd67889ad61d668f55d240300a1e52a9d0"}, - {file = "ft4222-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:e88011aa19afefeb5136bdb5af745a74d2a85981b927ee07b7925187d90e9aa2"}, - {file = "ft4222-1.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4cfe1c110e4546384dd9be635c010fa1c6a7f97d2f80b43c7cbda59fcad832cc"}, - {file = "ft4222-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:99068ada9b2ed785abb15a50ccd78ecc947c0a2b4982e6356c6e910ee2ad9958"}, - {file = "ft4222-1.8.1-cp311-cp311-win32.whl", hash = "sha256:387b0b7094094a52f069c00fadd58da2666570dc38c2e8b36cf2b4af56a6ab31"}, - {file = "ft4222-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:4d666d5b3435ece3db782970288fd7b52fb53964ad8cf07434d32c368103ae07"}, - {file = "ft4222-1.8.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8a21ef854ada66fbfba587f99c9db601f2643d5647bf7f4539928287cf2c566c"}, - {file = "ft4222-1.8.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4faf61ef28d7dc48ada862da079ec15470366ece48a1b79b451bb34a4385da9"}, - {file = "ft4222-1.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:87c080dc966ad666b0eb03fb06f2e0efd7abd67b1be37ce5424cd34881905aee"}, - {file = "ft4222-1.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:488212b83f5eb067b93fa1cefea5d707631ed6d09396af0074e6564733972c7e"}, - {file = "ft4222-1.8.1-cp37-cp37m-win32.whl", hash = "sha256:4c3e3aeb02376dae37d22b5a8a2453b94ee656bca0667a62086de62395c2f1af"}, - {file = "ft4222-1.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:04e7c7d0dc0d555598cc1e608fe1cc60945406e511a7ffe4a8e7059b33a6a683"}, - {file = "ft4222-1.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:fe076965d9ac110ceccfb4bad4ec73187402f5131e3f8444684755503f90db08"}, - {file = "ft4222-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:574bce65a12dc562582c6bd221e4779f9f0ac438bc37e81201e1390022bc4435"}, - {file = "ft4222-1.8.1-cp38-cp38-win32.whl", hash = "sha256:d6b78f6e6a6d16769d080373f6ec22cdceb411f23bf4dec366cc809d813e1d8c"}, - {file = "ft4222-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:7049d5726b0ff02425d7e4e88ebe77ea143cb3d249bbb6c8ff5110f0abb4d533"}, - {file = "ft4222-1.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a604b1a79dc203f8d619153255d154da425f811f64a1c322a173f1d3fbde924"}, - {file = "ft4222-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:653f3adc6938f0bca26363c513a80c4188c1811cac8e85e94b4b7c87f3801cd6"}, - {file = "ft4222-1.8.1-cp39-cp39-win32.whl", hash = "sha256:7f3c9ea9cc6dded3e8d10de33170236fa32ccf826afc283116eff47565ffe86d"}, - {file = "ft4222-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:db17d21d0d46e550bf65f50d952a20bf75e6d153de192d4027a70eb347f07026"}, - {file = "ft4222-1.8.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1d995115e8a94a092584ac9ec10d415eb6956fe275d1ef5e549e20dc578caf20"}, - {file = "ft4222-1.8.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ef88304a306f42644a04ca6c1abe4d24b69141659bc59db9f8df6be4b347d149"}, - {file = "ft4222-1.8.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:549bbe3a18a21f7585877fd3cbb14c46b45eb61b29c0b5039f1fc8655e7fbeca"}, - {file = "ft4222-1.8.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f4ceba4f7b778169c5b14028aeb1f4720295a9754f89222bd5b9a78e4c064b96"}, - {file = "ft4222-1.8.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:0c30500df95075877e8e29a58e0648ceb88571cfb33e244d7a51384e42caccac"}, - {file = "ft4222-1.8.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a2e9f22bea3683f171fc0da58ccbdd827a430349d8c26113077d4de79a454a87"}, - {file = "ft4222-1.8.1.tar.gz", hash = "sha256:6532ae1265e4b81416c51def060c2a3bf26494a83b644ec7db5cc273756e03c6"}, + {file = "ft4222-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd003a91ecaf20bc4d4ce8f0aea4a5ecfbc17a3840d41b0ce27410e027530cd0"}, + {file = "ft4222-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1cedabcd6c554e78f3479350153c5a347355ccc977ceeb24726edc37d3e7edb7"}, + {file = "ft4222-1.10.0-cp310-cp310-win32.whl", hash = "sha256:a039d4230926fa9b600baa12903843c53d6b238eb93e99ae68eeeb450d6f4bdc"}, + {file = "ft4222-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b05e499fd3f1baef225671f3afd25bf93e1f287fa17326c90c1f8db70abb3e89"}, + {file = "ft4222-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df9da4d5575d51511ba58e73ee434061dc709ce69491656ec109d995ce304167"}, + {file = "ft4222-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20f2cb89e63ea755d69a4d41c2dcba94d2f720b6e736ea51bdf681f1e809763c"}, + {file = "ft4222-1.10.0-cp311-cp311-win32.whl", hash = "sha256:806d4117d0814c390c7f280345aa99168ec989ca49b20259ce593ea79bcd246f"}, + {file = "ft4222-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:ad626507e9b1520f2f3b6f98ddca0d257c93b844824a1ab7cbb58759b0fbca84"}, + {file = "ft4222-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ecaae4e5ec3bedcdbe04a5792bf08119040669cf58c02df947395e6a96bd18c"}, + {file = "ft4222-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8c2655fe7192eb80ef25ab750123139f591e0f079fe2a5e6f31b7cd6f015a9f"}, + {file = "ft4222-1.10.0-cp312-cp312-win32.whl", hash = "sha256:fe668caa43bcacfbf3287cff8b4b11bb586a71d4722307e574f60180bb4a351e"}, + {file = "ft4222-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:4d7a49febc2b96ebed4b843262ab1f00843d158d6f4877c8ee19219f1c41f0da"}, + {file = "ft4222-1.10.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18a6f99e31c767b6ccb7e2f0e7f6cc51d15c9b685e2b81fd12ab08cac0924289"}, + {file = "ft4222-1.10.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83efcb50649a7ab4c7e045467357029f16ef0be064d46ffe7ea1e06eb9ad85f8"}, + {file = "ft4222-1.10.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e051c89cb45f964640e355506efa74b41c424e9ea9046367534180075be0a95c"}, + {file = "ft4222-1.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cae991a917602635238c144395bb59a516b7684b6599da251a88cfe37a5ed8f"}, + {file = "ft4222-1.10.0-cp37-cp37m-win32.whl", hash = "sha256:713ed85fbb8f11755ae7ed932302192a34d2aa8834ffa45a7c345d3a5ba8f67b"}, + {file = "ft4222-1.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f2458e6c62d251b6219cfa0fbcfb9ccfa22854c5d7463b862f11b268019ec66"}, + {file = "ft4222-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db4b489cd434b92748e45695c1313716db4e00bdda4f70b6bcf99cdc042a34d8"}, + {file = "ft4222-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b0bd0632063b0e4bb2852ccde3fb95252ea7f0a0bfd3e4c3ee677f4ec63c2520"}, + {file = "ft4222-1.10.0-cp38-cp38-win32.whl", hash = "sha256:057c88eaa2db14a05163b90a7ba2938c0aa6e3870fec31c70051fb791cfbbc22"}, + {file = "ft4222-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:648a739bb5c0ca53b5cb0698e0ebb54ddaea090878a02cbe9039b3d80cf818ba"}, + {file = "ft4222-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88170a0aaa321ae8c974a664b2316fab00f86dd8249ff5927ea4d58a2ed7fa23"}, + {file = "ft4222-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:69fa55d8b5bc7da5a20254d480d4764dbcaa1ca74cd2d10bbc0ce39d39891f2a"}, + {file = "ft4222-1.10.0-cp39-cp39-win32.whl", hash = "sha256:9eb40e86fd43ab8d12b33d092369419e275292a6d57f1ef7de30e63cd8dc9bd5"}, + {file = "ft4222-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:875478f2c8c0fa128037c389969375ede546dde8cf7a5ae796421832aa6dd634"}, + {file = "ft4222-1.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:834b9e549d66f3cc0bbe75983b32e756258523b70363bb67970a7be21c9e3d8f"}, + {file = "ft4222-1.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7af52e4d61e2bcaa10b802e6f1af29823da12a27f520c799823490e6fd9ebb19"}, + {file = "ft4222-1.10.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca8c5aff74e213d8b658e7cdd8df3012e55023a2d379b5074628f6bb8947359a"}, + {file = "ft4222-1.10.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:755a70ab2c5d3fd94030e51fd82c332bc2463c6c455adf093d12e2f3803ea207"}, + {file = "ft4222-1.10.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:035ea7fc9ad627b44be57c31e87bc8d445ebd7cf6ac991d750fedc999683d64e"}, + {file = "ft4222-1.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2df65d174200c1451f5646a109e683aada9d7a076bf5f7ce682145d10725445a"}, + {file = "ft4222-1.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99ef3c412017a85ef9f90d8fc884ba66dae71e85433c8890da6aec38eb0288ab"}, + {file = "ft4222-1.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d00b36bdac3960c377f3a625fc352eca20e36825ddff178feaae97c2d9a8846c"}, + {file = "ft4222-1.10.0.tar.gz", hash = "sha256:74eab32dfc5c012d11952c8645b72157f8828685972669ef3c22025491d96001"}, ] [[package]] @@ -1341,21 +1340,21 @@ rewrite = ["tokenize-rt (>=3)"] [[package]] name = "geopandas" -version = "0.13.2" +version = "0.14.2" description = "Geographic pandas extensions" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "geopandas-0.13.2-py3-none-any.whl", hash = "sha256:101cfd0de54bcf9e287a55b5ea17ebe0db53a5e25a28bacf100143d0507cabd9"}, - {file = "geopandas-0.13.2.tar.gz", hash = "sha256:e5b56d9c20800c77bcc0c914db3f27447a37b23b2cd892be543f5001a694a968"}, + {file = "geopandas-0.14.2-py3-none-any.whl", hash = "sha256:0efa61235a68862c1c6be89fc3707cdeba67667d5676bb19e24f3c57a8c2f723"}, + {file = "geopandas-0.14.2.tar.gz", hash = "sha256:6e71d57b8376f9fdc9f1c3aa3170e7e420e91778de854f51013ae66fd371ccdb"}, ] [package.dependencies] -fiona = ">=1.8.19" +fiona = ">=1.8.21" packaging = "*" -pandas = ">=1.1.0" -pyproj = ">=3.0.1" -shapely = ">=1.7.1" +pandas = ">=1.4.0" +pyproj = ">=3.3.0" +shapely = ">=1.8.0" [[package]] name = "google-crc32c" @@ -1520,37 +1519,6 @@ all = ["flake8", "numpy", "pylint", "pytest", "pytest-cov"] numpy = ["numpy"] test = ["flake8", "pylint", "pytest", "pytest-cov"] -[[package]] -name = "hatanaka" -version = "2.4.0" -description = "Effortlessly compress / decompress any RINEX file" -optional = false -python-versions = ">=3.6" -files = [ - {file = "hatanaka-2.4.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:ef594d63473782fac46df5b0c92a59211a3efea1d47c1a964244a0abffc9f3f6"}, - {file = "hatanaka-2.4.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:8fda4aa56f27313de75a806a2f5aa83ed5bb2dc7561bebab856a774d06cf1ee7"}, - {file = "hatanaka-2.4.0-py3-none-win_amd64.whl", hash = "sha256:5a0624f6812b13abb4c996398a60338566885c1786841c4c04de9b1b91da28d2"}, - {file = "hatanaka-2.4.0.tar.gz", hash = "sha256:c22970b99169bddaf22e5239672e856a6bc9602c435f8793d26ad49619a70a99"}, -] - -[package.dependencies] -importlib-resources = "*" -ncompress = "*" - -[package.extras] -dev = ["pytest"] -tests = ["pytest"] - -[[package]] -name = "hexdump" -version = "3.3" -description = "dump binary data to hex format and restore from there" -optional = false -python-versions = "*" -files = [ - {file = "hexdump-3.3.zip", hash = "sha256:d781a43b0c16ace3f9366aade73e8ad3a7bd5137d58f0b45ab2d3f54876f20db"}, -] - [[package]] name = "humanfriendly" version = "10.0" @@ -1564,13 +1532,13 @@ files = [ [[package]] name = "hypothesis" -version = "6.46.7" +version = "6.47.5" description = "A library for property-based testing" optional = false python-versions = ">=3.7" files = [ - {file = "hypothesis-6.46.7-py3-none-any.whl", hash = "sha256:2696cdb9005946bf1d2b215cc91d3fc01625e3342eb8743ddd04b667b2f1882b"}, - {file = "hypothesis-6.46.7.tar.gz", hash = "sha256:967009fa561b3a3f8363a73d71923357271c37dc7fa27b30c2d21a1b6092b240"}, + {file = "hypothesis-6.47.5-py3-none-any.whl", hash = "sha256:87049b781ee11ec1c7948565b889ab02e428a1e32d427ab4de8fdb3649242d06"}, + {file = "hypothesis-6.47.5.tar.gz", hash = "sha256:e0c1e253fc97e7ecdb9e2bbff2cf815d8739e0d1d3d093d67c3af5bb6a7211b0"}, ] [package.dependencies] @@ -1595,13 +1563,13 @@ zoneinfo = ["backports.zoneinfo (>=0.2.1)", "tzdata (>=2022.1)"] [[package]] name = "identify" -version = "2.5.28" +version = "2.5.33" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.28-py2.py3-none-any.whl", hash = "sha256:87816de144bf46d161bd5b3e8f5596b16cade3b80be537087334b26bc5c177f3"}, - {file = "identify-2.5.28.tar.gz", hash = "sha256:94bb59643083ebd60dc996d043497479ee554381fbc5307763915cda49b0e78f"}, + {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, + {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, ] [package.extras] @@ -1609,13 +1577,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] @@ -1642,38 +1610,23 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.0.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] -[[package]] -name = "importlib-resources" -version = "6.0.1" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - [[package]] name = "iniconfig" version = "2.0.0" @@ -1696,16 +1649,6 @@ files = [ {file = "inputs-0.5.tar.gz", hash = "sha256:a31d5b96a3525f1232f326be9e7ce8ccaf873c6b1fb84d9f3c9bc3d79b23eae4"}, ] -[[package]] -name = "ioctl-opt" -version = "1.3" -description = "Functions to compute fnctl.ioctl's opt argument" -optional = false -python-versions = "*" -files = [ - {file = "ioctl-opt-1.3.tar.gz", hash = "sha256:5ed4f9a80d2e02e152a43d3648d7ed8821a0aac5ea88ecc5fcc14460ff7cf2f9"}, -] - [[package]] name = "isodate" version = "0.6.1" @@ -1740,13 +1683,13 @@ testing = ["pytest (==7.1.3)"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -1881,106 +1824,105 @@ files = [ [[package]] name = "libusb1" -version = "3.0.0" +version = "3.1.0" description = "Pure-python wrapper for libusb-1.0" optional = false python-versions = "*" files = [ - {file = "libusb1-3.0.0-py3-none-any.whl", hash = "sha256:0e652b04cbe85ec8e74f9ee82b49f861fb14b5320ae51399387ad2601ccc0500"}, - {file = "libusb1-3.0.0-py3-none-win32.whl", hash = "sha256:083f75e5d15cb5e2159e64c308c5317284eae926a820d6dce53a9505d18be3b2"}, - {file = "libusb1-3.0.0-py3-none-win_amd64.whl", hash = "sha256:6f6bb010632ada35c661d17a65e135077beef0fbb2434d5ffdb3a4a911fd9490"}, - {file = "libusb1-3.0.0.tar.gz", hash = "sha256:5792a9defee40f15d330a40d9b1800545c32e47ba7fc66b6f28f133c9fcc8538"}, + {file = "libusb1-3.1.0-py3-none-any.whl", hash = "sha256:9d9f16e2c199cab91f48ead585d3f5ec7e8e4be428a25ddfed22abf786fa9b3a"}, + {file = "libusb1-3.1.0-py3-none-win32.whl", hash = "sha256:bc7874302565721f443a27d8182fcc7152e5b560523f12f1377b130f473e4a0c"}, + {file = "libusb1-3.1.0-py3-none-win_amd64.whl", hash = "sha256:77a06ecfb3d002d7c2ce369e28d0138b292fe8db8a3d102b73fda231a716dd35"}, + {file = "libusb1-3.1.0.tar.gz", hash = "sha256:4ee9b0a55f8bd0b3ea7017ae919a6c1f439af742c4a4b04543c5fd7af89b828c"}, ] [[package]] name = "lru-dict" -version = "1.2.0" +version = "1.3.0" description = "An Dict like LRU container." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "lru-dict-1.2.0.tar.gz", hash = "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7"}, - {file = "lru_dict-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641"}, - {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604d07c7604b20b3130405d137cae61579578b0e8377daae4125098feebcb970"}, - {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:203b3e78d03d88f491fa134f85a42919020686b6e6f2d09759b2f5517260c651"}, - {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:020b93870f8c7195774cbd94f033b96c14f51c57537969965c3af300331724fe"}, - {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1184d91cfebd5d1e659d47f17a60185bbf621635ca56dcdc46c6a1745d25df5c"}, - {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fc42882b554a86e564e0b662da47b8a4b32fa966920bd165e27bb8079a323bc1"}, - {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:18ee88ada65bd2ffd483023be0fa1c0a6a051ef666d1cd89e921dcce134149f2"}, - {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:756230c22257597b7557eaef7f90484c489e9ba78e5bb6ab5a5bcfb6b03cb075"}, - {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c4da599af36618881748b5db457d937955bb2b4800db891647d46767d636c408"}, - {file = "lru_dict-1.2.0-cp310-cp310-win32.whl", hash = "sha256:35a142a7d1a4fd5d5799cc4f8ab2fff50a598d8cee1d1c611f50722b3e27874f"}, - {file = "lru_dict-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:6da5b8099766c4da3bf1ed6e7d7f5eff1681aff6b5987d1258a13bd2ed54f0c9"}, - {file = "lru_dict-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b20b7c9beb481e92e07368ebfaa363ed7ef61e65ffe6e0edbdbaceb33e134124"}, - {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22147367b296be31cc858bf167c448af02435cac44806b228c9be8117f1bfce4"}, - {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34a3091abeb95e707f381a8b5b7dc8e4ee016316c659c49b726857b0d6d1bd7a"}, - {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:877801a20f05c467126b55338a4e9fa30e2a141eb7b0b740794571b7d619ee11"}, - {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d3336e901acec897bcd318c42c2b93d5f1d038e67688f497045fc6bad2c0be7"}, - {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8dafc481d2defb381f19b22cc51837e8a42631e98e34b9e0892245cc96593deb"}, - {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:87bbad3f5c3de8897b8c1263a9af73bbb6469fb90e7b57225dad89b8ef62cd8d"}, - {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:25f9e0bc2fe8f41c2711ccefd2871f8a5f50a39e6293b68c3dec576112937aad"}, - {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ae301c282a499dc1968dd633cfef8771dd84228ae9d40002a3ea990e4ff0c469"}, - {file = "lru_dict-1.2.0-cp311-cp311-win32.whl", hash = "sha256:c9617583173a29048e11397f165501edc5ae223504a404b2532a212a71ecc9ed"}, - {file = "lru_dict-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6b7a031e47421d4b7aa626b8c91c180a9f037f89e5d0a71c4bb7afcf4036c774"}, - {file = "lru_dict-1.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ea2ac3f7a7a2f32f194c84d82a034e66780057fd908b421becd2f173504d040e"}, - {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd46c94966f631a81ffe33eee928db58e9fbee15baba5923d284aeadc0e0fa76"}, - {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:086ce993414f0b28530ded7e004c77dc57c5748fa6da488602aa6e7f79e6210e"}, - {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df25a426446197488a6702954dcc1de511deee20c9db730499a2aa83fddf0df1"}, - {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c53b12b89bd7a6c79f0536ff0d0a84fdf4ab5f6252d94b24b9b753bd9ada2ddf"}, - {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f9484016e6765bd295708cccc9def49f708ce07ac003808f69efa386633affb9"}, - {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d0f7ec902a0097ac39f1922c89be9eaccf00eb87751e28915320b4f72912d057"}, - {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:981ef3edc82da38d39eb60eae225b88a538d47b90cce2e5808846fd2cf64384b"}, - {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e25b2e90a032dc248213af7f3f3e975e1934b204f3b16aeeaeaff27a3b65e128"}, - {file = "lru_dict-1.2.0-cp36-cp36m-win32.whl", hash = "sha256:59f3df78e94e07959f17764e7fa7ca6b54e9296953d2626a112eab08e1beb2db"}, - {file = "lru_dict-1.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:de24b47159e07833aeab517d9cb1c3c5c2d6445cc378b1c2f1d8d15fb4841d63"}, - {file = "lru_dict-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d0dd4cd58220351233002f910e35cc01d30337696b55c6578f71318b137770f9"}, - {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a87bdc291718bbdf9ea4be12ae7af26cbf0706fa62c2ac332748e3116c5510a7"}, - {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05fb8744f91f58479cbe07ed80ada6696ec7df21ea1740891d4107a8dd99a970"}, - {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00f6e8a3fc91481b40395316a14c94daa0f0a5de62e7e01a7d589f8d29224052"}, - {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b172fce0a0ffc0fa6d282c14256d5a68b5db1e64719c2915e69084c4b6bf555"}, - {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e707d93bae8f0a14e6df1ae8b0f076532b35f00e691995f33132d806a88e5c18"}, - {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b9ec7a4a0d6b8297102aa56758434fb1fca276a82ed7362e37817407185c3abb"}, - {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f404dcc8172da1f28da9b1f0087009578e608a4899b96d244925c4f463201f2a"}, - {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1171ad3bff32aa8086778be4a3bdff595cc2692e78685bcce9cb06b96b22dcc2"}, - {file = "lru_dict-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:0c316dfa3897fabaa1fe08aae89352a3b109e5f88b25529bc01e98ac029bf878"}, - {file = "lru_dict-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:5919dd04446bc1ee8d6ecda2187deeebfff5903538ae71083e069bc678599446"}, - {file = "lru_dict-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbf36c5a220a85187cacc1fcb7dd87070e04b5fc28df7a43f6842f7c8224a388"}, - {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712e71b64da181e1c0a2eaa76cd860265980cd15cb0e0498602b8aa35d5db9f8"}, - {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f54908bf91280a9b8fa6a8c8f3c2f65850ce6acae2852bbe292391628ebca42f"}, - {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3838e33710935da2ade1dd404a8b936d571e29268a70ff4ca5ba758abb3850df"}, - {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5d5a5f976b39af73324f2b793862859902ccb9542621856d51a5993064f25e4"}, - {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8bda3a9afd241ee0181661decaae25e5336ce513ac268ab57da737eacaa7871f"}, - {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd2cd1b998ea4c8c1dad829fc4fa88aeed4dee555b5e03c132fc618e6123f168"}, - {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b55753ee23028ba8644fd22e50de7b8f85fa60b562a0fafaad788701d6131ff8"}, - {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e51fa6a203fa91d415f3b2900e5748ec8e06ad75777c98cc3aeb3983ca416d7"}, - {file = "lru_dict-1.2.0-cp38-cp38-win32.whl", hash = "sha256:cd6806313606559e6c7adfa0dbeb30fc5ab625f00958c3d93f84831e7a32b71e"}, - {file = "lru_dict-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d90a70c53b0566084447c3ef9374cc5a9be886e867b36f89495f211baabd322"}, - {file = "lru_dict-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3ea7571b6bf2090a85ff037e6593bbafe1a8598d5c3b4560eb56187bcccb4dc"}, - {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:287c2115a59c1c9ed0d5d8ae7671e594b1206c36ea9df2fca6b17b86c468ff99"}, - {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5ccfd2291c93746a286c87c3f895165b697399969d24c54804ec3ec559d4e43"}, - {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b710f0f4d7ec4f9fa89dfde7002f80bcd77de8024017e70706b0911ea086e2ef"}, - {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5345bf50e127bd2767e9fd42393635bbc0146eac01f6baf6ef12c332d1a6a329"}, - {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:291d13f85224551913a78fe695cde04cbca9dcb1d84c540167c443eb913603c9"}, - {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d5bb41bc74b321789803d45b124fc2145c1b3353b4ad43296d9d1d242574969b"}, - {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0facf49b053bf4926d92d8d5a46fe07eecd2af0441add0182c7432d53d6da667"}, - {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:987b73a06bcf5a95d7dc296241c6b1f9bc6cda42586948c9dabf386dc2bef1cd"}, - {file = "lru_dict-1.2.0-cp39-cp39-win32.whl", hash = "sha256:231d7608f029dda42f9610e5723614a35b1fff035a8060cf7d2be19f1711ace8"}, - {file = "lru_dict-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:71da89e134747e20ed5b8ad5b4ee93fc5b31022c2b71e8176e73c5a44699061b"}, - {file = "lru_dict-1.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:21b3090928c7b6cec509e755cc3ab742154b33660a9b433923bd12c37c448e3e"}, - {file = "lru_dict-1.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaecd7085212d0aa4cd855f38b9d61803d6509731138bf798a9594745953245b"}, - {file = "lru_dict-1.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead83ac59a29d6439ddff46e205ce32f8b7f71a6bd8062347f77e232825e3d0a"}, - {file = "lru_dict-1.2.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b6b2a30188586fe71358f0f33e4bac882d33f5e5019b26f084363f42f986f"}, - {file = "lru_dict-1.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b30122e098c80e36d0117810d46459a46313421ce3298709170b687dc1240b02"}, - {file = "lru_dict-1.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f010cfad3ab10676e44dc72a813c968cd586f37b466d27cde73d1f7f1ba158c2"}, - {file = "lru_dict-1.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20f5f411f7751ad9a2c02e80287cedf69ae032edd321fe696e310d32dd30a1f8"}, - {file = "lru_dict-1.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afdadd73304c9befaed02eb42f5f09fdc16288de0a08b32b8080f0f0f6350aa6"}, - {file = "lru_dict-1.2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7ab0c10c4fa99dc9e26b04e6b62ac32d2bcaea3aad9b81ec8ce9a7aa32b7b1b"}, - {file = "lru_dict-1.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:edad398d5d402c43d2adada390dd83c74e46e020945ff4df801166047013617e"}, - {file = "lru_dict-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:91d577a11b84387013815b1ad0bb6e604558d646003b44c92b3ddf886ad0f879"}, - {file = "lru_dict-1.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb12f19cdf9c4f2d9aa259562e19b188ff34afab28dd9509ff32a3f1c2c29326"}, - {file = "lru_dict-1.2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e4c85aa8844bdca3c8abac3b7f78da1531c74e9f8b3e4890c6e6d86a5a3f6c0"}, - {file = "lru_dict-1.2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c6acbd097b15bead4de8e83e8a1030bb4d8257723669097eac643a301a952f0"}, - {file = "lru_dict-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b6613daa851745dd22b860651de930275be9d3e9373283a2164992abacb75b62"}, + {file = "lru-dict-1.3.0.tar.gz", hash = "sha256:54fd1966d6bd1fcde781596cb86068214edeebff1db13a2cea11079e3fd07b6b"}, + {file = "lru_dict-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4073333894db9840f066226d50e6f914a2240711c87d60885d8c940b69a6673f"}, + {file = "lru_dict-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0ad6361e4dd63b47b2fc8eab344198f37387e1da3dcfacfee19bafac3ec9f1eb"}, + {file = "lru_dict-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c637ab54b8cd9802fe19b260261e38820d748adf7606e34045d3c799b6dde813"}, + {file = "lru_dict-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fce5f95489ca1fc158cc9fe0f4866db9cec82c2be0470926a9080570392beaf"}, + {file = "lru_dict-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2bf2e24cf5f19c3ff69bf639306e83dced273e6fa775b04e190d7f5cd16f794"}, + {file = "lru_dict-1.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e90059f7701bef3c4da073d6e0434a9c7dc551d5adce30e6b99ef86b186f4b4a"}, + {file = "lru_dict-1.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ecb7ae557239c64077e9b26a142eb88e63cddb104111a5122de7bebbbd00098"}, + {file = "lru_dict-1.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6af36166d22dba851e06a13e35bbf33845d3dd88872e6aebbc8e3e7db70f4682"}, + {file = "lru_dict-1.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ee38d420c77eed548df47b7d74b5169a98e71c9e975596e31ab808e76d11f09"}, + {file = "lru_dict-1.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0e1845024c31e6ff246c9eb5e6f6f1a8bb564c06f8a7d6d031220044c081090b"}, + {file = "lru_dict-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3ca5474b1649555d014be1104e5558a92497509021a5ba5ea6e9b492303eb66b"}, + {file = "lru_dict-1.3.0-cp310-cp310-win32.whl", hash = "sha256:ebb03a9bd50c2ed86d4f72a54e0aae156d35a14075485b2127c4b01a3f4a63fa"}, + {file = "lru_dict-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:04cda617f4e4c27009005d0a8185ef02829b14b776d2791f5c994cc9d668bc24"}, + {file = "lru_dict-1.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:20c595764695d20bdc3ab9b582e0cc99814da183544afb83783a36d6741a0dac"}, + {file = "lru_dict-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d9b30a8f50c3fa72a494eca6be5810a1b5c89e4f0fda89374f0d1c5ad8d37d51"}, + {file = "lru_dict-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9710737584650a4251b9a566cbb1a86f83437adb209c9ba43a4e756d12faf0d7"}, + {file = "lru_dict-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b84c321ae34f2f40aae80e18b6fa08b31c90095792ab64bb99d2e385143effaa"}, + {file = "lru_dict-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eed24272b4121b7c22f234daed99899817d81d671b3ed030c876ac88bc9dc890"}, + {file = "lru_dict-1.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd13af06dab7c6ee92284fd02ed9a5613a07d5c1b41948dc8886e7207f86dfd"}, + {file = "lru_dict-1.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1efc59bfba6aac33684d87b9e02813b0e2445b2f1c444dae2a0b396ad0ed60c"}, + {file = "lru_dict-1.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cfaf75ac574447afcf8ad998789071af11d2bcf6f947643231f692948839bd98"}, + {file = "lru_dict-1.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c95f8751e2abd6f778da0399c8e0239321d560dbc58cb063827123137d213242"}, + {file = "lru_dict-1.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:abd0c284b26b5c4ee806ca4f33ab5e16b4bf4d5ec9e093e75a6f6287acdde78e"}, + {file = "lru_dict-1.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a47740652b25900ac5ce52667b2eade28d8b5fdca0ccd3323459df710e8210a"}, + {file = "lru_dict-1.3.0-cp311-cp311-win32.whl", hash = "sha256:a690c23fc353681ed8042d9fe8f48f0fb79a57b9a45daea2f0be1eef8a1a4aa4"}, + {file = "lru_dict-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:efd3f4e0385d18f20f7ea6b08af2574c1bfaa5cb590102ef1bee781bdfba84bc"}, + {file = "lru_dict-1.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c279068f68af3b46a5d649855e1fb87f5705fe1f744a529d82b2885c0e1fc69d"}, + {file = "lru_dict-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:350e2233cfee9f326a0d7a08e309372d87186565e43a691b120006285a0ac549"}, + {file = "lru_dict-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4eafb188a84483b3231259bf19030859f070321b00326dcb8e8c6cbf7db4b12f"}, + {file = "lru_dict-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73593791047e36b37fdc0b67b76aeed439fcea80959c7d46201240f9ec3b2563"}, + {file = "lru_dict-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1958cb70b9542773d6241974646e5410e41ef32e5c9e437d44040d59bd80daf2"}, + {file = "lru_dict-1.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc1cd3ed2cee78a47f11f3b70be053903bda197a873fd146e25c60c8e5a32cd6"}, + {file = "lru_dict-1.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82eb230d48eaebd6977a92ddaa6d788f14cf4f4bcf5bbffa4ddfd60d051aa9d4"}, + {file = "lru_dict-1.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5ad659cbc349d0c9ba8e536b5f40f96a70c360f43323c29f4257f340d891531c"}, + {file = "lru_dict-1.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ba490b8972531d153ac0d4e421f60d793d71a2f4adbe2f7740b3c55dce0a12f1"}, + {file = "lru_dict-1.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:c0131351b8a7226c69f1eba5814cbc9d1d8daaf0fdec1ae3f30508e3de5262d4"}, + {file = "lru_dict-1.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0e88dba16695f17f41701269fa046197a3fd7b34a8dba744c8749303ddaa18df"}, + {file = "lru_dict-1.3.0-cp312-cp312-win32.whl", hash = "sha256:6ffaf595e625b388babc8e7d79b40f26c7485f61f16efe76764e32dce9ea17fc"}, + {file = "lru_dict-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf9da32ef2582434842ab6ba6e67290debfae72771255a8e8ab16f3e006de0aa"}, + {file = "lru_dict-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c265f16c936a8ff3bb4b8a4bda0be94c15ec28b63e99fdb1439c1ffe4cd437db"}, + {file = "lru_dict-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:784ca9d3b0730b3ec199c0a58f66264c63dd5d438119c739c349a6a9be8e5f6e"}, + {file = "lru_dict-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e13b2f58f647178470adaa14603bb64cc02eeed32601772ccea30e198252883c"}, + {file = "lru_dict-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ffbce5c2e80f57937679553c8f27e61ec327c962bf7ea0b15f1d74277fd5363"}, + {file = "lru_dict-1.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7969cb034b3ccc707aff877c73c225c32d7e2a7981baa8f92f5dd4d468fe8c33"}, + {file = "lru_dict-1.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca9ab676609cce85dd65d91c275e47da676d13d77faa72de286fbea30fbaa596"}, + {file = "lru_dict-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27c078b5d75989952acbf9b77e14c3dadc468a4aafe85174d548afbc5efc38b"}, + {file = "lru_dict-1.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6123aefe97762ad74215d05320a7f389f196f0594c8813534284d4eafeca1a96"}, + {file = "lru_dict-1.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cd869cadba9a63e1e7fe2dced4a5747d735135b86016b0a63e8c9e324ab629ac"}, + {file = "lru_dict-1.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:40a8daddc29c7edb09dfe44292cf111f1e93a8344349778721d430d336b50505"}, + {file = "lru_dict-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a03170e4152836987a88dcebde61aaeb73ab7099a00bb86509d45b3fe424230"}, + {file = "lru_dict-1.3.0-cp38-cp38-win32.whl", hash = "sha256:3b4f121afe10f5a82b8e317626eb1e1c325b3f104af56c9756064cd833b1950b"}, + {file = "lru_dict-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:1470f5828c7410e16c24b5150eb649647986e78924816e6fb0264049dea14a2b"}, + {file = "lru_dict-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a3c9f746a9917e784fffcedeac4c8c47a3dbd90cbe13b69e9140182ad97ce4b7"}, + {file = "lru_dict-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2789296819525a1f3204072dfcf3df6db8bcf69a8fc740ffd3de43a684ea7002"}, + {file = "lru_dict-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:170b66d29945391460351588a7bd8210a95407ae82efe0b855e945398a1d24ea"}, + {file = "lru_dict-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:774ca88501a9effe8797c3db5a6685cf20978c9cb0fe836b6813cfe1ca60d8c9"}, + {file = "lru_dict-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:df2e119c6ae412d2fd641a55f8a1e2e51f45a3de3449c18b1b86c319ab79e0c4"}, + {file = "lru_dict-1.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28aa1ea42a7e48174bf513dc2416fea7511a547961e678dc6f5670ca987c18cb"}, + {file = "lru_dict-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9537e1cee6fa582cb68f2fb9ce82d51faf2ccc0a638b275d033fdcb1478eb80b"}, + {file = "lru_dict-1.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:64545fca797fe2c68c5168efb5f976c6e1459e058cab02445207a079180a3557"}, + {file = "lru_dict-1.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a193a14c66cfc0c259d05dddc5e566a4b09e8f1765e941503d065008feebea9d"}, + {file = "lru_dict-1.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:3cb1de0ce4137b060abaafed8474cc0ebd12cedd88aaa7f7b3ebb1ddfba86ae0"}, + {file = "lru_dict-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8551ccab1349d4bebedab333dfc8693c74ff728f4b565fe15a6bf7d296bd7ea9"}, + {file = "lru_dict-1.3.0-cp39-cp39-win32.whl", hash = "sha256:6cb0be5e79c3f34d69b90d8559f0221e374b974b809a22377122c4b1a610ff67"}, + {file = "lru_dict-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9f725f2a0bdf1c18735372d5807af4ea3b77888208590394d4660e3d07971f21"}, + {file = "lru_dict-1.3.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f8f7824db5a64581180ab9d09842e6dd9fcdc46aac9cb592a0807cd37ea55680"}, + {file = "lru_dict-1.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acd04b7e7b0c0c192d738df9c317093335e7282c64c9d1bb6b7ebb54674b4e24"}, + {file = "lru_dict-1.3.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5c20f236f27551e3f0adbf1a987673fb1e9c38d6d284502cd38f5a3845ef681"}, + {file = "lru_dict-1.3.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca3703ff03b03a1848c563bc2663d0ad813c1cd42c4d9cf75b623716d4415d9a"}, + {file = "lru_dict-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a9fb71ba262c6058a0017ce83d343370d0a0dbe2ae62c2eef38241ec13219330"}, + {file = "lru_dict-1.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f5b88a7c39e307739a3701194993455968fcffe437d1facab93546b1b8a334c1"}, + {file = "lru_dict-1.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2682bfca24656fb7a643621520d57b7fe684ed5fa7be008704c1235d38e16a32"}, + {file = "lru_dict-1.3.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96fc87ddf569181827458ec5ad8fa446c4690cffacda66667de780f9fcefd44d"}, + {file = "lru_dict-1.3.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcec98e2c7da7631f0811730303abc4bdfe70d013f7a11e174a2ccd5612a7c59"}, + {file = "lru_dict-1.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6bba2863060caeaedd8386b0c8ee9a7ce4d57a7cb80ceeddf440b4eff2d013ba"}, + {file = "lru_dict-1.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c497fb60279f1e1d7dfbe150b1b069eaa43f7e172dab03f206282f4994676c5"}, + {file = "lru_dict-1.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d9509d817a47597988615c1a322580c10100acad10c98dfcf3abb41e0e5877f"}, + {file = "lru_dict-1.3.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0213ab4e3d9a8d386c18e485ad7b14b615cb6f05df6ef44fb2a0746c6ea9278b"}, + {file = "lru_dict-1.3.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b50fbd69cd3287196796ab4d50e4cc741eb5b5a01f89d8e930df08da3010c385"}, + {file = "lru_dict-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5247d1f011f92666010942434020ddc5a60951fefd5d12a594f0e5d9f43e3b3b"}, ] [package.extras] @@ -1988,110 +1930,96 @@ test = ["pytest"] [[package]] name = "lxml" -version = "4.9.3" +version = "5.1.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, + {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, + {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, + {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, + {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, + {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, + {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, + {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, + {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, + {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, + {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, + {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, + {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, + {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, + {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, + {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, + {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, + {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] +source = ["Cython (>=3.0.7)"] [[package]] name = "markdown-it-py" @@ -2119,140 +2047,120 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.3" +version = "2.1.4" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-win32.whl", hash = "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0"}, + {file = "MarkupSafe-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-win32.whl", hash = "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74"}, + {file = "MarkupSafe-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-win32.whl", hash = "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475"}, + {file = "MarkupSafe-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-win32.whl", hash = "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0"}, + {file = "MarkupSafe-2.1.4-cp37-cp37m-win_amd64.whl", hash = "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-win32.whl", hash = "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a"}, + {file = "MarkupSafe-2.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-win32.whl", hash = "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6"}, + {file = "MarkupSafe-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959"}, + {file = "MarkupSafe-2.1.4.tar.gz", hash = "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f"}, ] [[package]] name = "matplotlib" -version = "3.7.3" +version = "3.8.2" description = "Python plotting package" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:085c33b27561d9c04386789d5aa5eb4a932ddef43cfcdd0e01735f9a6e85ce0c"}, - {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c568e80e1c17f68a727f30f591926751b97b98314d8e59804f54f86ae6fa6a22"}, - {file = "matplotlib-3.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7baf98c5ad59c5c4743ea884bb025cbffa52dacdfdac0da3e6021a285a90377e"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:236024f582e40dac39bca592258888b38ae47a9fed7b8de652d68d3d02d47d2b"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12b4f6795efea037ce2d41e7c417ad8bd02d5719c6ad4a8450a0708f4a1cfb89"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2136cc6c5415b78977e0e8c608647d597204b05b1d9089ccf513c7d913733"}, - {file = "matplotlib-3.7.3-cp310-cp310-win32.whl", hash = "sha256:122dcbf9be0086e2a95d9e5e0632dbf3bd5b65eaa68c369363310a6c87753059"}, - {file = "matplotlib-3.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:4aab27d9e33293389e3c1d7c881d414a72bdfda0fedc3a6bf46c6fa88d9b8015"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:d5adc743de91e8e0b13df60deb1b1c285b8effea3d66223afceb14b63c9b05de"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:55de4cf7cd0071b8ebf203981b53ab64f988a0a1f897a2dff300a1124e8bcd8b"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac03377fd908aaee2312d0b11735753e907adb6f4d1d102de5e2425249693f6c"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:755bafc10a46918ce9a39980009b54b02dd249594e5adf52f9c56acfddb5d0b7"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a6094c6f8e8d18db631754df4fe9a34dec3caf074f6869a7db09f18f9b1d6b2"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:272dba2f1b107790ed78ebf5385b8d14b27ad9e90419de340364b49fe549a993"}, - {file = "matplotlib-3.7.3-cp311-cp311-win32.whl", hash = "sha256:591c123bed1cb4b9996fb60b41a6d89c2ec4943244540776c5f1283fb6960a53"}, - {file = "matplotlib-3.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:3bf3a178c6504694cee8b88b353df0051583f2f6f8faa146f67115c27c856881"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:edf54cac8ee3603f3093616b40a931e8c063969756a4d78a86e82c2fea9659f7"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:91e36a85ea639a1ba9f91427041eac064b04829945fe331a92617b6cb21d27e5"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:caf5eaaf7c68f8d7df269dfbcaf46f48a70ff482bfcebdcc97519671023f2a7d"}, - {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74bf57f505efea376097e948b7cdd87191a7ce8180616390aef496639edf601f"}, - {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee152a88a0da527840a426535514b6ed8ac4240eb856b1da92cf48124320e346"}, - {file = "matplotlib-3.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:67a410a9c9e07cbc83581eeea144bbe298870bf0ac0ee2f2e10a015ab7efee19"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:259999c05285cb993d7f2a419cea547863fa215379eda81f7254c9e932963729"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3f4e7fd5a6157e1d018ce2166ec8e531a481dd4a36f035b5c23edfe05a25419a"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:faa3d12d8811d08d14080a8b7b9caea9a457dc495350166b56df0db4b9909ef5"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:336e88900c11441e458da01c8414fc57e04e17f9d3bb94958a76faa2652bcf6b"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:12f4c0dd8aa280d796c8772ea8265a14f11a04319baa3a16daa5556065e8baea"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990955b11e7918d256cf3b956b10997f405b7917a3f1c7d8e69c1d15c7b1930"}, - {file = "matplotlib-3.7.3-cp38-cp38-win32.whl", hash = "sha256:e78707b751260b42b721507ad7aa60fe4026d7f51c74cca6b9cd8b123ebb633a"}, - {file = "matplotlib-3.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:e594ee43c59ea39ca5c6244667cac9d017a3527febc31f5532ad9135cf7469ec"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6eaa1cf0e94c936a26b78f6d756c5fbc12e0a58c8a68b7248a2a31456ce4e234"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0a97af9d22e8ebedc9f00b043d9bbd29a375e9e10b656982012dded44c10fd77"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f9c6c16597af660433ab330b59ee2934b832ee1fabcaf5cbde7b2add840f31e"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7240259b4b9cbc62381f6378cff4d57af539162a18e832c1e48042fabc40b6b"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747c6191d2e88ae854809e69aa358dbf852ff1a5738401b85c1cc9012309897a"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec726b08a5275d827aa91bb951e68234a4423adb91cf65bc0fcdc0f2777663f7"}, - {file = "matplotlib-3.7.3-cp39-cp39-win32.whl", hash = "sha256:40e3b9b450c6534f07278310c4e34caff41c2a42377e4b9d47b0f8d3ac1083a2"}, - {file = "matplotlib-3.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfc118642903a23e309b1da32886bb39a4314147d013e820c86b5fb4cb2e36d0"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:165c8082bf8fc0360c24aa4724a22eaadbfd8c28bf1ccf7e94d685cad48261e4"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebd8470cc2a3594746ff0513aecbfa2c55ff6f58e6cef2efb1a54eb87c88ffa2"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7153453669c9672b52095119fd21dd032d19225d48413a2871519b17db4b0fde"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:498a08267dc69dd8f24c4b5d7423fa584d7ce0027ba71f7881df05fc09b89bb7"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48999c4b19b5a0c058c9cd828ff6fc7748390679f6cf9a2ad653a3e802c87d3"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22d65d18b4ee8070a5fea5761d59293f1f9e2fac37ec9ce090463b0e629432fd"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c40cde976c36693cc0767e27cf5f443f91c23520060bd9496678364adfafe9c"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:39018a2b17592448fbfdf4b8352955e6c3905359939791d4ff429296494d1a0c"}, - {file = "matplotlib-3.7.3.tar.gz", hash = "sha256:f09b3dd6bdeb588de91f853bbb2d6f0ff8ab693485b0c49035eaa510cb4f142e"}, + {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, + {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, + {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, + {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, + {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, + {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, + {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, + {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, + {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, + {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, + {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, + {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, + {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, + {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, + {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, + {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, ] [package.dependencies] contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" -kiwisolver = ">=1.0.1" -numpy = ">=1.20,<2" +kiwisolver = ">=1.3.1" +numpy = ">=1.21,<2" packaging = ">=20.0" -pillow = ">=6.2.0" +pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" -setuptools_scm = ">=7" [[package]] name = "mdit-py-plugins" @@ -2286,14 +2194,17 @@ files = [ [[package]] name = "metadrive-simulator" -version = "0.4.1.2" +version = "0.4.2.2" description = "An open-ended driving simulator with infinite scenes" optional = false python-versions = ">=3.6, <3.12" -files = [] -develop = false +files = [ + {file = "metadrive-simulator-0.4.2.2.tar.gz", hash = "sha256:dcce9f9c73b6055e70480af8543058b95e8c4f68d2595107f3ef36c9be03f6bb"}, + {file = "metadrive_simulator-0.4.2.2-py3-none-any.whl", hash = "sha256:165ba0b5275313a71090ba0e73d51b7b5e05391b071d3a2114d999ac9287d150"}, +] [package.dependencies] +filelock = "*" geopandas = "*" gymnasium = ">=0.28,<0.29" lxml = "*" @@ -2302,12 +2213,12 @@ numpy = ">=1.21.6,<=1.24.2" opencv-python = "*" panda3d = "1.10.13" panda3d-gltf = "0.13" -panda3d-simplepbr = "*" pandas = "*" pillow = "*" progressbar = "*" psutil = "*" pygame = "*" +Pygments = "*" pytest = "*" requests = "*" scipy = "*" @@ -2317,27 +2228,34 @@ tqdm = "*" yapf = "*" [package.extras] -all = ["PyOpenGL (==3.1.6)", "PyOpenGL-accelerate (==3.1.6)", "aioboto3", "aiofiles", "bokeh (==2.4)", "boto3", "chardet", "cuda-python (==12.0.0)", "glfw", "hydra-core", "pyarrow", "pyrr (==0.10.3)", "retry"] cuda = ["PyOpenGL (==3.1.6)", "PyOpenGL-accelerate (==3.1.6)", "cuda-python (==12.0.0)", "glfw", "pyrr (==0.10.3)"] gym = ["gym (>=0.19.0,<=0.26.0)"] -nuplan = ["aioboto3", "aiofiles", "bokeh (==2.4)", "boto3", "chardet", "hydra-core", "pyarrow", "retry"] -waymo = ["waymo-open-dataset-tf-2.11.0 (==1.5.0)"] +ros = ["zmq"] -[package.source] -type = "git" -url = "https://github.com/metadriverse/metadrive.git" -reference = "51d4393f3b3574fd0e79ed04eae0081f8447ca72" -resolved_reference = "51d4393f3b3574fd0e79ed04eae0081f8447ca72" +[[package]] +name = "mouseinfo" +version = "0.1.3" +description = "An application to display XY position and RGB color information for the pixel currently under the mouse. Works on Python 2 and 3." +optional = false +python-versions = "*" +files = [ + {file = "MouseInfo-0.1.3.tar.gz", hash = "sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7"}, +] + +[package.dependencies] +pyperclip = "*" +python3-Xlib = {version = "*", markers = "platform_system == \"Linux\" and python_version >= \"3.0\""} +rubicon-objc = {version = "*", markers = "platform_system == \"Darwin\""} [[package]] name = "mpld3" -version = "0.5.9" +version = "0.5.10" description = "D3 Viewer for Matplotlib" optional = false python-versions = "*" files = [ - {file = "mpld3-0.5.9-py3-none-any.whl", hash = "sha256:cecdd988b24f8d7c7f362b8f72bb91df1a24b1993dd02a958223918a31c31052"}, - {file = "mpld3-0.5.9.tar.gz", hash = "sha256:d8d228b2911132fd0154e2a49543b7f97247f9851cfe468c6b616f452c676158"}, + {file = "mpld3-0.5.10-py3-none-any.whl", hash = "sha256:80877acce87ea447380fad7374668737505c8c0684aab05238e7c5dc1fab38c1"}, + {file = "mpld3-0.5.10.tar.gz", hash = "sha256:a478eb404fa5212505c59133cf272cd9a94105872e605597720e7f84de38fbc7"}, ] [package.dependencies] @@ -2363,13 +2281,13 @@ tests = ["pytest (>=4.6)"] [[package]] name = "msal" -version = "1.23.0" +version = "1.26.0" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = false -python-versions = "*" +python-versions = ">=2.7" files = [ - {file = "msal-1.23.0-py2.py3-none-any.whl", hash = "sha256:3342e0837a047007f9d479e814b559c3219767453d57920dc40a31986862048b"}, - {file = "msal-1.23.0.tar.gz", hash = "sha256:25c9a33acf84301f93d1fdbe9f1a9c60cd38af0d5fffdbfa378138fc7bc1e86b"}, + {file = "msal-1.26.0-py2.py3-none-any.whl", hash = "sha256:be77ba6a8f49c9ff598bbcdc5dfcf1c9842f3044300109af738e8c3e371065b5"}, + {file = "msal-1.26.0.tar.gz", hash = "sha256:224756079fe338be838737682b49f8ebc20a87c1c5eeaf590daae4532b83de15"}, ] [package.dependencies] @@ -2382,20 +2300,21 @@ broker = ["pymsalruntime (>=0.13.2,<0.14)"] [[package]] name = "msal-extensions" -version = "1.0.0" +version = "1.1.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "msal-extensions-1.0.0.tar.gz", hash = "sha256:c676aba56b0cce3783de1b5c5ecfe828db998167875126ca4b47dc6436451354"}, - {file = "msal_extensions-1.0.0-py2.py3-none-any.whl", hash = "sha256:91e3db9620b822d0ed2b4d1850056a0f133cba04455e62f11612e40f5502f2ee"}, + {file = "msal-extensions-1.1.0.tar.gz", hash = "sha256:6ab357867062db7b253d0bd2df6d411c7891a0ee7308d54d1e4317c1d1c54252"}, + {file = "msal_extensions-1.1.0-py3-none-any.whl", hash = "sha256:01be9711b4c0b1a151450068eeb2c4f0997df3bba085ac299de3a66f585e382f"}, ] [package.dependencies] msal = ">=0.4.1,<2.0.0" +packaging = "*" portalocker = [ - {version = ">=1.0,<3", markers = "python_version >= \"3.5\" and platform_system != \"Windows\""}, - {version = ">=1.6,<3", markers = "python_version >= \"3.5\" and platform_system == \"Windows\""}, + {version = ">=1.0,<3", markers = "platform_system != \"Windows\""}, + {version = ">=1.6,<3", markers = "platform_system == \"Windows\""}, ] [[package]] @@ -2483,38 +2402,38 @@ files = [ [[package]] name = "mypy" -version = "1.5.1" +version = "1.8.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, + {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, + {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, + {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, + {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, + {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, + {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, + {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, + {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, + {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, + {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, + {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, + {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, + {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, + {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, + {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, + {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, + {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, ] [package.dependencies] @@ -2524,6 +2443,7 @@ typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] +mypyc = ["setuptools (>=50)"] reports = ["lxml"] [[package]] @@ -2578,70 +2498,6 @@ files = [ fast = ["fastnumbers (>=2.0.0)"] icu = ["PyICU (>=1.0.0)"] -[[package]] -name = "ncompress" -version = "1.0.1" -description = "LZW compression and decompression" -optional = false -python-versions = ">=3.8" -files = [ - {file = "ncompress-1.0.1-cp310-cp310-macosx_10_14_universal2.whl", hash = "sha256:487f680e369ef2f7cdf26f888dd83dc2bdf36c5764d7be204300db2a8e176e50"}, - {file = "ncompress-1.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ac44c41811b5c1105974f92858cf607de7cd2a9a57ad2e511c603fc90d4dd034"}, - {file = "ncompress-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e37c183901042dbb29f9d24ce5a1239e9c57afdb9eb1a6a9deb5e036cca7149d"}, - {file = "ncompress-1.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723308a5782bed3ddcfba9e0c3ce6aecfad01e3d7644b44995e2cecc7317685f"}, - {file = "ncompress-1.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6ae50e6e7f15aad30cd73d9261742e683fb660e9598564b14f05fe87e026e65"}, - {file = "ncompress-1.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:85feb2f4ea85ac8ac9708c9a912e93f75e899d88eab2af6e89aae7a79120e105"}, - {file = "ncompress-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7eb3eb16d26acc64e3175e8aec9dc102fe3355e45a701bf8c273c9d9af55b2d0"}, - {file = "ncompress-1.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:497be1959fa0c0c4249f546c059ee0a98e4f86d2bafe846a69acdbcd3bab849b"}, - {file = "ncompress-1.0.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:cfba2d01010ee437425c0dd029e27429a6595e3e9447750b5821cb1908d347dc"}, - {file = "ncompress-1.0.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:062d8fb3ea0534a96de052eb68343da831c88a607685a87b0dc144ad1466e9ff"}, - {file = "ncompress-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:13a719822859605a798cf96e678b31e1dd66541369be48cc3ef544f2c6e14f08"}, - {file = "ncompress-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:7719b8659a9f61b3cfacbbd9c1bb07a3656945aed0bf2c73e34cd1122edc9ff2"}, - {file = "ncompress-1.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:62a95f693d6964d1b25110afa7b2111a6a471c62727b5efa2e3a8e5e3c5922ff"}, - {file = "ncompress-1.0.1-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:a94fc9e3e047199c29ada85fa3104de6a7b486859337a05259b8ae24c1686e29"}, - {file = "ncompress-1.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:938eee75b6084e5fb3cf4fb6a79ba86fb261cade319639893f369401c53687e4"}, - {file = "ncompress-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:016a3c60f6a25c50323cbcf4faf7c6ccd1992468eb6c6348a9d164cca3b53083"}, - {file = "ncompress-1.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f49a6aa4e1757a0963bbadea6219c0369afb07265ace6e5c4201c974f5e271a3"}, - {file = "ncompress-1.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8101d647f5334c4afb2a11e0c18602a9bdddb4260ee0a4f8ec6241930c89124d"}, - {file = "ncompress-1.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39ced149de176fda05198e4d0ede9d88bb2a4b717f559b4826a169dd61ab41d9"}, - {file = "ncompress-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f7c85fb141308e806fecc47791aaa5d03efd05f2b6d0d9bdf0f7ce021f60799"}, - {file = "ncompress-1.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c242d28f5679319733cf0f9a5342c3a94161214fb6ab4ef0fb15a31c65d69114"}, - {file = "ncompress-1.0.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:149464d41c24fa66e1497b8e2b460f312dbe017624b46af1514bf0276485a99f"}, - {file = "ncompress-1.0.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ba638721c66c1946c32bbb86e9413c8a101b0db09c82afe96dfe1a2201783cab"}, - {file = "ncompress-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9345d3825776440bba31b1998bd11a377e3eb98bb79377ae91739b5e7464c1c"}, - {file = "ncompress-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:0459002f93a2ed501fc76b6cd8806216f242cd86f11dac6df88932214345dd42"}, - {file = "ncompress-1.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:2039fd029b0c7b7bec320ab5450cdc93ef786bad9ba7a87162aa2892dd7156f9"}, - {file = "ncompress-1.0.1-cp38-cp38-macosx_10_14_universal2.whl", hash = "sha256:cd1d7c3458f4c345dc47ede17e7777b1a7d6a26f18d08962b0a0804b142fdc1e"}, - {file = "ncompress-1.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:213eedd6cf7bf550cce2ff6e72791c8343396d169a248d1b422b17f68cd387ed"}, - {file = "ncompress-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:068bb0356d74afcf8f38b231e76773116e7346c76a6face3e25ec7cec4d60795"}, - {file = "ncompress-1.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87ea419d904f44833620a14a9815d3aaa70e4b9739a743953c963a56be64d711"}, - {file = "ncompress-1.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:df2afc9e5ac6a72bed94fd75967cdacf826d94b7b29fe841210fefb1a7c6a6bb"}, - {file = "ncompress-1.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb8f79fcaba867768178b98e25106c63a79f077f1ea22ec59e7945236a8ab7"}, - {file = "ncompress-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73a1025f501ea3d0b729da59f557ab67f6533a97ebe0082fd762018132cf92a7"}, - {file = "ncompress-1.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbf462b9cc620b56bf824aa20aa9d75de04444d1e43f1b228037d1ecf01ce6be"}, - {file = "ncompress-1.0.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2df08321ed9c8d0bbba34b2859b8a5a2833a3a315f131b81603eb1dc7423c0ba"}, - {file = "ncompress-1.0.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:95a846e1704852c95c7ec347f09fc4bea3dfd3581020e3c694a1081a8fcd3ea1"}, - {file = "ncompress-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3c48aac59135cd521ba7a8ee0f6dd9d03946a3f2d2e02d4534dabe7423fd3420"}, - {file = "ncompress-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:47ade5c18733da749ba7371ac27e68ba806d67d430e5eb37c48bf338bb975382"}, - {file = "ncompress-1.0.1-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:29e7fce7e246de8871dc94349a1abf21da675e249acdaac76d95601a7c3da928"}, - {file = "ncompress-1.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:c34316051bfc1305b3f51bf03cb78e115d23b153a34d8a1a9d04459e42857f84"}, - {file = "ncompress-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7c19380caa250289260576ca5c29558ed00f516ba9844283d6c9a5b7e6a0475f"}, - {file = "ncompress-1.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8207723ff3ba3f27a4bdb7632d5be05a6de5e0e163c4495dd66856d713f96dec"}, - {file = "ncompress-1.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8308fb769bb5eb063badd92904f4abe8c0f1c023d71a7cda168a033cbcc60c88"}, - {file = "ncompress-1.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d26a0b26e958ea7ffbc41fa6fdfa9e8f1c72b45134ca0ad198ea3f61701ba0b4"}, - {file = "ncompress-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ce207383fa1c1fb47320f3fb593a360ad30cc04b5ffcd868c020210eb57b798"}, - {file = "ncompress-1.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c62cd047119d897b789955b082c9da76efae5b47f84b0ebe68fbe9e37f932f7b"}, - {file = "ncompress-1.0.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:64bf39b339350f099811ab8eaf7a8aece5629a4555838c9744c81cdc39a1ad15"}, - {file = "ncompress-1.0.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:4a707c302c008498afd23959ba6d64b7e4aa3a292d78e10dbb5c35f80b57ad64"}, - {file = "ncompress-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4abc4469666f6cf7f7e27fc8c1e629088c075ef5dfb22ad55cb80a193d745fdc"}, - {file = "ncompress-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:a1f9b16445da8af82073b5e7a9b33c024bd4299bfecfba1da636d32da5c9c399"}, - {file = "ncompress-1.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:7be5cca28b1a7c8df5d989d90c80d316b486bc8d32c67aec2029b27b9589c5df"}, - {file = "ncompress-1.0.1.tar.gz", hash = "sha256:a27a54b572da8f14ac0c0689660f13cddb02a2822b03048d3c2ce3d28fb11027"}, -] - -[package.extras] -tests = ["pytest"] - [[package]] name = "nodeenv" version = "1.8.0" @@ -2695,67 +2551,101 @@ files = [ [[package]] name = "onnx" -version = "1.14.1" +version = "1.15.0" description = "Open Neural Network Exchange" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "onnx-1.14.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:05d8609b4148f8ee4bd5d8186875ccb288300106242fc5201b8b575681bbd5c4"}, - {file = "onnx-1.14.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f131c2fd36f7848437be9de3b1fa5449a94245e16c6f275f66ac7cf8f183ec26"}, - {file = "onnx-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea8d7abe048d0e9e31541dc62e9e40b8411b11377d2a22ed842e678802b4e1aa"}, - {file = "onnx-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:921ad325b17484698d9d65978e123b1f351328ea50de6f84f25d09d5c7dde361"}, - {file = "onnx-1.14.1-cp310-cp310-win32.whl", hash = "sha256:6c8156be97762814c7c835d597320ef1f6630f034344fbc672cd6edddbbf78ee"}, - {file = "onnx-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:776ab461515c20cc4e24dbd75af32b6b1e64de931dc5873b049f13bfec1c96e9"}, - {file = "onnx-1.14.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:93e614edaf87ea1adba24663780ac62e30f421c117d695379daa9ff816de821b"}, - {file = "onnx-1.14.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65672ae827ea5f0e59dc0d1cef1c0ed5083d5e8348946f98f1715ebb123573e9"}, - {file = "onnx-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6efa7375d91b1da10badd1d2701a94b0e9b111a5e1a227be1bf877450cea84ac"}, - {file = "onnx-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9cd91b85cfbb0d6478f4a1a0aee4d95cf8839adc48c69130a0cf8452f21db4"}, - {file = "onnx-1.14.1-cp311-cp311-win32.whl", hash = "sha256:1072baf93e04bbbed45f8f997cbbe96e179080b4cd95bc676882fe64aa709dd6"}, - {file = "onnx-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:16a6667aff34431ab828b393ed8153c0a0cf15152d76f8d93aa48fb206217827"}, - {file = "onnx-1.14.1-cp37-cp37m-macosx_10_12_universal2.whl", hash = "sha256:3fde9e1854e525aae93b403c1174bf68dc86ac92b6f8fb4af0fe3ec0d1440631"}, - {file = "onnx-1.14.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:58e6eb27c99dbefc84b4234388f5f668b49a1aaeced1580cb96f5fe05800a77c"}, - {file = "onnx-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84653e8e19f5d051f9e7ed9cf7285527fd34e093e3b50554121849664e97c254"}, - {file = "onnx-1.14.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b4a0e029b3604dc5294a7333f622d8c04d6a6a1bc4f51054195074f61b8f41a"}, - {file = "onnx-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:f5046bfbe7f9bab59fc53984aaa5b47a35c8f8e98787053e1650049a1aaf12de"}, - {file = "onnx-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b37e7bd8baf75efa78ecce713273e2aa29c8c06f69cee6107b413cd03bf59b20"}, - {file = "onnx-1.14.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:758dc585885e997f1086019f098e7ce0a4b3ab7d5a89bb2093572bb68ea906c1"}, - {file = "onnx-1.14.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:486ced7588437ff08a03914ac110d64caa686ff7fa766123d15c8d8eeec29210"}, - {file = "onnx-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:498ecc3e545b80685501c26b62eeeda0b8ae2f2ba8ff3f650ce1f526924aa699"}, - {file = "onnx-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e991e867b799df0d7ed4cdad94c6a3ed9bebaceef3e574ac9eed314e1bfca0ef"}, - {file = "onnx-1.14.1-cp38-cp38-win32.whl", hash = "sha256:a8c3b1398b156f8bae9882ed8c602e1aa5171180fffcbeb1f9a337fe307c1df4"}, - {file = "onnx-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:cf20e7a346d22468a128a40c5cc1f4d20c3939e21e74fc8e3be8ba66c6f82444"}, - {file = "onnx-1.14.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:17f78637d2f6c3c9afad0611fe4c583b6ba4839ac724af0846e5db24dc8dadc0"}, - {file = "onnx-1.14.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:60ad73263a06056f9aa288b082887c6330be08475471c3a009f62439b2a67dca"}, - {file = "onnx-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:030aa47e28337fd81f4d884032660e40912a4763ce4e5a4b4144380271390e82"}, - {file = "onnx-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b113fa0183034743e6477fec928e478a6d94eee8d9a4376c144d20d736cdc45"}, - {file = "onnx-1.14.1-cp39-cp39-win32.whl", hash = "sha256:b9c28a99d4a620cb1d31120d35e0fab54073b9725ed50c3cd3ec7beb876e8dba"}, - {file = "onnx-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:bdb15fc4b7f2a8a19abb52ac9672db876f9505e7219e206bcb7530e7c1274e55"}, - {file = "onnx-1.14.1.tar.gz", hash = "sha256:70903afe163643bd71195c78cedcc3f4fa05a2af651fd950ef3acbb15175b2d1"}, + {file = "onnx-1.15.0-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:51cacb6aafba308aaf462252ced562111f6991cdc7bc57a6c554c3519453a8ff"}, + {file = "onnx-1.15.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:0aee26b6f7f7da7e840de75ad9195a77a147d0662c94eaa6483be13ba468ffc1"}, + {file = "onnx-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baf6ef6c93b3b843edb97a8d5b3d229a1301984f3f8dee859c29634d2083e6f9"}, + {file = "onnx-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ed899fe6000edc05bb2828863d3841cfddd5a7cf04c1a771f112e94de75d9f"}, + {file = "onnx-1.15.0-cp310-cp310-win32.whl", hash = "sha256:f1ad3d77fc2f4b4296f0ac2c8cadd8c1dcf765fc586b737462d3a0fe8f7c696a"}, + {file = "onnx-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:ca4ebc4f47109bfb12c8c9e83dd99ec5c9f07d2e5f05976356c6ccdce3552010"}, + {file = "onnx-1.15.0-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:233ffdb5ca8cc2d960b10965a763910c0830b64b450376da59207f454701f343"}, + {file = "onnx-1.15.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:51fa79c9ea9af033638ec51f9177b8e76c55fad65bb83ea96ee88fafade18ee7"}, + {file = "onnx-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f277d4861729f5253a51fa41ce91bfec1c4574ee41b5637056b43500917295ce"}, + {file = "onnx-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8a7c94d2ebead8f739fdb70d1ce5a71726f4e17b3e5b8ad64455ea1b2801a85"}, + {file = "onnx-1.15.0-cp311-cp311-win32.whl", hash = "sha256:17dcfb86a8c6bdc3971443c29b023dd9c90ff1d15d8baecee0747a6b7f74e650"}, + {file = "onnx-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:60a3e28747e305cd2e766e6a53a0a6d952cf9e72005ec6023ce5e07666676a4e"}, + {file = "onnx-1.15.0-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6b5c798d9e0907eaf319e3d3e7c89a2ed9a854bcb83da5fefb6d4c12d5e90721"}, + {file = "onnx-1.15.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:a4f774ff50092fe19bd8f46b2c9b27b1d30fbd700c22abde48a478142d464322"}, + {file = "onnx-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2b0e7f3938f2d994c34616bfb8b4b1cebbc4a0398483344fe5e9f2fe95175e6"}, + {file = "onnx-1.15.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49cebebd0020a4b12c1dd0909d426631212ef28606d7e4d49463d36abe7639ad"}, + {file = "onnx-1.15.0-cp38-cp38-win32.whl", hash = "sha256:1fdf8a3ff75abc2b32c83bf27fb7c18d6b976c9c537263fadd82b9560fe186fa"}, + {file = "onnx-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:763e55c26e8de3a2dce008d55ae81b27fa8fb4acbb01a29b9f3c01f200c4d676"}, + {file = "onnx-1.15.0-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:b2d5e802837629fc9c86f19448d19dd04d206578328bce202aeb3d4bedab43c4"}, + {file = "onnx-1.15.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9a9cfbb5e5d5d88f89d0dfc9df5fb858899db874e1d5ed21e76c481f3cafc90d"}, + {file = "onnx-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f472bbe5cb670a0a4a4db08f41fde69b187a009d0cb628f964840d3f83524e9"}, + {file = "onnx-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf2de9bef64792e5b8080c678023ac7d2b9e05d79a3e17e92cf6a4a624831d2"}, + {file = "onnx-1.15.0-cp39-cp39-win32.whl", hash = "sha256:ef4d9eb44b111e69e4534f3233fc2c13d1e26920d24ae4359d513bd54694bc6d"}, + {file = "onnx-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:95d7a3e2d79d371e272e39ae3f7547e0b116d0c7f774a4004e97febe6c93507f"}, + {file = "onnx-1.15.0.tar.gz", hash = "sha256:b18461a7d38f286618ca2a6e78062a2a9c634ce498e631e708a8041b00094825"}, ] [package.dependencies] numpy = "*" protobuf = ">=3.20.2" -typing-extensions = ">=3.6.2.1" [package.extras] -lint = ["lintrunner (>=0.10.0)", "lintrunner-adapters (>=0.3)"] +reference = ["Pillow", "google-re2"] [[package]] -name = "onnxruntime-gpu" -version = "1.15.1" +name = "onnxruntime" +version = "1.16.3" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" files = [ - {file = "onnxruntime_gpu-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c0cd0d67a4402222dacd02558e261890724f38e3dfcffedacc67d4575ebcdac"}, - {file = "onnxruntime_gpu-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:5e48ae99d3692b71cd95f75eb0c556bf196b708cb0dd760dbbb96720d81a00a2"}, - {file = "onnxruntime_gpu-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0a1af33d6539a2dae9c7a8473988a1358e036b3c9dea09ff5b61f5bc2eb603"}, - {file = "onnxruntime_gpu-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:53bba07b335082ff26c834bb43bd12ed772221aa69e0d454b750c0df0d0ea719"}, - {file = "onnxruntime_gpu-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:134c83e21f02f0629a7e0b2eb400a2cc16d088ac332822e04bafc57f84bfc77c"}, - {file = "onnxruntime_gpu-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:faeae730818546833fb2589feed03176f5469ef6cd06a0c5e5f5b3eec7ac84ec"}, - {file = "onnxruntime_gpu-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58773200fbe3a840cab163fc9f196a3de376a2902d633a714ef13501910c4dfc"}, - {file = "onnxruntime_gpu-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:b9fb31cb7608b4a0e84ba3325860f0b5159ccea5fe43e74eecf6f360021b987f"}, + {file = "onnxruntime-1.16.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:3bc41f323ac77acfed190be8ffdc47a6a75e4beeb3473fbf55eeb075ccca8df2"}, + {file = "onnxruntime-1.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:212741b519ee61a4822c79c47147d63a8b0ffde25cd33988d3d7be9fbd51005d"}, + {file = "onnxruntime-1.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f91f5497fe3df4ceee2f9e66c6148d9bfeb320cd6a71df361c66c5b8bac985a"}, + {file = "onnxruntime-1.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b1fc269cabd27f129fb9058917d6fdc89b188c49ed8700f300b945c81f889"}, + {file = "onnxruntime-1.16.3-cp310-cp310-win32.whl", hash = "sha256:f36b56a593b49a3c430be008c2aea6658d91a3030115729609ec1d5ffbaab1b6"}, + {file = "onnxruntime-1.16.3-cp310-cp310-win_amd64.whl", hash = "sha256:3c467eaa3d2429c026b10c3d17b78b7f311f718ef9d2a0d6938e5c3c2611b0cf"}, + {file = "onnxruntime-1.16.3-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:a225bb683991001d111f75323d355b3590e75e16b5e0f07a0401e741a0143ea1"}, + {file = "onnxruntime-1.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9aded21fe3d898edd86be8aa2eb995aa375e800ad3dfe4be9f618a20b8ee3630"}, + {file = "onnxruntime-1.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00cccc37a5195c8fca5011b9690b349db435986bd508eb44c9fce432da9228a4"}, + {file = "onnxruntime-1.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e253e572021563226a86f1c024f8f70cdae28f2fb1cc8c3a9221e8b1ce37db5"}, + {file = "onnxruntime-1.16.3-cp311-cp311-win32.whl", hash = "sha256:a82a8f0b4c978d08f9f5c7a6019ae51151bced9fd91e5aaa0c20a9e4ac7a60b6"}, + {file = "onnxruntime-1.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:78d81d9af457a1dc90db9a7da0d09f3ccb1288ea1236c6ab19f0ca61f3eee2d3"}, + {file = "onnxruntime-1.16.3-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:04ebcd29c20473596a1412e471524b2fb88d55e6301c40b98dd2407b5911595f"}, + {file = "onnxruntime-1.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9996bab0f202a6435ab867bc55598f15210d0b72794d5de83712b53d564084ae"}, + {file = "onnxruntime-1.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b8f5083f903408238883821dd8c775f8120cb4a604166dbdabe97f4715256d5"}, + {file = "onnxruntime-1.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c2dcf1b70f8434abb1116fe0975c00e740722aaf321997195ea3618cc00558e"}, + {file = "onnxruntime-1.16.3-cp38-cp38-win32.whl", hash = "sha256:d4a0151e1accd04da6711f6fd89024509602f82c65a754498e960b032359b02d"}, + {file = "onnxruntime-1.16.3-cp38-cp38-win_amd64.whl", hash = "sha256:e8aa5bba78afbd4d8a2654b14ec7462ff3ce4a6aad312a3c2d2c2b65009f2541"}, + {file = "onnxruntime-1.16.3-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:6829dc2a79d48c911fedaf4c0f01e03c86297d32718a3fdee7a282766dfd282a"}, + {file = "onnxruntime-1.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:76f876c53bfa912c6c242fc38213a6f13f47612d4360bc9d599bd23753e53161"}, + {file = "onnxruntime-1.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4137e5d443e2dccebe5e156a47f1d6d66f8077b03587c35f11ee0c7eda98b533"}, + {file = "onnxruntime-1.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c56695c1a343c7c008b647fff3df44da63741fbe7b6003ef576758640719be7b"}, + {file = "onnxruntime-1.16.3-cp39-cp39-win32.whl", hash = "sha256:985a029798744ce4743fcf8442240fed35c8e4d4d30ec7d0c2cdf1388cd44408"}, + {file = "onnxruntime-1.16.3-cp39-cp39-win_amd64.whl", hash = "sha256:28ff758b17ce3ca6bcad3d936ec53bd7f5482e7630a13f6dcae518eba8f71d85"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + +[[package]] +name = "onnxruntime-gpu" +version = "1.16.3" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = false +python-versions = "*" +files = [ + {file = "onnxruntime_gpu-1.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c14bc735ad2b2286be9eadeea09bc190df38e8bce17e37b601761019cc7cc24f"}, + {file = "onnxruntime_gpu-1.16.3-cp310-cp310-win_amd64.whl", hash = "sha256:8de5ccfc005ea5ec50fbd104b7210c97623a9f8c13de6e64ce559b55956b757f"}, + {file = "onnxruntime_gpu-1.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5703454521a9c080ff3ac79b5d266e959cc735d442a1d8796763c7f92d6069dc"}, + {file = "onnxruntime_gpu-1.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:48bb615aed61f5620d1ad46b9005614e1a14de60f8218a1448cc9a643f23d399"}, + {file = "onnxruntime_gpu-1.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2811c8ea209aaedcc2600ca828025279c1b1242344af603122d28c2ea8ab26a4"}, + {file = "onnxruntime_gpu-1.16.3-cp38-cp38-win_amd64.whl", hash = "sha256:2e5a92770c9232776739f378804bf6fea20bae02878a50b7fe0f81e77a47ee92"}, + {file = "onnxruntime_gpu-1.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9305c7fc5981d7e04ad2afef1a403475fb84d658898567c91aa5a41c20ead356"}, + {file = "onnxruntime_gpu-1.16.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3ad8e7fbb22493267c23d61e997a6b2ac6236a08aa6b58a3a91848124c9b037"}, ] [package.dependencies] @@ -2768,18 +2658,18 @@ sympy = "*" [[package]] name = "opencv-python" -version = "4.8.0.76" +version = "4.9.0.80" description = "Wrapper package for OpenCV python bindings." optional = false python-versions = ">=3.6" files = [ - {file = "opencv-python-4.8.0.76.tar.gz", hash = "sha256:56d84c43ce800938b9b1ec74b33942b2edbcef3f70c2754eb9bfe5dff1ee3ace"}, - {file = "opencv_python-4.8.0.76-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:67bce4b9aad307c98a9a07c6afb7de3a4e823c1f4991d6d8e88e229e7dfeee59"}, - {file = "opencv_python-4.8.0.76-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:48eb3121d809a873086d6677565e3ac963e6946110d13cd115533fa70e2aa2eb"}, - {file = "opencv_python-4.8.0.76-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93871871b1c9d6b125cddd45b0638a2fa01ee9fd37f5e428823f750e404f2f15"}, - {file = "opencv_python-4.8.0.76-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcb4944211acf13742dbfd9d3a11dc4e36353ffa1746f2c7dcd6a01c32d1376"}, - {file = "opencv_python-4.8.0.76-cp37-abi3-win32.whl", hash = "sha256:b2349dc9f97ed6c9ba163d0a7a24bcef9695a3e216cd143e92f1b9659c5d9a49"}, - {file = "opencv_python-4.8.0.76-cp37-abi3-win_amd64.whl", hash = "sha256:ba32cfa75a806abd68249699d34420737d27b5678553387fc5768747a6492147"}, + {file = "opencv-python-4.9.0.80.tar.gz", hash = "sha256:1a9f0e6267de3a1a1db0c54213d022c7c8b5b9ca4b580e80bdc58516c922c9e1"}, + {file = "opencv_python-4.9.0.80-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:7e5f7aa4486651a6ebfa8ed4b594b65bd2d2f41beeb4241a3e4b1b85acbbbadb"}, + {file = "opencv_python-4.9.0.80-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:71dfb9555ccccdd77305fc3dcca5897fbf0cf28b297c51ee55e079c065d812a3"}, + {file = "opencv_python-4.9.0.80-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b34a52e9da36dda8c151c6394aed602e4b17fa041df0b9f5b93ae10b0fcca2a"}, + {file = "opencv_python-4.9.0.80-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4088cab82b66a3b37ffc452976b14a3c599269c247895ae9ceb4066d8188a57"}, + {file = "opencv_python-4.9.0.80-cp37-abi3-win32.whl", hash = "sha256:dcf000c36dd1651118a2462257e3a9e76db789a78432e1f303c7bac54f63ef6c"}, + {file = "opencv_python-4.9.0.80-cp37-abi3-win_amd64.whl", hash = "sha256:3f16f08e02b2a2da44259c7cc712e779eff1dd8b55fdb0323e8cab09548086c0"}, ] [package.dependencies] @@ -2787,18 +2677,18 @@ numpy = {version = ">=1.23.5", markers = "python_version >= \"3.11\""} [[package]] name = "opencv-python-headless" -version = "4.8.0.76" +version = "4.9.0.80" description = "Wrapper package for OpenCV python bindings." optional = false python-versions = ">=3.6" files = [ - {file = "opencv-python-headless-4.8.0.76.tar.gz", hash = "sha256:bc15726187dae26d8a08777faf6bc71d38f20c785c102677f58ba0e935003afb"}, - {file = "opencv_python_headless-4.8.0.76-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:f85d2e3b9d952db35d31f9db8882d073c903921b72b8db1cfed8bbc75e8d3e63"}, - {file = "opencv_python_headless-4.8.0.76-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:8ee3bf1c9086493c340c6a87899f1c7778d729de92bce8560b8c31ab8a9cdf79"}, - {file = "opencv_python_headless-4.8.0.76-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c675b8dec6298ba6a1eec2ce24077a393b4236a043f68dfacb06bf594354ce06"}, - {file = "opencv_python_headless-4.8.0.76-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:220d2e292fa45ef0582aab730460bbc15cfe61f2089208167a372ccf76f01e21"}, - {file = "opencv_python_headless-4.8.0.76-cp37-abi3-win32.whl", hash = "sha256:df0608de207ae9b094ad9eaf1a475cf6e9a069fb12cd289d4a18cefdab2f8aa8"}, - {file = "opencv_python_headless-4.8.0.76-cp37-abi3-win_amd64.whl", hash = "sha256:9c094faf6ec7bd360244647b26ebdf8f54edec1d9292cb9179fff9badcca7be8"}, + {file = "opencv-python-headless-4.9.0.80.tar.gz", hash = "sha256:71a4cd8cf7c37122901d8e81295db7fb188730e33a0e40039a4e59c1030b0958"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:2ea8a2edc4db87841991b2fbab55fc07b97ecb602e0f47d5d485bd75cee17c1a"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:e0ee54e27be493e8f7850847edae3128e18b540dac1d7b2e4001b8944e11e1c6"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57ce2865e8fec431c6f97a81e9faaf23fa5be61011d0a75ccf47a3c0d65fa73d"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:976656362d68d9f40a5c66f83901430538002465f7db59142784f3893918f3df"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-win32.whl", hash = "sha256:11e3849d83e6651d4e7699aadda9ec7ed7c38957cbbcb99db074f2a2d2de9670"}, + {file = "opencv_python_headless-4.9.0.80-cp37-abi3-win_amd64.whl", hash = "sha256:a8056c2cb37cd65dfcdf4153ca16f7362afcf3a50d600d6bb69c660fc61ee29c"}, ] [package.dependencies] @@ -2806,13 +2696,13 @@ numpy = {version = ">=1.23.5", markers = "python_version >= \"3.11\""} [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -2917,98 +2807,89 @@ panda3d-simplepbr = ">=0.6" [[package]] name = "panda3d-simplepbr" -version = "0.10" +version = "0.11.2" description = "A simple, lightweight PBR render pipeline for Panda3D" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "panda3d-simplepbr-0.10.tar.gz", hash = "sha256:b6bd902671b02c8794eb60d8039f256a4115faef067c1368cc70147f8ed83a31"}, - {file = "panda3d_simplepbr-0.10-py3-none-any.whl", hash = "sha256:c526a0fa5b2af8a2f16ee2837dcedbf5987ca917ee95699830675204bf765fb4"}, + {file = "panda3d-simplepbr-0.11.2.tar.gz", hash = "sha256:89469f9be0e15fd8888a277f60ba08eb31b90354dcba80fc5aa7ccccee56be2a"}, + {file = "panda3d_simplepbr-0.11.2-py3-none-any.whl", hash = "sha256:eca198004ed4a6635ac9180695440390d52c73eec0b6e02c317d000e1e4d1518"}, ] [package.dependencies] panda3d = ">=1.10.8" +typing-extensions = ">=4.7,<5.0" [package.extras] -test = ["pylint (==2.4.*)", "pytest", "pytest-pylint"] +test = ["pylint (>=3.0.0,<3.1.0)", "pytest", "pytest-pylint"] [[package]] name = "pandas" -version = "2.1.0" +version = "2.2.0" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:40dd20439ff94f1b2ed55b393ecee9cb6f3b08104c2c40b0cb7186a2f0046242"}, - {file = "pandas-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d4f38e4fedeba580285eaac7ede4f686c6701a9e618d8a857b138a126d067f2f"}, - {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e6a0fe052cf27ceb29be9429428b4918f3740e37ff185658f40d8702f0b3e09"}, - {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d81e1813191070440d4c7a413cb673052b3b4a984ffd86b8dd468c45742d3cc"}, - {file = "pandas-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb20252720b1cc1b7d0b2879ffc7e0542dd568f24d7c4b2347cb035206936421"}, - {file = "pandas-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:38f74ef7ebc0ffb43b3d633e23d74882bce7e27bfa09607f3c5d3e03ffd9a4a5"}, - {file = "pandas-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cda72cc8c4761c8f1d97b169661f23a86b16fdb240bdc341173aee17e4d6cedd"}, - {file = "pandas-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d97daeac0db8c993420b10da4f5f5b39b01fc9ca689a17844e07c0a35ac96b4b"}, - {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c58b1113892e0c8078f006a167cc210a92bdae23322bb4614f2f0b7a4b510f"}, - {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:629124923bcf798965b054a540f9ccdfd60f71361255c81fa1ecd94a904b9dd3"}, - {file = "pandas-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:70cf866af3ab346a10debba8ea78077cf3a8cd14bd5e4bed3d41555a3280041c"}, - {file = "pandas-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d53c8c1001f6a192ff1de1efe03b31a423d0eee2e9e855e69d004308e046e694"}, - {file = "pandas-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86f100b3876b8c6d1a2c66207288ead435dc71041ee4aea789e55ef0e06408cb"}, - {file = "pandas-2.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28f330845ad21c11db51e02d8d69acc9035edfd1116926ff7245c7215db57957"}, - {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a6ccf0963db88f9b12df6720e55f337447aea217f426a22d71f4213a3099a6"}, - {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99e678180bc59b0c9443314297bddce4ad35727a1a2656dbe585fd78710b3b9"}, - {file = "pandas-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b31da36d376d50a1a492efb18097b9101bdbd8b3fbb3f49006e02d4495d4c644"}, - {file = "pandas-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0164b85937707ec7f70b34a6c3a578dbf0f50787f910f21ca3b26a7fd3363437"}, - {file = "pandas-2.1.0.tar.gz", hash = "sha256:62c24c7fc59e42b775ce0679cfa7b14a5f9bfb7643cfbe708c960699e05fb918"}, + {file = "pandas-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8108ee1712bb4fa2c16981fba7e68b3f6ea330277f5ca34fa8d557e986a11670"}, + {file = "pandas-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:736da9ad4033aeab51d067fc3bd69a0ba36f5a60f66a527b3d72e2030e63280a"}, + {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e0b4fc3ddceb56ec8a287313bc22abe17ab0eb184069f08fc6a9352a769b18"}, + {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20404d2adefe92aed3b38da41d0847a143a09be982a31b85bc7dd565bdba0f4e"}, + {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ea3ee3f125032bfcade3a4cf85131ed064b4f8dd23e5ce6fa16473e48ebcaf5"}, + {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9670b3ac00a387620489dfc1bca66db47a787f4e55911f1293063a78b108df1"}, + {file = "pandas-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a946f210383c7e6d16312d30b238fd508d80d927014f3b33fb5b15c2f895430"}, + {file = "pandas-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a1b438fa26b208005c997e78672f1aa8138f67002e833312e6230f3e57fa87d5"}, + {file = "pandas-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ce2fbc8d9bf303ce54a476116165220a1fedf15985b09656b4b4275300e920b"}, + {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2707514a7bec41a4ab81f2ccce8b382961a29fbe9492eab1305bb075b2b1ff4f"}, + {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85793cbdc2d5bc32620dc8ffa715423f0c680dacacf55056ba13454a5be5de88"}, + {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cfd6c2491dc821b10c716ad6776e7ab311f7df5d16038d0b7458bc0b67dc10f3"}, + {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a146b9dcacc3123aa2b399df1a284de5f46287a4ab4fbfc237eac98a92ebcb71"}, + {file = "pandas-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbc1b53c0e1fdf16388c33c3cca160f798d38aea2978004dd3f4d3dec56454c9"}, + {file = "pandas-2.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a41d06f308a024981dcaa6c41f2f2be46a6b186b902c94c2674e8cb5c42985bc"}, + {file = "pandas-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:159205c99d7a5ce89ecfc37cb08ed179de7783737cea403b295b5eda8e9c56d1"}, + {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1e1f3861ea9132b32f2133788f3b14911b68102d562715d71bd0013bc45440"}, + {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:761cb99b42a69005dec2b08854fb1d4888fdf7b05db23a8c5a099e4b886a2106"}, + {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a20628faaf444da122b2a64b1e5360cde100ee6283ae8effa0d8745153809a2e"}, + {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f5be5d03ea2073627e7111f61b9f1f0d9625dc3c4d8dda72cc827b0c58a1d042"}, + {file = "pandas-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:a626795722d893ed6aacb64d2401d017ddc8a2341b49e0384ab9bf7112bdec30"}, + {file = "pandas-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9f66419d4a41132eb7e9a73dcec9486cf5019f52d90dd35547af11bc58f8637d"}, + {file = "pandas-2.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57abcaeda83fb80d447f28ab0cc7b32b13978f6f733875ebd1ed14f8fbc0f4ab"}, + {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60f1f7dba3c2d5ca159e18c46a34e7ca7247a73b5dd1a22b6d59707ed6b899a"}, + {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb61dc8567b798b969bcc1fc964788f5a68214d333cade8319c7ab33e2b5d88a"}, + {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:52826b5f4ed658fa2b729264d63f6732b8b29949c7fd234510d57c61dbeadfcd"}, + {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bde2bc699dbd80d7bc7f9cab1e23a95c4375de615860ca089f34e7c64f4a8de7"}, + {file = "pandas-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:3de918a754bbf2da2381e8a3dcc45eede8cd7775b047b923f9006d5f876802ae"}, + {file = "pandas-2.2.0.tar.gz", hash = "sha256:30b83f7c3eb217fb4d1b494a57a2fda5444f17834f5df2de6b2ffff68dc3c8e2"}, ] [package.dependencies] -numpy = {version = ">=1.23.2", markers = "python_version >= \"3.11\""} +numpy = {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""} python-dateutil = ">=2.8.2" pytz = ">=2020.1" -tzdata = ">=2022.1" +tzdata = ">=2022.7" [package.extras] -all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] -aws = ["s3fs (>=2022.05.0)"] -clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] -compression = ["zstandard (>=0.17.0)"] -computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2022.05.0)"] -gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] -hdf5 = ["tables (>=3.7.0)"] -html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] -mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] -spss = ["pyreadstat (>=1.1.5)"] -sql-other = ["SQLAlchemy (>=1.4.36)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.8.0)"] - -[[package]] -name = "panflute" -version = "2.3.0" -description = "Pythonic Pandoc filters" -optional = false -python-versions = ">=3.6" -files = [ - {file = "panflute-2.3.0-py3-none-any.whl", hash = "sha256:02673bcbdb521a805f08a2ca0ce864de86ad409ad406a01b3700fcf2aca81635"}, - {file = "panflute-2.3.0.tar.gz", hash = "sha256:cefd9dfc48ccd9732a53db57610701d22806da397a8a97e5cc8dc070b55865ca"}, -] - -[package.dependencies] -click = ">=6,<9" -pyyaml = ">=3,<7" - -[package.extras] -dev = ["configparser", "coverage", "flake8", "pandocfilters", "pytest", "pytest-cov", "requests"] -extras = ["yamlloader (>=1,<2)"] -pypi = ["Pygments", "docutils", "twine", "wheel"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] [[package]] name = "parameterized" @@ -3026,82 +2907,98 @@ dev = ["jinja2"] [[package]] name = "pillow" -version = "10.0.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, - {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, - {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, - {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, - {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, - {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, - {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, - {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, - {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, - {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "3.10.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [package.extras] @@ -3110,13 +3007,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.3.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -3125,13 +3022,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "polyline" -version = "2.0.0" +version = "2.0.1" description = "A Python implementation of Google's Encoded Polyline Algorithm Format." optional = false python-versions = ">=3.7" files = [ - {file = "polyline-2.0.0-py3-none-any.whl", hash = "sha256:45c9c0e8c0814a17df78390e3196cd47f6bc69697cd8a83f00d527c72f4d2a88"}, - {file = "polyline-2.0.0.tar.gz", hash = "sha256:1492b8fcadc2143f8aedc673d3c6d95df45131f1c62eb8d51c8183b24e771486"}, + {file = "polyline-2.0.1-py3-none-any.whl", hash = "sha256:7b1ff647be393143c1b9268738d9efb98a327dd0b29f9c3b84552dff0e34ea3c"}, + {file = "polyline-2.0.1.tar.gz", hash = "sha256:74cb5cea098dddf09d1a5a1f17af9184d371cbf3e9723de0194e530ec39ca1f6"}, ] [package.extras] @@ -3140,13 +3037,13 @@ publish = ["build (>=0.8,<1.0)", "twine (>=4.0,<5.0)"] [[package]] name = "portalocker" -version = "2.7.0" +version = "2.8.2" description = "Wraps the portalocker recipe for easy usage" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "portalocker-2.7.0-py2.py3-none-any.whl", hash = "sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"}, - {file = "portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51"}, + {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"}, + {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"}, ] [package.dependencies] @@ -3155,7 +3052,7 @@ pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} [package.extras] docs = ["sphinx (>=1.7.1)"] redis = ["redis"] -tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] [[package]] name = "pprofile" @@ -3169,13 +3066,13 @@ files = [ [[package]] name = "pre-commit" -version = "3.4.0" +version = "3.6.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pre_commit-3.4.0-py2.py3-none-any.whl", hash = "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945"}, - {file = "pre_commit-3.4.0.tar.gz", hash = "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522"}, + {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, + {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, ] [package.dependencies] @@ -3197,47 +3094,47 @@ files = [ [[package]] name = "protobuf" -version = "4.24.3" +version = "4.25.2" description = "" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "protobuf-4.24.3-cp310-abi3-win32.whl", hash = "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4"}, - {file = "protobuf-4.24.3-cp310-abi3-win_amd64.whl", hash = "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3"}, - {file = "protobuf-4.24.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675"}, - {file = "protobuf-4.24.3-cp37-cp37m-win32.whl", hash = "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2"}, - {file = "protobuf-4.24.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76"}, - {file = "protobuf-4.24.3-cp38-cp38-win32.whl", hash = "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52"}, - {file = "protobuf-4.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719"}, - {file = "protobuf-4.24.3-cp39-cp39-win32.whl", hash = "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1"}, - {file = "protobuf-4.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b"}, - {file = "protobuf-4.24.3-py3-none-any.whl", hash = "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a"}, - {file = "protobuf-4.24.3.tar.gz", hash = "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"}, + {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, + {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, + {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, + {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, + {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, + {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, + {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, + {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, + {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, ] [[package]] name = "psutil" -version = "5.9.5" +version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, ] [package.extras] @@ -3245,27 +3142,47 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "pyaudio" -version = "0.2.13" +version = "0.2.14" description = "Cross-platform audio I/O with PortAudio" optional = false python-versions = "*" files = [ - {file = "PyAudio-0.2.13-cp310-cp310-win32.whl", hash = "sha256:48e29537ea22ae2ae323eebe297bfb2683831cee4f20d96964e131f65ab2161d"}, - {file = "PyAudio-0.2.13-cp310-cp310-win_amd64.whl", hash = "sha256:87137cfd0ef8608a2a383be3f6996f59505e322dab9d16531f14cf542fa294f1"}, - {file = "PyAudio-0.2.13-cp311-cp311-win32.whl", hash = "sha256:13915faaa780e6bbbb6d745ef0e761674fd461b1b1b3f9c1f57042a534bfc0c3"}, - {file = "PyAudio-0.2.13-cp311-cp311-win_amd64.whl", hash = "sha256:59cc3cc5211b729c7854e3989058a145872cc58b1a7b46c6d4d88448a343d890"}, - {file = "PyAudio-0.2.13-cp37-cp37m-win32.whl", hash = "sha256:d294e3f85b2238649b1ff49ce3412459a8a312569975a89d14646536362d7576"}, - {file = "PyAudio-0.2.13-cp37-cp37m-win_amd64.whl", hash = "sha256:ff7f5e44ef51fe61da1e09c6f632f0b5808198edd61b363855cc7dd03bf4a8ac"}, - {file = "PyAudio-0.2.13-cp38-cp38-win32.whl", hash = "sha256:c6b302b048c054b7463936d8ba884b73877dc47012f3c94665dba92dd658ae04"}, - {file = "PyAudio-0.2.13-cp38-cp38-win_amd64.whl", hash = "sha256:1505d766ee718df6f5a18b73ac42307ba1cb4d2c0397873159254a34f67515d6"}, - {file = "PyAudio-0.2.13-cp39-cp39-win32.whl", hash = "sha256:eb128e4a6ea9b98d9a31f33c44978885af27dbe8ae53d665f8790cbfe045517e"}, - {file = "PyAudio-0.2.13-cp39-cp39-win_amd64.whl", hash = "sha256:910ef09225cce227adbba92622d4a3e3c8375117f7dd64039f287d9ffc0e02a1"}, - {file = "PyAudio-0.2.13.tar.gz", hash = "sha256:26bccc81e4243d1c0ff5487e6b481de6329fcd65c79365c267cef38f363a2b56"}, + {file = "PyAudio-0.2.14-cp310-cp310-win32.whl", hash = "sha256:126065b5e82a1c03ba16e7c0404d8f54e17368836e7d2d92427358ad44fefe61"}, + {file = "PyAudio-0.2.14-cp310-cp310-win_amd64.whl", hash = "sha256:2a166fc88d435a2779810dd2678354adc33499e9d4d7f937f28b20cc55893e83"}, + {file = "PyAudio-0.2.14-cp311-cp311-win32.whl", hash = "sha256:506b32a595f8693811682ab4b127602d404df7dfc453b499c91a80d0f7bad289"}, + {file = "PyAudio-0.2.14-cp311-cp311-win_amd64.whl", hash = "sha256:bbeb01d36a2f472ae5ee5e1451cacc42112986abe622f735bb870a5db77cf903"}, + {file = "PyAudio-0.2.14-cp312-cp312-win32.whl", hash = "sha256:5fce4bcdd2e0e8c063d835dbe2860dac46437506af509353c7f8114d4bacbd5b"}, + {file = "PyAudio-0.2.14-cp312-cp312-win_amd64.whl", hash = "sha256:12f2f1ba04e06ff95d80700a78967897a489c05e093e3bffa05a84ed9c0a7fa3"}, + {file = "PyAudio-0.2.14-cp38-cp38-win32.whl", hash = "sha256:858caf35b05c26d8fc62f1efa2e8f53d5fa1a01164842bd622f70ddc41f55000"}, + {file = "PyAudio-0.2.14-cp38-cp38-win_amd64.whl", hash = "sha256:2dac0d6d675fe7e181ba88f2de88d321059b69abd52e3f4934a8878e03a7a074"}, + {file = "PyAudio-0.2.14-cp39-cp39-win32.whl", hash = "sha256:f745109634a7c19fa4d6b8b7d6967c3123d988c9ade0cd35d4295ee1acdb53e9"}, + {file = "PyAudio-0.2.14-cp39-cp39-win_amd64.whl", hash = "sha256:009f357ee5aa6bc8eb19d69921cd30e98c42cddd34210615d592a71d09c4bd57"}, + {file = "PyAudio-0.2.14.tar.gz", hash = "sha256:78dfff3879b4994d1f4fc6485646a57755c6ee3c19647a491f790a0895bd2f87"}, ] [package.extras] test = ["numpy"] +[[package]] +name = "pyautogui" +version = "0.9.54" +description = "PyAutoGUI lets Python control the mouse and keyboard, and other GUI automation tasks. For Windows, macOS, and Linux, on Python 3 and 2." +optional = false +python-versions = "*" +files = [ + {file = "PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2"}, +] + +[package.dependencies] +mouseinfo = "*" +pygetwindow = ">=0.0.5" +pymsgbox = "*" +pyobjc-core = {version = "*", markers = "platform_system == \"Darwin\""} +pyobjc-framework-quartz = {version = "*", markers = "platform_system == \"Darwin\""} +pyscreeze = ">=0.1.21" +python3-Xlib = {version = "*", markers = "platform_system == \"Linux\" and python_version >= \"3.0\""} +pytweening = ">=1.0.4" + [[package]] name = "pycapnp" version = "1.3.0" @@ -3319,160 +3236,155 @@ files = [ [[package]] name = "pycryptodome" -version = "3.18.0" +version = "3.20.0" description = "Cryptographic library for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "pycryptodome-3.18.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-win32.whl", hash = "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf"}, - {file = "pycryptodome-3.18.0-cp27-cp27m-win_amd64.whl", hash = "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e"}, - {file = "pycryptodome-3.18.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14"}, - {file = "pycryptodome-3.18.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1"}, - {file = "pycryptodome-3.18.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb"}, - {file = "pycryptodome-3.18.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6"}, - {file = "pycryptodome-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf"}, - {file = "pycryptodome-3.18.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4"}, - {file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2"}, - {file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e"}, - {file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f"}, - {file = "pycryptodome-3.18.0-cp35-abi3-win32.whl", hash = "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3"}, - {file = "pycryptodome-3.18.0-cp35-abi3-win_amd64.whl", hash = "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9"}, - {file = "pycryptodome-3.18.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec"}, - {file = "pycryptodome-3.18.0-pp27-pypy_73-win32.whl", hash = "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403"}, - {file = "pycryptodome-3.18.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec"}, - {file = "pycryptodome-3.18.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380"}, - {file = "pycryptodome-3.18.0.tar.gz", hash = "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413"}, -] - -[[package]] -name = "pycurl" -version = "7.45.2" -description = "PycURL -- A Python Interface To The cURL library" -optional = false -python-versions = ">=3.5" -files = [ - {file = "pycurl-7.45.2.tar.gz", hash = "sha256:5730590be0271364a5bddd9e245c9cc0fb710c4cbacbdd95264a3122d23224ca"}, -] - -[[package]] -name = "pydub" -version = "0.25.1" -description = "Manipulate audio with an simple and easy high level interface" -optional = false -python-versions = "*" -files = [ - {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, - {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f0e6d631bae3f231d3634f91ae4da7a960f7ff87f2865b2d2b831af1dfb04e9a"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:baee115a9ba6c5d2709a1e88ffe62b73ecc044852a925dcb67713a288c4ec70f"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:417a276aaa9cb3be91f9014e9d18d10e840a7a9b9a9be64a42f553c5b50b4d1d"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a1250b7ea809f752b68e3e6f3fd946b5939a52eaeea18c73bdab53e9ba3c2dd"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:d5954acfe9e00bc83ed9f5cb082ed22c592fbbef86dc48b907238be64ead5c33"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:06d6de87c19f967f03b4cf9b34e538ef46e99a337e9a61a77dbe44b2cbcf0690"}, + {file = "pycryptodome-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ec0bb1188c1d13426039af8ffcb4dbe3aad1d7680c35a62d8eaf2a529b5d3d4f"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5601c934c498cd267640b57569e73793cb9a83506f7c73a8ec57a516f5b0b091"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d29daa681517f4bc318cd8a23af87e1f2a7bad2fe361e8aa29c77d652a065de4"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3427d9e5310af6680678f4cce149f54e0bb4af60101c7f2c16fdf878b39ccccc"}, + {file = "pycryptodome-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:3cd3ef3aee1079ae44afaeee13393cf68b1058f70576b11439483e34f93cf818"}, + {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac1c7c0624a862f2e53438a15c9259d1655325fc2ec4392e66dc46cdae24d044"}, + {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76658f0d942051d12a9bd08ca1b6b34fd762a8ee4240984f7c06ddfb55eaf15a"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cb39afede7055127e35a444c1c041d2e8d2f1f9c121ecef573757ba4cd2c3c"}, + {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a4c4dc60b78ec41d2afa392491d788c2e06edf48580fbfb0dd0f828af49d25"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:acc2614e2e5346a4a4eab6e199203034924313626f9620b7b4b38e9ad74b7e0c"}, + {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:210ba1b647837bfc42dd5a813cdecb5b86193ae11a3f5d972b9a0ae2c7e9e4b4"}, + {file = "pycryptodome-3.20.0-cp35-abi3-win32.whl", hash = "sha256:8d6b98d0d83d21fb757a182d52940d028564efe8147baa9ce0f38d057104ae72"}, + {file = "pycryptodome-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:9b3ae153c89a480a0ec402e23db8d8d84a3833b65fa4b15b81b83be9d637aab9"}, + {file = "pycryptodome-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:4401564ebf37dfde45d096974c7a159b52eeabd9969135f0426907db367a652a"}, + {file = "pycryptodome-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:ec1f93feb3bb93380ab0ebf8b859e8e5678c0f010d2d78367cf6bc30bfeb148e"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:acae12b9ede49f38eb0ef76fdec2df2e94aad85ae46ec85be3648a57f0a7db04"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e0e4a987d38cfc2e71b4a1b591bae4891eeabe5fa0f56154f576e26287bfdea"}, + {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c18b381553638414b38705f07d1ef0a7cf301bc78a5f9bc17a957eb19446834b"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a60fedd2b37b4cb11ccb5d0399efe26db9e0dd149016c1cc6c8161974ceac2d6"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:405002eafad114a2f9a930f5db65feef7b53c4784495dd8758069b89baf68eab"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ab6ab0cb755154ad14e507d1df72de9897e99fd2d4922851a276ccc14f4f1a5"}, + {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acf6e43fa75aca2d33e93409f2dafe386fe051818ee79ee8a3e21de9caa2ac9e"}, + {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, ] [[package]] name = "pyee" -version = "11.0.0" +version = "11.1.0" description = "A rough port of Node.js's EventEmitter to Python with a few tricks of its own" optional = false python-versions = ">=3.8" files = [ - {file = "pyee-11.0.0-py3-none-any.whl", hash = "sha256:78bb582de8083e50cbcc9aef3e40b43d5bfa321ef85bda07a1a7b8a0c78cfebe"}, - {file = "pyee-11.0.0.tar.gz", hash = "sha256:27c682bce60bdadc5d3e23eacd4101df328c0280884a3d9c07f3a4e3e595de27"}, + {file = "pyee-11.1.0-py3-none-any.whl", hash = "sha256:5d346a7d0f861a4b2e6c47960295bd895f816725b27d656181947346be98d7c1"}, + {file = "pyee-11.1.0.tar.gz", hash = "sha256:b53af98f6990c810edd9b56b87791021a8f54fd13db4edd1142438d44ba2263f"}, ] [package.dependencies] typing-extensions = "*" [package.extras] -dev = ["black", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"] +dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "sphinx", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"] [[package]] name = "pygame" -version = "2.5.1" +version = "2.5.2" description = "Python Game Development" optional = false python-versions = ">=3.6" files = [ - {file = "pygame-2.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:afc3d7d125baba727785fd4a05b2a99a0ee1c0cff6db7321e65607a3f644724d"}, - {file = "pygame-2.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:423168a16e89e02b4addfd3c2b68cfa9826bd675aa18141435de16da85143afe"}, - {file = "pygame-2.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8722cae725c49493603509087d5c4e6b9200993ab998663a553df3279237c52d"}, - {file = "pygame-2.5.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:757f74c029c6d0fbed8f778034c7fa5be77f3d1cf217e9eda48d8508b7672d14"}, - {file = "pygame-2.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f597d1c57d4297b518865d95539fa70decbba77809bda66278baf0df98b6e2cf"}, - {file = "pygame-2.5.1-cp310-cp310-win32.whl", hash = "sha256:65d1983837fd1f8a9fee3576500e666fcdd4efb20c4b8d0edab2ff6921c67aa8"}, - {file = "pygame-2.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:30fe97290f0fcc6a6f45a939a95ae44477a9b36cd89f93a7435bdad6d6a2bedd"}, - {file = "pygame-2.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8fbf01919feea464b57b505973f68386d73d2cd08cf52078c578e3bffcf03c84"}, - {file = "pygame-2.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f0b237cee5147f95bcbc98d8c1f13da4a6a637256a274021313db6a11ab8cebf"}, - {file = "pygame-2.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57bf8237fa2dcc16ddb4cd2eddaa52009e6c84f219c051b118d8863ea7f05433"}, - {file = "pygame-2.5.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93de41a54909f5622f01671d04e22c4dbc889ae8c3d1b1ee1b25d4e83077683f"}, - {file = "pygame-2.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6621baf985d8aec2b1089d86dcbf7b53ed1b235d9b372b1083e385f8d6ef9ee1"}, - {file = "pygame-2.5.1-cp311-cp311-win32.whl", hash = "sha256:1f90e3e6677cfc56bb04b13fb6c6e61e5f24d9373b27d33942ba7e4da0255c8d"}, - {file = "pygame-2.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:b06122f17e5c6ec7316c454613a34d697abfed94ed1029f26b804d20ef6ba550"}, - {file = "pygame-2.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63f7b0cd0ea631161b72056ce6d8ee0eb6af809e1a1f96c5fd338ec8b7e9eb33"}, - {file = "pygame-2.5.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b0ab1e29459f5e6d88c3c586f59113172846f8800f0a166d1605a0f459f8242"}, - {file = "pygame-2.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9c01780e8a11047c0a9f9b09db023d736c2221a292f2542b398f78a0bf15f32"}, - {file = "pygame-2.5.1-cp312-cp312-win32.whl", hash = "sha256:643a0556b563a9ae9448ffdec459bb84d200be666e4fd197d68be15b6c2b4826"}, - {file = "pygame-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:2cb3d56f34147c4c6653c4dac8d58e0791a298abff762aab147679e6935e6cd0"}, - {file = "pygame-2.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2377534fe2947ae6eaec1b7469f438ae4e4f3ff22c67b80e0c580215a52654ce"}, - {file = "pygame-2.5.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88d2a8880200035017696783475b6f32b0e551fbb23a52f0223264b24d680949"}, - {file = "pygame-2.5.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c6064bc879ef092194cf21ba25433500a0f8006979ef9ae145081ed1767de7"}, - {file = "pygame-2.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f983d62e659e7b2644605b690e2b72683b2d0d1124f09274ffa2cc8658648546"}, - {file = "pygame-2.5.1-cp36-cp36m-win32.whl", hash = "sha256:57c361a402db63224160082451721caafc138e6e27aba5f30f9268672fb8f3d1"}, - {file = "pygame-2.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cbcd03784a1858c2c5b91b6ba65c1905b9e30a2e150759f5a54af3241e008fbc"}, - {file = "pygame-2.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:be1ec9bf870d155b978811d115363c89eb10418c78295bb58b7bbd4e679d0010"}, - {file = "pygame-2.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1b2d1fcb51e60ecacd18f2a03f2a6023453ab64298fd4f54d8c50a5b2a13bff"}, - {file = "pygame-2.5.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9212522069fca25cadf3a8044383d01f5451833b66f950cb9bc6d49406f88cee"}, - {file = "pygame-2.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4276c2688b11e098bb3732e7e243f522a58d0cd662bc72008727fc7671277771"}, - {file = "pygame-2.5.1-cp37-cp37m-win32.whl", hash = "sha256:9463b7c80994eabcb6f9460a7859241fe030c6654d041a2f26ce12366ae202f3"}, - {file = "pygame-2.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:11cb40204cad95b7c23aee32bac048a531e3528a6f12dd3601504ec0b6000c06"}, - {file = "pygame-2.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:426897ec90e91a05c3d41c44875793568d4b20065f086ac476729a9e557e8976"}, - {file = "pygame-2.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:184d8e3b025ca6cbd199235faece6a7b911725566f40c71e0773058f1e189da2"}, - {file = "pygame-2.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b378ba0756173e9dc8cd7e0c40cb6ba217b122a6bef2ce3479293d543cc9777"}, - {file = "pygame-2.5.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62f09b59b9702ccf9d7a6e7c6ebb1fca5f0072c30e99b4f786c5478876433f0c"}, - {file = "pygame-2.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbcc7284369118299ce935062ef0c79d67503ad3b86bd6b02a29211279a46244"}, - {file = "pygame-2.5.1-cp38-cp38-win32.whl", hash = "sha256:3df49bb58dcd70ed76e8da0e936a267c57245e5b057ceeaa9070340d7d49162a"}, - {file = "pygame-2.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:4c410bd1d0807820fef48f15452366d0ef100d966323835ced818f7833d16a5a"}, - {file = "pygame-2.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c0a4f415dffa0b9d9099ee01647b1d6794f6a96b2b909997e05acff85e745c"}, - {file = "pygame-2.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a0eb2cae526a39a8e213477ce6d4947d7b7fb50757fbdb0275c9e3ee1bca22df"}, - {file = "pygame-2.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a232083d54c5936f40cb493d9cced38702a03dd7918fefd9a6b6522875714e5"}, - {file = "pygame-2.5.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e234c4d58b76dfc0d32b337e46e2191fa4dad7b3b0c7110d5c97076f1bf8cbd4"}, - {file = "pygame-2.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e9816fa15aea99b6ea2e0b88ba07e83cc19a152c3724016d323823e6e713454"}, - {file = "pygame-2.5.1-cp39-cp39-win32.whl", hash = "sha256:7613ccb5c1800234c7e2d090f5f0be9d72f5fd76e49acc458bcc33797ab0de97"}, - {file = "pygame-2.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:0618d8648e8d890a1bfc04a2ffd043a9b20dbc2e175d1347402e044729a5515b"}, - {file = "pygame-2.5.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:ea3bce8488f2bdb83a874f7799e229be9e0a1b70d2cff9c47234c19a54ab868e"}, - {file = "pygame-2.5.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:581ef66dfbff883fc4a172f57395db4e8c97d3381860e81943261a5a5214fde7"}, - {file = "pygame-2.5.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e4bbe4b94cd0dbf592ee32be5561b0cad8327aff92c36e7a1a1372ed804229e"}, - {file = "pygame-2.5.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:05b13f5994efd61c3de50ef0b5062fa3396e3fd851e99e215a7e3da78da49561"}, - {file = "pygame-2.5.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e21a79fd5db155164ad3341f12c89e121ce53cb4ea1856527dfa9daeb3f6016d"}, - {file = "pygame-2.5.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8c5953767eb459d9a32ca52399c2f379af807a24e00163f1bcb1aacc1e81d59"}, - {file = "pygame-2.5.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:84e4a4da14235d812b65081a87dbe89a4d45a101d06a4f33cf386be825e8797e"}, - {file = "pygame-2.5.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a78eb81082bf460249f0e7267db8d2f401f37f538b673125719be1db504584c"}, - {file = "pygame-2.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfb90539845885c4bb7861d6c7fe84ffb19de466b6d55fc39b707e8ea261ff93"}, - {file = "pygame-2.5.1.tar.gz", hash = "sha256:b7f88720be5c740576fd988dc0375328dc1adb070869654a245531e03df46262"}, + {file = "pygame-2.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a0769eb628c818761755eb0a0ca8216b95270ea8cbcbc82227e39ac9644643da"}, + {file = "pygame-2.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed9a3d98adafa0805ccbaaff5d2996a2b5795381285d8437a4a5d248dbd12b4a"}, + {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30d1618672a55e8c6669281ba264464b3ab563158e40d89e8c8b3faa0febebd"}, + {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39690e9be9baf58b7359d1f3b2336e1fd6f92fedbbce42987be5df27f8d30718"}, + {file = "pygame-2.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03879ec299c9f4ba23901b2649a96b2143f0a5d787f0b6c39469989e2320caf1"}, + {file = "pygame-2.5.2-cp310-cp310-win32.whl", hash = "sha256:74e1d6284100e294f445832e6f6343be4fe4748decc4f8a51131ae197dae8584"}, + {file = "pygame-2.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:485239c7d32265fd35b76ae8f64f34b0637ae11e69d76de15710c4b9edcc7c8d"}, + {file = "pygame-2.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34646ca20e163dc6f6cf8170f1e12a2e41726780112594ac061fa448cf7ccd75"}, + {file = "pygame-2.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b8a6e351665ed26ea791f0e1fd649d3f483e8681892caef9d471f488f9ea5ee"}, + {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc346965847aef00013fa2364f41a64f068cd096dcc7778fc306ca3735f0eedf"}, + {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35632035fd81261f2d797fa810ea8c46111bd78ceb6089d52b61ed7dc3c5d05f"}, + {file = "pygame-2.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e24d05184e4195fe5ebcdce8b18ecb086f00182b9ae460a86682d312ce8d31f"}, + {file = "pygame-2.5.2-cp311-cp311-win32.whl", hash = "sha256:f02c1c7505af18d426d355ac9872bd5c916b27f7b0fe224749930662bea47a50"}, + {file = "pygame-2.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6d58c8cf937815d3b7cdc0fa9590c5129cb2c9658b72d00e8a4568dea2ff1d42"}, + {file = "pygame-2.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1a2a43802bb5e89ce2b3b775744e78db4f9a201bf8d059b946c61722840ceea8"}, + {file = "pygame-2.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1c289f2613c44fe70a1e40769de4a49c5ab5a29b9376f1692bb1a15c9c1c9bfa"}, + {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:074aa6c6e110c925f7f27f00c7733c6303407edc61d738882985091d1eb2ef17"}, + {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe0228501ec616779a0b9c4299e837877783e18df294dd690b9ab0eed3d8aaab"}, + {file = "pygame-2.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31648d38ecdc2335ffc0e38fb18a84b3339730521505dac68514f83a1092e3f4"}, + {file = "pygame-2.5.2-cp312-cp312-win32.whl", hash = "sha256:224c308856334bc792f696e9278e50d099a87c116f7fc314cd6aa3ff99d21592"}, + {file = "pygame-2.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:dd2d2650faf54f9a0f5bd0db8409f79609319725f8f08af6507a0609deadcad4"}, + {file = "pygame-2.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b30bc1220c457169571aac998e54b013aaeb732d2fd8744966cb1cfab1f61d1"}, + {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78fcd7643358b886a44127ff7dec9041c056c212b3a98977674f83f99e9b12d3"}, + {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cf093a51cb294ede56c29d4acf41538c00f297fcf78a9b186fb7d23c0577b6"}, + {file = "pygame-2.5.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe323acbf53a0195c8c98b1b941eba7ac24e3e2b28ae48e8cda566f15fc4945"}, + {file = "pygame-2.5.2-cp36-cp36m-win32.whl", hash = "sha256:5697528266b4716d9cdd44a5a1d210f4d86ef801d0f64ca5da5d0816704009d9"}, + {file = "pygame-2.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:edda1f7cff4806a4fa39e0e8ccd75f38d1d340fa5fc52d8582ade87aca247d92"}, + {file = "pygame-2.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9bd738fd4ecc224769d0b4a719f96900a86578e26e0105193658a32966df2aae"}, + {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30a8d7cf12363b4140bf2f93b5eec4028376ca1d0fe4b550588f836279485308"}, + {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc12e4dea3e88ea8a553de6d56a37b704dbe2aed95105889f6afeb4b96e62097"}, + {file = "pygame-2.5.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b34c73cb328024f8db3cb6487a37e54000148988275d8d6e5adf99d9323c937"}, + {file = "pygame-2.5.2-cp37-cp37m-win32.whl", hash = "sha256:7d0a2794649defa57ef50b096a99f7113d3d0c2e32d1426cafa7d618eadce4c7"}, + {file = "pygame-2.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:41f8779f52e0f6e6e6ccb8f0b5536e432bf386ee29c721a1c22cada7767b0cef"}, + {file = "pygame-2.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:677e37bc0ea7afd89dde5a88ced4458aa8656159c70a576eea68b5622ee1997b"}, + {file = "pygame-2.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47a8415d2bd60e6909823b5643a1d4ef5cc29417d817f2a214b255f6fa3a1e4c"}, + {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ff21201df6278b8ca2e948fb148ffe88f5481fd03760f381dd61e45954c7dff"}, + {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29a84b2e02814b9ba925357fd2e1df78efe5e1aa64dc3051eaed95d2b96eafd"}, + {file = "pygame-2.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d78485c4d21133d6b2fbb504cd544ca655e50b6eb551d2995b3aa6035928adda"}, + {file = "pygame-2.5.2-cp38-cp38-win32.whl", hash = "sha256:d851247239548aa357c4a6840fb67adc2d570ce7cb56988d036a723d26b48bff"}, + {file = "pygame-2.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:88d1cdacc2d3471eceab98bf0c93c14d3a8461f93e58e3d926f20d4de3a75554"}, + {file = "pygame-2.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4f1559e7efe4efb9dc19d2d811d702f325d9605f9f6f9ececa39ee6890c798f5"}, + {file = "pygame-2.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf2191b756ceb0e8458a761d0c665b0c70b538570449e0d39b75a5ba94ac5cf0"}, + {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cf2257447ce7f2d6de37e5fb019d2bbe32ed05a5721ace8bc78c2d9beaf3aee"}, + {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cbbfaba2b81434d62631d0b08b85fab16cf4a36e40b80298d3868927e1299"}, + {file = "pygame-2.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daca456d5b9f52e088e06a127dec182b3638a775684fb2260f25d664351cf1ae"}, + {file = "pygame-2.5.2-cp39-cp39-win32.whl", hash = "sha256:3b3e619e33d11c297d7a57a82db40681f9c2c3ae1d5bf06003520b4fe30c435d"}, + {file = "pygame-2.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:1822d534bb7fe756804647b6da2c9ea5d7a62d8796b2e15d172d3be085de28c6"}, + {file = "pygame-2.5.2-pp36-pypy36_pp73-win32.whl", hash = "sha256:e708fc8f709a0fe1d1876489345f2e443d47f3976d33455e2e1e937f972f8677"}, + {file = "pygame-2.5.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c13edebc43c240fb0532969e914f0ccefff5ae7e50b0b788d08ad2c15ef793e4"}, + {file = "pygame-2.5.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:263b4a7cbfc9fe2055abc21b0251cc17dea6dff750f0e1c598919ff350cdbffe"}, + {file = "pygame-2.5.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e58e2b0c791041e4bccafa5bd7650623ba1592b8fe62ae0a276b7d0ecb314b6c"}, + {file = "pygame-2.5.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0bd67426c02ffe6c9827fc4bcbda9442fbc451d29b17c83a3c088c56fef2c90"}, + {file = "pygame-2.5.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dcff6cbba1584cf7732ce1dbdd044406cd4f6e296d13bcb7fba963fb4aeefc9"}, + {file = "pygame-2.5.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce4b6c0bfe44d00bb0998a6517bd0cf9455f642f30f91bc671ad41c05bf6f6ae"}, + {file = "pygame-2.5.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68c4e8e60b725ffc7a6c6ecd9bb5fcc5ed2d6e0e2a2c4a29a8454856ef16ad63"}, + {file = "pygame-2.5.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f3849f97372a3381c66955f99a0d58485ccd513c3d00c030b869094ce6997a6"}, + {file = "pygame-2.5.2.tar.gz", hash = "sha256:c1b89eb5d539e7ac5cf75513125fb5f2f0a2d918b1fd6e981f23bf0ac1b1c24a"}, ] +[[package]] +name = "pygetwindow" +version = "0.0.9" +description = "A simple, cross-platform module for obtaining GUI information on application's windows." +optional = false +python-versions = "*" +files = [ + {file = "PyGetWindow-0.0.9.tar.gz", hash = "sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688"}, +] + +[package.dependencies] +pyrect = "*" + [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" @@ -3496,104 +3408,2858 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pylibsrtp" -version = "0.8.0" +version = "0.10.0" description = "Python wrapper around the libsrtp library" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "pylibsrtp-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e42071588f006da698b821c43a9f4db6c377835eb41378876fd08e6240213fb6"}, - {file = "pylibsrtp-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1da3b1c19c3e1f24bb258076b7fb2e8980a3e1116afdd2569e7904d212f122a7"}, - {file = "pylibsrtp-0.8.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dd443522ebb59aef3fdc06a85cdafdb17052ada3ab02f00e59aac99207409d5"}, - {file = "pylibsrtp-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154f63b43360da574c9af3a81d032a3c51a2e801cb7a71deb9f74a930755df44"}, - {file = "pylibsrtp-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fdf9f2e373b740325e9ea577cc173bef416d84bccafafba8ee16d08db6abea9"}, - {file = "pylibsrtp-0.8.0-cp310-cp310-win32.whl", hash = "sha256:aa729b70d17998fc8f60a137ee2befb65dc883981c9b3dc10c39f4437cd2249e"}, - {file = "pylibsrtp-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:a2e1c8c09f4706e7ca8e78bbbbae837b4ce708c3d6facc6719bcbc601004f1e8"}, - {file = "pylibsrtp-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c52b846acb092b2f728684e6430116b532903b71e788b6713e928bd91cafb5c5"}, - {file = "pylibsrtp-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6d2a11ef5e41bb490e871cced1e9dea35485befb5c1478f1aa5cbd430c934509"}, - {file = "pylibsrtp-0.8.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30380f1fd3976056095352484f38606a2fc05ab14fff03900fc3202201e42967"}, - {file = "pylibsrtp-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f6374312fb94c51b22260e0f620299c7c4f12fad5b75e862b2b2c55e2d493d6"}, - {file = "pylibsrtp-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:754bb1aaac9f3f477dca2c8b3e31b13587e762a182e64e1ed271a4e6715d2f51"}, - {file = "pylibsrtp-0.8.0-cp311-cp311-win32.whl", hash = "sha256:cdf5261d80ae821f4cda90c5835577632db2a6e36af3985d94b922d461ddb34b"}, - {file = "pylibsrtp-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba2c32188595f3c70f1ac44a81f549b118f54de037158ac96929bdf48dcb8145"}, - {file = "pylibsrtp-0.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6462390d7b3e6452e9504088094dadfa7e83d6fe33225e66ed4a483ab8937262"}, - {file = "pylibsrtp-0.8.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:102c4d4198c9e02ed765e2d74322fb86c623554e4425303b15fff9af2dc4f854"}, - {file = "pylibsrtp-0.8.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b1781e8bc43fb07694ec2ee3f82c34eb956c350fd97b781c81b13c175bd786"}, - {file = "pylibsrtp-0.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cddabf775098282667396da37d343b0dd8199cf7f3bec4b150a5ce38c482e30e"}, - {file = "pylibsrtp-0.8.0-cp37-cp37m-win32.whl", hash = "sha256:9ae2f71ac4b1d6d52c38eca609c360685f6c410b1b89f38488f96533c50e6b69"}, - {file = "pylibsrtp-0.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a82c40c28a28383c35d7c163f1cd3a31c418ac5f3e1c129a644c9e521cac8d"}, - {file = "pylibsrtp-0.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1f33bb54320b337dfbafd43b693315b14c7c454258c4dd9b35a5b5f10a2f3b84"}, - {file = "pylibsrtp-0.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3284034b0c4671cda2d0b38f4e85766fe4bd61a55ee3f966ba7c77eb6c96579a"}, - {file = "pylibsrtp-0.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8eda6e155679f070e7ac65fe39287cab6523a75c781dd0a457024fe588438599"}, - {file = "pylibsrtp-0.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:088c9d5cf3b0200cf78b68ab03b4118cb76160baedbee5dac7503dafc6d394f4"}, - {file = "pylibsrtp-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffbba66a97f61ddd24e9eaa2bff967c21e1028fbe0ef35b4b701717e10e33e96"}, - {file = "pylibsrtp-0.8.0-cp38-cp38-win32.whl", hash = "sha256:8a2b71dfddcaa71671970e4ce452293836bad0b93a1c1766d7cffb231c4601e4"}, - {file = "pylibsrtp-0.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:b42f0068409cdcb1e54f2a48fea92bae07232991938601f0c16f837299df1583"}, - {file = "pylibsrtp-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8150b70eb2557ffaae46172ebf86b6e1ae67bb25c207445988d573d4b57e6aa6"}, - {file = "pylibsrtp-0.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5dd8837a522565766f427793ce644ed2d2bcd0d372f8683269e6d525646b7c6"}, - {file = "pylibsrtp-0.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51e06452152a36a97545becf6617141ac68def6df90c1e6857d61432b97d5e0"}, - {file = "pylibsrtp-0.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1de6b0e4e5ceecbe908b0f86db0d9da28fdcb05cc605e5a1f06628540ac0e7a"}, - {file = "pylibsrtp-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c42b2eb3106d34906eedcba9d72f121f6e2f28f061b91ccde4f68af58fc1c84"}, - {file = "pylibsrtp-0.8.0-cp39-cp39-win32.whl", hash = "sha256:684ee6b57be78cdae34ede1641c95eba0ab647f47c12456b6393bfc1425737bd"}, - {file = "pylibsrtp-0.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:6973fbaa0aecb24c4736e953b37afe7245952b4b8b15ab69b236edff04703f5d"}, - {file = "pylibsrtp-0.8.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7333af56ec3f6989cf41c804df42123615f696c3d1e8270f6d4ab51a6e631f14"}, - {file = "pylibsrtp-0.8.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1332e7165a2419033bc90497083345fa802ffe8220e0efc176e892e8be1c19f"}, - {file = "pylibsrtp-0.8.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02d66058ed065163c6aa61fd64a07b7a89a13a5114bc63276ec3a0007cc3aa3e"}, - {file = "pylibsrtp-0.8.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:472f98d128db2791e8931b0260a6309b0258903fe8e6f9669fff115d6e6b094e"}, - {file = "pylibsrtp-0.8.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:89278f1e1ffc6afdcbab4898e04f28f9fd7f15c548d9583b05b691133671d7b7"}, - {file = "pylibsrtp-0.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a9ab76d23295e44d46c4cfd7c12e16b6956d465982aae652588beb62184c6232"}, - {file = "pylibsrtp-0.8.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:836ba84b644c3ccb2155dea8695e8f578774465ff4c921646191be5ae051b756"}, - {file = "pylibsrtp-0.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9aab5ca601a60160d4afe462f8497d726055eb8cd8eeaae5ef07f1bfdac529f"}, - {file = "pylibsrtp-0.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3626cf72519170be626acc5a4a409b5c82879d1d59cfcd0cd834a0dd26d10695"}, - {file = "pylibsrtp-0.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d102822356026aff7f6b2b8dbc0c0d570c13504ea14bcfaf4e41cd14aa494286"}, - {file = "pylibsrtp-0.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:974a810cba9e69b3ce055a4935f725b0fa91d635c0e90b42b0af5514bfb5d147"}, - {file = "pylibsrtp-0.8.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2db61226c3783fde40313b93df7e51d70f28e1de3439ee6f227da10c3f3e277d"}, - {file = "pylibsrtp-0.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bc815735333d87adee37aa8494ec466ed9cb188437ffaf82e01ba403b293022"}, - {file = "pylibsrtp-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c18b542e70b6b995dfb7d79eddf9e5f81c618fb540fc4a52b79bef92f7e34e0"}, - {file = "pylibsrtp-0.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:736ee2ac2b1d7dab1671bc40fab84dc7877ee7abb92cf72218e8b2faeff67c93"}, - {file = "pylibsrtp-0.8.0.tar.gz", hash = "sha256:b2e5191fcf027f81a58db3dec743716ed0e1508c27d0883bcb47730ff380d6f0"}, + {file = "pylibsrtp-0.10.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6a1121ceea3339e0a84842a4a9da0fcf57cc8f99eb60dbf31a46d978b4170e7c"}, + {file = "pylibsrtp-0.10.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca1994e73c6857b0a695fdde94cc5ac846c1b0d5d8766255a1dc2db40857f667"}, + {file = "pylibsrtp-0.10.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb7640b524544603d07bd4373b04c9582c8cfe41d9789d3f492081f053bed9c1"}, + {file = "pylibsrtp-0.10.0-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f13aa945e1dcf8c138bf3d4a6e34056c4c2f69bf9934bc53b320ef14c7317ccc"}, + {file = "pylibsrtp-0.10.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b2ef1c32d1145239dd0fe7b7fbe083334d345df6b4597fc66faf914a32682d9"}, + {file = "pylibsrtp-0.10.0-cp38-abi3-win32.whl", hash = "sha256:8c6fe2576b2ab13942b47db6c2ffe71f5eb1edc1dc3bdd7283169fecd5249e74"}, + {file = "pylibsrtp-0.10.0-cp38-abi3-win_amd64.whl", hash = "sha256:cd965d4b0e9a77b362526cab119f4d9ce39b83f1f20f46c6af8e694b86fa19a7"}, + {file = "pylibsrtp-0.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:582e9771be7ffd060faea215cb4248afdad1356da473df1b8f35c7e382ca3871"}, + {file = "pylibsrtp-0.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70111eeb87e5d3ffb9623e1ea036329dc81fed1282aa93c1f32377862ca0a0d8"}, + {file = "pylibsrtp-0.10.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eda06947ab42fd3737f01a7b98537a5d5908434d37c70488d10e7bd2ff0d520c"}, + {file = "pylibsrtp-0.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:511158499309c3f7e97e1ebeffbf3dd939e641ea553de43cfc02d3576aad5c15"}, + {file = "pylibsrtp-0.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4033481f332331bf14b9705dca69efd09d3809ba4a2ff69914c53dddf39c20c1"}, + {file = "pylibsrtp-0.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1990afa3b1acc2ded0bcb015e38d28eb707af32b4bb0a08ba4bc187148f36a9e"}, + {file = "pylibsrtp-0.10.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2115f91e39cf3718591fac3202df76d606441cabc9057e4a1b97b7e7a3328d9"}, + {file = "pylibsrtp-0.10.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5f971f1f9e4849c5ce38671628b3d1558763941cb4b54a74497026e82b5f68a"}, + {file = "pylibsrtp-0.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ca0e351c15d2d085665a1103d967fc90c9074d4ba60a0b3ed529ef075fd6e9e"}, + {file = "pylibsrtp-0.10.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:fea95747ce124f7a476fb71e0929d122ce6ddf35ae7d6f4eb372707a078c4b40"}, + {file = "pylibsrtp-0.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba342e60035dcdbb04368c95cea7ed2c9639ea34efb68db42cde3cfd6c489e71"}, + {file = "pylibsrtp-0.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95a31a776d993cdc486a6435268a6facac8c92cff560b0b53ccc3a1fd4714f6a"}, + {file = "pylibsrtp-0.10.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e519f9f73cd89404db9008bf7e628f8be4957000f61cee2841b62fcffe267c5"}, + {file = "pylibsrtp-0.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f33dced976a0039b4873d2468fb864795df0b79cdecf9b9a4286fe76099dfb1b"}, + {file = "pylibsrtp-0.10.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e4d9625a9667d2c0843bf9cfa731f815d8b9a04ed9ffe5b98442483b8b236f13"}, + {file = "pylibsrtp-0.10.0.tar.gz", hash = "sha256:d8001912d7f51bd05b4ea3551747930631777fd37892cf3bfe0e541a742e699f"}, ] [package.dependencies] cffi = ">=1.0.0" +[package.extras] +dev = ["coverage[toml] (>=7.2.2)"] + +[[package]] +name = "pymonctl" +version = "0.7" +description = "Cross-Platform toolkit to get info on and control monitors connected" +optional = false +python-versions = "*" +files = [ + {file = "PyMonCtl-0.7-py3-none-any.whl", hash = "sha256:20c1f7f4cf46ff3349fa60d4e63c4ac300a2b907c0d984a1dd64d452b85ea781"}, +] + +[package.dependencies] +pyobjc = {version = ">=8.1", markers = "sys_platform == \"darwin\""} +python-xlib = {version = ">=0.21", markers = "sys_platform == \"linux\""} +pywin32 = {version = ">=302", markers = "sys_platform == \"win32\""} +typing-extensions = ">=4.4.0" + +[package.extras] +dev = ["mypy (>=0.990)", "types-python-xlib (>=0.32)", "types-pywin32 (>=305.0.0.3)", "types-setuptools (>=65.5)"] + +[[package]] +name = "pymsgbox" +version = "1.0.9" +description = "A simple, cross-platform, pure Python module for JavaScript-like message boxes." +optional = false +python-versions = "*" +files = [ + {file = "PyMsgBox-1.0.9.tar.gz", hash = "sha256:2194227de8bff7a3d6da541848705a155dcbb2a06ee120d9f280a1d7f51263ff"}, +] + +[[package]] +name = "pyobjc" +version = "10.1" +description = "Python<->ObjC Interoperability Module" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-10.1-py3-none-any.whl", hash = "sha256:2687ff02217e7b2aba52c6b948bccea864a8f034af6c90528564d496b343c418"}, + {file = "pyobjc-10.1.tar.gz", hash = "sha256:f54baff4c40d53c3fb3812816ebd130d3186805936628cc1f212f95979af5b98"}, +] + +[package.dependencies] +pyobjc-core = "10.1" +pyobjc-framework-Accessibility = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-Accounts = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-AddressBook = "10.1" +pyobjc-framework-AdServices = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-AdSupport = {version = "10.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-AppleScriptKit = "10.1" +pyobjc-framework-AppleScriptObjC = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-ApplicationServices = "10.1" +pyobjc-framework-AppTrackingTransparency = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-AudioVideoBridging = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-AuthenticationServices = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-AutomaticAssessmentConfiguration = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-Automator = "10.1" +pyobjc-framework-AVFoundation = {version = "10.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-AVKit = {version = "10.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-AVRouting = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-BackgroundAssets = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-BusinessChat = {version = "10.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-CalendarStore = {version = "10.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-CallKit = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-CFNetwork = "10.1" +pyobjc-framework-Cinematic = {version = "10.1", markers = "platform_release >= \"23.0\""} +pyobjc-framework-ClassKit = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-CloudKit = {version = "10.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-Cocoa = "10.1" +pyobjc-framework-Collaboration = {version = "10.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-ColorSync = {version = "10.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-Contacts = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-ContactsUI = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-CoreAudio = "10.1" +pyobjc-framework-CoreAudioKit = "10.1" +pyobjc-framework-CoreBluetooth = {version = "10.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-CoreData = "10.1" +pyobjc-framework-CoreHaptics = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-CoreLocation = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-CoreMedia = {version = "10.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-CoreMediaIO = {version = "10.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-CoreMIDI = "10.1" +pyobjc-framework-CoreML = {version = "10.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-CoreMotion = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-CoreServices = "10.1" +pyobjc-framework-CoreSpotlight = {version = "10.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-CoreText = "10.1" +pyobjc-framework-CoreWLAN = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-CryptoTokenKit = {version = "10.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-DataDetection = {version = "10.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-DeviceCheck = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-DictionaryServices = {version = "10.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-DiscRecording = "10.1" +pyobjc-framework-DiscRecordingUI = "10.1" +pyobjc-framework-DiskArbitration = "10.1" +pyobjc-framework-DVDPlayback = "10.1" +pyobjc-framework-EventKit = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-ExceptionHandling = "10.1" +pyobjc-framework-ExecutionPolicy = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-ExtensionKit = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-ExternalAccessory = {version = "10.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-FileProvider = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-FileProviderUI = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-FinderSync = {version = "10.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-FSEvents = {version = "10.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-GameCenter = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-GameController = {version = "10.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-GameKit = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-GameplayKit = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-HealthKit = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-ImageCaptureCore = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-InputMethodKit = {version = "10.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-InstallerPlugins = "10.1" +pyobjc-framework-InstantMessage = {version = "10.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-Intents = {version = "10.1", markers = "platform_release >= \"16.0\""} +pyobjc-framework-IntentsUI = {version = "10.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-IOBluetooth = "10.1" +pyobjc-framework-IOBluetoothUI = "10.1" +pyobjc-framework-IOSurface = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-iTunesLibrary = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-KernelManagement = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-LatentSemanticMapping = "10.1" +pyobjc-framework-LaunchServices = "10.1" +pyobjc-framework-libdispatch = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-libxpc = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-LinkPresentation = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-LocalAuthentication = {version = "10.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-LocalAuthenticationEmbeddedUI = {version = "10.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-MailKit = {version = "10.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-MapKit = {version = "10.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-MediaAccessibility = {version = "10.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-MediaLibrary = {version = "10.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-MediaPlayer = {version = "10.1", markers = "platform_release >= \"16.0\""} +pyobjc-framework-MediaToolbox = {version = "10.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-Metal = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-MetalFX = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-MetalKit = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-MetalPerformanceShaders = {version = "10.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-MetalPerformanceShadersGraph = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-MetricKit = {version = "10.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-MLCompute = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-ModelIO = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-MultipeerConnectivity = {version = "10.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-NaturalLanguage = {version = "10.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-NetFS = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-Network = {version = "10.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-NetworkExtension = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-NotificationCenter = {version = "10.1", markers = "platform_release >= \"14.0\""} +pyobjc-framework-OpenDirectory = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-OSAKit = "10.1" +pyobjc-framework-OSLog = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-PassKit = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-PencilKit = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-PHASE = {version = "10.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-Photos = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-PhotosUI = {version = "10.1", markers = "platform_release >= \"15.0\""} +pyobjc-framework-PreferencePanes = "10.1" +pyobjc-framework-PubSub = {version = "10.1", markers = "platform_release >= \"9.0\" and platform_release < \"18.0\""} +pyobjc-framework-PushKit = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-Quartz = "10.1" +pyobjc-framework-QuickLookThumbnailing = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-ReplayKit = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-SafariServices = {version = "10.1", markers = "platform_release >= \"16.0\""} +pyobjc-framework-SafetyKit = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-SceneKit = {version = "10.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-ScreenCaptureKit = {version = "10.1", markers = "platform_release >= \"21.4\""} +pyobjc-framework-ScreenSaver = "10.1" +pyobjc-framework-ScreenTime = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-ScriptingBridge = {version = "10.1", markers = "platform_release >= \"9.0\""} +pyobjc-framework-SearchKit = "10.1" +pyobjc-framework-Security = "10.1" +pyobjc-framework-SecurityFoundation = "10.1" +pyobjc-framework-SecurityInterface = "10.1" +pyobjc-framework-SensitiveContentAnalysis = {version = "10.1", markers = "platform_release >= \"23.0\""} +pyobjc-framework-ServiceManagement = {version = "10.1", markers = "platform_release >= \"10.0\""} +pyobjc-framework-SharedWithYou = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-SharedWithYouCore = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-ShazamKit = {version = "10.1", markers = "platform_release >= \"21.0\""} +pyobjc-framework-Social = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-SoundAnalysis = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-Speech = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-SpriteKit = {version = "10.1", markers = "platform_release >= \"13.0\""} +pyobjc-framework-StoreKit = {version = "10.1", markers = "platform_release >= \"11.0\""} +pyobjc-framework-Symbols = {version = "10.1", markers = "platform_release >= \"23.0\""} +pyobjc-framework-SyncServices = "10.1" +pyobjc-framework-SystemConfiguration = "10.1" +pyobjc-framework-SystemExtensions = {version = "10.1", markers = "platform_release >= \"19.0\""} +pyobjc-framework-ThreadNetwork = {version = "10.1", markers = "platform_release >= \"22.0\""} +pyobjc-framework-UniformTypeIdentifiers = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-UserNotifications = {version = "10.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-UserNotificationsUI = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-VideoSubscriberAccount = {version = "10.1", markers = "platform_release >= \"18.0\""} +pyobjc-framework-VideoToolbox = {version = "10.1", markers = "platform_release >= \"12.0\""} +pyobjc-framework-Virtualization = {version = "10.1", markers = "platform_release >= \"20.0\""} +pyobjc-framework-Vision = {version = "10.1", markers = "platform_release >= \"17.0\""} +pyobjc-framework-WebKit = "10.1" + +[package.extras] +allbindings = ["pyobjc-core (==10.1)", "pyobjc-framework-AVFoundation (==10.1)", "pyobjc-framework-AVKit (==10.1)", "pyobjc-framework-AVRouting (==10.1)", "pyobjc-framework-Accessibility (==10.1)", "pyobjc-framework-Accounts (==10.1)", "pyobjc-framework-AdServices (==10.1)", "pyobjc-framework-AdSupport (==10.1)", "pyobjc-framework-AddressBook (==10.1)", "pyobjc-framework-AppTrackingTransparency (==10.1)", "pyobjc-framework-AppleScriptKit (==10.1)", "pyobjc-framework-AppleScriptObjC (==10.1)", "pyobjc-framework-ApplicationServices (==10.1)", "pyobjc-framework-AudioVideoBridging (==10.1)", "pyobjc-framework-AuthenticationServices (==10.1)", "pyobjc-framework-AutomaticAssessmentConfiguration (==10.1)", "pyobjc-framework-Automator (==10.1)", "pyobjc-framework-BackgroundAssets (==10.1)", "pyobjc-framework-BusinessChat (==10.1)", "pyobjc-framework-CFNetwork (==10.1)", "pyobjc-framework-CalendarStore (==10.1)", "pyobjc-framework-CallKit (==10.1)", "pyobjc-framework-Cinematic (==10.1)", "pyobjc-framework-ClassKit (==10.1)", "pyobjc-framework-CloudKit (==10.1)", "pyobjc-framework-Cocoa (==10.1)", "pyobjc-framework-Collaboration (==10.1)", "pyobjc-framework-ColorSync (==10.1)", "pyobjc-framework-Contacts (==10.1)", "pyobjc-framework-ContactsUI (==10.1)", "pyobjc-framework-CoreAudio (==10.1)", "pyobjc-framework-CoreAudioKit (==10.1)", "pyobjc-framework-CoreBluetooth (==10.1)", "pyobjc-framework-CoreData (==10.1)", "pyobjc-framework-CoreHaptics (==10.1)", "pyobjc-framework-CoreLocation (==10.1)", "pyobjc-framework-CoreMIDI (==10.1)", "pyobjc-framework-CoreML (==10.1)", "pyobjc-framework-CoreMedia (==10.1)", "pyobjc-framework-CoreMediaIO (==10.1)", "pyobjc-framework-CoreMotion (==10.1)", "pyobjc-framework-CoreServices (==10.1)", "pyobjc-framework-CoreSpotlight (==10.1)", "pyobjc-framework-CoreText (==10.1)", "pyobjc-framework-CoreWLAN (==10.1)", "pyobjc-framework-CryptoTokenKit (==10.1)", "pyobjc-framework-DVDPlayback (==10.1)", "pyobjc-framework-DataDetection (==10.1)", "pyobjc-framework-DeviceCheck (==10.1)", "pyobjc-framework-DictionaryServices (==10.1)", "pyobjc-framework-DiscRecording (==10.1)", "pyobjc-framework-DiscRecordingUI (==10.1)", "pyobjc-framework-DiskArbitration (==10.1)", "pyobjc-framework-EventKit (==10.1)", "pyobjc-framework-ExceptionHandling (==10.1)", "pyobjc-framework-ExecutionPolicy (==10.1)", "pyobjc-framework-ExtensionKit (==10.1)", "pyobjc-framework-ExternalAccessory (==10.1)", "pyobjc-framework-FSEvents (==10.1)", "pyobjc-framework-FileProvider (==10.1)", "pyobjc-framework-FileProviderUI (==10.1)", "pyobjc-framework-FinderSync (==10.1)", "pyobjc-framework-GameCenter (==10.1)", "pyobjc-framework-GameController (==10.1)", "pyobjc-framework-GameKit (==10.1)", "pyobjc-framework-GameplayKit (==10.1)", "pyobjc-framework-HealthKit (==10.1)", "pyobjc-framework-IOBluetooth (==10.1)", "pyobjc-framework-IOBluetoothUI (==10.1)", "pyobjc-framework-IOSurface (==10.1)", "pyobjc-framework-ImageCaptureCore (==10.1)", "pyobjc-framework-InputMethodKit (==10.1)", "pyobjc-framework-InstallerPlugins (==10.1)", "pyobjc-framework-InstantMessage (==10.1)", "pyobjc-framework-Intents (==10.1)", "pyobjc-framework-IntentsUI (==10.1)", "pyobjc-framework-KernelManagement (==10.1)", "pyobjc-framework-LatentSemanticMapping (==10.1)", "pyobjc-framework-LaunchServices (==10.1)", "pyobjc-framework-LinkPresentation (==10.1)", "pyobjc-framework-LocalAuthentication (==10.1)", "pyobjc-framework-LocalAuthenticationEmbeddedUI (==10.1)", "pyobjc-framework-MLCompute (==10.1)", "pyobjc-framework-MailKit (==10.1)", "pyobjc-framework-MapKit (==10.1)", "pyobjc-framework-MediaAccessibility (==10.1)", "pyobjc-framework-MediaLibrary (==10.1)", "pyobjc-framework-MediaPlayer (==10.1)", "pyobjc-framework-MediaToolbox (==10.1)", "pyobjc-framework-Metal (==10.1)", "pyobjc-framework-MetalFX (==10.1)", "pyobjc-framework-MetalKit (==10.1)", "pyobjc-framework-MetalPerformanceShaders (==10.1)", "pyobjc-framework-MetalPerformanceShadersGraph (==10.1)", "pyobjc-framework-MetricKit (==10.1)", "pyobjc-framework-ModelIO (==10.1)", "pyobjc-framework-MultipeerConnectivity (==10.1)", "pyobjc-framework-NaturalLanguage (==10.1)", "pyobjc-framework-NetFS (==10.1)", "pyobjc-framework-Network (==10.1)", "pyobjc-framework-NetworkExtension (==10.1)", "pyobjc-framework-NotificationCenter (==10.1)", "pyobjc-framework-OSAKit (==10.1)", "pyobjc-framework-OSLog (==10.1)", "pyobjc-framework-OpenDirectory (==10.1)", "pyobjc-framework-PHASE (==10.1)", "pyobjc-framework-PassKit (==10.1)", "pyobjc-framework-PencilKit (==10.1)", "pyobjc-framework-Photos (==10.1)", "pyobjc-framework-PhotosUI (==10.1)", "pyobjc-framework-PreferencePanes (==10.1)", "pyobjc-framework-PubSub (==10.1)", "pyobjc-framework-PushKit (==10.1)", "pyobjc-framework-Quartz (==10.1)", "pyobjc-framework-QuickLookThumbnailing (==10.1)", "pyobjc-framework-ReplayKit (==10.1)", "pyobjc-framework-SafariServices (==10.1)", "pyobjc-framework-SafetyKit (==10.1)", "pyobjc-framework-SceneKit (==10.1)", "pyobjc-framework-ScreenCaptureKit (==10.1)", "pyobjc-framework-ScreenSaver (==10.1)", "pyobjc-framework-ScreenTime (==10.1)", "pyobjc-framework-ScriptingBridge (==10.1)", "pyobjc-framework-SearchKit (==10.1)", "pyobjc-framework-Security (==10.1)", "pyobjc-framework-SecurityFoundation (==10.1)", "pyobjc-framework-SecurityInterface (==10.1)", "pyobjc-framework-SensitiveContentAnalysis (==10.1)", "pyobjc-framework-ServiceManagement (==10.1)", "pyobjc-framework-SharedWithYou (==10.1)", "pyobjc-framework-SharedWithYouCore (==10.1)", "pyobjc-framework-ShazamKit (==10.1)", "pyobjc-framework-Social (==10.1)", "pyobjc-framework-SoundAnalysis (==10.1)", "pyobjc-framework-Speech (==10.1)", "pyobjc-framework-SpriteKit (==10.1)", "pyobjc-framework-StoreKit (==10.1)", "pyobjc-framework-Symbols (==10.1)", "pyobjc-framework-SyncServices (==10.1)", "pyobjc-framework-SystemConfiguration (==10.1)", "pyobjc-framework-SystemExtensions (==10.1)", "pyobjc-framework-ThreadNetwork (==10.1)", "pyobjc-framework-UniformTypeIdentifiers (==10.1)", "pyobjc-framework-UserNotifications (==10.1)", "pyobjc-framework-UserNotificationsUI (==10.1)", "pyobjc-framework-VideoSubscriberAccount (==10.1)", "pyobjc-framework-VideoToolbox (==10.1)", "pyobjc-framework-Virtualization (==10.1)", "pyobjc-framework-Vision (==10.1)", "pyobjc-framework-WebKit (==10.1)", "pyobjc-framework-iTunesLibrary (==10.1)", "pyobjc-framework-libdispatch (==10.1)", "pyobjc-framework-libxpc (==10.1)"] + +[[package]] +name = "pyobjc-core" +version = "10.1" +description = "Python<->ObjC Interoperability Module" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-core-10.1.tar.gz", hash = "sha256:1844f1c8e282839e6fdcb9a9722396c1c12fb1e9331eb68828a26f28a3b2b2b1"}, + {file = "pyobjc_core-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2a72a88222539ad07b5c8be411edc52ff9147d7cef311a2c849869d7bb9603fd"}, + {file = "pyobjc_core-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fe1b9987b7b0437685fb529832876c2a8463500114960d4e76bb8ae96b6bf208"}, + {file = "pyobjc_core-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9f628779c345d3abd0e20048fb0e256d894c22254577a81a6dcfdb92c3647682"}, + {file = "pyobjc_core-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a9e5a2de19238787d24cfa7def6b7fbb94bbe89c0e3109f71c1cb108e8ab44"}, + {file = "pyobjc_core-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:2d43205d3a784aa87055b84c0ec0dfa76498e5f18d1ad16bdc58a3dcf5a7d5d0"}, + {file = "pyobjc_core-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0aa9799b5996a893944999a2f1afcf1de119cab3551c169ad9f54d12e1d38c99"}, +] + +[[package]] +name = "pyobjc-framework-accessibility" +version = "10.1" +description = "Wrappers for the framework Accessibility on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Accessibility-10.1.tar.gz", hash = "sha256:70b812cf2b04b57a520c3fde9df4184c2783795fb355b416a8058114e52ad24a"}, + {file = "pyobjc_framework_Accessibility-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ef8524f2b67240fb3c3f7928f2d73e9050a8b80e18db8336e7ba4d4ba1d368df"}, + {file = "pyobjc_framework_Accessibility-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:d351d7799b197524a200c54bebe450e87f9c52812f6162811b7e84823e8946df"}, + {file = "pyobjc_framework_Accessibility-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:1dc4e0acedaa0232103714dd2daa3244a628426bee6e933078c89e8eb86b7961"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-accounts" +version = "10.1" +description = "Wrappers for the framework Accounts on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Accounts-10.1.tar.gz", hash = "sha256:cb436af5b60f1d6a8a59f94d84ea6decba663598d5624fce29a0babf6fad0a89"}, + {file = "pyobjc_framework_Accounts-10.1-py2.py3-none-any.whl", hash = "sha256:30da31a76f2cfd0a4021eff4d4ff69e0a70b2f293290372f5909ae267d15a010"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-addressbook" +version = "10.1" +description = "Wrappers for the framework AddressBook on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AddressBook-10.1.tar.gz", hash = "sha256:9b8e01da07703990f0e745945b01cc75c59ade41913edbd6824194e21522efff"}, + {file = "pyobjc_framework_AddressBook-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:2c6cb2278161ed55fba8b47515ff777a95265e484c51ad7a1c952747d8a411ee"}, + {file = "pyobjc_framework_AddressBook-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:10236b9112c8e5d83526804ca734a5f176bba435c2451c4b43c1247e76d9f73d"}, + {file = "pyobjc_framework_AddressBook-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:e4305cf6366fa2e01040f490360283f572103be0a45d190774869915c2707c54"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-adservices" +version = "10.1" +description = "Wrappers for the framework AdServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AdServices-10.1.tar.gz", hash = "sha256:54d2dd3084374213e31760bae9df1e6e9da3b3f1cc04787dae3ad53f8fc12f69"}, + {file = "pyobjc_framework_AdServices-10.1-py2.py3-none-any.whl", hash = "sha256:79ec6eb744635b72ffd0bdd5e55cb5ec57603633716861bbf40b236d8dba0dfd"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-adsupport" +version = "10.1" +description = "Wrappers for the framework AdSupport on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AdSupport-10.1.tar.gz", hash = "sha256:df6b2d1cc1202905dcf6bcdbf35121acc45c346a57b1048f5f4d1ea15bc29c9c"}, + {file = "pyobjc_framework_AdSupport-10.1-py2.py3-none-any.whl", hash = "sha256:d61f2e44f6c2ed5c33b6520754ef8ea22470f8ac3154912aa44bee4fb792255c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-applescriptkit" +version = "10.1" +description = "Wrappers for the framework AppleScriptKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AppleScriptKit-10.1.tar.gz", hash = "sha256:e41cd0037cbe0af4ffecc42339d1b6255f2539dfb6dedf4f2ae00ac1a260eecf"}, + {file = "pyobjc_framework_AppleScriptKit-10.1-py2.py3-none-any.whl", hash = "sha256:b88bc8ae9e000d382c3e1d72b3c4f39499323fbe88cc84af259925448c187387"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-applescriptobjc" +version = "10.1" +description = "Wrappers for the framework AppleScriptObjC on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AppleScriptObjC-10.1.tar.gz", hash = "sha256:cfcec31b25a4c201188936347697ff3eb1f79885a43af26559a572391c50cdf9"}, + {file = "pyobjc_framework_AppleScriptObjC-10.1-py2.py3-none-any.whl", hash = "sha256:500ed0e39bf2a4f2413d8d6dc398bb58f233ca3670f6946aa5c6d14d1b563465"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-applicationservices" +version = "10.1" +description = "Wrappers for the framework ApplicationServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ApplicationServices-10.1.tar.gz", hash = "sha256:bb780eabadad0fbf36a128041dccfd71e30bbeb6b110852d37fd5c98f4a2ec04"}, + {file = "pyobjc_framework_ApplicationServices-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a74a0922b48ad5ac4e402a1ac5dda5d6ee0d177870b7e244be61bc95d639ba85"}, + {file = "pyobjc_framework_ApplicationServices-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff352c33cad3f7bf8dd9b955ebb5db02d451d88eb04478d83edf0edd0cc8bf5d"}, + {file = "pyobjc_framework_ApplicationServices-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6d0706d5d9436298c8d619a1bb5be11a1f4ff9f4733797a393c6a706568de110"}, + {file = "pyobjc_framework_ApplicationServices-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:95bd111583c3bf20656393c2a056a457b0cf08c76c0ab27cfcaedf92f707e8a9"}, + {file = "pyobjc_framework_ApplicationServices-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:90a2350ddae3d9fb7b2e35e3b672b64854edae497fda8d7d4d798679c8280fed"}, + {file = "pyobjc_framework_ApplicationServices-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8bc830ac60b73a4cab24d1b1fdd8b044f25fe02e0af63a92cd96c43a51808c96"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreText = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-apptrackingtransparency" +version = "10.1" +description = "Wrappers for the framework AppTrackingTransparency on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AppTrackingTransparency-10.1.tar.gz", hash = "sha256:7d75a1d2c07b4d60e79c014b509f7a217b8e43ffb856b05aac5e12dfb03aa662"}, + {file = "pyobjc_framework_AppTrackingTransparency-10.1-py2.py3-none-any.whl", hash = "sha256:5dee7e163a6b325315410ca4929f1e07162403fc0f62d7d6a8dd504b544e1626"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-audiovideobridging" +version = "10.1" +description = "Wrappers for the framework AudioVideoBridging on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AudioVideoBridging-10.1.tar.gz", hash = "sha256:73d049a9d203541c12a672af37676c8dddf68217a3e9212510544cb457e77db0"}, + {file = "pyobjc_framework_AudioVideoBridging-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:574ead9349db4d37ec6db865cf71d8fdf74d5b4d4b577aa5c56c77a5c17f4fff"}, + {file = "pyobjc_framework_AudioVideoBridging-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e9ea894545e5ed1fa9b772dcea876bdb16dac9300e021a81f8b92ec8ed876efb"}, + {file = "pyobjc_framework_AudioVideoBridging-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:be025276db7bf431361f908c45af631c5c97a138069127ca43e679640fd2b935"}, + {file = "pyobjc_framework_AudioVideoBridging-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8d470904288e9ea7a9fb758cb704cbbebaec941c1e11d358c5260f117cbcad6"}, + {file = "pyobjc_framework_AudioVideoBridging-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a4ad2cb237ffaa3868eed2ed8869488cb44a8a85a63b2dfe6421be2cb5cbde9e"}, + {file = "pyobjc_framework_AudioVideoBridging-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:41e9ed25b14b30e5eb488a8278fd86cb0973a5677698b534a18c4917b7ec9f9d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-authenticationservices" +version = "10.1" +description = "Wrappers for the framework AuthenticationServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AuthenticationServices-10.1.tar.gz", hash = "sha256:2d686019564f18390ac16d3b225c6c8fead03d929e8cee16942fc532599e15be"}, + {file = "pyobjc_framework_AuthenticationServices-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:364b4f94171c78d5da9172fdf30ef71958da010d923f6fc8f673f8d2e3c8e9ef"}, + {file = "pyobjc_framework_AuthenticationServices-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:09636bd6614d440e0475ba05beba42aa79a73c4fe310e9e79dea4821e57685ae"}, + {file = "pyobjc_framework_AuthenticationServices-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:dd03dc0c4ad5c40a688ceca813b5c05ae99b72e6201a5a700d1d2722eee8fba3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-automaticassessmentconfiguration" +version = "10.1" +description = "Wrappers for the framework AutomaticAssessmentConfiguration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AutomaticAssessmentConfiguration-10.1.tar.gz", hash = "sha256:c8f32f5586f7d7f9fd12343714c7439a1dfad5b5393f403aee440b5f91ef9f7d"}, + {file = "pyobjc_framework_AutomaticAssessmentConfiguration-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf009cddaa8d62eedaeb4878cc7acab80f4e9bb0bd83a5dff79590bab08b81ce"}, + {file = "pyobjc_framework_AutomaticAssessmentConfiguration-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c0ea6fa98e07a9cbcd90b7482022be5e1dc99e3170dcf2d4937ab17c5c2879dd"}, + {file = "pyobjc_framework_AutomaticAssessmentConfiguration-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4d47b95c515781fa5553443f38782f5e9b1aa7c1938449bcbb2377776441c54c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-automator" +version = "10.1" +description = "Wrappers for the framework Automator on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Automator-10.1.tar.gz", hash = "sha256:0e95fc90a2930d108d38b61b4365f3678edd5aa25d26598fe39924c890813e80"}, + {file = "pyobjc_framework_Automator-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5c46ca5a97f6193432ad5195f6dfc261d66f70aea8371aa04f5c0ef85eb959f9"}, + {file = "pyobjc_framework_Automator-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e16540ca8f432de665997566e1cf1b43e8c7bea90a3460ab0aaccdb51bdac13c"}, + {file = "pyobjc_framework_Automator-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:0a8b26890e1b0728c7150cd81dfb7c3d091752e71550a5a8db27c703915b7f40"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-avfoundation" +version = "10.1" +description = "Wrappers for the framework AVFoundation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AVFoundation-10.1.tar.gz", hash = "sha256:07e065c6904fbd6afc434a79888461cdd4097b4153dd592dcbe9c8bef01ee701"}, + {file = "pyobjc_framework_AVFoundation-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3475f2a5c18cab80a23266470bc7014a88c8e1e8894e96f9f75e960b82679723"}, + {file = "pyobjc_framework_AVFoundation-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fad5c9190d633f51193a62c4354f2fb7be3511c31a0c58f17e351bb30bfadad3"}, + {file = "pyobjc_framework_AVFoundation-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:6ee76be15a6ad7caf9db71c682fb677d29df6c1bb2972ed2f21283f1b3e99f45"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreAudio = ">=10.1" +pyobjc-framework-CoreMedia = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-avkit" +version = "10.1" +description = "Wrappers for the framework AVKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AVKit-10.1.tar.gz", hash = "sha256:15779995d4bb3b231a09d9032cf42e8f2681e4271ee677076a08c60a1b45fac7"}, + {file = "pyobjc_framework_AVKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e73da23397f0d9397a5f78223b06a49873d11cce71f06d486316a006220b587"}, + {file = "pyobjc_framework_AVKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2ea71aa0c9230c37da6dab710b237ea67ea16a5ed2cd5f6123a562c8c6b6fa20"}, + {file = "pyobjc_framework_AVKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:3c00b4448d0480e92d7a0dfe62d92d42554ddb45c7183c256931e47dafca1dce"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-avrouting" +version = "10.1" +description = "Wrappers for the framework AVRouting on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-AVRouting-10.1.tar.gz", hash = "sha256:148fc29d0d5e73fb23ed64edede3f74d902ec41b7a7869435816a7a1b37aa038"}, + {file = "pyobjc_framework_AVRouting-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:2a2d6524ac870a0b022beb33f0a9ec8870dfb62524d778b7cb54b7946705a3ac"}, + {file = "pyobjc_framework_AVRouting-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:643412674490719dc05c3e4c010e464d50b51e834428e97739510f513ecc008d"}, + {file = "pyobjc_framework_AVRouting-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:103e99db20099331afe637d4bcc39ec7c5d8fe3edefa2dd0a865d6f5d15b0f65"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-backgroundassets" +version = "10.1" +description = "Wrappers for the framework BackgroundAssets on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-BackgroundAssets-10.1.tar.gz", hash = "sha256:0a770f77f7fe6d715cf02e95a5efb70895ee19736cf0fa0ecbb3c320f4fa3430"}, + {file = "pyobjc_framework_BackgroundAssets-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:82bfc758b8c542e0b155a922e0dc901fdcd6b6a7574f4575725cfadb8d248825"}, + {file = "pyobjc_framework_BackgroundAssets-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a4f6e2dea9f2cb507e94e0c3c621e2e6af613770a8595ff17aedb34dc2fa56b4"}, + {file = "pyobjc_framework_BackgroundAssets-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4dfe00a649dd7c7aee0f25daf96c8c35438ed69ec324bcad81d5a87110759a72"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-businesschat" +version = "10.1" +description = "Wrappers for the framework BusinessChat on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-BusinessChat-10.1.tar.gz", hash = "sha256:f361139464532d84bb29d520f2b045a4a63e960d07a0dd574c6c15dd67f890ed"}, + {file = "pyobjc_framework_BusinessChat-10.1-py2.py3-none-any.whl", hash = "sha256:60df5660a9a90a461c68a6cb49326c25e81f3412e951e84be7ccc98b62eb5404"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-calendarstore" +version = "10.1" +description = "Wrappers for the framework CalendarStore on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CalendarStore-10.1.tar.gz", hash = "sha256:6274d7eb94353813aefca236276c5b6dc6445a48fff39e832478db17c47e34c1"}, + {file = "pyobjc_framework_CalendarStore-10.1-py2.py3-none-any.whl", hash = "sha256:cbd8ec495d9b13cc986b018d8740e25a4e18a25732ee19de1311f0c30ab53120"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-callkit" +version = "10.1" +description = "Wrappers for the framework CallKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CallKit-10.1.tar.gz", hash = "sha256:9a5165f35e31d98b7d1539c9b979cabd01064926903389fc558cbc71bf86ddd4"}, + {file = "pyobjc_framework_CallKit-10.1-py2.py3-none-any.whl", hash = "sha256:f82e791b2dbae4adfcc596949975573309a0127ba02d4c35743501f6665ec610"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-cfnetwork" +version = "10.1" +description = "Wrappers for the framework CFNetwork on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CFNetwork-10.1.tar.gz", hash = "sha256:898fa3ec863b9d72b3262135e1b0a24bc73879b65c69a2a7b213fe840e2a11de"}, + {file = "pyobjc_framework_CFNetwork-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:82f6fa09d67e25ef1cd92596b25328a6c295341c40a572e899c9e858ce949a1d"}, + {file = "pyobjc_framework_CFNetwork-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c598f18e50480a92df3c69c22cd1752844eb487176ada5e1c1b80670fb05e4eb"}, + {file = "pyobjc_framework_CFNetwork-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:90697ae10c7fb83d81f25d3800f33846329121bedefd495b45d47a0f0d996a73"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-cinematic" +version = "10.1" +description = "Wrappers for the framework Cinematic on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Cinematic-10.1.tar.gz", hash = "sha256:a1210338de5a739b00304555ce15b70b36deebdbd3c6940f8e9531253219edce"}, + {file = "pyobjc_framework_Cinematic-10.1-py2.py3-none-any.whl", hash = "sha256:73408d3bfd9b08389eb6787b0b5df4fe9c351c936fa9b1f95a9c723951e9a988"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-AVFoundation = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreMedia = ">=10.1" +pyobjc-framework-Metal = ">=10.1" + +[[package]] +name = "pyobjc-framework-classkit" +version = "10.1" +description = "Wrappers for the framework ClassKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ClassKit-10.1.tar.gz", hash = "sha256:baf79b1296662525d0fa486d4488720cceebe63595765cfeade61aeb78a4216f"}, + {file = "pyobjc_framework_ClassKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:502949573701363947bf64f7ac9dedab7247037c0e53c7db080c871f3ca52aa8"}, + {file = "pyobjc_framework_ClassKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e6d7c2e8b87b285ce21582c602be23960349e23111c8d02bcc3b9192090b437e"}, + {file = "pyobjc_framework_ClassKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:5ac34c1d491e15f81df83b406a281d3176fff8476e053bb8476cad7e4fa102e7"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-cloudkit" +version = "10.1" +description = "Wrappers for the framework CloudKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CloudKit-10.1.tar.gz", hash = "sha256:8f0109f29ac6554c22cc21c06f6fd0a23e3e49556b0ab2532eb1d69ac2a7cd96"}, + {file = "pyobjc_framework_CloudKit-10.1-py2.py3-none-any.whl", hash = "sha256:ffdedaaa8384a64df6b30d45c834dffa002a63b8e74578012b6261780f31c28c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Accounts = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreData = ">=10.1" +pyobjc-framework-CoreLocation = ">=10.1" + +[[package]] +name = "pyobjc-framework-cocoa" +version = "10.1" +description = "Wrappers for the Cocoa frameworks on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Cocoa-10.1.tar.gz", hash = "sha256:8faaf1292a112e488b777d0c19862d993f3f384f3927dc6eca0d8d2221906a14"}, + {file = "pyobjc_framework_Cocoa-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e82c2e20b89811d92a7e6e487b6980f360b7c142e2576e90f0e7569caf8202b"}, + {file = "pyobjc_framework_Cocoa-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0860a9beb7e5c72a1f575679a6d1428a398fa19ad710fb116df899972912e304"}, + {file = "pyobjc_framework_Cocoa-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:34b791ea740e1afce211f19334e45469fea9a48d8fce5072e146199fd19ff49f"}, + {file = "pyobjc_framework_Cocoa-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1398c1a9bebad1a0f2549980e20f4aade00c341b9bac56b4493095a65917d34a"}, + {file = "pyobjc_framework_Cocoa-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:22be21226e223d26c9e77645564225787f2b12a750dd17c7ad99c36f428eda14"}, + {file = "pyobjc_framework_Cocoa-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0280561f4fb98a864bd23f2c480d907b0edbffe1048654f5dfab160cea8198e6"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" + +[[package]] +name = "pyobjc-framework-collaboration" +version = "10.1" +description = "Wrappers for the framework Collaboration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Collaboration-10.1.tar.gz", hash = "sha256:e85c6bd8b74b1707f66847ed71de077565d5e9fe6e7ed4db3cdafc2408723da5"}, + {file = "pyobjc_framework_Collaboration-10.1-py2.py3-none-any.whl", hash = "sha256:9a2137aaed1ad71bf6c92c7c275253c2dc6f0062af9d2d8a1590d00bf30c1ecb"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-colorsync" +version = "10.1" +description = "Wrappers for the framework ColorSync on Mac OS X" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ColorSync-10.1.tar.gz", hash = "sha256:2c6ee65dfca6bc41f0e9dffaf1adebc78a7fb5cee63740b092ade226710c1c32"}, + {file = "pyobjc_framework_ColorSync-10.1-py2.py3-none-any.whl", hash = "sha256:58596365b270453c3ce10bb168383c615321fa377a983eba3021f664c98f852a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-contacts" +version = "10.1" +description = "Wrappers for the framework Contacts on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Contacts-10.1.tar.gz", hash = "sha256:949d61ff7f4f07956949f8945ad627ffa89cce3d10af9442591e519791a25cc4"}, + {file = "pyobjc_framework_Contacts-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b10c068b5a79fcb0240ea4cd1048162277f36567a84333a0bd0168f851168f99"}, + {file = "pyobjc_framework_Contacts-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a3bb6fb24deae41a0879ac321e6401b43e5fbedba0a75ced67b2048a4852c3ff"}, + {file = "pyobjc_framework_Contacts-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:16556f06202b1b4fd9da8e3186b6140b582a4032437cdab2f5f8b32b24f3e3ed"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-contactsui" +version = "10.1" +description = "Wrappers for the framework ContactsUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ContactsUI-10.1.tar.gz", hash = "sha256:0b97e4c5599ab269f53597dd8f47a45599434c833e72185d5d3a257413a6faf4"}, + {file = "pyobjc_framework_ContactsUI-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5c70ff6b07e48331f25138bc159f7215d9b5d6825da844fec26ba403aad53f52"}, + {file = "pyobjc_framework_ContactsUI-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:876c1280fcb13c89a5fd89e7c3ace04bfd3c3b418cb64b6579dcbee1e9156377"}, + {file = "pyobjc_framework_ContactsUI-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:a5ee22f1e893eb79633ed425972e50c5ec9b0a1d20cf6fbf21bf68d1bbfec436"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Contacts = ">=10.1" + +[[package]] +name = "pyobjc-framework-coreaudio" +version = "10.1" +description = "Wrappers for the framework CoreAudio on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreAudio-10.1.tar.gz", hash = "sha256:713ca82fc363ea6cf373d2db0b183f39058bcadceb8229d9e8839b783104f8e2"}, + {file = "pyobjc_framework_CoreAudio-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9348f613a1f35bbeb7d1d899e2ee3876881cd0433e59f584f30ba96e179d960a"}, + {file = "pyobjc_framework_CoreAudio-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0192dddd2f99db51cdb0959e80f29f9f531ba8bd0421e06ae9212f34a05c48a"}, + {file = "pyobjc_framework_CoreAudio-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b1a4612ce87dfcca3c939ec5885d4578955f5ff4d017f95d4459d5fb3bdc8970"}, + {file = "pyobjc_framework_CoreAudio-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:678d2b916850daf7fe38a95af0f73b4dd39b463ea87ec36fe287d81d050c31f7"}, + {file = "pyobjc_framework_CoreAudio-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:807fa54de91d53ff64537e50aa123c5b262952c57eea6928ecb3d526078229c2"}, + {file = "pyobjc_framework_CoreAudio-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:db149cabae1b91ea437536e1741b6e7573a71ec2aae4274318172936a5ac7190"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coreaudiokit" +version = "10.1" +description = "Wrappers for the framework CoreAudioKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreAudioKit-10.1.tar.gz", hash = "sha256:85472aaee6360940f679a5e068b5a21160f8cee676d9fd0937b43b39c447d78e"}, + {file = "pyobjc_framework_CoreAudioKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:bde3012be239328fdc928d0ff9da9f4627e6ab4832e05faaa0c0ea4e11078d14"}, + {file = "pyobjc_framework_CoreAudioKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:43e9643ce390e36c64dca98a1bbcb0c2c282c527d31eb52aa2b7a18e2f7c97d1"}, + {file = "pyobjc_framework_CoreAudioKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:65bb2c5870b1739703fce056cdc4daddcdcf644c1ddcb590e4b88b5ed2fc45a4"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreAudio = ">=10.1" + +[[package]] +name = "pyobjc-framework-corebluetooth" +version = "10.1" +description = "Wrappers for the framework CoreBluetooth on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreBluetooth-10.1.tar.gz", hash = "sha256:81f50fcd9ee24332f1ad85798d489cfc05be739fcc1389caa6d682e034215efd"}, + {file = "pyobjc_framework_CoreBluetooth-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:145540ae4f35992774e559840a778554f3d3d29b359ff6d7f450c954cacccf0f"}, + {file = "pyobjc_framework_CoreBluetooth-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1ef97e8479895048fa96d5afa2f88139a8432158d6b0fb80ad1db03666c1d4ad"}, + {file = "pyobjc_framework_CoreBluetooth-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:e8bce7f425caa55a87b7519eff03eaa7d08ff5e5e09e9318706d3f5087b63b08"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coredata" +version = "10.1" +description = "Wrappers for the framework CoreData on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreData-10.1.tar.gz", hash = "sha256:01dfbf2bfdaa4e0aa3e636025dc868ddb62aedf710890e6af94106278f1659aa"}, + {file = "pyobjc_framework_CoreData-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ff280c893c6d472168696fa0732690809af2694167081b5db87395c25cdf6e27"}, + {file = "pyobjc_framework_CoreData-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c51d8e4723ed113684d0ddd4240900a937682859a9e75d830f35783098f04e95"}, + {file = "pyobjc_framework_CoreData-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:a8a8d509ff17f65f4cec7fb35d77a21937f2c8232b5ce357e783cbf971616ad9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-corehaptics" +version = "10.1" +description = "Wrappers for the framework CoreHaptics on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreHaptics-10.1.tar.gz", hash = "sha256:87c1913078963b2d7dba231839566f831f47499c4c029f8beaa46209630e75e1"}, + {file = "pyobjc_framework_CoreHaptics-10.1-py2.py3-none-any.whl", hash = "sha256:ae6143c041b0846a58199826c0094cfb2fb9080f139c93e6b63f51a6b2766552"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-corelocation" +version = "10.1" +description = "Wrappers for the framework CoreLocation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreLocation-10.1.tar.gz", hash = "sha256:f43637443c4386233c52b0af3131a545968229543f7b0050764298cac1604fd8"}, + {file = "pyobjc_framework_CoreLocation-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:66bad050f37966526017763e5a8c424e257a0974cfbe0c8875fa149bdc1d41c2"}, + {file = "pyobjc_framework_CoreLocation-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:eaa4ff8e3cc388f045a6c15f3ee5a950860164f6fb5a13aed29e37b6cb481607"}, + {file = "pyobjc_framework_CoreLocation-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:f4dcf52c4934e99b20056f2ebc8398c9f8f8a61ceac0e5de1e2bb719b0f844c2"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coremedia" +version = "10.1" +description = "Wrappers for the framework CoreMedia on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreMedia-10.1.tar.gz", hash = "sha256:8210d03ff9533d5cef3244515c1aa4bb54abaeb93dfc20be6d87e3a6b3377b36"}, + {file = "pyobjc_framework_CoreMedia-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7bd43d614f0427732ce1690e0640f1d7a40a73dd90142ac08c5dab2ba0d49e8d"}, + {file = "pyobjc_framework_CoreMedia-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5c1f849ce7de96da6fc81dc8975ecf04444c7179129976b3fe064d9f85a91082"}, + {file = "pyobjc_framework_CoreMedia-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ab9e44e0d3ce584a119c3b3d539de9d228b635cb98bf60f1e1a221f8aa20681e"}, + {file = "pyobjc_framework_CoreMedia-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fffc355c038dfaa83f7d7c01497fb20590f9090421564b275cd8fd12e8e10e8e"}, + {file = "pyobjc_framework_CoreMedia-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:e4e9221c5a4c0b7ff7484eb8a21e06be0cafc1c95b9bcc27a57c139b64692dbe"}, + {file = "pyobjc_framework_CoreMedia-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b61e986b686d4e928208c26a4a2163210e101fcec56eeb61d62b969802eaa8ca"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coremediaio" +version = "10.1" +description = "Wrappers for the framework CoreMediaIO on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreMediaIO-10.1.tar.gz", hash = "sha256:c07177c58c88b6de229f88f3b88b4d97bfc59d2406f751b5aff6bed5cac4d938"}, + {file = "pyobjc_framework_CoreMediaIO-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:d44781e21632f3af8eab86194b2fe32ce235b6c6a03ff87f09e0ba034a1e7a73"}, + {file = "pyobjc_framework_CoreMediaIO-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c97bd803a17204a2ec2d9f22c14176009067359efe80b9df69e8ec197783091c"}, + {file = "pyobjc_framework_CoreMediaIO-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d137b0eef1533af244c70ab02f1ed5716dcc8739b0ba6b6c703d36a61d9bab2e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coremidi" +version = "10.1" +description = "Wrappers for the framework CoreMIDI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreMIDI-10.1.tar.gz", hash = "sha256:e2e407dcb9d5ed53e0a8ed4622429a56c9770c26e2e4455dcb76a6620a12eba6"}, + {file = "pyobjc_framework_CoreMIDI-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b632773bea0c943a1f733166aece7560f32237a42706124d1f001b10620c4bcc"}, + {file = "pyobjc_framework_CoreMIDI-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:065cf89ee58b01700780fbbed0c00e1c5f5f383ac3d54f31642ee6d59e3c03c2"}, + {file = "pyobjc_framework_CoreMIDI-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:8984ad04837efc8bc7cbf1d48ff3433eb7fea1d298ed8b72344ec1641826df48"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coreml" +version = "10.1" +description = "Wrappers for the framework CoreML on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreML-10.1.tar.gz", hash = "sha256:4cda220d5ad5b677a95d4d29256b076b411b692b64219c2dcb81c702fc34d57d"}, + {file = "pyobjc_framework_CoreML-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:fb85e653a0f7984fff908890b7988d9d5ac42ff92b213cd9371bb255982ee787"}, + {file = "pyobjc_framework_CoreML-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a361d35c75e749a975330f7647084a58c2166f076ecc5573491542b96bc84c28"}, + {file = "pyobjc_framework_CoreML-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4c3b43da4afb279b02bbb6a57a3c5fb4d24ad6d48ef40c20efcda783e41077d2"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coremotion" +version = "10.1" +description = "Wrappers for the framework CoreMotion on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreMotion-10.1.tar.gz", hash = "sha256:907a2f6da592f61d49f06559b34fc5addd8c0f2b85f9f277c5e4ea5d95247b67"}, + {file = "pyobjc_framework_CoreMotion-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:630487c14e22c0c05ddc33a149db673d8a28a876b59a78ed672f1a4825ebf40e"}, + {file = "pyobjc_framework_CoreMotion-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2219096ceb41aea91819df747c08059885f94ca14c66a078d3161ba49c1cb56e"}, + {file = "pyobjc_framework_CoreMotion-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:de694971994df2791047c2a1039556ea54683fd09cdc30c23ee5891c63414232"}, + {file = "pyobjc_framework_CoreMotion-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:81b138a672519ecbea8a2f2392a7f015f3d7caf150368f83b3b278cb60743e8c"}, + {file = "pyobjc_framework_CoreMotion-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:b6cbbee7d26ef1837e382566316cb5d5fae6bca10418437608ebc312f396f898"}, + {file = "pyobjc_framework_CoreMotion-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9968b07199532b1c4ff56d1d6a6195e8ce8bc2beabbf55dc53193f473b3741f9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coreservices" +version = "10.1" +description = "Wrappers for the framework CoreServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreServices-10.1.tar.gz", hash = "sha256:43d507f2b3d84a5aab808c3f67bf21fb6a7d1367d506e2e9877bf1cac9bad2eb"}, + {file = "pyobjc_framework_CoreServices-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:73162798c506f6d767e2684d7c739907c96a5547045d42e01bee47639130b848"}, + {file = "pyobjc_framework_CoreServices-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:eba7abba8f5ba194a5ef1ffeb5f9d3c0daa751e07ef0d3662e35e27e75a24d73"}, + {file = "pyobjc_framework_CoreServices-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:924bca5a67e9046e8c6146dbc1301fe22c2a1bd49bef92358fd6330ef19cfa65"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-FSEvents = ">=10.1" + +[[package]] +name = "pyobjc-framework-corespotlight" +version = "10.1" +description = "Wrappers for the framework CoreSpotlight on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreSpotlight-10.1.tar.gz", hash = "sha256:b50e13d55d90b88800c2cc2955c000ea6b1de6481ff6e0092c7b7bf94fceea69"}, + {file = "pyobjc_framework_CoreSpotlight-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:421e18ded971c212fd3f2878658c209c81d1f8859eb62dd6a965abcb19a4ce5a"}, + {file = "pyobjc_framework_CoreSpotlight-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c775e0d42ee21f7d6b9374b01df1a0d4ece0b765e99c7011cb2ea74a2c2ef275"}, + {file = "pyobjc_framework_CoreSpotlight-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:7dc11f607429e21c2aee18f950cdde141a414c874369dbb66920930802cfd0fa"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-coretext" +version = "10.1" +description = "Wrappers for the framework CoreText on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreText-10.1.tar.gz", hash = "sha256:b6a112e2ae8720be42af19e0fe9b866b43d7e9196726caa366d61d18294e6248"}, + {file = "pyobjc_framework_CoreText-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6ea2920c126a8a39e8a13b6de731b78b391300cec242812c9fbcf65a66ae40cf"}, + {file = "pyobjc_framework_CoreText-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:37b203d832dd82bd9566c72eea815eb89f00f128a4c9a2f352843914da4effec"}, + {file = "pyobjc_framework_CoreText-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:083700483b18f337b0c43bdfaafc43467846f8555075669d4962d460d9d6cd00"}, + {file = "pyobjc_framework_CoreText-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59472cd1a33e83803fa62b3db20ac0e899f5ed706d22704ea81129d3f49ff0c7"}, + {file = "pyobjc_framework_CoreText-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cc1a63ca2c6921768b1c794ce60e2a278e0177731aa4bf8f620fdde857e4835e"}, + {file = "pyobjc_framework_CoreText-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fbbdde4ce747bcad45c2aded36167ad00fead309a265d89ab22289c221038e57"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-corewlan" +version = "10.1" +description = "Wrappers for the framework CoreWLAN on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CoreWLAN-10.1.tar.gz", hash = "sha256:a4316e992521878fb75ccff6bd633ee9c9a9bf72d5e2741e8804b43e8eeef8ac"}, + {file = "pyobjc_framework_CoreWLAN-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:e5374ebd6e258d6cdaa9fdeb21c10830c50fc1c00eaa91b2293833b0182479f7"}, + {file = "pyobjc_framework_CoreWLAN-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:57cb3fbb69500df92a111655c129b0f658ec16e14e57b08b9c1ef400f33f3bb5"}, + {file = "pyobjc_framework_CoreWLAN-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:eb2360b20ab14a0f6cc7d06dc7bf2b0832d0c95892d9f364e03c6ecf77dfc328"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-cryptotokenkit" +version = "10.1" +description = "Wrappers for the framework CryptoTokenKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-CryptoTokenKit-10.1.tar.gz", hash = "sha256:ad8fb3c4f314cc5f35cd26a5e3fdd68dd71ea0f7b063f31cffb9d78050ce76f0"}, + {file = "pyobjc_framework_CryptoTokenKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:e691877b2e96c8f257873943147315561cda79b63c911afa8d0103d6b351a88f"}, + {file = "pyobjc_framework_CryptoTokenKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5a4ce0650ad70eedadc46091d61878e28a4cf491d1c2e8da32feab2f661a4ee5"}, + {file = "pyobjc_framework_CryptoTokenKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:c0013c7795d208547d9f92c0539bc7fec09ca049d791458b62c177585552abc4"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-datadetection" +version = "10.1" +description = "Wrappers for the framework DataDetection on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-DataDetection-10.1.tar.gz", hash = "sha256:f81d1ca971aa8034faeb6e457144df0832f870d7e19905886593bafe4cbfe21f"}, + {file = "pyobjc_framework_DataDetection-10.1-py2.py3-none-any.whl", hash = "sha256:f23fa282297ed385c9df384a0765e4f9743b8916de8a58137f981ab0425b80f5"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-devicecheck" +version = "10.1" +description = "Wrappers for the framework DeviceCheck on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-DeviceCheck-10.1.tar.gz", hash = "sha256:f89e3acd15ec48134f95bf027778ca1d7e3088b9c2204e48f8c6e3bdcb28cf82"}, + {file = "pyobjc_framework_DeviceCheck-10.1-py2.py3-none-any.whl", hash = "sha256:31d5a83d85a4d95e238f432ac66cbf110a7b70afa82fd230ab4b911a5e2b9cb4"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-dictionaryservices" +version = "10.1" +description = "Wrappers for the framework DictionaryServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-DictionaryServices-10.1.tar.gz", hash = "sha256:03b3b19a9b911beb3bdc8809f5d02356a497a75dbefa0f355825ec610c050a3e"}, + {file = "pyobjc_framework_DictionaryServices-10.1-py2.py3-none-any.whl", hash = "sha256:7ace031cc3df1fa9a4eb663ff55eee0a4c7c8c34653aa1529988d579d273150b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-CoreServices = ">=10.1" + +[[package]] +name = "pyobjc-framework-discrecording" +version = "10.1" +description = "Wrappers for the framework DiscRecording on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-DiscRecording-10.1.tar.gz", hash = "sha256:321c69b6494c57d75d4a0ecf5d90ceac3800441bf877eac8196ab25dcf15ebde"}, + {file = "pyobjc_framework_DiscRecording-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:581141bd645436d009cc6b42ca6255322de9a3a36052e7dcf497e90959c7bc77"}, + {file = "pyobjc_framework_DiscRecording-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2c4144c4d1d7bf7ad537c6159cefb490876b7eff62ec95d4af7bc857813b95cd"}, + {file = "pyobjc_framework_DiscRecording-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:1c52f7ace5936edbe160aa4d6cb456a49e7bc1a43a5e34572d48cd65dee22d1e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-discrecordingui" +version = "10.1" +description = "Wrappers for the framework DiscRecordingUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-DiscRecordingUI-10.1.tar.gz", hash = "sha256:2a44278b19738e8d4f2180433df37b59a0b645d9ddc0f3c3a6c81e506afc1953"}, + {file = "pyobjc_framework_DiscRecordingUI-10.1-py2.py3-none-any.whl", hash = "sha256:684925119e4c8f8ea43cfede1a3e39f785b5aa94a48f1aa7a98fd4cdc4c1d2e3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-DiscRecording = ">=10.1" + +[[package]] +name = "pyobjc-framework-diskarbitration" +version = "10.1" +description = "Wrappers for the framework DiskArbitration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-DiskArbitration-10.1.tar.gz", hash = "sha256:c3ab3dc91375dabaf4d3470e01358e4acfecf6b425abf9ad95a26a7a56398f56"}, + {file = "pyobjc_framework_DiskArbitration-10.1-py2.py3-none-any.whl", hash = "sha256:a3bd1883b60aa1d8cff3bc18957f81ed14e5d0406d18a4a9095539ddf51dd72e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-dvdplayback" +version = "10.1" +description = "Wrappers for the framework DVDPlayback on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-DVDPlayback-10.1.tar.gz", hash = "sha256:2af92907a50a47c44a8dd1521217a564ad9a3dd9e9056f0a76b13275d380bee1"}, + {file = "pyobjc_framework_DVDPlayback-10.1-py2.py3-none-any.whl", hash = "sha256:bcbfb832a3f04e47aef03606a21fd58458bc28e25e1a444e7a9388bfee2f9dd3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-eventkit" +version = "10.1" +description = "Wrappers for the framework Accounts on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-EventKit-10.1.tar.gz", hash = "sha256:53473df48000b39dec276e3b8ead88b153c66cf0fdc07b016f759b42f0b2ec50"}, + {file = "pyobjc_framework_EventKit-10.1-py2.py3-none-any.whl", hash = "sha256:3265ef0bfab38508c50febfa922b4abf6ebc55a44f105d499e19231c225a027c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-exceptionhandling" +version = "10.1" +description = "Wrappers for the framework ExceptionHandling on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ExceptionHandling-10.1.tar.gz", hash = "sha256:ac75ac230249d6f26f750beb406c133a49d4a284e7ee62ba1139e9d9bc5ec44d"}, + {file = "pyobjc_framework_ExceptionHandling-10.1-py2.py3-none-any.whl", hash = "sha256:b8eb9142f141361982e498610bfd33803acb4f471f80b5cd9df8d382142449e9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-executionpolicy" +version = "10.1" +description = "Wrappers for the framework ExecutionPolicy on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ExecutionPolicy-10.1.tar.gz", hash = "sha256:5ab7da37722b468a5e230354fa45a6a96e545c6c2aab5a76029e2227b1bae326"}, + {file = "pyobjc_framework_ExecutionPolicy-10.1-py2.py3-none-any.whl", hash = "sha256:556aa28220438b64e6f75f539f133616a343abe3e2565f0d016091f4dc4a9c3d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-extensionkit" +version = "10.1" +description = "Wrappers for the framework ExtensionKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ExtensionKit-10.1.tar.gz", hash = "sha256:4f0a5256149502eeb1b4e1af1455de629a3c3326aaf4d766937212e56355ad58"}, + {file = "pyobjc_framework_ExtensionKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:82eece8d6d807bafb5cf8a220c58f2b42b350a0bc9131cb0cdfd29e90294858d"}, + {file = "pyobjc_framework_ExtensionKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9936cfe8a17c09457aa10c21f90f77151328596bd72b55fd9b6c3e78a11384"}, + {file = "pyobjc_framework_ExtensionKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:94cdc24e19ed554bc1d8e9d11139839033b26997f5b29a381ed4be8633ad2569"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-externalaccessory" +version = "10.1" +description = "Wrappers for the framework ExternalAccessory on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ExternalAccessory-10.1.tar.gz", hash = "sha256:1c206f2e27aedb0258a3cf425ed89cbea0657521829f061362b4fca586e033a8"}, + {file = "pyobjc_framework_ExternalAccessory-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:519c36e63011a797f1747306132957168eed53456e801973c38c52b06b265a0e"}, + {file = "pyobjc_framework_ExternalAccessory-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:8c54367b52cc74231df057c9bbf722896d98efd91f6d6a7415e0ca7227f311b9"}, + {file = "pyobjc_framework_ExternalAccessory-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:64facb48377840e72e459f9ae88d482d0d17a1726733b2d79205de4e4449eb89"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-fileprovider" +version = "10.1" +description = "Wrappers for the framework FileProvider on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-FileProvider-10.1.tar.gz", hash = "sha256:617811be28bd5d9b0cc87389073ade7593f89ee342a5d6d5ce619912748d8e00"}, + {file = "pyobjc_framework_FileProvider-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9e98efd27f69c8275dc8220dfb2bb41a486400c1fb839940cd298b8d1e44adca"}, + {file = "pyobjc_framework_FileProvider-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7046144d86b94707fea6d8bb00b2850f99e0ebaef136ee2b3db884516b585529"}, + {file = "pyobjc_framework_FileProvider-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:2f4c816b87237ab2ddfb0314296e5824411cec11f9c1b5919f8b4e8c02069ff1"}, + {file = "pyobjc_framework_FileProvider-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8476daf2c291f6bc1c9f4a26f4492236a2e427774fd02a03c561c667e9ec0931"}, + {file = "pyobjc_framework_FileProvider-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:de3dcbe70943b3bf057f634be4003fdcc112e3d7296f1631be1bf20f494db212"}, + {file = "pyobjc_framework_FileProvider-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a53ebe7e4a6ef24cf3ade1c936a96a1cb0c40dd7639899e3e238e050d4813417"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-fileproviderui" +version = "10.1" +description = "Wrappers for the framework FileProviderUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-FileProviderUI-10.1.tar.gz", hash = "sha256:e8f40b41f63d51401fb2aa5881dbf57ef6eacaa6c4d95f3dd1d9eb1b392a2d84"}, + {file = "pyobjc_framework_FileProviderUI-10.1-py2.py3-none-any.whl", hash = "sha256:ef85cead617c3e9b851589505503d201197bbc0ee27117a77243a1a4e99fad7d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-FileProvider = ">=10.1" + +[[package]] +name = "pyobjc-framework-findersync" +version = "10.1" +description = "Wrappers for the framework FinderSync on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-FinderSync-10.1.tar.gz", hash = "sha256:5b1fb13c10d0f9bf8bccdacd0ecd894d79376747bd13aca5a410f65306bcbc29"}, + {file = "pyobjc_framework_FinderSync-10.1-py2.py3-none-any.whl", hash = "sha256:e5a5ff1e7d55edb5208ce04868fcf2f92611053476fbbf8f48daa3064d56deb5"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-fsevents" +version = "10.1" +description = "Wrappers for the framework FSEvents on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-FSEvents-10.1.tar.gz", hash = "sha256:f5dee8cfbd878006814db264c5f70aeb1a43c06620e98f628ca6c0008beb1b1d"}, + {file = "pyobjc_framework_FSEvents-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3c2bf6ffd49fd21df73a39e61b81d7c6651e1063f72b62b2218c6ab4bf91dc02"}, + {file = "pyobjc_framework_FSEvents-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e57dccf14720c0789811580cb99e325353259cc96514e2622ca512e70f392c2"}, + {file = "pyobjc_framework_FSEvents-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:f026f417b25f804c6994d49af0743177ca7119d5d9e885a80d71c624e12a5d47"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-gamecenter" +version = "10.1" +description = "Wrappers for the framework GameCenter on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-GameCenter-10.1.tar.gz", hash = "sha256:0d124b3f18bb1b3e134268c99bf92c29791e8c62a97095c1fb1eb912ebe495e0"}, + {file = "pyobjc_framework_GameCenter-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5d6cf2405e5107c8befcb61a5339c0766fbab9448a2c4e8f5dd4401a7ef380ab"}, + {file = "pyobjc_framework_GameCenter-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:8ede397f1ca31022e7507cb1cf801617094e407300ee29c19415fd32f64fa758"}, + {file = "pyobjc_framework_GameCenter-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:db4e36a573e91715d8ed5250f6784fe5b03c8b2e769b97f8cf836eb7111c3777"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-gamecontroller" +version = "10.1" +description = "Wrappers for the framework GameController on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-GameController-10.1.tar.gz", hash = "sha256:50a17fdd151f31b3a5eae9ae811f6f48680316a5c2686413b9a607c25b6be4bc"}, + {file = "pyobjc_framework_GameController-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ec7e84c2dbc90065db8d0293c29e34d95b4fa14beeb3fb3c818fa3bcdf24d89a"}, + {file = "pyobjc_framework_GameController-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:672d99f849b803c6c6b8e89445e2c446379ae23f1f0f7e355a2a94f91d591fea"}, + {file = "pyobjc_framework_GameController-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:c56232fc2f0e95901e66534d18a008857c59363078ac75fedb2d18dcbd5dda63"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-gamekit" +version = "10.1" +description = "Wrappers for the framework GameKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-GameKit-10.1.tar.gz", hash = "sha256:6fa87a29556cdaf78c86851fc61edb6d384f1a7370a75a66bdd208ed1250899f"}, + {file = "pyobjc_framework_GameKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:bb00618d256f67b6f784b49db78bde80677a2004af4558266009de30e8804660"}, + {file = "pyobjc_framework_GameKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bcce65b781c5967eb7985b551ca015cda89903d18f29eab74518a52f626fec"}, + {file = "pyobjc_framework_GameKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:773e6f645731dac7c2b6e55ec7ecd92928b070f7a33b4c5ce33a3a52565ecd49"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-gameplaykit" +version = "10.1" +description = "Wrappers for the framework GameplayKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-GameplayKit-10.1.tar.gz", hash = "sha256:12a5d1dc59668df155436250476af029b1765ca68e7a1e2d440158e7130232a3"}, + {file = "pyobjc_framework_GameplayKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:f877d2c449aea09187856540b3d5a3e6a98573673a09af6163b1217040d93e5f"}, + {file = "pyobjc_framework_GameplayKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:86e320c79707ab7a3de2f23d0d32bd151b685865f43d13fb58daa2963b4da5cc"}, + {file = "pyobjc_framework_GameplayKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:93a1e62c2875d7705d1aa70115f646258ecffc4d4702ed940a5214dc0ea580f5"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-SpriteKit = ">=10.1" + +[[package]] +name = "pyobjc-framework-healthkit" +version = "10.1" +description = "Wrappers for the framework HealthKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-HealthKit-10.1.tar.gz", hash = "sha256:9479c467514c506f9083889f11da6b8f34d705f716ffe9cbbb5a3157000d24de"}, + {file = "pyobjc_framework_HealthKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b32171f6d4ee6fa37718f5b299c6b866a4ae395ff8764ccc040b9d1263a3e74f"}, + {file = "pyobjc_framework_HealthKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a628c777c02df6c5dbbc5f26576f52239dab79ac1afe5ca53d40d561d55adb52"}, + {file = "pyobjc_framework_HealthKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4d44c5ace78dce1f0c76b96010d9446b90a9474946a25bfb33d373a152e22524"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-imagecapturecore" +version = "10.1" +description = "Wrappers for the framework ImageCaptureCore on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ImageCaptureCore-10.1.tar.gz", hash = "sha256:29b85ee9af77bba7e1ea9191bf84edad39d07681b9bd267c8f5057db3b0cdd64"}, + {file = "pyobjc_framework_ImageCaptureCore-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:d8d2dbc09aed984f7d92e7b835e87608d356f5f4b6dd03e84258963391791ae5"}, + {file = "pyobjc_framework_ImageCaptureCore-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5eef95798d340000ddfb9c59c9468b75bb4cd389d311fd27078c3f4a4a3af29a"}, + {file = "pyobjc_framework_ImageCaptureCore-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:832cbe0d957935553183586556d2036cfcc9aae593defe71e6a0726e5c63abf6"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-inputmethodkit" +version = "10.1" +description = "Wrappers for the framework InputMethodKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-InputMethodKit-10.1.tar.gz", hash = "sha256:b995f43a8859016474098c894c966718afe9fbcc18996ce3c6bebfc6a64cfad7"}, + {file = "pyobjc_framework_InputMethodKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5288d12d1a2a6da9261c0cadbee03f31c80a0a3bb77645b4e7c2836864f54533"}, + {file = "pyobjc_framework_InputMethodKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e04ac004ac848492242fda193e63322abce87ecdef081f1b7268cac7f2af8ad"}, + {file = "pyobjc_framework_InputMethodKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:538d5955a8ab3a9c7a7286c72dba87634ba0babe7cd0a4cec335100df8789c01"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-installerplugins" +version = "10.1" +description = "Wrappers for the framework InstallerPlugins on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-InstallerPlugins-10.1.tar.gz", hash = "sha256:4c9f8b46d43f1277aad3bea648f84754e9f48251a6fb385ad8119c1b44dffe9b"}, + {file = "pyobjc_framework_InstallerPlugins-10.1-py2.py3-none-any.whl", hash = "sha256:195e7d559421bf36479b085bf74d56f8549fff715596fc21e0e0c95989a3149a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-instantmessage" +version = "10.1" +description = "Wrappers for the framework InstantMessage on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-InstantMessage-10.1.tar.gz", hash = "sha256:8e8e7e2c64a3a6b0aa67cace58f7cea1971bb93de57be40b7ba285e305fab0b5"}, + {file = "pyobjc_framework_InstantMessage-10.1-py2.py3-none-any.whl", hash = "sha256:c03a9a99faaa14ff0a477114b691d628117422a15995523deb25ff2d1d07a36d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-intents" +version = "10.1" +description = "Wrappers for the framework Intents on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Intents-10.1.tar.gz", hash = "sha256:85a84a5912b8d8a876767ca8fa220dc24bf1c075ed81b58c386d25c835cec804"}, + {file = "pyobjc_framework_Intents-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:64a3cef4af536de1153937d99a4cb8d0568ca20ee5c74458dca4f270b01a3c1a"}, + {file = "pyobjc_framework_Intents-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:89f49f82245d4facb329dd65434a602506246e6585f544ab78b0ab4bd151f4f7"}, + {file = "pyobjc_framework_Intents-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:bc6f93d151c4474150b6c76fe43067d2d0d06446851d66df3bb9968682a2d225"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-intentsui" +version = "10.1" +description = "Wrappers for the framework Intents on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-IntentsUI-10.1.tar.gz", hash = "sha256:01948fbd8f956a79d3c2e27f75bc9954ad12cb4113982f58654122cfa8095ebb"}, + {file = "pyobjc_framework_IntentsUI-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e829659751ff47e3b85980075897ddebbf62d5644478c1bb2ff1dcdc116b8897"}, + {file = "pyobjc_framework_IntentsUI-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0d6ac451433ec0602c661b32216cd3c44b1c99b9f41781b3af79b7941118552"}, + {file = "pyobjc_framework_IntentsUI-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1806e6189cf09c0b031594ad445da1a93c30c399298c6fce2369a49bac7eade4"}, + {file = "pyobjc_framework_IntentsUI-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:33518f549b6c501d7c6c36542154ae5d2255d7223804470e14cd76b325676a48"}, + {file = "pyobjc_framework_IntentsUI-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:91498d3cf4098fe412ea66c01b080919906dd23d53653d49addc7a26c50e570f"}, + {file = "pyobjc_framework_IntentsUI-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c73626bfad3f098eed4a446cee90154dec39d9a9c0775532980c5266bc91a4c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Intents = ">=10.1" + +[[package]] +name = "pyobjc-framework-iobluetooth" +version = "10.1" +description = "Wrappers for the framework IOBluetooth on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-IOBluetooth-10.1.tar.gz", hash = "sha256:9a30554f1c9229ba120b2626d420fb44059e4aa7013c11f36ab9637dc3aba21f"}, + {file = "pyobjc_framework_IOBluetooth-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5fd71294464b9d891d3a7ebb674bcc462feb6fbdf33ebd08c1411ef104460f7f"}, + {file = "pyobjc_framework_IOBluetooth-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:88e44f1bb3495c3104d9b0a73b2155e4326366c5f08a6e31ef431ab17f342b24"}, + {file = "pyobjc_framework_IOBluetooth-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:15c1a049e1431996188352784defe54a37181da38a7e5a378fcda77fdc007aea"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-iobluetoothui" +version = "10.1" +description = "Wrappers for the framework IOBluetoothUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-IOBluetoothUI-10.1.tar.gz", hash = "sha256:979c0d9638c0f31e62afe90d8089e61a912d08e0db893a47d3e423b9b23e0db2"}, + {file = "pyobjc_framework_IOBluetoothUI-10.1-py2.py3-none-any.whl", hash = "sha256:809eeb98ce71d0d4a7538fb77f14d1e7cd2c2b91c10605fb8c0d69dbac205de5"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-IOBluetooth = ">=10.1" + +[[package]] +name = "pyobjc-framework-iosurface" +version = "10.1" +description = "Wrappers for the framework IOSurface on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-IOSurface-10.1.tar.gz", hash = "sha256:e41c635c5e259019df243da8910675db10480a36d0c316539a8ab3fa0d941000"}, + {file = "pyobjc_framework_IOSurface-10.1-py2.py3-none-any.whl", hash = "sha256:46239320148b82c1f2364d5468999b48fa9c94fc404aff6c5451d23896ece694"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-ituneslibrary" +version = "10.1" +description = "Wrappers for the framework iTunesLibrary on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-iTunesLibrary-10.1.tar.gz", hash = "sha256:18766b2fb016d33cde8ec2c81b05ddfb77d65cb8c92e16864d0c288edd02e812"}, + {file = "pyobjc_framework_iTunesLibrary-10.1-py2.py3-none-any.whl", hash = "sha256:043a2ede182f41a3ca70be50bf95f18641e2945f0077797ff2bb42a3e1984e37"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-kernelmanagement" +version = "10.1" +description = "Wrappers for the framework KernelManagement on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-KernelManagement-10.1.tar.gz", hash = "sha256:da8ac0e6a2de33b823e07ce0462a64340cfebd04f24426b1022374933bbd8d0a"}, + {file = "pyobjc_framework_KernelManagement-10.1-py2.py3-none-any.whl", hash = "sha256:923ff2bbab35a92b9becd9762348f6f690fa463ef07a0e5c4a2b8eb1d3e096af"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-latentsemanticmapping" +version = "10.1" +description = "Wrappers for the framework LatentSemanticMapping on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-LatentSemanticMapping-10.1.tar.gz", hash = "sha256:46e95532c71083d1e63bcfa4b89a56fcf860288f8fb04fc0313e4c40685d1916"}, + {file = "pyobjc_framework_LatentSemanticMapping-10.1-py2.py3-none-any.whl", hash = "sha256:f0b14a1a2a6d6b25b902a2cc5949f0145926f0b0a3132d17210b1a580dc7f0f5"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-launchservices" +version = "10.1" +description = "Wrappers for the framework LaunchServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-LaunchServices-10.1.tar.gz", hash = "sha256:c0ef72f7cee77556c81e620ae8c511e73bdea4f644a233c8a5e3a333f5cd3d7d"}, + {file = "pyobjc_framework_LaunchServices-10.1-py2.py3-none-any.whl", hash = "sha256:b792a863427a2c59c884952737041e25ef05bdb541471ce94fb26a05b48abbbc"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-CoreServices = ">=10.1" + +[[package]] +name = "pyobjc-framework-libdispatch" +version = "10.1" +description = "Wrappers for libdispatch on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-libdispatch-10.1.tar.gz", hash = "sha256:444ca20e348cbdd2963523b89661d67743a6c87a57caf9e5d546665baf384a5b"}, + {file = "pyobjc_framework_libdispatch-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da0fa1e63b7e72010c69341bcd2f523ade827c7f30e0ef5c901a2536f43a1262"}, + {file = "pyobjc_framework_libdispatch-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bd72ff7f399079eaf8135503c3658b3ce967076a9e3fdcd155c8a589134e476a"}, + {file = "pyobjc_framework_libdispatch-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ec061cba47247a5fd5788c3b9d5eba30936df3328f91fea63a565d09c53a0a02"}, + {file = "pyobjc_framework_libdispatch-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c71c8c9dca56b0e89ac7c4aff4b53bc74f64a2290e48c31cc77d87771c5203bd"}, + {file = "pyobjc_framework_libdispatch-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:b24a76fe2de4422685323e4f533b7bfd11a27edf06094c0f730f3f243f94a8bd"}, + {file = "pyobjc_framework_libdispatch-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:606954514e5747b05f9c608614f1affa44512888d18805452fade5d9b7938c14"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-libxpc" +version = "10.1" +description = "Wrappers for xpc on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-libxpc-10.1.tar.gz", hash = "sha256:8e768bb3052b30ef3938c41c9b9a52ad9d454c105d2011f5247f9ffb151e3702"}, + {file = "pyobjc_framework_libxpc-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5a3efe43b370fdc4d166ddfd8d1f74b5c3ae5f9b273e5738253c3d9a2bebf27"}, + {file = "pyobjc_framework_libxpc-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dc16190cbcaf8639f4783058ec63b1aa5d03e3586311f171177b9275ed5725d8"}, + {file = "pyobjc_framework_libxpc-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3f0756945995da4cb503dc9ca31b0633b7044722b08348a240ebe6f594d43c0c"}, + {file = "pyobjc_framework_libxpc-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8d5a7f06f437c6a23c469299a3a15b62f8b4661563499b0f04d9fe8ea5e75a95"}, + {file = "pyobjc_framework_libxpc-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:9341237ffaedb3169037a666564615fefd921e190e6ec3e951dc75384169a320"}, + {file = "pyobjc_framework_libxpc-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:57eaa7242ef4afe3e8d1fbe48f259613322549353250400c8d508afff251dde4"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-linkpresentation" +version = "10.1" +description = "Wrappers for the framework LinkPresentation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-LinkPresentation-10.1.tar.gz", hash = "sha256:d35f9436f6a72c0877479083118f57a42c0d01879df41ee832378bebef37e93c"}, + {file = "pyobjc_framework_LinkPresentation-10.1-py2.py3-none-any.whl", hash = "sha256:077c28c038b1aac0e5cd158cbf8b80863627f1254f0a1884440fabf95d46d62f"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-localauthentication" +version = "10.1" +description = "Wrappers for the framework LocalAuthentication on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-LocalAuthentication-10.1.tar.gz", hash = "sha256:e2b06bf7af1b6f8ba08bd59e1a3616732d801284362dd5482181b0b1488eca2d"}, + {file = "pyobjc_framework_LocalAuthentication-10.1-py2.py3-none-any.whl", hash = "sha256:3df6ac268f79f28e5b5e76b4fd6e095bdc9a200e1908f24cc33e805fa789f716"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Security = ">=10.1" + +[[package]] +name = "pyobjc-framework-localauthenticationembeddedui" +version = "10.1" +description = "Wrappers for the framework LocalAuthenticationEmbeddedUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-LocalAuthenticationEmbeddedUI-10.1.tar.gz", hash = "sha256:5a201e26c7710f8e8a6507dbb861baa545dc5abcbe0f3f6a19b2e270562c7bec"}, + {file = "pyobjc_framework_LocalAuthenticationEmbeddedUI-10.1-py2.py3-none-any.whl", hash = "sha256:a8e8101ca74441a862ffb8e2309fe382789c759d0951fb7b7b4e46652b4cb068"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-LocalAuthentication = ">=10.1" + +[[package]] +name = "pyobjc-framework-mailkit" +version = "10.1" +description = "Wrappers for the framework MailKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MailKit-10.1.tar.gz", hash = "sha256:a4589b13361a49ff0b3e9be43cd6f935a35acfc7a9f0da8b5db64283401da181"}, + {file = "pyobjc_framework_MailKit-10.1-py2.py3-none-any.whl", hash = "sha256:498d743e56d876d6d128970e6c0674470d9a4bcf9c021f0b115aa0c6ade1f5ae"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-mapkit" +version = "10.1" +description = "Wrappers for the framework MapKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MapKit-10.1.tar.gz", hash = "sha256:4e5b295ce1e94ed38888a0c4e3a5a92004e63e6d2ba9a86b5a277bbe658ddf05"}, + {file = "pyobjc_framework_MapKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:7628e7d8e4181f06fc3138b7426593d09fe3d49a056e7e3d5853f7bbcc62b240"}, + {file = "pyobjc_framework_MapKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:d5d78c56b2806148f7b4a2975e580bc039f1898ca8953041405683ba6c22f19b"}, + {file = "pyobjc_framework_MapKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b9c942b3a705021561de2a4e1590c58212131c2c7dc721290f68371558a42f35"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreLocation = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-mediaaccessibility" +version = "10.1" +description = "Wrappers for the framework MediaAccessibility on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MediaAccessibility-10.1.tar.gz", hash = "sha256:f487d83f948c12679c1ce06caabaedade1f4aee1f35163f835213c251a4639c7"}, + {file = "pyobjc_framework_MediaAccessibility-10.1-py2.py3-none-any.whl", hash = "sha256:2301cc554396efe449b079f99a0b5812e8e3dc364195dfcd2cc2b8a9c8915f11"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-medialibrary" +version = "10.1" +description = "Wrappers for the framework MediaLibrary on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MediaLibrary-10.1.tar.gz", hash = "sha256:cd4815cb270aa2f28acdad8185a4b9d4b76a6177f70e8ed62a610484f4bd44a9"}, + {file = "pyobjc_framework_MediaLibrary-10.1-py2.py3-none-any.whl", hash = "sha256:420d5006c624aaaf583058666fd5900a5619ff1f230e99cdd3acb76c12351a37"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-mediaplayer" +version = "10.1" +description = "Wrappers for the framework MediaPlayer on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MediaPlayer-10.1.tar.gz", hash = "sha256:394acea4fb61f8c4605494c7c64c52a105760aa2ec7e2c34db484e576ed10ad6"}, + {file = "pyobjc_framework_MediaPlayer-10.1-py2.py3-none-any.whl", hash = "sha256:10e25a8682cd0d1d8fc0041f0a34e8acf785b541d8c1ebe493c2d17caeef5648"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-AVFoundation = ">=10.1" + +[[package]] +name = "pyobjc-framework-mediatoolbox" +version = "10.1" +description = "Wrappers for the framework MediaToolbox on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MediaToolbox-10.1.tar.gz", hash = "sha256:56906cd90e1f969656db1fecd5874c6345e160044f54596c288fb0ffdb35cdc5"}, + {file = "pyobjc_framework_MediaToolbox-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:23b02872d910481a75db8eeb9c053a16b9a3cff1e030ca29d855ba8291c9501a"}, + {file = "pyobjc_framework_MediaToolbox-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c96557db9540ed18748f47d4cd0b2ba7273acb756bf7e91d8b2a943211850614"}, + {file = "pyobjc_framework_MediaToolbox-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:17ee7f045f39e3f11945bf951dfb4238c695ca49938e8b43c78fe12a8eb05628"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-metal" +version = "10.1" +description = "Wrappers for the framework Metal on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Metal-10.1.tar.gz", hash = "sha256:bde76fe5d285c9c875d411a7cf6cdd7617559eabf4fb9a588f90762a0634148c"}, + {file = "pyobjc_framework_Metal-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:0701fe5e5aaa5471843fa0d5fe8fe3279313ff83c8bf5230ab6e11f7cba79a78"}, + {file = "pyobjc_framework_Metal-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5f542aaab62b9803e7e644b86dd82718aa9f1bcfc11cb4a666a59f248b3ae2e0"}, + {file = "pyobjc_framework_Metal-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:90ba5118ebf56a152e2404336ad7732dc60f252cd2414d34c9b32c07897f4512"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-metalfx" +version = "10.1" +description = "Wrappers for the framework MetalFX on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MetalFX-10.1.tar.gz", hash = "sha256:64c96595c2489e41d93a1c75d1eace70619d973e5c9e90e7cfca29c934fc5d06"}, + {file = "pyobjc_framework_MetalFX-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3d456581a76fde824a9109f9dfdd3fc4819e81ae27527b23d2855656ed0ab6ed"}, + {file = "pyobjc_framework_MetalFX-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a3fd4384c83c0818484a3a90120131114a0866b2004309cda24ce873e4ff1e50"}, + {file = "pyobjc_framework_MetalFX-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:76a9ef5abf114c1e2d60b1e971619183f87918eafeb0719a281d1475c88592ad"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Metal = ">=10.1" + +[[package]] +name = "pyobjc-framework-metalkit" +version = "10.1" +description = "Wrappers for the framework MetalKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MetalKit-10.1.tar.gz", hash = "sha256:da0357868824e6ec506ff92d18d729f8462c4c5ca8f26ecc86e8c031d78fa80d"}, + {file = "pyobjc_framework_MetalKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:8723c6b009bf0ce7eb77aa7bdc54f1ee6d0450a3bc2f8ce85523170e92a62152"}, + {file = "pyobjc_framework_MetalKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e94303a78a883e3aa53115c4ebb8329989fcf36be353e908252bba3ba3dc807d"}, + {file = "pyobjc_framework_MetalKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:184922a11f273e604f2c5af2e14ce1f4ef2dce0f5c09aadda857c5a5ca6acab1"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Metal = ">=10.1" + +[[package]] +name = "pyobjc-framework-metalperformanceshaders" +version = "10.1" +description = "Wrappers for the framework MetalPerformanceShaders on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MetalPerformanceShaders-10.1.tar.gz", hash = "sha256:335a49c69ac95e412c581592a148a32c0fcf434097e50da378f21fe09be13738"}, + {file = "pyobjc_framework_MetalPerformanceShaders-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:a410b6dce52f7a2adebdb66891bfc33939ffe24bd75691fc30c1f7539521df86"}, + {file = "pyobjc_framework_MetalPerformanceShaders-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:7218e89bccadc451f5ba040d84b049fe8b4a4bf7d9a4fdfb20fe6851e433cd49"}, + {file = "pyobjc_framework_MetalPerformanceShaders-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:9452e07d38c7a199c2eebb1280227285f918b97d3d597940e1e6e6471636b44a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Metal = ">=10.1" + +[[package]] +name = "pyobjc-framework-metalperformanceshadersgraph" +version = "10.1" +description = "Wrappers for the framework MetalPerformanceShadersGraph on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MetalPerformanceShadersGraph-10.1.tar.gz", hash = "sha256:f587a0728e5240669d23a649f50bb25c10577f9775ba4f2576b19423575464a0"}, + {file = "pyobjc_framework_MetalPerformanceShadersGraph-10.1-py2.py3-none-any.whl", hash = "sha256:467e84983c5ded8cfaea8cb425872d5069eda8c4cc1f803ca3afaed0e184c763"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-MetalPerformanceShaders = ">=10.1" + +[[package]] +name = "pyobjc-framework-metrickit" +version = "10.1" +description = "Wrappers for the framework MetricKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MetricKit-10.1.tar.gz", hash = "sha256:6887cec4b7aa489ec16af2f77f7c447bc0a0493456fe1c4910d95a5b3e587fcd"}, + {file = "pyobjc_framework_MetricKit-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:02c8775000effbb00f6dde0a493b9ae955e54be4f9e72c4d0f2350d0864b46ac"}, + {file = "pyobjc_framework_MetricKit-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:49f6d9d9c46eb6605799fe0d898945cb62fc5c2d2fea1f7e51950765bbf7b03b"}, + {file = "pyobjc_framework_MetricKit-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6494dac683181dd1ca55b2fc912f693f51483a4e468a3fac05543539a643ca40"}, + {file = "pyobjc_framework_MetricKit-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cb7b318a2e2f4bb841a5427ab53448c827de0f2617123b804c41e6d595581321"}, + {file = "pyobjc_framework_MetricKit-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:5484980ef21e68389ed452f8a4d357f00dabf8711cb5268efe683f758441f23f"}, + {file = "pyobjc_framework_MetricKit-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7dc5a4da156e7f8724969ae329c8bae4fab58c2d7376ae96f62e2d646cc1175c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-mlcompute" +version = "10.1" +description = "Wrappers for the framework MLCompute on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MLCompute-10.1.tar.gz", hash = "sha256:02e947ddb90c236acb2cb34f41838e6c78cb070886ddfb98bb71a8f02f991fd6"}, + {file = "pyobjc_framework_MLCompute-10.1-py2.py3-none-any.whl", hash = "sha256:25ed4d3002bd33c039f4ad9bf05b4830d53f67282a8399df7c65bd1430a01183"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-modelio" +version = "10.1" +description = "Wrappers for the framework ModelIO on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ModelIO-10.1.tar.gz", hash = "sha256:75fe5405165264a5059c16bfd492593e3becba50811a47dedbfc699ff73d4bfb"}, + {file = "pyobjc_framework_ModelIO-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:6911dfa7821e1b97cf48b593d3ccd6c9f2401ed1715a677df3cdfdfeec7dad14"}, + {file = "pyobjc_framework_ModelIO-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e1a1f3b276999032ff13b1f985ae06a95b5ffc9c53771b10ea3496a70e809d58"}, + {file = "pyobjc_framework_ModelIO-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:8c6d43cca1c952858b2f31cab7b9ef01daae5aa1322240895d2e965cc72230cd"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-multipeerconnectivity" +version = "10.1" +description = "Wrappers for the framework MultipeerConnectivity on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-MultipeerConnectivity-10.1.tar.gz", hash = "sha256:ab83e57953bb3f3476c77ed863e1138ab58a0711a77a1a11924b9d22e90f116b"}, + {file = "pyobjc_framework_MultipeerConnectivity-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:e5770351b75484bbb4f6b0f0a20e0a0197a0b192a35228b087bc06f149242b0f"}, + {file = "pyobjc_framework_MultipeerConnectivity-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a06db4ee86ee85bd085659a965f1448b27bf0018f1842ae3fb6ec1c195b5352c"}, + {file = "pyobjc_framework_MultipeerConnectivity-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:becab88974b1669f5ca9c76dddb5591d4ed9acb4176980d763e22d298b6ba83d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-naturallanguage" +version = "10.1" +description = "Wrappers for the framework NaturalLanguage on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-NaturalLanguage-10.1.tar.gz", hash = "sha256:b017a75d7275606f1732fef891198e916743871ca7663ddbb1ffae7d4d93a855"}, + {file = "pyobjc_framework_NaturalLanguage-10.1-py2.py3-none-any.whl", hash = "sha256:02bb4df955ecf329cf6da77ca6952777e5b2a10aee67452ea6314ec632cbc475"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-netfs" +version = "10.1" +description = "Wrappers for the framework NetFS on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-NetFS-10.1.tar.gz", hash = "sha256:0bd9c58a0939df29729c0ab5c5fe3e7eb7fc066a15bd885ddbbbfc6d6b1524b6"}, + {file = "pyobjc_framework_NetFS-10.1-py2.py3-none-any.whl", hash = "sha256:a317c30a367af22f94858ca73cfe38a0dc4b63d0783f93532cb33780cd98a942"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-network" +version = "10.1" +description = "Wrappers for the framework Network on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Network-10.1.tar.gz", hash = "sha256:39c02fdcac4e487e14296f5d60458b9a0cd58c2a830591a7cfacc0bca191e03f"}, + {file = "pyobjc_framework_Network-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:5a31831cd9949efbc82bcea854ea3c22dcb5dc85072f909710cde666efd5cfb6"}, + {file = "pyobjc_framework_Network-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6704cbbf5f50d73208e7c9d92a1212f581280430da2606e07e88669120c82a36"}, + {file = "pyobjc_framework_Network-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:fe52bac9aa16429f7a138aad4cbb1e95a2be5c052c1cfda7e8c4dd16d1147dec"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-networkextension" +version = "10.1" +description = "Wrappers for the framework NetworkExtension on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-NetworkExtension-10.1.tar.gz", hash = "sha256:f49a3bd117ca40a1ea8ae751aca630f7b7e7d7305aa5dfa969beb07299eb2784"}, + {file = "pyobjc_framework_NetworkExtension-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:bfc5a7b402c8daced465c6b18683930a2ece91e98134cc1801657ad0a9256b1e"}, + {file = "pyobjc_framework_NetworkExtension-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:dfd808295c3b68a2f225410a67645b184187848be86abc2e6ba90db27e5c470f"}, + {file = "pyobjc_framework_NetworkExtension-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:a925cfdabb4d882e8b9c3524a729c3b683e7a7ca18e291509625d3e63d3840cb"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-notificationcenter" +version = "10.1" +description = "Wrappers for the framework NotificationCenter on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-NotificationCenter-10.1.tar.gz", hash = "sha256:697e29da4fdd5899e5db5bda7bdb5afc97f4a6e4d959caf2316aef3b300c5575"}, + {file = "pyobjc_framework_NotificationCenter-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:f9078ba52e1cfa77c797a9aed972c182acfcc79cc2eb083c7b06ba76738b5f6d"}, + {file = "pyobjc_framework_NotificationCenter-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:25bf6f521f99ccb057d0df063242d5d28223672525706317134caa887ffd6b07"}, + {file = "pyobjc_framework_NotificationCenter-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:7a6876f4b25023562ddf2558fba5e52d72a7ce3ec41c8e96533779d25e2b7722"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-opendirectory" +version = "10.1" +description = "Wrappers for the framework OpenDirectory on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-OpenDirectory-10.1.tar.gz", hash = "sha256:5d25c254876378966ce58e0de9e3d3594ca25922773d6526235b5e2f2c4103e1"}, + {file = "pyobjc_framework_OpenDirectory-10.1-py2.py3-none-any.whl", hash = "sha256:83601f3b5694b1087616566019c300aa38b2a15b59d215e96c5dae18430e8c96"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-osakit" +version = "10.1" +description = "Wrappers for the framework OSAKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-OSAKit-10.1.tar.gz", hash = "sha256:59ad344fed2ddbc24c5dad3345f596cd6ecb73e4c97a05051e3680709f66a42f"}, + {file = "pyobjc_framework_OSAKit-10.1-py2.py3-none-any.whl", hash = "sha256:af34b4dccc17a772d80c283c9356bdb5a5a300bd54c2557c26671aca4f2f86cb"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-oslog" +version = "10.1" +description = "Wrappers for the framework OSLog on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-OSLog-10.1.tar.gz", hash = "sha256:bfce0067351115ae273489768f93692dcda88bd5b54f28bb741c08855c114dfe"}, + {file = "pyobjc_framework_OSLog-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:57b2920c5c9393fb4fe9e1d5d87eabead32ebe821853d06d577bdb5503327a49"}, + {file = "pyobjc_framework_OSLog-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e94a3ce153fe72f7fe463e468d94e3657db54b133aaf5a313fb31b6b52ed60f2"}, + {file = "pyobjc_framework_OSLog-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:09e64565e4a293f3a9d486e1376f2c9651d5cec500b2c2245de9ae0baecfb29e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreMedia = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-passkit" +version = "10.1" +description = "Wrappers for the framework PassKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-PassKit-10.1.tar.gz", hash = "sha256:bc19a46fad004137f207a5a9643d3f9a3602ea3f1d75c57841de986019a3c805"}, + {file = "pyobjc_framework_PassKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:011e2f32bc465b634d171a2500e6a153b479b807a50659cc164883bbeec74e59"}, + {file = "pyobjc_framework_PassKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:791f7d4317164130e8232e75e40ba565633a01bc5777dc3d0ba0a8b5f4aeab92"}, + {file = "pyobjc_framework_PassKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:58115c31a2e8b8a57ca048de408444cc4ba94da386656e0eeeac919b157f03a4"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-pencilkit" +version = "10.1" +description = "Wrappers for the framework PencilKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-PencilKit-10.1.tar.gz", hash = "sha256:712654dc9373014aa5472b10ba269d95f455c722ebb7504caa04dfae209ed63a"}, + {file = "pyobjc_framework_PencilKit-10.1-py2.py3-none-any.whl", hash = "sha256:baf856d274653d74d66099ae81005ddb3923f7128d36d2f87100481cbb8b2b27"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-phase" +version = "10.1" +description = "Wrappers for the framework PHASE on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-PHASE-10.1.tar.gz", hash = "sha256:b7e0ef3567359a4f8ab3e5f8319f2201e775e3db6d7498409701664568c8c7c6"}, + {file = "pyobjc_framework_PHASE-10.1-py2.py3-none-any.whl", hash = "sha256:329cd6dd040a7ef8091dda9d8e57d9613bc9c8edf3cfd3af549f5cd9d64a0941"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-AVFoundation = ">=10.1" + +[[package]] +name = "pyobjc-framework-photos" +version = "10.1" +description = "Wrappers for the framework Photos on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Photos-10.1.tar.gz", hash = "sha256:eb0e83d01c8eb0652fac8382e68fd9643b7530f6580c2a51846444cae09ec094"}, + {file = "pyobjc_framework_Photos-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:d91ead1ec33e05bf9e42b7df3f8fe7e3d4cf2814482f6878060c259453491d65"}, + {file = "pyobjc_framework_Photos-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:f8415346689213b30488eb023d699c0512fcddeb7e1e4aa833860c312dddf780"}, + {file = "pyobjc_framework_Photos-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:61174248e07025d4696b6164346b43147250d03ae8378f70a458c0583e003656"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-photosui" +version = "10.1" +description = "Wrappers for the framework PhotosUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-PhotosUI-10.1.tar.gz", hash = "sha256:4b90755c6c62a0668782cf05d92fca6277485f2cb3473981760c0dc0e40de1d8"}, + {file = "pyobjc_framework_PhotosUI-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:206641f2f7f3169fecc0014b9b93c89b5503841014e911d4686684de137c79f9"}, + {file = "pyobjc_framework_PhotosUI-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:02c1861bcce433294b00f6c614559addc87fcf57aaa1ede2b6dfea50a3795378"}, + {file = "pyobjc_framework_PhotosUI-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:8df716fb2e9994bfc2d716d6930defb3e3911a0337788ef36eea0c2eb0f899ad"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-preferencepanes" +version = "10.1" +description = "Wrappers for the framework PreferencePanes on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-PreferencePanes-10.1.tar.gz", hash = "sha256:3a26cd8959dac30203410eb432a361caf2a0b8552c74edd3d7406d722ecc1014"}, + {file = "pyobjc_framework_PreferencePanes-10.1-py2.py3-none-any.whl", hash = "sha256:9b16c93d7f684cbe097932c8260a0b6460ad9fc68230648981340b7e3ee7053e"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-pubsub" +version = "10.1" +description = "Wrappers for the framework PubSub on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-PubSub-10.1.tar.gz", hash = "sha256:7992344ae82d9566d300b3d2c92ff9fa9a28e060bd42d0988df351f5fb729156"}, + {file = "pyobjc_framework_PubSub-10.1-py2.py3-none-any.whl", hash = "sha256:af0b1ed0328f06d7d96390a4b95bfb4a790d5b38142825a222923f908dc46db9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-pushkit" +version = "10.1" +description = "Wrappers for the framework PushKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-PushKit-10.1.tar.gz", hash = "sha256:12798ad9ae87f7e78690d2bce2ea46f0714d30dd938f5b288717660120a00795"}, + {file = "pyobjc_framework_PushKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:99edcd057d5cc7e015fe6b464b83f07c843fba878f5b0636ff30cd6377ec2915"}, + {file = "pyobjc_framework_PushKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:986216b9021ed6aff3a528c2b6a3885426e8acac9a744397ede998d2e7a83d06"}, + {file = "pyobjc_framework_PushKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:cf27a49a3b9eadde0bc518b54f7b38fd5d0e1c2203350d1286527b6177afa3c3"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-quartz" +version = "10.1" +description = "Wrappers for the Quartz frameworks on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Quartz-10.1.tar.gz", hash = "sha256:b7439c0a3be9590d261cd2d340ba8dd24a75877b0be3ebce56e022a19cc05738"}, + {file = "pyobjc_framework_Quartz-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:69db14ac9814839471e3cf5a8d81fb5edd1b762739ad806d3cf244836dac0154"}, + {file = "pyobjc_framework_Quartz-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ddcd18e96511e618ce43e288a043e25524c131f5e6d58775db7aaf15553d849"}, + {file = "pyobjc_framework_Quartz-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c4257a2fb5580e5ebe927a66cf36a11749685a4681a30f90e954a3f08894cb62"}, + {file = "pyobjc_framework_Quartz-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28315ca6e04a08ae9e4eaf35b364ee77e081605d5865021018217626097c5e80"}, + {file = "pyobjc_framework_Quartz-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:9cb859a2fd7e15f2de85c16b028148dea06002d1a4142922b3441d3802fab372"}, + {file = "pyobjc_framework_Quartz-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:993c71009e6374e57205e6aeaa577b7af2df245a5d1d2feff0f88ca0fa7b8626"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-quicklookthumbnailing" +version = "10.1" +description = "Wrappers for the framework QuickLookThumbnailing on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-QuickLookThumbnailing-10.1.tar.gz", hash = "sha256:b6c4ea3701cb18abaffcceb65adc9dcfd6bb28811af7a99148c71e71d538a3a6"}, + {file = "pyobjc_framework_QuickLookThumbnailing-10.1-py2.py3-none-any.whl", hash = "sha256:984e4e92727caa5b2ebbe8c91fcde6acc416f15dd8e7aef94cb3999c4a7028ec"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-replaykit" +version = "10.1" +description = "Wrappers for the framework ReplayKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ReplayKit-10.1.tar.gz", hash = "sha256:c74d092afd8da7448e3b96a28d9cde09ad11269b345a5df21ce971c87671e421"}, + {file = "pyobjc_framework_ReplayKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:592cd22d78a92691d3dce98cd526e95fbb692142541a62c99d989c8941ec9f55"}, + {file = "pyobjc_framework_ReplayKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:05358af8daef82de6fa40fb5e04639d0f29d3f22f34b0901d5a224f8d2a7da69"}, + {file = "pyobjc_framework_ReplayKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:771af451363b7c81c920a1290f673501762da6f691f54920d0866028098390dd"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-safariservices" +version = "10.1" +description = "Wrappers for the framework SafariServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SafariServices-10.1.tar.gz", hash = "sha256:5a9105d3aea43cd214583acd06609f56ed704ce816cb103916324e8ed8388fce"}, + {file = "pyobjc_framework_SafariServices-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:f672434748e7d9b303535969bcb03d99cdbf79162292ad439c0347455f38f1db"}, + {file = "pyobjc_framework_SafariServices-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:64d37455a8bd541bd799604ee9e41120cc7c9c19f26776b6d8e16f1902738b70"}, + {file = "pyobjc_framework_SafariServices-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:a5aa2fb6333ec0929f6b9689992b76eb6442e5ef4bad8b5a72c7796f24898868"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-safetykit" +version = "10.1" +description = "Wrappers for the framework SafetyKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SafetyKit-10.1.tar.gz", hash = "sha256:f1ac7201d32129c9c1a200724a5d3e75c6da8793f9c8a628be206cdebcd548e5"}, + {file = "pyobjc_framework_SafetyKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:3499fd9d85c8c93ae7be2949c1b2e91e0f74b9a0d39be9c66440c40195ef4633"}, + {file = "pyobjc_framework_SafetyKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ab7d47dbcdeafb56f0c2c6e1be847e74840038c19fecbbaf883e68cd44511eb9"}, + {file = "pyobjc_framework_SafetyKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:5c68ab2994c21bd32540595ec92922b0234e48fbb6998fcb22bacee46286e999"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-scenekit" +version = "10.1" +description = "Wrappers for the framework SceneKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SceneKit-10.1.tar.gz", hash = "sha256:f6565f3dba3bacf6099677ef713f9c95bcb9d8c4ea755c1866d113f95f110fc9"}, + {file = "pyobjc_framework_SceneKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:70d3a7f78238255bf62fab33a3e9ac20e13ec228eafd1aa0ef579b3792e5d9b9"}, + {file = "pyobjc_framework_SceneKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:1bbdee819b638530c53271a4f302357cf8c829dbfc6e40b062335c900816bb01"}, + {file = "pyobjc_framework_SceneKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:e179e37613814661be86c8316dd92497012cec48bb4febdc3d432ac5e7594a3f"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-screencapturekit" +version = "10.1" +description = "Wrappers for the framework ScreenCaptureKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ScreenCaptureKit-10.1.tar.gz", hash = "sha256:a00d85c97bf0cdd454d57181c371f372b8549c4edd949e2b66f42782f426f855"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bc05248b9ae9ed4aa474b4e54927216046c284a4c6c27d30db9df659887b7b1d"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98eaec608bd9858a265541b14d6708bcc0b8c8276c2a5b41b80d828c0c2a8c64"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ff8657865f6280a942d175b87933ff0f1b6064e672a7f1efb5e66d864b435c27"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:30615c2a9f0a04cca41afe0cee21e3179f72f055e9cac94fe1e4f31fcccb0919"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:2cbd9957e9823615a494b2fd6815688eb0ad2eed7df007b25e3f7d83261653a9"}, + {file = "pyobjc_framework_ScreenCaptureKit-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a3b732bad05c973844ea3b25ccabf0d41b4c3eec4f7b5d78650337685cb43142"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreMedia = ">=10.1" + +[[package]] +name = "pyobjc-framework-screensaver" +version = "10.1" +description = "Wrappers for the framework ScreenSaver on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ScreenSaver-10.1.tar.gz", hash = "sha256:d1b890c7cae9e5c43582fe834aebcb6a1ecf52467a8ed7a28ba9d873bbf582d5"}, + {file = "pyobjc_framework_ScreenSaver-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:b464de6398ef3a700c4ac19ed92b25cf2d30900b574533a659967446fddede3b"}, + {file = "pyobjc_framework_ScreenSaver-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cc8f81b2073920ca84d8e83435b95731e798ad422e0a3d67b09feb208a3920c6"}, + {file = "pyobjc_framework_ScreenSaver-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:96868cd9dc6613144821bb4db50ca68efa3ae8e07c31a626ce02d78b4eeaaeff"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-screentime" +version = "10.1" +description = "Wrappers for the framework ScreenTime on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ScreenTime-10.1.tar.gz", hash = "sha256:6221e0f5122042b280212a6555f72d94020c2fd62319c4562cdfc7b58960dd07"}, + {file = "pyobjc_framework_ScreenTime-10.1-py2.py3-none-any.whl", hash = "sha256:734e090debb954a890a564869f2af20b55b9f7b7875d360795c9875279d09bd9"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-scriptingbridge" +version = "10.1" +description = "Wrappers for the framework ScriptingBridge on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ScriptingBridge-10.1.tar.gz", hash = "sha256:7dce35a25d1f3b125e4b68a07c7f9eaa33fc9f00dde32356d0f7f73eb09429a3"}, + {file = "pyobjc_framework_ScriptingBridge-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:15e60d3783d7611f4d35e6b2905921a01162cfa04eb1a6426135585c84806d19"}, + {file = "pyobjc_framework_ScriptingBridge-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:30c0aac8623d0e96442801219004c32d527d4b4bbbf5c271517d73c5eeae85a3"}, + {file = "pyobjc_framework_ScriptingBridge-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:ca0dc8ccb443f5a3ab9afb500d6c730723faf38c5880a243a65b4e44be64fa55"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-searchkit" +version = "10.1" +description = "Wrappers for the framework SearchKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SearchKit-10.1.tar.gz", hash = "sha256:75234ee6e8490cf792453bf9a9854d7b5f1cebd65e81903d5ce0ecc3e65fc277"}, + {file = "pyobjc_framework_SearchKit-10.1-py2.py3-none-any.whl", hash = "sha256:2e42e7cacb0a7f9b327d1c770e52fe13dfaaac377cb4e413b609e478993552e0"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-CoreServices = ">=10.1" + +[[package]] +name = "pyobjc-framework-security" +version = "10.1" +description = "Wrappers for the framework Security on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Security-10.1.tar.gz", hash = "sha256:33becccea5488a4044792034d8cf4faf1913f8ca9ba912dceeaa54db311bd284"}, + {file = "pyobjc_framework_Security-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:72955f4faf503e6a41076fcaa3ec138eb1cc794f483db77104acf2ee480f8a04"}, + {file = "pyobjc_framework_Security-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b02075026d78feda8c1af9462199c2cde65b87e4adde65b90ca6965f06cb422"}, + {file = "pyobjc_framework_Security-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1d19785d8531a6cdcdbb4c545b560f63306ff947592e7fad27811f87ee64854c"}, + {file = "pyobjc_framework_Security-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:569a9243d4044e3e433335ded891dc357880787df647de8220659f022a03f467"}, + {file = "pyobjc_framework_Security-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d8b8c402c395ac3868727f04e98b2ded675534de1349df8f5813b3c483b50a2c"}, + {file = "pyobjc_framework_Security-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aaca360a28b6333a8a93b091426daa5ffd22006bbb1122d3d6a78d33177f612a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-securityfoundation" +version = "10.1" +description = "Wrappers for the framework SecurityFoundation on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SecurityFoundation-10.1.tar.gz", hash = "sha256:11def85a7a4ea490fa24df79d01ea137f378534fedf1da248068ddf137f38c7e"}, + {file = "pyobjc_framework_SecurityFoundation-10.1-py2.py3-none-any.whl", hash = "sha256:bbd67737afec25f2e3d41c8c2e7b4a6f9aae4231242e215b82a950eef6432ce0"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Security = ">=10.1" + +[[package]] +name = "pyobjc-framework-securityinterface" +version = "10.1" +description = "Wrappers for the framework SecurityInterface on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SecurityInterface-10.1.tar.gz", hash = "sha256:444a0dc7d50390750c28185b6496ee913011ac886d9e634bfc9a0856372d0a94"}, + {file = "pyobjc_framework_SecurityInterface-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:c0e52408e25845a960b0fe339c274650fd211f9fee5944c643d9ba16861e45ac"}, + {file = "pyobjc_framework_SecurityInterface-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bef4a63d31808531f5806006945d1f9b5650221e4adc973302387ab7b2e1b349"}, + {file = "pyobjc_framework_SecurityInterface-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:479e555df16ff7f79bf7622ab3341b0ef176fbd85ef3f7301931a57d2def682f"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Security = ">=10.1" + +[[package]] +name = "pyobjc-framework-sensitivecontentanalysis" +version = "10.1" +description = "Wrappers for the framework SensitiveContentAnalysis on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SensitiveContentAnalysis-10.1.tar.gz", hash = "sha256:435906a3fcc6cba50cd7c5bfd693368c6042c17c5f64bcd560a3761d947425de"}, + {file = "pyobjc_framework_SensitiveContentAnalysis-10.1-py2.py3-none-any.whl", hash = "sha256:472c0fb0f1ad9c370cbc7cf636bb5888cbcf0ee8c9ecb9c5f6de25e2587771e5"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-servicemanagement" +version = "10.1" +description = "Wrappers for the framework ServiceManagement on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ServiceManagement-10.1.tar.gz", hash = "sha256:ebe38b80ed74112fdd356e19165c365f6281baad83818774a0da6d790fd13044"}, + {file = "pyobjc_framework_ServiceManagement-10.1-py2.py3-none-any.whl", hash = "sha256:d05289948558cf4c7fbc101946f6ccadcc33826b2056c14d5494a8ae7f136936"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-sharedwithyou" +version = "10.1" +description = "Wrappers for the framework SharedWithYou on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SharedWithYou-10.1.tar.gz", hash = "sha256:bcac8ffa2642589a416c62ff436148586db9c41f92419a0164b1e9d6f6c73e38"}, + {file = "pyobjc_framework_SharedWithYou-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:05fceedcd7b6e8753cb8dc5f09a947686dd454c304965c959bc101cfd7349fcd"}, + {file = "pyobjc_framework_SharedWithYou-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6f4f9fb6d335b54eb0a02b277ca8a2cb87962a579bafdc9df5f94c8af1063ee4"}, + {file = "pyobjc_framework_SharedWithYou-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:a1c7c688c15117f1c6ea638e83285ce1b2fbd9d8c76ee405e43b24fa4fea766d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-SharedWithYouCore = ">=10.1" + +[[package]] +name = "pyobjc-framework-sharedwithyoucore" +version = "10.1" +description = "Wrappers for the framework SharedWithYouCore on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SharedWithYouCore-10.1.tar.gz", hash = "sha256:2b4f62b0df4bd44198f6d3a3aae4d054592261d36fc2af71f9dd81744aa99815"}, + {file = "pyobjc_framework_SharedWithYouCore-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:a7f41415a3ca40d4ee18955155a4141e0d2d55e713b513aa567305ae54716cb7"}, + {file = "pyobjc_framework_SharedWithYouCore-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc133f07a71cb828073dc671cb1e8ffa5bde714b376a8eba0a8110ac41927ae9"}, + {file = "pyobjc_framework_SharedWithYouCore-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:d7169a2492ed4fd7d45ad0eafbecebffec0b22f08e756f2e251eda62cd5ba42a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-shazamkit" +version = "10.1" +description = "Wrappers for the framework ShazamKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ShazamKit-10.1.tar.gz", hash = "sha256:d091c5104adda8d54e65463862550e59f86646fdafcdcd234c9a7a2624584f1d"}, + {file = "pyobjc_framework_ShazamKit-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6670ed380dacc6aa86f571a18d9e321bd075da11bf144cba2802b19bb0868a21"}, + {file = "pyobjc_framework_ShazamKit-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d4efd57dac3f50621cc23be38cefbd6c80b4b55f0339312b4f2a340cd6ffde9b"}, + {file = "pyobjc_framework_ShazamKit-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:07e58fc6b70bf961f230044cf46324ab4239864955299957e231ba7cda8fafa9"}, + {file = "pyobjc_framework_ShazamKit-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be2da82d9a58c2605a1a17a88fbc389931b8fd8ad7d60926755b50316fe5e04f"}, + {file = "pyobjc_framework_ShazamKit-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:e500c6794f2b7cea57dea6f64c1fc9e067a14ddb9446e9d7739dcb57683b5a8a"}, + {file = "pyobjc_framework_ShazamKit-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4289a1109148a1a314c6bae9b33e90eca6d18a06a767b431cdff1178024f3310"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-social" +version = "10.1" +description = "Wrappers for the framework Social on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Social-10.1.tar.gz", hash = "sha256:50757d982c712090e93b6ee4bd97ed3f6acfe7005f981f060433e94b7aca818b"}, + {file = "pyobjc_framework_Social-10.1-py2.py3-none-any.whl", hash = "sha256:81363d9d06c9c8ede16d96ec1d3cdba6deef195ef54cc64618e58c7fc1f574df"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-soundanalysis" +version = "10.1" +description = "Wrappers for the framework SoundAnalysis on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SoundAnalysis-10.1.tar.gz", hash = "sha256:42e0ae24f11ef8cf097c71e5b2378eaba26f66cb39959fec4ca79812bc0ed417"}, + {file = "pyobjc_framework_SoundAnalysis-10.1-py2.py3-none-any.whl", hash = "sha256:a33bc8a1ecee11387beb9db06aaf9c362f7dc171d60da913277ac482d67beabb"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-speech" +version = "10.1" +description = "Wrappers for the framework Speech on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Speech-10.1.tar.gz", hash = "sha256:a9eddebd4e4bcdb9c165129bea510c5e9f1353528a8211cc38c22711792bf30d"}, + {file = "pyobjc_framework_Speech-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:0cc26aca43d738d25f615def32eb8ce27675fc616584c009e57f6b82dec75cc5"}, + {file = "pyobjc_framework_Speech-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9a448c58149f5bbf0128f2c6492ea281b51f50bdc4f0ecd52bea43c80f7e2063"}, + {file = "pyobjc_framework_Speech-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:76a528fc587c8eb86cdba61bf6b94ddb7e3fb38a41f1a46217e2ce7fc21d6c26"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-spritekit" +version = "10.1" +description = "Wrappers for the framework SpriteKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SpriteKit-10.1.tar.gz", hash = "sha256:998be1d6c7fd5cc66bd54bae37c45cf3394df7bc689b5d0c813f0449c8eee53f"}, + {file = "pyobjc_framework_SpriteKit-10.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:23f6657e48f7d8cb434bcf6a76b2c336eb29be69ade933f88299465a0c83cb3b"}, + {file = "pyobjc_framework_SpriteKit-10.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b5556d8469b20fe35a0ec5f9e493c30ebc531bce3be4e48fc99cb87338ba5cfb"}, + {file = "pyobjc_framework_SpriteKit-10.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:aa51855f7bfed3dc1bcda95b140d71c4dc1e21c3480216df19f6fddc7dc7ce39"}, + {file = "pyobjc_framework_SpriteKit-10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2210920a4f9a39dc3bea9287e012cdfb740a0748faa6ab13bf8a58d07da913cc"}, + {file = "pyobjc_framework_SpriteKit-10.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:66df1436d17bf0c17432d2d66ebeef8efee012240297e5aabc1118b014947375"}, + {file = "pyobjc_framework_SpriteKit-10.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5564ed8648afba01f9877062204ed03d3fef8a980b6b4155c69d3662e4732947"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-storekit" +version = "10.1" +description = "Wrappers for the framework StoreKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-StoreKit-10.1.tar.gz", hash = "sha256:4e91d77d1b9745eca6730ddf6cde964e2bd956fafad303591f671ebd1d4de64b"}, + {file = "pyobjc_framework_StoreKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:456641cbe97eab4bb68dccec6f8bf3bc435adaa0b2ae6a7a4a3da0adc84a9405"}, + {file = "pyobjc_framework_StoreKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:356966d260bd1e19c7cdba7551b3e477078d3d4b0df04b7f38013dd044913727"}, + {file = "pyobjc_framework_StoreKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:652657006d3c8fefcdbb662f8f33ef6ee8e01ba30a0b4d6e2fcd2e4046951766"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-symbols" +version = "10.1" +description = "Wrappers for the framework Symbols on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Symbols-10.1.tar.gz", hash = "sha256:63f5345fa90b31ea017c01ffd39e6e0289ef0258c6af7941263083d2289f5d3d"}, + {file = "pyobjc_framework_Symbols-10.1-py2.py3-none-any.whl", hash = "sha256:88b48102ba33ac3d8bc5c047cc892ab21e8e102c3b25b4186b77c5d1f5c1bc40"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-syncservices" +version = "10.1" +description = "Wrappers for the framework SyncServices on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SyncServices-10.1.tar.gz", hash = "sha256:644d394b84468fa6178b5aa609771252ca416ca2be2bac5501222b3c5151846d"}, + {file = "pyobjc_framework_SyncServices-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:edf7d5de135ec44b8ecf260265cb7bd9bf938d3fcc2204282aea674a86918c60"}, + {file = "pyobjc_framework_SyncServices-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:53ef6096359d182952fdb40734f17302edf35757578c0c52314f703322d855cb"}, + {file = "pyobjc_framework_SyncServices-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:b9d7ec3f784fc89847ad136bb3d67d159310a2e072a724d4ffddccf0ee5dec2b"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreData = ">=10.1" + +[[package]] +name = "pyobjc-framework-systemconfiguration" +version = "10.1" +description = "Wrappers for the framework SystemConfiguration on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SystemConfiguration-10.1.tar.gz", hash = "sha256:7e125872d4b54c8d04f15d83e7f7f706c18bd87960b3873c797e6a71b95030b0"}, + {file = "pyobjc_framework_SystemConfiguration-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ab80e4272937643de8569a711e5adee8afca2bf071b6cfc6b7fc4143010d258"}, + {file = "pyobjc_framework_SystemConfiguration-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:431c32557bde3dad18fb245bf1e5ce80963f28caa4d2691b5a82e6db2b5efc2f"}, + {file = "pyobjc_framework_SystemConfiguration-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:7e8ae510b11ceca8800bc7b4b0c7735cf26de803771199d6c2d8f24fbb5467df"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-systemextensions" +version = "10.1" +description = "Wrappers for the framework SystemExtensions on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-SystemExtensions-10.1.tar.gz", hash = "sha256:3eb7ad8f1a6901294b02cd6d6581bd6960a48fcfd82475f5970d1c909f12670d"}, + {file = "pyobjc_framework_SystemExtensions-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:8dc306dd07f9ff071759bb2237b7f7fddd0d2624966bdb0801dc5a70b026f431"}, + {file = "pyobjc_framework_SystemExtensions-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c76c6d7dbf253abe11ebfa83bbbfa7f2fc4c700db052771075c26dabbd5ee1e9"}, + {file = "pyobjc_framework_SystemExtensions-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:2586323fbe9382edebd7ca5dfe50b432c842b7ef45ef26444edcb7238bcf006f"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-threadnetwork" +version = "10.1" +description = "Wrappers for the framework ThreadNetwork on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-ThreadNetwork-10.1.tar.gz", hash = "sha256:72694dce8b10937f4d8fef67d14e15fa65ba590dec8298df439fd0cc953a83fa"}, + {file = "pyobjc_framework_ThreadNetwork-10.1-py2.py3-none-any.whl", hash = "sha256:720d4a14619598431a22be2a720bf877f996d65cee430b96c5d7ec833b676b68"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-uniformtypeidentifiers" +version = "10.1" +description = "Wrappers for the framework UniformTypeIdentifiers on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-UniformTypeIdentifiers-10.1.tar.gz", hash = "sha256:e8a6e8d4c3c6d8213d18fab44704055a5fca91e0a74891b4f1bfe6574cd51d97"}, + {file = "pyobjc_framework_UniformTypeIdentifiers-10.1-py2.py3-none-any.whl", hash = "sha256:4c867b298956d74398d2b6354bd932dc109431d9726c8ea2fc9c83e6946a2a7d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-usernotifications" +version = "10.1" +description = "Wrappers for the framework UserNotifications on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-UserNotifications-10.1.tar.gz", hash = "sha256:eca638b04b60d5d8f5efecafc1fd021a1b55d4a6d1ebd22e65771eddb3dd478f"}, + {file = "pyobjc_framework_UserNotifications-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:a44b89659eae1015da9148fc24f931108ff7a05ba61509bfab34af50806beb0c"}, + {file = "pyobjc_framework_UserNotifications-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:00aa84f29bcbe8f302d20c96ef51fb48af519d83e0b72d22bd075ea1af86629f"}, + {file = "pyobjc_framework_UserNotifications-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:fe9170b5c4da8e75288ada553cc821b9e3fc1279eb56fa9e3d4278b35a26c5ce"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-usernotificationsui" +version = "10.1" +description = "Wrappers for the framework UserNotificationsUI on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-UserNotificationsUI-10.1.tar.gz", hash = "sha256:09df08f47a7e605642a6c6846e365cab8b8631a7f87b41a65c35c52e484b9f8a"}, + {file = "pyobjc_framework_UserNotificationsUI-10.1-py2.py3-none-any.whl", hash = "sha256:6640c6d04f459b6927096696dac98ce5fcb702a507a757d6d1b909b341bb8a0d"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-UserNotifications = ">=10.1" + +[[package]] +name = "pyobjc-framework-videosubscriberaccount" +version = "10.1" +description = "Wrappers for the framework VideoSubscriberAccount on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-VideoSubscriberAccount-10.1.tar.gz", hash = "sha256:6410c68ea37a4ba4667b8c71fbfd3c011bf6ecdb9f1d6adf3c9a35584b7c8804"}, + {file = "pyobjc_framework_VideoSubscriberAccount-10.1-py2.py3-none-any.whl", hash = "sha256:f32716070f849989e3ff052effb54f951b89a538208651426848d9d924ac1625"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-videotoolbox" +version = "10.1" +description = "Wrappers for the framework VideoToolbox on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-VideoToolbox-10.1.tar.gz", hash = "sha256:56c9d4b74965fe79f050884ffa560ff71ffe709c24923d3d0b34459fb626eb11"}, + {file = "pyobjc_framework_VideoToolbox-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:a4115690b8ed4266e52a4d200c870e68dd03119993280020a1a4d6a9d4764fcf"}, + {file = "pyobjc_framework_VideoToolbox-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:64874d253c2996216c6d56e03e848cf845c3f0eac84d06ba97d83871dbf19490"}, + {file = "pyobjc_framework_VideoToolbox-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:977b2981532442c4c99fff75ffcc2b5a4b0f8108abcabdafcda2addf8b2ffa21"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreMedia = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-virtualization" +version = "10.1" +description = "Wrappers for the framework Virtualization on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Virtualization-10.1.tar.gz", hash = "sha256:48f2484a7627caa246f55daf203927f10600e615e620a2d9ca22e483ed0bb9b4"}, + {file = "pyobjc_framework_Virtualization-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:a434c40038c0c1acd31805795f28f959ea231252dc3ab34ed5a268c21227682c"}, + {file = "pyobjc_framework_Virtualization-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:8ad3e40ec5970e881f92af337354be68c1f2512690545a2da826684daeaa3535"}, + {file = "pyobjc_framework_Virtualization-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:2aba907617075394718bc8883c650197e21b2ea0d284ca51811229386114040a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + +[[package]] +name = "pyobjc-framework-vision" +version = "10.1" +description = "Wrappers for the framework Vision on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-Vision-10.1.tar.gz", hash = "sha256:ff50fb7577be8d8862a076a6cde5ebdc9ef07d9045e2158faaf0f04b5b051208"}, + {file = "pyobjc_framework_Vision-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:c6330d8b22f75f1e7d9a5456f3e2c7299d05d575b2e9b2f1e50230b18f17abed"}, + {file = "pyobjc_framework_Vision-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:91b4d740b6943f6b228915ece2e027555f28ccf49c8d063a580b8f9e5af56fd0"}, + {file = "pyobjc_framework_Vision-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:bb2d7334b4b725c5e5346a8cce2a0064259a09e90ec189b0c776304d5fc01e49"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" +pyobjc-framework-CoreML = ">=10.1" +pyobjc-framework-Quartz = ">=10.1" + +[[package]] +name = "pyobjc-framework-webkit" +version = "10.1" +description = "Wrappers for the framework WebKit on macOS" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyobjc-framework-WebKit-10.1.tar.gz", hash = "sha256:311974b626facee73cab5a7e53da4cc8966cbe60b606ba11fd0f3547e0ba1762"}, + {file = "pyobjc_framework_WebKit-10.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ad9e1bd2fa9885818e1228c60e0d95100df69252f230ea8bb451fae73fcace61"}, + {file = "pyobjc_framework_WebKit-10.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c901fc6977b3298de789002a76a34c353ed38faedfc5ba63ef94a149ec9e5b02"}, + {file = "pyobjc_framework_WebKit-10.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:f2d45dfc2c41792a5a983263d5b06c4fe70bf2f24943e2bf3097e4c9449a4516"}, +] + +[package.dependencies] +pyobjc-core = ">=10.1" +pyobjc-framework-Cocoa = ">=10.1" + [[package]] name = "pyopencl" -version = "2023.1.2" +version = "2023.1.4" description = "Python wrapper for OpenCL" optional = false python-versions = "~=3.8" files = [ - {file = "pyopencl-2023.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c69c7595e1bab949e4702dfdaad9ae97005cc071dc42eb67c2b0c3aed1cbaac"}, - {file = "pyopencl-2023.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cd95634f772c45b8cf48c2c3b1c5018e7e5aee35f7f3a3d3c514d92b19c13ae"}, - {file = "pyopencl-2023.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c34f4a912525819a2427bf0dca3b1b540b69321bd48c578c0fdfd0ff4ac98c94"}, - {file = "pyopencl-2023.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:be7fbeee10b6f5de54043efda430d6b940efcd3976c14beea7740c0b6d2679ea"}, - {file = "pyopencl-2023.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ded99985c2169142f3ad6fd97ff2b173ab0755f8c83796d8182d89953a47622b"}, - {file = "pyopencl-2023.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:f36c9e4ca6f82f3d4d514ab256405595ded7a9d3a9615002ca270dd0e9690a04"}, - {file = "pyopencl-2023.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d5633e9081d4a08f7b93a0e79eae003c5deb48d30504ce33304090050ba2d54"}, - {file = "pyopencl-2023.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:deee455f432a95b8c649e1bc8f5c8228aaa94d359aa31416830521c6d7a0a264"}, - {file = "pyopencl-2023.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8834cedaf9b0fbef1bb0bdbe24d24262c61c4ee23f4363bb1aef5dd0753152af"}, - {file = "pyopencl-2023.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:77196615fc3b0c69ee9468e5e8132b1e0e8b727d709e3a193fd1c7f8944f2d34"}, - {file = "pyopencl-2023.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6917dc9cf7420df5d52280e2c6d5d95f3008c5c2f1e13842b825bbf4bf2a462e"}, - {file = "pyopencl-2023.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:056e5753ce48e8f5e3ac421c845b068afa8f11877098beab5093ad48fe7f7e27"}, - {file = "pyopencl-2023.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d6e822f2f91b9c6876ed672139ba531c7d8e530d10dd19961b0c7335890bbd74"}, - {file = "pyopencl-2023.1.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:367fa10516ed80c308f02efd75ec5f60604543710ea06cb1c0e3553574513602"}, - {file = "pyopencl-2023.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9756e06ce74919679b7c4c4b9e58a9e57928d47d77112a5bd2598b840dd49ccb"}, - {file = "pyopencl-2023.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a09ad6fddef2cb8179ddfdee3a041141912c0eef9677440ac84dff8a06d0b1ea"}, - {file = "pyopencl-2023.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b96c23353214cd12761963d5c866f2ff617ff746653ea36060f3a911bf7a020c"}, - {file = "pyopencl-2023.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:503e5d4a3c6bf7c258e0619eb30835e0e7e42565237e2f6e21a68d34d9d350ac"}, - {file = "pyopencl-2023.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:458272e79c74c9d12bbb3ae2b9ab97f5109f60ab97f2e99c6e492007ce01b9ed"}, - {file = "pyopencl-2023.1.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbd7a49ad050807ebbc1fa64815c9cf22fbd73b5f7638852fe68d9b9dde075be"}, - {file = "pyopencl-2023.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ea121d1307419c89ecb766e416228fc831b4dc1c936329d870e6e55cfd26f13"}, - {file = "pyopencl-2023.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a168d96b2e0c5ddb414a74d4d045b82b2f3d0630527a7922c03ac7739eb3632"}, - {file = "pyopencl-2023.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3631eefd30966ad35b07b6ceeb2c59ac8cee2e823534b1d3fa97acbb91a41399"}, - {file = "pyopencl-2023.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:9f11ede4c039c8a472f23be6f8e62704986cba019e8a13a8a5af4d8b606a783c"}, - {file = "pyopencl-2023.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e01b88b873ae644e6edc05d4a6d935e9da371ae46b1a78c4022c23046401a4bb"}, - {file = "pyopencl-2023.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:311b14ac9def1538fe7d4b01dd00d6e6e8b296fdfe6a7bacef739552bd477653"}, - {file = "pyopencl-2023.1.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffdb4cbcb795fca5a27be101f02e85aca24637471e9b53303f232e293646d72b"}, - {file = "pyopencl-2023.1.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b02ac162218cbabe5287244fb7cea906ca4d3d6716d8fc952526e1b55ad63d9"}, - {file = "pyopencl-2023.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d67b55c92c769da5b994eb2f56e712d48cfdf4b534f8df20c6ab74346129357d"}, - {file = "pyopencl-2023.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068cd66ea53c98c745614697ccafd147e10bffaa761feccd3b1e90fa7cdc483c"}, - {file = "pyopencl-2023.1.2.tar.gz", hash = "sha256:eb00cd574049d592b679dcf8bfe7ab4a36c94a39fd1acb1a6b45d6c0d7be9a68"}, + {file = "pyopencl-2023.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ce71196cee0171a923d9ef6a8c21ce26fd7342ddaee88a29aa372ae3295f5257"}, + {file = "pyopencl-2023.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7bdf472b8e36f81145ac526d51f550ba539b765199da9da16732a222c7b85bee"}, + {file = "pyopencl-2023.1.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e99bb71267ce5223814177ff8c73e98057a70d20fc6555050d77d98b01bba5"}, + {file = "pyopencl-2023.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d8cbe0d2121babf7daf0bcd6ded687c191c6d2effbac85c5421659fbc26947"}, + {file = "pyopencl-2023.1.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08ebc3d5776ec2a8853c11234d605754bdf0d5af8322a08d558d661eb85c6fa3"}, + {file = "pyopencl-2023.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f199eff64be353f5badac62576d14cb40cc137c9f92f5260452de097dd9fe7a0"}, + {file = "pyopencl-2023.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:38a0a3c8389f44b51c0a916dc8e532d77ea37ab5a11f10e1ba97cc8f9a634695"}, + {file = "pyopencl-2023.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46a1158956a59e73a57e98acc681ff01a64574d0b3715634703437aa8b7c785c"}, + {file = "pyopencl-2023.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55f09e9d12a036830d71f60af9233ff493c83ff2f99b472baa1f779688c816b7"}, + {file = "pyopencl-2023.1.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:742fdb18bcc933f20b795c787fe513c69b83f074626bc62ff3c9cd1c8b243022"}, + {file = "pyopencl-2023.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4102eb3f5b9fe4b08c7900820a908cec3004e9a6990cc7202162ae46e07869d"}, + {file = "pyopencl-2023.1.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:36d79cd6445a86b4db7399488c301b49bda5fde6c1455c36b1ce58e03c690916"}, + {file = "pyopencl-2023.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a561e42ee3030b2966e7dc5cc764e705d9ff1bb5aa1124fa7d6ba4009ebfb96"}, + {file = "pyopencl-2023.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:0f7889dce94dba10738225fabec929fa977bfe8777a64f5699f6f2fe2b00742c"}, + {file = "pyopencl-2023.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ab31b35875cecd2b1c10ac47ea06e224c5881cca942fba94387317357d73c0b9"}, + {file = "pyopencl-2023.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:230c63354fe6a18043e67042769ddc5e329002fb55fb99f692e4f5c8fcf3007c"}, + {file = "pyopencl-2023.1.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef091d4a4802b267b0aa5ec46c4ebc00fd664d9178ad9866b485006eeff180b4"}, + {file = "pyopencl-2023.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c11fc7445e21dcd97bd8f5534531ed7bbd09ded853b520157623f48fad5b739"}, + {file = "pyopencl-2023.1.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0b6a0ebbf67b2ef7098bdf3632177b71c7430883b2a48b2b09b84a02d8cbb4b0"}, + {file = "pyopencl-2023.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1767616f795c598531cd19d89f451db7e25393add300204e7d1a7dd2a017709f"}, + {file = "pyopencl-2023.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:8bbb02f230b969109bdf00f36e463fed1de6e1c70e088f2f2f9b41fab128f20c"}, + {file = "pyopencl-2023.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0e444320491744fe52e49f87674c931219a5be254a8a129175db61378f5b6f18"}, + {file = "pyopencl-2023.1.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0649a9d6249612e79cffef46618cccaaa9eac7b0c3f1833a3576ea0bd985d887"}, + {file = "pyopencl-2023.1.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f790dda26812cad5288fe1831158f55c48e6ede46ae4a37db66394645b07ef8e"}, + {file = "pyopencl-2023.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:571c6430c6fb046643040d4a6d99ee677e4c6c99b09577dbb51177001e93c21c"}, + {file = "pyopencl-2023.1.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0ca2d4f14e1fc716b1928679c3182595a4862f577fa0f4a5d8edf37ef8db059b"}, + {file = "pyopencl-2023.1.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6ac9e8e84dc11b82df51916cf41f34a9ca327adbaf9f4a03a8d1f4f1e1f35382"}, + {file = "pyopencl-2023.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:802e5eb27fd311af42133bb2da83b5777a84f5c7c11e0a4b8d1d50d265b22e37"}, + {file = "pyopencl-2023.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ae4b7f34aa56a4dc5ce5b4d795dc872f9a1aac66f15ded575aeabdfd15da0bc"}, + {file = "pyopencl-2023.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e3f5861de88a7d5054cfc8a0f78c42c7b7cd7c65c43a1426a72411111b024658"}, + {file = "pyopencl-2023.1.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c658eb9198235e8866afedb9b32bad4c6a4988c7dff2103e61794cd9ea261b2a"}, + {file = "pyopencl-2023.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d148b21de9f7aa542b576c09ba3c68106658c8a3429f41c0120c7cd4cb55970f"}, + {file = "pyopencl-2023.1.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:63be569b566ad627e7a1331db6cfda3eb82a2076872549f1c89f4e24ee12601a"}, + {file = "pyopencl-2023.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d61a6ca8c2d8f2d7bcf106abff6ac58cb79f335303b02b90b66591b25d1af4aa"}, + {file = "pyopencl-2023.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:daeff57a66c7a2be03345dd919507f2a2b2ed4ce64c3d8416fc01fa947807e59"}, + {file = "pyopencl-2023.1.4-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c059f15d71c680e35704650bc02d7026b5566687fd45ca9f4c789567d0731cfc"}, + {file = "pyopencl-2023.1.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38c1ab4ed770eb2b2f9c34bced444fc81e96dddd188848f028d36cd16fe9fcb9"}, + {file = "pyopencl-2023.1.4-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d195dad3d3a0473373bbf173671900d4519662824b5a81ced5b491cfae5c5e23"}, + {file = "pyopencl-2023.1.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4917db2d0ec5ea7dd3c0cc66dc6a5acadc39a577a6b532293dde57ba3b23fb"}, + {file = "pyopencl-2023.1.4-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c926fb5886a561fe01be907575e396096a75fd35a2a6df5fc080c19959ae8c5c"}, + {file = "pyopencl-2023.1.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35fc3161b2f609018b6e1b22f4aa79fb571a388b61e90177c1d474975af15ce8"}, + {file = "pyopencl-2023.1.4.tar.gz", hash = "sha256:220174efca900e9d5de5aef2aa1b77a6f2550501de92b035a91013aeae4d4c5e"}, ] [package.dependencies] @@ -3608,20 +6274,20 @@ test = ["Mako", "pytest (>=7.0.0)"] [[package]] name = "pyopenssl" -version = "23.2.0" +version = "24.0.0" description = "Python wrapper module around the OpenSSL library" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, - {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, + {file = "pyOpenSSL-24.0.0-py3-none-any.whl", hash = "sha256:ba07553fb6fd6a7a2259adb9b84e12302a9a8a75c44046e8bb5d3e5ee887e3c3"}, + {file = "pyOpenSSL-24.0.0.tar.gz", hash = "sha256:6aa33039a93fffa4563e655b61d11364d01264be8ccb49906101e02a334530bf"}, ] [package.dependencies] -cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" +cryptography = ">=41.0.5,<43" [package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx-rtd-theme"] test = ["flaky", "pretend", "pytest (>=3.0.1)"] [[package]] @@ -3638,6 +6304,16 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pyperclip" +version = "1.8.2" +description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" +optional = false +python-versions = "*" +files = [ + {file = "pyperclip-1.8.2.tar.gz", hash = "sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57"}, +] + [[package]] name = "pyprof2calltree" version = "1.4.5" @@ -3650,36 +6326,38 @@ files = [ [[package]] name = "pyproj" -version = "3.6.0" +version = "3.6.1" description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" optional = false python-versions = ">=3.9" files = [ - {file = "pyproj-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e600f6a2771d3b41aeb2cc1efd96771ae9a01451013da1dd48ff272e7c6e34ef"}, - {file = "pyproj-3.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d7f6cd045df29aae960391dfe06a575c110af598f1dea5add8be6ca42332b0f5"}, - {file = "pyproj-3.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:557e6592855111c84eda176ddf6b130f55d5e2b9cb1c017b8c91b69f37f474f5"}, - {file = "pyproj-3.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de6288b6ceabdeeac01abf627c74414822d322d8f55dc8efe4d29dedd27c5719"}, - {file = "pyproj-3.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e427ccdbb1763872416549bdfa9fa1f5f169054653c4daf674e71480cc39cf11"}, - {file = "pyproj-3.6.0-cp310-cp310-win32.whl", hash = "sha256:1283d3c1960edbb74828f5f3405b27578a9a27f7766ab6a3956f4bd851f08239"}, - {file = "pyproj-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:9de1aab71234bfd3fd648a1152519b5ee152c43113d7d8ea52590a0140129501"}, - {file = "pyproj-3.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:00fab048596c17572fa8980014ef117dbb2a445e6f7ba3b9ddfcc683efc598e7"}, - {file = "pyproj-3.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba5e7c8ddd6ed5a3f9fcf95ea80ba44c931913723de2ece841c94bb38b200c4a"}, - {file = "pyproj-3.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08dfc5c9533c78a97afae9d53b99b810a4a8f97c3be9eb2b8f323b726c736403"}, - {file = "pyproj-3.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18a8bdb87aeb41b60a2e91d32f623227de3569fb83b4c64b174c3a7c5b0ed3ae"}, - {file = "pyproj-3.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe392dfc0eba2248dc08c976a72f52ff9da2bddfddfd9ff5dcf18e8e88200c7"}, - {file = "pyproj-3.6.0-cp311-cp311-win32.whl", hash = "sha256:78276c6b0c831255c97c56dff7313a3571f327a284d8ac63d6a56437a72ed0e0"}, - {file = "pyproj-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:8fbac2eb9a0e425d7d6b7c6f4ebacd675cf3bdef0c59887057b8b4b0374e7c12"}, - {file = "pyproj-3.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:95120d65cbc5983dfd877076f28dbc18b9b329cbee38ca6e217bb7a5a043c099"}, - {file = "pyproj-3.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:830e6de7cfe43853967afee5ef908dfd5aa72d1ec12af9b9e3fecc179886e346"}, - {file = "pyproj-3.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e342b3010b2b20134671564ff9a8c476e5e512bf589477480aded1a5813af7c8"}, - {file = "pyproj-3.6.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23787460fab85ba2f857ee60ffb2e8e21fd9bd5db9833c51c1c05b2a6d9f0be5"}, - {file = "pyproj-3.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595376e4d3bb72b7dceeccbce0f4c43053d47561f17a1ad0224407e9980ee849"}, - {file = "pyproj-3.6.0-cp39-cp39-win32.whl", hash = "sha256:4d8a9773503085eada59b6892c96ddf686ab8cf64cfdc18ad744d13ee76dfa6f"}, - {file = "pyproj-3.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:137a07404f937f264b11b7130cd4cfa00002dbe4333b222e8056db84849c2ea4"}, - {file = "pyproj-3.6.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2799499a4045e4fb73e44c31bdacab0593a253a7a4b6baae6fdd27d604cf9bc2"}, - {file = "pyproj-3.6.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f04f6297c615c3b17f835df2556ac8fb9b4f51f281e960437eaf0cd80e7ae26a"}, - {file = "pyproj-3.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4d2d438b007cb1f8d5f6f308d53d7ff9a2508cff8f9da6e2a93b76ffd98aaf"}, - {file = "pyproj-3.6.0.tar.gz", hash = "sha256:a5b111865b3f0f8b77b3983f2fbe4dd6248fc09d3730295949977c8dcd988062"}, + {file = "pyproj-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab7aa4d9ff3c3acf60d4b285ccec134167a948df02347585fdd934ebad8811b4"}, + {file = "pyproj-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4bc0472302919e59114aa140fd7213c2370d848a7249d09704f10f5b062031fe"}, + {file = "pyproj-3.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5279586013b8d6582e22b6f9e30c49796966770389a9d5b85e25a4223286cd3f"}, + {file = "pyproj-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fafd1f3eb421694857f254a9bdbacd1eb22fc6c24ca74b136679f376f97d35"}, + {file = "pyproj-3.6.1-cp310-cp310-win32.whl", hash = "sha256:c41e80ddee130450dcb8829af7118f1ab69eaf8169c4bf0ee8d52b72f098dc2f"}, + {file = "pyproj-3.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:db3aedd458e7f7f21d8176f0a1d924f1ae06d725228302b872885a1c34f3119e"}, + {file = "pyproj-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882"}, + {file = "pyproj-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a"}, + {file = "pyproj-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85"}, + {file = "pyproj-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915"}, + {file = "pyproj-3.6.1-cp311-cp311-win32.whl", hash = "sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132"}, + {file = "pyproj-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2"}, + {file = "pyproj-3.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1e9fbaf920f0f9b4ee62aab832be3ae3968f33f24e2e3f7fbb8c6728ef1d9746"}, + {file = "pyproj-3.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d227a865356f225591b6732430b1d1781e946893789a609bb34f59d09b8b0f8"}, + {file = "pyproj-3.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83039e5ae04e5afc974f7d25ee0870a80a6bd6b7957c3aca5613ccbe0d3e72bf"}, + {file = "pyproj-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb059ba3bced6f6725961ba758649261d85ed6ce670d3e3b0a26e81cf1aa8d"}, + {file = "pyproj-3.6.1-cp312-cp312-win32.whl", hash = "sha256:2d6ff73cc6dbbce3766b6c0bce70ce070193105d8de17aa2470009463682a8eb"}, + {file = "pyproj-3.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:7a27151ddad8e1439ba70c9b4b2b617b290c39395fa9ddb7411ebb0eb86d6fb0"}, + {file = "pyproj-3.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ba1f9b03d04d8cab24d6375609070580a26ce76eaed54631f03bab00a9c737b"}, + {file = "pyproj-3.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18faa54a3ca475bfe6255156f2f2874e9a1c8917b0004eee9f664b86ccc513d3"}, + {file = "pyproj-3.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd43bd9a9b9239805f406fd82ba6b106bf4838d9ef37c167d3ed70383943ade1"}, + {file = "pyproj-3.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50100b2726a3ca946906cbaa789dd0749f213abf0cbb877e6de72ca7aa50e1ae"}, + {file = "pyproj-3.6.1-cp39-cp39-win32.whl", hash = "sha256:9274880263256f6292ff644ca92c46d96aa7e57a75c6df3f11d636ce845a1877"}, + {file = "pyproj-3.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:36b64c2cb6ea1cc091f329c5bd34f9c01bb5da8c8e4492c709bda6a09f96808f"}, + {file = "pyproj-3.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd93c1a0c6c4aedc77c0fe275a9f2aba4d59b8acf88cebfc19fe3c430cfabf4f"}, + {file = "pyproj-3.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6420ea8e7d2a88cb148b124429fba8cd2e0fae700a2d96eab7083c0928a85110"}, + {file = "pyproj-3.6.1.tar.gz", hash = "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf"}, ] [package.dependencies] @@ -3687,65 +6365,74 @@ certifi = "*" [[package]] name = "pyqt5" -version = "5.15.9" +version = "5.15.2" description = "Python bindings for the Qt cross platform application toolkit" optional = false -python-versions = ">=3.7" +python-versions = ">=3.5" files = [ - {file = "PyQt5-5.15.9-cp37-abi3-macosx_10_13_x86_64.whl", hash = "sha256:883ba5c8a348be78c8be6a3d3ba014c798e679503bce00d76c666c2dc6afe828"}, - {file = "PyQt5-5.15.9-cp37-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:dd5ce10e79fbf1df29507d2daf99270f2057cdd25e4de6fbf2052b46c652e3a5"}, - {file = "PyQt5-5.15.9-cp37-abi3-win32.whl", hash = "sha256:e45c5cc15d4fd26ab5cb0e5cdba60691a3e9086411f8e3662db07a5a4222a696"}, - {file = "PyQt5-5.15.9-cp37-abi3-win_amd64.whl", hash = "sha256:e030d795df4cbbfcf4f38b18e2e119bcc9e177ef658a5094b87bb16cac0ce4c5"}, - {file = "PyQt5-5.15.9.tar.gz", hash = "sha256:dc41e8401a90dc3e2b692b411bd5492ab559ae27a27424eed4bd3915564ec4c0"}, + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-macosx_10_13_intel.whl", hash = "sha256:894ca4ae767a8d6cf5903784b71f755073c78cb8c167eecf6e4ed6b3b055ac6a"}, + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:29889845688a54d62820585ad5b2e0200a36b304ff3d7a555e95599f110ba4ce"}, + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win32.whl", hash = "sha256:ea24f24b7679bf393dd2e4f53fe0ce65021be18304c1ff7a226c2fc5c356d0da"}, + {file = "PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl", hash = "sha256:faaecb76ec65e12673a968e7f5bc02495957e6996f0a3fa0d98895f9e4113746"}, + {file = "PyQt5-5.15.2.tar.gz", hash = "sha256:372b08dc9321d1201e4690182697c5e7ffb2e0770e6b4a45519025134b12e4fc"}, ] [package.dependencies] -PyQt5-Qt5 = ">=5.15.2" -PyQt5-sip = ">=12.11,<13" - -[[package]] -name = "pyqt5-qt5" -version = "5.15.2" -description = "The subset of a Qt installation needed by PyQt5." -optional = false -python-versions = "*" -files = [ - {file = "PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154"}, - {file = "PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a"}, - {file = "PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327"}, - {file = "PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962"}, -] +PyQt5-sip = ">=12.8,<13" [[package]] name = "pyqt5-sip" -version = "12.12.2" +version = "12.13.0" description = "The sip module support for PyQt5" optional = false python-versions = ">=3.7" files = [ - {file = "PyQt5_sip-12.12.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1cc49c8498c34649325d53bcd243c854391f828d9bab4f2f3afd3ee3451cab72"}, - {file = "PyQt5_sip-12.12.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c8f6e7a697d0ddf754798988fae7b2a0da04f6a59fb13ae863e5d1da4b280c4f"}, - {file = "PyQt5_sip-12.12.2-cp310-cp310-win32.whl", hash = "sha256:7e572c8104e75db2c69609d195daf44c7b965dcb1c5b48e30fc376868909be56"}, - {file = "PyQt5_sip-12.12.2-cp310-cp310-win_amd64.whl", hash = "sha256:6a65697aa0fdb66e20d7b1ef8adfacc1caf1e61655530920172bf3a2fb1148cd"}, - {file = "PyQt5_sip-12.12.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:761e018dbbc46daccdb01f8f0dcc0d055c76834d839f0343cbec4b0ecbbde512"}, - {file = "PyQt5_sip-12.12.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d2b127ba5155bff452944b8a96ba06d7ec2161f48a2f9cc190425bfca94ab6b"}, - {file = "PyQt5_sip-12.12.2-cp311-cp311-win32.whl", hash = "sha256:26e75bc4ffd8e6b19ae96fe93dc135eb5aea03e4570724d4b3c40dbf36f3a2e6"}, - {file = "PyQt5_sip-12.12.2-cp311-cp311-win_amd64.whl", hash = "sha256:d9548f353f17407d00f67d08c737de9f5c067352c3bdac8571492c614c2893eb"}, - {file = "PyQt5_sip-12.12.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7e640b7636d86271ba8969b260e1655068b44750f20801ebc80f49a1aa737bf9"}, - {file = "PyQt5_sip-12.12.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e46d957fbeecaa1437f2dd715407b1e59e0918cc29382c7ea79784c5f3cbe0d2"}, - {file = "PyQt5_sip-12.12.2-cp37-cp37m-win32.whl", hash = "sha256:cb4523097f1ccabb95b3197a58278a40fc944b33791d3406bfa397e12303b6c6"}, - {file = "PyQt5_sip-12.12.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ed04bd0065d870912c1b0a4b34b8a78698c76d77f15474c3e841b0b6dd2f429f"}, - {file = "PyQt5_sip-12.12.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:71795c177010e52109812b03ec919020461ec42a7d9d241a45fe6d708529b5a6"}, - {file = "PyQt5_sip-12.12.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:de06b6bd8241a189f729b8c093ce5dcf5928489eb7748bda28e28324e57544b0"}, - {file = "PyQt5_sip-12.12.2-cp38-cp38-win32.whl", hash = "sha256:7050ad8f94370eb7e4caa022b7e6d8b2de615e0714b557ca2098c82c0132074a"}, - {file = "PyQt5_sip-12.12.2-cp38-cp38-win_amd64.whl", hash = "sha256:67eed70427d3291e5c52c349fb4619c57c9a8810ab8d78a142c00edcbfd20d3b"}, - {file = "PyQt5_sip-12.12.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cf74db9a1542f66793ccc00e403c8c2c36c67c0cff0fb01d23fe71cc1c56c788"}, - {file = "PyQt5_sip-12.12.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:23e983119f760dc6c1a1e6cb21fd4c268d14c4ee497de6da9ce2b9d46f9779b2"}, - {file = "PyQt5_sip-12.12.2-cp39-cp39-win32.whl", hash = "sha256:a88ce85176639723f04cf5ce59157ecf3a9faca5d5dd1fe82d5ef46a3bd1d102"}, - {file = "PyQt5_sip-12.12.2-cp39-cp39-win_amd64.whl", hash = "sha256:7f13e71f5171f30d8b4176c081f0203a43e1704746b4cdaa837477945177b2a0"}, - {file = "PyQt5_sip-12.12.2.tar.gz", hash = "sha256:10d9bfa9f59f0fd1cad81be187479316ffc95684f573efea94512cb4257d2b17"}, + {file = "PyQt5_sip-12.13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a7e3623b2c743753625c4650ec7696362a37fb36433b61824cf257f6d3d43cca"}, + {file = "PyQt5_sip-12.13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6e4ac714252370ca037c7d609da92388057165edd4f94e63354f6d65c3ed9d53"}, + {file = "PyQt5_sip-12.13.0-cp310-cp310-win32.whl", hash = "sha256:d5032da3fff62da055104926ffe76fd6044c1221f8ad35bb60804bcb422fe866"}, + {file = "PyQt5_sip-12.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a8cdd6cb66adcbe5c941723ed1544eba05cf19b6c961851b58ccdae1c894afb"}, + {file = "PyQt5_sip-12.13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f85fb633a522f04e48008de49dce1ff1d947011b48885b8428838973fbca412"}, + {file = "PyQt5_sip-12.13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec60162e034c42fb99859206d62b83b74f987d58937b3a82bdc07b5c3d190dec"}, + {file = "PyQt5_sip-12.13.0-cp311-cp311-win32.whl", hash = "sha256:205cd449d08a2b024a468fb6100cd7ed03e946b4f49706f508944006f955ae1a"}, + {file = "PyQt5_sip-12.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:1c8371682f77852256f1f2d38c41e2e684029f43330f0635870895ab01c02f6c"}, + {file = "PyQt5_sip-12.13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7fe3375b508c5bc657d73b9896bba8a768791f1f426c68053311b046bcebdddf"}, + {file = "PyQt5_sip-12.13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:773731b1b5ab1a7cf5621249f2379c95e3d2905e9bd96ff3611b119586daa876"}, + {file = "PyQt5_sip-12.13.0-cp312-cp312-win32.whl", hash = "sha256:fb4a5271fa3f6bc2feb303269a837a95a6d8dd16be553aa40e530de7fb81bfdf"}, + {file = "PyQt5_sip-12.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4498f3b1b15f43f5d12963accdce0fd652b0bcaae6baf8008663365827444c"}, + {file = "PyQt5_sip-12.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b984c2620a7a7eaf049221b09ae50a345317add2624c706c7d2e9e6632a9587"}, + {file = "PyQt5_sip-12.13.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3188a06956aef86f604fb0d14421a110fad70d2a9e943dbacbfc3303f651dade"}, + {file = "PyQt5_sip-12.13.0-cp38-cp38-win32.whl", hash = "sha256:108a15f603e1886988c4b0d9d41cb74c9f9815bf05cefc843d559e8c298a10ce"}, + {file = "PyQt5_sip-12.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:db228cd737f5cbfc66a3c3e50042140cb80b30b52edc5756dbbaa2346ec73137"}, + {file = "PyQt5_sip-12.13.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5338773bbaedaa4f16a73c142fb23cc18c327be6c338813af70260b756c7bc92"}, + {file = "PyQt5_sip-12.13.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:29fa9cc964517c9fc3f94f072b9a2aeef4e7a2eda1879cb835d9e06971161cdf"}, + {file = "PyQt5_sip-12.13.0-cp39-cp39-win32.whl", hash = "sha256:96414c93f3d33963887cf562d50d88b955121fbfd73f937c8eca46643e77bf61"}, + {file = "PyQt5_sip-12.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:bbc7cd498bf19e0862097be1ad2243e824dea56726f00c11cff1b547c2d31d01"}, + {file = "PyQt5_sip-12.13.0.tar.gz", hash = "sha256:7f321daf84b9c9dbca61b80e1ef37bdaffc0e93312edae2cd7da25b953971d91"}, ] +[[package]] +name = "pyrect" +version = "0.2.0" +description = "PyRect is a simple module with a Rect class for Pygame-like rectangular areas." +optional = false +python-versions = "*" +files = [ + {file = "PyRect-0.2.0.tar.gz", hash = "sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78"}, +] + +[[package]] +name = "pyscreeze" +version = "0.1.30" +description = "A simple, cross-platform screenshot module for Python 2 and 3." +optional = false +python-versions = "*" +files = [ + {file = "PyScreeze-0.1.30.tar.gz", hash = "sha256:74098ad048e76a6231dcfa6243343af94459b8c829f9ccb7a44a5d3b147a67d1"}, +] + +[package.dependencies] +Pillow = {version = ">=9.3.0", markers = "python_version == \"3.11\""} + [[package]] name = "pyserial" version = "3.5" @@ -3762,20 +6449,20 @@ cp2110 = ["hidapi"] [[package]] name = "pytest" -version = "7.4.2" +version = "8.0.0" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, - {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, + {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, + {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, ] [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" +pluggy = ">=1.3.0,<2.0" [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] @@ -3800,19 +6487,33 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-cpp" -version = "2.4.0" +version = "2.5.0" description = "Use pytest's runner to discover and execute C++ tests" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-cpp-2.4.0.tar.gz", hash = "sha256:dcb8b09d4c714fc7f778dc40a7c2c47e73cc50280d7f9bba3bdd3ca98abd4685"}, - {file = "pytest_cpp-2.4.0-py3-none-any.whl", hash = "sha256:e7c5f40b70b00cc09d672a1584e35beb9b9553512cdd4b1d1f99468747b3bc31"}, + {file = "pytest-cpp-2.5.0.tar.gz", hash = "sha256:695604baa21bc95291bb4ea7263a7aa960753de57c2d17d224c4652fbcf65cdc"}, + {file = "pytest_cpp-2.5.0-py3-none-any.whl", hash = "sha256:137bcaa6487307b4c362245fcd4abf35de64ee85e6375f4d06cd31e6a64f9701"}, ] [package.dependencies] colorama = "*" pytest = ">=7.0" +[[package]] +name = "pytest-randomly" +version = "3.15.0" +description = "Pytest plugin to randomly order tests and control random.seed." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest_randomly-3.15.0-py3-none-any.whl", hash = "sha256:0516f4344b29f4e9cdae8bce31c4aeebf59d0b9ef05927c33354ff3859eeeca6"}, + {file = "pytest_randomly-3.15.0.tar.gz", hash = "sha256:b908529648667ba5e54723088edd6f82252f540cc340d748d1fa985539687047"}, +] + +[package.dependencies] +pytest = "*" + [[package]] name = "pytest-subtests" version = "0.11.0" @@ -3830,40 +6531,27 @@ pytest = ">=7.0" [[package]] name = "pytest-timeout" -version = "2.1.0" +version = "2.2.0" description = "pytest plugin to abort hanging tests" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pytest-timeout-2.1.0.tar.gz", hash = "sha256:c07ca07404c612f8abbe22294b23c368e2e5104b521c1790195561f37e1ac3d9"}, - {file = "pytest_timeout-2.1.0-py3-none-any.whl", hash = "sha256:f6f50101443ce70ad325ceb4473c4255e9d74e3c7cd0ef827309dfa4c0d975c6"}, + {file = "pytest-timeout-2.2.0.tar.gz", hash = "sha256:3b0b95dabf3cb50bac9ef5ca912fa0cfc286526af17afc806824df20c2f72c90"}, + {file = "pytest_timeout-2.2.0-py3-none-any.whl", hash = "sha256:bde531e096466f49398a59f2dde76fa78429a09a12411466f88a07213e220de2"}, ] [package.dependencies] pytest = ">=5.0.0" -[[package]] -name = "pytest-timeouts" -version = "1.2.1" -description = "Linux-only Pytest plugin to control durations of various test case execution phases" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pytest-timeouts-1.2.1.tar.gz", hash = "sha256:390351afc7ecb422ea0ec38081e0acd91cad416b383944a9a3358087de50c2fb"}, -] - -[package.dependencies] -pytest = ">=3.1" - [[package]] name = "pytest-xdist" -version = "3.3.1" +version = "3.5.0" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"}, - {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"}, + {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, + {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, ] [package.dependencies] @@ -3889,6 +6577,30 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-xlib" +version = "0.33" +description = "Python X Library" +optional = false +python-versions = "*" +files = [ + {file = "python-xlib-0.33.tar.gz", hash = "sha256:55af7906a2c75ce6cb280a584776080602444f75815a7aff4d287bb2d7018b32"}, + {file = "python_xlib-0.33-py2.py3-none-any.whl", hash = "sha256:c3534038d42e0df2f1392a1b30a15a4ff5fdc2b86cfa94f072bf11b10a164398"}, +] + +[package.dependencies] +six = ">=1.10.0" + +[[package]] +name = "python3-xlib" +version = "0.15" +description = "Python3 X Library" +optional = false +python-versions = "*" +files = [ + {file = "python3-xlib-0.15.tar.gz", hash = "sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8"}, +] + [[package]] name = "pytools" version = "2023.1.1" @@ -3906,15 +6618,25 @@ platformdirs = ">=2.2.0" [package.extras] numpy = ["numpy (>=1.6.0)"] +[[package]] +name = "pytweening" +version = "1.0.7" +description = "A collection of tweening / easing functions." +optional = false +python-versions = "*" +files = [ + {file = "pytweening-1.0.7.tar.gz", hash = "sha256:767134f1bf57b76c1ce9f692dd1cfc776d9a279de6724e8d04854508fd7ededb"}, +] + [[package]] name = "pytz" -version = "2023.3.post1" +version = "2023.4" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2023.4-py2.py3-none-any.whl", hash = "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a"}, + {file = "pytz-2023.4.tar.gz", hash = "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40"}, ] [[package]] @@ -3940,6 +6662,46 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] +[[package]] +name = "pywinbox" +version = "0.6" +description = "Cross-Platform and multi-monitor toolkit to handle rectangular areas and windows box" +optional = false +python-versions = "*" +files = [ + {file = "PyWinBox-0.6-py3-none-any.whl", hash = "sha256:3547e459caf466d3beb2230b02208a348478428ebca61ce3e004fb5468976f33"}, +] + +[package.dependencies] +pyobjc = {version = ">=8.1", markers = "sys_platform == \"darwin\""} +python-xlib = {version = ">=0.21", markers = "sys_platform == \"linux\""} +pywin32 = {version = ">=302", markers = "sys_platform == \"win32\""} +typing-extensions = ">=4.4.0" + +[package.extras] +dev = ["mypy (>=0.990)", "pywinctl (>=0.1)", "types-python-xlib (>=0.32)", "types-pywin32 (>=305.0.0.3)", "types-setuptools (>=65.5)"] + +[[package]] +name = "pywinctl" +version = "0.3" +description = "Cross-Platform toolkit to get info on and control windows on screen" +optional = false +python-versions = "*" +files = [ + {file = "PyWinCtl-0.3-py3-none-any.whl", hash = "sha256:3603981c87b0c64987e7be857d89450f98792b01f49006a17dac758e11141dd7"}, +] + +[package.dependencies] +pymonctl = ">=0.6" +pyobjc = {version = ">=8.1", markers = "sys_platform == \"darwin\""} +python-xlib = {version = ">=0.21", markers = "sys_platform == \"linux\""} +pywin32 = {version = ">=302", markers = "sys_platform == \"win32\""} +pywinbox = ">=0.6" +typing-extensions = ">=4.4.0" + +[package.extras] +dev = ["mypy (>=0.990)", "types-python-xlib (>=0.32)", "types-pywin32 (>=305.0.0.3)", "types-setuptools (>=65.5)"] + [[package]] name = "pyyaml" version = "6.0.1" @@ -3965,6 +6727,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4001,104 +6764,104 @@ files = [ [[package]] name = "pyzmq" -version = "25.1.1" +version = "25.1.2" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, - {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, - {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, - {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, - {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, - {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, - {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, - {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, - {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, - {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, - {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, - {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, - {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, - {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, - {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, - {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, - {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, - {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, - {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, - {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, - {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, - {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, - {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, - {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, - {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, - {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, - {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, - {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, - {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, - {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, - {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, - {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, - {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, - {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, - {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, - {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, - {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, - {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, + {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, + {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"}, + {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"}, + {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"}, + {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"}, + {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"}, + {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"}, + {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"}, + {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"}, + {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"}, + {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"}, + {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"}, + {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"}, + {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"}, + {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"}, + {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"}, + {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"}, + {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"}, + {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"}, + {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"}, + {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"}, + {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"}, + {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"}, + {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"}, + {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"}, + {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"}, + {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"}, ] [package.dependencies] @@ -4125,113 +6888,133 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rubicon-objc" +version = "0.4.7" +description = "A bridge between an Objective C runtime environment and Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "rubicon-objc-0.4.7.tar.gz", hash = "sha256:be937d864bd1229f860defabb89b40c53634eedc36448d89ad3c14eb3286e509"}, + {file = "rubicon_objc-0.4.7-py3-none-any.whl", hash = "sha256:f37108e35d5da1a78ab3eed2d03b095934f5f618329a939e4bd2ada9894eff6e"}, +] + +[package.extras] +dev = ["pre-commit (==3.5.0)", "pytest (==7.4.2)", "pytest-tldr (==0.2.5)", "setuptools-scm[toml] (==8.0.4)", "tox (==4.11.3)"] +docs = ["furo (==2023.9.10)", "pyenchant (==3.2.2)", "sphinx (==7.1.2)", "sphinx (==7.2.6)", "sphinx-autobuild (==2021.3.14)", "sphinx-copybutton (==0.5.2)", "sphinx-tabs (==3.4.1)", "sphinxcontrib-spelling (==8.0.0)"] + +[[package]] +name = "ruff" +version = "0.1.14" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:96f76536df9b26622755c12ed8680f159817be2f725c17ed9305b472a757cdbb"}, + {file = "ruff-0.1.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab3f71f64498c7241123bb5a768544cf42821d2a537f894b22457a543d3ca7a9"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7060156ecc572b8f984fd20fd8b0fcb692dd5d837b7606e968334ab7ff0090ab"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a53d8e35313d7b67eb3db15a66c08434809107659226a90dcd7acb2afa55faea"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea9be712b8f5b4ebed40e1949379cfb2a7d907f42921cf9ab3aae07e6fba9eb"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2270504d629a0b064247983cbc495bed277f372fb9eaba41e5cf51f7ba705a6a"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80258bb3b8909b1700610dfabef7876423eed1bc930fe177c71c414921898efa"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:653230dd00aaf449eb5ff25d10a6e03bc3006813e2cb99799e568f55482e5cae"}, + {file = "ruff-0.1.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b3acc6c4e6928459ba9eb7459dd4f0c4bf266a053c863d72a44c33246bfdbf"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6b3dadc9522d0eccc060699a9816e8127b27addbb4697fc0c08611e4e6aeb8b5"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c8eca1a47b4150dc0fbec7fe68fc91c695aed798532a18dbb1424e61e9b721f"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:62ce2ae46303ee896fc6811f63d6dabf8d9c389da0f3e3f2bce8bc7f15ef5488"}, + {file = "ruff-0.1.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b2027dde79d217b211d725fc833e8965dc90a16d0d3213f1298f97465956661b"}, + {file = "ruff-0.1.14-py3-none-win32.whl", hash = "sha256:722bafc299145575a63bbd6b5069cb643eaa62546a5b6398f82b3e4403329cab"}, + {file = "ruff-0.1.14-py3-none-win_amd64.whl", hash = "sha256:e3d241aa61f92b0805a7082bd89a9990826448e4d0398f0e2bc8f05c75c63d99"}, + {file = "ruff-0.1.14-py3-none-win_arm64.whl", hash = "sha256:269302b31ade4cde6cf6f9dd58ea593773a37ed3f7b97e793c8594b262466b67"}, + {file = "ruff-0.1.14.tar.gz", hash = "sha256:ad3f8088b2dfd884820289a06ab718cde7d38b94972212cc4ba90d5fbc9955f3"}, +] + [[package]] name = "scipy" -version = "1.11.2" +version = "1.12.0" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = "<3.13,>=3.9" +python-versions = ">=3.9" files = [ - {file = "scipy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b997a5369e2d30c97995dcb29d638701f8000d04df01b8e947f206e5d0ac788"}, - {file = "scipy-1.11.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:95763fbda1206bec41157582bea482f50eb3702c85fffcf6d24394b071c0e87a"}, - {file = "scipy-1.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e367904a0fec76433bf3fbf3e85bf60dae8e9e585ffd21898ab1085a29a04d16"}, - {file = "scipy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d690e1ca993c8f7ede6d22e5637541217fc6a4d3f78b3672a6fe454dbb7eb9a7"}, - {file = "scipy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d2b813bfbe8dec6a75164523de650bad41f4405d35b0fa24c2c28ae07fcefb20"}, - {file = "scipy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:afdb0d983f6135d50770dd979df50bf1c7f58b5b33e0eb8cf5c73c70600eae1d"}, - {file = "scipy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d9886f44ef8c9e776cb7527fb01455bf4f4a46c455c4682edc2c2cc8cd78562"}, - {file = "scipy-1.11.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1342ca385c673208f32472830c10110a9dcd053cf0c4b7d4cd7026d0335a6c1d"}, - {file = "scipy-1.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b133f237bd8ba73bad51bc12eb4f2d84cbec999753bf25ba58235e9fc2096d80"}, - {file = "scipy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aeb87661de987f8ec56fa6950863994cd427209158255a389fc5aea51fa7055"}, - {file = "scipy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90d3b1364e751d8214e325c371f0ee0dd38419268bf4888b2ae1040a6b266b2a"}, - {file = "scipy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:f73102f769ee06041a3aa26b5841359b1a93cc364ce45609657751795e8f4a4a"}, - {file = "scipy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa4909c6c20c3d91480533cddbc0e7c6d849e7d9ded692918c76ce5964997898"}, - {file = "scipy-1.11.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ac74b1512d38718fb6a491c439aa7b3605b96b1ed3be6599c17d49d6c60fca18"}, - {file = "scipy-1.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8425fa963a32936c9773ee3ce44a765d8ff67eed5f4ac81dc1e4a819a238ee9"}, - {file = "scipy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:542a757e2a6ec409e71df3d8fd20127afbbacb1c07990cb23c5870c13953d899"}, - {file = "scipy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea932570b1c2a30edafca922345854ff2cd20d43cd9123b6dacfdecebfc1a80b"}, - {file = "scipy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:4447ad057d7597476f9862ecbd9285bbf13ba9d73ce25acfa4e4b11c6801b4c9"}, - {file = "scipy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b0620240ef445b5ddde52460e6bc3483b7c9c750275369379e5f609a1050911c"}, - {file = "scipy-1.11.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f28f1f6cfeb48339c192efc6275749b2a25a7e49c4d8369a28b6591da02fbc9a"}, - {file = "scipy-1.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:214cdf04bbae7a54784f8431f976704ed607c4bc69ba0d5d5d6a9df84374df76"}, - {file = "scipy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10eb6af2f751aa3424762948e5352f707b0dece77288206f227864ddf675aca0"}, - {file = "scipy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0f3261f14b767b316d7137c66cc4f33a80ea05841b9c87ad83a726205b901423"}, - {file = "scipy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:2c91cf049ffb5575917f2a01da1da082fd24ed48120d08a6e7297dfcac771dcd"}, - {file = "scipy-1.11.2.tar.gz", hash = "sha256:b29318a5e39bd200ca4381d80b065cdf3076c7d7281c5e36569e99273867f61d"}, + {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, + {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, + {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, + {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, + {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, + {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, + {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, + {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, + {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, + {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, + {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, ] [package.dependencies] -numpy = ">=1.21.6,<1.28.0" +numpy = ">=1.22.4,<1.29.0" [package.extras] dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "scons" -version = "4.5.2" +version = "4.6.0.post1" description = "Open Source next-generation build tool." optional = false python-versions = ">=3.6" files = [ - {file = "SCons-4.5.2-py3-none-any.whl", hash = "sha256:2f66a1c5c485068a496c12356583eefb2d79e17177278c7334b12b460f0503ce"}, - {file = "SCons-4.5.2.tar.gz", hash = "sha256:813360b2bce476bc9cc12a0f3a22d46ce520796b352557202cb07d3e402f5458"}, + {file = "SCons-4.6.0.post1-py3-none-any.whl", hash = "sha256:9e0527b7a924e7af2b312c1f8961ef2776847bdc46a4d886af5a75f301da7ce3"}, + {file = "SCons-4.6.0.post1.tar.gz", hash = "sha256:d467a34546f5366a32e4d4419611d0138dd680210f24aa8491ebe9e4b83456cf"}, ] [package.dependencies] setuptools = "*" -[[package]] -name = "sconscontrib" -version = "1.0" -description = "Contributed builders and other useful logic for the SCons build system.," -optional = false -python-versions = "<4,>=3.6" -files = [] -develop = false - -[package.dependencies] -docutils = "*" -panflute = "*" -SCons = ">=4" -sphinx = "*" - -[package.source] -type = "git" -url = "https://github.com/SCons/scons-contrib.git" -reference = "HEAD" -resolved_reference = "f3b0100d3a628e4d18f496815903660a99489bae" - [[package]] name = "seaborn" -version = "0.12.2" +version = "0.13.2" description = "Statistical data visualization" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "seaborn-0.12.2-py3-none-any.whl", hash = "sha256:ebf15355a4dba46037dfd65b7350f014ceb1f13c05e814eda2c9f5fd731afc08"}, - {file = "seaborn-0.12.2.tar.gz", hash = "sha256:374645f36509d0dcab895cba5b47daf0586f77bfe3b36c97c607db7da5be0139"}, + {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, + {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, ] [package.dependencies] -matplotlib = ">=3.1,<3.6.1 || >3.6.1" -numpy = ">=1.17,<1.24.0 || >1.24.0" -pandas = ">=0.25" +matplotlib = ">=3.4,<3.6.1 || >3.6.1" +numpy = ">=1.20,<1.24.0 || >1.24.0" +pandas = ">=1.2" [package.extras] dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] -docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] -stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] +docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx (<6.0.0)", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] +stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] [[package]] name = "sentry-sdk" -version = "1.28.1" +version = "1.39.2" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = "*" files = [ - {file = "sentry-sdk-1.28.1.tar.gz", hash = "sha256:dcd88c68aa64dae715311b5ede6502fd684f70d00a7cd4858118f0ba3153a3ae"}, - {file = "sentry_sdk-1.28.1-py2.py3-none-any.whl", hash = "sha256:6bdb25bd9092478d3a817cb0d01fa99e296aea34d404eac3ca0037faa5c2aa0a"}, + {file = "sentry-sdk-1.39.2.tar.gz", hash = "sha256:24c83b0b41c887d33328a9166f5950dc37ad58f01c9f2fbff6b87a6f1094170c"}, + {file = "sentry_sdk-1.39.2-py2.py3-none-any.whl", hash = "sha256:acaf597b30258fc7663063b291aa99e58f3096e91fe1e6634f4b79f9c1943e8e"}, ] [package.dependencies] @@ -4241,10 +7024,12 @@ urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} [package.extras] aiohttp = ["aiohttp (>=3.5)"] arq = ["arq (>=0.23)"] +asyncpg = ["asyncpg (>=0.23)"] beam = ["apache-beam (>=2.12)"] bottle = ["bottle (>=0.12.13)"] celery = ["celery (>=3)"] chalice = ["chalice (>=1.16.0)"] +clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] django = ["django (>=1.8)"] falcon = ["falcon (>=1.4)"] fastapi = ["fastapi (>=0.79.0)"] @@ -4254,7 +7039,8 @@ httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] loguru = ["loguru (>=0.5)"] opentelemetry = ["opentelemetry-distro (>=0.35b0)"] -pure-eval = ["asttokens", "executing", "pure-eval"] +opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"] +pure-eval = ["asttokens", "executing", "pure_eval"] pymongo = ["pymongo (>=3.1)"] pyspark = ["pyspark (>=2.4.4)"] quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] @@ -4267,83 +7053,99 @@ tornado = ["tornado (>=5)"] [[package]] name = "setproctitle" -version = "1.3.2" +version = "1.3.3" description = "A Python module to customize the process title" optional = false python-versions = ">=3.7" files = [ - {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:288943dec88e178bb2fd868adf491197cc0fc8b6810416b1c6775e686bab87fe"}, - {file = "setproctitle-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:630f6fe5e24a619ccf970c78e084319ee8be5be253ecc9b5b216b0f474f5ef18"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c877691b90026670e5a70adfbcc735460a9f4c274d35ec5e8a43ce3f8443005"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a55fe05f15c10e8c705038777656fe45e3bd676d49ad9ac8370b75c66dd7cd7"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab45146c71ca6592c9cc8b354a2cc9cc4843c33efcbe1d245d7d37ce9696552d"}, - {file = "setproctitle-1.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00c9d5c541a2713ba0e657e0303bf96ddddc412ef4761676adc35df35d7c246"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:265ecbe2c6eafe82e104f994ddd7c811520acdd0647b73f65c24f51374cf9494"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c2c46200656280a064073447ebd363937562debef329482fd7e570c8d498f806"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:fa2f50678f04fda7a75d0fe5dd02bbdd3b13cbe6ed4cf626e4472a7ccf47ae94"}, - {file = "setproctitle-1.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7f2719a398e1a2c01c2a63bf30377a34d0b6ef61946ab9cf4d550733af8f1ef1"}, - {file = "setproctitle-1.3.2-cp310-cp310-win32.whl", hash = "sha256:e425be62524dc0c593985da794ee73eb8a17abb10fe692ee43bb39e201d7a099"}, - {file = "setproctitle-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:e85e50b9c67854f89635a86247412f3ad66b132a4d8534ac017547197c88f27d"}, - {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a97d51c17d438cf5be284775a322d57b7ca9505bb7e118c28b1824ecaf8aeaa"}, - {file = "setproctitle-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:587c7d6780109fbd8a627758063d08ab0421377c0853780e5c356873cdf0f077"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d17c8bd073cbf8d141993db45145a70b307385b69171d6b54bcf23e5d644de"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e932089c35a396dc31a5a1fc49889dd559548d14cb2237adae260382a090382e"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e4f8f12258a8739c565292a551c3db62cca4ed4f6b6126664e2381acb4931bf"}, - {file = "setproctitle-1.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:570d255fd99c7f14d8f91363c3ea96bd54f8742275796bca67e1414aeca7d8c3"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a8e0881568c5e6beff91ef73c0ec8ac2a9d3ecc9edd6bd83c31ca34f770910c4"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4bba3be4c1fabf170595b71f3af46c6d482fbe7d9e0563999b49999a31876f77"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:37ece938110cab2bb3957e3910af8152ca15f2b6efdf4f2612e3f6b7e5459b80"}, - {file = "setproctitle-1.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db684d6bbb735a80bcbc3737856385b55d53f8a44ce9b46e9a5682c5133a9bf7"}, - {file = "setproctitle-1.3.2-cp311-cp311-win32.whl", hash = "sha256:ca58cd260ea02759238d994cfae844fc8b1e206c684beb8f38877dcab8451dfc"}, - {file = "setproctitle-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:88486e6cce2a18a033013d17b30a594f1c5cb42520c49c19e6ade40b864bb7ff"}, - {file = "setproctitle-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:92c626edc66169a1b09e9541b9c0c9f10488447d8a2b1d87c8f0672e771bc927"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710e16fa3bade3b026907e4a5e841124983620046166f355bbb84be364bf2a02"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f29b75e86260b0ab59adb12661ef9f113d2f93a59951373eb6d68a852b13e83"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c8d9650154afaa86a44ff195b7b10d683c73509d085339d174e394a22cccbb9"}, - {file = "setproctitle-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0452282258dfcc01697026a8841258dd2057c4438b43914b611bccbcd048f10"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e49ae693306d7624015f31cb3e82708916759d592c2e5f72a35c8f4cc8aef258"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1ff863a20d1ff6ba2c24e22436a3daa3cd80be1dfb26891aae73f61b54b04aca"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:55ce1e9925ce1765865442ede9dca0ba9bde10593fcd570b1f0fa25d3ec6b31c"}, - {file = "setproctitle-1.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7fe9df7aeb8c64db6c34fc3b13271a363475d77bc157d3f00275a53910cb1989"}, - {file = "setproctitle-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:e5c50e164cd2459bc5137c15288a9ef57160fd5cbf293265ea3c45efe7870865"}, - {file = "setproctitle-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a499fff50387c1520c085a07578a000123f519e5f3eee61dd68e1d301659651f"}, - {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b932c3041aa924163f4aab970c2f0e6b4d9d773f4d50326e0ea1cd69240e5c5"}, - {file = "setproctitle-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4bfc89bd33ebb8e4c0e9846a09b1f5a4a86f5cb7a317e75cc42fee1131b4f4f"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd3cf4286a60fdc95451d8d14e0389a6b4f5cebe02c7f2609325eb016535963"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fb4f769c02f63fac90989711a3fee83919f47ae9afd4758ced5d86596318c65"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5194b4969f82ea842a4f6af2f82cd16ebdc3f1771fb2771796e6add9835c1973"}, - {file = "setproctitle-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cde41857a644b7353a0060b5f94f7ba7cf593ebde5a1094da1be581ac9a31"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9124bedd8006b0e04d4e8a71a0945da9b67e7a4ab88fdad7b1440dc5b6122c42"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8a09d570b39517de10ee5b718730e171251ce63bbb890c430c725c8c53d4484"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8ff3c8cb26afaed25e8bca7b9dd0c1e36de71f35a3a0706b5c0d5172587a3827"}, - {file = "setproctitle-1.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:589be87172b238f839e19f146b9ea47c71e413e951ef0dc6db4218ddacf3c202"}, - {file = "setproctitle-1.3.2-cp38-cp38-win32.whl", hash = "sha256:4749a2b0c9ac52f864d13cee94546606f92b981b50e46226f7f830a56a9dc8e1"}, - {file = "setproctitle-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:e43f315c68aa61cbdef522a2272c5a5b9b8fd03c301d3167b5e1343ef50c676c"}, - {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de3a540cd1817ede31f530d20e6a4935bbc1b145fd8f8cf393903b1e02f1ae76"}, - {file = "setproctitle-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4058564195b975ddc3f0462375c533cce310ccdd41b80ac9aed641c296c3eff4"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c5d5dad7c28bdd1ec4187d818e43796f58a845aa892bb4481587010dc4d362b"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffc61a388a5834a97953d6444a2888c24a05f2e333f9ed49f977a87bb1ad4761"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fa1a0fbee72b47dc339c87c890d3c03a72ea65c061ade3204f285582f2da30f"}, - {file = "setproctitle-1.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8a988c7220c002c45347430993830666e55bc350179d91fcee0feafe64e1d4"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bae283e85fc084b18ffeb92e061ff7ac5af9e183c9d1345c93e178c3e5069cbe"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fed18e44711c5af4b681c2b3b18f85e6f0f1b2370a28854c645d636d5305ccd8"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b34baef93bfb20a8ecb930e395ccd2ae3268050d8cf4fe187de5e2bd806fd796"}, - {file = "setproctitle-1.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7f0bed90a216ef28b9d227d8d73e28a8c9b88c0f48a082d13ab3fa83c581488f"}, - {file = "setproctitle-1.3.2-cp39-cp39-win32.whl", hash = "sha256:4d8938249a7cea45ab7e1e48b77685d0f2bab1ebfa9dde23e94ab97968996a7c"}, - {file = "setproctitle-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a47d97a75fd2d10c37410b180f67a5835cb1d8fdea2648fd7f359d4277f180b9"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dad42e676c5261eb50fdb16bdf3e2771cf8f99a79ef69ba88729aeb3472d8575"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c91b9bc8985d00239f7dc08a49927a7ca1ca8a6af2c3890feec3ed9665b6f91e"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8579a43eafd246e285eb3a5b939e7158073d5087aacdd2308f23200eac2458b"}, - {file = "setproctitle-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:2fbd8187948284293f43533c150cd69a0e4192c83c377da837dbcd29f6b83084"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:faec934cfe5fd6ac1151c02e67156c3f526e82f96b24d550b5d51efa4a5527c6"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1aafc91cbdacc9e5fe712c52077369168e6b6c346f3a9d51bf600b53eae56bb"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b617f12c9be61e8f4b2857be4a4319754756845dbbbd9c3718f468bbb1e17bcb"}, - {file = "setproctitle-1.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b2c9cb2705fc84cb8798f1ba74194f4c080aaef19d9dae843591c09b97678e98"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a149a5f7f2c5a065d4e63cb0d7a4b6d3b66e6e80f12e3f8827c4f63974cbf122"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e3ac25bfc4a0f29d2409650c7532d5ddfdbf29f16f8a256fc31c47d0dc05172"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d884e22037b23fa25b2baf1a3316602ed5c5971eb3e9d771a38c3a69ce6e13"}, - {file = "setproctitle-1.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7aa0aac1711fadffc1d51e9d00a3bea61f68443d6ac0241a224e4d622489d665"}, - {file = "setproctitle-1.3.2.tar.gz", hash = "sha256:b9fb97907c830d260fa0658ed58afd48a86b2b88aac521135c352ff7fd3477fd"}, + {file = "setproctitle-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:897a73208da48db41e687225f355ce993167079eda1260ba5e13c4e53be7f754"}, + {file = "setproctitle-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c331e91a14ba4076f88c29c777ad6b58639530ed5b24b5564b5ed2fd7a95452"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbbd6c7de0771c84b4aa30e70b409565eb1fc13627a723ca6be774ed6b9d9fa3"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c05ac48ef16ee013b8a326c63e4610e2430dbec037ec5c5b58fcced550382b74"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1342f4fdb37f89d3e3c1c0a59d6ddbedbde838fff5c51178a7982993d238fe4f"}, + {file = "setproctitle-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc74e84fdfa96821580fb5e9c0b0777c1c4779434ce16d3d62a9c4d8c710df39"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9617b676b95adb412bb69645d5b077d664b6882bb0d37bfdafbbb1b999568d85"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6a249415f5bb88b5e9e8c4db47f609e0bf0e20a75e8d744ea787f3092ba1f2d0"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:38da436a0aaace9add67b999eb6abe4b84397edf4a78ec28f264e5b4c9d53cd5"}, + {file = "setproctitle-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:da0d57edd4c95bf221b2ebbaa061e65b1788f1544977288bdf95831b6e44e44d"}, + {file = "setproctitle-1.3.3-cp310-cp310-win32.whl", hash = "sha256:a1fcac43918b836ace25f69b1dca8c9395253ad8152b625064415b1d2f9be4fb"}, + {file = "setproctitle-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:200620c3b15388d7f3f97e0ae26599c0c378fdf07ae9ac5a13616e933cbd2086"}, + {file = "setproctitle-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:334f7ed39895d692f753a443102dd5fed180c571eb6a48b2a5b7f5b3564908c8"}, + {file = "setproctitle-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:950f6476d56ff7817a8fed4ab207727fc5260af83481b2a4b125f32844df513a"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:195c961f54a09eb2acabbfc90c413955cf16c6e2f8caa2adbf2237d1019c7dd8"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f05e66746bf9fe6a3397ec246fe481096664a9c97eb3fea6004735a4daf867fd"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b5901a31012a40ec913265b64e48c2a4059278d9f4e6be628441482dd13fb8b5"}, + {file = "setproctitle-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64286f8a995f2cd934082b398fc63fca7d5ffe31f0e27e75b3ca6b4efda4e353"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:184239903bbc6b813b1a8fc86394dc6ca7d20e2ebe6f69f716bec301e4b0199d"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:664698ae0013f986118064b6676d7dcd28fefd0d7d5a5ae9497cbc10cba48fa5"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e5119a211c2e98ff18b9908ba62a3bd0e3fabb02a29277a7232a6fb4b2560aa0"}, + {file = "setproctitle-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:417de6b2e214e837827067048f61841f5d7fc27926f2e43954567094051aff18"}, + {file = "setproctitle-1.3.3-cp311-cp311-win32.whl", hash = "sha256:6a143b31d758296dc2f440175f6c8e0b5301ced3b0f477b84ca43cdcf7f2f476"}, + {file = "setproctitle-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a680d62c399fa4b44899094027ec9a1bdaf6f31c650e44183b50d4c4d0ccc085"}, + {file = "setproctitle-1.3.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d4460795a8a7a391e3567b902ec5bdf6c60a47d791c3b1d27080fc203d11c9dc"}, + {file = "setproctitle-1.3.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bdfd7254745bb737ca1384dee57e6523651892f0ea2a7344490e9caefcc35e64"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477d3da48e216d7fc04bddab67b0dcde633e19f484a146fd2a34bb0e9dbb4a1e"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ab2900d111e93aff5df9fddc64cf51ca4ef2c9f98702ce26524f1acc5a786ae7"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088b9efc62d5aa5d6edf6cba1cf0c81f4488b5ce1c0342a8b67ae39d64001120"}, + {file = "setproctitle-1.3.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6d50252377db62d6a0bb82cc898089916457f2db2041e1d03ce7fadd4a07381"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:87e668f9561fd3a457ba189edfc9e37709261287b52293c115ae3487a24b92f6"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:287490eb90e7a0ddd22e74c89a92cc922389daa95babc833c08cf80c84c4df0a"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe1c49486109f72d502f8be569972e27f385fe632bd8895f4730df3c87d5ac8"}, + {file = "setproctitle-1.3.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4a6ba2494a6449b1f477bd3e67935c2b7b0274f2f6dcd0f7c6aceae10c6c6ba3"}, + {file = "setproctitle-1.3.3-cp312-cp312-win32.whl", hash = "sha256:2df2b67e4b1d7498632e18c56722851ba4db5d6a0c91aaf0fd395111e51cdcf4"}, + {file = "setproctitle-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:f38d48abc121263f3b62943f84cbaede05749047e428409c2c199664feb6abc7"}, + {file = "setproctitle-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:816330675e3504ae4d9a2185c46b573105d2310c20b19ea2b4596a9460a4f674"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f960bc22d8d8e4ac886d1e2e21ccbd283adcf3c43136161c1ba0fa509088e0"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e6e7adff74796ef12753ff399491b8827f84f6c77659d71bd0b35870a17d8f"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53bc0d2358507596c22b02db079618451f3bd720755d88e3cccd840bafb4c41c"}, + {file = "setproctitle-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad6d20f9541f5f6ac63df553b6d7a04f313947f550eab6a61aa758b45f0d5657"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c1c84beab776b0becaa368254801e57692ed749d935469ac10e2b9b825dbdd8e"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:507e8dc2891021350eaea40a44ddd887c9f006e6b599af8d64a505c0f718f170"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b1067647ac7aba0b44b591936118a22847bda3c507b0a42d74272256a7a798e9"}, + {file = "setproctitle-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2e71f6365744bf53714e8bd2522b3c9c1d83f52ffa6324bd7cbb4da707312cd8"}, + {file = "setproctitle-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:7f1d36a1e15a46e8ede4e953abb104fdbc0845a266ec0e99cc0492a4364f8c44"}, + {file = "setproctitle-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9a402881ec269d0cc9c354b149fc29f9ec1a1939a777f1c858cdb09c7a261df"}, + {file = "setproctitle-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ff814dea1e5c492a4980e3e7d094286077054e7ea116cbeda138819db194b2cd"}, + {file = "setproctitle-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:accb66d7b3ccb00d5cd11d8c6e07055a4568a24c95cf86109894dcc0c134cc89"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554eae5a5b28f02705b83a230e9d163d645c9a08914c0ad921df363a07cf39b1"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a911b26264dbe9e8066c7531c0591cfab27b464459c74385b276fe487ca91c12"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2982efe7640c4835f7355fdb4da313ad37fb3b40f5c69069912f8048f77b28c8"}, + {file = "setproctitle-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df3f4274b80709d8bcab2f9a862973d453b308b97a0b423a501bcd93582852e3"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:af2c67ae4c795d1674a8d3ac1988676fa306bcfa1e23fddb5e0bd5f5635309ca"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:af4061f67fd7ec01624c5e3c21f6b7af2ef0e6bab7fbb43f209e6506c9ce0092"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:37a62cbe16d4c6294e84670b59cf7adcc73faafe6af07f8cb9adaf1f0e775b19"}, + {file = "setproctitle-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a83ca086fbb017f0d87f240a8f9bbcf0809f3b754ee01cec928fff926542c450"}, + {file = "setproctitle-1.3.3-cp38-cp38-win32.whl", hash = "sha256:059f4ce86f8cc92e5860abfc43a1dceb21137b26a02373618d88f6b4b86ba9b2"}, + {file = "setproctitle-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:ab92e51cd4a218208efee4c6d37db7368fdf182f6e7ff148fb295ecddf264287"}, + {file = "setproctitle-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c7951820b77abe03d88b114b998867c0f99da03859e5ab2623d94690848d3e45"}, + {file = "setproctitle-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc94cf128676e8fac6503b37763adb378e2b6be1249d207630f83fc325d9b11"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f5d9027eeda64d353cf21a3ceb74bb1760bd534526c9214e19f052424b37e42"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e4a8104db15d3462e29d9946f26bed817a5b1d7a47eabca2d9dc2b995991503"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c32c41ace41f344d317399efff4cffb133e709cec2ef09c99e7a13e9f3b9483c"}, + {file = "setproctitle-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf16381c7bf7f963b58fb4daaa65684e10966ee14d26f5cc90f07049bfd8c1e"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e18b7bd0898398cc97ce2dfc83bb192a13a087ef6b2d5a8a36460311cb09e775"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69d565d20efe527bd8a9b92e7f299ae5e73b6c0470f3719bd66f3cd821e0d5bd"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ddedd300cd690a3b06e7eac90ed4452348b1348635777ce23d460d913b5b63c3"}, + {file = "setproctitle-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:415bfcfd01d1fbf5cbd75004599ef167a533395955305f42220a585f64036081"}, + {file = "setproctitle-1.3.3-cp39-cp39-win32.whl", hash = "sha256:21112fcd2195d48f25760f0eafa7a76510871bbb3b750219310cf88b04456ae3"}, + {file = "setproctitle-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:5a740f05d0968a5a17da3d676ce6afefebeeeb5ce137510901bf6306ba8ee002"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6b9e62ddb3db4b5205c0321dd69a406d8af9ee1693529d144e86bd43bcb4b6c0"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e3b99b338598de0bd6b2643bf8c343cf5ff70db3627af3ca427a5e1a1a90dd9"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ae9a02766dad331deb06855fb7a6ca15daea333b3967e214de12cfae8f0ef5"}, + {file = "setproctitle-1.3.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:200ede6fd11233085ba9b764eb055a2a191fb4ffb950c68675ac53c874c22e20"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0d3a953c50776751e80fe755a380a64cb14d61e8762bd43041ab3f8cc436092f"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e08e232b78ba3ac6bc0d23ce9e2bee8fad2be391b7e2da834fc9a45129eb87"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1da82c3e11284da4fcbf54957dafbf0655d2389cd3d54e4eaba636faf6d117a"}, + {file = "setproctitle-1.3.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:aeaa71fb9568ebe9b911ddb490c644fbd2006e8c940f21cb9a1e9425bd709574"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:59335d000c6250c35989394661eb6287187854e94ac79ea22315469ee4f4c244"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3ba57029c9c50ecaf0c92bb127224cc2ea9fda057b5d99d3f348c9ec2855ad3"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d876d355c53d975c2ef9c4f2487c8f83dad6aeaaee1b6571453cb0ee992f55f6"}, + {file = "setproctitle-1.3.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:224602f0939e6fb9d5dd881be1229d485f3257b540f8a900d4271a2c2aa4e5f4"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d7f27e0268af2d7503386e0e6be87fb9b6657afd96f5726b733837121146750d"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5e7266498cd31a4572378c61920af9f6b4676a73c299fce8ba93afd694f8ae7"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33c5609ad51cd99d388e55651b19148ea99727516132fb44680e1f28dd0d1de9"}, + {file = "setproctitle-1.3.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:eae8988e78192fd1a3245a6f4f382390b61bce6cfcc93f3809726e4c885fa68d"}, + {file = "setproctitle-1.3.3.tar.gz", hash = "sha256:c913e151e7ea01567837ff037a23ca8740192880198b7fbb90b16d181607caae"}, ] [package.extras] @@ -4351,85 +7153,68 @@ test = ["pytest"] [[package]] name = "setuptools" -version = "68.2.1" +version = "69.0.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.1-py3-none-any.whl", hash = "sha256:eff96148eb336377ab11beee0c73ed84f1709a40c0b870298b0d058828761bae"}, - {file = "setuptools-68.2.1.tar.gz", hash = "sha256:56ee14884fd8d0cd015411f4a13f40b4356775a0aefd9ebc1d3bfb9a1acb32f1"}, + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] -[[package]] -name = "setuptools-scm" -version = "7.1.0" -description = "the blessed package to manage your versions by scm tags" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools_scm-7.1.0-py3-none-any.whl", hash = "sha256:73988b6d848709e2af142aa48c986ea29592bbcfca5375678064708205253d8e"}, - {file = "setuptools_scm-7.1.0.tar.gz", hash = "sha256:6c508345a771aad7d56ebff0e70628bf2b0ec7573762be9960214730de278f27"}, -] - -[package.dependencies] -packaging = ">=20.0" -setuptools = "*" -typing-extensions = "*" - -[package.extras] -test = ["pytest (>=6.2)", "virtualenv (>20)"] -toml = ["setuptools (>=42)"] - [[package]] name = "shapely" -version = "2.0.1" +version = "2.0.2" description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.7" files = [ - {file = "shapely-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b06d031bc64149e340448fea25eee01360a58936c89985cf584134171e05863f"}, - {file = "shapely-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9a6ac34c16f4d5d3c174c76c9d7614ec8fe735f8f82b6cc97a46b54f386a86bf"}, - {file = "shapely-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:865bc3d7cc0ea63189d11a0b1120d1307ed7a64720a8bfa5be2fde5fc6d0d33f"}, - {file = "shapely-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b4833235b90bc87ee26c6537438fa77559d994d2d3be5190dd2e54d31b2820"}, - {file = "shapely-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce88ec79df55430e37178a191ad8df45cae90b0f6972d46d867bf6ebbb58cc4d"}, - {file = "shapely-2.0.1-cp310-cp310-win32.whl", hash = "sha256:01224899ff692a62929ef1a3f5fe389043e262698a708ab7569f43a99a48ae82"}, - {file = "shapely-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:da71de5bf552d83dcc21b78cc0020e86f8d0feea43e202110973987ffa781c21"}, - {file = "shapely-2.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:502e0a607f1dcc6dee0125aeee886379be5242c854500ea5fd2e7ac076b9ce6d"}, - {file = "shapely-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d3bbeefd8a6a1a1017265d2d36f8ff2d79d0162d8c141aa0d37a87063525656"}, - {file = "shapely-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f470a130d6ddb05b810fc1776d918659407f8d025b7f56d2742a596b6dffa6c7"}, - {file = "shapely-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4641325e065fd3e07d55677849c9ddfd0cf3ee98f96475126942e746d55b17c8"}, - {file = "shapely-2.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90cfa4144ff189a3c3de62e2f3669283c98fb760cfa2e82ff70df40f11cadb39"}, - {file = "shapely-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70a18fc7d6418e5aea76ac55dce33f98e75bd413c6eb39cfed6a1ba36469d7d4"}, - {file = "shapely-2.0.1-cp311-cp311-win32.whl", hash = "sha256:09d6c7763b1bee0d0a2b84bb32a4c25c6359ad1ac582a62d8b211e89de986154"}, - {file = "shapely-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d8f55f355be7821dade839df785a49dc9f16d1af363134d07eb11e9207e0b189"}, - {file = "shapely-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:83a8ec0ee0192b6e3feee9f6a499d1377e9c295af74d7f81ecba5a42a6b195b7"}, - {file = "shapely-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a529218e72a3dbdc83676198e610485fdfa31178f4be5b519a8ae12ea688db14"}, - {file = "shapely-2.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91575d97fd67391b85686573d758896ed2fc7476321c9d2e2b0c398b628b961c"}, - {file = "shapely-2.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8b0d834b11be97d5ab2b4dceada20ae8e07bcccbc0f55d71df6729965f406ad"}, - {file = "shapely-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:b4f0711cc83734c6fad94fc8d4ec30f3d52c1787b17d9dca261dc841d4731c64"}, - {file = "shapely-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:05c51a29336e604c084fb43ae5dbbfa2c0ef9bd6fedeae0a0d02c7b57a56ba46"}, - {file = "shapely-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b519cf3726ddb6c67f6a951d1bb1d29691111eaa67ea19ddca4d454fbe35949c"}, - {file = "shapely-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:193a398d81c97a62fc3634a1a33798a58fd1dcf4aead254d080b273efbb7e3ff"}, - {file = "shapely-2.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e55698e0ed95a70fe9ff9a23c763acfe0bf335b02df12142f74e4543095e9a9b"}, - {file = "shapely-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f32a748703e7bf6e92dfa3d2936b2fbfe76f8ce5f756e24f49ef72d17d26ad02"}, - {file = "shapely-2.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a34a23d6266ca162499e4a22b79159dc0052f4973d16f16f990baa4d29e58b6"}, - {file = "shapely-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d173d24e85e51510e658fb108513d5bc11e3fd2820db6b1bd0522266ddd11f51"}, - {file = "shapely-2.0.1-cp38-cp38-win32.whl", hash = "sha256:3cb256ae0c01b17f7bc68ee2ffdd45aebf42af8992484ea55c29a6151abe4386"}, - {file = "shapely-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:c7eed1fb3008a8a4a56425334b7eb82651a51f9e9a9c2f72844a2fb394f38a6c"}, - {file = "shapely-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ac1dfc397475d1de485e76de0c3c91cc9d79bd39012a84bb0f5e8a199fc17bef"}, - {file = "shapely-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:33403b8896e1d98aaa3a52110d828b18985d740cc9f34f198922018b1e0f8afe"}, - {file = "shapely-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2569a4b91caeef54dd5ae9091ae6f63526d8ca0b376b5bb9fd1a3195d047d7d4"}, - {file = "shapely-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a70a614791ff65f5e283feed747e1cc3d9e6c6ba91556e640636bbb0a1e32a71"}, - {file = "shapely-2.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43755d2c46b75a7b74ac6226d2cc9fa2a76c3263c5ae70c195c6fb4e7b08e79"}, - {file = "shapely-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad81f292fffbd568ae71828e6c387da7eb5384a79db9b4fde14dd9fdeffca9a"}, - {file = "shapely-2.0.1-cp39-cp39-win32.whl", hash = "sha256:b50c401b64883e61556a90b89948297f1714dbac29243d17ed9284a47e6dd731"}, - {file = "shapely-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:bca57b683e3d94d0919e2f31e4d70fdfbb7059650ef1b431d9f4e045690edcd5"}, - {file = "shapely-2.0.1.tar.gz", hash = "sha256:66a6b1a3e72ece97fc85536a281476f9b7794de2e646ca8a4517e2e3c1446893"}, + {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6ca8cffbe84ddde8f52b297b53f8e0687bd31141abb2c373fd8a9f032df415d6"}, + {file = "shapely-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:baa14fc27771e180c06b499a0a7ba697c7988c7b2b6cba9a929a19a4d2762de3"}, + {file = "shapely-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:36480e32c434d168cdf2f5e9862c84aaf4d714a43a8465ae3ce8ff327f0affb7"}, + {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef753200cbffd4f652efb2c528c5474e5a14341a473994d90ad0606522a46a2"}, + {file = "shapely-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9a41ff4323fc9d6257759c26eb1cf3a61ebc7e611e024e6091f42977303fd3a"}, + {file = "shapely-2.0.2-cp310-cp310-win32.whl", hash = "sha256:72b5997272ae8c25f0fd5b3b967b3237e87fab7978b8d6cd5fa748770f0c5d68"}, + {file = "shapely-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:34eac2337cbd67650248761b140d2535855d21b969d76d76123317882d3a0c1a"}, + {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b0c052709c8a257c93b0d4943b0b7a3035f87e2d6a8ac9407b6a992d206422f"}, + {file = "shapely-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2d217e56ae067e87b4e1731d0dc62eebe887ced729ba5c2d4590e9e3e9fdbd88"}, + {file = "shapely-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94ac128ae2ab4edd0bffcd4e566411ea7bdc738aeaf92c32a8a836abad725f9f"}, + {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3ee28f5e63a130ec5af4dc3c4cb9c21c5788bb13c15e89190d163b14f9fb89"}, + {file = "shapely-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:737dba15011e5a9b54a8302f1748b62daa207c9bc06f820cd0ad32a041f1c6f2"}, + {file = "shapely-2.0.2-cp311-cp311-win32.whl", hash = "sha256:45ac6906cff0765455a7b49c1670af6e230c419507c13e2f75db638c8fc6f3bd"}, + {file = "shapely-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:dc9342fc82e374130db86a955c3c4525bfbf315a248af8277a913f30911bed9e"}, + {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:06f193091a7c6112fc08dfd195a1e3846a64306f890b151fa8c63b3e3624202c"}, + {file = "shapely-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eebe544df5c018134f3c23b6515877f7e4cd72851f88a8d0c18464f414d141a2"}, + {file = "shapely-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7e92e7c255f89f5cdf777690313311f422aa8ada9a3205b187113274e0135cd8"}, + {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be46d5509b9251dd9087768eaf35a71360de6afac82ce87c636990a0871aa18b"}, + {file = "shapely-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5533a925d8e211d07636ffc2fdd9a7f9f13d54686d00577eeb11d16f00be9c4"}, + {file = "shapely-2.0.2-cp312-cp312-win32.whl", hash = "sha256:084b023dae8ad3d5b98acee9d3bf098fdf688eb0bb9b1401e8b075f6a627b611"}, + {file = "shapely-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:ea84d1cdbcf31e619d672b53c4532f06253894185ee7acb8ceb78f5f33cbe033"}, + {file = "shapely-2.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed1e99702125e7baccf401830a3b94d810d5c70b329b765fe93451fe14cf565b"}, + {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7d897e6bdc6bc64f7f65155dbbb30e49acaabbd0d9266b9b4041f87d6e52b3a"}, + {file = "shapely-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0521d76d1e8af01e712db71da9096b484f081e539d4f4a8c97342e7971d5e1b4"}, + {file = "shapely-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:5324be299d4c533ecfcfd43424dfd12f9428fd6f12cda38a4316da001d6ef0ea"}, + {file = "shapely-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:78128357a0cee573257a0c2c388d4b7bf13cb7dbe5b3fe5d26d45ebbe2a39e25"}, + {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87dc2be34ac3a3a4a319b963c507ac06682978a5e6c93d71917618b14f13066e"}, + {file = "shapely-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:42997ac806e4583dad51c80a32d38570fd9a3d4778f5e2c98f9090aa7db0fe91"}, + {file = "shapely-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ccfd5fa10a37e67dbafc601c1ddbcbbfef70d34c3f6b0efc866ddbdb55893a6c"}, + {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7c95d3379ae3abb74058938a9fcbc478c6b2e28d20dace38f8b5c587dde90aa"}, + {file = "shapely-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a21353d28209fb0d8cc083e08ca53c52666e0d8a1f9bbe23b6063967d89ed24"}, + {file = "shapely-2.0.2-cp38-cp38-win32.whl", hash = "sha256:03e63a99dfe6bd3beb8d5f41ec2086585bb969991d603f9aeac335ad396a06d4"}, + {file = "shapely-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:c6fd29fbd9cd76350bd5cc14c49de394a31770aed02d74203e23b928f3d2f1aa"}, + {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f217d28ecb48e593beae20a0082a95bd9898d82d14b8fcb497edf6bff9a44d7"}, + {file = "shapely-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:394e5085b49334fd5b94fa89c086edfb39c3ecab7f669e8b2a4298b9d523b3a5"}, + {file = "shapely-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd3ad17b64466a033848c26cb5b509625c87d07dcf39a1541461cacdb8f7e91c"}, + {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d41a116fcad58048d7143ddb01285e1a8780df6dc1f56c3b1e1b7f12ed296651"}, + {file = "shapely-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dea9a0651333cf96ef5bb2035044e3ad6a54f87d90e50fe4c2636debf1b77abc"}, + {file = "shapely-2.0.2-cp39-cp39-win32.whl", hash = "sha256:b8eb0a92f7b8c74f9d8fdd1b40d395113f59bd8132ca1348ebcc1f5aece94b96"}, + {file = "shapely-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:794affd80ca0f2c536fc948a3afa90bd8fb61ebe37fe873483ae818e7f21def4"}, + {file = "shapely-2.0.2.tar.gz", hash = "sha256:1713cc04c171baffc5b259ba8531c58acc2a301707b7f021d88a15ed090649e7"}, ] [package.dependencies] @@ -4510,13 +7295,13 @@ numpy = ["NumPy"] [[package]] name = "sphinx" -version = "7.2.5" +version = "7.2.6" description = "Python documentation generator" optional = false python-versions = ">=3.9" files = [ - {file = "sphinx-7.2.5-py3-none-any.whl", hash = "sha256:9269f9ed2821c9ebd30e4204f5c2339f5d4980e377bc89cb2cb6f9b17409c20a"}, - {file = "sphinx-7.2.5.tar.gz", hash = "sha256:1a9290001b75c497fd087e92b0334f1bbfa1a1ae7fddc084990c4b7bd1130b88"}, + {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, + {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, ] [package.dependencies] @@ -4544,18 +7329,18 @@ test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools [[package]] name = "sphinx-rtd-theme" -version = "1.3.0" +version = "2.0.0" description = "Read the Docs theme for Sphinx" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, - {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, + {file = "sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586"}, + {file = "sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"}, ] [package.dependencies] -docutils = "<0.19" -sphinx = ">=1.6,<8" +docutils = "<0.21" +sphinx = ">=5,<8" sphinxcontrib-jquery = ">=4,<5" [package.extras] @@ -4577,56 +7362,50 @@ sphinx = ">=1.2" [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.7" +version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, - {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, + {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, + {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.5" +version = "1.0.6" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, - {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, + {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, + {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.4" +version = "2.0.5" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, - {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, + {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"}, + {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] [[package]] @@ -4659,38 +7438,34 @@ test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.6" +version = "1.0.7" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, - {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, + {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, + {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.9" +version = "1.1.10" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" files = [ - {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, - {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, + {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, + {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, ] -[package.dependencies] -Sphinx = ">=5" - [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] @@ -4704,19 +7479,6 @@ files = [ {file = "spidev-3.6.tar.gz", hash = "sha256:14dbc37594a4aaef85403ab617985d3c3ef464d62bc9b769ef552db53701115b"}, ] -[[package]] -name = "spidev2" -version = "0.9.0" -description = "Pure-python interface to Linux spidev." -optional = false -python-versions = "*" -files = [ - {file = "spidev2-0.9.0.tar.gz", hash = "sha256:152da2911a8660283ceac3a75dd869953379bcbcf079e5436af5aae736876086"}, -] - -[package.dependencies] -ioctl-opt = "*" - [[package]] name = "sympy" version = "1.12" @@ -4811,140 +7573,84 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] -[[package]] -name = "types-atomicwrites" -version = "1.4.5.1" -description = "Typing stubs for atomicwrites" -optional = false -python-versions = "*" -files = [ - {file = "types-atomicwrites-1.4.5.1.tar.gz", hash = "sha256:9e9f0923ebf93524b28bcece5a23ac8c3820f39b060df29f671936d2e4bc04bc"}, - {file = "types_atomicwrites-1.4.5.1-py3-none-any.whl", hash = "sha256:2f1febbdc78b55453b189fa5b136dce34bab7d1d82319163d470e404aab55c83"}, -] - -[[package]] -name = "types-certifi" -version = "2021.10.8.3" -description = "Typing stubs for certifi" -optional = false -python-versions = "*" -files = [ - {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, - {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, -] - -[[package]] -name = "types-pycurl" -version = "7.45.2.5" -description = "Typing stubs for pycurl" -optional = false -python-versions = "*" -files = [ - {file = "types-pycurl-7.45.2.5.tar.gz", hash = "sha256:cc07e4b1e388b98e1a935bc12ef33eec8e7294496d0a81ed50c46a31bf5df5ee"}, - {file = "types_pycurl-7.45.2.5-py3-none-any.whl", hash = "sha256:e433f13a266245be770018eabc6a50139ea26150f75df5b0ee698d291575582b"}, -] - -[[package]] -name = "types-pyyaml" -version = "6.0.12.11" -description = "Typing stubs for PyYAML" -optional = false -python-versions = "*" -files = [ - {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, - {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, -] - [[package]] name = "types-requests" -version = "2.31.0.2" +version = "2.31.0.20240125" description = "Typing stubs for requests" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"}, - {file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"}, + {file = "types-requests-2.31.0.20240125.tar.gz", hash = "sha256:03a28ce1d7cd54199148e043b2079cdded22d6795d19a2c2a6791a4b2b5e2eb5"}, + {file = "types_requests-2.31.0.20240125-py3-none-any.whl", hash = "sha256:9592a9a4cb92d6d75d9b491a41477272b710e021011a2a3061157e2fb1f1a5d1"}, ] [package.dependencies] -types-urllib3 = "*" +urllib3 = ">=2" [[package]] name = "types-tabulate" -version = "0.9.0.3" +version = "0.9.0.20240106" description = "Typing stubs for tabulate" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "types-tabulate-0.9.0.3.tar.gz", hash = "sha256:197651f9d6467193cd166d8500116a6d3a26f2a4eb2db093bc9535ee1c0be55e"}, - {file = "types_tabulate-0.9.0.3-py3-none-any.whl", hash = "sha256:462d1b62e01728416e8277614d6a3eb172d53a8efaf04a04a973ff2dd45238f6"}, -] - -[[package]] -name = "types-urllib3" -version = "1.26.25.14" -description = "Typing stubs for urllib3" -optional = false -python-versions = "*" -files = [ - {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, - {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, + {file = "types-tabulate-0.9.0.20240106.tar.gz", hash = "sha256:c9b6db10dd7fcf55bd1712dd3537f86ddce72a08fd62bb1af4338c7096ce947e"}, + {file = "types_tabulate-0.9.0.20240106-py3-none-any.whl", hash = "sha256:0378b7b6fe0ccb4986299496d027a6d4c218298ecad67199bbd0e2d7e9d335a1"}, ] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] name = "tzdata" -version = "2023.3" +version = "2023.4" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, ] [[package]] name = "urllib3" -version = "2.0.4" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.24.5" +version = "20.25.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.5-py3-none-any.whl", hash = "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b"}, - {file = "virtualenv-20.24.5.tar.gz", hash = "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"}, + {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, + {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, ] [package.dependencies] distlib = ">=0.3.7,<1" filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<4" +platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] @@ -4952,13 +7658,13 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "websocket-client" -version = "1.6.3" +version = "1.7.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.3.tar.gz", hash = "sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f"}, - {file = "websocket_client-1.6.3-py3-none-any.whl", hash = "sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03"}, + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, ] [package.extras] @@ -4968,13 +7674,13 @@ test = ["websockets"] [[package]] name = "yapf" -version = "0.40.1" -description = "A formatter for Python code." +version = "0.40.2" +description = "A formatter for Python code" optional = false python-versions = ">=3.7" files = [ - {file = "yapf-0.40.1-py3-none-any.whl", hash = "sha256:b8bfc1f280949153e795181768ca14ef43d7312629a06c43e7abd279323af313"}, - {file = "yapf-0.40.1.tar.gz", hash = "sha256:958587eb5c8ec6c860119a9c25d02addf30a44f75aa152a4220d30e56a98037c"}, + {file = "yapf-0.40.2-py3-none-any.whl", hash = "sha256:adc8b5dd02c0143108878c499284205adb258aad6db6634e5b869e7ee2bd548b"}, + {file = "yapf-0.40.2.tar.gz", hash = "sha256:4dab8a5ed7134e26d57c1647c7483afb3f136878b579062b786c9ba16b94637b"}, ] [package.dependencies] @@ -4984,85 +7690,101 @@ tomli = ">=2.0.1" [[package]] name = "yarl" -version = "1.9.2" +version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] @@ -5071,20 +7793,20 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" python-versions = "~3.11" -content-hash = "7258a24274936ccdafb930a683f4ea197e82ab187698d0723bb4683ca41e6d26" +content-hash = "8af315a175ab43dbc5a777f68fca6d76af1443b5b574ab8570ef5dad59f288fc" diff --git a/pyproject.toml b/pyproject.toml index 5d4bcafa7a..116c034bc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,13 @@ [tool.pytest.ini_options] minversion = "6.0" -addopts = "--ignore=openpilot/ --ignore=cereal/ --ignore=opendbc/ --ignore=panda/ --ignore=rednose_repo/ --ignore=tinygrad_repo/ --ignore=laika_repo/ -Werror --strict-config --strict-markers --durations=10" -#cpp_files = "test_*" # uncomment when agnos has pytest-cpp and remove from CI +addopts = "--ignore=openpilot/ --ignore=cereal/ --ignore=opendbc/ --ignore=panda/ --ignore=rednose_repo/ --ignore=tinygrad_repo/ --ignore=teleoprtc_repo/ -Werror --strict-config --strict-markers --durations=10 -n auto --dist=loadgroup" +cpp_files = "test_*" +cpp_harness = "selfdrive/test/cpp_harness.py" python_files = "test_*.py" #timeout = "30" # you get this long by default markers = [ - "parallel: mark tests as parallelizable (tests with no global state, so can be run in parallel)" + "slow: tests that take awhile to run and can be skipped with -m 'not slow'", + "tici: tests that are only meant to run on the C3/C3X", ] testpaths = [ "common", @@ -15,13 +17,17 @@ testpaths = [ "selfdrive/controls", "selfdrive/locationd", "selfdrive/monitoring", + "selfdrive/navd/tests", "selfdrive/thermald", "selfdrive/test/longitudinal_maneuvers", + "selfdrive/test/process_replay/test_fuzzy.py", + "system/camerad", "system/hardware/tici", "system/loggerd", "system/proclogd", "system/tests", "system/ubloxd", + "system/webrtc", "tools/lib/tests", "tools/replay", "tools/cabana" @@ -37,12 +43,12 @@ exclude = [ "cereal/", "opendbc/", "panda/", - "laika/", - "laika_repo/", "rednose/", "rednose_repo/", "tinygrad/", "tinygrad_repo/", + "teleoprtc/", + "teleoprtc_repo/", "third_party/", ] @@ -71,78 +77,69 @@ documentation = "https://docs.comma.ai" [tool.poetry.dependencies] python = "~3.11" -atomicwrites = "*" aiohttp = "*" aiortc = "*" casadi = "==3.6.3" cffi = "*" -control = "*" crcmod = "*" -cryptography = "*" Cython = "*" future-fstrings = "*" # for acados -hatanaka = "==2.4" -hexdump = "*" -Jinja2 = "*" json-rpc = "*" libusb1 = "*" numpy = "*" onnx = ">=1.14.0" -onnxruntime-gpu = { version = ">=1.15.1", platform = "linux", markers = "platform_machine == 'x86_64'" } -pillow = "*" +onnxruntime = { version = ">=1.16.3", platform = "linux", markers = "platform_machine == 'aarch64'" } +onnxruntime-gpu = { version = ">=1.16.3", platform = "linux", markers = "platform_machine == 'x86_64'" } psutil = "*" pyaudio = "*" pycapnp = "*" pycryptodome = "*" -pycurl = "*" -pydub = "*" PyJWT = "*" -pyopencl = "*" pyserial = "*" -PyYAML = "*" pyzmq = "*" requests = "*" scons = "*" -sentry-sdk = "==1.28.1" # needs to be updated with AGNOS -setproctitle = "*" +sentry-sdk = "*" smbus2 = "*" sounddevice = "*" spidev = { version = "*", platform = "linux" } -spidev2 = { version = "*", platform = "linux" } sympy = "*" -timezonefinder = "*" -tqdm = "*" -urllib3 = "*" websocket_client = "*" -polyline = "*" -sconscontrib = {git = "https://github.com/SCons/scons-contrib.git"} +# these should be removed +markdown-it-py = "*" +timezonefinder = "*" +setproctitle = "*" [tool.poetry.group.dev.dependencies] av = "*" azure-identity = "*" azure-storage-blob = "*" breathe = "*" -carla = { url = "https://github.com/commaai/carla/releases/download/3.11.4/carla-0.9.14-cp311-cp311-linux_x86_64.whl", platform = "linux", markers = "platform_machine == 'x86_64'" } +control = "*" coverage = "*" dictdiffer = "*" ft4222 = "*" -hypothesis = "==6.46.7" +flaky = "*" +hypothesis = "~6.47" inputs = "*" +Jinja2 = "*" lru-dict = "*" -markdown-it-py = "*" matplotlib = "*" -metadrive-simulator = { git = "https://github.com/metadriverse/metadrive.git", rev ="51d4393f3b3574fd0e79ed04eae0081f8447ca72", markers = "platform_machine != 'aarch64'" } # no linux/aarch64 wheels for certain dependencies +metadrive-simulator = { version = "0.4.2.2", markers = "platform_machine != 'aarch64'" } # no linux/aarch64 wheels for certain dependencies mpld3 = "*" mypy = "*" myst-parser = "*" natsort = "*" opencv-python-headless = "*" -pandas = "*" parameterized = "^0.8" pprofile = "*" +polyline = "*" pre-commit = "*" +pyautogui = "*" +pyopencl = "==2023.1.4" # 2024.1 is broken on arm64 pygame = "*" +pywinctl = "*" pyprof2calltree = "*" pytest = "*" pytest-cov = "*" @@ -150,21 +147,19 @@ pytest-cpp = "*" pytest-subtests = "*" pytest-xdist = "*" pytest-timeout = "*" -pytest-timeouts = "*" -scipy = "*" +pytest-randomly = "*" +ruff = "*" sphinx = "*" sphinx-rtd-theme = "*" sphinx-sitemap = "*" tabulate = "*" tenacity = "*" -types-atomicwrites = "*" -types-certifi = "*" -types-pycurl = "*" -types-PyYAML = "*" types-requests = "*" types-tabulate = "*" -pyqt5 = { version = "*", markers = "platform_machine == 'x86_64'" } # no aarch64 wheels for macOS/linux +tqdm = "*" +# this is only pinned since 5.15.11 is broken +pyqt5 = { version = "==5.15.2", markers = "platform_machine == 'x86_64'" } # no aarch64 wheels for macOS/linux [build-system] requires = ["poetry-core"] @@ -172,16 +167,17 @@ build-backend = "poetry.core.masonry.api" # https://beta.ruff.rs/docs/configuration/#using-pyprojecttoml [tool.ruff] -select = ["E", "F", "W", "PIE", "C4", "ISC", "RUF100", "A", "B", "TID251"] -ignore = ["W292", "E741", "E402", "C408", "ISC003", "B027", "B024"] +select = ["E", "F", "W", "PIE", "C4", "ISC", "RUF008", "RUF100", "A", "B", "TID251"] +ignore = ["E741", "E402", "C408", "ISC003", "B027", "B024"] line-length = 160 target-version="py311" exclude = [ "panda", "opendbc", - "laika_repo", "rednose_repo", "tinygrad_repo", + "teleoprtc", + "teleoprtc_repo", "third_party", ] flake8-implicit-str-concat.allow-multiline=false @@ -190,4 +186,7 @@ flake8-implicit-str-concat.allow-multiline=false "common".msg = "Use openpilot.common" "system".msg = "Use openpilot.system" "third_party".msg = "Use openpilot.third_party" -"tools".msg = "Use openpilot.tools" \ No newline at end of file +"tools".msg = "Use openpilot.tools" + +[tool.coverage.run] +concurrency = ["multiprocessing", "thread"] diff --git a/rednose_repo b/rednose_repo index 8658bed296..18b91458fd 160000 --- a/rednose_repo +++ b/rednose_repo @@ -1 +1 @@ -Subproject commit 8658bed29686b2ddae191fd18302986c85542431 +Subproject commit 18b91458fd396530d43e1a2fe9a3ac9055fa9109 diff --git a/release/build_devel.sh b/release/build_devel.sh index ca04c56f1e..8b6816e423 100755 --- a/release/build_devel.sh +++ b/release/build_devel.sh @@ -22,6 +22,7 @@ pre-commit uninstall || true echo "[-] bringing master-ci and devel in sync T=$SECONDS" cd $TARGET_DIR + git fetch --depth 1 origin master-ci git fetch --depth 1 origin devel diff --git a/release/build_release.sh b/release/build_release.sh index e7f169c1db..17b9149a2a 100755 --- a/release/build_release.sh +++ b/release/build_release.sh @@ -103,9 +103,9 @@ git branch -m release-c3 #selfdrive/car/tests/test_car_interfaces.py #rm -rf $TEST_FILES -if [ ! -z "$PUSH" ]; then - echo "[-] pushing T=$SECONDS" - git push -f origin $RELEASE_BRANCH +if [ ! -z "$RELEASE_BRANCH" ]; then + echo "[-] pushing release T=$SECONDS" + git push -f origin $RELEASE_BRANCH:$RELEASE_BRANCH fi echo "[-] done T=$SECONDS" diff --git a/release/ci/build.sh b/release/ci/build.sh new file mode 100755 index 0000000000..3502f31c61 --- /dev/null +++ b/release/ci/build.sh @@ -0,0 +1,45 @@ +# UNUSED YET BUT I WANT TO KEEP IT BECAUSE I INTEND TO USE IT SOON + +#!/usr/bin/env bash + +# set -e + +# DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" +# cd $DIR + +# # Take parameters as arguments +# SOURCE_DIR=$1 +# OUTPUT_DIR=$2 + +# # Check parameters +# if [ -z "$SOURCE_DIR" ] || [ -z "$OUTPUT_DIR" ]; then +# echo "Error: No source or output directory provided." +# exit 1 +# fi + +# if [ -z "$TARGETPLATFORM" ]; then +# # Detect the platform (e.g., x86_64, aarch64, etc.) +# platform=$(uname -m) + +# # Map to Docker's platform syntax +# if [ "$platform" = "x86_64" ]; then +# TARGETPLATFORM="linux/amd64" +# elif [ "$platform" = "aarch64" ]; then +# TARGETPLATFORM="linux/arm64" +# # Add here more elif statements for other architectures if needed. +# else +# echo "Unknown platform: $platform" +# exit 1 +# fi + +# export TARGETPLATFORM +# fi + +# echo "TARGETPLATFORM IS: [${TARGETPLATFORM}]" + +# # Let's bring the submodules! +# git submodule update --init --recursive + +# # Build +# docker compose -f ${SOURCE_DIR}/docker-compose.yml build +# docker compose -f ${SOURCE_DIR}/docker-compose.yml up diff --git a/release/ci/build_and_publish.sh b/release/ci/build_and_publish.sh new file mode 100755 index 0000000000..4063a54bd7 --- /dev/null +++ b/release/ci/build_and_publish.sh @@ -0,0 +1,27 @@ +# UNUSED YET BUT I WANT TO KEEP IT BECAUSE I INTEND TO USE IT SOON + +# #!/usr/bin/env bash +# DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" +# cd $DIR + +# DEV_BRANCH=$1 +# GIT_ORIGIN=$2 +# if [ -z "$DEV_BRANCH" ]; then +# DEV_BRANCH="dev-c3-test" +# fi + +# if [ -z "$GIT_ORIGIN" ]; then +# GIT_ORIGIN="git@github.com:devtekve/openpilot-og.git" #This is a default that should be changed +# echo "No GIT_ORIGIN provided, we will use the default [${GIT_ORIGIN}]" +# fi + +# VERSION=$(date '+%Y.%m.%d') +# SOURCE_DIR="$(git rev-parse --show-toplevel)" +# OUTPUT_DIR=${SOURCE_DIR}/output + + +# echo "Calling to build [${DIR}/build.sh ${SOURCE_DIR} ${OUTPUT_DIR} ${VERSION}]" +# $DIR/build.sh "${SOURCE_DIR}" "${OUTPUT_DIR}" "${VERSION}" + +# echo "Calling to publish [${DIR}/publish.sh ${SOURCE_DIR} ${OUTPUT_DIR} ${DEV_BRANCH} ${VERSION} ${GIT_ORIGIN}]" +# $DIR/publish.sh "${SOURCE_DIR}" "${OUTPUT_DIR}" "${DEV_BRANCH}" "${VERSION}" "${GIT_ORIGIN}" diff --git a/release/ci/discord_template_notify_dev_private.json b/release/ci/discord_template_notify_dev_private.json new file mode 100644 index 0000000000..5da1e4d405 --- /dev/null +++ b/release/ci/discord_template_notify_dev_private.json @@ -0,0 +1,13 @@ +{ + "embeds": [ + { + "title": "❗️ Action Required for `${CI_COMMIT_REF_NAME}` ❗️", + "description": "[${CI_PROJECT_NAME}](${CI_PROJECT_URL}): Pipeline [#${CI_PIPELINE_ID}](${CI_PROJECT_URL}/-/pipelines/${CI_PIPELINE_ID}) of branch [${CI_COMMIT_REF_NAME}](${CI_PROJECT_URL}/-/commits/${CI_COMMIT_REF_NAME}) by ${GITLAB_USER_NAME} (${GITLAB_USER_LOGIN}) is ready to publish manually as [${NEW_BRANCH}](${PUBLIC_REPO_URL}/tree/${NEW_BRANCH})", + "color": 16763904, + "author": { + "name": "${GITLAB_USER_LOGIN}", + "icon_url": "${AVATAR_URL}" + } + } + ] +} diff --git a/release/ci/discord_template_notify_dev_public.json b/release/ci/discord_template_notify_dev_public.json new file mode 100644 index 0000000000..d1a7b37f96 --- /dev/null +++ b/release/ci/discord_template_notify_dev_public.json @@ -0,0 +1,9 @@ +{ + "embeds": [ + { + "title": "🎉 sunnypilot `${NEW_BRANCH}` New Update 🎉", + "description": "[sunnypilot](${PUBLIC_REPO_URL}): Build #${CI_PIPELINE_IID} of branch [${NEW_BRANCH}](${PUBLIC_REPO_URL}/tree/${NEW_BRANCH}) has been published.\n\nDrive safe! 🚗💨", + "color": 4321431 + } + ] +} diff --git a/release/ci/install_gitlab_runner.sh b/release/ci/install_gitlab_runner.sh new file mode 100755 index 0000000000..a44c13cc92 --- /dev/null +++ b/release/ci/install_gitlab_runner.sh @@ -0,0 +1,106 @@ +#!/bin/bash +set -e + +# Check if script arguments are present, if not exit the script +if [ $# -eq 0 ]; then + echo "No arguments provided. A GitLab token is required to run this script." + exit 1 +fi + +# Constants +GITLAB_RUNNER_DOWNLOAD_URL="https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64" +GITLAB_RUNNER_USER_NAME="gitlab-runner" +USER_GROUPS="comma,gpu,gpio,sudo" +GITLAB_BASE_DIR="/data/gitlab" +GITLAB_BIN_DIR="${GITLAB_BASE_DIR}/bin" +GITLAB_BUILDS_DIR="${GITLAB_BASE_DIR}/builds" +GITLAB_LOGS_DIR="${GITLAB_BASE_DIR}/logs" +GITLAB_CACHE_DIR="${GITLAB_BASE_DIR}/cache" +GITLAB_OPENPILOT_DIR="${GITLAB_BASE_DIR}/openpilot" +SERVICE_NAME="gitlab-runner" + +create_gitlab_runner_directories() { + sudo mkdir -p "$GITLAB_BIN_DIR" "$GITLAB_BUILDS_DIR" "$GITLAB_LOGS_DIR" "$GITLAB_CACHE_DIR" "$GITLAB_OPENPILOT_DIR" + mkdir -p "/data/openpilot" + sudo chown -R comma:comma "/data/openpilot" +} + +download_and_setup_gitlab_runner() { + sudo curl -L --output "$GITLAB_BIN_DIR/gitlab-runner" "$GITLAB_RUNNER_DOWNLOAD_URL" + sudo chmod +x "$GITLAB_BIN_DIR/gitlab-runner" +} + +setup_gitlab_runner_user() { + sudo useradd --comment 'GitLab Runner' --create-home --home-dir ${GITLAB_BASE_DIR} ${GITLAB_RUNNER_USER_NAME} --shell /bin/bash -G ${USER_GROUPS} || sudo usermod -aG ${USER_GROUPS} ${GITLAB_RUNNER_USER_NAME} + export GITLAB_BASE_DIR # Export it to make it available to sub-processes + sudo -u ${GITLAB_RUNNER_USER_NAME} bash -c "truncate -s 0 '${GITLAB_BASE_DIR}/.bash_logout'" +} + +create_sudoers_entry() { + sudo grep -qxF "${GITLAB_RUNNER_USER_NAME} ALL=(ALL) NOPASSWD: ALL" /etc/sudoers || echo "${GITLAB_RUNNER_USER_NAME} ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers +} + +generate_gitlab_config_file() { + cat </dev/null && pwd)" +cd $DIR + +# Take parameters as arguments +SOURCE_DIR=$1 +OUTPUT_DIR=$2 +DEV_BRANCH=$3 +VERSION=$4 +GIT_ORIGIN=$5 +EXTRA_VERSION_IDENTIFIER=$6 + +# Check parameters +if [ -z "$SOURCE_DIR" ] || [ -z "$OUTPUT_DIR" ]; then + echo "Error: No source or output directory provided." + exit 1 +fi + +if [ -z "$DEV_BRANCH" ] || [ -z "$VERSION" ]; then + echo "Error: No dev branch or version provided." + exit 1 +fi + +if [ -z "$GIT_ORIGIN" ]; then + echo "Error: No GIT_ORIGIN provided" + exit 1 +fi + +# "Tagging" +echo "#define COMMA_VERSION \"$VERSION\"" > ${OUTPUT_DIR}/common/version.h + +## set git identity +#source $DIR/identity.sh +#export GIT_SSH_COMMAND="ssh -i /data/gitkey" + +echo "[-] Setting up repo T=$SECONDS" +cd $OUTPUT_DIR +git init + +# set git username/password +#source /data/identity.sh + +git rm -rf $OUTPUT_DIR/.git || true # Doing cleanup, but it might fail if the .git doesn't exist or not allowed to delete +git remote remove origin || true # ensure cleanup +git remote add origin $GIT_ORIGIN +#git push origin -d $DEV_BRANCH || true # Ensuring we delete the remote branch if it exists as we are wiping it out +git fetch origin $DEV_BRANCH || (git checkout -b $DEV_BRANCH && git commit --allow-empty -m "sunnypilot v$VERSION release" && git push -u origin $DEV_BRANCH) + +echo "[-] committing version $VERSION T=$SECONDS" +git add -f . +git commit -a -m "sunnypilot v$VERSION release" +git branch --set-upstream-to=origin/$DEV_BRANCH + +# include source commit hash and build date in commit +GIT_HASH=$(git --git-dir=$SOURCE_DIR/.git rev-parse HEAD) +DATETIME=$(date '+%Y-%m-%dT%H:%M:%S') +SP_VERSION=$(cat $SOURCE_DIR/common/version.h | awk -F\" '{print $2}') + +# Add built files to git +git add -f . +if [ "$EXTRA_VERSION_IDENTIFIER" = "-release" ] || [ "$EXTRA_VERSION_IDENTIFIER" = "-staging" ]; then + export VERSION=${VERSION%"$EXTRA_VERSION_IDENTIFIER"} + git commit --amend -m "sunnypilot v$VERSION" +else + git commit --amend -m "sunnypilot v$VERSION + version: sunnypilot v$SP_VERSION release + date: $DATETIME + master commit: $GIT_HASH + " +fi +git branch -m $DEV_BRANCH + +# Push! +echo "[-] pushing T=$SECONDS" +git push -f origin $DEV_BRANCH diff --git a/release/ci/uninstall_gitlab_runner.sh b/release/ci/uninstall_gitlab_runner.sh new file mode 100644 index 0000000000..8bb1ee90e2 --- /dev/null +++ b/release/ci/uninstall_gitlab_runner.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Define directories and user +GITLAB_BASE_DIR="/data/gitlab" +BIN_DIR="$GITLAB_BASE_DIR/bin" +BUILDS_DIR="$GITLAB_BASE_DIR/builds" +OPENPILOT_DIR="$GITLAB_BASE_DIR/openpilot" +LOGS_DIR="$GITLAB_BASE_DIR/logs" +CACHE_DIR="$GITLAB_BASE_DIR/cache" +RUNNER_USERNAME="gitlab-runner" +# Define the systemd service name +SERVICE_NAME="gitlab-runner" +USER_GROUPS="comma,gpu,gpio,sudo" + +# Function to stop and disable the systemd service +stop_service() { + sudo systemctl stop ${SERVICE_NAME} + sudo systemctl disable ${SERVICE_NAME} +} + +# Function to remove the systemd service file +remove_service_file() { + sudo rm /etc/systemd/system/${SERVICE_NAME}.service + sudo systemctl daemon-reload +} + +# Function to delete the GitLab Runner directories +delete_directories() { + sudo rm -rf "$BIN_DIR/gitlab-runner" + sudo rm -rf "$GITLAB_BASE_DIR" "$BIN_DIR" "$BUILDS_DIR" "$LOGS_DIR" "$CACHE_DIR" "$OPENPILOT_DIR" +} + +# Function to remove the GitLab Runner user +delete_user() { + for group in ${USER_GROUPS//,/ } + do + sudo gpasswd -d ${RUNNER_USERNAME} ${group} + done + sudo userdel -r ${RUNNER_USERNAME} +} + +# Function to remove sudoers entry +remove_sudoers_entry() { + sudo sed -i.bak "/${RUNNER_USERNAME} ALL=(ALL) NOPASSWD: ALL/d" /etc/sudoers +} + +# Make filesystem writable +sudo mount -o remount rw / + +# Ensure filesystem is remounted as read-only on script exit +trap "sudo mount -o remount ro /" EXIT + +# Call functions +stop_service +remove_service_file +delete_directories +delete_user +remove_sudoers_entry +# End of uninstall script diff --git a/release/files_common b/release/files_common index 10b1576d3d..cbce7906f4 100644 --- a/release/files_common +++ b/release/files_common @@ -6,6 +6,7 @@ launch_openpilot.sh Jenkinsfile SConstruct +pyproject.toml README.md RELEASES.md @@ -24,27 +25,8 @@ openpilot/** common/.gitignore common/__init__.py -common/conversions.py -common/gpio.py -common/realtime.py -common/timeout.py -common/ffi_wrapper.py -common/file_helpers.py -common/logging_extra.py -common/numpy_fast.py -common/params.py -common/params_pyx.pyx -common/profiler.py -common/basedir.py -common/dict_helpers.py -common/filter_simple.py -common/stat_live.py -common/spinner.py -common/text_window.py -common/time.py - -common/kalman/.gitignore -common/kalman/* +common/*.py +common/*.pyx common/transformations/__init__.py common/transformations/camera.py @@ -64,9 +46,6 @@ common/api/__init__.py release/* -installer/custom/install_osm.sh -installer/custom/install_osm_db.sh - tools/__init__.py tools/lib/* tools/bodyteleop/* @@ -78,12 +57,10 @@ selfdrive/__init__.py selfdrive/sentry.py selfdrive/tombstoned.py selfdrive/updated.py -selfdrive/rtshield.py selfdrive/statsd.py system/logmessaged.py system/micd.py -system/swaglog.py system/version.py selfdrive/athena/__init__.py @@ -123,9 +100,8 @@ selfdrive/car/isotp_parallel_query.py selfdrive/car/sunnypilot_carname.json selfdrive/car/tests/__init__.py selfdrive/car/tests/test_car_interfaces.py -selfdrive/car/torque_data/params.yaml -selfdrive/car/torque_data/substitute.yaml -selfdrive/car/torque_data/override.yaml +selfdrive/car/torque_data/*.toml +selfdrive/car/torque_data/lat_models/* selfdrive/car/body/*.py selfdrive/car/chrysler/*.py @@ -141,58 +117,27 @@ selfdrive/car/tesla/*.py selfdrive/car/toyota/*.py selfdrive/car/volkswagen/*.py -system/clocksd/.gitignore -system/clocksd/SConscript -system/clocksd/clocksd.cc - selfdrive/debug/can_printer.py selfdrive/debug/check_freq.py selfdrive/debug/dump.py selfdrive/debug/filter_log_message.py +selfdrive/debug/format_fingerprints.py selfdrive/debug/get_fingerprint.py selfdrive/debug/uiview.py selfdrive/debug/hyundai_enable_radar_points.py selfdrive/debug/vw_mqb_config.py -selfdrive/gpxd/gpx_uploader.py -selfdrive/gpxd/gpxd.py - -selfdrive/mapd/assets/* -selfdrive/mapd/config.py -selfdrive/mapd/mapd.py -selfdrive/mapd/lib/* -selfdrive/mapd/README.md +selfdrive/mapd_manager.py +selfdrive/sunnypilot/*.py +selfdrive/sunnypilot/live_map_data/*.py common/SConscript common/version.h common/model.h -common/prefix.h -common/swaglog.h -common/swaglog.cc -common/statlog.h -common/statlog.cc -common/util.cc -common/util.h -common/queue.h -common/clutil.cc -common/clutil.h -common/params.h -common/params.cc -common/ratekeeper.cc -common/ratekeeper.h -common/watchdog.cc -common/watchdog.h - -common/modeldata.h -common/mat.h -common/timing.h - -common/gpio.cc -common/gpio.h -common/i2c.cc -common/i2c.h +common/*.h +common/*.cc selfdrive/controls/__init__.py selfdrive/controls/controlsd.py @@ -203,6 +148,7 @@ selfdrive/controls/lib/alertmanager.py selfdrive/controls/lib/alerts_offroad.json selfdrive/controls/lib/desire_helper.py selfdrive/controls/lib/drive_helpers.py +selfdrive/controls/lib/dynamic_experimental_controller.py selfdrive/controls/lib/events.py selfdrive/controls/lib/lane_planner.py selfdrive/controls/lib/latcontrol_angle.py @@ -213,19 +159,22 @@ selfdrive/controls/lib/lateral_planner.py selfdrive/controls/lib/longcontrol.py selfdrive/controls/lib/longitudinal_planner.py selfdrive/controls/lib/pid.py -selfdrive/controls/lib/speed_limit_controller.py selfdrive/controls/lib/turn_speed_controller.py selfdrive/controls/lib/vehicle_model.py selfdrive/controls/lib/vision_turn_controller.py +selfdrive/controls/lib/sunnypilot/__init__.py +selfdrive/controls/lib/sunnypilot/common.py +selfdrive/controls/lib/sunnypilot/helpers.py +selfdrive/controls/lib/sunnypilot/speed_limit_controller.py +selfdrive/controls/lib/sunnypilot/speed_limit_resolver.py selfdrive/controls/lib/lateral_mpc_lib/.gitignore selfdrive/controls/lib/longitudinal_mpc_lib/.gitignore selfdrive/controls/lib/lateral_mpc_lib/* selfdrive/controls/lib/longitudinal_mpc_lib/* -selfdrive/hardware - system/__init__.py +system/*.py system/hardware/__init__.py system/hardware/base.h @@ -242,6 +191,7 @@ system/hardware/tici/agnos.json system/hardware/tici/amplifier.py system/hardware/tici/updater system/hardware/tici/iwlist.py +system/hardware/tici/esim.nmconnection system/hardware/pc/__init__.py system/hardware/pc/hardware.h system/hardware/pc/hardware.py @@ -255,22 +205,20 @@ system/ubloxd/*.cc selfdrive/locationd/__init__.py selfdrive/locationd/SConscript selfdrive/locationd/.gitignore -selfdrive/locationd/laikad.py selfdrive/locationd/locationd.h selfdrive/locationd/locationd.cc selfdrive/locationd/paramsd.py selfdrive/locationd/models/__init__.py selfdrive/locationd/models/.gitignore selfdrive/locationd/models/car_kf.py -selfdrive/locationd/models/gnss_kf.py selfdrive/locationd/models/live_kf.py selfdrive/locationd/models/live_kf.h selfdrive/locationd/models/live_kf.cc selfdrive/locationd/models/constants.py -selfdrive/locationd/models/gnss_helpers.py selfdrive/locationd/torqued.py selfdrive/locationd/calibrationd.py +selfdrive/locationd/helpers.py system/logcatd/.gitignore system/logcatd/SConscript @@ -309,9 +257,14 @@ system/sensord/SConscript system/sensord/sensors_qcom2.cc system/sensord/sensors/*.cc system/sensord/sensors/*.h -system/sensord/sensord system/sensord/pigeond.py +system/webrtc/__init__.py +system/webrtc/webrtcd.py +system/webrtc/schema.py +system/webrtc/device/audio.py +system/webrtc/device/video.py + selfdrive/thermald/thermald.py selfdrive/thermald/power_monitoring.py selfdrive/thermald/fan_controller.py @@ -327,13 +280,9 @@ selfdrive/ui/.gitignore selfdrive/ui/SConscript selfdrive/ui/*.cc selfdrive/ui/*.h -selfdrive/ui/ui selfdrive/ui/text selfdrive/ui/spinner -selfdrive/ui/soundd/*.cc -selfdrive/ui/soundd/*.h -selfdrive/ui/soundd/soundd -selfdrive/ui/soundd/.gitignore +selfdrive/ui/soundd.py selfdrive/ui/translations/*.ts selfdrive/ui/translations/languages.json selfdrive/ui/update_translations.py @@ -346,8 +295,12 @@ selfdrive/ui/qt/network/*.h selfdrive/ui/qt/offroad/*.cc selfdrive/ui/qt/offroad/*.h selfdrive/ui/qt/offroad/*.qml +selfdrive/ui/qt/offroad/sunnypilot/*.cc +selfdrive/ui/qt/offroad/sunnypilot/*.h selfdrive/ui/qt/widgets/*.cc selfdrive/ui/qt/widgets/*.h +selfdrive/ui/qt/widgets/sunnypilot/*.cc +selfdrive/ui/qt/widgets/sunnypilot/*.h selfdrive/ui/qt/maps/*.cc selfdrive/ui/qt/maps/*.h selfdrive/ui/qt/screenrecorder/* @@ -364,20 +317,15 @@ system/camerad/main.cc system/camerad/snapshot/* system/camerad/cameras/camera_common.h system/camerad/cameras/camera_common.cc -system/camerad/cameras/sensor2_i2c.h - -system/camerad/imgproc/conv.cl -system/camerad/imgproc/pool.cl -system/camerad/imgproc/utils.cc -system/camerad/imgproc/utils.h +system/camerad/sensors/*.h +system/camerad/sensors/*.cc system/fleetmanager/* selfdrive/manager/__init__.py selfdrive/manager/build.py -selfdrive/manager/custom_dep.py selfdrive/manager/helpers.py -selfdrive/manager/local_osm_install.py +selfdrive/manager/mapd_installer.py selfdrive/manager/manager.py selfdrive/manager/process_config.py selfdrive/manager/process.py @@ -388,6 +336,9 @@ selfdrive/modeld/.gitignore selfdrive/modeld/__init__.py selfdrive/modeld/SConscript selfdrive/modeld/modeld.py +selfdrive/modeld/parse_model_outputs.py +selfdrive/modeld/fill_model_msg.py +selfdrive/modeld/get_model_metadata.py selfdrive/modeld/navmodeld.py selfdrive/modeld/dmonitoringmodeld.py selfdrive/modeld/constants.py @@ -400,8 +351,6 @@ selfdrive/modeld/models/*.pyx selfdrive/modeld/models/commonmodel.cc selfdrive/modeld/models/commonmodel.h -selfdrive/modeld/models/driving.cc -selfdrive/modeld/models/driving.h selfdrive/modeld/models/supercombo.onnx selfdrive/modeld/models/dmonitoring_model_q.dlc @@ -475,13 +424,18 @@ third_party/acados/acados_template/** third_party/bootstrap/** third_party/qt5/larch64/bin/** +third_party/maplibre-native-qt/** + +third_party/pfeiferj-mapd/** scripts/update_now.sh scripts/stop_updater.sh +teleoprtc/** + +rednose_repo/site_scons/site_tools/rednose_filter.py rednose/.gitignore rednose/** -laika/** body/.gitignore body/board/SConscript @@ -621,14 +575,21 @@ opendbc/tesla_can.dbc opendbc/tesla_radar.dbc opendbc/tesla_powertrain.dbc -tinygrad_repo/openpilot/compile.py +tinygrad_repo/openpilot/compile2.py tinygrad_repo/extra/onnx.py tinygrad_repo/extra/onnx_ops.py tinygrad_repo/extra/thneed.py tinygrad_repo/extra/utils.py -tinygrad_repo/tinygrad/codegen/ast.py -tinygrad_repo/tinygrad/codegen/gpu.py +tinygrad_repo/tinygrad/codegen/kernel.py +tinygrad_repo/tinygrad/codegen/linearizer.py +tinygrad_repo/tinygrad/features/image.py +tinygrad_repo/tinygrad/features/search.py tinygrad_repo/tinygrad/nn/* +tinygrad_repo/tinygrad/renderer/cstyle.py +tinygrad_repo/tinygrad/renderer/opencl.py +tinygrad_repo/tinygrad/runtime/lib.py +tinygrad_repo/tinygrad/runtime/ops_cpu.py +tinygrad_repo/tinygrad/runtime/ops_disk.py tinygrad_repo/tinygrad/runtime/ops_gpu.py tinygrad_repo/tinygrad/shape/* tinygrad_repo/tinygrad/*.py diff --git a/release/files_pc b/release/files_pc index 13f1b52166..f2bf090f2c 100644 --- a/release/files_pc +++ b/release/files_pc @@ -1,5 +1,3 @@ -third_party/mapbox-gl-native-qt/x86_64/*.so - third_party/libyuv/x86_64/** third_party/snpe/x86_64/** third_party/snpe/x86_64-linux-clang/** diff --git a/release/files_tici b/release/files_tici index ab49de34f6..1771c45138 100644 --- a/release/files_tici +++ b/release/files_tici @@ -1,18 +1,15 @@ third_party/libyuv/larch64/** third_party/snpe/larch64** third_party/snpe/aarch64-ubuntu-gcc7.5/* -third_party/mapbox-gl-native-qt/include/* third_party/acados/larch64/** -system/timezoned.py - system/camerad/cameras/camera_qcom2.cc system/camerad/cameras/camera_qcom2.h system/camerad/cameras/camera_util.cc system/camerad/cameras/camera_util.h system/camerad/cameras/real_debayer.cl -system/sensord/rawgps/* +system/qcomgpsd/* selfdrive/ui/qt/spinner_larch64 selfdrive/ui/qt/text_larch64 diff --git a/release/verify.sh b/release/verify.sh index 56f21183f1..ec5266bd81 100755 --- a/release/verify.sh +++ b/release/verify.sh @@ -6,7 +6,7 @@ RED="\033[0;31m" GREEN="\033[0;32m" CLEAR="\033[0m" -BRANCHES="devel dashcam3 release3" +BRANCHES="devel release3" for b in $BRANCHES; do if git diff --quiet origin/$b origin/$b-staging && [ "$(git rev-parse origin/$b)" = "$(git rev-parse origin/$b-staging)" ]; then printf "%-10s $GREEN ok $CLEAR\n" "$b" diff --git a/scripts/apply-pr.sh b/scripts/apply-pr.sh index 65805b8485..74f765391a 100755 --- a/scripts/apply-pr.sh +++ b/scripts/apply-pr.sh @@ -8,4 +8,4 @@ fi BASE="https://github.com/commaai/openpilot/pull/" PR_NUM="$(echo $1 | grep -o -E '[0-9]+')" -curl -L $BASE/$PR_NUM.patch | git apply +curl -L $BASE/$PR_NUM.patch | git apply -3 diff --git a/scripts/build_small.sh b/scripts/build_small.sh new file mode 100755 index 0000000000..90f55373e2 --- /dev/null +++ b/scripts/build_small.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -ex + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)" +cd $DIR + +# git clone --mirror +SRC=/tmp/openpilot.git/ +OUT=/tmp/smallpilot/ + +echo "starting size $(du -hs .git/)" + +rm -rf $OUT + +cd $SRC +git remote update + +# copy contents +#rsync -a --exclude='.git/' $DIR $OUT + +cp -r $SRC $OUT + +cd $OUT + +# remove all tags +git tag -l | xargs git tag -d + +# remove non-master branches +BRANCHES="release2 release3 devel master-ci nightly" +for branch in $BRANCHES; do + git branch -D $branch + git branch -D ${branch}-staging || true +done + +#git gc +git reflog expire --expire=now --all +git gc --prune=now +git gc --aggressive --prune=now +echo "new one is $(du -hs .)" diff --git a/scripts/checkout-pr.sh b/scripts/checkout-pr.sh new file mode 100755 index 0000000000..43f658beff --- /dev/null +++ b/scripts/checkout-pr.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -e + +if [ $# -eq 0 ]; then + echo "usage: $0 " + exit 1 +fi + +BASE="https://github.com/commaai/openpilot/pull/" +PR_NUM="$(echo $1 | grep -o -E '[0-9]+')" +BRANCH=tmp-pr${PR_NUM} + +git branch -D -f $BRANCH || true +git fetch -u -f origin pull/$PR_NUM/head:$BRANCH +git switch $BRANCH +git reset --hard FETCH_HEAD diff --git a/scripts/code_stats.py b/scripts/code_stats.py index 59b5724a68..3189cd7cc1 100755 --- a/scripts/code_stats.py +++ b/scripts/code_stats.py @@ -13,7 +13,7 @@ for d in ["cereal", "common", "scripts", "selfdrive", "tools"]: if f.endswith(".py"): pyf.append(os.path.join(root, f)) -imps = set() +imps: set[str] = set() class Analyzer(ast.NodeVisitor): def visit_Import(self, node): diff --git a/scripts/dump_pll.c b/scripts/dump_pll.c deleted file mode 100644 index 3e2190235a..0000000000 --- a/scripts/dump_pll.c +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include -#include - -void hexdump(uint32_t *d, int l) { - for (int i = 0; i < l; i++) { - if (i%0x10 == 0 && i != 0) printf("\n"); - printf("%8x ", d[i]); - } - printf("\n"); -} - -/* Power cluster primary PLL */ -#define C0_PLL_MODE 0x0 -#define C0_PLL_L_VAL 0x4 -#define C0_PLL_ALPHA 0x8 -#define C0_PLL_USER_CTL 0x10 -#define C0_PLL_CONFIG_CTL 0x18 -#define C0_PLL_CONFIG_CTL_HI 0x1C -#define C0_PLL_STATUS 0x28 -#define C0_PLL_TEST_CTL_LO 0x20 -#define C0_PLL_TEST_CTL_HI 0x24 - -/* Power cluster alt PLL */ -#define C0_PLLA_MODE 0x100 -#define C0_PLLA_L_VAL 0x104 -#define C0_PLLA_ALPHA 0x108 -#define C0_PLLA_USER_CTL 0x110 -#define C0_PLLA_CONFIG_CTL 0x118 -#define C0_PLLA_STATUS 0x128 -#define C0_PLLA_TEST_CTL_LO 0x120 - -#define APC_DIAG_OFFSET 0x48 -#define CLK_CTL_OFFSET 0x44 -#define MUX_OFFSET 0x40 -#define MDD_DROOP_CODE 0x7c -#define SSSCTL_OFFSET 0x160 -#define PSCTL_OFFSET 0x164 - -int main() { - int fd = open("/dev/mem", O_RDWR); - volatile uint32_t *mb = (uint32_t *)mmap(0, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x06400000); - volatile uint32_t *mc = (uint32_t *)mmap(0, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x06480000); - volatile uint32_t *md = (uint32_t *)mmap(0, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x09A20000); - while (1) { - printf("PLL MODE:%x L_VAL:%x ALPHA:%x USER_CTL:%x CONFIG_CTL:%x CONFIG_CTL_HI:%x STATUS:%x TEST_CTL_LO:%x TEST_CTL_HI:%x\n", - mb[C0_PLL_MODE/4], mb[C0_PLL_L_VAL/4], mb[C0_PLL_ALPHA/4], - mb[C0_PLL_USER_CTL/4], mb[C0_PLL_CONFIG_CTL/4], mb[C0_PLL_CONFIG_CTL_HI/4], - mb[C0_PLL_STATUS/4], mb[C0_PLL_TEST_CTL_LO/4], mb[C0_PLL_TEST_CTL_HI/4]); - printf(" MUX_OFFSET:%x CLK_CTL_OFFSET:%x APC_DIAG_OFFSET:%x MDD_DROOP_CODE:%x\n", - mb[MUX_OFFSET/4], mb[CLK_CTL_OFFSET/4], mb[APC_DIAG_OFFSET/4], mb[MDD_DROOP_CODE/4]); - printf(" PLLA MODE:%x L_VAL:%x ALPHA:%x USER_CTL:%x CONFIG_CTL:%x STATUS:%x TEST_CTL_LO:%x SSSCTL_OFFSET:%x PSCTL_OFFSET:%x\n", - mb[C0_PLLA_MODE/4], mb[C0_PLLA_L_VAL/4], mb[C0_PLLA_ALPHA/4], mb[C0_PLLA_USER_CTL/4], - mb[C0_PLLA_CONFIG_CTL/4], mb[C0_PLLA_STATUS/4], mb[C0_PLLA_TEST_CTL_LO/4], - mb[SSSCTL_OFFSET/4], mb[PSCTL_OFFSET/4]); - usleep(1000*100); - } -} - diff --git a/scripts/retry.sh b/scripts/retry.sh new file mode 100755 index 0000000000..4861748e55 --- /dev/null +++ b/scripts/retry.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +function fail { + echo $1 >&2 + exit 1 +} + +function retry { + local n=1 + local max=3 # 3 retries before failure + local delay=5 # delay between retries, 5 seconds + while true; do + echo "Running command '$@' with retry, attempt $n/$max" + "$@" && break || { + if [[ $n -lt $max ]]; then + ((n++)) + sleep $delay; + else + fail "The command has failed after $n attempts." + fi + } + done +} + +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + retry "$@" +fi diff --git a/scripts/sunnypilot/model_json_hash_generator.py b/scripts/sunnypilot/model_json_hash_generator.py new file mode 100644 index 0000000000..a6ecd761fd --- /dev/null +++ b/scripts/sunnypilot/model_json_hash_generator.py @@ -0,0 +1,28 @@ +import requests +import hashlib +import json + +# Function to calculate SHA-256 hash of a file downloaded from a given URI +def calculate_hash(download_uri): + response = requests.get(download_uri, stream=True) + hash_sha256 = hashlib.sha256() + for chunk in response.iter_content(chunk_size=1024): + hash_sha256.update(chunk) + return hash_sha256.hexdigest() + +# Download the models_v3.json file +models_v3_url = "https://docs.sunnypilot.ai/models_v3.json" +response = requests.get(models_v3_url) +models_data = response.json() + +# Iterate through each model and calculate SHA-256 for its files +for model_key, model_info in models_data.items(): + # Calculate and insert the SHA-256 hash for each download URI + model_info['download_uri'] = {'url': model_info['download_uri'], 'sha256': calculate_hash(model_info['download_uri'])} + model_info['download_uri_nav'] = {'url': model_info['download_uri_nav'], 'sha256': calculate_hash(model_info['download_uri_nav'])} + model_info['download_uri_metadata'] = {'url': model_info['download_uri_metadata'], 'sha256': calculate_hash(model_info['download_uri_metadata'])} + +# Save the updated JSON with hashes +updated_json_file_path = 'updated_models_v3.json' # Path for the updated JSON file +with open(updated_json_file_path, 'w') as file: + json.dump(models_data, file, indent=4) diff --git a/selfdrive/assets/body/awake.gif b/selfdrive/assets/body/awake.gif index 7ec67055dd..cc22fd9b12 100644 Binary files a/selfdrive/assets/body/awake.gif and b/selfdrive/assets/body/awake.gif differ diff --git a/selfdrive/assets/body/sleep.gif b/selfdrive/assets/body/sleep.gif index 469cc80338..fcc0b4ed50 100644 Binary files a/selfdrive/assets/body/sleep.gif and b/selfdrive/assets/body/sleep.gif differ diff --git a/selfdrive/assets/fonts/Inter-Black.ttf b/selfdrive/assets/fonts/Inter-Black.ttf index 5653757735..6bfd108896 100644 Binary files a/selfdrive/assets/fonts/Inter-Black.ttf and b/selfdrive/assets/fonts/Inter-Black.ttf differ diff --git a/selfdrive/assets/fonts/Inter-Bold.ttf b/selfdrive/assets/fonts/Inter-Bold.ttf index e98b84ce87..240f73d344 100644 Binary files a/selfdrive/assets/fonts/Inter-Bold.ttf and b/selfdrive/assets/fonts/Inter-Bold.ttf differ diff --git a/selfdrive/assets/fonts/Inter-ExtraBold.ttf b/selfdrive/assets/fonts/Inter-ExtraBold.ttf index 7f16a0f0f5..8cb343bc40 100644 Binary files a/selfdrive/assets/fonts/Inter-ExtraBold.ttf and b/selfdrive/assets/fonts/Inter-ExtraBold.ttf differ diff --git a/selfdrive/assets/fonts/Inter-ExtraLight.ttf b/selfdrive/assets/fonts/Inter-ExtraLight.ttf index 69426a3eb5..9ab6117be9 100644 Binary files a/selfdrive/assets/fonts/Inter-ExtraLight.ttf and b/selfdrive/assets/fonts/Inter-ExtraLight.ttf differ diff --git a/selfdrive/assets/fonts/Inter-Light.ttf b/selfdrive/assets/fonts/Inter-Light.ttf index a5f073690d..a09fccdb3d 100644 Binary files a/selfdrive/assets/fonts/Inter-Light.ttf and b/selfdrive/assets/fonts/Inter-Light.ttf differ diff --git a/selfdrive/assets/fonts/Inter-Medium.ttf b/selfdrive/assets/fonts/Inter-Medium.ttf index 721147d831..e3a0591ed1 100644 Binary files a/selfdrive/assets/fonts/Inter-Medium.ttf and b/selfdrive/assets/fonts/Inter-Medium.ttf differ diff --git a/selfdrive/assets/fonts/Inter-Regular.ttf b/selfdrive/assets/fonts/Inter-Regular.ttf index 96fd6a12d0..3d153fa567 100644 Binary files a/selfdrive/assets/fonts/Inter-Regular.ttf and b/selfdrive/assets/fonts/Inter-Regular.ttf differ diff --git a/selfdrive/assets/fonts/Inter-SemiBold.ttf b/selfdrive/assets/fonts/Inter-SemiBold.ttf index ddb279290b..ec7ef519d0 100644 Binary files a/selfdrive/assets/fonts/Inter-SemiBold.ttf and b/selfdrive/assets/fonts/Inter-SemiBold.ttf differ diff --git a/selfdrive/assets/fonts/Inter-Thin.ttf b/selfdrive/assets/fonts/Inter-Thin.ttf index 76be6252b9..abcfac0b75 100644 Binary files a/selfdrive/assets/fonts/Inter-Thin.ttf and b/selfdrive/assets/fonts/Inter-Thin.ttf differ diff --git a/selfdrive/assets/fonts/JetBrainsMono-Medium.ttf b/selfdrive/assets/fonts/JetBrainsMono-Medium.ttf index a6ba5529af..34cd543d94 100644 Binary files a/selfdrive/assets/fonts/JetBrainsMono-Medium.ttf and b/selfdrive/assets/fonts/JetBrainsMono-Medium.ttf differ diff --git a/selfdrive/assets/icons/close.svg b/selfdrive/assets/icons/close.svg index b1e6d3b867..33f68f02bc 100644 --- a/selfdrive/assets/icons/close.svg +++ b/selfdrive/assets/icons/close.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:84c6b23bd3245954b86f80278511186fca4ddfa70d87c8b25e8f9fb76f9af758 +size 379 diff --git a/selfdrive/assets/images/button_flag.png b/selfdrive/assets/images/button_flag.png index cac4db6d4c..745c8d576b 100644 Binary files a/selfdrive/assets/images/button_flag.png and b/selfdrive/assets/images/button_flag.png differ diff --git a/selfdrive/assets/images/button_home.png b/selfdrive/assets/images/button_home.png index 9f52faf9e2..dd3f97f44b 100644 Binary files a/selfdrive/assets/images/button_home.png and b/selfdrive/assets/images/button_home.png differ diff --git a/selfdrive/assets/images/button_settings.png b/selfdrive/assets/images/button_settings.png index e04262b887..4bbfe581e6 100644 Binary files a/selfdrive/assets/images/button_settings.png and b/selfdrive/assets/images/button_settings.png differ diff --git a/selfdrive/assets/images/triangle.svg b/selfdrive/assets/images/triangle.svg index 9320269bde..f3a8db44b7 100644 --- a/selfdrive/assets/images/triangle.svg +++ b/selfdrive/assets/images/triangle.svg @@ -1,56 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:aaf9a1967365f2c641bf7b54a409e32842cee0bfded7ebb01b1a95c4ac9f0154 +size 2163 diff --git a/selfdrive/assets/img_chffr_wheel.png b/selfdrive/assets/img_chffr_wheel.png index 3f09a35a79..570ba4ee82 100644 Binary files a/selfdrive/assets/img_chffr_wheel.png and b/selfdrive/assets/img_chffr_wheel.png differ diff --git a/selfdrive/assets/img_circled_check.svg b/selfdrive/assets/img_circled_check.svg index 27c37395b2..1852ba947a 100644 --- a/selfdrive/assets/img_circled_check.svg +++ b/selfdrive/assets/img_circled_check.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:c5687faf4cb22bece0405893671651eb13e8eda393987610f493ee5e05eac61d +size 439 diff --git a/selfdrive/assets/img_circled_slash.svg b/selfdrive/assets/img_circled_slash.svg index b10a3938d5..6c77030d15 100644 --- a/selfdrive/assets/img_circled_slash.svg +++ b/selfdrive/assets/img_circled_slash.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:fbec38447732a443c304042c3c3d362c94e11e794e7cc7dc86aa1c7bba16c6b6 +size 328 diff --git a/selfdrive/assets/img_continue_triangle.svg b/selfdrive/assets/img_continue_triangle.svg index 20f9e45dcf..ee9db369a4 100644 --- a/selfdrive/assets/img_continue_triangle.svg +++ b/selfdrive/assets/img_continue_triangle.svg @@ -1,3 +1,3 @@ - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:1764c0c93703481b2ced63bc35c5a23a6c12388ca690ce4cf577b3b478a08b69 +size 197 diff --git a/selfdrive/assets/img_couch.svg b/selfdrive/assets/img_couch.svg index 2e86012809..7c58515200 100644 --- a/selfdrive/assets/img_couch.svg +++ b/selfdrive/assets/img_couch.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:a428d2561198ebdc853ba6fb25a8b9c5a58064d000413694e1535adc06633c0a +size 2649 diff --git a/selfdrive/assets/img_driver_face.png b/selfdrive/assets/img_driver_face.png index e2d943e537..8b6f515b1f 100644 Binary files a/selfdrive/assets/img_driver_face.png and b/selfdrive/assets/img_driver_face.png differ diff --git a/selfdrive/assets/img_driver_face_static.png b/selfdrive/assets/img_driver_face_static.png index d8bc5f1371..5d5ebf6795 100644 Binary files a/selfdrive/assets/img_driver_face_static.png and b/selfdrive/assets/img_driver_face_static.png differ diff --git a/selfdrive/assets/img_experimental.svg b/selfdrive/assets/img_experimental.svg index 0eaec3b3cd..3c31caa07e 100644 --- a/selfdrive/assets/img_experimental.svg +++ b/selfdrive/assets/img_experimental.svg @@ -1,10 +1,3 @@ - - - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:c26afadff128244567a7cf98f1c998f97056b19209301ff7fc8851eb807fb748 +size 2193 diff --git a/selfdrive/assets/img_experimental_grey.svg b/selfdrive/assets/img_experimental_grey.svg index dc87105ac5..8ba6c87bd5 100644 --- a/selfdrive/assets/img_experimental_grey.svg +++ b/selfdrive/assets/img_experimental_grey.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5ae28a53171567c8a0d52eec75cc49004cb8dd19dcab9a360784718ab8ec7c02 +size 1931 diff --git a/selfdrive/assets/img_experimental_white.svg b/selfdrive/assets/img_experimental_white.svg index ae4f18fde2..9714fe0c01 100644 --- a/selfdrive/assets/img_experimental_white.svg +++ b/selfdrive/assets/img_experimental_white.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:99be696be983700d7eb1768bd1c840198a4eb9525b71e28efea49f13c358e519 +size 1891 diff --git a/selfdrive/assets/img_eye_closed.svg b/selfdrive/assets/img_eye_closed.svg index 91b229e911..fcef6e8a3c 100644 --- a/selfdrive/assets/img_eye_closed.svg +++ b/selfdrive/assets/img_eye_closed.svg @@ -1,5 +1,3 @@ - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:8e0e5b451ed2e426fea99da24a9df6552be7048205b9aa7b89e46eeb89f6d08e +size 1490 diff --git a/selfdrive/assets/img_eye_open.svg b/selfdrive/assets/img_eye_open.svg index ea6e41ac54..7289c4a571 100644 --- a/selfdrive/assets/img_eye_open.svg +++ b/selfdrive/assets/img_eye_open.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:23935f9e2ddba8dafd4a5d0217f29783260a0832c9b0d3e6a2ef66d4529b91d2 +size 775 diff --git a/selfdrive/assets/img_map.png b/selfdrive/assets/img_map.png index 8bdae4d7d8..a8646491d7 100644 Binary files a/selfdrive/assets/img_map.png and b/selfdrive/assets/img_map.png differ diff --git a/selfdrive/assets/img_minus_arrow_down.png b/selfdrive/assets/img_minus_arrow_down.png new file mode 100644 index 0000000000..b41bbe7542 Binary files /dev/null and b/selfdrive/assets/img_minus_arrow_down.png differ diff --git a/selfdrive/assets/img_plus_arrow_up.png b/selfdrive/assets/img_plus_arrow_up.png new file mode 100644 index 0000000000..0f72f27a06 Binary files /dev/null and b/selfdrive/assets/img_plus_arrow_up.png differ diff --git a/selfdrive/assets/img_spinner_comma.png b/selfdrive/assets/img_spinner_comma.png index 16109557f8..81f2fb38c4 100644 Binary files a/selfdrive/assets/img_spinner_comma.png and b/selfdrive/assets/img_spinner_comma.png differ diff --git a/selfdrive/assets/img_spinner_track.png b/selfdrive/assets/img_spinner_track.png index 931c17e836..989a6cefd1 100644 Binary files a/selfdrive/assets/img_spinner_track.png and b/selfdrive/assets/img_spinner_track.png differ diff --git a/selfdrive/assets/navigation/default_marker.svg b/selfdrive/assets/navigation/default_marker.svg index 43d5290a96..4b11ee7623 100644 --- a/selfdrive/assets/navigation/default_marker.svg +++ b/selfdrive/assets/navigation/default_marker.svg @@ -1,5 +1,3 @@ - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:a950b541c4e676475e3571aaa806060c3309c7f44b08a59f1ada19881b42493d +size 389 diff --git a/selfdrive/assets/navigation/direction_arrive.png b/selfdrive/assets/navigation/direction_arrive.png index 733c129091..f8c5bdc2d8 100644 Binary files a/selfdrive/assets/navigation/direction_arrive.png and b/selfdrive/assets/navigation/direction_arrive.png differ diff --git a/selfdrive/assets/navigation/direction_arrive_left.png b/selfdrive/assets/navigation/direction_arrive_left.png index 92ff8e0341..6f59ab3711 100644 Binary files a/selfdrive/assets/navigation/direction_arrive_left.png and b/selfdrive/assets/navigation/direction_arrive_left.png differ diff --git a/selfdrive/assets/navigation/direction_arrive_right.png b/selfdrive/assets/navigation/direction_arrive_right.png index f5983bfe61..318e041339 100644 Binary files a/selfdrive/assets/navigation/direction_arrive_right.png and b/selfdrive/assets/navigation/direction_arrive_right.png differ diff --git a/selfdrive/assets/navigation/direction_arrive_straight.png b/selfdrive/assets/navigation/direction_arrive_straight.png index 733c129091..f8c5bdc2d8 100644 Binary files a/selfdrive/assets/navigation/direction_arrive_straight.png and b/selfdrive/assets/navigation/direction_arrive_straight.png differ diff --git a/selfdrive/assets/navigation/direction_close.png b/selfdrive/assets/navigation/direction_close.png index 4fdb5d195d..0e9e478d45 100644 Binary files a/selfdrive/assets/navigation/direction_close.png and b/selfdrive/assets/navigation/direction_close.png differ diff --git a/selfdrive/assets/navigation/direction_continue.png b/selfdrive/assets/navigation/direction_continue.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_continue.png and b/selfdrive/assets/navigation/direction_continue.png differ diff --git a/selfdrive/assets/navigation/direction_continue_left.png b/selfdrive/assets/navigation/direction_continue_left.png index 9a618026f0..438532ee29 100644 Binary files a/selfdrive/assets/navigation/direction_continue_left.png and b/selfdrive/assets/navigation/direction_continue_left.png differ diff --git a/selfdrive/assets/navigation/direction_continue_right.png b/selfdrive/assets/navigation/direction_continue_right.png index 0fbaa3f253..4ee7ebc3b4 100644 Binary files a/selfdrive/assets/navigation/direction_continue_right.png and b/selfdrive/assets/navigation/direction_continue_right.png differ diff --git a/selfdrive/assets/navigation/direction_continue_slight_left.png b/selfdrive/assets/navigation/direction_continue_slight_left.png index 08e964dbd6..29f4440460 100644 Binary files a/selfdrive/assets/navigation/direction_continue_slight_left.png and b/selfdrive/assets/navigation/direction_continue_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_continue_slight_right.png b/selfdrive/assets/navigation/direction_continue_slight_right.png index 3e21cae11e..755935b84c 100644 Binary files a/selfdrive/assets/navigation/direction_continue_slight_right.png and b/selfdrive/assets/navigation/direction_continue_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_continue_straight.png b/selfdrive/assets/navigation/direction_continue_straight.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_continue_straight.png and b/selfdrive/assets/navigation/direction_continue_straight.png differ diff --git a/selfdrive/assets/navigation/direction_continue_uturn.png b/selfdrive/assets/navigation/direction_continue_uturn.png index 0bd1b91777..ff9d97893f 100644 Binary files a/selfdrive/assets/navigation/direction_continue_uturn.png and b/selfdrive/assets/navigation/direction_continue_uturn.png differ diff --git a/selfdrive/assets/navigation/direction_depart.png b/selfdrive/assets/navigation/direction_depart.png index 4bf32c870d..aa4e4f7115 100644 Binary files a/selfdrive/assets/navigation/direction_depart.png and b/selfdrive/assets/navigation/direction_depart.png differ diff --git a/selfdrive/assets/navigation/direction_depart_left.png b/selfdrive/assets/navigation/direction_depart_left.png index 1f8d726911..76937eb5d3 100644 Binary files a/selfdrive/assets/navigation/direction_depart_left.png and b/selfdrive/assets/navigation/direction_depart_left.png differ diff --git a/selfdrive/assets/navigation/direction_depart_right.png b/selfdrive/assets/navigation/direction_depart_right.png index f359a685ff..149626b171 100644 Binary files a/selfdrive/assets/navigation/direction_depart_right.png and b/selfdrive/assets/navigation/direction_depart_right.png differ diff --git a/selfdrive/assets/navigation/direction_depart_straight.png b/selfdrive/assets/navigation/direction_depart_straight.png index 4bf32c870d..aa4e4f7115 100644 Binary files a/selfdrive/assets/navigation/direction_depart_straight.png and b/selfdrive/assets/navigation/direction_depart_straight.png differ diff --git a/selfdrive/assets/navigation/direction_end_of_road_left.png b/selfdrive/assets/navigation/direction_end_of_road_left.png index 5c0a24e7cb..32a602bdef 100644 Binary files a/selfdrive/assets/navigation/direction_end_of_road_left.png and b/selfdrive/assets/navigation/direction_end_of_road_left.png differ diff --git a/selfdrive/assets/navigation/direction_end_of_road_right.png b/selfdrive/assets/navigation/direction_end_of_road_right.png index 8d9b89d36c..68915cee25 100644 Binary files a/selfdrive/assets/navigation/direction_end_of_road_right.png and b/selfdrive/assets/navigation/direction_end_of_road_right.png differ diff --git a/selfdrive/assets/navigation/direction_flag.png b/selfdrive/assets/navigation/direction_flag.png index bad12ec666..26e8a220f2 100644 Binary files a/selfdrive/assets/navigation/direction_flag.png and b/selfdrive/assets/navigation/direction_flag.png differ diff --git a/selfdrive/assets/navigation/direction_fork.png b/selfdrive/assets/navigation/direction_fork.png index 3e0c262e2a..c3019a5991 100644 Binary files a/selfdrive/assets/navigation/direction_fork.png and b/selfdrive/assets/navigation/direction_fork.png differ diff --git a/selfdrive/assets/navigation/direction_fork_left.png b/selfdrive/assets/navigation/direction_fork_left.png index b244b42b51..a847257e9b 100644 Binary files a/selfdrive/assets/navigation/direction_fork_left.png and b/selfdrive/assets/navigation/direction_fork_left.png differ diff --git a/selfdrive/assets/navigation/direction_fork_right.png b/selfdrive/assets/navigation/direction_fork_right.png index aa3efaabca..102ddf753c 100644 Binary files a/selfdrive/assets/navigation/direction_fork_right.png and b/selfdrive/assets/navigation/direction_fork_right.png differ diff --git a/selfdrive/assets/navigation/direction_fork_slight_left.png b/selfdrive/assets/navigation/direction_fork_slight_left.png index 82fa59859b..945ef744e0 100644 Binary files a/selfdrive/assets/navigation/direction_fork_slight_left.png and b/selfdrive/assets/navigation/direction_fork_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_fork_slight_right.png b/selfdrive/assets/navigation/direction_fork_slight_right.png index 3596a2fbf2..65db839df9 100644 Binary files a/selfdrive/assets/navigation/direction_fork_slight_right.png and b/selfdrive/assets/navigation/direction_fork_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_fork_straight.png b/selfdrive/assets/navigation/direction_fork_straight.png index 86f30ab9b6..74528d230c 100644 Binary files a/selfdrive/assets/navigation/direction_fork_straight.png and b/selfdrive/assets/navigation/direction_fork_straight.png differ diff --git a/selfdrive/assets/navigation/direction_invalid.png b/selfdrive/assets/navigation/direction_invalid.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_invalid.png and b/selfdrive/assets/navigation/direction_invalid.png differ diff --git a/selfdrive/assets/navigation/direction_invalid_left.png b/selfdrive/assets/navigation/direction_invalid_left.png index 9a618026f0..438532ee29 100644 Binary files a/selfdrive/assets/navigation/direction_invalid_left.png and b/selfdrive/assets/navigation/direction_invalid_left.png differ diff --git a/selfdrive/assets/navigation/direction_invalid_right.png b/selfdrive/assets/navigation/direction_invalid_right.png index 0fbaa3f253..4ee7ebc3b4 100644 Binary files a/selfdrive/assets/navigation/direction_invalid_right.png and b/selfdrive/assets/navigation/direction_invalid_right.png differ diff --git a/selfdrive/assets/navigation/direction_invalid_slight_left.png b/selfdrive/assets/navigation/direction_invalid_slight_left.png index 08e964dbd6..29f4440460 100644 Binary files a/selfdrive/assets/navigation/direction_invalid_slight_left.png and b/selfdrive/assets/navigation/direction_invalid_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_invalid_slight_right.png b/selfdrive/assets/navigation/direction_invalid_slight_right.png index 3e21cae11e..755935b84c 100644 Binary files a/selfdrive/assets/navigation/direction_invalid_slight_right.png and b/selfdrive/assets/navigation/direction_invalid_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_invalid_straight.png b/selfdrive/assets/navigation/direction_invalid_straight.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_invalid_straight.png and b/selfdrive/assets/navigation/direction_invalid_straight.png differ diff --git a/selfdrive/assets/navigation/direction_invalid_uturn.png b/selfdrive/assets/navigation/direction_invalid_uturn.png index 0bd1b91777..ff9d97893f 100644 Binary files a/selfdrive/assets/navigation/direction_invalid_uturn.png and b/selfdrive/assets/navigation/direction_invalid_uturn.png differ diff --git a/selfdrive/assets/navigation/direction_merge_left.png b/selfdrive/assets/navigation/direction_merge_left.png index a713f52c56..7812f9eb94 100644 Binary files a/selfdrive/assets/navigation/direction_merge_left.png and b/selfdrive/assets/navigation/direction_merge_left.png differ diff --git a/selfdrive/assets/navigation/direction_merge_right.png b/selfdrive/assets/navigation/direction_merge_right.png index 3390b31a05..3c44c8fc75 100644 Binary files a/selfdrive/assets/navigation/direction_merge_right.png and b/selfdrive/assets/navigation/direction_merge_right.png differ diff --git a/selfdrive/assets/navigation/direction_merge_slight_left.png b/selfdrive/assets/navigation/direction_merge_slight_left.png index 308f97b5a5..756fb01853 100644 Binary files a/selfdrive/assets/navigation/direction_merge_slight_left.png and b/selfdrive/assets/navigation/direction_merge_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_merge_slight_right.png b/selfdrive/assets/navigation/direction_merge_slight_right.png index 8f5289011d..b8d42b741f 100644 Binary files a/selfdrive/assets/navigation/direction_merge_slight_right.png and b/selfdrive/assets/navigation/direction_merge_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_merge_straight.png b/selfdrive/assets/navigation/direction_merge_straight.png index 49c464389d..60035c1f01 100644 Binary files a/selfdrive/assets/navigation/direction_merge_straight.png and b/selfdrive/assets/navigation/direction_merge_straight.png differ diff --git a/selfdrive/assets/navigation/direction_new_name_left.png b/selfdrive/assets/navigation/direction_new_name_left.png index 9a618026f0..438532ee29 100644 Binary files a/selfdrive/assets/navigation/direction_new_name_left.png and b/selfdrive/assets/navigation/direction_new_name_left.png differ diff --git a/selfdrive/assets/navigation/direction_new_name_right.png b/selfdrive/assets/navigation/direction_new_name_right.png index 0fbaa3f253..4ee7ebc3b4 100644 Binary files a/selfdrive/assets/navigation/direction_new_name_right.png and b/selfdrive/assets/navigation/direction_new_name_right.png differ diff --git a/selfdrive/assets/navigation/direction_new_name_sharp_left.png b/selfdrive/assets/navigation/direction_new_name_sharp_left.png index 77106b493f..ae1f3741ef 100644 Binary files a/selfdrive/assets/navigation/direction_new_name_sharp_left.png and b/selfdrive/assets/navigation/direction_new_name_sharp_left.png differ diff --git a/selfdrive/assets/navigation/direction_new_name_sharp_right.png b/selfdrive/assets/navigation/direction_new_name_sharp_right.png index eb3a02f8b3..0d8cd3ed53 100644 Binary files a/selfdrive/assets/navigation/direction_new_name_sharp_right.png and b/selfdrive/assets/navigation/direction_new_name_sharp_right.png differ diff --git a/selfdrive/assets/navigation/direction_new_name_slight_left.png b/selfdrive/assets/navigation/direction_new_name_slight_left.png index 08e964dbd6..29f4440460 100644 Binary files a/selfdrive/assets/navigation/direction_new_name_slight_left.png and b/selfdrive/assets/navigation/direction_new_name_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_new_name_slight_right.png b/selfdrive/assets/navigation/direction_new_name_slight_right.png index 3e21cae11e..755935b84c 100644 Binary files a/selfdrive/assets/navigation/direction_new_name_slight_right.png and b/selfdrive/assets/navigation/direction_new_name_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_new_name_straight.png b/selfdrive/assets/navigation/direction_new_name_straight.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_new_name_straight.png and b/selfdrive/assets/navigation/direction_new_name_straight.png differ diff --git a/selfdrive/assets/navigation/direction_notification_left.png b/selfdrive/assets/navigation/direction_notification_left.png index 9a618026f0..438532ee29 100644 Binary files a/selfdrive/assets/navigation/direction_notification_left.png and b/selfdrive/assets/navigation/direction_notification_left.png differ diff --git a/selfdrive/assets/navigation/direction_notification_right.png b/selfdrive/assets/navigation/direction_notification_right.png index 0fbaa3f253..4ee7ebc3b4 100644 Binary files a/selfdrive/assets/navigation/direction_notification_right.png and b/selfdrive/assets/navigation/direction_notification_right.png differ diff --git a/selfdrive/assets/navigation/direction_notification_sharp_left.png b/selfdrive/assets/navigation/direction_notification_sharp_left.png index dd8a4301db..d2f1d491a0 100644 Binary files a/selfdrive/assets/navigation/direction_notification_sharp_left.png and b/selfdrive/assets/navigation/direction_notification_sharp_left.png differ diff --git a/selfdrive/assets/navigation/direction_notification_sharp_right.png b/selfdrive/assets/navigation/direction_notification_sharp_right.png index a7e3c4cee5..f338742e58 100644 Binary files a/selfdrive/assets/navigation/direction_notification_sharp_right.png and b/selfdrive/assets/navigation/direction_notification_sharp_right.png differ diff --git a/selfdrive/assets/navigation/direction_notification_slight_left.png b/selfdrive/assets/navigation/direction_notification_slight_left.png index 08e964dbd6..29f4440460 100644 Binary files a/selfdrive/assets/navigation/direction_notification_slight_left.png and b/selfdrive/assets/navigation/direction_notification_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_notification_slight_right.png b/selfdrive/assets/navigation/direction_notification_slight_right.png index 3e21cae11e..755935b84c 100644 Binary files a/selfdrive/assets/navigation/direction_notification_slight_right.png and b/selfdrive/assets/navigation/direction_notification_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_notification_straight.png b/selfdrive/assets/navigation/direction_notification_straight.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_notification_straight.png and b/selfdrive/assets/navigation/direction_notification_straight.png differ diff --git a/selfdrive/assets/navigation/direction_off_ramp_left.png b/selfdrive/assets/navigation/direction_off_ramp_left.png index d3fd182893..d01bb4fce3 100644 Binary files a/selfdrive/assets/navigation/direction_off_ramp_left.png and b/selfdrive/assets/navigation/direction_off_ramp_left.png differ diff --git a/selfdrive/assets/navigation/direction_off_ramp_right.png b/selfdrive/assets/navigation/direction_off_ramp_right.png index 722e3f808f..013ec5a4c9 100644 Binary files a/selfdrive/assets/navigation/direction_off_ramp_right.png and b/selfdrive/assets/navigation/direction_off_ramp_right.png differ diff --git a/selfdrive/assets/navigation/direction_off_ramp_slight_left.png b/selfdrive/assets/navigation/direction_off_ramp_slight_left.png index ddac4aad66..39497c8d41 100644 Binary files a/selfdrive/assets/navigation/direction_off_ramp_slight_left.png and b/selfdrive/assets/navigation/direction_off_ramp_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_off_ramp_slight_right.png b/selfdrive/assets/navigation/direction_off_ramp_slight_right.png index ed57608864..a68d28d674 100644 Binary files a/selfdrive/assets/navigation/direction_off_ramp_slight_right.png and b/selfdrive/assets/navigation/direction_off_ramp_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_on_ramp_left.png b/selfdrive/assets/navigation/direction_on_ramp_left.png index 9a618026f0..438532ee29 100644 Binary files a/selfdrive/assets/navigation/direction_on_ramp_left.png and b/selfdrive/assets/navigation/direction_on_ramp_left.png differ diff --git a/selfdrive/assets/navigation/direction_on_ramp_right.png b/selfdrive/assets/navigation/direction_on_ramp_right.png index 0fbaa3f253..4ee7ebc3b4 100644 Binary files a/selfdrive/assets/navigation/direction_on_ramp_right.png and b/selfdrive/assets/navigation/direction_on_ramp_right.png differ diff --git a/selfdrive/assets/navigation/direction_on_ramp_sharp_left.png b/selfdrive/assets/navigation/direction_on_ramp_sharp_left.png index 77106b493f..ae1f3741ef 100644 Binary files a/selfdrive/assets/navigation/direction_on_ramp_sharp_left.png and b/selfdrive/assets/navigation/direction_on_ramp_sharp_left.png differ diff --git a/selfdrive/assets/navigation/direction_on_ramp_sharp_right.png b/selfdrive/assets/navigation/direction_on_ramp_sharp_right.png index a7e3c4cee5..f338742e58 100644 Binary files a/selfdrive/assets/navigation/direction_on_ramp_sharp_right.png and b/selfdrive/assets/navigation/direction_on_ramp_sharp_right.png differ diff --git a/selfdrive/assets/navigation/direction_on_ramp_slight_left.png b/selfdrive/assets/navigation/direction_on_ramp_slight_left.png index a5ea8a881e..e640fe3404 100644 Binary files a/selfdrive/assets/navigation/direction_on_ramp_slight_left.png and b/selfdrive/assets/navigation/direction_on_ramp_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_on_ramp_slight_right.png b/selfdrive/assets/navigation/direction_on_ramp_slight_right.png index f8ea3800e8..d309f2d14e 100644 Binary files a/selfdrive/assets/navigation/direction_on_ramp_slight_right.png and b/selfdrive/assets/navigation/direction_on_ramp_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_on_ramp_straight.png b/selfdrive/assets/navigation/direction_on_ramp_straight.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_on_ramp_straight.png and b/selfdrive/assets/navigation/direction_on_ramp_straight.png differ diff --git a/selfdrive/assets/navigation/direction_rotary.png b/selfdrive/assets/navigation/direction_rotary.png index 2a5d264bd2..20b4052015 100644 Binary files a/selfdrive/assets/navigation/direction_rotary.png and b/selfdrive/assets/navigation/direction_rotary.png differ diff --git a/selfdrive/assets/navigation/direction_rotary_left.png b/selfdrive/assets/navigation/direction_rotary_left.png index 0c4e4ab5e6..f610501286 100644 Binary files a/selfdrive/assets/navigation/direction_rotary_left.png and b/selfdrive/assets/navigation/direction_rotary_left.png differ diff --git a/selfdrive/assets/navigation/direction_rotary_right.png b/selfdrive/assets/navigation/direction_rotary_right.png index 32a6b2504b..9b8ea37ddf 100644 Binary files a/selfdrive/assets/navigation/direction_rotary_right.png and b/selfdrive/assets/navigation/direction_rotary_right.png differ diff --git a/selfdrive/assets/navigation/direction_rotary_sharp_left.png b/selfdrive/assets/navigation/direction_rotary_sharp_left.png index c84a6d96c0..cbc0882791 100644 Binary files a/selfdrive/assets/navigation/direction_rotary_sharp_left.png and b/selfdrive/assets/navigation/direction_rotary_sharp_left.png differ diff --git a/selfdrive/assets/navigation/direction_rotary_sharp_right.png b/selfdrive/assets/navigation/direction_rotary_sharp_right.png index d15cbee002..c7d4ba3175 100644 Binary files a/selfdrive/assets/navigation/direction_rotary_sharp_right.png and b/selfdrive/assets/navigation/direction_rotary_sharp_right.png differ diff --git a/selfdrive/assets/navigation/direction_rotary_slight_left.png b/selfdrive/assets/navigation/direction_rotary_slight_left.png index 3838e720a3..9b5912030b 100644 Binary files a/selfdrive/assets/navigation/direction_rotary_slight_left.png and b/selfdrive/assets/navigation/direction_rotary_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_rotary_slight_right.png b/selfdrive/assets/navigation/direction_rotary_slight_right.png index 8cd45fe612..bc5e6b0d2e 100644 Binary files a/selfdrive/assets/navigation/direction_rotary_slight_right.png and b/selfdrive/assets/navigation/direction_rotary_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_rotary_straight.png b/selfdrive/assets/navigation/direction_rotary_straight.png index b6b0a7311b..ac4eec685e 100644 Binary files a/selfdrive/assets/navigation/direction_rotary_straight.png and b/selfdrive/assets/navigation/direction_rotary_straight.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout.png b/selfdrive/assets/navigation/direction_roundabout.png index 2a5d264bd2..20b4052015 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout.png and b/selfdrive/assets/navigation/direction_roundabout.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout_left.png b/selfdrive/assets/navigation/direction_roundabout_left.png index 0c4e4ab5e6..f610501286 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout_left.png and b/selfdrive/assets/navigation/direction_roundabout_left.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout_right.png b/selfdrive/assets/navigation/direction_roundabout_right.png index 32a6b2504b..9b8ea37ddf 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout_right.png and b/selfdrive/assets/navigation/direction_roundabout_right.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout_sharp_left.png b/selfdrive/assets/navigation/direction_roundabout_sharp_left.png index 1e8cce8c8e..204586589d 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout_sharp_left.png and b/selfdrive/assets/navigation/direction_roundabout_sharp_left.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout_sharp_right.png b/selfdrive/assets/navigation/direction_roundabout_sharp_right.png index d15cbee002..c7d4ba3175 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout_sharp_right.png and b/selfdrive/assets/navigation/direction_roundabout_sharp_right.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout_slight_left.png b/selfdrive/assets/navigation/direction_roundabout_slight_left.png index da1b112705..d8b806137c 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout_slight_left.png and b/selfdrive/assets/navigation/direction_roundabout_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout_slight_right.png b/selfdrive/assets/navigation/direction_roundabout_slight_right.png index 8cd45fe612..bc5e6b0d2e 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout_slight_right.png and b/selfdrive/assets/navigation/direction_roundabout_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_roundabout_straight.png b/selfdrive/assets/navigation/direction_roundabout_straight.png index b6b0a7311b..ac4eec685e 100644 Binary files a/selfdrive/assets/navigation/direction_roundabout_straight.png and b/selfdrive/assets/navigation/direction_roundabout_straight.png differ diff --git a/selfdrive/assets/navigation/direction_turn_left.png b/selfdrive/assets/navigation/direction_turn_left.png index 9a618026f0..438532ee29 100644 Binary files a/selfdrive/assets/navigation/direction_turn_left.png and b/selfdrive/assets/navigation/direction_turn_left.png differ diff --git a/selfdrive/assets/navigation/direction_turn_left_inactive.png b/selfdrive/assets/navigation/direction_turn_left_inactive.png index 2946984acd..7f461a1967 100644 Binary files a/selfdrive/assets/navigation/direction_turn_left_inactive.png and b/selfdrive/assets/navigation/direction_turn_left_inactive.png differ diff --git a/selfdrive/assets/navigation/direction_turn_right.png b/selfdrive/assets/navigation/direction_turn_right.png index 0fbaa3f253..4ee7ebc3b4 100644 Binary files a/selfdrive/assets/navigation/direction_turn_right.png and b/selfdrive/assets/navigation/direction_turn_right.png differ diff --git a/selfdrive/assets/navigation/direction_turn_right_inactive.png b/selfdrive/assets/navigation/direction_turn_right_inactive.png index 7d327766af..bc0a98dccf 100644 Binary files a/selfdrive/assets/navigation/direction_turn_right_inactive.png and b/selfdrive/assets/navigation/direction_turn_right_inactive.png differ diff --git a/selfdrive/assets/navigation/direction_turn_sharp_left.png b/selfdrive/assets/navigation/direction_turn_sharp_left.png index dd8a4301db..d2f1d491a0 100644 Binary files a/selfdrive/assets/navigation/direction_turn_sharp_left.png and b/selfdrive/assets/navigation/direction_turn_sharp_left.png differ diff --git a/selfdrive/assets/navigation/direction_turn_sharp_right.png b/selfdrive/assets/navigation/direction_turn_sharp_right.png index a7e3c4cee5..f338742e58 100644 Binary files a/selfdrive/assets/navigation/direction_turn_sharp_right.png and b/selfdrive/assets/navigation/direction_turn_sharp_right.png differ diff --git a/selfdrive/assets/navigation/direction_turn_slight_left.png b/selfdrive/assets/navigation/direction_turn_slight_left.png index 08e964dbd6..29f4440460 100644 Binary files a/selfdrive/assets/navigation/direction_turn_slight_left.png and b/selfdrive/assets/navigation/direction_turn_slight_left.png differ diff --git a/selfdrive/assets/navigation/direction_turn_slight_left_inactive.png b/selfdrive/assets/navigation/direction_turn_slight_left_inactive.png index 37f1f83627..7c970ebb81 100644 Binary files a/selfdrive/assets/navigation/direction_turn_slight_left_inactive.png and b/selfdrive/assets/navigation/direction_turn_slight_left_inactive.png differ diff --git a/selfdrive/assets/navigation/direction_turn_slight_right.png b/selfdrive/assets/navigation/direction_turn_slight_right.png index 3e21cae11e..755935b84c 100644 Binary files a/selfdrive/assets/navigation/direction_turn_slight_right.png and b/selfdrive/assets/navigation/direction_turn_slight_right.png differ diff --git a/selfdrive/assets/navigation/direction_turn_slight_right_inactive.png b/selfdrive/assets/navigation/direction_turn_slight_right_inactive.png index 8be2245811..15611decaa 100644 Binary files a/selfdrive/assets/navigation/direction_turn_slight_right_inactive.png and b/selfdrive/assets/navigation/direction_turn_slight_right_inactive.png differ diff --git a/selfdrive/assets/navigation/direction_turn_straight.png b/selfdrive/assets/navigation/direction_turn_straight.png index a01045ae6a..ce2c42c43d 100644 Binary files a/selfdrive/assets/navigation/direction_turn_straight.png and b/selfdrive/assets/navigation/direction_turn_straight.png differ diff --git a/selfdrive/assets/navigation/direction_turn_straight_inactive.png b/selfdrive/assets/navigation/direction_turn_straight_inactive.png index 4c567966ee..d864e58bd9 100644 Binary files a/selfdrive/assets/navigation/direction_turn_straight_inactive.png and b/selfdrive/assets/navigation/direction_turn_straight_inactive.png differ diff --git a/selfdrive/assets/navigation/direction_turn_uturn.png b/selfdrive/assets/navigation/direction_turn_uturn.png index 0bd1b91777..ff9d97893f 100644 Binary files a/selfdrive/assets/navigation/direction_turn_uturn.png and b/selfdrive/assets/navigation/direction_turn_uturn.png differ diff --git a/selfdrive/assets/navigation/direction_updown.png b/selfdrive/assets/navigation/direction_updown.png index 16d0979f3e..3c9e3fe22e 100644 Binary files a/selfdrive/assets/navigation/direction_updown.png and b/selfdrive/assets/navigation/direction_updown.png differ diff --git a/selfdrive/assets/navigation/home.png b/selfdrive/assets/navigation/home.png index 8a4f65c7d7..321cef4163 100644 Binary files a/selfdrive/assets/navigation/home.png and b/selfdrive/assets/navigation/home.png differ diff --git a/selfdrive/assets/navigation/home.svg b/selfdrive/assets/navigation/home.svg index f5d89514c3..9d9c60da39 100644 --- a/selfdrive/assets/navigation/home.svg +++ b/selfdrive/assets/navigation/home.svg @@ -1,65 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:62f1548c61503d8fdb03592413c38204834d52b30b6fb18d1a9982229616a97e +size 2713 diff --git a/selfdrive/assets/navigation/home_inactive.png b/selfdrive/assets/navigation/home_inactive.png index a58fd3864f..9ffaf2b87b 100644 Binary files a/selfdrive/assets/navigation/home_inactive.png and b/selfdrive/assets/navigation/home_inactive.png differ diff --git a/selfdrive/assets/navigation/icon_directions.svg b/selfdrive/assets/navigation/icon_directions.svg index 66009ac43b..c36e27316e 100644 --- a/selfdrive/assets/navigation/icon_directions.svg +++ b/selfdrive/assets/navigation/icon_directions.svg @@ -1 +1,3 @@ - +version https://git-lfs.github.com/spec/v1 +oid sha256:935cd01600d56350cda1941cf382c7c86cd959fa7a0a574bdba8b3011a350578 +size 466 diff --git a/selfdrive/assets/navigation/icon_directions_outlined.svg b/selfdrive/assets/navigation/icon_directions_outlined.svg index 5c0c2fa3be..356a1e7456 100644 --- a/selfdrive/assets/navigation/icon_directions_outlined.svg +++ b/selfdrive/assets/navigation/icon_directions_outlined.svg @@ -1 +1,3 @@ - +version https://git-lfs.github.com/spec/v1 +oid sha256:0e5f0b26a56397872f8ac6085a18b666fba4cdf01299f73d704cb29b22c64606 +size 780 diff --git a/selfdrive/assets/navigation/icon_favorite.svg b/selfdrive/assets/navigation/icon_favorite.svg index ba64df4ab9..0eb0e43688 100644 --- a/selfdrive/assets/navigation/icon_favorite.svg +++ b/selfdrive/assets/navigation/icon_favorite.svg @@ -1 +1,3 @@ - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:ff184bf0239c54060ffbaf465573f17cbc92bd8d3d38ce10e1bd02cdd2b21575 +size 315 diff --git a/selfdrive/assets/navigation/icon_home.svg b/selfdrive/assets/navigation/icon_home.svg index cb87011090..ca90cc7bf6 100644 --- a/selfdrive/assets/navigation/icon_home.svg +++ b/selfdrive/assets/navigation/icon_home.svg @@ -1 +1,3 @@ - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:1673f8d46251a05787b60346193852991739345506dc7e9b106dfb370d3611ed +size 489 diff --git a/selfdrive/assets/navigation/icon_recent.svg b/selfdrive/assets/navigation/icon_recent.svg index 668aa38209..76b5a620b1 100644 --- a/selfdrive/assets/navigation/icon_recent.svg +++ b/selfdrive/assets/navigation/icon_recent.svg @@ -1 +1,3 @@ - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:5fbce167d2005d08e8bc2113e0a9d5d3e2ed113db8e2a020df1ee14633cd3eed +size 1279 diff --git a/selfdrive/assets/navigation/icon_settings.svg b/selfdrive/assets/navigation/icon_settings.svg index 134cc0f31f..3fd31459c3 100644 --- a/selfdrive/assets/navigation/icon_settings.svg +++ b/selfdrive/assets/navigation/icon_settings.svg @@ -1 +1,3 @@ - +version https://git-lfs.github.com/spec/v1 +oid sha256:1fa72d94b5e05884129dd502babd5de78666c349bb5d12e19872fdbc9fe2100e +size 910 diff --git a/selfdrive/assets/navigation/icon_work.svg b/selfdrive/assets/navigation/icon_work.svg index c1ea6c5e3b..dc18914a39 100644 --- a/selfdrive/assets/navigation/icon_work.svg +++ b/selfdrive/assets/navigation/icon_work.svg @@ -1 +1,3 @@ - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:7ea949d3b66896ac3404d20aea9445a5cd00fefd18623f1c7160293a1de5f807 +size 364 diff --git a/selfdrive/assets/navigation/work.png b/selfdrive/assets/navigation/work.png index 611f9b038d..589087a8aa 100644 Binary files a/selfdrive/assets/navigation/work.png and b/selfdrive/assets/navigation/work.png differ diff --git a/selfdrive/assets/navigation/work.svg b/selfdrive/assets/navigation/work.svg index 2da7bb7d39..0f6a9ba65b 100644 --- a/selfdrive/assets/navigation/work.svg +++ b/selfdrive/assets/navigation/work.svg @@ -1,66 +1,3 @@ - - - - - - image/svg+xml - - - - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:d2495943fec4ab00b1df5e4e6227bbec45ec57b19b25be561d616292316212f8 +size 2188 diff --git a/selfdrive/assets/navigation/work_inactive.png b/selfdrive/assets/navigation/work_inactive.png index 679e6a54b2..c1ce69b004 100644 Binary files a/selfdrive/assets/navigation/work_inactive.png and b/selfdrive/assets/navigation/work_inactive.png differ diff --git a/selfdrive/assets/offroad/icon_calibration.png b/selfdrive/assets/offroad/icon_calibration.png index c4ee0d63d4..d2a098ba5a 100644 Binary files a/selfdrive/assets/offroad/icon_calibration.png and b/selfdrive/assets/offroad/icon_calibration.png differ diff --git a/selfdrive/assets/offroad/icon_checkmark.svg b/selfdrive/assets/offroad/icon_checkmark.svg index b024eccd9e..7a1db13497 100644 --- a/selfdrive/assets/offroad/icon_checkmark.svg +++ b/selfdrive/assets/offroad/icon_checkmark.svg @@ -1,3 +1,3 @@ - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:da1540859c4c42878a32a0a81a38ca38b04be4cb0fe46709df3e024b7f3b4036 +size 243 diff --git a/selfdrive/assets/offroad/icon_chevron_right.png b/selfdrive/assets/offroad/icon_chevron_right.png index a3aaa76486..46baa13240 100644 Binary files a/selfdrive/assets/offroad/icon_chevron_right.png and b/selfdrive/assets/offroad/icon_chevron_right.png differ diff --git a/selfdrive/assets/offroad/icon_close.svg b/selfdrive/assets/offroad/icon_close.svg index 4c063371af..54a44146d7 100644 --- a/selfdrive/assets/offroad/icon_close.svg +++ b/selfdrive/assets/offroad/icon_close.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:4eff44a05132ed9f99ad821993be4bab9b1a1c880e07441f3b887214bee62afe +size 825 diff --git a/selfdrive/assets/offroad/icon_disengage_on_accelerator.svg b/selfdrive/assets/offroad/icon_disengage_on_accelerator.svg index 0175e672c6..d5a8c87e21 100644 --- a/selfdrive/assets/offroad/icon_disengage_on_accelerator.svg +++ b/selfdrive/assets/offroad/icon_disengage_on_accelerator.svg @@ -1,7 +1,3 @@ - - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:5252412f2225c89ea7e78ad0fbd6544170aea157693ce0f9778f26a64f582ec2 +size 6821 diff --git a/selfdrive/assets/offroad/icon_display.png b/selfdrive/assets/offroad/icon_display.png new file mode 100644 index 0000000000..809f1daa09 Binary files /dev/null and b/selfdrive/assets/offroad/icon_display.png differ diff --git a/selfdrive/assets/offroad/icon_lock_closed.svg b/selfdrive/assets/offroad/icon_lock_closed.svg index 7dc9283c81..501d978a8a 100644 --- a/selfdrive/assets/offroad/icon_lock_closed.svg +++ b/selfdrive/assets/offroad/icon_lock_closed.svg @@ -1,4 +1,3 @@ - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:ef09792cc1893f81c64abd6b72091d3762c07b849863ce90508afdd29b392c02 +size 732 diff --git a/selfdrive/assets/offroad/icon_map.png b/selfdrive/assets/offroad/icon_map.png index 21dd0bacc6..82c0236a48 100644 Binary files a/selfdrive/assets/offroad/icon_map.png and b/selfdrive/assets/offroad/icon_map.png differ diff --git a/selfdrive/assets/offroad/icon_map_speed.png b/selfdrive/assets/offroad/icon_map_speed.png index 1eeab84600..4ed1de314b 100644 Binary files a/selfdrive/assets/offroad/icon_map_speed.png and b/selfdrive/assets/offroad/icon_map_speed.png differ diff --git a/selfdrive/assets/offroad/icon_menu.png b/selfdrive/assets/offroad/icon_menu.png index 837cf5831c..d43db96cd8 100644 Binary files a/selfdrive/assets/offroad/icon_menu.png and b/selfdrive/assets/offroad/icon_menu.png differ diff --git a/selfdrive/assets/offroad/icon_metric.png b/selfdrive/assets/offroad/icon_metric.png index eaa2438fa3..0d38b0478f 100644 Binary files a/selfdrive/assets/offroad/icon_metric.png and b/selfdrive/assets/offroad/icon_metric.png differ diff --git a/selfdrive/assets/offroad/icon_minus.png b/selfdrive/assets/offroad/icon_minus.png index e5327c0d3b..c2abe3ae90 100644 Binary files a/selfdrive/assets/offroad/icon_minus.png and b/selfdrive/assets/offroad/icon_minus.png differ diff --git a/selfdrive/assets/offroad/icon_monitoring.png b/selfdrive/assets/offroad/icon_monitoring.png index 05f78811e2..39d52de13d 100644 Binary files a/selfdrive/assets/offroad/icon_monitoring.png and b/selfdrive/assets/offroad/icon_monitoring.png differ diff --git a/selfdrive/assets/offroad/icon_network.png b/selfdrive/assets/offroad/icon_network.png index 3236924f4d..71ccc89aac 100644 Binary files a/selfdrive/assets/offroad/icon_network.png and b/selfdrive/assets/offroad/icon_network.png differ diff --git a/selfdrive/assets/offroad/icon_openpilot.png b/selfdrive/assets/offroad/icon_openpilot.png index 0a90a87910..ae6faa45ea 100644 Binary files a/selfdrive/assets/offroad/icon_openpilot.png and b/selfdrive/assets/offroad/icon_openpilot.png differ diff --git a/selfdrive/assets/offroad/icon_plus.png b/selfdrive/assets/offroad/icon_plus.png index 92b448b0bd..6418a37a65 100644 Binary files a/selfdrive/assets/offroad/icon_plus.png and b/selfdrive/assets/offroad/icon_plus.png differ diff --git a/selfdrive/assets/offroad/icon_road.png b/selfdrive/assets/offroad/icon_road.png index 5868ed1ccc..7e460dc0d0 100644 Binary files a/selfdrive/assets/offroad/icon_road.png and b/selfdrive/assets/offroad/icon_road.png differ diff --git a/selfdrive/assets/offroad/icon_settings.png b/selfdrive/assets/offroad/icon_settings.png index d0c90a620d..3d8159acc6 100644 Binary files a/selfdrive/assets/offroad/icon_settings.png and b/selfdrive/assets/offroad/icon_settings.png differ diff --git a/selfdrive/assets/offroad/icon_shell.png b/selfdrive/assets/offroad/icon_shell.png index f1d655416a..ea4faf89b9 100644 Binary files a/selfdrive/assets/offroad/icon_shell.png and b/selfdrive/assets/offroad/icon_shell.png differ diff --git a/selfdrive/assets/offroad/icon_software.png b/selfdrive/assets/offroad/icon_software.png new file mode 100644 index 0000000000..c098c7999c Binary files /dev/null and b/selfdrive/assets/offroad/icon_software.png differ diff --git a/selfdrive/assets/offroad/icon_speed_limit.png b/selfdrive/assets/offroad/icon_speed_limit.png index 0aa7038f90..d4c662cfc0 100644 Binary files a/selfdrive/assets/offroad/icon_speed_limit.png and b/selfdrive/assets/offroad/icon_speed_limit.png differ diff --git a/selfdrive/assets/offroad/icon_toggle.png b/selfdrive/assets/offroad/icon_toggle.png new file mode 100644 index 0000000000..5c774db6f4 Binary files /dev/null and b/selfdrive/assets/offroad/icon_toggle.png differ diff --git a/selfdrive/assets/offroad/icon_trips.png b/selfdrive/assets/offroad/icon_trips.png new file mode 100644 index 0000000000..a042cf94da Binary files /dev/null and b/selfdrive/assets/offroad/icon_trips.png differ diff --git a/selfdrive/assets/offroad/icon_vehicle.png b/selfdrive/assets/offroad/icon_vehicle.png new file mode 100644 index 0000000000..68ef2d0c0b Binary files /dev/null and b/selfdrive/assets/offroad/icon_vehicle.png differ diff --git a/selfdrive/assets/offroad/icon_visuals.png b/selfdrive/assets/offroad/icon_visuals.png new file mode 100644 index 0000000000..8d066c90ba Binary files /dev/null and b/selfdrive/assets/offroad/icon_visuals.png differ diff --git a/selfdrive/assets/offroad/icon_warning.png b/selfdrive/assets/offroad/icon_warning.png index 50fe821127..583f9c2443 100644 Binary files a/selfdrive/assets/offroad/icon_warning.png and b/selfdrive/assets/offroad/icon_warning.png differ diff --git a/selfdrive/assets/offroad/icon_wifi_strength_full.svg b/selfdrive/assets/offroad/icon_wifi_strength_full.svg index 758198e97f..c9d22d8961 100644 --- a/selfdrive/assets/offroad/icon_wifi_strength_full.svg +++ b/selfdrive/assets/offroad/icon_wifi_strength_full.svg @@ -1,6 +1,3 @@ - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:485dd0d4eb8968726003ae460bab4ff498127def52b8b1ed6d968f4629ab233a +size 1655 diff --git a/selfdrive/assets/offroad/icon_wifi_strength_high.svg b/selfdrive/assets/offroad/icon_wifi_strength_high.svg index a8db07f91e..ff001bd14a 100644 --- a/selfdrive/assets/offroad/icon_wifi_strength_high.svg +++ b/selfdrive/assets/offroad/icon_wifi_strength_high.svg @@ -1,6 +1,3 @@ - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:c92fd8bebbe630f991fe3f61f61407f8002d29881698634239be3a6fae2fb4bc +size 1657 diff --git a/selfdrive/assets/offroad/icon_wifi_strength_low.svg b/selfdrive/assets/offroad/icon_wifi_strength_low.svg index 8963c3dbc1..bcc6e83c63 100644 --- a/selfdrive/assets/offroad/icon_wifi_strength_low.svg +++ b/selfdrive/assets/offroad/icon_wifi_strength_low.svg @@ -1,6 +1,3 @@ - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:e629e3a84dc288278e455be4a8deff95730e24d9a0b894f8c417ac1c409670ab +size 1661 diff --git a/selfdrive/assets/offroad/icon_wifi_strength_medium.svg b/selfdrive/assets/offroad/icon_wifi_strength_medium.svg index 8f8d503260..e14ebd238f 100644 --- a/selfdrive/assets/offroad/icon_wifi_strength_medium.svg +++ b/selfdrive/assets/offroad/icon_wifi_strength_medium.svg @@ -1,6 +1,3 @@ - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:52113c14656483854a814c50c93770f5e6ab7d63b2b5048ddd6fd47fdfd4a7de +size 1659 diff --git a/selfdrive/assets/offroad/icon_wifi_uploading.svg b/selfdrive/assets/offroad/icon_wifi_uploading.svg index 95cb0e283e..b9392dfe7c 100644 --- a/selfdrive/assets/offroad/icon_wifi_uploading.svg +++ b/selfdrive/assets/offroad/icon_wifi_uploading.svg @@ -1,6 +1,3 @@ - - - - - - +version https://git-lfs.github.com/spec/v1 +oid sha256:bedd579f56c65fffe2ad571f92843b6d103826fe173f8f5b58fc2200d2ad8850 +size 1663 diff --git a/selfdrive/assets/sounds/disengage.wav b/selfdrive/assets/sounds/disengage.wav index ba583c41f3..f3b5f21a27 100644 Binary files a/selfdrive/assets/sounds/disengage.wav and b/selfdrive/assets/sounds/disengage.wav differ diff --git a/selfdrive/assets/sounds/engage.wav b/selfdrive/assets/sounds/engage.wav index 41e9b2d588..fc24a23c2f 100644 Binary files a/selfdrive/assets/sounds/engage.wav and b/selfdrive/assets/sounds/engage.wav differ diff --git a/selfdrive/assets/sounds/prompt.wav b/selfdrive/assets/sounds/prompt.wav index 1ae77051eb..e482c85a62 100644 Binary files a/selfdrive/assets/sounds/prompt.wav and b/selfdrive/assets/sounds/prompt.wav differ diff --git a/selfdrive/assets/sounds/prompt_distracted.wav b/selfdrive/assets/sounds/prompt_distracted.wav index c3d4475caa..750d580f04 100644 Binary files a/selfdrive/assets/sounds/prompt_distracted.wav and b/selfdrive/assets/sounds/prompt_distracted.wav differ diff --git a/selfdrive/assets/sounds/prompt_single_high.wav b/selfdrive/assets/sounds/prompt_single_high.wav new file mode 100644 index 0000000000..83fe791b54 Binary files /dev/null and b/selfdrive/assets/sounds/prompt_single_high.wav differ diff --git a/selfdrive/assets/sounds/prompt_single_low.wav b/selfdrive/assets/sounds/prompt_single_low.wav new file mode 100644 index 0000000000..1fb94ec455 Binary files /dev/null and b/selfdrive/assets/sounds/prompt_single_low.wav differ diff --git a/selfdrive/assets/sounds/refuse.wav b/selfdrive/assets/sounds/refuse.wav index 0e80f7d127..1e0c47697d 100644 Binary files a/selfdrive/assets/sounds/refuse.wav and b/selfdrive/assets/sounds/refuse.wav differ diff --git a/selfdrive/assets/sounds/warning_immediate.wav b/selfdrive/assets/sounds/warning_immediate.wav index 9f6f672e28..fcbfed79ed 100644 Binary files a/selfdrive/assets/sounds/warning_immediate.wav and b/selfdrive/assets/sounds/warning_immediate.wav differ diff --git a/selfdrive/assets/sounds/warning_soft.wav b/selfdrive/assets/sounds/warning_soft.wav index 261c7e1376..7db30303d6 100644 Binary files a/selfdrive/assets/sounds/warning_soft.wav and b/selfdrive/assets/sounds/warning_soft.wav differ diff --git a/selfdrive/assets/training/step0.png b/selfdrive/assets/training/step0.png index 3c2c5c72a0..fb869e317d 100644 Binary files a/selfdrive/assets/training/step0.png and b/selfdrive/assets/training/step0.png differ diff --git a/selfdrive/assets/training/step1.png b/selfdrive/assets/training/step1.png index 0857893118..8bd9fbaa67 100644 Binary files a/selfdrive/assets/training/step1.png and b/selfdrive/assets/training/step1.png differ diff --git a/selfdrive/assets/training/step10.png b/selfdrive/assets/training/step10.png index 2941316d17..da71f97e83 100644 Binary files a/selfdrive/assets/training/step10.png and b/selfdrive/assets/training/step10.png differ diff --git a/selfdrive/assets/training/step11.png b/selfdrive/assets/training/step11.png index 7a7c72e3df..aa3791304e 100644 Binary files a/selfdrive/assets/training/step11.png and b/selfdrive/assets/training/step11.png differ diff --git a/selfdrive/assets/training/step12.png b/selfdrive/assets/training/step12.png index 0d6f64eb84..745a8d0553 100644 Binary files a/selfdrive/assets/training/step12.png and b/selfdrive/assets/training/step12.png differ diff --git a/selfdrive/assets/training/step13.png b/selfdrive/assets/training/step13.png index 565e02fa3f..68638ffec1 100644 Binary files a/selfdrive/assets/training/step13.png and b/selfdrive/assets/training/step13.png differ diff --git a/selfdrive/assets/training/step14.png b/selfdrive/assets/training/step14.png index 225231cbaa..2f5956b1ff 100644 Binary files a/selfdrive/assets/training/step14.png and b/selfdrive/assets/training/step14.png differ diff --git a/selfdrive/assets/training/step15.png b/selfdrive/assets/training/step15.png index 929c759b26..798e01d00a 100644 Binary files a/selfdrive/assets/training/step15.png and b/selfdrive/assets/training/step15.png differ diff --git a/selfdrive/assets/training/step16.png b/selfdrive/assets/training/step16.png index 161af863aa..2728814181 100644 Binary files a/selfdrive/assets/training/step16.png and b/selfdrive/assets/training/step16.png differ diff --git a/selfdrive/assets/training/step17.png b/selfdrive/assets/training/step17.png index 1b0cdb6fbc..ab54f9c992 100644 Binary files a/selfdrive/assets/training/step17.png and b/selfdrive/assets/training/step17.png differ diff --git a/selfdrive/assets/training/step18.png b/selfdrive/assets/training/step18.png index 0e3b64bab5..8149e79364 100644 Binary files a/selfdrive/assets/training/step18.png and b/selfdrive/assets/training/step18.png differ diff --git a/selfdrive/assets/training/step2.png b/selfdrive/assets/training/step2.png index 55814b8ef9..35d65c9b01 100644 Binary files a/selfdrive/assets/training/step2.png and b/selfdrive/assets/training/step2.png differ diff --git a/selfdrive/assets/training/step3.png b/selfdrive/assets/training/step3.png index 831095b0ae..0d3a6bbecb 100644 Binary files a/selfdrive/assets/training/step3.png and b/selfdrive/assets/training/step3.png differ diff --git a/selfdrive/assets/training/step4.png b/selfdrive/assets/training/step4.png index 5433034939..1d4da570b1 100644 Binary files a/selfdrive/assets/training/step4.png and b/selfdrive/assets/training/step4.png differ diff --git a/selfdrive/assets/training/step5.png b/selfdrive/assets/training/step5.png index 7191b63a0c..1ce43e28dc 100644 Binary files a/selfdrive/assets/training/step5.png and b/selfdrive/assets/training/step5.png differ diff --git a/selfdrive/assets/training/step6.png b/selfdrive/assets/training/step6.png index 8eafd4a198..d0e06469c7 100644 Binary files a/selfdrive/assets/training/step6.png and b/selfdrive/assets/training/step6.png differ diff --git a/selfdrive/assets/training/step7.png b/selfdrive/assets/training/step7.png index 502f5f1b2e..63e6e27e07 100644 Binary files a/selfdrive/assets/training/step7.png and b/selfdrive/assets/training/step7.png differ diff --git a/selfdrive/assets/training/step8.png b/selfdrive/assets/training/step8.png index 77ff9d7368..de881446dc 100644 Binary files a/selfdrive/assets/training/step8.png and b/selfdrive/assets/training/step8.png differ diff --git a/selfdrive/assets/training/step9.png b/selfdrive/assets/training/step9.png index 84eae3a066..43ca1d03df 100644 Binary files a/selfdrive/assets/training/step9.png and b/selfdrive/assets/training/step9.png differ diff --git a/selfdrive/athena/athenad.py b/selfdrive/athena/athenad.py index 899605d989..0a5c9b7999 100755 --- a/selfdrive/athena/athenad.py +++ b/selfdrive/athena/athenad.py @@ -11,7 +11,6 @@ import queue import random import select import socket -import subprocess import sys import tempfile import threading @@ -20,7 +19,7 @@ from dataclasses import asdict, dataclass, replace from datetime import datetime from functools import partial from queue import Queue -from typing import BinaryIO, Callable, Dict, List, Optional, Set, Union, cast +from typing import Callable, Dict, List, Optional, Set, Union, cast import requests from jsonrpc import JSONRPCResponseManager, dispatcher @@ -29,23 +28,18 @@ from websocket import (ABNF, WebSocket, WebSocketException, WebSocketTimeoutExce import cereal.messaging as messaging from cereal import log -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.common.api import Api -from openpilot.common.basedir import PERSIST from openpilot.common.file_helpers import CallbackReader from openpilot.common.params import Params from openpilot.common.realtime import set_core_affinity -from openpilot.system.hardware import HARDWARE, PC, AGNOS +from openpilot.system.hardware import HARDWARE, PC from openpilot.system.loggerd.xattr_cache import getxattr, setxattr -from openpilot.selfdrive.statsd import STATS_DIR -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.system.version import get_commit, get_origin, get_short_branch, get_version -from openpilot.selfdrive.hardware.hw import Paths +from openpilot.system.hardware.hw import Paths -# TODO: use socket constant when mypy recognizes this as a valid attribute -TCP_USER_TIMEOUT = 18 - ATHENA_HOST = os.getenv('ATHENA_HOST', 'wss://athena.comma.ai') HANDLER_THREADS = int(os.getenv('HANDLER_THREADS', "4")) LOCAL_PORT_WHITELIST = {8022} @@ -85,7 +79,7 @@ class UploadItem: url: str headers: Dict[str, str] created_at: int - id: Optional[str] # noqa: A003 (to match the response from the remote server) + id: Optional[str] retry_count: int = 0 current: bool = False progress: float = 0 @@ -290,26 +284,22 @@ def _do_upload(upload_item: UploadItem, callback: Optional[Callable] = None) -> compress = True with open(path, "rb") as f: - data: BinaryIO + content = f.read() if compress: cloudlog.event("athena.upload_handler.compress", fn=path, fn_orig=upload_item.path) - compressed = bz2.compress(f.read()) - size = len(compressed) - data = io.BytesIO(compressed) - else: - size = os.fstat(f.fileno()).st_size - data = f + content = bz2.compress(content) + with io.BytesIO(content) as data: return requests.put(upload_item.url, - data=CallbackReader(data, callback, size) if callback else data, - headers={**upload_item.headers, 'Content-Length': str(size)}, + data=CallbackReader(data, callback, len(content)) if callback else data, + headers={**upload_item.headers, 'Content-Length': str(len(content))}, timeout=30) # security: user should be able to request any message from their car @dispatcher.add_method def getMessage(service: str, timeout: int = 1000) -> dict: - if service is None or service not in service_list: + if service is None or service not in SERVICE_LIST: raise Exception("invalid service") socket = messaging.sub_sock(service, timeout=timeout) @@ -369,22 +359,6 @@ def listDataDirectory(prefix='') -> List[str]: return scan_dir(Paths.log_root(), prefix) -@dispatcher.add_method -def reboot() -> Dict[str, int]: - sock = messaging.sub_sock("deviceState", timeout=1000) - ret = messaging.recv_one(sock) - if ret is None or ret.deviceState.started: - raise Exception("Reboot unavailable") - - def do_reboot() -> None: - time.sleep(2) - HARDWARE.reboot() - - threading.Thread(target=do_reboot).start() - - return {"success": 1} - - @dispatcher.add_method def uploadFileToUrl(fn: str, url: str, headers: Dict[str, str]) -> UploadFilesToUrlResponse: # this is because mypy doesn't understand that the decorator doesn't change the return type @@ -458,24 +432,22 @@ def cancelUpload(upload_id: Union[str, List[str]]) -> Dict[str, Union[int, str]] cancelled_uploads.update(cancelled_ids) return {"success": 1} - @dispatcher.add_method -def primeActivated(activated: bool) -> Dict[str, int]: +def setRouteViewed(route: str) -> Dict[str, Union[int, str]]: + # maintain a list of the last 10 routes viewed in connect + params = Params() + + r = params.get("AthenadRecentlyViewedRoutes", encoding="utf8") + routes = [] if r is None else r.split(",") + routes.append(route) + + # remove duplicates + routes = list(dict.fromkeys(routes)) + + params.put("AthenadRecentlyViewedRoutes", ",".join(routes[-10:])) return {"success": 1} -@dispatcher.add_method -def setBandwithLimit(upload_speed_kbps: int, download_speed_kbps: int) -> Dict[str, Union[int, str]]: - if not AGNOS: - return {"success": 0, "error": "only supported on AGNOS"} - - try: - HARDWARE.set_bandwidth_limit(upload_speed_kbps, download_speed_kbps) - return {"success": 1} - except subprocess.CalledProcessError as e: - return {"success": 0, "error": "failed to set limit", "stdout": e.stdout, "stderr": e.stderr} - - def startLocalProxy(global_end_event: threading.Event, remote_ws_uri: str, local_port: int) -> Dict[str, int]: try: if local_port not in LOCAL_PORT_WHITELIST: @@ -511,10 +483,10 @@ def startLocalProxy(global_end_event: threading.Event, remote_ws_uri: str, local @dispatcher.add_method def getPublicKey() -> Optional[str]: - if not os.path.isfile(PERSIST + '/comma/id_rsa.pub'): + if not os.path.isfile(Paths.persist_root() + '/comma/id_rsa.pub'): return None - with open(PERSIST + '/comma/id_rsa.pub') as f: + with open(Paths.persist_root() + '/comma/id_rsa.pub') as f: return f.read() @@ -650,6 +622,7 @@ def log_handler(end_event: threading.Event) -> None: def stat_handler(end_event: threading.Event) -> None: + STATS_DIR = Paths.stats_root() while not end_event.is_set(): last_scan = 0. curr_scan = time.monotonic() @@ -679,6 +652,8 @@ def ws_proxy_recv(ws: WebSocket, local_sock: socket.socket, ssock: socket.socket while not (end_event.is_set() or global_end_event.is_set()): try: data = ws.recv() + if isinstance(data, str): + data = data.encode("utf-8") local_sock.sendall(data) except WebSocketTimeoutException: pass @@ -770,10 +745,11 @@ def ws_manage(ws: WebSocket, end_event: threading.Event) -> None: if onroad != onroad_prev: onroad_prev = onroad - sock.setsockopt(socket.IPPROTO_TCP, TCP_USER_TIMEOUT, 16000 if onroad else 0) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 7 if onroad else 30) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 7 if onroad else 10) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 2 if onroad else 3) + if sock is not None: + sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_USER_TIMEOUT, 16000 if onroad else 0) + sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 7 if onroad else 30) + sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 7 if onroad else 10) + sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 2 if onroad else 3) if end_event.wait(5): break diff --git a/selfdrive/athena/manage_athenad.py b/selfdrive/athena/manage_athenad.py index 877d8aca03..2a4a12e559 100755 --- a/selfdrive/athena/manage_athenad.py +++ b/selfdrive/athena/manage_athenad.py @@ -5,7 +5,7 @@ from multiprocessing import Process from openpilot.common.params import Params from openpilot.selfdrive.manager.process import launcher -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.system.version import get_version, is_dirty ATHENA_MGR_PID_PARAM = "AthenadPid" diff --git a/selfdrive/athena/registration.py b/selfdrive/athena/registration.py index 0ab69371c2..7db94c28c8 100755 --- a/selfdrive/athena/registration.py +++ b/selfdrive/athena/registration.py @@ -9,10 +9,10 @@ from datetime import datetime, timedelta from openpilot.common.api import api_get from openpilot.common.params import Params from openpilot.common.spinner import Spinner -from openpilot.common.basedir import PERSIST from openpilot.selfdrive.controls.lib.alertmanager import set_offroad_alert from openpilot.system.hardware import HARDWARE, PC -from openpilot.system.swaglog import cloudlog +from openpilot.system.hardware.hw import Paths +from openpilot.common.swaglog import cloudlog UNREGISTERED_DONGLE_ID = "UnregisteredDevice" @@ -25,14 +25,13 @@ def is_registered_device() -> bool: def register(show_spinner=False) -> Optional[str]: params = Params() - params.put("SubscriberInfo", HARDWARE.get_subscriber_info()) IMEI = params.get("IMEI", encoding='utf8') HardwareSerial = params.get("HardwareSerial", encoding='utf8') dongle_id: Optional[str] = params.get("DongleId", encoding='utf8') needs_registration = None in (IMEI, HardwareSerial, dongle_id) - pubkey = Path(PERSIST+"/comma/id_rsa.pub") + pubkey = Path(Paths.persist_root()+"/comma/id_rsa.pub") if not pubkey.is_file(): dongle_id = UNREGISTERED_DONGLE_ID cloudlog.warning(f"missing public key: {pubkey}") @@ -42,7 +41,7 @@ def register(show_spinner=False) -> Optional[str]: spinner.update("registering device") # Create registration token, in the future, this key will make JWTs directly - with open(PERSIST+"/comma/id_rsa.pub") as f1, open(PERSIST+"/comma/id_rsa") as f2: + with open(Paths.persist_root()+"/comma/id_rsa.pub") as f1, open(Paths.persist_root()+"/comma/id_rsa") as f2: public_key = f1.read() private_key = f2.read() diff --git a/selfdrive/athena/tests/helpers.py b/selfdrive/athena/tests/helpers.py index 34edeb2de5..87202665aa 100644 --- a/selfdrive/athena/tests/helpers.py +++ b/selfdrive/athena/tests/helpers.py @@ -1,12 +1,7 @@ import http.server -import random -import requests +import threading import socket -import time from functools import wraps -from multiprocessing import Process - -from openpilot.common.timeout import Timeout class MockResponse: @@ -49,35 +44,6 @@ class MockApi(): return "fake-token" -class MockParams(): - default_params = { - "DongleId": b"0000000000000000", - "GithubSshKeys": b"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC307aE+nuHzTAgaJhzSf5v7ZZQW9gaperjhCmyPyl4PzY7T1mDGenTlVTN7yoVFZ9UfO9oMQqo0n1OwDIiqbIFxqnhrHU0cYfj88rI85m5BEKlNu5RdaVTj1tcbaPpQc5kZEolaI1nDDjzV0lwS7jo5VYDHseiJHlik3HH1SgtdtsuamGR2T80q1SyW+5rHoMOJG73IH2553NnWuikKiuikGHUYBd00K1ilVAK2xSiMWJp55tQfZ0ecr9QjEsJ+J/efL4HqGNXhffxvypCXvbUYAFSddOwXUPo5BTKevpxMtH+2YrkpSjocWA04VnTYFiPG6U4ItKmbLOTFZtPzoez private", # noqa: E501 - "GithubUsername": b"commaci", - "GsmMetered": True, - "AthenadUploadQueue": '[]', - } - params = default_params.copy() - - @staticmethod - def restore_defaults(): - MockParams.params = MockParams.default_params.copy() - - def get_bool(self, k): - return bool(MockParams.params.get(k)) - - def get(self, k, encoding=None): - ret = MockParams.params.get(k) - if ret is not None and encoding is not None: - ret = ret.decode(encoding) - return ret - - def put(self, k, v): - if k not in MockParams.params: - raise KeyError(f"key: {k} not in MockParams") - MockParams.params[k] = v - - class MockWebsocket(): def __init__(self, recv_queue, send_queue): self.recv_queue = recv_queue @@ -101,30 +67,23 @@ class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler): self.end_headers() -def with_http_server(func): +def with_http_server(func, handler=http.server.BaseHTTPRequestHandler, setup=None): @wraps(func) def inner(*args, **kwargs): - with Timeout(2, 'HTTP Server did not start'): - p = None - host = '127.0.0.1' - while p is None or p.exitcode is not None: - port = random.randrange(40000, 50000) - p = Process(target=http.server.test, - kwargs={'port': port, 'HandlerClass': HTTPRequestHandler, 'bind': host}) - p.start() - time.sleep(0.1) + host = '127.0.0.1' + server = http.server.HTTPServer((host, 0), handler) + port = server.server_port + t = threading.Thread(target=server.serve_forever) + t.start() - with Timeout(2, 'HTTP Server seeding failed'): - while True: - try: - requests.put(f'http://{host}:{port}/qlog.bz2', data='', timeout=10) - break - except requests.exceptions.ConnectionError: - time.sleep(0.1) + if setup is not None: + setup(host, port) try: return func(*args, f'http://{host}:{port}', **kwargs) finally: - p.terminate() + server.shutdown() + server.server_close() + t.join() return inner diff --git a/selfdrive/athena/tests/test_athenad.py b/selfdrive/athena/tests/test_athenad.py index f4c229188e..2fecab1b1b 100755 --- a/selfdrive/athena/tests/test_athenad.py +++ b/selfdrive/athena/tests/test_athenad.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +from functools import partial, wraps import json +import multiprocessing import os import requests import shutil @@ -9,31 +11,71 @@ import queue import unittest from dataclasses import asdict, replace from datetime import datetime, timedelta +from parameterized import parameterized from typing import Optional -from multiprocessing import Process -from pathlib import Path from unittest import mock from websocket import ABNF from websocket._exceptions import WebSocketConnectionClosedException +from cereal import messaging + +from openpilot.common.params import Params +from openpilot.common.timeout import Timeout from openpilot.selfdrive.athena import athenad from openpilot.selfdrive.athena.athenad import MAX_RETRY_COUNT, dispatcher -from openpilot.selfdrive.athena.tests.helpers import MockWebsocket, MockParams, MockApi, EchoSocket, with_http_server -from cereal import messaging -from openpilot.selfdrive.hardware.hw import Paths +from openpilot.selfdrive.athena.tests.helpers import MockWebsocket, MockApi, EchoSocket, with_http_server +from openpilot.system.hardware.hw import Paths +from openpilot.selfdrive.athena.tests.helpers import HTTPRequestHandler + + +def seed_athena_server(host, port): + with Timeout(2, 'HTTP Server seeding failed'): + while True: + try: + requests.put(f'http://{host}:{port}/qlog.bz2', data='', timeout=10) + break + except requests.exceptions.ConnectionError: + time.sleep(0.1) + + +with_mock_athena = partial(with_http_server, handler=HTTPRequestHandler, setup=seed_athena_server) + + +def with_upload_handler(func): + @wraps(func) + def wrapper(*args, **kwargs): + end_event = threading.Event() + thread = threading.Thread(target=athenad.upload_handler, args=(end_event,)) + thread.start() + try: + return func(*args, **kwargs) + finally: + end_event.set() + thread.join() + return wrapper class TestAthenadMethods(unittest.TestCase): @classmethod def setUpClass(cls): cls.SOCKET_PORT = 45454 - athenad.Params = MockParams athenad.Api = MockApi athenad.LOCAL_PORT_WHITELIST = {cls.SOCKET_PORT} def setUp(self): - MockParams.restore_defaults() + self.default_params = { + "DongleId": "0000000000000000", + "GithubSshKeys": b"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC307aE+nuHzTAgaJhzSf5v7ZZQW9gaperjhCmyPyl4PzY7T1mDGenTlVTN7yoVFZ9UfO9oMQqo0n1OwDIiqbIFxqnhrHU0cYfj88rI85m5BEKlNu5RdaVTj1tcbaPpQc5kZEolaI1nDDjzV0lwS7jo5VYDHseiJHlik3HH1SgtdtsuamGR2T80q1SyW+5rHoMOJG73IH2553NnWuikKiuikGHUYBd00K1ilVAK2xSiMWJp55tQfZ0ecr9QjEsJ+J/efL4HqGNXhffxvypCXvbUYAFSddOwXUPo5BTKevpxMtH+2YrkpSjocWA04VnTYFiPG6U4ItKmbLOTFZtPzoez private", # noqa: E501 + "GithubUsername": b"commaci", + "AthenadUploadQueue": '[]', + } + + self.params = Params() + for k, v in self.default_params.items(): + self.params.put(k, v) + self.params.put_bool("GsmMetered", True) + athenad.upload_queue = queue.Queue() athenad.cur_upload_items.clear() athenad.cancelled_uploads.clear() @@ -45,8 +87,6 @@ class TestAthenadMethods(unittest.TestCase): else: os.unlink(p) - dispatcher["listUploadQueue"]() # ensure queue is empty at start - # *** test helpers *** @staticmethod @@ -57,10 +97,11 @@ class TestAthenadMethods(unittest.TestCase): break @staticmethod - def _create_file(file: str, parent: Optional[str] = None) -> str: + def _create_file(file: str, parent: Optional[str] = None, data: bytes = b'') -> str: fn = os.path.join(Paths.log_root() if parent is None else parent, file) os.makedirs(os.path.dirname(fn), exist_ok=True) - Path(fn).touch() + with open(fn, 'wb') as f: + f.write(data) return fn @@ -73,24 +114,25 @@ class TestAthenadMethods(unittest.TestCase): with self.assertRaises(TimeoutError) as _: dispatcher["getMessage"]("controlsState") - def send_deviceState(): - messaging.context = messaging.Context() - pub_sock = messaging.pub_sock("deviceState") - start = time.time() + end_event = multiprocessing.Event() - while time.time() - start < 1: + pub_sock = messaging.pub_sock("deviceState") + + def send_deviceState(): + while not end_event.is_set(): msg = messaging.new_message('deviceState') pub_sock.send(msg.to_bytes()) time.sleep(0.01) - p = Process(target=send_deviceState) + p = multiprocessing.Process(target=send_deviceState) p.start() time.sleep(0.1) try: deviceState = dispatcher["getMessage"]("deviceState") assert deviceState['deviceState'] finally: - p.terminate() + end_event.set() + p.join() def test_listDataDirectory(self): route = '2021-03-29--13-32-47' @@ -137,20 +179,22 @@ class TestAthenadMethods(unittest.TestCase): if fn.endswith('.bz2'): self.assertEqual(athenad.strip_bz2_extension(fn), fn[:-4]) + @parameterized.expand([(True,), (False,)]) + @with_mock_athena + def test_do_upload(self, compress, host): + # random bytes to ensure rather large object post-compression + fn = self._create_file('qlog', data=os.urandom(10000 * 1024)) - @with_http_server - def test_do_upload(self, host): - fn = self._create_file('qlog.bz2') - - item = athenad.UploadItem(path=fn, url="http://localhost:1238", headers={}, created_at=int(time.time()*1000), id='') + upload_fn = fn + ('.bz2' if compress else '') + item = athenad.UploadItem(path=upload_fn, url="http://localhost:1238", headers={}, created_at=int(time.time()*1000), id='') with self.assertRaises(requests.exceptions.ConnectionError): athenad._do_upload(item) - item = athenad.UploadItem(path=fn, url=f"{host}/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='') + item = athenad.UploadItem(path=upload_fn, url=f"{host}/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='') resp = athenad._do_upload(item) self.assertEqual(resp.status_code, 201) - @with_http_server + @with_mock_athena def test_uploadFileToUrl(self, host): fn = self._create_file('qlog.bz2') @@ -161,7 +205,7 @@ class TestAthenadMethods(unittest.TestCase): self.assertIsNotNone(resp['items'][0].get('id')) self.assertEqual(athenad.upload_queue.qsize(), 1) - @with_http_server + @with_mock_athena def test_uploadFileToUrl_duplicate(self, host): self._create_file('qlog.bz2') @@ -173,83 +217,65 @@ class TestAthenadMethods(unittest.TestCase): resp = dispatcher["uploadFileToUrl"]("qlog.bz2", url2, {}) self.assertEqual(resp, {'enqueued': 0, 'items': []}) - @with_http_server + @with_mock_athena def test_uploadFileToUrl_does_not_exist(self, host): not_exists_resp = dispatcher["uploadFileToUrl"]("does_not_exist.bz2", "http://localhost:1238", {}) self.assertEqual(not_exists_resp, {'enqueued': 0, 'items': [], 'failed': ['does_not_exist.bz2']}) - @with_http_server + @with_mock_athena + @with_upload_handler def test_upload_handler(self, host): fn = self._create_file('qlog.bz2') item = athenad.UploadItem(path=fn, url=f"{host}/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) - end_event = threading.Event() - thread = threading.Thread(target=athenad.upload_handler, args=(end_event,)) - thread.start() + athenad.upload_queue.put_nowait(item) + self._wait_for_upload() + time.sleep(0.1) + + # TODO: verify that upload actually succeeded + self.assertEqual(athenad.upload_queue.qsize(), 0) + + @parameterized.expand([(500, True), (412, False)]) + @with_mock_athena + @mock.patch('requests.put') + @with_upload_handler + def test_upload_handler_retry(self, status, retry, mock_put, host): + mock_put.return_value.status_code = status + fn = self._create_file('qlog.bz2') + item = athenad.UploadItem(path=fn, url=f"{host}/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) athenad.upload_queue.put_nowait(item) - try: - self._wait_for_upload() - time.sleep(0.1) + self._wait_for_upload() + time.sleep(0.1) - # TODO: verify that upload actually succeeded - self.assertEqual(athenad.upload_queue.qsize(), 0) - finally: - end_event.set() + self.assertEqual(athenad.upload_queue.qsize(), 1 if retry else 0) - @with_http_server - @mock.patch('requests.put') - def test_upload_handler_retry(self, host, mock_put): - for status, retry in ((500, True), (412, False)): - mock_put.return_value.status_code = status - fn = self._create_file('qlog.bz2') - item = athenad.UploadItem(path=fn, url=f"{host}/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) - - end_event = threading.Event() - thread = threading.Thread(target=athenad.upload_handler, args=(end_event,)) - thread.start() - - athenad.upload_queue.put_nowait(item) - try: - self._wait_for_upload() - time.sleep(0.1) - - self.assertEqual(athenad.upload_queue.qsize(), 1 if retry else 0) - finally: - end_event.set() - - if retry: - self.assertEqual(athenad.upload_queue.get().retry_count, 1) + if retry: + self.assertEqual(athenad.upload_queue.get().retry_count, 1) + @with_upload_handler def test_upload_handler_timeout(self): """When an upload times out or fails to connect it should be placed back in the queue""" fn = self._create_file('qlog.bz2') item = athenad.UploadItem(path=fn, url="http://localhost:44444/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) item_no_retry = replace(item, retry_count=MAX_RETRY_COUNT) - end_event = threading.Event() - thread = threading.Thread(target=athenad.upload_handler, args=(end_event,)) - thread.start() + athenad.upload_queue.put_nowait(item_no_retry) + self._wait_for_upload() + time.sleep(0.1) - try: - athenad.upload_queue.put_nowait(item_no_retry) - self._wait_for_upload() - time.sleep(0.1) + # Check that upload with retry count exceeded is not put back + self.assertEqual(athenad.upload_queue.qsize(), 0) - # Check that upload with retry count exceeded is not put back - self.assertEqual(athenad.upload_queue.qsize(), 0) + athenad.upload_queue.put_nowait(item) + self._wait_for_upload() + time.sleep(0.1) - athenad.upload_queue.put_nowait(item) - self._wait_for_upload() - time.sleep(0.1) - - # Check that upload item was put back in the queue with incremented retry count - self.assertEqual(athenad.upload_queue.qsize(), 1) - self.assertEqual(athenad.upload_queue.get().retry_count, 1) - - finally: - end_event.set() + # Check that upload item was put back in the queue with incremented retry count + self.assertEqual(athenad.upload_queue.qsize(), 1) + self.assertEqual(athenad.upload_queue.get().retry_count, 1) + @with_upload_handler def test_cancelUpload(self): item = athenad.UploadItem(path="qlog.bz2", url="http://localhost:44444/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='id', allow_cellular=True) @@ -258,18 +284,13 @@ class TestAthenadMethods(unittest.TestCase): self.assertIn(item.id, athenad.cancelled_uploads) - end_event = threading.Event() - thread = threading.Thread(target=athenad.upload_handler, args=(end_event,)) - thread.start() - try: - self._wait_for_upload() - time.sleep(0.1) + self._wait_for_upload() + time.sleep(0.1) - self.assertEqual(athenad.upload_queue.qsize(), 0) - self.assertEqual(len(athenad.cancelled_uploads), 0) - finally: - end_event.set() + self.assertEqual(athenad.upload_queue.qsize(), 0) + self.assertEqual(len(athenad.cancelled_uploads), 0) + @with_upload_handler def test_cancelExpiry(self): t_future = datetime.now() - timedelta(days=40) ts = int(t_future.strftime("%s")) * 1000 @@ -278,42 +299,28 @@ class TestAthenadMethods(unittest.TestCase): fn = self._create_file('qlog.bz2') item = athenad.UploadItem(path=fn, url="http://localhost:44444/qlog.bz2", headers={}, created_at=ts, id='', allow_cellular=True) + athenad.upload_queue.put_nowait(item) + self._wait_for_upload() + time.sleep(0.1) - end_event = threading.Event() - thread = threading.Thread(target=athenad.upload_handler, args=(end_event,)) - thread.start() - try: - athenad.upload_queue.put_nowait(item) - self._wait_for_upload() - time.sleep(0.1) - - self.assertEqual(athenad.upload_queue.qsize(), 0) - finally: - end_event.set() + self.assertEqual(athenad.upload_queue.qsize(), 0) def test_listUploadQueueEmpty(self): items = dispatcher["listUploadQueue"]() self.assertEqual(len(items), 0) @with_http_server + @with_upload_handler def test_listUploadQueueCurrent(self, host: str): fn = self._create_file('qlog.bz2') item = athenad.UploadItem(path=fn, url=f"{host}/qlog.bz2", headers={}, created_at=int(time.time()*1000), id='', allow_cellular=True) - end_event = threading.Event() - thread = threading.Thread(target=athenad.upload_handler, args=(end_event,)) - thread.start() + athenad.upload_queue.put_nowait(item) + self._wait_for_upload() - try: - athenad.upload_queue.put_nowait(item) - self._wait_for_upload() - - items = dispatcher["listUploadQueue"]() - self.assertEqual(len(items), 1) - self.assertTrue(items[0]['current']) - - finally: - end_event.set() + items = dispatcher["listUploadQueue"]() + self.assertEqual(len(items), 1) + self.assertTrue(items[0]['current']) def test_listUploadQueue(self): item = athenad.UploadItem(path="qlog.bz2", url="http://localhost:44444/qlog.bz2", headers={}, @@ -375,11 +382,11 @@ class TestAthenadMethods(unittest.TestCase): def test_getSshAuthorizedKeys(self): keys = dispatcher["getSshAuthorizedKeys"]() - self.assertEqual(keys, MockParams().params["GithubSshKeys"].decode('utf-8')) + self.assertEqual(keys, self.default_params["GithubSshKeys"].decode('utf-8')) def test_getGithubUsername(self): keys = dispatcher["getGithubUsername"]() - self.assertEqual(keys, MockParams().params["GithubUsername"].decode('utf-8')) + self.assertEqual(keys, self.default_params["GithubUsername"].decode('utf-8')) def test_getVersion(self): resp = dispatcher["getVersion"]() diff --git a/selfdrive/athena/tests/test_athenad_ping.py b/selfdrive/athena/tests/test_athenad_ping.py index 3ec7cb115c..5231b0475f 100755 --- a/selfdrive/athena/tests/test_athenad_ping.py +++ b/selfdrive/athena/tests/test_athenad_ping.py @@ -3,8 +3,8 @@ import subprocess import threading import time import unittest -from typing import Callable, cast, Optional -from unittest.mock import MagicMock +from typing import cast, Optional +from unittest import mock from openpilot.common.params import Params from openpilot.common.timeout import Timeout @@ -27,8 +27,6 @@ class TestAthenadPing(unittest.TestCase): athenad: threading.Thread exit_event: threading.Event - _create_connection: Callable - def _get_ping_time(self) -> Optional[str]: return cast(Optional[str], self.params.get("LastAthenaPingTime", encoding="utf-8")) @@ -38,38 +36,32 @@ class TestAthenadPing(unittest.TestCase): def _received_ping(self) -> bool: return self._get_ping_time() is not None - @classmethod - def setUpClass(cls) -> None: - cls.params = Params() - cls.dongle_id = cls.params.get("DongleId", encoding="utf-8") - cls._create_connection = athenad.create_connection - athenad.create_connection = MagicMock(wraps=cls._create_connection) - @classmethod def tearDownClass(cls) -> None: wifi_radio(True) - athenad.create_connection = cls._create_connection def setUp(self) -> None: + self.params = Params() + self.dongle_id = self.params.get("DongleId", encoding="utf-8") + wifi_radio(True) self._clear_ping_time() self.exit_event = threading.Event() self.athenad = threading.Thread(target=athenad.main, args=(self.exit_event,)) - athenad.create_connection.reset_mock() - def tearDown(self) -> None: if self.athenad.is_alive(): self.exit_event.set() self.athenad.join() - def assertTimeout(self, reconnect_time: float) -> None: + @mock.patch('openpilot.selfdrive.athena.athenad.create_connection', autospec=True) + def assertTimeout(self, reconnect_time: float, mock_create_connection: mock.MagicMock) -> None: self.athenad.start() time.sleep(1) - athenad.create_connection.assert_called_once() - athenad.create_connection.reset_mock() + mock_create_connection.assert_called_once() + mock_create_connection.reset_mock() # check normal behaviour with self.subTest("Wi-Fi: receives ping"), Timeout(70, "no ping received"): @@ -77,7 +69,7 @@ class TestAthenadPing(unittest.TestCase): time.sleep(0.1) print("ping received") - athenad.create_connection.assert_not_called() + mock_create_connection.assert_not_called() # websocket should attempt reconnect after short time with self.subTest("LTE: attempt reconnect"): @@ -85,7 +77,7 @@ class TestAthenadPing(unittest.TestCase): print("waiting for reconnect attempt") start_time = time.monotonic() with Timeout(reconnect_time, "no reconnect attempt"): - while not athenad.create_connection.called: + while not mock_create_connection.called: time.sleep(0.1) print(f"reconnect attempt after {time.monotonic() - start_time:.2f}s") diff --git a/selfdrive/athena/tests/test_registration.py b/selfdrive/athena/tests/test_registration.py index 195fca2df9..e7ad63a370 100755 --- a/selfdrive/athena/tests/test_registration.py +++ b/selfdrive/athena/tests/test_registration.py @@ -1,7 +1,5 @@ #!/usr/bin/env python3 import json -import os -import tempfile import unittest from Crypto.PublicKey import RSA from pathlib import Path @@ -10,6 +8,7 @@ from unittest import mock from openpilot.common.params import Params from openpilot.selfdrive.athena.registration import register, UNREGISTERED_DONGLE_ID from openpilot.selfdrive.athena.tests.helpers import MockResponse +from openpilot.system.hardware.hw import Paths class TestRegistration(unittest.TestCase): @@ -19,16 +18,11 @@ class TestRegistration(unittest.TestCase): self.params = Params() self.params.clear_all() - self.persist = tempfile.TemporaryDirectory() - os.mkdir(os.path.join(self.persist.name, "comma")) - self.priv_key = Path(os.path.join(self.persist.name, "comma/id_rsa")) - self.pub_key = Path(os.path.join(self.persist.name, "comma/id_rsa.pub")) - self.persist_patcher = mock.patch("openpilot.selfdrive.athena.registration.PERSIST", self.persist.name) - self.persist_patcher.start() + persist_dir = Path(Paths.persist_root()) / "comma" + persist_dir.mkdir(parents=True, exist_ok=True) - def tearDown(self): - self.persist_patcher.stop() - self.persist.cleanup() + self.priv_key = persist_dir / "id_rsa" + self.pub_key = persist_dir / "id_rsa.pub" def _generate_keys(self): self.pub_key.touch() diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index 70724606cd..9e2a960055 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -1,11 +1,5 @@ #include "selfdrive/boardd/boardd.h" -#include -#include -#include -#include -#include - #include #include #include @@ -13,10 +7,6 @@ #include #include #include -#include -#include -#include -#include #include #include #include @@ -361,7 +351,6 @@ std::optional send_panda_states(PubMaster *pm, const std::vector ps.setIgnitionLine(health.ignition_line_pkt); ps.setIgnitionCan(health.ignition_can_pkt); ps.setControlsAllowed(health.controls_allowed_pkt); - ps.setGasInterceptorDetected(health.gas_interceptor_detected_pkt); ps.setTxBufferOverflow(health.tx_buffer_overflow_pkt); ps.setRxBufferOverflow(health.rx_buffer_overflow_pkt); ps.setGmlanSendErrs(health.gmlan_send_errs_pkt); @@ -457,7 +446,7 @@ void panda_state_thread(std::vector pandas, bool spoofing_started) { util::set_thread_name("boardd_panda_state"); Params params; - SubMaster sm({"controlsState", "carState"}); + SubMaster sm({"controlsState"}); PubMaster pm({"pandaStates", "peripheralState"}); Panda *peripheral_panda = pandas[0]; @@ -472,12 +461,15 @@ void panda_state_thread(std::vector pandas, bool spoofing_started) { LOGD("start panda state thread"); - // run at 2hz - RateKeeper rk("panda_state_thread", 2); + // run at 10hz + RateKeeper rk("panda_state_thread", 10); while (!do_exit && check_all_connected(pandas)) { - // send out peripheralState - send_peripheral_state(&pm, peripheral_panda); + // send out peripheralState at 2Hz + if (sm.frame % 5 == 0) { + send_peripheral_state(&pm, peripheral_panda); + } + auto ignition_opt = send_panda_states(&pm, pandas, spoofing_started); if (!ignition_opt) { @@ -530,10 +522,9 @@ void panda_state_thread(std::vector pandas, bool spoofing_started) { sm.update(0); const bool engaged = sm.allAliveAndValid({"controlsState"}) && sm["controlsState"].getControlsState().getEnabled(); - const bool parked = sm.allAliveAndValid({"carState"}) && (int(sm["carState"].getCarState().getGearShifter()) == 1); for (const auto &panda : pandas) { - panda->send_heartbeat(engaged && !parked); + panda->send_heartbeat(engaged); } rk.keepTime(); diff --git a/selfdrive/boardd/panda_comms.cc b/selfdrive/boardd/panda_comms.cc index bc4e5f5867..e2c78abea2 100644 --- a/selfdrive/boardd/panda_comms.cc +++ b/selfdrive/boardd/panda_comms.cc @@ -2,33 +2,33 @@ #include #include +#include #include "common/swaglog.h" -static int init_usb_ctx(libusb_context **context) { - assert(context != nullptr); - - int err = libusb_init(context); +static libusb_context *init_usb_ctx() { + libusb_context *context = nullptr; + int err = libusb_init(&context); if (err != 0) { LOGE("libusb initialization error"); - return err; + return nullptr; } #if LIBUSB_API_VERSION >= 0x01000106 - libusb_set_option(*context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_INFO); + libusb_set_option(context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_INFO); #else - libusb_set_debug(*context, 3); + libusb_set_debug(context, 3); #endif - - return err; + return context; } PandaUsbHandle::PandaUsbHandle(std::string serial) : PandaCommsHandle(serial) { // init libusb ssize_t num_devices; libusb_device **dev_list = NULL; - int err = init_usb_ctx(&ctx); - if (err != 0) { goto fail; } + int err = 0; + ctx = init_usb_ctx(); + if (!ctx) { goto fail; } // connect by serial num_devices = libusb_get_device_list(ctx, &dev_list); @@ -94,16 +94,14 @@ void PandaUsbHandle::cleanup() { } std::vector PandaUsbHandle::list() { + static std::unique_ptr context(init_usb_ctx(), libusb_exit); // init libusb ssize_t num_devices; - libusb_context *context = NULL; libusb_device **dev_list = NULL; std::vector serials; + if (!context) { return serials; } - int err = init_usb_ctx(&context); - if (err != 0) { return serials; } - - num_devices = libusb_get_device_list(context, &dev_list); + num_devices = libusb_get_device_list(context.get(), &dev_list); if (num_devices < 0) { LOGE("libusb can't get device list"); goto finish; @@ -130,9 +128,6 @@ finish: if (dev_list != NULL) { libusb_free_device_list(dev_list, 1); } - if (context) { - libusb_exit(context); - } return serials; } diff --git a/selfdrive/boardd/pandad.py b/selfdrive/boardd/pandad.py index e614432fad..672678778b 100755 --- a/selfdrive/boardd/pandad.py +++ b/selfdrive/boardd/pandad.py @@ -3,7 +3,6 @@ import os import usb1 import time -import json import subprocess from typing import List, NoReturn from functools import cmp_to_key @@ -13,7 +12,7 @@ from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params from openpilot.selfdrive.boardd.set_time import set_time from openpilot.system.hardware import HARDWARE -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog def get_expected_signature(panda: Panda) -> bytes: @@ -24,49 +23,6 @@ def get_expected_signature(panda: Panda) -> bytes: cloudlog.exception("Error computing expected signature") return b"" -def read_panda_logs(panda: Panda) -> None: - """ - Forward panda logs to the cloud - """ - - params = Params() - serial = panda.get_usb_serial() - - log_state = {} - try: - l = json.loads(params.get("PandaLogState")) - for k, v in l.items(): - if isinstance(k, str) and isinstance(v, int): - log_state[k] = v - except (TypeError, json.JSONDecodeError): - cloudlog.exception("failed to parse PandaLogState") - - try: - if serial in log_state: - logs = panda.get_logs(last_id=log_state[serial]) - else: - logs = panda.get_logs(get_all=True) - - # truncate logs to 100 entries if needed - MAX_LOGS = 100 - if len(logs) > MAX_LOGS: - cloudlog.warning(f"Panda {serial} has {len(logs)} logs, truncating to {MAX_LOGS}") - logs = logs[-MAX_LOGS:] - - # update log state - if len(logs) > 0: - log_state[serial] = logs[-1]["id"] - - for log in logs: - if log['timestamp'] is not None: - log['timestamp'] = log['timestamp'].isoformat() - cloudlog.event("panda_log", **log, serial=serial) - - params.put("PandaLogState", json.dumps(log_state)) - except Exception: - cloudlog.exception(f"Error getting logs for panda {serial}") - - def flash_panda(panda_serial: str) -> Panda: try: panda = Panda(panda_serial) @@ -188,8 +144,9 @@ def main() -> NoReturn: if health["heartbeat_lost"]: params.put_bool("PandaHeartbeatLost", True) cloudlog.event("heartbeat lost", deviceState=health, serial=panda.get_usb_serial()) - - read_panda_logs(panda) + if health["som_reset_triggered"]: + params.put_bool("PandaSomResetTriggered", True) + cloudlog.event("panda.som_reset_triggered", health=health, serial=panda.get_usb_serial()) if first_run: if panda.is_internal(): diff --git a/selfdrive/boardd/tests/test_boardd b/selfdrive/boardd/tests/test_boardd deleted file mode 100755 index b4455ce67c..0000000000 Binary files a/selfdrive/boardd/tests/test_boardd and /dev/null differ diff --git a/selfdrive/boardd/tests/test_pandad.py b/selfdrive/boardd/tests/test_pandad.py index 30a4a9b868..21cc0b5f37 100755 --- a/selfdrive/boardd/tests/test_pandad.py +++ b/selfdrive/boardd/tests/test_pandad.py @@ -1,14 +1,13 @@ #!/usr/bin/env python3 import os +import pytest import time import unittest import cereal.messaging as messaging from cereal import log from openpilot.common.gpio import gpio_set, gpio_init -from openpilot.common.params import Params from panda import Panda, PandaDFU, PandaProtocolMismatch -from openpilot.selfdrive.test.helpers import phone_only from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.system.hardware import HARDWARE from openpilot.system.hardware.tici.pins import GPIO @@ -16,11 +15,13 @@ from openpilot.system.hardware.tici.pins import GPIO HERE = os.path.dirname(os.path.realpath(__file__)) +@pytest.mark.tici class TestPandad(unittest.TestCase): def setUp(self): - self.params = Params() - self.start_log_state = self.params.get("PandaLogState") + # ensure panda is up + if len(Panda.list()) == 0: + self._run_test(60) def tearDown(self): managed_processes['pandad'].stop() @@ -39,10 +40,6 @@ class TestPandad(unittest.TestCase): if sm['peripheralState'].pandaType == log.PandaState.PandaType.unknown: raise Exception("boardd failed to start") - # simple check that we did something with the panda logs - cur_log_state = self.params.get("PandaLogState") - assert cur_log_state != self.start_log_state - def _go_to_dfu(self): HARDWARE.recover_internal_panda() assert Panda.wait_for_dfu(None, 10) @@ -71,19 +68,16 @@ class TestPandad(unittest.TestCase): self._run_test(45) - @phone_only def test_in_dfu(self): HARDWARE.recover_internal_panda() self._run_test(60) - @phone_only def test_in_bootstub(self): with Panda() as p: p.reset(enter_bootstub=True) assert p.bootstub self._run_test() - @phone_only def test_internal_panda_reset(self): gpio_init(GPIO.STM_RST_N, True) gpio_set(GPIO.STM_RST_N, 1) @@ -93,28 +87,23 @@ class TestPandad(unittest.TestCase): assert any(Panda(s).is_internal() for s in Panda.list()) - @phone_only def test_best_case_startup_time(self): # run once so we're setup - self._run_test() + self._run_test(60) # should be fast this time self._run_test(8) - @phone_only def test_protocol_version_check(self): if HARDWARE.get_device_type() == 'tici': - self.skipTest("") - + raise unittest.SkipTest("SPI test") # flash old fw fn = os.path.join(HERE, "bootstub.panda_h7_spiv0.bin") self._flash_bootstub_and_test(fn, expect_mismatch=True) - @phone_only def test_release_to_devel_bootstub(self): self._flash_bootstub_and_test(None) - @phone_only def test_recover_from_bad_bootstub(self): self._go_to_dfu() with PandaDFU(None) as pd: diff --git a/selfdrive/car/CARS_template.md b/selfdrive/car/CARS_template.md index 9d045e7627..ab4d231fa7 100644 --- a/selfdrive/car/CARS_template.md +++ b/selfdrive/car/CARS_template.md @@ -53,7 +53,7 @@ If your car has the following packages or features, then it's a good candidate f ### FlexRay -All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a CAN bus isn't the only way that the cars in your computer can communicate. Most, if not all, vehicles from the following manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars may one day be supported, but we have no immediate plans to support FlexRay. +All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a CAN bus isn't the only way that the computers in your car can communicate. Most, if not all, vehicles from the following manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars may one day be supported, but we have no immediate plans to support FlexRay. ### Toyota Security diff --git a/selfdrive/car/README.MD b/selfdrive/car/README.MD deleted file mode 100644 index de4db0ee50..0000000000 --- a/selfdrive/car/README.MD +++ /dev/null @@ -1,11 +0,0 @@ -## Port structure -##### interface.py -Generic interface to send and receive messages from CAN (controlsd uses this to communicate with car) -##### carcontroller.py -Builds CAN messages to send to car -##### carstate.py -Reads CAN from car and builds openpilot CarState message -##### values.py -Fingerprints and absolute limits -##### radar_interface.py -Radar interface diff --git a/selfdrive/car/README.md b/selfdrive/car/README.md new file mode 100644 index 0000000000..2c49cf2051 --- /dev/null +++ b/selfdrive/car/README.md @@ -0,0 +1,19 @@ +## Car port structure + +### interface.py +Generic interface to send and receive messages from CAN (controlsd uses this to communicate with car) + +### fingerprints.py +Fingerprints for matching to a specific car + +### carcontroller.py +Builds CAN messages to send to car + +##### carstate.py +Reads CAN from car and builds openpilot CarState message + +##### values.py +Limits for actuation, general constants for cars, and supported car documentation + +##### radar_interface.py +Interface for parsing radar points from the car diff --git a/selfdrive/car/body/fingerprints.py b/selfdrive/car/body/fingerprints.py new file mode 100644 index 0000000000..6efaabc137 --- /dev/null +++ b/selfdrive/car/body/fingerprints.py @@ -0,0 +1,28 @@ +# ruff: noqa: E501 +from cereal import car +from openpilot.selfdrive.car.body.values import CAR + +Ecu = car.CarParams.Ecu + +# debug ecu fw version is the git hash of the firmware + + +FINGERPRINTS = { + CAR.BODY: [{ + 513: 8, 516: 8, 514: 3, 515: 4 + }], +} + +FW_VERSIONS = { + CAR.BODY: { + (Ecu.engine, 0x720, None): [ + b'0.0.01', + b'0.3.00a', + b'02/27/2022', + ], + (Ecu.debug, 0x721, None): [ + b'166bd860', + b'dc780f85', + ], + }, +} diff --git a/selfdrive/car/body/values.py b/selfdrive/car/body/values.py index 56d9723818..33119bf0fd 100644 --- a/selfdrive/car/body/values.py +++ b/selfdrive/car/body/values.py @@ -1,3 +1,4 @@ +from enum import StrEnum from typing import Dict from cereal import car @@ -21,7 +22,7 @@ class CarControllerParams: pass -class CAR: +class CAR(StrEnum): BODY = "COMMA BODY" @@ -29,11 +30,6 @@ CAR_INFO: Dict[str, CarInfo] = { CAR.BODY: CarInfo("comma body", package="All"), } -FINGERPRINTS = { - CAR.BODY: [{ - 513: 8, 516: 8, 514: 3, 515: 4, - }], -} FW_QUERY_CONFIG = FwQueryConfig( requests=[ @@ -45,20 +41,6 @@ FW_QUERY_CONFIG = FwQueryConfig( ], ) -FW_VERSIONS = { - CAR.BODY: { - (Ecu.engine, 0x720, None): [ - b'0.0.01', - b'02/27/2022', - b'0.3.00a', - ], - # git hash of the firmware used - (Ecu.debug, 0x721, None): [ - b'166bd860', - b'dc780f85', - ], - }, -} DBC = { CAR.BODY: dbc_dict('comma_body', None), diff --git a/selfdrive/car/car_helpers.py b/selfdrive/car/car_helpers.py index 6e3cb19a68..024d5b007b 100644 --- a/selfdrive/car/car_helpers.py +++ b/selfdrive/car/car_helpers.py @@ -12,10 +12,10 @@ from openpilot.selfdrive.car.interfaces import get_interface_attr from openpilot.selfdrive.car.fingerprints import eliminate_incompatible_cars, all_legacy_fingerprint_cars from openpilot.selfdrive.car.vin import get_vin, is_valid_vin, VIN_UNKNOWN from openpilot.selfdrive.car.fw_versions import get_fw_versions_ordered, get_present_ecus, match_fw_to_car, set_obd_multiplexing -import openpilot.selfdrive.sentry as sentry -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog import cereal.messaging as messaging from openpilot.selfdrive.car import gen_empty_fingerprint +import openpilot.selfdrive.sentry as sentry FRAME_FINGERPRINT = 100 # 1s @@ -69,9 +69,8 @@ def load_interfaces(brand_names): def _get_interface_names() -> Dict[str, List[str]]: # returns a dict of brand name and its respective models brand_names = {} - for brand_name, model_names in get_interface_attr("CAR").items(): - model_names = [getattr(model_names, c) for c in model_names.__dict__.keys() if not c.startswith("__")] - brand_names[brand_name] = model_names + for brand_name, brand_models in get_interface_attr("CAR").items(): + brand_names[brand_name] = [model.value for model in brand_models] return brand_names @@ -131,9 +130,6 @@ def fingerprint(logcan, sendcan, num_pandas): start_time = time.monotonic() if not skip_fw_query: - # Vin query only reliably works through OBDII - bus = 1 - cached_params = params.get("CarParamsCache") if cached_params is not None: with car.CarParams.from_bytes(cached_params) as cached_params: @@ -143,20 +139,22 @@ def fingerprint(logcan, sendcan, num_pandas): if cached_params is not None and len(cached_params.carFw) > 0 and \ cached_params.carVin is not VIN_UNKNOWN and not disable_fw_cache: cloudlog.warning("Using cached CarParams") - vin, vin_rx_addr = cached_params.carVin, 0 + vin_rx_addr, vin_rx_bus, vin = -1, -1, cached_params.carVin car_fw = list(cached_params.carFw) cached = True else: cloudlog.warning("Getting VIN & FW versions") + # enable OBD multiplexing for Vin query, also allows time for sendcan subscriber to connect set_obd_multiplexing(params, True) - vin_rx_addr, vin = get_vin(logcan, sendcan, bus) + # Vin query only reliably works through OBDII + vin_rx_addr, vin_rx_bus, vin = get_vin(logcan, sendcan, (0, 1)) ecu_rx_addrs = get_present_ecus(logcan, sendcan, num_pandas=num_pandas) car_fw = get_fw_versions_ordered(logcan, sendcan, ecu_rx_addrs, num_pandas=num_pandas) cached = False exact_fw_match, fw_candidates = match_fw_to_car(car_fw) else: - vin, vin_rx_addr = VIN_UNKNOWN, 0 + vin_rx_addr, vin_rx_bus, vin = -1, -1, VIN_UNKNOWN exact_fw_match, fw_candidates, car_fw = True, set(), [] cached = False @@ -191,8 +189,8 @@ def fingerprint(logcan, sendcan, num_pandas): source = car.CarParams.FingerprintSource.fixed cloudlog.event("fingerprinted", car_fingerprint=car_fingerprint, source=source, fuzzy=not exact_match, cached=cached, - fw_count=len(car_fw), ecu_responses=list(ecu_rx_addrs), vin_rx_addr=vin_rx_addr, fingerprints=finger, - fw_query_time=fw_query_time, error=True) + fw_count=len(car_fw), ecu_responses=list(ecu_rx_addrs), vin_rx_addr=vin_rx_addr, vin_rx_bus=vin_rx_bus, + fingerprints=finger, fw_query_time=fw_query_time, error=True) return car_fingerprint, finger, vin, car_fw, source, exact_match @@ -208,6 +206,7 @@ def crash_log(candidate): no_internet = 0 while True: if is_connected_to_internet(): + sentry.get_init() sentry.capture_warning("fingerprinted %s" % candidate) break else: @@ -221,6 +220,7 @@ def crash_log2(fingerprints, fw): no_internet = 0 while True: if is_connected_to_internet(): + sentry.get_init() sentry.capture_warning("car doesn't match any fingerprints: %s" % fingerprints) sentry.capture_warning("car doesn't match any fw: %s" % fw) break @@ -256,3 +256,15 @@ def get_car(logcan, sendcan, experimental_long_allowed, num_pandas=1): CP.fuzzyFingerprint = not exact_match return CarInterface(CP, CarController, CarState), CP + +def write_car_param(fingerprint="mock"): + params = Params() + CarInterface, _, _ = interfaces[fingerprint] + CP = CarInterface.get_non_essential_params(fingerprint) + params.put("CarParams", CP.to_bytes()) + +def get_demo_car_params(): + fingerprint="mock" + CarInterface, _, _ = interfaces[fingerprint] + CP = CarInterface.get_non_essential_params(fingerprint) + return CP diff --git a/selfdrive/car/chrysler/carcontroller.py b/selfdrive/car/chrysler/carcontroller.py index 227ab3301b..cb365d56da 100644 --- a/selfdrive/car/chrysler/carcontroller.py +++ b/selfdrive/car/chrysler/carcontroller.py @@ -1,11 +1,12 @@ import cereal.messaging as messaging from common.conversions import Conversions as CV from opendbc.can.packer import CANPacker -from openpilot.common.params import Params, put_bool_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL from openpilot.selfdrive.car import apply_meas_steer_torque_limits from openpilot.selfdrive.car.chrysler import chryslercan -from openpilot.selfdrive.car.chrysler.values import RAM_CARS, RAM_DT, CarControllerParams, ChryslerFlags +from openpilot.selfdrive.car.chrysler.values import RAM_CARS, RAM_DT, CarControllerParams, ChryslerFlags, ChryslerFlagsSP +from openpilot.selfdrive.car.interfaces import FORWARD_GEARS from openpilot.selfdrive.controls.lib.drive_helpers import FCA_V_CRUISE_MIN BUTTONS_STATES = ["accelCruise", "decelCruise", "cancel", "resumeCruise"] @@ -70,7 +71,7 @@ class CarController: self.m_tsc = self.sm['longitudinalPlanSP'].turnSpeed if self.frame % 200 == 0: - self.speed_limit_control_enabled = self.param_s.get_bool("SpeedLimitControl") + self.speed_limit_control_enabled = self.param_s.get_bool("EnableSlc") self.is_metric = self.param_s.get_bool("IsMetric") self.last_speed_limit_sign_tap = self.param_s.get_bool("LastSpeedLimitSignTap") self.v_cruise_min = FCA_V_CRUISE_MIN[self.is_metric] * (CV.KPH_TO_MPH if not self.is_metric else 1) @@ -80,7 +81,7 @@ class CarController: if not self.CP.pcmCruiseSpeed: if not self.last_speed_limit_sign_tap_prev and self.last_speed_limit_sign_tap: self.sl_force_active_timer = self.frame - put_bool_nonblocking("LastSpeedLimitSignTap", False) + self.param_s.put_bool_nonblocking("LastSpeedLimitSignTap", False) self.last_speed_limit_sign_tap_prev = self.last_speed_limit_sign_tap sl_force_active = self.speed_limit_control_enabled and (self.frame < (self.sl_force_active_timer * DT_CTRL + 2.0)) @@ -93,7 +94,7 @@ class CarController: lkas_active = CC.latActive and CS.madsEnabled if self.frame % 10 == 0 and self.CP.carFingerprint not in RAM_CARS: - can_sends.append(chryslercan.create_lkas_heartbit(self.packer, CS.madsEnabled, CS.lkas_heartbit)) + can_sends.append(chryslercan.create_lkas_heartbit(self.packer, CS.lkas_disabled, CS.lkas_heartbit)) ram_cars = self.CP.carFingerprint in RAM_CARS @@ -151,6 +152,8 @@ class CarController: lkas_control_bit = True if (self.CP.minEnableSpeed >= 14.5) and (CS.out.gearShifter != 2): lkas_control_bit = False + elif self.CP.spFlags & ChryslerFlagsSP.SP_WP_S20: + lkas_control_bit = CC.latActive and CS.out.gearShifter in FORWARD_GEARS elif CS.out.vEgo > self.CP.minSteerSpeed: lkas_control_bit = True elif self.CP.flags & ChryslerFlags.HIGHER_MIN_STEERING_SPEED: diff --git a/selfdrive/car/chrysler/carstate.py b/selfdrive/car/chrysler/carstate.py index 7986f8d6ab..836aea5b51 100644 --- a/selfdrive/car/chrysler/carstate.py +++ b/selfdrive/car/chrysler/carstate.py @@ -24,6 +24,7 @@ class CarState(CarStateBase): self.lkas_enabled = False self.prev_lkas_enabled = False self.lkas_heartbit = None + self.lkas_disabled = False self.buttonStates = BUTTON_STATES.copy() self.buttonStatesPrev = BUTTON_STATES.copy() @@ -46,7 +47,7 @@ class CarState(CarStateBase): # brake pedal ret.brake = 0 ret.brakePressed = cp.vl["ESP_1"]['Brake_Pedal_State'] == 1 # Physical brake pedal switch - ret.brakeLights = bool(cp.vl["ESP_1"]["BRAKE_PRESSED_ACC"]) + ret.brakeLightsDEPRECATED = bool(cp.vl["ESP_1"]["BRAKE_PRESSED_ACC"]) # gas pedal ret.gas = cp.vl["ECM_5"]["Accelerator_Position"] @@ -99,6 +100,8 @@ class CarState(CarStateBase): else: self.lkas_enabled = cp.vl["TRACTION_BUTTON"]["TOGGLE_LKAS"] == 1 self.lkas_heartbit = cp_cam.vl["LKAS_HEARTBIT"] + if not self.control_initialized: + self.lkas_disabled = bool(cp_cam.vl["LKAS_HEARTBIT"]["LKAS_DISABLED"]) ret.steerFaultTemporary = cp.vl["EPS_2"]["LKAS_TEMPORARY_FAULT"] == 1 ret.steerFaultPermanent = cp.vl["EPS_2"]["LKAS_STATE"] == 4 diff --git a/selfdrive/car/chrysler/chryslercan.py b/selfdrive/car/chrysler/chryslercan.py index 80bf2f3591..224b81ad15 100644 --- a/selfdrive/car/chrysler/chryslercan.py +++ b/selfdrive/car/chrysler/chryslercan.py @@ -48,7 +48,7 @@ def create_lkas_hud(packer, CP, lkas_active, mads_enabled, hud_alert, hud_count, if CP.carFingerprint in RAM_CARS: values['AUTO_HIGH_BEAM_ON'] = auto_high_beam - values['LKAS_Disabled'] = 0 if mads_enabled else 1 + values['LKAS_DISABLED'] = 0 if mads_enabled else 1 return packer.make_can_msg("DAS_6", 0, values) @@ -81,8 +81,8 @@ def create_cruise_buttons(packer, frame, bus, CP, cruise_buttons_msg=None, butto return packer.make_can_msg("CRUISE_BUTTONS", bus, values) -def create_lkas_heartbit(packer, mads_enabled, lkas_heartbit): +def create_lkas_heartbit(packer, lkas_disabled, lkas_heartbit): # LKAS_HEARTBIT (697) LKAS heartbeat values = lkas_heartbit.copy() # forward what we parsed - values["LKAS_DISABLED"] = 0 if mads_enabled else 1 + values["LKAS_DISABLED"] = 1 if lkas_disabled else 0 return packer.make_can_msg("LKAS_HEARTBIT", 0, values) diff --git a/selfdrive/car/chrysler/fingerprints.py b/selfdrive/car/chrysler/fingerprints.py new file mode 100644 index 0000000000..940d73c249 --- /dev/null +++ b/selfdrive/car/chrysler/fingerprints.py @@ -0,0 +1,606 @@ +from cereal import car +from openpilot.selfdrive.car.chrysler.values import CAR + +Ecu = car.CarParams.Ecu + +FW_VERSIONS = { + CAR.PACIFICA_2017_HYBRID: { + (Ecu.combinationMeter, 0x742, None): [ + b'68239262AH', + b'68239262AI', + b'68239262AJ', + b'68239263AH', + b'68239263AJ', + ], + (Ecu.srs, 0x744, None): [ + b'68238840AH', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'68226356AI', + ], + (Ecu.eps, 0x75a, None): [ + b'68288309AC', + b'68288309AD', + ], + (Ecu.engine, 0x7e0, None): [ + b'68277480AV ', + b'68277480AX ', + b'68277480AZ ', + ], + (Ecu.hybrid, 0x7e2, None): [ + b'05190175BF', + b'05190175BH', + b'05190226AK', + ], + }, + CAR.PACIFICA_2018: { + (Ecu.combinationMeter, 0x742, None): [ + b'68227902AF', + b'68227902AG', + b'68227902AH', + b'68360252AC', + ], + (Ecu.srs, 0x744, None): [ + b'68211617AF', + b'68211617AG', + b'68358974AC', + b'68405937AA', + ], + (Ecu.abs, 0x747, None): [ + b'68222747AG', + b'68330876AA', + b'68330876AB', + b'68352227AA', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672758AA', + b'68226356AF', + b'68226356AH', + b'68226356AI', + ], + (Ecu.eps, 0x75a, None): [ + b'68288891AE', + b'68378884AA', + b'68525338AA', + b'68525338AB', + ], + (Ecu.engine, 0x7e0, None): [ + b'68267018AO ', + b'68267020AJ ', + b'68340762AD ', + b'68340764AD ', + b'68352652AE ', + b'68366851AH ', + b'68366853AE ', + b'68372861AF ', + ], + (Ecu.transmission, 0x7e1, None): [ + b'68277370AJ', + b'68277370AM', + b'68277372AD', + b'68277372AN', + b'68277374AA', + b'68277374AB', + b'68277374AD', + b'68277374AN', + b'68367471AC', + b'68380571AB', + ], + }, + CAR.PACIFICA_2020: { + (Ecu.combinationMeter, 0x742, None): [ + b'68405327AC', + b'68436233AB', + b'68436233AC', + b'68436250AE', + b'68529067AA', + b'68594993AB', + ], + (Ecu.srs, 0x744, None): [ + b'68405565AB', + b'68405565AC', + b'68444299AC', + b'68480708AC', + b'68526663AB', + ], + (Ecu.abs, 0x747, None): [ + b'68397394AA', + b'68433480AB', + b'68453575AF', + b'68577676AA', + b'68593395AA', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672758AA', + b'04672758AB', + b'68417813AF', + b'68540436AA', + b'68540436AC', + b'68540436AD', + b'68598670AB', + ], + (Ecu.eps, 0x75a, None): [ + b'68416742AA', + b'68460393AA', + b'68460393AB', + b'68494461AB', + b'68524936AA', + b'68524936AB', + b'68525338AB', + b'68594340AB', + ], + (Ecu.engine, 0x7e0, None): [ + b'68413871AD ', + b'68413871AE ', + b'68413871AH ', + b'68413871AI ', + b'68413873AI ', + b'68443120AE ', + b'68443123AC ', + b'68443125AC ', + b'68526752AD ', + b'68526752AE ', + b'68526754AE ', + b'68536264AE ', + b'68700306AB ', + ], + (Ecu.transmission, 0x7e1, None): [ + b'68414271AC', + b'68414271AD', + b'68414275AC', + b'68443154AB', + b'68443155AC', + b'68443158AB', + b'68501050AD', + b'68527221AB', + b'68527223AB', + b'68586231AD', + ], + }, + CAR.PACIFICA_2018_HYBRID: { + (Ecu.combinationMeter, 0x742, None): [ + b'68358439AE', + b'68358439AG', + ], + (Ecu.srs, 0x744, None): [ + b'68358990AC', + b'68405939AA', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672758AA', + ], + (Ecu.eps, 0x75a, None): [ + b'68288309AD', + b'68525339AA', + ], + (Ecu.engine, 0x7e0, None): [ + b'68366580AI ', + b'68366580AK ', + b'68366580AM ', + ], + (Ecu.hybrid, 0x7e2, None): [ + b'05190226AI', + b'05190226AK', + b'05190226AM', + ], + }, + CAR.PACIFICA_2019_HYBRID: { + (Ecu.combinationMeter, 0x742, None): [ + b'68405292AC', + b'68434956AC', + b'68434956AD', + b'68434960AE', + b'68434960AF', + b'68529064AB', + b'68594990AB', + ], + (Ecu.srs, 0x744, None): [ + b'68405567AB', + b'68405567AC', + b'68453076AD', + b'68480710AC', + b'68526665AB', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672758AB', + b'68417813AF', + b'68540436AA', + b'68540436AB', + b'68540436AC', + b'68540436AD', + b'68598670AB', + b'68598670AC', + ], + (Ecu.eps, 0x75a, None): [ + b'68416741AA', + b'68460392AA', + b'68525339AA', + b'68525339AB', + b'68594341AB', + ], + (Ecu.engine, 0x7e0, None): [ + b'68416680AE ', + b'68416680AF ', + b'68416680AG ', + b'68444228AD ', + b'68444228AE ', + b'68444228AF ', + b'68499122AD ', + b'68499122AE ', + b'68499122AF ', + b'68526772AD ', + b'68526772AH ', + b'68599493AC ', + ], + (Ecu.hybrid, 0x7e2, None): [ + b'05185116AF', + b'05185116AJ', + b'05185116AK', + b'05190240AP', + b'05190240AQ', + b'05190240AR', + b'05190265AG', + b'05190265AH', + b'05190289AE', + b'68540977AH', + b'68540977AK', + b'68597647AE', + ], + }, + CAR.JEEP_GRAND_CHEROKEE: { + (Ecu.combinationMeter, 0x742, None): [ + b'68302211AC', + b'68302212AD', + b'68302246AC', + b'68331511AC', + b'68331574AC', + b'68331687AC', + b'68340272AD', + ], + (Ecu.srs, 0x744, None): [ + b'68316742AB', + b'68355363AB', + ], + (Ecu.abs, 0x747, None): [ + b'68306178AD', + b'68336276AB', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672627AB', + b'68332015AB', + ], + (Ecu.eps, 0x75a, None): [ + b'68321644AB', + b'68321644AC', + b'68321646AC', + b'68321648AC', + ], + (Ecu.engine, 0x7e0, None): [ + b'05035920AE ', + b'68284455AI ', + b'68284456AI ', + b'68284477AF ', + b'68325564AH ', + b'68325565AH ', + b'68325565AI ', + b'68325618AD ', + ], + (Ecu.transmission, 0x7e1, None): [ + b'05035517AH', + b'68311218AC', + b'68311223AF', + b'68311223AG', + b'68361911AE', + b'68361911AF', + b'68361911AH', + b'68361916AD', + ], + }, + CAR.JEEP_GRAND_CHEROKEE_2019: { + (Ecu.combinationMeter, 0x742, None): [ + b'68402703AB', + b'68402708AB', + b'68402971AD', + b'68454144AD', + b'68454152AB', + b'68454156AB', + b'68516650AB', + b'68516651AB', + b'68516669AB', + b'68516671AB', + b'68516683AB', + ], + (Ecu.srs, 0x744, None): [ + b'68355363AB', + b'68355364AB', + ], + (Ecu.abs, 0x747, None): [ + b'68408639AC', + b'68408639AD', + b'68499978AB', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672788AA', + b'68456722AC', + ], + (Ecu.eps, 0x75a, None): [ + b'68417279AA', + b'68417280AA', + b'68453431AA', + b'68453433AA', + b'68453435AA', + b'68499171AA', + b'68499171AB', + b'68501183AA', + ], + (Ecu.engine, 0x7e0, None): [ + b'05035674AB ', + b'68412635AG ', + b'68422860AB', + b'68449435AE ', + b'68496223AA ', + b'68504959AD ', + b'68504960AD ', + b'68504993AC ', + ], + (Ecu.transmission, 0x7e1, None): [ + b'05035707AA', + b'68419672AC', + b'68423905AB', + b'68449258AC', + b'68495807AA', + b'68495807AB', + b'68503641AC', + b'68503664AC', + ], + }, + CAR.RAM_1500: { + (Ecu.combinationMeter, 0x742, None): [ + b'68294051AG', + b'68294051AI', + b'68294052AG', + b'68294063AG', + b'68294063AH', + b'68294063AI', + b'68434846AC', + b'68434847AC', + b'68434849AC', + b'68434856AC', + b'68434858AC', + b'68434859AC', + b'68434860AC', + b'68453483AC', + b'68453487AD', + b'68453491AC', + b'68453499AD', + b'68453503AC', + b'68453505AC', + b'68453505AD', + b'68453511AC', + b'68453513AC', + b'68453513AD', + b'68453514AD', + b'68505633AB', + b'68510277AG', + b'68510277AH', + b'68510280AG', + b'68510282AG', + b'68510282AH', + b'68510283AG', + b'68527346AE', + b'68527361AD', + b'68527375AD', + b'68527381AE', + b'68527382AE', + b'68527383AD', + b'68527387AE', + b'68527403AC', + b'68631938AA', + b'68631942AA', + ], + (Ecu.srs, 0x744, None): [ + b'68428609AB', + b'68441329AB', + b'68473844AB', + b'68490898AA', + b'68500728AA', + b'68615033AA', + b'68615034AA', + ], + (Ecu.abs, 0x747, None): [ + b'68292406AH', + b'68432418AB', + b'68432418AD', + b'68436004AD', + b'68436004AE', + b'68438454AC', + b'68438454AD', + b'68438456AE', + b'68438456AF', + b'68535469AB', + b'68535470AC', + b'68548900AB', + b'68586307AB', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672892AB', + b'04672932AB', + b'04672932AC', + b'22DTRHD_AA', + b'68320950AH', + b'68320950AI', + b'68320950AJ', + b'68320950AL', + b'68320950AM', + b'68454268AB', + b'68475160AE', + b'68475160AF', + b'68475160AG', + ], + (Ecu.eps, 0x75a, None): [ + b'21590101AA', + b'21590101AB', + b'68273275AF', + b'68273275AG', + b'68273275AH', + b'68312176AE', + b'68312176AG', + b'68440789AC', + b'68466110AA', + b'68466110AB', + b'68469901AA', + b'68469907AA', + b'68522583AA', + b'68522583AB', + b'68522584AA', + b'68522585AB', + b'68552788AA', + b'68552789AA', + b'68552790AA', + b'68552791AB', + b'68552794AA', + b'68585106AB', + b'68585107AB', + b'68585108AB', + b'68585109AB', + b'68585112AB', + ], + (Ecu.engine, 0x7e0, None): [ + b'05035699AG ', + b'05036026AB ', + b'05036065AE ', + b'05036066AE ', + b'05149368AA ', + b'05149591AD ', + b'05149591AE ', + b'05149592AE ', + b'05149600AD ', + b'05149605AE ', + b'05149846AA ', + b'05149848AA ', + b'05190341AD', + b'68378695AJ ', + b'68378696AJ ', + b'68378701AI ', + b'68378710AL ', + b'68378748AL ', + b'68378758AM ', + b'68448163AJ', + b'68448163AK', + b'68448163AL', + b'68448165AG', + b'68448165AK', + b'68455111AC ', + b'68455119AC ', + b'68455145AC ', + b'68455145AE ', + b'68455146AC ', + b'68467915AC ', + b'68467936AC ', + b'68500630AD', + b'68500630AE', + b'68502719AC ', + b'68502722AC ', + b'68502734AF ', + b'68502740AF ', + b'68502741AF ', + b'68502742AC ', + b'68539650AD', + b'68539650AF', + b'68539651AD', + b'68586101AA ', + b'68586105AB ', + b'68629922AC ', + b'68629926AC ', + ], + (Ecu.transmission, 0x7e1, None): [ + b'05035706AD', + b'05035842AB', + b'05036069AA', + b'05149536AC', + b'05149537AC', + b'05149543AC', + b'68360078AL', + b'68360080AL', + b'68360080AM', + b'68360081AM', + b'68360085AJ', + b'68360085AL', + b'68384328AD', + b'68384332AD', + b'68445531AC', + b'68445533AB', + b'68445536AB', + b'68445537AB', + b'68466081AB', + b'68466087AB', + b'68484466AC', + b'68484467AC', + b'68484471AC', + b'68502994AD', + b'68520867AE', + b'68520867AF', + b'68520870AC', + b'68540431AB', + b'68540433AB', + b'68629936AC', + ], + }, + CAR.RAM_HD: { + (Ecu.combinationMeter, 0x742, None): [ + b'68361606AH', + b'68437735AC', + b'68492693AD', + b'68525485AB', + b'68525487AB', + b'68525498AB', + b'68528791AF', + b'68628474AB', + ], + (Ecu.srs, 0x744, None): [ + b'68399794AC', + b'68428503AA', + b'68428505AA', + b'68428507AA', + ], + (Ecu.abs, 0x747, None): [ + b'68334977AH', + b'68455481AC', + b'68504022AA', + b'68504022AB', + b'68504022AC', + b'68530686AB', + b'68530686AC', + b'68544596AC', + b'68641704AA', + ], + (Ecu.fwdRadar, 0x753, None): [ + b'04672895AB', + b'04672934AB', + b'56029827AG', + b'56029827AH', + b'68462657AE', + b'68484694AD', + b'68484694AE', + b'68615489AB', + ], + (Ecu.eps, 0x761, None): [ + b'68421036AC', + b'68507906AB', + b'68534023AC', + ], + (Ecu.engine, 0x7e0, None): [ + b'52370131AF', + b'52370231AF', + b'52370231AG', + b'52370491AA', + b'52370931CT', + b'52401032AE', + b'52421132AF', + b'52421332AF', + b'68527616AD ', + b'M2370131MB', + b'M2421132MB', + ], + }, +} diff --git a/selfdrive/car/chrysler/interface.py b/selfdrive/car/chrysler/interface.py index 0c759b6801..8ab98bb289 100755 --- a/selfdrive/car/chrysler/interface.py +++ b/selfdrive/car/chrysler/interface.py @@ -36,7 +36,7 @@ class CarInterface(CarInterfaceBase): CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) if candidate not in RAM_CARS: # Newer FW versions standard on the following platforms, or flashed by a dealer onto older platforms have a higher minimum steering speed. - new_eps_platform = candidate in (CAR.PACIFICA_2019_HYBRID, CAR.PACIFICA_2020, CAR.JEEP_CHEROKEE_2019) + new_eps_platform = candidate in (CAR.PACIFICA_2019_HYBRID, CAR.PACIFICA_2020, CAR.JEEP_GRAND_CHEROKEE_2019) new_eps_firmware = any(fw.ecu == 'eps' and fw.fwVersion[:4] >= b"6841" for fw in car_fw) if new_eps_platform or new_eps_firmware: ret.flags |= ChryslerFlags.HIGHER_MIN_STEERING_SPEED.value @@ -53,7 +53,7 @@ class CarInterface(CarInterfaceBase): ret.lateralTuning.pid.kf = 0.00006 # Jeep - elif candidate in (CAR.JEEP_CHEROKEE, CAR.JEEP_CHEROKEE_2019): + elif candidate in (CAR.JEEP_GRAND_CHEROKEE, CAR.JEEP_GRAND_CHEROKEE_2019): ret.mass = 1778 ret.wheelbase = 2.71 ret.steerRatio = 16.7 @@ -94,6 +94,10 @@ class CarInterface(CarInterfaceBase): ret.centerToFront = ret.wheelbase * 0.44 ret.enableBsm = 720 in fingerprint[0] + if 0x4FF in fingerprint[0]: + ret.spFlags |= ChryslerFlagsSP.SP_WP_S20.value + ret.minSteerSpeed = 0.0 + return ret def _update(self, c): @@ -124,9 +128,11 @@ class CarInterface(CarInterfaceBase): self.CS.madsEnabled = True if self.CS.prev_lkas_enabled != 1 and self.CS.lkas_enabled == 1: self.CS.madsEnabled = not self.CS.madsEnabled + self.CS.lkas_disabled = not self.CS.lkas_disabled self.CS.madsEnabled = self.get_acc_mads(ret.cruiseState.enabled, self.CS.accEnabled, self.CS.madsEnabled) else: self.CS.madsEnabled = False + self.CS.madsEnabled = self.get_sp_started_mads(ret, self.CS) if not self.CP.pcmCruise or (self.CP.pcmCruise and self.CP.minEnableSpeed > 0) or not self.CP.pcmCruiseSpeed: if any(b.type == ButtonType.cancel for b in buttonEvents): diff --git a/selfdrive/car/chrysler/values.py b/selfdrive/car/chrysler/values.py index ea93342b54..5d8f898204 100644 --- a/selfdrive/car/chrysler/values.py +++ b/selfdrive/car/chrysler/values.py @@ -1,5 +1,4 @@ -# ruff: noqa: E501 -from enum import IntFlag +from enum import IntFlag, StrEnum from dataclasses import dataclass, field from typing import Dict, List, Optional, Union @@ -18,9 +17,10 @@ class ChryslerFlags(IntFlag): class ChryslerFlagsSP(IntFlag): SP_RAM_HD_PARAMSD_IGNORE = 1 + SP_WP_S20 = 2 -class CAR: +class CAR(StrEnum): # Chrysler PACIFICA_2017_HYBRID = "CHRYSLER PACIFICA HYBRID 2017" PACIFICA_2018_HYBRID = "CHRYSLER PACIFICA HYBRID 2018" @@ -29,8 +29,8 @@ class CAR: PACIFICA_2020 = "CHRYSLER PACIFICA 2020" # Jeep - JEEP_CHEROKEE = "JEEP GRAND CHEROKEE V6 2018" # includes 2017 Trailhawk - JEEP_CHEROKEE_2019 = "JEEP GRAND CHEROKEE 2019" # includes 2020 Trailhawk + JEEP_GRAND_CHEROKEE = "JEEP GRAND CHEROKEE V6 2018" # includes 2017 Trailhawk + JEEP_GRAND_CHEROKEE_2019 = "JEEP GRAND CHEROKEE 2019" # includes 2020 Trailhawk # Ram RAM_1500 = "RAM 1500 5TH GEN" @@ -77,84 +77,23 @@ class ChryslerCarInfo(CarInfo): CAR_INFO: Dict[str, Optional[Union[ChryslerCarInfo, List[ChryslerCarInfo]]]] = { - CAR.PACIFICA_2017_HYBRID: ChryslerCarInfo("Chrysler Pacifica Hybrid 2017-18"), - CAR.PACIFICA_2018_HYBRID: None, # same platforms + CAR.PACIFICA_2017_HYBRID: ChryslerCarInfo("Chrysler Pacifica Hybrid 2017"), + CAR.PACIFICA_2018_HYBRID: ChryslerCarInfo("Chrysler Pacifica Hybrid 2018"), CAR.PACIFICA_2019_HYBRID: ChryslerCarInfo("Chrysler Pacifica Hybrid 2019-23"), CAR.PACIFICA_2018: ChryslerCarInfo("Chrysler Pacifica 2017-18"), CAR.PACIFICA_2020: [ ChryslerCarInfo("Chrysler Pacifica 2019-20"), - ChryslerCarInfo("Chrysler Pacifica 2021", package="All"), + ChryslerCarInfo("Chrysler Pacifica 2021-23", package="All"), ], - CAR.JEEP_CHEROKEE: ChryslerCarInfo("Jeep Grand Cherokee 2016-18", video_link="https://www.youtube.com/watch?v=eLR9o2JkuRk"), - CAR.JEEP_CHEROKEE_2019: ChryslerCarInfo("Jeep Grand Cherokee 2019-21", video_link="https://www.youtube.com/watch?v=jBe4lWnRSu4"), - CAR.RAM_1500: ChryslerCarInfo("Ram 1500 2019-23", car_parts=CarParts.common([CarHarness.ram])), + CAR.JEEP_GRAND_CHEROKEE: ChryslerCarInfo("Jeep Grand Cherokee 2016-18", video_link="https://www.youtube.com/watch?v=eLR9o2JkuRk"), + CAR.JEEP_GRAND_CHEROKEE_2019: ChryslerCarInfo("Jeep Grand Cherokee 2019-21", video_link="https://www.youtube.com/watch?v=jBe4lWnRSu4"), + CAR.RAM_1500: ChryslerCarInfo("Ram 1500 2019-24", car_parts=CarParts.common([CarHarness.ram])), CAR.RAM_HD: [ - ChryslerCarInfo("Ram 2500 2020-22", car_parts=CarParts.common([CarHarness.ram])), + ChryslerCarInfo("Ram 2500 2020-24", car_parts=CarParts.common([CarHarness.ram])), ChryslerCarInfo("Ram 3500 2019-22", car_parts=CarParts.common([CarHarness.ram])), ], } -# Unique CAN messages: -# Only the hybrids have 270: 8 -# Only the gas have 55: 8, 416: 7 -# For 564, All 2017 have length 4, whereas 2018-19 have length 8. -# For 924, Pacifica 2017 has length 3, whereas all 2018-19 have length 8. -# For 560, All 2019 have length 8, whereas all 2017-18 have length 4. - -# Jeep Grand Cherokee unique messages: -# 2017 Trailhawk: 618: 8 -# For 924, Trailhawk 2017 has length 3, whereas 2018 V6 has length 8. - -FINGERPRINTS = { - CAR.PACIFICA_2017_HYBRID: [{ - 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 515: 7, 516: 7, 517: 7, 518: 7, 520: 8, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 4, 571: 3, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 701: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 746: 5, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 788: 3, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 840: 8, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 908: 8, 924: 3, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 956: 8, 958: 8, 959: 8, 969: 4, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1225: 8, 1235: 8, 1242: 8, 1246: 8, 1250: 8, 1284: 8, 1537: 8, 1538: 8, 1562: 8, 1568: 8, 1856: 8, 1858: 8, 1860: 8, 1865: 8, 1875: 8, 1882: 8, 1886: 8, 1890: 8, 1892: 8, 2016: 8, 2024: 8 - }], - CAR.PACIFICA_2018: [{ - 55: 8, 257: 5, 258: 8, 264: 8, 268: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 416: 7, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 516: 7, 517: 7, 520: 8, 524: 8, 526: 6, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 656: 4, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 746: 5, 752: 2, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 882: 8, 897: 8, 924: 8, 926: 3, 937: 8, 947: 8, 948: 8, 969: 4, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1098: 8, 1100: 8, 1537: 8, 1538: 8, 1562: 8 - }, - { - 55: 8, 58: 6, 257: 5, 258: 8, 264: 8, 268: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 416: 7, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 516: 7, 517: 7, 520: 8, 524: 8, 526: 6, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 4, 571: 3, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 656: 4, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 746: 5, 752: 2, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 882: 8, 897: 8, 924: 3, 926: 3, 937: 8, 947: 8, 948: 8, 956: 8, 969: 4, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1098: 8, 1100: 8, 1537: 8, 1538: 8, 1562: 8 - }], - CAR.PACIFICA_2020: [{ - 55: 8, 179: 8, 181: 8, 257: 5, 258: 8, 264: 8, 268: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 352: 8, 362: 8, 368: 8, 376: 3, 384: 8, 388: 4, 416: 7, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 516: 7, 517: 7, 520: 8, 524: 8, 526: 6, 528: 8, 532: 8, 536: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 650: 8, 656: 4, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 676: 8, 678: 8, 680: 8, 683: 8, 703: 8, 705: 8, 706: 8, 709: 8, 710: 8, 711: 8, 719: 8, 720: 6, 729: 5, 736: 8, 746: 5, 752: 2, 754: 8, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 776: 8, 779: 8, 782: 8, 784: 8, 792: 8, 793: 8, 794: 8, 795: 8, 799: 8, 800: 8, 801: 8, 802: 8, 803: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 847: 1, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 882: 8, 886: 8, 897: 8, 906: 8, 924: 8, 926: 3, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 962: 8, 969: 4, 973: 8, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1223: 7, 1225: 8, 1227: 8, 1235: 8, 1242: 8, 1246: 8, 1250: 8, 1251: 8, 1252: 8, 1284: 8, 1543: 8, 1568: 8, 1570: 8, 1856: 8, 1858: 8, 1860: 8, 1863: 8, 1865: 8, 1867: 8, 1875: 8, 1882: 8, 1886: 8, 1890: 8, 1891: 8, 1892: 8, 1898: 8, 2015: 8, 2016: 8, 2017:8, 2024: 8, 2025: 8 - }], - CAR.PACIFICA_2018_HYBRID: [{ - 68: 8, 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 520: 8, 528: 8, 532: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 680: 8, 701: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 736: 8, 737: 8, 746: 5, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 969: 4, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8 - }, - # based on 9ae7821dc4e92455|2019-07-01--16-42-55 - { - 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 515: 7, 516: 7, 517: 7, 518: 7, 520: 8, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 701: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 746: 5, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 969: 4, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1225: 8, 1235: 8, 1242: 8, 1246: 8, 1250: 8, 1251: 8, 1252: 8, 1258: 8, 1259: 8, 1260: 8, 1262: 8, 1284: 8, 1537: 8, 1538: 8, 1562: 8, 1568: 8, 1856: 8, 1858: 8, 1860: 8, 1865: 8, 1875: 8, 1882: 8, 1886: 8, 1890: 8, 1891: 8, 1892: 8, 1898: 8, 1899: 8, 1900: 8, 1902: 8, 2016: 8, 2018: 8, 2019: 8, 2020: 8, 2023: 8, 2024: 8, 2026: 8, 2027: 8, 2028: 8, 2031: 8 - }], - CAR.PACIFICA_2019_HYBRID: [{ - 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 515: 7, 516: 7, 517: 7, 518: 7, 520: 8, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 680: 8, 701: 8, 703: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 736: 8, 737: 8, 746: 5, 752: 2, 754: 8, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 906: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 962: 8, 969: 4, 973: 8, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1538: 8 - }, - # Based on 0607d2516fc2148f|2019-02-13--23-03-16 - { - 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 520: 8, 528: 8, 532: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 701: 8, 703: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 746: 5, 752: 2, 754: 8, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 906: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 962: 8, 969: 4, 973: 8, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1537: 8 - }, - # Based on 3c7ce223e3571b54|2019-05-11--20-16-14 - { - 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 520: 8, 528: 8, 532: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 653: 8, 654: 8, 655: 8, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 701: 8, 703: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 746: 5, 752: 2, 754: 8, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 897: 8, 906: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 962: 8, 969: 4, 973: 8, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1562: 8, 1570: 8 - }, - # Based on "8190c7275a24557b|2020-02-24--09-57-23" - { - 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 515: 7, 516: 7, 517: 7, 518: 7, 520: 8, 524: 8, 526: 6, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 640: 1, 650: 8, 653: 8, 654: 8, 655: 8, 656: 4, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 683: 8, 701: 8, 703: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 711: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 738: 8, 746: 5, 752: 2, 754: 8, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 793: 8, 794: 8, 795: 8, 796: 8, 797: 8, 798: 8, 799: 8, 800: 8, 801: 8, 802: 8, 803: 8, 804: 8, 805: 8, 807: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 847: 1, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 886: 8, 897: 8, 906: 8, 908: 8, 924: 8, 926: 3, 929: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 962: 8, 969: 4, 973: 8, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1225: 8, 1235: 8, 1242: 8, 1246: 8, 1250: 8, 1251: 8, 1252: 8, 1258: 8, 1259: 8, 1260: 8, 1262: 8, 1284: 8, 1536: 8, 1568: 8, 1570: 8, 1856: 8, 1858: 8, 1860: 8, 1863: 8, 1865: 8, 1875: 8, 1882: 8, 1886: 8, 1890: 8, 1891: 8, 1892: 8, 1898: 8, 1899: 8, 1900: 8, 1902: 8, 2015: 8, 2016: 8, 2017: 8, 2018: 8, 2019: 8, 2020: 8, 2023: 8, 2024: 8, 2026: 8, 2027: 8, 2028: 8, 2031: 8 - }, - { - 168: 8, 257: 5, 258: 8, 264: 8, 268: 8, 270: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 291: 8, 292: 8, 294: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 368: 8, 376: 3, 384: 8, 388: 4, 448: 6, 450: 8, 456: 4, 464: 8, 469: 8, 480: 8, 500: 8, 501: 8, 512: 8, 514: 8, 515: 7, 516: 7, 517: 7, 518: 7, 520: 8, 524: 8, 526: 6, 528: 8, 532: 8, 542: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 650: 8, 653: 8, 654: 8, 655: 8, 656: 4, 658: 6, 660: 8, 669: 3, 671: 8, 672: 8, 678: 8, 680: 8, 683: 8, 701: 8, 703: 8, 704: 8, 705: 8, 706: 8, 709: 8, 710: 8, 711: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 738: 8, 746: 5, 752: 2, 754: 8, 760: 8, 764: 8, 766: 8, 770: 8, 773: 8, 779: 8, 782: 8, 784: 8, 792: 8, 793: 8, 794: 8, 795: 8, 796: 8, 797: 8, 798: 8, 799: 8, 800: 8, 801: 8, 802: 8, 803: 8, 804: 8, 805: 8, 807: 8, 808: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 832: 8, 838: 2, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 878: 8, 882: 8, 886: 8, 897: 8, 906: 8, 908: 8, 924: 8, 926: 3, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 958: 8, 959: 8, 962: 8, 969: 4, 973: 8, 974: 5, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1082: 8, 1083: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1225: 8, 1235: 8, 1242: 8, 1246: 8, 1250: 8, 1251: 8, 1252: 8, 1284: 8, 1568: 8, 1856: 8, 1858: 8, 1860: 8, 1863: 8, 1865: 8, 1875: 8, 1882: 8, 1886: 8, 1890: 8, 1891: 8, 1892: 8, 2018: 8, 2020: 8, 2026: 8, 2028: 8 - }], - CAR.JEEP_CHEROKEE: [{ - 55: 8, 168: 8, 181: 8, 256: 4, 257: 5, 258: 8, 264: 8, 268: 8, 272: 6, 273: 6, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 292: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 352: 8, 362: 8, 368: 8, 376: 3, 384: 8, 388: 4, 416: 7, 448: 6, 456: 4, 464: 8, 500: 8, 501: 8, 512: 8, 514: 8, 520: 8, 532: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 4, 571: 3, 579: 8, 584: 8, 608: 8, 618: 8, 624: 8, 625: 8, 632: 8, 639: 8, 656: 4, 658: 6, 660: 8, 671: 8, 672: 8, 676: 8, 678: 8, 680: 8, 683: 8, 684: 8, 703: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 738: 8, 746: 5, 752: 2, 754: 8, 760: 8, 761: 8, 764: 8, 766: 8, 773: 8, 776: 8, 779: 8, 782: 8, 783: 8, 784: 8, 785: 8, 788: 3, 792: 8, 799: 8, 800: 8, 804: 8, 806: 2, 808: 8, 810: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 831: 6, 832: 8, 838: 2, 840: 8, 844: 5, 847: 1, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 874: 2, 882: 8, 897: 8, 906: 8, 924: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 956: 8, 968: 8, 969: 4, 970: 8, 973: 8, 974: 5, 975: 8, 976: 8, 977: 4, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1062: 8, 1098: 8, 1100: 8, 1543: 8, 1562: 8, 1576: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 - }, - # Based on c88f65eeaee4003a|2022-08-04--15-37-16 - { - 257: 5, 258: 8, 264: 8, 268: 8, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 292: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 344: 8, 352: 8, 362: 8, 368: 8, 376: 3, 384: 8, 388: 4, 416: 7, 448: 6, 456: 4, 464: 8, 500: 8, 501: 8, 512: 8, 514: 8, 520: 8, 532: 8, 544: 8, 557: 8, 559: 8, 560: 4, 564: 4, 571: 3, 584: 8, 608: 8, 624: 8, 625: 8, 632: 8, 639: 8, 658: 6, 660: 8, 671: 8, 672: 8, 678: 8, 680: 8, 684: 8, 703: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 746: 5, 752: 2, 760: 8, 761: 8, 764: 8, 766: 8, 773: 8, 776: 8, 779: 8, 783: 8, 784: 8, 792: 8, 799: 8, 800: 8, 804: 8, 806: 2, 810: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 831: 6, 832: 8, 838: 2, 844: 5, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 882: 8, 897: 8, 924: 3, 937: 8, 947: 8, 948: 8, 969: 4, 974: 5, 977: 4, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1062: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1223: 8, 1235: 8, 1242: 8, 1252: 8, 1792: 8, 1798: 8, 1799: 8, 1810: 8, 1813: 8, 1824: 8, 1825: 8, 1840: 8, 1856: 8, 1858: 8, 1859: 8, 1860: 8, 1862: 8, 1863: 8, 1872: 8, 1875: 8, 1879: 8, 1882: 8, 1888: 8, 1892: 8, 1927: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 - }], - CAR.JEEP_CHEROKEE_2019: [{ - # Jeep Grand Cherokee 2019, including most 2020 models - 55: 8, 168: 8, 179: 8, 181: 8, 256: 4, 257: 5, 258: 8, 264: 8, 268: 8, 272: 6, 273: 6, 274: 2, 280: 8, 284: 8, 288: 7, 290: 6, 292: 8, 300: 8, 308: 8, 320: 8, 324: 8, 331: 8, 332: 8, 341: 8, 344: 8, 352: 8, 362: 8, 368: 8, 376: 3, 384: 8, 388: 4, 416: 7, 448: 6, 456: 4, 464: 8, 500: 8, 501: 8, 512: 8, 514: 8, 520: 8, 530: 8, 532: 8, 544: 8, 557: 8, 559: 8, 560: 8, 564: 8, 571: 3, 579: 8, 584: 8, 608: 8, 618: 8, 624: 8, 625: 8, 632: 8, 639: 8, 640: 1, 656: 4, 658: 6, 660: 8, 671: 8, 672: 8, 676: 8, 678: 8, 680: 8, 683: 8, 684: 8, 703: 8, 705: 8, 706: 8, 709: 8, 710: 8, 719: 8, 720: 6, 729: 5, 736: 8, 737: 8, 738: 8, 746: 5, 752: 2, 754: 8, 760: 8, 761: 8, 764: 8, 766: 8, 773: 8, 776: 8, 779: 8, 782: 8, 783: 8, 784: 8, 785: 8, 792: 8, 799: 8, 800: 8, 804: 8, 806: 2, 808: 8, 810: 8, 816: 8, 817: 8, 820: 8, 825: 2, 826: 8, 831: 6, 832: 8, 838: 2, 840: 8, 844: 5, 847: 1, 848: 8, 853: 8, 856: 4, 860: 6, 863: 8, 874: 2, 882: 8, 897: 8, 906: 8, 924: 8, 937: 8, 938: 8, 939: 8, 940: 8, 941: 8, 942: 8, 943: 8, 947: 8, 948: 8, 960: 4, 968: 8, 969: 4, 970: 8, 973: 8, 974: 5, 976: 8, 977: 4, 979: 8, 980: 8, 981: 8, 982: 8, 983: 8, 984: 8, 992: 8, 993: 7, 995: 8, 996: 8, 1000: 8, 1001: 8, 1002: 8, 1003: 8, 1008: 8, 1009: 8, 1010: 8, 1011: 8, 1012: 8, 1013: 8, 1014: 8, 1015: 8, 1024: 8, 1025: 8, 1026: 8, 1031: 8, 1033: 8, 1050: 8, 1059: 8, 1062: 8, 1098: 8, 1100: 8, 1216: 8, 1218: 8, 1220: 8, 1223: 8, 1225: 8, 1227: 8, 1235: 8, 1242: 8, 1250: 8, 1251: 8, 1252: 8, 1254: 8, 1264: 8, 1284: 8, 1536: 8, 1537: 8, 1538: 8, 1543: 8, 1545: 8, 1562: 8, 1568: 8, 1570: 8, 1572: 8, 1593: 8, 1856: 8, 1858: 8, 1860: 8, 1863: 8, 1865: 8, 1867: 8, 1875: 8, 1882: 8, 1890: 8, 1891: 8, 1892: 8, 1894: 8, 1896: 8, 1904: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 - }], -} CHRYSLER_VERSION_REQUEST = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER]) + \ p16(0xf132) @@ -191,202 +130,10 @@ FW_QUERY_CONFIG = FwQueryConfig( ), ], extra_ecus=[ - (Ecu.hybrid, 0x7e2, None), # manages transmission on hybrids - (Ecu.abs, 0x7e4, None), # alt address for abs on hybrids + (Ecu.abs, 0x7e4, None), # alt address for abs on hybrids, NOTE: not on all hybrid platforms ], ) -FW_VERSIONS = { - CAR.JEEP_CHEROKEE_2019: { - (Ecu.combinationMeter, 0x742, None): [ - b'68402971AD', - ], - (Ecu.srs, 0x744, None): [ - b'68355363AB', - ], - (Ecu.abs, 0x747, None): [ - b'68408639AD', - ], - (Ecu.fwdRadar, 0x753, None): [ - b'68456722AC', - ], - (Ecu.eps, 0x75A, None): [ - b'68453431AA', - ], - (Ecu.engine, 0x7e0, None): [ - b'05035674AB ', - ], - (Ecu.transmission, 0x7e1, None): [ - b'05035707AA', - ], - }, - - CAR.RAM_1500: { - (Ecu.combinationMeter, 0x742, None): [ - b'68294051AG', - b'68294051AI', - b'68294052AG', - b'68294063AG', - b'68294063AH', - b'68294063AI', - b'68434846AC', - b'68434858AC', - b'68434860AC', - b'68453503AC', - b'68453505AC', - b'68453511AC', - b'68453513AD', - b'68453514AD', - b'68510280AG', - b'68510283AG', - b'68527346AE', - b'68527375AD', - b'68527382AE', - ], - (Ecu.srs, 0x744, None): [ - b'68428609AB', - b'68441329AB', - b'68473844AB', - b'68490898AA', - b'68500728AA', - b'68615033AA', - b'68615034AA', - ], - (Ecu.abs, 0x747, None): [ - b'68292406AH', - b'68432418AB', - b'68432418AD', - b'68436004AD', - b'68436004AE', - b'68438454AC', - b'68438454AD', - b'68438456AE', - b'68438456AF', - b'68535469AB', - b'68535470AC', - b'68548900AB', - b'68586307AB', - ], - (Ecu.fwdRadar, 0x753, None): [ - b'04672892AB', - b'04672932AB', - b'04672932AC', - b'22DTRHD_AA', - b'68320950AH', - b'68320950AI', - b'68320950AJ', - b'68320950AL', - b'68320950AM', - b'68454268AB', - b'68475160AE', - b'68475160AF', - b'68475160AG', - ], - (Ecu.eps, 0x75A, None): [ - b'21590101AA', - b'68273275AF', - b'68273275AG', - b'68273275AH', - b'68312176AE', - b'68312176AG', - b'68440789AC', - b'68466110AB', - b'68469901AA', - b'68522583AB', - b'68522585AB', - b'68552788AA', - b'68552789AA', - b'68552790AA', - b'68585106AB', - b'68585109AB', - b'68585112AB', - ], - (Ecu.engine, 0x7e0, None): [ - b'05036065AE ', - b'05036066AE ', - b'05149592AE ', - b'05149591AD ', - b'05149846AA ', - b'05149848AA ', - b'68378701AI ', - b'68378748AL ', - b'68378758AM ', - b'68448163AJ', - b'68448165AK', - b'68500630AD', - b'68500630AE', - b'68539650AD', - ], - (Ecu.transmission, 0x7e1, None): [ - b'05149536AC', - b'68360078AL', - b'68360080AM', - b'68360081AM', - b'68360085AL', - b'68384328AD', - b'68384332AD', - b'68445533AB', - b'68484467AC', - b'68502994AD', - b'68520867AE', - b'68540431AB', - ], - }, - - CAR.RAM_HD: { - (Ecu.combinationMeter, 0x742, None): [ - b'68361606AH', - b'68437735AC', - b'68492693AD', - b'68525485AB', - b'68525487AB', - b'68525498AB', - b'68528791AF', - ], - (Ecu.srs, 0x744, None): [ - b'68399794AC', - b'68428503AA', - b'68428505AA', - b'68428507AA', - ], - (Ecu.abs, 0x747, None): [ - b'68334977AH', - b'68455481AC', - b'68504022AA', - b'68504022AB', - b'68504022AC', - b'68530686AB', - b'68530686AC', - b'68544596AC', - ], - (Ecu.fwdRadar, 0x753, None): [ - b'04672895AB', - b'04672934AB', - b'56029827AG', - b'56029827AH', - b'68462657AE', - b'68484694AD', - b'68484694AE', - ], - (Ecu.eps, 0x761, None): [ - b'68421036AC', - b'68507906AB', - b'68534023AC', - ], - (Ecu.engine, 0x7e0, None): [ - b'52370131AF', - b'52370231AF', - b'52370231AG', - b'52370931CT', - b'52401032AE', - b'52421132AF', - b'52421332AF', - b'68527616AD ', - b'M2370131MB', - b'M2421132MB', - ], - }, -} DBC = { CAR.PACIFICA_2017_HYBRID: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), @@ -394,8 +141,8 @@ DBC = { CAR.PACIFICA_2020: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), CAR.PACIFICA_2018_HYBRID: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), CAR.PACIFICA_2019_HYBRID: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), - CAR.JEEP_CHEROKEE: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), - CAR.JEEP_CHEROKEE_2019: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), + CAR.JEEP_GRAND_CHEROKEE: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), + CAR.JEEP_GRAND_CHEROKEE_2019: dbc_dict('chrysler_pacifica_2017_hybrid_generated', 'chrysler_pacifica_2017_hybrid_private_fusion'), CAR.RAM_1500: dbc_dict('chrysler_ram_dt_generated', None), CAR.RAM_HD: dbc_dict('chrysler_ram_hd_generated', None), } diff --git a/selfdrive/car/disable_ecu.py b/selfdrive/car/disable_ecu.py index c11075342c..1f731f0344 100755 --- a/selfdrive/car/disable_ecu.py +++ b/selfdrive/car/disable_ecu.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 from openpilot.selfdrive.car.isotp_parallel_query import IsoTpParallelQuery -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog EXT_DIAG_REQUEST = b'\x10\x03' EXT_DIAG_RESPONSE = b'\x50\x03' diff --git a/selfdrive/car/docs_definitions.py b/selfdrive/car/docs_definitions.py index 60f9494708..f2ce743607 100644 --- a/selfdrive/car/docs_definitions.py +++ b/selfdrive/car/docs_definitions.py @@ -114,7 +114,7 @@ class CarHarness(EnumBase): hyundai_r = BaseCarHarness("Hyundai R connector") custom = BaseCarHarness("Developer connector") obd_ii = BaseCarHarness("OBD-II connector", parts=[Cable.long_obdc_cable, Cable.long_obdc_cable], has_connector=False) - gm = BaseCarHarness("GM connector") + gm = BaseCarHarness("GM connector", parts=[Accessory.harness_box]) nissan_a = BaseCarHarness("Nissan A connector", parts=[Accessory.harness_box, Cable.rj45_cable_7ft, Cable.long_obdc_cable, Cable.usbc_coupler]) nissan_b = BaseCarHarness("Nissan B connector", parts=[Accessory.harness_box, Cable.rj45_cable_7ft, Cable.long_obdc_cable, Cable.usbc_coupler]) mazda = BaseCarHarness("Mazda connector") @@ -123,9 +123,9 @@ class CarHarness(EnumBase): class Device(EnumBase): - three = BasePart("comma three", parts=[Mount.mount, Cable.right_angle_obd_c_cable_1_5ft]) - # variant of comma three with angled mounts - three_angled_mount = BasePart("comma three", parts=[Mount.angled_mount_8_degrees, Cable.right_angle_obd_c_cable_1_5ft]) + threex = BasePart("comma 3X", parts=[Mount.mount, Cable.right_angle_obd_c_cable_1_5ft]) + # variant of comma 3X with angled mounts + threex_angled_mount = BasePart("comma 3X", parts=[Mount.angled_mount_8_degrees, Cable.right_angle_obd_c_cable_1_5ft]) red_panda = BasePart("red panda") @@ -149,7 +149,7 @@ class PartType(Enum): tool = Tool -DEFAULT_CAR_PARTS: List[EnumBase] = [Device.three] +DEFAULT_CAR_PARTS: List[EnumBase] = [Device.threex] @dataclass @@ -244,10 +244,13 @@ class CarInfo: # all the parts needed for the supported car car_parts: CarParts = field(default_factory=CarParts) + def __post_init__(self): + self.make, self.model, self.years = split_name(self.name) + self.year_list = get_year_list(self.years) + def init(self, CP: car.CarParams, all_footnotes: Dict[Enum, int]): self.car_name = CP.carName self.car_fingerprint = CP.carFingerprint - self.make, self.model, self.years = split_name(self.name) # longitudinal column op_long = "Stock" @@ -309,7 +312,6 @@ class CarInfo: self.row[Column.STEERING_TORQUE] = Star.FULL self.all_footnotes = all_footnotes - self.year_list = get_year_list(self.years) self.detail_sentence = self.get_detail_sentence(CP) return self diff --git a/selfdrive/car/ecu_addrs.py b/selfdrive/car/ecu_addrs.py index cff1df79a5..13f7926def 100755 --- a/selfdrive/car/ecu_addrs.py +++ b/selfdrive/car/ecu_addrs.py @@ -8,7 +8,7 @@ from panda.python.uds import SERVICE_TYPE from openpilot.selfdrive.car import make_can_msg from openpilot.selfdrive.car.fw_query_definitions import EcuAddrBusType from openpilot.selfdrive.boardd.boardd import can_list_to_can_capnp -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog def make_tester_present_msg(addr, bus, subaddr=None): diff --git a/selfdrive/car/fingerprints.py b/selfdrive/car/fingerprints.py index 1d627e4b37..6a7c3c75be 100644 --- a/selfdrive/car/fingerprints.py +++ b/selfdrive/car/fingerprints.py @@ -1,13 +1,12 @@ from openpilot.selfdrive.car.interfaces import get_interface_attr - FW_VERSIONS = get_interface_attr('FW_VERSIONS', combine_brands=True, ignore_none=True) _FINGERPRINTS = get_interface_attr('FINGERPRINTS', combine_brands=True, ignore_none=True) _DEBUG_ADDRESS = {1880: 8} # reserved for debug purposes -def is_valid_for_fingerprint(msg, car_fingerprint): +def is_valid_for_fingerprint(msg, car_fingerprint: dict[int, int]): adr = msg.address # ignore addresses that are more than 11 bits return (adr in car_fingerprint and car_fingerprint[adr] == len(msg.dat)) or adr >= 0x800 diff --git a/selfdrive/car/ford/carcontroller.py b/selfdrive/car/ford/carcontroller.py index b79f60b874..261119c485 100644 --- a/selfdrive/car/ford/carcontroller.py +++ b/selfdrive/car/ford/carcontroller.py @@ -4,6 +4,7 @@ from opendbc.can.packer import CANPacker from openpilot.selfdrive.car import apply_std_steer_angle_limits from openpilot.selfdrive.car.ford import fordcan from openpilot.selfdrive.car.ford.values import CANFD_CAR, CarControllerParams +from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX LongCtrlState = car.CarControl.Actuators.LongControlState VisualAlert = car.CarControl.HUDControl.VisualAlert @@ -88,9 +89,8 @@ class CarController: gas = accel if not CC.longActive or gas < CarControllerParams.MIN_GAS: gas = CarControllerParams.INACTIVE_GAS - stopping = CC.actuators.longControlState == LongCtrlState.stopping - can_sends.append(fordcan.create_acc_msg(self.packer, self.CAN, CC.longActive, gas, accel, stopping)) + can_sends.append(fordcan.create_acc_msg(self.packer, self.CAN, CC.longActive, gas, accel, stopping, v_ego_kph=V_CRUISE_MAX)) ### ui ### send_ui = (self.main_on_last != main_on) or (self.lkas_enabled_last != CC.latActive) or (self.steer_alert_last != steer_alert) diff --git a/selfdrive/car/ford/carstate.py b/selfdrive/car/ford/carstate.py index d6265fd657..e9ff8624c3 100644 --- a/selfdrive/car/ford/carstate.py +++ b/selfdrive/car/ford/carstate.py @@ -18,7 +18,7 @@ class CarState(CarStateBase): self.shifter_values = can_define.dv["Gear_Shift_by_Wire_FD1"]["TrnRng_D_RqGsm"] self.vehicle_sensors_valid = False - self.hybrid_platform = False + self.unsupported_platform = False self.lkas_enabled = None self.prev_lkas_enabled = None @@ -32,10 +32,11 @@ class CarState(CarStateBase): self.prev_lkas_enabled = self.lkas_enabled self.buttonStatesPrev = self.buttonStates.copy() - # Hybrid variants experience a bug where a message from the PCM sends invalid checksums, - # we do not support these cars at this time. + # Ford Q3 hybrid variants experience a bug where a message from the PCM sends invalid checksums, + # this must be root-caused before enabling support. Ford Q4 hybrids do not have this problem. # TrnAin_Tq_Actl and its quality flag are only set on ICE platform variants - self.hybrid_platform = cp.vl["VehicleOperatingModes"]["TrnAinTq_D_Qf"] == 0 + self.unsupported_platform = (cp.vl["VehicleOperatingModes"]["TrnAinTq_D_Qf"] == 0 and + self.CP.carFingerprint not in CANFD_CAR) # 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 diff --git a/selfdrive/car/ford/fingerprints.py b/selfdrive/car/ford/fingerprints.py new file mode 100644 index 0000000000..0085b6b9c6 --- /dev/null +++ b/selfdrive/car/ford/fingerprints.py @@ -0,0 +1,143 @@ +from cereal import car +from openpilot.selfdrive.car.ford.values import CAR + +Ecu = car.CarParams.Ecu + +FW_VERSIONS = { + CAR.BRONCO_SPORT_MK1: { + (Ecu.eps, 0x730, None): [ + b'LX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-14D003-AK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'LX6C-2D053-RD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-2D053-RE\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'M1PT-14F397-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.ESCAPE_MK4: { + (Ecu.eps, 0x730, None): [ + b'LX6C-14D003-AF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'LX6C-2D053-NS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-2D053-NT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-2D053-NY\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-2D053-SA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LX6C-2D053-SD\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'LJ6T-14F397-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LJ6T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LV4T-14F397-GG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.EXPLORER_MK6: { + (Ecu.eps, 0x730, None): [ + b'L1MC-14D003-AJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'L1MC-14D003-AK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'L1MC-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'M1MC-14D003-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'M1MC-14D003-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'P1MC-14D003-AA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'L1MC-2D053-AJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'L1MC-2D053-BA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'L1MC-2D053-BB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'L1MC-2D053-BD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'L1MC-2D053-BF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'L1MC-2D053-KB\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'LB5T-14F397-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LB5T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LB5T-14F397-AF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LC5T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LC5T-14F397-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.F_150_MK14: { + (Ecu.eps, 0x730, None): [ + b'ML3V-14D003-BC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'PL34-2D053-CA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'ML3T-14D049-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'PJ6T-14H102-ABJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.F_150_LIGHTNING_MK1: { + (Ecu.abs, 0x760, None): [ + b'PL38-2D053-AA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'ML3T-14H102-ABT\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'ML3T-14D049-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.MUSTANG_MACH_E_MK1: { + (Ecu.eps, 0x730, None): [ + b'LJ9C-14D003-AM\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LJ9C-14D003-CC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'LK9C-2D053-CK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'ML3T-14D049-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'ML3T-14H102-ABS\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.FOCUS_MK4: { + (Ecu.eps, 0x730, None): [ + b'JX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'JX61-2D053-CJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'JX7T-14D049-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'JX7T-14F397-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.MAVERICK_MK1: { + (Ecu.eps, 0x730, None): [ + b'NZ6C-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'NZ6C-2D053-AG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PZ6C-2D053-ED\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PZ6C-2D053-EE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'NZ6T-14D049-AA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'NZ6T-14F397-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, +} diff --git a/selfdrive/car/ford/fordcan.py b/selfdrive/car/ford/fordcan.py index a90a9f8f79..ef9a558c02 100644 --- a/selfdrive/car/ford/fordcan.py +++ b/selfdrive/car/ford/fordcan.py @@ -118,7 +118,7 @@ def create_lat_ctl2_msg(packer, CAN: CanBus, mode: int, path_offset: float, path return packer.make_can_msg("LateralMotionControl2", CAN.main, values) -def create_acc_msg(packer, CAN: CanBus, long_active: bool, gas: float, accel: float, stopping: bool): +def create_acc_msg(packer, CAN: CanBus, long_active: bool, gas: float, accel: float, stopping: bool, v_ego_kph: float): """ Creates a CAN message for the Ford ACC Command. @@ -127,13 +127,14 @@ def create_acc_msg(packer, CAN: CanBus, long_active: bool, gas: float, accel: fl Frequency is 50Hz. """ - decel = accel < 0 and long_active values = { "AccBrkTot_A_Rq": accel, # Brake total accel request: [-20|11.9449] m/s^2 "Cmbb_B_Enbl": 1 if long_active else 0, # Enabled: 0=No, 1=Yes "AccPrpl_A_Rq": gas, # Acceleration request: [-5|5.23] m/s^2 + "AccPrpl_A_Pred": -5.0, # Acceleration request: [-5|5.23] m/s^2 "AccResumEnbl_B_Rq": 1 if long_active else 0, + "AccVeh_V_Trg": v_ego_kph, # Target speed: [0|255] km/h # TODO: we may be able to improve braking response by utilizing pre-charging better "AccBrkPrchg_B_Rq": 1 if decel else 0, # Pre-charge brake request: 0=No, 1=Yes "AccBrkDecel_B_Rq": 1 if decel else 0, # Deceleration request: 0=Inactive, 1=Active diff --git a/selfdrive/car/ford/interface.py b/selfdrive/car/ford/interface.py index f5c67dc378..fadae1d93c 100644 --- a/selfdrive/car/ford/interface.py +++ b/selfdrive/car/ford/interface.py @@ -20,13 +20,17 @@ class CarInterface(CarInterfaceBase): @staticmethod def _get_params(ret, candidate, fingerprint, car_fw, experimental_long, docs): ret.carName = "ford" - ret.dashcamOnly = candidate in {CAR.F_150_MK14} + ret.dashcamOnly = candidate in CANFD_CAR ret.radarUnavailable = True ret.steerControlType = car.CarParams.SteerControlType.angle ret.steerActuatorDelay = 0.2 ret.steerLimitTimer = 1.0 + ret.longitudinalTuning.kpBP = [0.] + ret.longitudinalTuning.kpV = [0.5] + ret.longitudinalTuning.kiV = [0.] + CAN = CanBus(fingerprint=fingerprint) cfgs = [get_safety_config(car.CarParams.SafetyModel.ford)] if CAN.main >= 4: @@ -62,6 +66,17 @@ class CarInterface(CarInterfaceBase): ret.steerRatio = 17.0 ret.mass = 2000 + elif candidate == CAR.F_150_LIGHTNING_MK1: + # required trim only on SuperCrew + ret.wheelbase = 3.70 + ret.steerRatio = 16.9 + ret.mass = 2948 + + elif candidate == CAR.MUSTANG_MACH_E_MK1: + ret.wheelbase = 2.984 + ret.steerRatio = 17.0 # guess + ret.mass = 2200 + elif candidate == CAR.FOCUS_MK4: ret.wheelbase = 2.7 ret.steerRatio = 15.0 @@ -154,7 +169,7 @@ class CarInterface(CarInterfaceBase): if not self.CS.vehicle_sensors_valid: events.add(car.CarEvent.EventName.vehicleSensorsInvalid) - if self.CS.hybrid_platform: + if self.CS.unsupported_platform: events.add(car.CarEvent.EventName.startupNoControl) ret.events = events.to_msg() diff --git a/selfdrive/car/ford/radar_interface.py b/selfdrive/car/ford/radar_interface.py index 716c9b6e58..209bbebae3 100644 --- a/selfdrive/car/ford/radar_interface.py +++ b/selfdrive/car/ford/radar_interface.py @@ -119,17 +119,23 @@ class RadarInterface(RadarInterfaceBase): self.track_id += 1 valid = bool(msg[f"CAN_DET_VALID_LEVEL_{ii:02d}"]) - amplitude = msg[f"CAN_DET_AMPLITUDE_{ii:02d}"] # dBsm [-64|63] - if valid and 0 < amplitude <= 15: + if valid: azimuth = msg[f"CAN_DET_AZIMUTH_{ii:02d}"] # rad [-3.1416|3.13964] dist = msg[f"CAN_DET_RANGE_{ii:02d}"] # m [0|255.984] distRate = msg[f"CAN_DET_RANGE_RATE_{ii:02d}"] # m/s [-128|127.984] + dRel = cos(azimuth) * dist # m from front of car + yRel = -sin(azimuth) * dist # in car frame's y axis, left is positive - # *** openpilot radar point *** - self.pts[i].dRel = cos(azimuth) * dist # m from front of car - self.pts[i].yRel = -sin(azimuth) * dist # in car frame's y axis, left is positive - self.pts[i].vRel = distRate # m/s + # delphi doesn't notify of track switches, so do it manually + # TODO: refactor this to radard if more radars behave this way + if abs(self.pts[i].vRel - distRate) > 2 or abs(self.pts[i].dRel - dRel) > 5: + self.track_id += 1 + self.pts[i].trackId = self.track_id + + self.pts[i].dRel = dRel + self.pts[i].yRel = yRel + self.pts[i].vRel = distRate self.pts[i].measured = True diff --git a/selfdrive/car/ford/tests/test_ford.py b/selfdrive/car/ford/tests/test_ford.py index e645b4cbe6..dff29629f6 100755 --- a/selfdrive/car/ford/tests/test_ford.py +++ b/selfdrive/car/ford/tests/test_ford.py @@ -6,7 +6,8 @@ from typing import Dict, Iterable, Optional, Tuple import capnp from cereal import car -from openpilot.selfdrive.car.ford.values import FW_QUERY_CONFIG, FW_VERSIONS +from openpilot.selfdrive.car.ford.values import FW_QUERY_CONFIG +from openpilot.selfdrive.car.ford.fingerprints import FW_VERSIONS Ecu = car.CarParams.Ecu @@ -51,7 +52,7 @@ class TestFordFW(unittest.TestCase): @parameterized.expand(FW_VERSIONS.items()) def test_fw_versions(self, car_model: str, fw_versions: Dict[Tuple[capnp.lib.capnp._EnumModule, int, Optional[int]], Iterable[bytes]]): for (ecu, addr, subaddr), fws in fw_versions.items(): - self.assertIn(ecu, ECU_ADDRESSES, "Unknown ECU") + self.assertIn(ecu, ECU_FW_CORE, "Unexpected ECU") self.assertEqual(addr, ECU_ADDRESSES[ecu], "ECU address mismatch") self.assertIsNone(subaddr, "Unexpected ECU subaddress") diff --git a/selfdrive/car/ford/values.py b/selfdrive/car/ford/values.py index 67ea1d1811..092a6d47ee 100644 --- a/selfdrive/car/ford/values.py +++ b/selfdrive/car/ford/values.py @@ -1,12 +1,12 @@ from collections import defaultdict -from dataclasses import dataclass, field -from enum import Enum +from dataclasses import dataclass +from enum import Enum, StrEnum from typing import Dict, List, Union from cereal import car from openpilot.selfdrive.car import AngleRateLimit, dbc_dict from openpilot.selfdrive.car.docs_definitions import CarFootnote, CarHarness, CarInfo, CarParts, Column, \ - Device + Device from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries Ecu = car.CarParams.Ecu @@ -50,16 +50,18 @@ BUTTON_STATES = { } -class CAR: +class CAR(StrEnum): BRONCO_SPORT_MK1 = "FORD BRONCO SPORT 1ST GEN" ESCAPE_MK4 = "FORD ESCAPE 4TH GEN" EXPLORER_MK6 = "FORD EXPLORER 6TH GEN" F_150_MK14 = "FORD F-150 14TH GEN" FOCUS_MK4 = "FORD FOCUS 4TH GEN" MAVERICK_MK1 = "FORD MAVERICK 1ST GEN" + F_150_LIGHTNING_MK1 = "FORD F-150 LIGHTNING 1ST GEN" + MUSTANG_MACH_E_MK1 = "FORD MUSTANG MACH-E 1ST GEN" -CANFD_CAR = {CAR.F_150_MK14} +CANFD_CAR = {CAR.F_150_MK14, CAR.F_150_LIGHTNING_MK1, CAR.MUSTANG_MACH_E_MK1} class RADAR: @@ -71,6 +73,8 @@ DBC: Dict[str, Dict[str, str]] = defaultdict(lambda: dbc_dict("ford_lincoln_base # F-150 radar is not yet supported DBC[CAR.F_150_MK14] = dbc_dict("ford_lincoln_base_pt", None) +DBC[CAR.F_150_LIGHTNING_MK1] = dbc_dict("ford_lincoln_base_pt", None) +DBC[CAR.MUSTANG_MACH_E_MK1] = dbc_dict("ford_lincoln_base_pt", None) class Footnote(Enum): @@ -84,11 +88,13 @@ class Footnote(Enum): @dataclass class FordCarInfo(CarInfo): package: str = "Co-Pilot360 Assist+" - car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.ford_q3])) def init_make(self, CP: car.CarParams): - if CP.carFingerprint in (CAR.BRONCO_SPORT_MK1, CAR.MAVERICK_MK1): - self.car_parts = CarParts([Device.three_angled_mount, CarHarness.ford_q3]) + harness = CarHarness.ford_q4 if CP.carFingerprint in CANFD_CAR else CarHarness.ford_q3 + if CP.carFingerprint in (CAR.BRONCO_SPORT_MK1, CAR.MAVERICK_MK1, CAR.F_150_MK14): + self.car_parts = CarParts([Device.threex_angled_mount, harness]) + else: + self.car_parts = CarParts([Device.threex, harness]) CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { @@ -98,10 +104,12 @@ CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { FordCarInfo("Ford Kuga 2020-22", "Adaptive Cruise Control with Lane Centering"), ], CAR.EXPLORER_MK6: [ - FordCarInfo("Ford Explorer 2020-22"), + FordCarInfo("Ford Explorer 2020-23"), FordCarInfo("Lincoln Aviator 2020-21", "Co-Pilot360 Plus"), ], CAR.F_150_MK14: FordCarInfo("Ford F-150 2023", "Co-Pilot360 Active 2.0"), + CAR.F_150_LIGHTNING_MK1: FordCarInfo("Ford F-150 Lightning 2021-23", "Co-Pilot360 Active 2.0"), + CAR.MUSTANG_MACH_E_MK1: FordCarInfo("Ford Mustang Mach-E 2021-23", "Co-Pilot360 Active 2.0"), CAR.FOCUS_MK4: FordCarInfo("Ford Focus 2018", "Adaptive Cruise Control with Lane Centering", footnotes=[Footnote.FOCUS]), CAR.MAVERICK_MK1: [ FordCarInfo("Ford Maverick 2022", "LARIAT Luxury"), @@ -113,170 +121,15 @@ FW_QUERY_CONFIG = FwQueryConfig( requests=[ # CAN and CAN FD queries are combined. # FIXME: For CAN FD, ECUs respond with frames larger than 8 bytes on the powertrain bus - # TODO: properly handle auxiliary requests to separate queries and add back whitelists Request( [StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], [StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], - # whitelist_ecus=[Ecu.engine], - ), - Request( - [StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], - [StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], - # whitelist_ecus=[Ecu.eps, Ecu.abs, Ecu.fwdRadar, Ecu.fwdCamera, Ecu.shiftByWire], bus=0, auxiliary=True, ), ], extra_ecus=[ + (Ecu.engine, 0x7e0, None), (Ecu.shiftByWire, 0x732, None), ], ) - -FW_VERSIONS = { - CAR.BRONCO_SPORT_MK1: { - (Ecu.eps, 0x730, None): [ - b'LX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-14D003-AK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'LX6C-2D053-RD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-2D053-RE\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'M1PT-14F397-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7E0, None): [ - b'M1PA-14C204-GF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'N1PA-14C204-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'N1PA-14C204-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.ESCAPE_MK4: { - (Ecu.eps, 0x730, None): [ - b'LX6C-14D003-AF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'LX6C-2D053-NS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-2D053-NT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-2D053-NY\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-2D053-SA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6C-2D053-SD\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'LJ6T-14F397-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LJ6T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LV4T-14F397-GG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7E0, None): [ - b'LX6A-14C204-BJV\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6A-14C204-BJX\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6A-14C204-CNG\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6A-14C204-DPK\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LX6A-14C204-ESG\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'MX6A-14C204-BEF\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'MX6A-14C204-BEJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'MX6A-14C204-CAB\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'NX6A-14C204-BLE\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.EXPLORER_MK6: { - (Ecu.eps, 0x730, None): [ - b'L1MC-14D003-AJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'L1MC-14D003-AK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'L1MC-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'M1MC-14D003-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'M1MC-14D003-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'L1MC-2D053-AJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'L1MC-2D053-BA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'L1MC-2D053-BB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'L1MC-2D053-BF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'L1MC-2D053-KB\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'LB5T-14F397-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LB5T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LB5T-14F397-AF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LC5T-14F397-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7E0, None): [ - b'LB5A-14C204-ATJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LB5A-14C204-AUJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LB5A-14C204-AZL\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LB5A-14C204-BUJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'LB5A-14C204-EAC\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'MB5A-14C204-MD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'MB5A-14C204-RC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'NB5A-14C204-AZD\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'NB5A-14C204-HB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.F_150_MK14: { - (Ecu.eps, 0x730, None): [ - b'ML3V-14D003-BC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'PL34-2D053-CA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'ML3T-14D049-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'PJ6T-14H102-ABJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7E0, None): [ - b'PL3A-14C204-BRB\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.FOCUS_MK4: { - (Ecu.eps, 0x730, None): [ - b'JX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'JX61-2D053-CJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'JX7T-14D049-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'JX7T-14F397-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7E0, None): [ - b'JX6A-14C204-BPL\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.MAVERICK_MK1: { - (Ecu.eps, 0x730, None): [ - b'NZ6C-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'NZ6C-2D053-AG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PZ6C-2D053-ED\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'NZ6T-14D049-AA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'NZ6T-14F397-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7E0, None): [ - b'NZ6A-14C204-AAA\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'NZ6A-14C204-PA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'NZ6A-14C204-ZA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PZ6A-14C204-BE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PZ6A-14C204-JC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, -} diff --git a/selfdrive/car/fw_query_definitions.py b/selfdrive/car/fw_query_definitions.py index 1caedcd321..8ff0bd47c4 100755 --- a/selfdrive/car/fw_query_definitions.py +++ b/selfdrive/car/fw_query_definitions.py @@ -9,6 +9,12 @@ import panda.python.uds as uds AddrType = Tuple[int, Optional[int]] EcuAddrBusType = Tuple[int, Optional[int], int] +EcuAddrSubAddr = Tuple[int, int, Optional[int]] + +LiveFwVersions = Dict[AddrType, Set[bytes]] +OfflineFwVersions = Dict[str, Dict[EcuAddrSubAddr, List[bytes]]] + +STANDARD_VIN_ADDRS = [0x7e0, 0x7e2, 0x18da10f1, 0x18da0ef1] # engine, VMCU, 29-bit engine, PGM-FI def p16(val): @@ -53,6 +59,9 @@ class StdQueries: UDS_VIN_REQUEST = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER]) + p16(uds.DATA_IDENTIFIER_TYPE.VIN) UDS_VIN_RESPONSE = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER + 0x40]) + p16(uds.DATA_IDENTIFIER_TYPE.VIN) + GM_VIN_REQUEST = b'\x1a\x90' + GM_VIN_RESPONSE = b'\x5a\x90' + @dataclass class Request: @@ -79,7 +88,7 @@ class FwQueryConfig: extra_ecus: List[Tuple[capnp.lib.capnp._EnumModule, int, Optional[int]]] = field(default_factory=list) # Function a brand can implement to provide better fuzzy matching. Takes in FW versions, # returns set of candidates. Only will match if one candidate is returned - match_fw_to_car_fuzzy: Optional[Callable[[Dict[AddrType, Set[bytes]]], Set[str]]] = None + match_fw_to_car_fuzzy: Optional[Callable[[LiveFwVersions, OfflineFwVersions], Set[str]]] = None def __post_init__(self): for i in range(len(self.requests)): @@ -87,3 +96,13 @@ class FwQueryConfig: new_request = copy.deepcopy(self.requests[i]) new_request.bus += 4 self.requests.append(new_request) + + def get_all_ecus(self, offline_fw_versions: OfflineFwVersions, + include_extra_ecus: bool = True) -> set[EcuAddrSubAddr]: + # Add ecus in database + extra ecus + brand_ecus = {ecu for ecus in offline_fw_versions.values() for ecu in ecus} + + if include_extra_ecus: + brand_ecus |= set(self.extra_ecus) + + return brand_ecus diff --git a/selfdrive/car/fw_versions.py b/selfdrive/car/fw_versions.py index 45c4967cb8..44607d8357 100755 --- a/selfdrive/car/fw_versions.py +++ b/selfdrive/car/fw_versions.py @@ -8,17 +8,17 @@ import panda.python.uds as uds from cereal import car from openpilot.common.params import Params from openpilot.selfdrive.car.ecu_addrs import get_ecu_addrs -from openpilot.selfdrive.car.fw_query_definitions import AddrType, EcuAddrBusType +from openpilot.selfdrive.car.fw_query_definitions import AddrType, EcuAddrBusType, FwQueryConfig from openpilot.selfdrive.car.interfaces import get_interface_attr from openpilot.selfdrive.car.fingerprints import FW_VERSIONS from openpilot.selfdrive.car.isotp_parallel_query import IsoTpParallelQuery -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog Ecu = car.CarParams.Ecu ESSENTIAL_ECUS = [Ecu.engine, Ecu.eps, Ecu.abs, Ecu.fwdRadar, Ecu.fwdCamera, Ecu.vsa] FUZZY_EXCLUDE_ECUS = [Ecu.fwdCamera, Ecu.fwdRadar, Ecu.eps, Ecu.debug] -FW_QUERY_CONFIGS = get_interface_attr('FW_QUERY_CONFIG', ignore_none=True) +FW_QUERY_CONFIGS: dict[str, FwQueryConfig] = get_interface_attr('FW_QUERY_CONFIG', ignore_none=True) VERSIONS = get_interface_attr('FW_VERSIONS', ignore_none=True) MODEL_TO_BRAND = {c: b for b, e in VERSIONS.items() for c in e} @@ -45,16 +45,6 @@ def build_fw_dict(fw_versions: List[capnp.lib.capnp._DynamicStructBuilder], return dict(fw_versions_dict) -def get_brand_addrs() -> Dict[str, Set[AddrType]]: - brand_addrs: DefaultDict[str, Set[AddrType]] = defaultdict(set) - for brand, cars in VERSIONS.items(): - # Add ecus in database + extra ecus to match against - brand_addrs[brand] |= {(addr, sub_addr) for _, addr, sub_addr in FW_QUERY_CONFIGS[brand].extra_ecus} - for fw in cars.values(): - brand_addrs[brand] |= {(addr, sub_addr) for _, addr, sub_addr in fw.keys()} - return dict(brand_addrs) - - def match_fw_to_car_fuzzy(live_fw_versions, match_brand=None, log=True, exclude=None): """Do a fuzzy FW match. This function will return a match, and the number of firmware version that were matched uniquely to that specific car. If multiple ECUs uniquely match to different cars @@ -105,11 +95,14 @@ def match_fw_to_car_fuzzy(live_fw_versions, match_brand=None, log=True, exclude= return set() -def match_fw_to_car_exact(live_fw_versions, match_brand=None, log=True) -> Set[str]: +def match_fw_to_car_exact(live_fw_versions, match_brand=None, log=True, extra_fw_versions=None) -> Set[str]: """Do an exact FW match. Returns all cars that match the given FW versions for a list of "essential" ECUs. If an ECU is not considered essential the FW version can be missing to get a fingerprint, but if it's present it needs to match the database.""" + if extra_fw_versions is None: + extra_fw_versions = {} + invalid = set() candidates = {c: f for c, f in FW_VERSIONS.items() if is_brand(MODEL_TO_BRAND[c], match_brand)} @@ -117,12 +110,14 @@ def match_fw_to_car_exact(live_fw_versions, match_brand=None, log=True) -> Set[s for candidate, fws in candidates.items(): config = FW_QUERY_CONFIGS[MODEL_TO_BRAND[candidate]] for ecu, expected_versions in fws.items(): + expected_versions = expected_versions + extra_fw_versions.get(candidate, {}).get(ecu, []) ecu_type = ecu[0] addr = ecu[1:] found_versions = live_fw_versions.get(addr, set()) if not len(found_versions): # Some models can sometimes miss an ecu, or show on two different addresses + # FIXME: this logic can be improved to be more specific, should require one of the two addresses if candidate in config.non_essential_ecus.get(ecu_type, []): continue @@ -159,7 +154,7 @@ def match_fw_to_car(fw_versions, allow_exact=True, allow_fuzzy=True, log=True): # If specified and no matches so far, fall back to brand's fuzzy fingerprinting function config = FW_QUERY_CONFIGS[brand] if not exact_match and not len(matches) and config.match_fw_to_car_fuzzy is not None: - matches |= config.match_fw_to_car_fuzzy(fw_versions_dict) + matches |= config.match_fw_to_car_fuzzy(fw_versions_dict, VERSIONS[brand]) if len(matches): return exact_match, matches @@ -179,22 +174,21 @@ def get_present_ecus(logcan, sendcan, num_pandas=1) -> Set[EcuAddrBusType]: if r.bus > num_pandas * 4 - 1: continue - for brand_versions in VERSIONS[brand].values(): - for ecu_type, addr, sub_addr in list(brand_versions) + config.extra_ecus: - # Only query ecus in whitelist if whitelist is not empty - if len(r.whitelist_ecus) == 0 or ecu_type in r.whitelist_ecus: - a = (addr, sub_addr, r.bus) - # Build set of queries - if sub_addr is None: - if a not in parallel_queries[r.obd_multiplexing]: - parallel_queries[r.obd_multiplexing].append(a) - else: # subaddresses must be queried one by one - if [a] not in queries[r.obd_multiplexing]: - queries[r.obd_multiplexing].append([a]) + for ecu_type, addr, sub_addr in config.get_all_ecus(VERSIONS[brand]): + # Only query ecus in whitelist if whitelist is not empty + if len(r.whitelist_ecus) == 0 or ecu_type in r.whitelist_ecus: + a = (addr, sub_addr, r.bus) + # Build set of queries + if sub_addr is None: + if a not in parallel_queries[r.obd_multiplexing]: + parallel_queries[r.obd_multiplexing].append(a) + else: # subaddresses must be queried one by one + if [a] not in queries[r.obd_multiplexing]: + queries[r.obd_multiplexing].append([a]) - # Build set of expected responses to filter - response_addr = uds.get_rx_addr_for_tx_addr(addr, r.rx_offset) - responses.add((response_addr, sub_addr, r.bus)) + # Build set of expected responses to filter + response_addr = uds.get_rx_addr_for_tx_addr(addr, r.rx_offset) + responses.add((response_addr, sub_addr, r.bus)) for obd_multiplexing in queries: queries[obd_multiplexing].insert(0, parallel_queries[obd_multiplexing]) @@ -207,11 +201,12 @@ def get_present_ecus(logcan, sendcan, num_pandas=1) -> Set[EcuAddrBusType]: return ecu_responses -def get_brand_ecu_matches(ecu_rx_addrs): +def get_brand_ecu_matches(ecu_rx_addrs: Set[EcuAddrBusType]) -> dict[str, set[AddrType]]: """Returns dictionary of brands and matches with ECUs in their FW versions""" - brand_addrs = get_brand_addrs() - brand_matches = {brand: set() for brand, _, _ in REQUESTS} + brand_addrs = {brand: {(addr, subaddr) for _, addr, subaddr in config.get_all_ecus(VERSIONS[brand])} for + brand, config in FW_QUERY_CONFIGS.items()} + brand_matches: dict[str, set[AddrType]] = {brand: set() for brand, _, _ in REQUESTS} brand_rx_offsets = {(brand, r.rx_offset) for brand, _, r in REQUESTS} for addr, sub_addr, _ in ecu_rx_addrs: @@ -275,27 +270,25 @@ def get_fw_versions(logcan, sendcan, query_brand=None, extra=None, timeout=0.1, for brand, brand_versions in versions.items(): config = FW_QUERY_CONFIGS[brand] - for ecu in brand_versions.values(): - # Each brand can define extra ECUs to query for data collection - for ecu_type, addr, sub_addr in list(ecu) + config.extra_ecus: - a = (brand, addr, sub_addr) - if a not in ecu_types: - ecu_types[a] = ecu_type + for ecu_type, addr, sub_addr in config.get_all_ecus(brand_versions): + a = (brand, addr, sub_addr) + if a not in ecu_types: + ecu_types[a] = ecu_type - if sub_addr is None: - if a not in parallel_addrs: - parallel_addrs.append(a) - else: - if [a] not in addrs: - addrs.append([a]) + if sub_addr is None: + if a not in parallel_addrs: + parallel_addrs.append(a) + else: + if [a] not in addrs: + addrs.append([a]) addrs.insert(0, parallel_addrs) # Get versions and build capnp list to put into CarParams car_fw = [] requests = [(brand, config, r) for brand, config, r in REQUESTS if is_brand(brand, query_brand)] - for addr in tqdm(addrs, disable=not progress): - for addr_chunk in chunks(addr): + for addr_group in tqdm(addrs, disable=not progress): # split by subaddr, if any + for addr_chunk in chunks(addr_group): for brand, config, r in requests: # Skip query if no panda available if r.bus > num_pandas * 4 - 1: @@ -350,6 +343,13 @@ if __name__ == "__main__": pandaStates_sock = messaging.sub_sock('pandaStates') sendcan = messaging.pub_sock('sendcan') + # Set up params for boardd + params = Params() + params.remove("FirmwareQueryDone") + params.put_bool("IsOnroad", False) + time.sleep(0.2) # thread is 10 Hz + params.put_bool("IsOnroad", True) + extra: Any = None if args.scan: extra = {} @@ -360,13 +360,12 @@ if __name__ == "__main__": extra[(Ecu.unknown, 0x750, i)] = [] extra = {"any": {"debug": extra}} - time.sleep(1.) num_pandas = len(messaging.recv_one_retry(pandaStates_sock).pandaStates) t = time.time() print("Getting vin...") - vin_rx_addr, vin = get_vin(logcan, sendcan, 1, retry=10, debug=args.debug) - print(f'RX: {hex(vin_rx_addr)}, VIN: {vin}') + vin_rx_addr, vin_rx_bus, vin = get_vin(logcan, sendcan, (0, 1), retry=10, debug=args.debug) + print(f'RX: {hex(vin_rx_addr)}, BUS: {vin_rx_bus}, VIN: {vin}') print(f"Getting VIN took {time.time() - t:.3f} s") print() diff --git a/selfdrive/car/gm/carcontroller.py b/selfdrive/car/gm/carcontroller.py index 6b027777f0..7ea84f3fb7 100644 --- a/selfdrive/car/gm/carcontroller.py +++ b/selfdrive/car/gm/carcontroller.py @@ -154,21 +154,6 @@ class CarController: if self.frame % 10 == 0: can_sends.append(gmcan.create_pscm_status(self.packer_pt, CanBus.CAMERA, CS.pscm_status)) - # Show green icon when LKA torque is applied, and - # alarming orange icon when approaching torque limit. - # If not sent again, LKA icon disappears in about 5 seconds. - # Conveniently, sending camera message periodically also works as a keepalive. - lka_active = CS.lkas_status == 1 - lka_critical = lka_active and abs(actuators.steer) > 0.9 - lka_icon_status = (lka_active, lka_critical) - - # SW_GMLAN not yet on cam harness, no HUD alerts - if self.CP.networkLocation != NetworkLocation.fwdCamera and \ - (self.frame % self.params.CAMERA_KEEPALIVE_STEP == 0 or lka_icon_status != self.lka_icon_status_last): - steer_alert = hud_alert in (VisualAlert.steerRequired, VisualAlert.ldw) - can_sends.append(gmcan.create_lka_icon_command(CanBus.SW_GMLAN, lka_active, lka_critical, steer_alert)) - self.lka_icon_status_last = lka_icon_status - new_actuators = actuators.copy() new_actuators.steer = self.apply_steer_last / self.params.STEER_MAX new_actuators.steerOutputCan = self.apply_steer_last diff --git a/selfdrive/car/gm/carstate.py b/selfdrive/car/gm/carstate.py index 58e428e9fb..da24fd2c6b 100644 --- a/selfdrive/car/gm/carstate.py +++ b/selfdrive/car/gm/carstate.py @@ -37,7 +37,9 @@ class CarState(CarStateBase): self.buttons_counter = pt_cp.vl["ASCMSteeringButton"]["RollingCounter"] self.gap_dist_button = pt_cp.vl["ASCMSteeringButton"]["DistanceButton"] self.pscm_status = copy.copy(pt_cp.vl["PSCMStatus"]) - self.moving_backward = pt_cp.vl["EBCMWheelSpdRear"]["MovingBackward"] != 0 + # This is to avoid a fault where you engage while still moving backwards after shifting to D. + # An Equinox has been seen with an unsupported status (3), so only check if either wheel is in reverse (2) + self.moving_backward = (pt_cp.vl["EBCMWheelSpdRear"]["RLWheelDir"] == 2) or (pt_cp.vl["EBCMWheelSpdRear"]["RRWheelDir"] == 2) self.prev_mads_enabled = self.mads_enabled self.prev_lkas_enabled = self.lkas_enabled @@ -121,6 +123,10 @@ class CarState(CarStateBase): if self.CP.pcmCruise: ret.cruiseState.nonAdaptive = cam_cp.vl["ASCMActiveCruiseControlStatus"]["ACCCruiseState"] not in (2, 3) + if self.CP.enableBsm: + ret.leftBlindspot = pt_cp.vl["BCMBlindSpotMonitor"]["LeftBSM"] == 1 + ret.rightBlindspot = pt_cp.vl["BCMBlindSpotMonitor"]["RightBSM"] == 1 + return ret @staticmethod @@ -154,6 +160,9 @@ class CarState(CarStateBase): ("ECMAcceleratorPos", 80), ] + if CP.enableBsm: + messages.append(("BCMBlindSpotMonitor", 10)) + # Used to read back last counter sent to PT by camera if CP.networkLocation == NetworkLocation.fwdCamera: messages += [ diff --git a/selfdrive/car/gm/fingerprints.py b/selfdrive/car/gm/fingerprints.py new file mode 100644 index 0000000000..c349ee2856 --- /dev/null +++ b/selfdrive/car/gm/fingerprints.py @@ -0,0 +1,59 @@ +# ruff: noqa: E501 +from openpilot.selfdrive.car.gm.values import CAR + +# Trailblazer also matches as a SILVERADO, TODO: split with fw versions + + +FINGERPRINTS = { + CAR.HOLDEN_ASTRA: [{ + 190: 8, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 8, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 8, 398: 8, 401: 8, 413: 8, 417: 8, 419: 8, 422: 1, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 8, 455: 7, 456: 8, 458: 5, 479: 8, 481: 7, 485: 8, 489: 8, 497: 8, 499: 3, 500: 8, 501: 8, 508: 8, 528: 5, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 647: 5, 707: 8, 715: 8, 723: 8, 753: 5, 761: 7, 806: 1, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1009: 8, 1011: 6, 1017: 8, 1019: 3, 1020: 8, 1105: 6, 1217: 8, 1221: 5, 1225: 8, 1233: 8, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 8, 1280: 4, 1300: 8, 1328: 4, 1417: 8, 1906: 7, 1907: 7, 1908: 7, 1912: 7, 1919: 7 + }], + CAR.VOLT: [{ + 170: 8, 171: 8, 189: 7, 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 288: 5, 289: 8, 298: 8, 304: 1, 308: 4, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 389: 2, 390: 7, 417: 7, 419: 1, 426: 7, 451: 8, 452: 8, 453: 6, 454: 8, 456: 8, 479: 3, 481: 7, 485: 8, 489: 8, 493: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 528: 4, 532: 6, 546: 7, 550: 8, 554: 3, 558: 8, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 566: 5, 567: 3, 568: 1, 573: 1, 577: 8, 647: 3, 707: 8, 711: 6, 715: 8, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 961: 8, 969: 8, 977: 8, 979: 7, 988: 6, 989: 8, 995: 7, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1105: 6, 1187: 4, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1227: 4, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1273: 3, 1275: 3, 1280: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1905: 7, 1906: 7, 1907: 7, 1910: 7, 1912: 7, 1922: 7, 1927: 7, 1928: 7, 2016: 8, 2020: 8, 2024: 8, 2028: 8 + }, + { + 170: 8, 171: 8, 189: 7, 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 288: 5, 298: 8, 304: 1, 308: 4, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 389: 2, 390: 7, 417: 7, 419: 1, 426: 7, 451: 8, 452: 8, 453: 6, 454: 8, 456: 8, 479: 3, 481: 7, 485: 8, 489: 8, 493: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 528: 4, 532: 6, 546: 7, 550: 8, 554: 3, 558: 8, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 566: 5, 567: 3, 568: 1, 573: 1, 577: 8, 578: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 3, 707: 8, 711: 6, 715: 8, 717: 5, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 967: 4, 969: 8, 977: 8, 979: 7, 988: 6, 989: 8, 995: 7, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1187: 4, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1227: 4, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1273: 3, 1275: 3, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1516: 8, 1601: 8, 1618: 8, 1905: 7, 1906: 7, 1907: 7, 1910: 7, 1912: 7, 1922: 7, 1927: 7, 1930: 7, 2016: 8, 2018: 8, 2020: 8, 2024: 8, 2028: 8 + }, + { + 170: 8, 171: 8, 189: 7, 190: 6, 192: 5, 193: 8, 197: 8, 199: 4, 201: 6, 209: 7, 211: 2, 241: 6, 288: 5, 289: 1, 290: 1, 298: 2, 304: 1, 308: 4, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 368: 8, 381: 2, 384: 8, 386: 5, 388: 8, 389: 2, 390: 7, 417: 7, 419: 1, 426: 7, 451: 8, 452: 8, 453: 6, 454: 8, 456: 8, 458: 8, 479: 3, 481: 7, 485: 8, 489: 5, 493: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 3, 508: 8, 512: 3, 528: 4, 530: 8, 532: 6, 537: 5, 539: 8, 542: 7, 546: 7, 550: 8, 554: 3, 558: 8, 560: 6, 562: 4, 563: 5, 564: 5, 565: 5, 566: 5, 567: 3, 568: 1, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 3, 707: 8, 711: 6, 761: 7, 810: 8, 821: 4, 823: 7, 832: 8, 840: 5, 842: 5, 844: 8, 853: 8, 866: 4, 961: 8, 967: 4, 969: 8, 977: 8, 979: 7, 988: 6, 989: 8, 995: 7, 1001: 5, 1003: 5, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1187: 4, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1227: 4, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1273: 3, 1275: 3, 1280: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1905: 7, 1906: 7, 1907: 7, 1910: 7, 1912: 7, 1922: 7, 1927: 7 + }], + CAR.BUICK_LACROSSE: [{ + 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 353: 3, 381: 6, 386: 8, 388: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 463: 3, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 503: 1, 508: 8, 510: 8, 528: 5, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 5, 707: 8, 753: 5, 761: 7, 801: 8, 804: 3, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 872: 1, 882: 8, 890: 1, 892: 2, 893: 1, 894: 1, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1011: 6, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1022: 1, 1105: 6, 1217: 8, 1221: 5, 1223: 2, 1225: 7, 1233: 8, 1243: 3, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1280: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1609: 8, 1613: 8, 1649: 8, 1792: 8, 1798: 8, 1824: 8, 1825: 8, 1840: 8, 1842: 8, 1858: 8, 1860: 8, 1863: 8, 1872: 8, 1875: 8, 1882: 8, 1888: 8, 1889: 8, 1892: 8, 1904: 7, 1906: 7, 1907: 7, 1912: 7, 1913: 7, 1914: 7, 1916: 7, 1918: 7, 1919: 7, 1937: 8, 1953: 8, 1968: 8, 2001: 8, 2017: 8, 2018: 8, 2020: 8, 2026: 8 + }], + CAR.BUICK_REGAL: [{ + 190: 8, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 8, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 8, 419: 8, 422: 4, 426: 8, 431: 8, 442: 8, 451: 8, 452: 8, 453: 8, 455: 7, 456: 8, 463: 3, 479: 8, 481: 7, 485: 8, 487: 8, 489: 8, 495: 8, 497: 8, 499: 3, 500: 8, 501: 8, 508: 8, 528: 5, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 569: 3, 573: 1, 577: 8, 578: 8, 579: 8, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 3, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 882: 8, 884: 8, 890: 1, 892: 2, 893: 2, 894: 1, 961: 8, 967: 8, 969: 8, 977: 8, 979: 8, 985: 8, 1001: 8, 1005: 6, 1009: 8, 1011: 8, 1013: 3, 1017: 8, 1020: 8, 1024: 8, 1025: 8, 1026: 8, 1027: 8, 1028: 8, 1029: 8, 1030: 8, 1031: 8, 1032: 2, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 8, 1225: 7, 1233: 8, 1249: 8, 1257: 6, 1259: 8, 1261: 8, 1263: 8, 1265: 8, 1267: 8, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1601: 8, 1602: 8, 1603: 7, 1611: 8, 1618: 8, 1906: 8, 1907: 7, 1912: 7, 1914: 7, 1916: 7, 1919: 7, 1930: 7, 2016: 8, 2018: 8, 2019: 8, 2024: 8, 2026: 8 + }], + CAR.CADILLAC_ATS: [{ + 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 368: 3, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 401: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 462: 4, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 491: 2, 493: 8, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 528: 5, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 719: 5, 723: 2, 753: 5, 761: 7, 801: 8, 804: 3, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 882: 8, 890: 1, 892: 2, 893: 2, 894: 1, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1011: 6, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1233: 8, 1241: 3, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1904: 7, 1906: 7, 1907: 7, 1912: 7, 1916: 7, 1917: 7, 1918: 7, 1919: 7, 1920: 7, 1930: 7, 2016: 8, 2024: 8 + }], + CAR.MALIBU: [{ + 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 528: 5, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 2, 1225: 7, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1906: 7, 1907: 7, 1912: 7, 1919: 7, 1930: 7, 2016: 8, 2024: 8 + }], + CAR.ACADIA: [{ + 190: 6, 192: 5, 193: 8, 197: 8, 199: 4, 201: 6, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 289: 1, 290: 1, 298: 8, 304: 8, 309: 8, 313: 8, 320: 8, 322: 7, 328: 1, 352: 7, 368: 8, 381: 8, 384: 8, 386: 8, 388: 8, 393: 8, 398: 8, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 454: 8, 455: 7, 458: 8, 460: 4, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 489: 5, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 512: 3, 530: 8, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 567: 5, 568: 2, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 801: 8, 803: 8, 804: 3, 805: 8, 832: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1003: 5, 1005: 6, 1009: 8, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1225: 8, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1906: 7, 1907: 7, 1912: 7, 1914: 7, 1918: 7, 1919: 7, 1920: 7, 1930: 7 + }, + { + 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 289: 8, 298: 8, 304: 1, 309: 8, 313: 8, 320: 3, 322: 7, 328: 1, 338: 6, 340: 6, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 393: 8, 398: 8, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 454: 8, 455: 7, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 567: 5, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1225: 8, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1601: 8, 1906: 7, 1907: 7, 1912: 7, 1914: 7, 1919: 7, 1920: 7, 1930: 7, 2016: 8, 2024: 8 + }], + CAR.ESCALADE: [{ + 170: 8, 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 407: 4, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 454: 8, 455: 7, 460: 5, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 719: 5, 761: 7, 801: 8, 804: 3, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 2, 1225: 7, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1609: 8, 1613: 8, 1649: 8, 1792: 8, 1798: 8, 1824: 8, 1825: 8, 1840: 8, 1842: 8, 1858: 8, 1860: 8, 1863: 8, 1872: 8, 1875: 8, 1882: 8, 1888: 8, 1889: 8, 1892: 8, 1906: 7, 1907: 7, 1912: 7, 1914: 7, 1917: 7, 1918: 7, 1919: 7, 1920: 7, 1930: 7, 1937: 8, 1953: 8, 1968: 8, 2001: 8, 2017: 8, 2018: 8, 2020: 8, 2026: 8 + }], + CAR.ESCALADE_ESV: [{ + 309: 1, 848: 8, 849: 8, 850: 8, 851: 8, 852: 8, 853: 8, 854: 3, 1056: 6, 1057: 8, 1058: 8, 1059: 8, 1060: 8, 1061: 8, 1062: 8, 1063: 8, 1064: 8, 1065: 8, 1066: 8, 1067: 8, 1068: 8, 1120: 8, 1121: 8, 1122: 8, 1123: 8, 1124: 8, 1125: 8, 1126: 8, 1127: 8, 1128: 8, 1129: 8, 1130: 8, 1131: 8, 1132: 8, 1133: 8, 1134: 8, 1135: 8, 1136: 8, 1137: 8, 1138: 8, 1139: 8, 1140: 8, 1141: 8, 1142: 8, 1143: 8, 1146: 8, 1147: 8, 1148: 8, 1149: 8, 1150: 8, 1151: 8, 1216: 8, 1217: 8, 1218: 8, 1219: 8, 1220: 8, 1221: 8, 1222: 8, 1223: 8, 1224: 8, 1225: 8, 1226: 8, 1232: 8, 1233: 8, 1234: 8, 1235: 8, 1236: 8, 1237: 8, 1238: 8, 1239: 8, 1240: 8, 1241: 8, 1242: 8, 1787: 8, 1788: 8 + }], + CAR.ESCALADE_ESV_2019: [{ + 715: 8, 840: 5, 717: 5, 869: 4, 880: 6, 289: 8, 454: 8, 842: 5, 460: 5, 463: 3, 801: 8, 170: 8, 190: 6, 241: 6, 201: 8, 417: 7, 211: 2, 419: 1, 398: 8, 426: 7, 487: 8, 442: 8, 451: 8, 452: 8, 453: 6, 479: 3, 311: 8, 500: 6, 647: 6, 193: 8, 707: 8, 197: 8, 209: 7, 199: 4, 455: 7, 313: 8, 481: 7, 485: 8, 489: 8, 249: 8, 393: 7, 407: 7, 413: 8, 422: 4, 431: 8, 501: 8, 499: 3, 810: 8, 508: 8, 381: 8, 462: 4, 532: 6, 562: 8, 386: 8, 761: 7, 573: 1, 554: 3, 719: 5, 560: 8, 1279: 4, 388: 8, 288: 5, 1005: 6, 497: 8, 844: 8, 961: 8, 967: 4, 977: 8, 979: 8, 985: 5, 1001: 8, 1017: 8, 1019: 2, 1020: 8, 1217: 8, 510: 8, 866: 4, 304: 1, 969: 8, 384: 4, 1033: 7, 1009: 8, 1034: 7, 1296: 4, 1930: 7, 1105: 5, 1013: 5, 1225: 7, 1919: 7, 320: 3, 534: 2, 352: 5, 298: 8, 1223: 2, 1233: 8, 608: 8, 1265: 8, 609: 6, 1267: 1, 1417: 8, 610: 6, 1906: 7, 611: 6, 612: 8, 613: 8, 208: 8, 564: 5, 309: 8, 1221: 5, 1280: 4, 1249: 8, 1907: 7, 1257: 6, 1300: 8, 1920: 7, 563: 5, 1322: 6, 1323: 4, 1328: 4, 1917: 7, 328: 1, 1912: 7, 1914: 7, 804: 3, 1918: 7 + }], + CAR.BOLT_EUV: [{ + 189: 7, 190: 7, 193: 8, 197: 8, 201: 8, 209: 7, 211: 3, 241: 6, 257: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 451: 8, 452: 8, 453: 6, 458: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 566: 8, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1017: 8, 1020: 8, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1265: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 + }], + CAR.SILVERADO: [{ + 190: 6, 193: 8, 197: 8, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 460: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 534: 2, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 761: 7, 789: 5, 800: 6, 801: 8, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 + }], + CAR.EQUINOX: [{ + 190: 6, 193: 8, 197: 8, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 8, 288: 5, 289: 8, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 510: 8, 528: 5, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 + }], +} + +FW_VERSIONS: dict[str, dict[tuple, list[bytes]]] = { +} diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py index df6900f5ff..fd874cfd79 100755 --- a/selfdrive/car/gm/interface.py +++ b/selfdrive/car/gm/interface.py @@ -1,13 +1,15 @@ #!/usr/bin/env python3 +import os from cereal import car from math import fabs, exp from panda import Panda +from openpilot.common.basedir import BASEDIR from openpilot.common.conversions import Conversions as CV from openpilot.selfdrive.car import create_button_events, get_safety_config, create_mads_event from openpilot.selfdrive.car.gm.radar_interface import RADAR_HEADER_MSG from openpilot.selfdrive.car.gm.values import CAR, CruiseButtons, CarControllerParams, EV_CAR, CAMERA_ACC_CAR, CanBus -from openpilot.selfdrive.car.interfaces import CarInterfaceBase, TorqueFromLateralAccelCallbackType, FRICTION_THRESHOLD +from openpilot.selfdrive.car.interfaces import CarInterfaceBase, TorqueFromLateralAccelCallbackType, FRICTION_THRESHOLD, LatControlInputs, NanoFFModel from openpilot.selfdrive.controls.lib.drive_helpers import get_friction ButtonType = car.CarState.ButtonEvent.Type @@ -25,6 +27,8 @@ NON_LINEAR_TORQUE_PARAMS = { CAR.SILVERADO: [3.29974374, 1.0, 0.25571356, 0.0465122] } +NEURAL_PARAMS_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/neural_ff_weights.json') + class CarInterface(CarInterfaceBase): @staticmethod @@ -44,8 +48,8 @@ class CarInterface(CarInterfaceBase): else: return CarInterfaceBase.get_steer_feedforward_default - def torque_from_lateral_accel_siglin(self, lateral_accel_value: float, torque_params: car.CarParams.LateralTorqueTuning, - lateral_accel_error: float, lateral_accel_deadzone: float, friction_compensation: bool) -> float: + def torque_from_lateral_accel_siglin(self, latcontrol_inputs: LatControlInputs, torque_params: car.CarParams.LateralTorqueTuning, lateral_accel_error: float, + lateral_accel_deadzone: float, friction_compensation: bool, gravity_adjusted: bool) -> float: friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation) def sig(val): @@ -58,11 +62,22 @@ class CarInterface(CarInterfaceBase): non_linear_torque_params = NON_LINEAR_TORQUE_PARAMS.get(self.CP.carFingerprint) assert non_linear_torque_params, "The params are not defined" a, b, c, _ = non_linear_torque_params - steer_torque = (sig(lateral_accel_value * a) * b) + (lateral_accel_value * c) + steer_torque = (sig(latcontrol_inputs.lateral_acceleration * a) * b) + (latcontrol_inputs.lateral_acceleration * c) return float(steer_torque) + friction + def torque_from_lateral_accel_neural(self, latcontrol_inputs: LatControlInputs, torque_params: car.CarParams.LateralTorqueTuning, lateral_accel_error: float, + lateral_accel_deadzone: float, friction_compensation: bool, gravity_adjusted: bool) -> float: + friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation) + inputs = list(latcontrol_inputs) + if gravity_adjusted: + inputs[0] += inputs[1] + return float(self.neural_ff_model.predict(inputs)) + friction + def torque_from_lateral_accel(self) -> TorqueFromLateralAccelCallbackType: - if self.CP.carFingerprint in NON_LINEAR_TORQUE_PARAMS: + if self.CP.carFingerprint == CAR.BOLT_EUV: + self.neural_ff_model = NanoFFModel(NEURAL_PARAMS_PATH, self.CP.carFingerprint) + return self.torque_from_lateral_accel_neural + elif self.CP.carFingerprint in NON_LINEAR_TORQUE_PARAMS: return self.torque_from_lateral_accel_siglin else: return self.torque_from_lateral_accel_linear @@ -72,6 +87,7 @@ class CarInterface(CarInterfaceBase): ret.carName = "gm" ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.gm)] ret.autoResumeSng = False + ret.enableBsm = 0x142 in fingerprint[CanBus.POWERTRAIN] if candidate in EV_CAR: ret.transmissionType = TransmissionType.direct @@ -198,17 +214,22 @@ class CarInterface(CarInterfaceBase): ret.centerToFront = ret.wheelbase * 0.5 CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) - elif candidate == CAR.ESCALADE_ESV: + elif candidate in (CAR.ESCALADE_ESV, CAR.ESCALADE_ESV_2019): ret.minEnableSpeed = -1. # engage speed is decided by pcm ret.mass = 2739. ret.wheelbase = 3.302 ret.steerRatio = 17.3 ret.centerToFront = ret.wheelbase * 0.5 - ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[10., 41.0], [10., 41.0]] - ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.13, 0.24], [0.01, 0.02]] - ret.lateralTuning.pid.kf = 0.000045 ret.tireStiffnessFactor = 1.0 + if candidate == CAR.ESCALADE_ESV: + ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[10., 41.0], [10., 41.0]] + ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.13, 0.24], [0.01, 0.02]] + ret.lateralTuning.pid.kf = 0.000045 + else: + ret.steerActuatorDelay = 0.2 + CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) + elif candidate == CAR.BOLT_EUV: ret.mass = 1669. ret.wheelbase = 2.63779 diff --git a/selfdrive/car/gm/tests/test_gm.py b/selfdrive/car/gm/tests/test_gm.py index fce5fea720..2aea5b231b 100755 --- a/selfdrive/car/gm/tests/test_gm.py +++ b/selfdrive/car/gm/tests/test_gm.py @@ -2,7 +2,8 @@ from parameterized import parameterized import unittest -from openpilot.selfdrive.car.gm.values import CAMERA_ACC_CAR, CAR, FINGERPRINTS, GM_RX_OFFSET +from openpilot.selfdrive.car.gm.fingerprints import FINGERPRINTS +from openpilot.selfdrive.car.gm.values import CAMERA_ACC_CAR, CAR, GM_RX_OFFSET CAMERA_DIAGNOSTIC_ADDRESS = 0x24b diff --git a/selfdrive/car/gm/values.py b/selfdrive/car/gm/values.py index d12c21dc23..8188ad4e6e 100644 --- a/selfdrive/car/gm/values.py +++ b/selfdrive/car/gm/values.py @@ -1,12 +1,13 @@ -# ruff: noqa: E501 from collections import defaultdict from dataclasses import dataclass -from enum import Enum +from enum import Enum, StrEnum from typing import Dict, List, Union from cereal import car from openpilot.selfdrive.car import dbc_dict from openpilot.selfdrive.car.docs_definitions import CarFootnote, CarHarness, CarInfo, CarParts, Column +from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries + Ecu = car.CarParams.Ecu @@ -61,7 +62,7 @@ class CarControllerParams: self.BRAKE_LOOKUP_V = [self.MAX_BRAKE, 0.] -class CAR: +class CAR(StrEnum): HOLDEN_ASTRA = "HOLDEN ASTRA RS-V BK 2017" VOLT = "CHEVROLET VOLT PREMIER 2017" CADILLAC_ATS = "CADILLAC ATS Premium Performance 2018" @@ -71,6 +72,7 @@ class CAR: BUICK_REGAL = "BUICK REGAL ESSENCE 2018" ESCALADE = "CADILLAC ESCALADE 2017" ESCALADE_ESV = "CADILLAC ESCALADE ESV 2016" + ESCALADE_ESV_2019 = "CADILLAC ESCALADE ESV 2019" BOLT_EUV = "CHEVROLET BOLT EUV 2022" SILVERADO = "CHEVROLET SILVERADO 1500 2020" EQUINOX = "CHEVROLET EQUINOX 2019" @@ -106,6 +108,7 @@ CAR_INFO: Dict[str, Union[GMCarInfo, List[GMCarInfo]]] = { CAR.BUICK_REGAL: GMCarInfo("Buick Regal Essence 2018"), CAR.ESCALADE: GMCarInfo("Cadillac Escalade 2017", "Driver Assist Package"), CAR.ESCALADE_ESV: GMCarInfo("Cadillac Escalade ESV 2016", "Adaptive Cruise Control (ACC) & LKAS"), + CAR.ESCALADE_ESV_2019: GMCarInfo("Cadillac Escalade ESV 2019", "Adaptive Cruise Control (ACC) & LKAS"), CAR.BOLT_EUV: [ GMCarInfo("Chevrolet Bolt EUV 2022-23", "Premier or Premier Redline Trim without Super Cruise Package", video_link="https://youtu.be/xvwzGMUA210"), GMCarInfo("Chevrolet Bolt EV 2022-23", "2LT Trim with Adaptive Cruise Control Package"), @@ -138,88 +141,46 @@ class CanBus: OBSTACLE = 1 CAMERA = 2 CHASSIS = 2 - SW_GMLAN = 3 LOOPBACK = 128 DROPPED = 192 -FINGERPRINTS = { - CAR.HOLDEN_ASTRA: [ - # Astra BK MY17, ASCM unplugged - { - 190: 8, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 8, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 8, 398: 8, 401: 8, 413: 8, 417: 8, 419: 8, 422: 1, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 8, 455: 7, 456: 8, 458: 5, 479: 8, 481: 7, 485: 8, 489: 8, 497: 8, 499: 3, 500: 8, 501: 8, 508: 8, 528: 5, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 647: 5, 707: 8, 715: 8, 723: 8, 753: 5, 761: 7, 806: 1, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1009: 8, 1011: 6, 1017: 8, 1019: 3, 1020: 8, 1105: 6, 1217: 8, 1221: 5, 1225: 8, 1233: 8, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 8, 1280: 4, 1300: 8, 1328: 4, 1417: 8, 1906: 7, 1907: 7, 1908: 7, 1912: 7, 1919: 7, - }], - CAR.VOLT: [ - # Volt Premier w/ ACC 2017 - { - 170: 8, 171: 8, 189: 7, 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 288: 5, 289: 8, 298: 8, 304: 1, 308: 4, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 389: 2, 390: 7, 417: 7, 419: 1, 426: 7, 451: 8, 452: 8, 453: 6, 454: 8, 456: 8, 479: 3, 481: 7, 485: 8, 489: 8, 493: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 528: 4, 532: 6, 546: 7, 550: 8, 554: 3, 558: 8, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 566: 5, 567: 3, 568: 1, 573: 1, 577: 8, 647: 3, 707: 8, 711: 6, 715: 8, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 961: 8, 969: 8, 977: 8, 979: 7, 988: 6, 989: 8, 995: 7, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1105: 6, 1187: 4, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1227: 4, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1273: 3, 1275: 3, 1280: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1905: 7, 1906: 7, 1907: 7, 1910: 7, 1912: 7, 1922: 7, 1927: 7, 1928: 7, 2016: 8, 2020: 8, 2024: 8, 2028: 8 - }, - # Volt Premier w/ ACC 2018 - { - 170: 8, 171: 8, 189: 7, 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 288: 5, 298: 8, 304: 1, 308: 4, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 389: 2, 390: 7, 417: 7, 419: 1, 426: 7, 451: 8, 452: 8, 453: 6, 454: 8, 456: 8, 479: 3, 481: 7, 485: 8, 489: 8, 493: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 528: 4, 532: 6, 546: 7, 550: 8, 554: 3, 558: 8, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 566: 5, 567: 3, 568: 1, 573: 1, 577: 8, 578: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 3, 707: 8, 711: 6, 715: 8, 717: 5, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 967: 4, 969: 8, 977: 8, 979: 7, 988: 6, 989: 8, 995: 7, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1187: 4, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1227: 4, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1273: 3, 1275: 3, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1516: 8, 1601: 8, 1618: 8, 1905: 7, 1906: 7, 1907: 7, 1910: 7, 1912: 7, 1922: 7, 1927: 7, 1930: 7, 2016: 8, 2018: 8, 2020: 8, 2024: 8, 2028: 8 - }, - # Volt Premier 2018 w/ flashed firmware, no radar - { - 170: 8, 171: 8, 189: 7, 190: 6, 192: 5, 193: 8, 197: 8, 199: 4, 201: 6, 209: 7, 211: 2, 241: 6, 288: 5, 289: 1, 290: 1, 298: 2, 304: 1, 308: 4, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 368: 8, 381: 2, 384: 8, 386: 5, 388: 8, 389: 2, 390: 7, 417: 7, 419: 1, 426: 7, 451: 8, 452: 8, 453: 6, 454: 8, 456: 8, 458: 8, 479: 3, 481: 7, 485: 8, 489: 5, 493: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 3, 508: 8, 512: 3, 528: 4, 530: 8, 532: 6, 537: 5, 539: 8, 542: 7, 546: 7, 550: 8, 554: 3, 558: 8, 560: 6, 562: 4, 563: 5, 564: 5, 565: 5, 566: 5, 567: 3, 568: 1, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 3, 707: 8, 711: 6, 761: 7, 810: 8, 821: 4, 823: 7, 832: 8, 840: 5, 842: 5, 844: 8, 853: 8, 866: 4, 961: 8, 967: 4, 969: 8, 977: 8, 979: 7, 988: 6, 989: 8, 995: 7, 1001: 5, 1003: 5, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1187: 4, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1227: 4, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1273: 3, 1275: 3, 1280: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1905: 7, 1906: 7, 1907: 7, 1910: 7, 1912: 7, 1922: 7, 1927: 7 - }], - CAR.BUICK_LACROSSE: [ - # LaCrosse Premium AWD 2017 - { - 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 353: 3, 381: 6, 386: 8, 388: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 463: 3, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 503: 1, 508: 8, 510: 8, 528: 5, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 5, 707: 8, 753: 5, 761: 7, 801: 8, 804: 3, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 872: 1, 882: 8, 890: 1, 892: 2, 893: 1, 894: 1, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1011: 6, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1022: 1, 1105: 6, 1217: 8, 1221: 5, 1223: 2, 1225: 7, 1233: 8, 1243: 3, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1280: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1609: 8, 1613: 8, 1649: 8, 1792: 8, 1798: 8, 1824: 8, 1825: 8, 1840: 8, 1842: 8, 1858: 8, 1860: 8, 1863: 8, 1872: 8, 1875: 8, 1882: 8, 1888: 8, 1889: 8, 1892: 8, 1904: 7, 1906: 7, 1907: 7, 1912: 7, 1913: 7, 1914: 7, 1916: 7, 1918: 7, 1919: 7, 1937: 8, 1953: 8, 1968: 8, 2001: 8, 2017: 8, 2018: 8, 2020: 8, 2026: 8 - }], - CAR.BUICK_REGAL : [ - # Regal TourX Essence w/ ACC 2018 - { - 190: 8, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 8, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 8, 419: 8, 422: 4, 426: 8, 431: 8, 442: 8, 451: 8, 452: 8, 453: 8, 455: 7, 456: 8, 463: 3, 479: 8, 481: 7, 485: 8, 487: 8, 489: 8, 495: 8, 497: 8, 499: 3, 500: 8, 501: 8, 508: 8, 528: 5, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 569: 3, 573: 1, 577: 8, 578: 8, 579: 8, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 3, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 882: 8, 884: 8, 890: 1, 892: 2, 893: 2, 894: 1, 961: 8, 967: 8, 969: 8, 977: 8, 979: 8, 985: 8, 1001: 8, 1005: 6, 1009: 8, 1011: 8, 1013: 3, 1017: 8, 1020: 8, 1024: 8, 1025: 8, 1026: 8, 1027: 8, 1028: 8, 1029: 8, 1030: 8, 1031: 8, 1032: 2, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 8, 1225: 7, 1233: 8, 1249: 8, 1257: 6, 1259: 8, 1261: 8, 1263: 8, 1265: 8, 1267: 8, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1601: 8, 1602: 8, 1603: 7, 1611: 8, 1618: 8, 1906: 8, 1907: 7, 1912: 7, 1914: 7, 1916: 7, 1919: 7, 1930: 7, 2016: 8, 2018: 8, 2019: 8, 2024: 8, 2026: 8 - }], - CAR.CADILLAC_ATS: [ - # Cadillac ATS Coupe Premium Performance 3.6L RWD w/ ACC 2018 - { - 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 368: 3, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 401: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 462: 4, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 491: 2, 493: 8, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 528: 5, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 719: 5, 723: 2, 753: 5, 761: 7, 801: 8, 804: 3, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 882: 8, 890: 1, 892: 2, 893: 2, 894: 1, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1011: 6, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1233: 8, 1241: 3, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1904: 7, 1906: 7, 1907: 7, 1912: 7, 1916: 7, 1917: 7, 1918: 7, 1919: 7, 1920: 7, 1930: 7, 2016: 8, 2024: 8 - }], - CAR.MALIBU: [ - # Malibu Premier w/ ACC 2017 - { - 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 455: 7, 456: 8, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 528: 5, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 565: 5, 567: 5, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 2, 1225: 7, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1601: 8, 1906: 7, 1907: 7, 1912: 7, 1919: 7, 1930: 7, 2016: 8, 2024: 8, - }], - CAR.ACADIA: [ - # Acadia Denali w/ACC 2018 - { - 190: 6, 192: 5, 193: 8, 197: 8, 199: 4, 201: 6, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 289: 1, 290: 1, 298: 8, 304: 8, 309: 8, 313: 8, 320: 8, 322: 7, 328: 1, 352: 7, 368: 8, 381: 8, 384: 8, 386: 8, 388: 8, 393: 8, 398: 8, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 454: 8, 455: 7, 458: 8, 460: 4, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 489: 5, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 512: 3, 530: 8, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 567: 5, 568: 2, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 801: 8, 803: 8, 804: 3, 805: 8, 832: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1003: 5, 1005: 6, 1009: 8, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1225: 8, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1906: 7, 1907: 7, 1912: 7, 1914: 7, 1918: 7, 1919: 7, 1920: 7, 1930: 7 - }, - # Acadia Denali w/ /ACC 2018 - { - 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 289: 8, 298: 8, 304: 1, 309: 8, 313: 8, 320: 3, 322: 7, 328: 1, 338: 6, 340: 6, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 393: 8, 398: 8, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 454: 8, 455: 7, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 567: 5, 573: 1, 577: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1225: 8, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1601: 8, 1906: 7, 1907: 7, 1912: 7, 1914: 7, 1919: 7, 1920: 7, 1930: 7, 2016: 8, 2024: 8 - }], - CAR.ESCALADE: [ - { - 170: 8, 190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 407: 4, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 454: 8, 455: 7, 460: 5, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 497: 8, 499: 3, 500: 6, 501: 8, 508: 8, 510: 8, 532: 6, 534: 2, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 573: 1, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 647: 6, 707: 8, 715: 8, 717: 5, 719: 5, 761: 7, 801: 8, 804: 3, 810: 8, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 880: 6, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1017: 8, 1019: 2, 1020: 8, 1033: 7, 1034: 7, 1105: 6, 1217: 8, 1221: 5, 1223: 2, 1225: 7, 1233: 8, 1249: 8, 1257: 6, 1265: 8, 1267: 1, 1280: 4, 1296: 4, 1300: 8, 1322: 6, 1323: 4, 1328: 4, 1417: 8, 1609: 8, 1613: 8, 1649: 8, 1792: 8, 1798: 8, 1824: 8, 1825: 8, 1840: 8, 1842: 8, 1858: 8, 1860: 8, 1863: 8, 1872: 8, 1875: 8, 1882: 8, 1888: 8, 1889: 8, 1892: 8, 1906: 7, 1907: 7, 1912: 7, 1914: 7, 1917: 7, 1918: 7, 1919: 7, 1920: 7, 1930: 7, 1937: 8, 1953: 8, 1968: 8, 2001: 8, 2017: 8, 2018: 8, 2020: 8, 2026: 8 - }], - CAR.ESCALADE_ESV: [ - { - 309: 1, 848: 8, 849: 8, 850: 8, 851: 8, 852: 8, 853: 8, 854: 3, 1056: 6, 1057: 8, 1058: 8, 1059: 8, 1060: 8, 1061: 8, 1062: 8, 1063: 8, 1064: 8, 1065: 8, 1066: 8, 1067: 8, 1068: 8, 1120: 8, 1121: 8, 1122: 8, 1123: 8, 1124: 8, 1125: 8, 1126: 8, 1127: 8, 1128: 8, 1129: 8, 1130: 8, 1131: 8, 1132: 8, 1133: 8, 1134: 8, 1135: 8, 1136: 8, 1137: 8, 1138: 8, 1139: 8, 1140: 8, 1141: 8, 1142: 8, 1143: 8, 1146: 8, 1147: 8, 1148: 8, 1149: 8, 1150: 8, 1151: 8, 1216: 8, 1217: 8, 1218: 8, 1219: 8, 1220: 8, 1221: 8, 1222: 8, 1223: 8, 1224: 8, 1225: 8, 1226: 8, 1232: 8, 1233: 8, 1234: 8, 1235: 8, 1236: 8, 1237: 8, 1238: 8, 1239: 8, 1240: 8, 1241: 8, 1242: 8, 1787: 8, 1788: 8 - }], - CAR.BOLT_EUV: [ - { - 189: 7, 190: 7, 193: 8, 197: 8, 201: 8, 209: 7, 211: 3, 241: 6, 257: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 451: 8, 452: 8, 453: 6, 458: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 566: 8, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1017: 8, 1020: 8, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1265: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 - }], - CAR.SILVERADO: [ - { - 190: 6, 193: 8, 197: 8, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 460: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 534: 2, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 761: 7, 789: 5, 800: 6, 801: 8, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 - }], - CAR.EQUINOX: [ - { - 190: 6, 193: 8, 197: 8, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 8, 288: 5, 289: 8, 298: 8, 304: 1, 309: 8, 311: 8, 313: 8, 320: 3, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 510: 8, 528: 5, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7 - }], - # Trailblazer also matches as a Silverado, so comment out to avoid conflicts. - # TODO: split with FW versions - # CAR.TRAILBLAZER: [ - # { - # 190: 6, 193: 8, 197: 8, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 707: 8, 715: 8, 717: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1609: 8, 1611: 8, 1613: 8, 1649: 8, 1792: 8, 1798: 8, 1824: 8, 1825: 8, 1840: 8, 1842: 8, 1858: 8, 1860: 8, 1863: 8, 1872: 8, 1875: 8, 1882: 8, 1888: 8, 1889: 8, 1892: 8, 1930: 7, 1937: 8, 1953: 8, 1968: 8, 2001: 8, 2017: 8, 2018: 8, 2020: 8 - # }], -} + +# In a Data Module, an identifier is a string used to recognize an object, +# either by itself or together with the identifiers of parent objects. +# Each returns a 4 byte hex representation of the decimal part number. `b"\x02\x8c\xf0'"` -> 42790951 +GM_SOFTWARE_MODULE_1_REQUEST = b'\x1a\xc1' +GM_SOFTWARE_MODULE_2_REQUEST = b'\x1a\xc2' +GM_SOFTWARE_MODULE_3_REQUEST = b'\x1a\xc3' +# This DID is for identifying the part number that reflects the mix of hardware, +# software, and calibrations in the ECU when it first arrives at the vehicle assembly plant. +# If there's an Alpha Code, it's associated with this part number and stored in the DID $DB. +GM_END_MODEL_PART_NUMBER_REQUEST = b'\x1a\xcb' +GM_BASE_MODEL_PART_NUMBER_REQUEST = b'\x1a\xcc' +GM_FW_RESPONSE = b'\x5a' + +GM_FW_REQUESTS = [ + GM_SOFTWARE_MODULE_1_REQUEST, + GM_SOFTWARE_MODULE_2_REQUEST, + GM_SOFTWARE_MODULE_3_REQUEST, + GM_END_MODEL_PART_NUMBER_REQUEST, + GM_BASE_MODEL_PART_NUMBER_REQUEST, +] GM_RX_OFFSET = 0x400 +FW_QUERY_CONFIG = FwQueryConfig( + requests=[request for req in GM_FW_REQUESTS for request in [ + Request( + [StdQueries.SHORT_TESTER_PRESENT_REQUEST, req], + [StdQueries.SHORT_TESTER_PRESENT_RESPONSE, GM_FW_RESPONSE + bytes([req[-1]])], + rx_offset=GM_RX_OFFSET, + bus=0, + logging=True, + ), + ]], + extra_ecus=[(Ecu.fwdCamera, 0x24b, None)], +) + DBC: Dict[str, Dict[str, str]] = defaultdict(lambda: dbc_dict('gm_global_a_powertrain_generated', 'gm_global_a_object', chassis_dbc='gm_global_a_chassis')) EV_CAR = {CAR.VOLT, CAR.BOLT_EUV} diff --git a/selfdrive/car/honda/carcontroller.py b/selfdrive/car/honda/carcontroller.py index 959688bd5e..6d78fb3ebf 100644 --- a/selfdrive/car/honda/carcontroller.py +++ b/selfdrive/car/honda/carcontroller.py @@ -4,7 +4,7 @@ from cereal import car import cereal.messaging as messaging from openpilot.common.conversions import Conversions as CV from openpilot.common.numpy_fast import clip, interp -from openpilot.common.params import Params, put_bool_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL from opendbc.can.packer import CANPacker from openpilot.selfdrive.car import create_gas_interceptor_command @@ -172,7 +172,7 @@ class CarController: self.m_tsc = self.sm['longitudinalPlanSP'].turnSpeed if self.frame % 200 == 0: - self.speed_limit_control_enabled = self.param_s.get_bool("SpeedLimitControl") + self.speed_limit_control_enabled = self.param_s.get_bool("EnableSlc") self.is_metric = self.param_s.get_bool("IsMetric") self.last_speed_limit_sign_tap = self.param_s.get_bool("LastSpeedLimitSignTap") self.v_cruise_min = HONDA_V_CRUISE_MIN[self.is_metric] * (CV.KPH_TO_MPH if not self.is_metric else 1) @@ -213,7 +213,7 @@ class CarController: if not self.CP.pcmCruiseSpeed: if not self.last_speed_limit_sign_tap_prev and self.last_speed_limit_sign_tap: self.sl_force_active_timer = self.frame - put_bool_nonblocking("LastSpeedLimitSignTap", False) + self.param_s.put_bool_nonblocking("LastSpeedLimitSignTap", False) self.last_speed_limit_sign_tap_prev = self.last_speed_limit_sign_tap sl_force_active = self.speed_limit_control_enabled and (self.frame < (self.sl_force_active_timer * DT_CTRL + 2.0)) diff --git a/selfdrive/car/honda/carstate.py b/selfdrive/car/honda/carstate.py index 34fed58b3a..f34fe4008f 100644 --- a/selfdrive/car/honda/carstate.py +++ b/selfdrive/car/honda/carstate.py @@ -238,7 +238,7 @@ class CarState(CarStateBase): ret.brakePressed = (cp.vl["POWERTRAIN_DATA"]["BRAKE_PRESSED"] != 0) or self.brake_switch_active ret.brake = cp.vl["VSA_STATUS"]["USER_BRAKE"] - ret.cruiseState.enabled = cp.vl["POWERTRAIN_DATA"]["ACC_STATUS"] != 0 + ret.cruiseState.enabled = self.pcm_cruise_enabled = cp.vl["POWERTRAIN_DATA"]["ACC_STATUS"] != 0 ret.cruiseState.available = bool(cp.vl[self.main_on_sig_msg]["MAIN_ON"]) # Gets rid of Pedal Grinding noise when brake is pressed at slow speeds for some models @@ -248,11 +248,11 @@ class CarState(CarStateBase): if self.CP.carFingerprint in (CAR.CIVIC, CAR.ODYSSEY, CAR.ODYSSEY_CHN, CAR.CRV_5G, CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E): - ret.brakeLights = bool(cp.vl["ACC_CONTROL"]['BRAKE_LIGHTS'] != 0 or ret.brake > 0.4) if not self.CP.openpilotLongitudinalControl else \ + ret.brakeLightsDEPRECATED = bool(cp.vl["ACC_CONTROL"]['BRAKE_LIGHTS'] != 0 or ret.brake > 0.4) if not self.CP.openpilotLongitudinalControl else \ bool(ret.brake > 0.4) elif self.CP.carFingerprint in HONDA_BOSCH and self.CP.carFingerprint not in (CAR.CIVIC, CAR.ODYSSEY, CAR.ODYSSEY_CHN, CAR.CRV_5G, CAR.ACCORD, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G, CAR.HONDA_E) and self.CP.carFingerprint not in HONDA_BOSCH_RADARLESS: - ret.brakeLights = bool(cp.vl["ACC_CONTROL"]['BRAKE_LIGHTS'] != 0 or ret.brake > 0.4) if not self.CP.openpilotLongitudinalControl else \ + ret.brakeLightsDEPRECATED = bool(cp.vl["ACC_CONTROL"]['BRAKE_LIGHTS'] != 0 or ret.brake > 0.4) if not self.CP.openpilotLongitudinalControl else \ bool(ret.brake > 0.4) if self.CP.carFingerprint in HONDA_BOSCH: diff --git a/selfdrive/car/honda/fingerprints.py b/selfdrive/car/honda/fingerprints.py new file mode 100644 index 0000000000..77fa14fc33 --- /dev/null +++ b/selfdrive/car/honda/fingerprints.py @@ -0,0 +1,1477 @@ +from cereal import car +from openpilot.selfdrive.car.honda.values import CAR + +Ecu = car.CarParams.Ecu + +# Modified FW can be identified by the second dash being replaced by a comma +# For example: `b'39990-TVA,A150\x00\x00'` +# +# TODO: vsa is "essential" for fpv2 but doesn't appear on some CAR.FREED models + + +FW_VERSIONS = { + CAR.ACCORD: { + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-6A0-8720\x00\x00', + b'37805-6A0-9520\x00\x00', + b'37805-6A0-9620\x00\x00', + b'37805-6A0-9720\x00\x00', + b'37805-6A0-A540\x00\x00', + b'37805-6A0-A550\x00\x00', + b'37805-6A0-A640\x00\x00', + b'37805-6A0-A650\x00\x00', + b'37805-6A0-A740\x00\x00', + b'37805-6A0-A750\x00\x00', + b'37805-6A0-A840\x00\x00', + b'37805-6A0-A850\x00\x00', + b'37805-6A0-A930\x00\x00', + b'37805-6A0-AF30\x00\x00', + b'37805-6A0-AG30\x00\x00', + b'37805-6A0-AJ10\x00\x00', + b'37805-6A0-C540\x00\x00', + b'37805-6A0-CG20\x00\x00', + b'37805-6A1-H650\x00\x00', + b'37805-6B2-A550\x00\x00', + b'37805-6B2-A560\x00\x00', + b'37805-6B2-A650\x00\x00', + b'37805-6B2-A660\x00\x00', + b'37805-6B2-A720\x00\x00', + b'37805-6B2-A810\x00\x00', + b'37805-6B2-A820\x00\x00', + b'37805-6B2-A920\x00\x00', + b'37805-6B2-AA10\x00\x00', + b'37805-6B2-C520\x00\x00', + b'37805-6B2-C540\x00\x00', + b'37805-6B2-M520\x00\x00', + b'37805-6B2-Y810\x00\x00', + b'37805-6M4-B730\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TVC-A910\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-6A7-A220\x00\x00', + b'28101-6A7-A230\x00\x00', + b'28101-6A7-A320\x00\x00', + b'28101-6A7-A330\x00\x00', + b'28101-6A7-A410\x00\x00', + b'28101-6A7-A510\x00\x00', + b'28101-6A7-A610\x00\x00', + b'28101-6A7-A710\x00\x00', + b'28101-6A9-H140\x00\x00', + b'28101-6A9-H420\x00\x00', + b'28102-6B8-A560\x00\x00', + b'28102-6B8-A570\x00\x00', + b'28102-6B8-A700\x00\x00', + b'28102-6B8-A800\x00\x00', + b'28102-6B8-C560\x00\x00', + b'28102-6B8-C570\x00\x00', + b'28102-6B8-M520\x00\x00', + b'28102-6B8-R700\x00\x00', + ], + (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ + b'46114-TVA-A050\x00\x00', + b'46114-TVA-A060\x00\x00', + b'46114-TVA-A080\x00\x00', + b'46114-TVA-A120\x00\x00', + b'46114-TVA-A320\x00\x00', + b'46114-TVE-H550\x00\x00', + b'46114-TVE-H560\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TVA-B040\x00\x00', + b'57114-TVA-B050\x00\x00', + b'57114-TVA-B060\x00\x00', + b'57114-TVA-B530\x00\x00', + b'57114-TVA-C040\x00\x00', + b'57114-TVA-C050\x00\x00', + b'57114-TVA-C060\x00\x00', + b'57114-TVA-C530\x00\x00', + b'57114-TVA-E520\x00\x00', + b'57114-TVE-H250\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TBX-H120\x00\x00', + b'39990-TVA,A150\x00\x00', + b'39990-TVA-A140\x00\x00', + b'39990-TVA-A150\x00\x00', + b'39990-TVA-A160\x00\x00', + b'39990-TVA-A340\x00\x00', + b'39990-TVA-X030\x00\x00', + b'39990-TVA-X040\x00\x00', + b'39990-TVE-H130\x00\x00', + ], + (Ecu.unknown, 0x18da3af1, None): [ + b'39390-TVA-A020\x00\x00', + b'39390-TVA-A120\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TBX-H230\x00\x00', + b'77959-TVA-A460\x00\x00', + b'77959-TVA-F330\x00\x00', + b'77959-TVA-H230\x00\x00', + b'77959-TVA-L420\x00\x00', + b'77959-TVA-X330\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TBX-H310\x00\x00', + b'78109-TVA-A010\x00\x00', + b'78109-TVA-A020\x00\x00', + b'78109-TVA-A030\x00\x00', + b'78109-TVA-A110\x00\x00', + b'78109-TVA-A120\x00\x00', + b'78109-TVA-A130\x00\x00', + b'78109-TVA-A210\x00\x00', + b'78109-TVA-A220\x00\x00', + b'78109-TVA-A230\x00\x00', + b'78109-TVA-A310\x00\x00', + b'78109-TVA-C010\x00\x00', + b'78109-TVA-C130\x00\x00', + b'78109-TVA-L010\x00\x00', + b'78109-TVA-L210\x00\x00', + b'78109-TVA-R310\x00\x00', + b'78109-TVC-A010\x00\x00', + b'78109-TVC-A020\x00\x00', + b'78109-TVC-A030\x00\x00', + b'78109-TVC-A110\x00\x00', + b'78109-TVC-A130\x00\x00', + b'78109-TVC-A210\x00\x00', + b'78109-TVC-A220\x00\x00', + b'78109-TVC-A230\x00\x00', + b'78109-TVC-C010\x00\x00', + b'78109-TVC-C110\x00\x00', + b'78109-TVC-L010\x00\x00', + b'78109-TVC-L210\x00\x00', + b'78109-TVC-M510\x00\x00', + b'78109-TVC-YF10\x00\x00', + b'78109-TVE-H610\x00\x00', + b'78109-TWA-A210\x00\x00', + ], + (Ecu.hud, 0x18da61f1, None): [ + b'78209-TVA-A010\x00\x00', + b'78209-TVA-A110\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TBX-H140\x00\x00', + b'36802-TVA-A150\x00\x00', + b'36802-TVA-A160\x00\x00', + b'36802-TVA-A170\x00\x00', + b'36802-TVA-A180\x00\x00', + b'36802-TVA-A330\x00\x00', + b'36802-TVC-A330\x00\x00', + b'36802-TVE-H070\x00\x00', + b'36802-TWA-A070\x00\x00', + b'36802-TWA-A080\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TBX-H130\x00\x00', + b'36161-TVA-A060\x00\x00', + b'36161-TVA-A330\x00\x00', + b'36161-TVC-A330\x00\x00', + b'36161-TVE-H050\x00\x00', + b'36161-TWA-A070\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TVA-A010\x00\x00', + b'38897-TVA-A020\x00\x00', + b'38897-TVA-A230\x00\x00', + b'38897-TVA-A240\x00\x00', + ], + }, + CAR.ACCORDH: { + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TWA-A120\x00\x00', + b'38897-TWD-J020\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TWA-A040\x00\x00', + b'57114-TWA-A050\x00\x00', + b'57114-TWA-A530\x00\x00', + b'57114-TWA-B520\x00\x00', + b'57114-TWA-C510\x00\x00', + b'57114-TWB-H030\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TWA-A440\x00\x00', + b'77959-TWA-L420\x00\x00', + b'77959-TWB-H220\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TWA-A010\x00\x00', + b'78109-TWA-A020\x00\x00', + b'78109-TWA-A030\x00\x00', + b'78109-TWA-A110\x00\x00', + b'78109-TWA-A120\x00\x00', + b'78109-TWA-A130\x00\x00', + b'78109-TWA-A210\x00\x00', + b'78109-TWA-A220\x00\x00', + b'78109-TWA-A230\x00\x00', + b'78109-TWA-A610\x00\x00', + b'78109-TWA-H210\x00\x00', + b'78109-TWA-L010\x00\x00', + b'78109-TWA-L210\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TWA-A910\x00\x00', + ], + (Ecu.hud, 0x18da61f1, None): [ + b'78209-TVA-A010\x00\x00', + b'78209-TVA-A110\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TWA-A070\x00\x00', + b'36161-TWA-A330\x00\x00', + b'36161-TWB-H040\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TWA-A070\x00\x00', + b'36802-TWA-A080\x00\x00', + b'36802-TWA-A210\x00\x00', + b'36802-TWA-A330\x00\x00', + b'36802-TWB-H060\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TVA-A150\x00\x00', + b'39990-TVA-A160\x00\x00', + b'39990-TVA-A340\x00\x00', + b'39990-TWB-H120\x00\x00', + ], + }, + CAR.ACCORD_NIDEC_4CYL: { + (Ecu.vsa, 0x18DA28F1, None): [ + b'57114-T2F-X840\x00\x00', + ], + (Ecu.fwdRadar, 0x18DAB0F1, None): [ + b'36161-T2F-A140\x00\x00', + ], + (Ecu.combinationMeter, 0x18DA60F1, None): [ + b'78109-T2F-L110\x00\x00', + ], + (Ecu.srs, 0x18DA53F1, None): [ + b'77959-T2F-A030\x00\x00', + ], + }, + CAR.CIVIC: { + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-5AA-A640\x00\x00', + b'37805-5AA-A650\x00\x00', + b'37805-5AA-A670\x00\x00', + b'37805-5AA-A680\x00\x00', + b'37805-5AA-A810\x00\x00', + b'37805-5AA-C640\x00\x00', + b'37805-5AA-C680\x00\x00', + b'37805-5AA-C820\x00\x00', + b'37805-5AA-L650\x00\x00', + b'37805-5AA-L660\x00\x00', + b'37805-5AA-L680\x00\x00', + b'37805-5AA-L690\x00\x00', + b'37805-5AA-L810\x00\x00', + b'37805-5AG-Q710\x00\x00', + b'37805-5AJ-A610\x00\x00', + b'37805-5AJ-A620\x00\x00', + b'37805-5AJ-L610\x00\x00', + b'37805-5BA-A310\x00\x00', + b'37805-5BA-A510\x00\x00', + b'37805-5BA-A740\x00\x00', + b'37805-5BA-A760\x00\x00', + b'37805-5BA-A930\x00\x00', + b'37805-5BA-A960\x00\x00', + b'37805-5BA-C640\x00\x00', + b'37805-5BA-C860\x00\x00', + b'37805-5BA-L410\x00\x00', + b'37805-5BA-L760\x00\x00', + b'37805-5BA-L930\x00\x00', + b'37805-5BA-L940\x00\x00', + b'37805-5BA-L960\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-5CG-A040\x00\x00', + b'28101-5CG-A050\x00\x00', + b'28101-5CG-A070\x00\x00', + b'28101-5CG-A080\x00\x00', + b'28101-5CG-A320\x00\x00', + b'28101-5CG-A810\x00\x00', + b'28101-5CG-A820\x00\x00', + b'28101-5DJ-A040\x00\x00', + b'28101-5DJ-A060\x00\x00', + b'28101-5DJ-A510\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TBA-A540\x00\x00', + b'57114-TBA-A550\x00\x00', + b'57114-TBA-A560\x00\x00', + b'57114-TBA-A570\x00\x00', + b'57114-TEA-Q220\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TBA,A030\x00\x00', + b'39990-TBA-A030\x00\x00', + b'39990-TBG-A030\x00\x00', + b'39990-TEA-T020\x00\x00', + b'39990-TEG-A010\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TBA-A030\x00\x00', + b'77959-TBA-A040\x00\x00', + b'77959-TBG-A030\x00\x00', + b'77959-TEA-Q820\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TBA-A510\x00\x00', + b'78109-TBA-A520\x00\x00', + b'78109-TBA-A530\x00\x00', + b'78109-TBA-C310\x00\x00', + b'78109-TBA-C520\x00\x00', + b'78109-TBC-A310\x00\x00', + b'78109-TBC-A320\x00\x00', + b'78109-TBC-A510\x00\x00', + b'78109-TBC-A520\x00\x00', + b'78109-TBC-A530\x00\x00', + b'78109-TBC-C510\x00\x00', + b'78109-TBC-C520\x00\x00', + b'78109-TBC-C530\x00\x00', + b'78109-TBH-A510\x00\x00', + b'78109-TBH-A530\x00\x00', + b'78109-TED-Q510\x00\x00', + b'78109-TEG-A310\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-TBA-A020\x00\x00', + b'36161-TBA-A030\x00\x00', + b'36161-TBA-A040\x00\x00', + b'36161-TBC-A020\x00\x00', + b'36161-TBC-A030\x00\x00', + b'36161-TED-Q320\x00\x00', + b'36161-TEG-A010\x00\x00', + b'36161-TEG-A020\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TBA-A010\x00\x00', + b'38897-TBA-A020\x00\x00', + ], + }, + CAR.CIVIC_BOSCH: { + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-5AA-A940\x00\x00', + b'37805-5AA-A950\x00\x00', + b'37805-5AA-C950\x00\x00', + b'37805-5AA-L940\x00\x00', + b'37805-5AA-L950\x00\x00', + b'37805-5AG-Z910\x00\x00', + b'37805-5AJ-A750\x00\x00', + b'37805-5AJ-L750\x00\x00', + b'37805-5AK-T530\x00\x00', + b'37805-5AN-A750\x00\x00', + b'37805-5AN-A830\x00\x00', + b'37805-5AN-A840\x00\x00', + b'37805-5AN-A930\x00\x00', + b'37805-5AN-A940\x00\x00', + b'37805-5AN-A950\x00\x00', + b'37805-5AN-AG20\x00\x00', + b'37805-5AN-AH20\x00\x00', + b'37805-5AN-AJ30\x00\x00', + b'37805-5AN-AK10\x00\x00', + b'37805-5AN-AK20\x00\x00', + b'37805-5AN-AR10\x00\x00', + b'37805-5AN-AR20\x00\x00', + b'37805-5AN-C650\x00\x00', + b'37805-5AN-CH20\x00\x00', + b'37805-5AN-E630\x00\x00', + b'37805-5AN-E720\x00\x00', + b'37805-5AN-E820\x00\x00', + b'37805-5AN-J820\x00\x00', + b'37805-5AN-L840\x00\x00', + b'37805-5AN-L930\x00\x00', + b'37805-5AN-L940\x00\x00', + b'37805-5AN-LF20\x00\x00', + b'37805-5AN-LH20\x00\x00', + b'37805-5AN-LJ20\x00\x00', + b'37805-5AN-LR20\x00\x00', + b'37805-5AN-LS20\x00\x00', + b'37805-5AW-G720\x00\x00', + b'37805-5AZ-E850\x00\x00', + b'37805-5AZ-G540\x00\x00', + b'37805-5AZ-G740\x00\x00', + b'37805-5AZ-G840\x00\x00', + b'37805-5BB-A530\x00\x00', + b'37805-5BB-A540\x00\x00', + b'37805-5BB-A620\x00\x00', + b'37805-5BB-A630\x00\x00', + b'37805-5BB-A640\x00\x00', + b'37805-5BB-C540\x00\x00', + b'37805-5BB-C630\x00\x00', + b'37805-5BB-C640\x00\x00', + b'37805-5BB-L540\x00\x00', + b'37805-5BB-L630\x00\x00', + b'37805-5BB-L640\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-5CG-A920\x00\x00', + b'28101-5CG-AB10\x00\x00', + b'28101-5CG-C110\x00\x00', + b'28101-5CG-C220\x00\x00', + b'28101-5CG-C320\x00\x00', + b'28101-5CG-G020\x00\x00', + b'28101-5CG-L020\x00\x00', + b'28101-5CK-A130\x00\x00', + b'28101-5CK-A140\x00\x00', + b'28101-5CK-A150\x00\x00', + b'28101-5CK-C130\x00\x00', + b'28101-5CK-C140\x00\x00', + b'28101-5CK-C150\x00\x00', + b'28101-5CK-G210\x00\x00', + b'28101-5CK-J710\x00\x00', + b'28101-5CK-Q610\x00\x00', + b'28101-5DJ-A610\x00\x00', + b'28101-5DJ-A710\x00\x00', + b'28101-5DV-E330\x00\x00', + b'28101-5DV-E610\x00\x00', + b'28101-5DV-E820\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TBG-A330\x00\x00', + b'57114-TBG-A340\x00\x00', + b'57114-TBG-A350\x00\x00', + b'57114-TGG-A340\x00\x00', + b'57114-TGG-C320\x00\x00', + b'57114-TGG-G320\x00\x00', + b'57114-TGG-L320\x00\x00', + b'57114-TGG-L330\x00\x00', + b'57114-TGK-T320\x00\x00', + b'57114-TGL-G330\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TBA-C020\x00\x00', + b'39990-TBA-C120\x00\x00', + b'39990-TEA-T820\x00\x00', + b'39990-TEZ-T020\x00\x00', + b'39990-TGG-A020\x00\x00', + b'39990-TGG-A120\x00\x00', + b'39990-TGG-J510\x00\x00', + b'39990-TGL-E130\x00\x00', + b'39990-TGN-E120\x00\x00', + # modded EPS bosch civic + b'39990-TBA,C020\x00\x00', + b'39990-TBA,C120\x00\x00', + b'39990-TEA,T820\x00\x00', + b'39990-TEZ,T020\x00\x00', + b'39990-TGG,A020\x00\x00', + b'39990-TGG,A120\x00\x00', + b'39990-TGG,J510\x00\x00', + b'39990-TGL,E130\x00\x00', + b'39990-TGN,E120\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TBA-A060\x00\x00', + b'77959-TBG-A050\x00\x00', + b'77959-TEA-G020\x00\x00', + b'77959-TGG-A020\x00\x00', + b'77959-TGG-A030\x00\x00', + b'77959-TGG-E010\x00\x00', + b'77959-TGG-G010\x00\x00', + b'77959-TGG-G110\x00\x00', + b'77959-TGG-J320\x00\x00', + b'77959-TGG-Z820\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TBA-A110\x00\x00', + b'78109-TBA-A910\x00\x00', + b'78109-TBA-C340\x00\x00', + b'78109-TBA-C910\x00\x00', + b'78109-TBC-A740\x00\x00', + b'78109-TBC-C540\x00\x00', + b'78109-TBG-A110\x00\x00', + b'78109-TBH-A710\x00\x00', + b'78109-TEG-A720\x00\x00', + b'78109-TFJ-G020\x00\x00', + b'78109-TGG-9020\x00\x00', + b'78109-TGG-A210\x00\x00', + b'78109-TGG-A220\x00\x00', + b'78109-TGG-A310\x00\x00', + b'78109-TGG-A320\x00\x00', + b'78109-TGG-A330\x00\x00', + b'78109-TGG-A610\x00\x00', + b'78109-TGG-A620\x00\x00', + b'78109-TGG-A810\x00\x00', + b'78109-TGG-A820\x00\x00', + b'78109-TGG-C010\x00\x00', + b'78109-TGG-C220\x00\x00', + b'78109-TGG-E110\x00\x00', + b'78109-TGG-G030\x00\x00', + b'78109-TGG-G230\x00\x00', + b'78109-TGG-G410\x00\x00', + b'78109-TGK-Z410\x00\x00', + b'78109-TGL-G120\x00\x00', + b'78109-TGL-G130\x00\x00', + b'78109-TGL-G210\x00\x00', + b'78109-TGL-G230\x00\x00', + b'78109-TGL-GM10\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TBA-A150\x00\x00', + b'36802-TBA-A160\x00\x00', + b'36802-TFJ-G060\x00\x00', + b'36802-TGG-A050\x00\x00', + b'36802-TGG-A060\x00\x00', + b'36802-TGG-A070\x00\x00', + b'36802-TGG-A130\x00\x00', + b'36802-TGG-G040\x00\x00', + b'36802-TGG-G130\x00\x00', + b'36802-TGK-Q120\x00\x00', + b'36802-TGL-G040\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TBA-A130\x00\x00', + b'36161-TBA-A140\x00\x00', + b'36161-TFJ-G070\x00\x00', + b'36161-TGG-A060\x00\x00', + b'36161-TGG-A080\x00\x00', + b'36161-TGG-A120\x00\x00', + b'36161-TGG-G050\x00\x00', + b'36161-TGG-G070\x00\x00', + b'36161-TGG-G130\x00\x00', + b'36161-TGG-G140\x00\x00', + b'36161-TGK-Q120\x00\x00', + b'36161-TGL-G050\x00\x00', + b'36161-TGL-G070\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TBA-A020\x00\x00', + b'38897-TBA-A110\x00\x00', + ], + (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ + b'39494-TGL-G030\x00\x00', + ], + }, + CAR.CIVIC_BOSCH_DIESEL: { + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-59N-G630\x00\x00', + b'37805-59N-G830\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-59Y-G220\x00\x00', + b'28101-59Y-G620\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TGN-E320\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TFK-G020\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TFK-G210\x00\x00', + b'77959-TGN-G220\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TFK-G020\x00\x00', + b'78109-TGN-G120\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TFK-G130\x00\x00', + b'36802-TGN-G130\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TGN-E010\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TFK-G130\x00\x00', + b'36161-TGN-G130\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TBA-A020\x00\x00', + ], + }, + CAR.CLARITY: { + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TRW-A910\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TRW-A010\x00\x00', + b'57114-TRW-A020\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TRW-A020\x00\x00', + b'39990-TRW,A020\x00\x00', # modified firmware + b'39990,TRW,A020\x00\x00', # extra modified firmware + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TRW-A210\x00\x00', + b'77959-TRW-A220\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TRW-A010\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TRW-A020\x00\x00', + b'78109-TRW-A030\x00\x00', + ], + }, + CAR.CRV: { + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-T1W-A230\x00\x00', + b'57114-T1W-A240\x00\x00', + b'57114-TFF-A940\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-T0A-A230\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-T1W-A210\x00\x00', + b'78109-T1W-C210\x00\x00', + b'78109-T1X-A210\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-T1W-A830\x00\x00', + b'36161-T1W-C830\x00\x00', + b'36161-T1X-A830\x00\x00', + ], + }, + CAR.CRV_5G: { + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-5PA-3060\x00\x00', + b'37805-5PA-3080\x00\x00', + b'37805-5PA-3180\x00\x00', + b'37805-5PA-4050\x00\x00', + b'37805-5PA-4150\x00\x00', + b'37805-5PA-6520\x00\x00', + b'37805-5PA-6530\x00\x00', + b'37805-5PA-6630\x00\x00', + b'37805-5PA-6640\x00\x00', + b'37805-5PA-7630\x00\x00', + b'37805-5PA-9530\x00\x00', + b'37805-5PA-9630\x00\x00', + b'37805-5PA-9640\x00\x00', + b'37805-5PA-9730\x00\x00', + b'37805-5PA-9830\x00\x00', + b'37805-5PA-9840\x00\x00', + b'37805-5PA-A650\x00\x00', + b'37805-5PA-A670\x00\x00', + b'37805-5PA-A680\x00\x00', + b'37805-5PA-A850\x00\x00', + b'37805-5PA-A870\x00\x00', + b'37805-5PA-A880\x00\x00', + b'37805-5PA-A890\x00\x00', + b'37805-5PA-AB10\x00\x00', + b'37805-5PA-AD10\x00\x00', + b'37805-5PA-AF20\x00\x00', + b'37805-5PA-AH20\x00\x00', + b'37805-5PA-BF10\x00\x00', + b'37805-5PA-C680\x00\x00', + b'37805-5PD-Q630\x00\x00', + b'37805-5PF-F730\x00\x00', + b'37805-5PF-M630\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-5RG-A020\x00\x00', + b'28101-5RG-A030\x00\x00', + b'28101-5RG-A040\x00\x00', + b'28101-5RG-A120\x00\x00', + b'28101-5RG-A220\x00\x00', + b'28101-5RH-A020\x00\x00', + b'28101-5RH-A030\x00\x00', + b'28101-5RH-A040\x00\x00', + b'28101-5RH-A120\x00\x00', + b'28101-5RH-A220\x00\x00', + b'28101-5RL-Q010\x00\x00', + b'28101-5RM-F010\x00\x00', + b'28101-5RM-K010\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TLA-A040\x00\x00', + b'57114-TLA-A050\x00\x00', + b'57114-TLA-A060\x00\x00', + b'57114-TLB-A830\x00\x00', + b'57114-TMC-Z040\x00\x00', + b'57114-TMC-Z050\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TLA,A040\x00\x00', + b'39990-TLA-A040\x00\x00', + b'39990-TLA-A110\x00\x00', + b'39990-TLA-A220\x00\x00', + b'39990-TME-T030\x00\x00', + b'39990-TME-T120\x00\x00', + b'39990-TMT-T010\x00\x00', + ], + (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ + b'46114-TLA-A040\x00\x00', + b'46114-TLA-A050\x00\x00', + b'46114-TLA-A930\x00\x00', + b'46114-TMC-U020\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TLA-A020\x00\x00', + b'78109-TLA-A110\x00\x00', + b'78109-TLA-A120\x00\x00', + b'78109-TLA-A210\x00\x00', + b'78109-TLA-A220\x00\x00', + b'78109-TLA-C020\x00\x00', + b'78109-TLA-C110\x00\x00', + b'78109-TLA-C210\x00\x00', + b'78109-TLA-C310\x00\x00', + b'78109-TLB-A020\x00\x00', + b'78109-TLB-A110\x00\x00', + b'78109-TLB-A120\x00\x00', + b'78109-TLB-A210\x00\x00', + b'78109-TLB-A220\x00\x00', + b'78109-TMC-Q210\x00\x00', + b'78109-TMM-F210\x00\x00', + b'78109-TMM-M110\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TLA-A010\x00\x00', + b'38897-TLA-A110\x00\x00', + b'38897-TNY-G010\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TLA-A040\x00\x00', + b'36802-TLA-A050\x00\x00', + b'36802-TLA-A060\x00\x00', + b'36802-TMC-Q040\x00\x00', + b'36802-TMC-Q070\x00\x00', + b'36802-TNY-A030\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TLA-A060\x00\x00', + b'36161-TLA-A070\x00\x00', + b'36161-TLA-A080\x00\x00', + b'36161-TMC-Q020\x00\x00', + b'36161-TMC-Q030\x00\x00', + b'36161-TMC-Q040\x00\x00', + b'36161-TNY-A020\x00\x00', + b'36161-TNY-A030\x00\x00', + b'36161-TNY-A040\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TLA-A240\x00\x00', + b'77959-TLA-A250\x00\x00', + b'77959-TLA-A320\x00\x00', + b'77959-TLA-A410\x00\x00', + b'77959-TLA-A420\x00\x00', + b'77959-TLA-Q040\x00\x00', + b'77959-TLA-Z040\x00\x00', + b'77959-TMM-F040\x00\x00', + ], + }, + CAR.CRV_EU: { + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-R5Z-G740\x00\x00', + b'37805-R5Z-G780\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-T1V-G920\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-T1V-G520\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-T1V-G010\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-5LH-E120\x00\x00', + b'28103-5LH-E100\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-T1B-3050\x00\x00', + b'78109-T1V-G020\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-T1G-G940\x00\x00', + ], + }, + CAR.CRV_HYBRID: { + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TMB-H030\x00\x00', + b'57114-TPA-G020\x00\x00', + b'57114-TPG-A020\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TMA-H020\x00\x00', + b'39990-TPA-G030\x00\x00', + b'39990-TPG-A020\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TMA-H110\x00\x00', + b'38897-TPG-A110\x00\x00', + b'38897-TPG-A210\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TMB-H510\x00\x00', + b'54008-TMB-H610\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TMB-H040\x00\x00', + b'36161-TPA-E050\x00\x00', + b'36161-TPG-A030\x00\x00', + b'36161-TPG-A040\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TMB-H220\x00\x00', + b'78109-TPA-G520\x00\x00', + b'78109-TPG-A110\x00\x00', + b'78109-TPG-A210\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TMB-H040\x00\x00', + b'36802-TPA-E040\x00\x00', + b'36802-TPG-A020\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TLA-C320\x00\x00', + b'77959-TLA-C410\x00\x00', + b'77959-TLA-C420\x00\x00', + b'77959-TLA-G220\x00\x00', + b'77959-TLA-H240\x00\x00', + ], + }, + CAR.FIT: { + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-T5R-L020\x00\x00', + b'57114-T5R-L220\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-T5R-C020\x00\x00', + b'39990-T5R-C030\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-T5A-J010\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-T5A-A210\x00\x00', + b'78109-T5A-A410\x00\x00', + b'78109-T5A-A420\x00\x00', + b'78109-T5A-A910\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-T5R-A040\x00\x00', + b'36161-T5R-A240\x00\x00', + b'36161-T5R-A520\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-T5R-A230\x00\x00', + ], + }, + CAR.FREED: { + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TDK-J010\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TDK-J050\x00\x00', + b'39990-TDK-N020\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TDK-J120\x00\x00', + b'57114-TDK-J330\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TDK-J310\x00\x00', + b'78109-TDK-J320\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-TDK-J070\x00\x00', + b'36161-TDK-J080\x00\x00', + b'36161-TDK-J530\x00\x00', + ], + }, + CAR.ODYSSEY: { + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-THR-A010\x00\x00', + b'38897-THR-A020\x00\x00', + ], + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-5MR-3050\x00\x00', + b'37805-5MR-3250\x00\x00', + b'37805-5MR-4080\x00\x00', + b'37805-5MR-4180\x00\x00', + b'37805-5MR-A240\x00\x00', + b'37805-5MR-A250\x00\x00', + b'37805-5MR-A310\x00\x00', + b'37805-5MR-A740\x00\x00', + b'37805-5MR-A750\x00\x00', + b'37805-5MR-A840\x00\x00', + b'37805-5MR-C620\x00\x00', + b'37805-5MR-D530\x00\x00', + b'37805-5MR-K730\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-THR-A020\x00\x00', + b'39990-THR-A030\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-THR-A010\x00\x00', + b'77959-THR-A110\x00\x00', + b'77959-THR-X010\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-THR-A020\x00\x00', + b'36161-THR-A030\x00\x00', + b'36161-THR-A110\x00\x00', + b'36161-THR-A720\x00\x00', + b'36161-THR-A730\x00\x00', + b'36161-THR-A810\x00\x00', + b'36161-THR-A910\x00\x00', + b'36161-THR-C010\x00\x00', + b'36161-THR-D110\x00\x00', + b'36161-THR-K020\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-5NZ-A110\x00\x00', + b'28101-5NZ-A310\x00\x00', + b'28101-5NZ-C310\x00\x00', + b'28102-5MX-A001\x00\x00', + b'28102-5MX-A600\x00\x00', + b'28102-5MX-A610\x00\x00', + b'28102-5MX-A700\x00\x00', + b'28102-5MX-A710\x00\x00', + b'28102-5MX-A900\x00\x00', + b'28102-5MX-A910\x00\x00', + b'28102-5MX-C001\x00\x00', + b'28102-5MX-D001\x00\x00', + b'28102-5MX-D710\x00\x00', + b'28102-5MX-K610\x00\x00', + b'28103-5NZ-A100\x00\x00', + b'28103-5NZ-A300\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-THR-A040\x00\x00', + b'57114-THR-A110\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-THR-A220\x00\x00', + b'78109-THR-A230\x00\x00', + b'78109-THR-A420\x00\x00', + b'78109-THR-A430\x00\x00', + b'78109-THR-A720\x00\x00', + b'78109-THR-A730\x00\x00', + b'78109-THR-A820\x00\x00', + b'78109-THR-A830\x00\x00', + b'78109-THR-AB20\x00\x00', + b'78109-THR-AB30\x00\x00', + b'78109-THR-AB40\x00\x00', + b'78109-THR-AC20\x00\x00', + b'78109-THR-AC30\x00\x00', + b'78109-THR-AC40\x00\x00', + b'78109-THR-AC50\x00\x00', + b'78109-THR-AD30\x00\x00', + b'78109-THR-AE20\x00\x00', + b'78109-THR-AE30\x00\x00', + b'78109-THR-AE40\x00\x00', + b'78109-THR-AK10\x00\x00', + b'78109-THR-AL10\x00\x00', + b'78109-THR-AN10\x00\x00', + b'78109-THR-C220\x00\x00', + b'78109-THR-C320\x00\x00', + b'78109-THR-C330\x00\x00', + b'78109-THR-CE20\x00\x00', + b'78109-THR-DA20\x00\x00', + b'78109-THR-DA30\x00\x00', + b'78109-THR-DA40\x00\x00', + b'78109-THR-K120\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-THR-A020\x00\x00', + ], + }, + CAR.ODYSSEY_CHN: { + (Ecu.eps, 0x18da30f1, None): [ + b'39990-T6D-H220\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-T6A-J010\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-T6A-F310\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-T6A-P040\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-T6A-P110\x00\x00', + ], + }, + CAR.PILOT: { + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TG7-A520\x00\x00', + b'54008-TG7-A530\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-5EY-A050\x00\x00', + b'28101-5EY-A100\x00\x00', + b'28101-5EY-A430\x00\x00', + b'28101-5EY-A500\x00\x00', + b'28101-5EZ-A050\x00\x00', + b'28101-5EZ-A060\x00\x00', + b'28101-5EZ-A100\x00\x00', + b'28101-5EZ-A210\x00\x00', + b'28101-5EZ-A330\x00\x00', + b'28101-5EZ-A430\x00\x00', + b'28101-5EZ-A500\x00\x00', + b'28101-5EZ-A600\x00\x00', + b'28101-5EZ-A700\x00\x00', + b'28103-5EY-A110\x00\x00', + ], + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-RLV-4060\x00\x00', + b'37805-RLV-4070\x00\x00', + b'37805-RLV-5140\x00\x00', + b'37805-RLV-5230\x00\x00', + b'37805-RLV-A830\x00\x00', + b'37805-RLV-A840\x00\x00', + b'37805-RLV-B210\x00\x00', + b'37805-RLV-B220\x00\x00', + b'37805-RLV-B420\x00\x00', + b'37805-RLV-B430\x00\x00', + b'37805-RLV-B620\x00\x00', + b'37805-RLV-B710\x00\x00', + b'37805-RLV-B720\x00\x00', + b'37805-RLV-C430\x00\x00', + b'37805-RLV-C510\x00\x00', + b'37805-RLV-C520\x00\x00', + b'37805-RLV-C530\x00\x00', + b'37805-RLV-C910\x00\x00', + b'37805-RLV-F120\x00\x00', + b'37805-RLV-L080\x00\x00', + b'37805-RLV-L090\x00\x00', + b'37805-RLV-L160\x00\x00', + b'37805-RLV-L180\x00\x00', + b'37805-RLV-L350\x00\x00', + b'37805-RLV-L410\x00\x00', + b'37805-RLV-L430\x00\x00', + b'37805-RLV-L850\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TG7-A030\x00\x00', + b'38897-TG7-A040\x00\x00', + b'38897-TG7-A110\x00\x00', + b'38897-TG7-A210\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TG7-A030\x00\x00', + b'39990-TG7-A040\x00\x00', + b'39990-TG7-A060\x00\x00', + b'39990-TG7-A070\x00\x00', + b'39990-TGS-A230\x00\x00', + b'39990-TGS-A320\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-TG7-A310\x00\x00', + b'36161-TG7-A520\x00\x00', + b'36161-TG7-A630\x00\x00', + b'36161-TG7-A720\x00\x00', + b'36161-TG7-A820\x00\x00', + b'36161-TG7-A930\x00\x00', + b'36161-TG7-C520\x00\x00', + b'36161-TG7-D520\x00\x00', + b'36161-TG7-D630\x00\x00', + b'36161-TG7-Y630\x00\x00', + b'36161-TG8-A410\x00\x00', + b'36161-TG8-A520\x00\x00', + b'36161-TG8-A630\x00\x00', + b'36161-TG8-A720\x00\x00', + b'36161-TG8-A830\x00\x00', + b'36161-TGS-A030\x00\x00', + b'36161-TGS-A130\x00\x00', + b'36161-TGS-A220\x00\x00', + b'36161-TGS-A320\x00\x00', + b'36161-TGT-A030\x00\x00', + b'36161-TGT-A130\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TG7-A020\x00\x00', + b'77959-TG7-A110\x00\x00', + b'77959-TG7-A210\x00\x00', + b'77959-TG7-Y210\x00\x00', + b'77959-TGS-A010\x00\x00', + b'77959-TGS-A110\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TG7-A040\x00\x00', + b'78109-TG7-A050\x00\x00', + b'78109-TG7-A420\x00\x00', + b'78109-TG7-A520\x00\x00', + b'78109-TG7-A720\x00\x00', + b'78109-TG7-AJ10\x00\x00', + b'78109-TG7-AJ20\x00\x00', + b'78109-TG7-AK10\x00\x00', + b'78109-TG7-AK20\x00\x00', + b'78109-TG7-AM20\x00\x00', + b'78109-TG7-AP10\x00\x00', + b'78109-TG7-AP20\x00\x00', + b'78109-TG7-AS20\x00\x00', + b'78109-TG7-AT20\x00\x00', + b'78109-TG7-AU20\x00\x00', + b'78109-TG7-AX20\x00\x00', + b'78109-TG7-D020\x00\x00', + b'78109-TG7-DJ10\x00\x00', + b'78109-TG7-YK20\x00\x00', + b'78109-TG8-A420\x00\x00', + b'78109-TG8-A520\x00\x00', + b'78109-TG8-AJ10\x00\x00', + b'78109-TG8-AJ20\x00\x00', + b'78109-TG8-AK20\x00\x00', + b'78109-TG8-AS20\x00\x00', + b'78109-TGS-AB10\x00\x00', + b'78109-TGS-AC10\x00\x00', + b'78109-TGS-AD10\x00\x00', + b'78109-TGS-AJ20\x00\x00', + b'78109-TGS-AK20\x00\x00', + b'78109-TGS-AP20\x00\x00', + b'78109-TGS-AT20\x00\x00', + b'78109-TGS-AX20\x00\x00', + b'78109-TGT-AJ20\x00\x00', + b'78109-TGT-AK30\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TG7-A130\x00\x00', + b'57114-TG7-A140\x00\x00', + b'57114-TG7-A230\x00\x00', + b'57114-TG7-A240\x00\x00', + b'57114-TG7-A630\x00\x00', + b'57114-TG7-A730\x00\x00', + b'57114-TG8-A140\x00\x00', + b'57114-TG8-A240\x00\x00', + b'57114-TG8-A630\x00\x00', + b'57114-TG8-A730\x00\x00', + b'57114-TGS-A530\x00\x00', + b'57114-TGT-A530\x00\x00', + ], + }, + CAR.ACURA_RDX: { + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TX4-A220\x00\x00', + b'57114-TX5-A220\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-TX4-A030\x00\x00', + b'36161-TX5-A030\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TX4-B010\x00\x00', + b'77959-TX4-C010\x00\x00', + b'77959-TX4-C020\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TX4-A210\x00\x00', + b'78109-TX4-A310\x00\x00', + b'78109-TX5-A210\x00\x00', + b'78109-TX5-A310\x00\x00', + ], + }, + CAR.ACURA_RDX_3G: { + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-5YF-A130\x00\x00', + b'37805-5YF-A230\x00\x00', + b'37805-5YF-A320\x00\x00', + b'37805-5YF-A330\x00\x00', + b'37805-5YF-A420\x00\x00', + b'37805-5YF-A430\x00\x00', + b'37805-5YF-A750\x00\x00', + b'37805-5YF-A760\x00\x00', + b'37805-5YF-A850\x00\x00', + b'37805-5YF-A870\x00\x00', + b'37805-5YF-AD20\x00\x00', + b'37805-5YF-C210\x00\x00', + b'37805-5YF-C220\x00\x00', + b'37805-5YF-C410\x00\x00', + b'37805-5YF-C420\x00\x00', + b'37805-5YF-C430\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TJB-A030\x00\x00', + b'57114-TJB-A040\x00\x00', + b'57114-TJB-A120\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TJB-A040\x00\x00', + b'36802-TJB-A050\x00\x00', + b'36802-TJB-A540\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TJB-A040\x00\x00', + b'36161-TJB-A530\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TJB-A520\x00\x00', + b'54008-TJB-A530\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28102-5YK-A610\x00\x00', + b'28102-5YK-A620\x00\x00', + b'28102-5YK-A630\x00\x00', + b'28102-5YK-A700\x00\x00', + b'28102-5YK-A711\x00\x00', + b'28102-5YK-A800\x00\x00', + b'28102-5YL-A620\x00\x00', + b'28102-5YL-A700\x00\x00', + b'28102-5YL-A711\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TJB-A140\x00\x00', + b'78109-TJB-A240\x00\x00', + b'78109-TJB-A420\x00\x00', + b'78109-TJB-AB10\x00\x00', + b'78109-TJB-AD10\x00\x00', + b'78109-TJB-AF10\x00\x00', + b'78109-TJB-AQ20\x00\x00', + b'78109-TJB-AR10\x00\x00', + b'78109-TJB-AS10\x00\x00', + b'78109-TJB-AU10\x00\x00', + b'78109-TJB-AW10\x00\x00', + b'78109-TJC-A240\x00\x00', + b'78109-TJC-A420\x00\x00', + b'78109-TJC-AA10\x00\x00', + b'78109-TJC-AD10\x00\x00', + b'78109-TJC-AF10\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TJB-A040\x00\x00', + b'77959-TJB-A120\x00\x00', + b'77959-TJB-A210\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', + ], + (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', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TJB-A030\x00\x00', + b'39990-TJB-A040\x00\x00', + b'39990-TJB-A070\x00\x00', + b'39990-TJB-A130\x00\x00', + ], + }, + CAR.RIDGELINE: { + (Ecu.eps, 0x18da30f1, None): [ + b'39990-T6Z-A020\x00\x00', + b'39990-T6Z-A030\x00\x00', + b'39990-T6Z-A050\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-T6Z-A020\x00\x00', + b'36161-T6Z-A310\x00\x00', + b'36161-T6Z-A420\x00\x00', + b'36161-T6Z-A520\x00\x00', + b'36161-T6Z-A620\x00\x00', + b'36161-TJZ-A120\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-T6Z-A010\x00\x00', + b'38897-T6Z-A110\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-T6Z-A420\x00\x00', + b'78109-T6Z-A510\x00\x00', + b'78109-T6Z-A710\x00\x00', + b'78109-T6Z-A810\x00\x00', + b'78109-T6Z-A910\x00\x00', + b'78109-T6Z-AA10\x00\x00', + b'78109-T6Z-C620\x00\x00', + b'78109-T6Z-C910\x00\x00', + b'78109-TJZ-A510\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-T6Z-A020\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-T6Z-A120\x00\x00', + b'57114-T6Z-A130\x00\x00', + b'57114-T6Z-A520\x00\x00', + b'57114-TJZ-A520\x00\x00', + ], + }, + CAR.INSIGHT: { + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TXM-A040\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TXM-A070\x00\x00', + b'36802-TXM-A080\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TXM-A050\x00\x00', + b'36161-TXM-A060\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TXM-A230\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TXM-A030\x00\x00', + b'57114-TXM-A040\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TWA-A910\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TXM-A020\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-TXM-A010\x00\x00', + b'78109-TXM-A020\x00\x00', + b'78109-TXM-A030\x00\x00', + b'78109-TXM-A110\x00\x00', + b'78109-TXM-C010\x00\x00', + ], + }, + CAR.HRV: { + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-T7A-A010\x00\x00', + b'38897-T7A-A110\x00\x00', + ], + (Ecu.eps, 0x18da30f1, None): [ + b'39990-THX-A020\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-T7A-A040\x00\x00', + b'36161-T7A-A140\x00\x00', + b'36161-T7A-A240\x00\x00', + b'36161-T7A-C440\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-T7A-A230\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-THW-A110\x00\x00', + b'78109-THX-A110\x00\x00', + b'78109-THX-A120\x00\x00', + b'78109-THX-A210\x00\x00', + b'78109-THX-A220\x00\x00', + b'78109-THX-C220\x00\x00', + ], + }, + CAR.HRV_3G: { + (Ecu.eps, 0x18da30f1, None): [ + b'39990-3W0-A030\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-3W1-A010\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-3V0-A820\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78108-3V1-A220\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-3W0-A040\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-6EH-A010\x00\x00', + ], + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-6CT-A710\x00\x00', + ], + (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ + b'46114-3W0-A020\x00\x00', + ], + }, + CAR.ACURA_ILX: { + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TX6-A010\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-TV9-A140\x00\x00', + b'36161-TX6-A030\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TX6-A230\x00\x00', + b'77959-TX6-C210\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78109-T3R-A120\x00\x00', + b'78109-T3R-A410\x00\x00', + b'78109-TV9-A510\x00\x00', + ], + }, + CAR.HONDA_E: { + (Ecu.eps, 0x18da30f1, None): [ + b'39990-TYF-N030\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-TYF-E140\x00\x00', + ], + (Ecu.shiftByWire, 0x18da0bf1, None): [ + b'54008-TYF-E010\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-TYF-G430\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78108-TYF-G610\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36802-TYF-E030\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'36161-TYF-E020\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-TYF-E030\x00\x00', + ], + }, + CAR.CIVIC_2022: { + (Ecu.eps, 0x18da30f1, None): [ + b'39990-T24-T120\x00\x00', + b'39990-T39-A130\x00\x00', + b'39990-T43-J020\x00\x00', + ], + (Ecu.gateway, 0x18daeff1, None): [ + b'38897-T20-A020\x00\x00', + b'38897-T20-A210\x00\x00', + b'38897-T20-A310\x00\x00', + b'38897-T20-A510\x00\x00', + b'38897-T21-A010\x00\x00', + b'38897-T24-Z120\x00\x00', + ], + (Ecu.srs, 0x18da53f1, None): [ + b'77959-T20-A970\x00\x00', + b'77959-T20-A980\x00\x00', + b'77959-T20-M820\x00\x00', + b'77959-T47-A940\x00\x00', + b'77959-T47-A950\x00\x00', + ], + (Ecu.combinationMeter, 0x18da60f1, None): [ + b'78108-T21-A220\x00\x00', + b'78108-T21-A230\x00\x00', + b'78108-T21-A620\x00\x00', + b'78108-T21-A740\x00\x00', + b'78108-T21-MB10\x00\x00', + b'78108-T22-A020\x00\x00', + b'78108-T23-A110\x00\x00', + ], + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'36161-T20-A060\x00\x00', + b'36161-T20-A070\x00\x00', + b'36161-T20-A080\x00\x00', + b'36161-T24-T070\x00\x00', + b'36161-T47-A070\x00\x00', + ], + (Ecu.vsa, 0x18da28f1, None): [ + b'57114-T20-AB40\x00\x00', + b'57114-T24-TB30\x00\x00', + b'57114-T43-JB30\x00\x00', + ], + (Ecu.transmission, 0x18da1ef1, None): [ + b'28101-65D-A020\x00\x00', + b'28101-65D-A120\x00\x00', + b'28101-65H-A020\x00\x00', + b'28101-65H-A120\x00\x00', + b'28101-65J-N010\x00\x00', + ], + (Ecu.programmedFuelInjection, 0x18da10f1, None): [ + b'37805-64A-A540\x00\x00', + b'37805-64A-A620\x00\x00', + b'37805-64D-P510\x00\x00', + b'37805-64L-A540\x00\x00', + b'37805-64S-A540\x00\x00', + b'37805-64S-A720\x00\x00', + b'37805-64S-AA10\x00\x00', + ], + }, +} diff --git a/selfdrive/car/honda/interface.py b/selfdrive/car/honda/interface.py index 94647b0851..e04162bebc 100755 --- a/selfdrive/car/honda/interface.py +++ b/selfdrive/car/honda/interface.py @@ -113,8 +113,12 @@ class CarInterface(CarInterfaceBase): ret.wheelbase = 2.70 ret.centerToFront = ret.wheelbase * 0.4 ret.steerRatio = 15.38 # 10.93 is end-to-end spec - ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end - ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]] + if eps_modified: + ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 2564, 8000], [0, 2564, 3840]] + ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.3], [0.09]] # 2.5x Modded EPS + else: + ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 4096], [0, 4096]] # TODO: determine if there is a dead zone at the top end + ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]] elif candidate in (CAR.ACCORD, CAR.ACCORDH): ret.mass = 3279. * CV.LB_TO_KG @@ -321,6 +325,9 @@ class CarInterface(CarInterfaceBase): if ret.openpilotLongitudinalControl and candidate in HONDA_BOSCH: ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HONDA_BOSCH_LONG + if ret.enableGasInterceptor and candidate not in HONDA_BOSCH: + ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HONDA_GAS_INTERCEPTOR + if candidate in HONDA_BOSCH_RADARLESS: ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HONDA_RADARLESS @@ -376,7 +383,7 @@ class CarInterface(CarInterfaceBase): if self.CP.pcmCruise and self.CP.minEnableSpeed > 0 and self.CP.pcmCruiseSpeed: if ret.gasPressed and not ret.cruiseState.enabled: self.CS.accEnabled = False - self.CS.accEnabled = ret.cruiseState.enabled or self.CS.accEnabled + self.CS.accEnabled = self.CS.pcm_cruise_enabled ret, self.CS = self.get_sp_common_state(ret, self.CS, min_enable_speed_pcm=(self.CP.pcmCruise and self.CP.minEnableSpeed > 0 and self.CP.pcmCruiseSpeed), diff --git a/selfdrive/car/honda/tests/test_honda.py b/selfdrive/car/honda/tests/test_honda.py index da64b8f70b..4e3f9182ea 100755 --- a/selfdrive/car/honda/tests/test_honda.py +++ b/selfdrive/car/honda/tests/test_honda.py @@ -2,7 +2,7 @@ import re import unittest -from openpilot.selfdrive.car.honda.values import FW_VERSIONS +from openpilot.selfdrive.car.honda.fingerprints import FW_VERSIONS HONDA_FW_VERSION_RE = br"\d{5}-[A-Z0-9]{3}(-|,)[A-Z0-9]{4}(\x00){2}$" diff --git a/selfdrive/car/honda/values.py b/selfdrive/car/honda/values.py index 5451f60b12..2f7cf7ca49 100644 --- a/selfdrive/car/honda/values.py +++ b/selfdrive/car/honda/values.py @@ -1,5 +1,5 @@ from dataclasses import dataclass -from enum import Enum, IntFlag +from enum import Enum, IntFlag, StrEnum from typing import Dict, List, Optional, Union from cereal import car @@ -72,7 +72,7 @@ VISUAL_HUD = { } -class CAR: +class CAR(StrEnum): ACCORD = "HONDA ACCORD 2018" ACCORDH = "HONDA ACCORD HYBRID 2018" ACCORD_NIDEC_4CYL = "HONDA ACCORD 4CYL 9TH GEN" @@ -139,14 +139,14 @@ CAR_INFO: Dict[str, Optional[Union[HondaCarInfo, List[HondaCarInfo]]]] = { ], CAR.CIVIC_BOSCH_DIESEL: None, # same platform CAR.CIVIC_2022: [ - HondaCarInfo("Honda Civic 2022", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), - HondaCarInfo("Honda Civic Hatchback 2022", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), + HondaCarInfo("Honda Civic 2022-23", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), + HondaCarInfo("Honda Civic Hatchback 2022-23", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), ], CAR.ACURA_ILX: HondaCarInfo("Acura ILX 2016-19", "AcuraWatch Plus", min_steer_speed=25. * CV.MPH_TO_MS), CAR.CRV: HondaCarInfo("Honda CR-V 2015-16", "Touring Trim", min_steer_speed=12. * CV.MPH_TO_MS), CAR.CRV_5G: HondaCarInfo("Honda CR-V 2017-22", min_steer_speed=12. * CV.MPH_TO_MS), CAR.CRV_EU: None, # HondaCarInfo("Honda CR-V EU", "Touring"), # Euro version of CRV Touring - CAR.CRV_HYBRID: HondaCarInfo("Honda CR-V Hybrid 2017-19", min_steer_speed=12. * CV.MPH_TO_MS), + CAR.CRV_HYBRID: HondaCarInfo("Honda CR-V Hybrid 2017-20", min_steer_speed=12. * CV.MPH_TO_MS), CAR.FIT: HondaCarInfo("Honda Fit 2018-20", min_steer_speed=12. * CV.MPH_TO_MS), CAR.FREED: HondaCarInfo("Honda Freed 2020", min_steer_speed=12. * CV.MPH_TO_MS), CAR.HRV: HondaCarInfo("Honda HR-V 2019-22", min_steer_speed=12. * CV.MPH_TO_MS), @@ -181,6 +181,13 @@ FW_QUERY_CONFIG = FwQueryConfig( ), # Data collection requests: + # Attempt to get the radarless Civic 2022+ camera FW + Request( + [StdQueries.TESTER_PRESENT_REQUEST, StdQueries.UDS_VERSION_REQUEST], + [StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.UDS_VERSION_RESPONSE], + bus=0, + logging=True + ), # Log extra identifiers for current ECUs Request( [HONDA_VERSION_REQUEST], @@ -210,1403 +217,6 @@ FW_QUERY_CONFIG = FwQueryConfig( ], ) -FW_VERSIONS = { - CAR.ACCORD: { - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-6A0-8720\x00\x00', - b'37805-6A0-9520\x00\x00', - b'37805-6A0-9620\x00\x00', - b'37805-6A0-9720\x00\x00', - b'37805-6A0-A540\x00\x00', - b'37805-6A0-A550\x00\x00', - b'37805-6A0-A640\x00\x00', - b'37805-6A0-A650\x00\x00', - b'37805-6A0-A740\x00\x00', - b'37805-6A0-A750\x00\x00', - b'37805-6A0-A840\x00\x00', - b'37805-6A0-A850\x00\x00', - b'37805-6A0-A930\x00\x00', - b'37805-6A0-AF30\x00\x00', - b'37805-6A0-AG30\x00\x00', - b'37805-6B2-C520\x00\x00', - b'37805-6A0-C540\x00\x00', - b'37805-6A1-H650\x00\x00', - b'37805-6B2-A550\x00\x00', - b'37805-6B2-A560\x00\x00', - b'37805-6B2-A650\x00\x00', - b'37805-6B2-A660\x00\x00', - b'37805-6B2-A720\x00\x00', - b'37805-6B2-A810\x00\x00', - b'37805-6B2-A820\x00\x00', - b'37805-6B2-A920\x00\x00', - b'37805-6B2-M520\x00\x00', - b'37805-6B2-Y810\x00\x00', - b'37805-6M4-B730\x00\x00', - ], - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TVC-A910\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-6A7-A220\x00\x00', - b'28101-6A7-A230\x00\x00', - b'28101-6A7-A320\x00\x00', - b'28101-6A7-A330\x00\x00', - b'28101-6A7-A410\x00\x00', - b'28101-6A7-A510\x00\x00', - b'28101-6A7-A610\x00\x00', - b'28101-6A7-A710\x00\x00', - b'28101-6A9-H140\x00\x00', - b'28101-6A9-H420\x00\x00', - b'28102-6B8-A560\x00\x00', - b'28102-6B8-A570\x00\x00', - b'28102-6B8-A700\x00\x00', - b'28102-6B8-A800\x00\x00', - b'28102-6B8-C560\x00\x00', - b'28102-6B8-C570\x00\x00', - b'28102-6B8-M520\x00\x00', - b'28102-6B8-R700\x00\x00', - ], - (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ - b'46114-TVA-A060\x00\x00', - b'46114-TVA-A080\x00\x00', - b'46114-TVA-A120\x00\x00', - b'46114-TVA-A320\x00\x00', - b'46114-TVA-A050\x00\x00', - b'46114-TVE-H550\x00\x00', - b'46114-TVE-H560\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TVA-B040\x00\x00', - b'57114-TVA-B050\x00\x00', - b'57114-TVA-B060\x00\x00', - b'57114-TVA-B530\x00\x00', - b'57114-TVA-C040\x00\x00', - b'57114-TVA-C050\x00\x00', - b'57114-TVA-C060\x00\x00', - b'57114-TVA-C530\x00\x00', - b'57114-TVA-E520\x00\x00', - b'57114-TVE-H250\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TBX-H120\x00\x00', - b'39990-TVA-A140\x00\x00', - b'39990-TVA-A150\x00\x00', - b'39990-TVA-A160\x00\x00', - b'39990-TVA-A340\x00\x00', - b'39990-TVA-X030\x00\x00', - b'39990-TVA-X040\x00\x00', - b'39990-TVA,A150\x00\x00', # modified firmware - b'39990-TVE-H130\x00\x00', - ], - (Ecu.unknown, 0x18da3af1, None): [ - b'39390-TVA-A020\x00\x00', - b'39390-TVA-A120\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TBX-H230\x00\x00', - b'77959-TVA-A460\x00\x00', - b'77959-TVA-F330\x00\x00', - b'77959-TVA-H230\x00\x00', - b'77959-TVA-L420\x00\x00', - b'77959-TVA-X330\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TBX-H310\x00\x00', - b'78109-TVA-A010\x00\x00', - b'78109-TVA-A020\x00\x00', - b'78109-TVA-A030\x00\x00', - b'78109-TVA-A110\x00\x00', - b'78109-TVA-A120\x00\x00', - b'78109-TVA-A130\x00\x00', - b'78109-TVA-A210\x00\x00', - b'78109-TVA-A220\x00\x00', - b'78109-TVA-A230\x00\x00', - b'78109-TVA-A310\x00\x00', - b'78109-TVA-C010\x00\x00', - b'78109-TVA-L010\x00\x00', - b'78109-TVA-L210\x00\x00', - b'78109-TVA-R310\x00\x00', - b'78109-TVC-A010\x00\x00', - b'78109-TVC-A020\x00\x00', - b'78109-TVC-A030\x00\x00', - b'78109-TVC-A110\x00\x00', - b'78109-TVC-A130\x00\x00', - b'78109-TVC-A210\x00\x00', - b'78109-TVC-A220\x00\x00', - b'78109-TVC-A230\x00\x00', - b'78109-TVC-C010\x00\x00', - b'78109-TVC-C110\x00\x00', - b'78109-TVC-L010\x00\x00', - b'78109-TVC-L210\x00\x00', - b'78109-TVC-M510\x00\x00', - b'78109-TVC-YF10\x00\x00', - b'78109-TVE-H610\x00\x00', - b'78109-TWA-A210\x00\x00', - ], - (Ecu.hud, 0x18da61f1, None): [ - b'78209-TVA-A010\x00\x00', - b'78209-TVA-A110\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TBX-H140\x00\x00', - b'36802-TVA-A150\x00\x00', - b'36802-TVA-A160\x00\x00', - b'36802-TVA-A170\x00\x00', - b'36802-TVA-A330\x00\x00', - b'36802-TVC-A330\x00\x00', - b'36802-TVE-H070\x00\x00', - b'36802-TWA-A070\x00\x00', - b'36802-TWA-A080\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TBX-H130\x00\x00', - b'36161-TVA-A060\x00\x00', - b'36161-TVA-A330\x00\x00', - b'36161-TVC-A330\x00\x00', - b'36161-TVE-H050\x00\x00', - b'36161-TWA-A070\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TVA-A010\x00\x00', - b'38897-TVA-A020\x00\x00', - b'38897-TVA-A230\x00\x00', - b'38897-TVA-A240\x00\x00', - ], - }, - CAR.ACCORDH: { - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TWA-A120\x00\x00', - b'38897-TWD-J020\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TWA-A040\x00\x00', - b'57114-TWA-A050\x00\x00', - b'57114-TWA-A530\x00\x00', - b'57114-TWA-B520\x00\x00', - b'57114-TWB-H030\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TWA-A440\x00\x00', - b'77959-TWA-L420\x00\x00', - b'77959-TWB-H220\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TWA-A010\x00\x00', - b'78109-TWA-A020\x00\x00', - b'78109-TWA-A030\x00\x00', - b'78109-TWA-A110\x00\x00', - b'78109-TWA-A120\x00\x00', - b'78109-TWA-A130\x00\x00', - b'78109-TWA-A210\x00\x00', - b'78109-TWA-A220\x00\x00', - b'78109-TWA-A230\x00\x00', - b'78109-TWA-L010\x00\x00', - b'78109-TWA-L210\x00\x00', - b'78109-TWA-H210\x00\x00', - ], - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TWA-A910\x00\x00', - ], - (Ecu.hud, 0x18da61f1, None): [ - b'78209-TVA-A010\x00\x00', - b'78209-TVA-A110\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TWA-A070\x00\x00', - b'36161-TWA-A330\x00\x00', - b'36161-TWB-H040\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TWA-A070\x00\x00', - b'36802-TWA-A080\x00\x00', - b'36802-TWA-A330\x00\x00', - b'36802-TWB-H060\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TVA-A160\x00\x00', - b'39990-TVA-A150\x00\x00', - b'39990-TVA-A340\x00\x00', - b'39990-TWB-H120\x00\x00', - ], - }, - CAR.ACCORD_NIDEC_4CYL: { - (Ecu.vsa, 0x18DA28F1, None): [ - b'57114-T2F-X840\x00\x00', - ], - (Ecu.fwdRadar, 0x18DAB0F1, None): [ - b'36161-T2F-A140\x00\x00', - ], - (Ecu.combinationMeter, 0x18DA60F1, None): [ - b'78109-T2F-L110\x00\x00', - ], - (Ecu.srs, 0x18DA53F1, None): [ - b'77959-T2F-A030\x00\x00', - ], - }, - CAR.CIVIC: { - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-5AA-A640\x00\x00', - b'37805-5AA-A650\x00\x00', - b'37805-5AA-A670\x00\x00', - b'37805-5AA-A680\x00\x00', - b'37805-5AA-A810\x00\x00', - b'37805-5AA-C640\x00\x00', - b'37805-5AA-C680\x00\x00', - b'37805-5AA-C820\x00\x00', - b'37805-5AA-L650\x00\x00', - b'37805-5AA-L660\x00\x00', - b'37805-5AA-L680\x00\x00', - b'37805-5AA-L690\x00\x00', - b'37805-5AA-L810\000\000', - b'37805-5AG-Q710\x00\x00', - b'37805-5AJ-A610\x00\x00', - b'37805-5AJ-A620\x00\x00', - b'37805-5AJ-L610\x00\x00', - b'37805-5BA-A310\x00\x00', - b'37805-5BA-A510\x00\x00', - b'37805-5BA-A740\x00\x00', - b'37805-5BA-A760\x00\x00', - b'37805-5BA-A930\x00\x00', - b'37805-5BA-A960\x00\x00', - b'37805-5BA-C860\x00\x00', - b'37805-5BA-L410\x00\x00', - b'37805-5BA-L760\x00\x00', - b'37805-5BA-L930\x00\x00', - b'37805-5BA-L940\x00\x00', - b'37805-5BA-L960\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-5CG-A040\x00\x00', - b'28101-5CG-A050\x00\x00', - b'28101-5CG-A070\x00\x00', - b'28101-5CG-A080\x00\x00', - b'28101-5CG-A320\x00\x00', - b'28101-5CG-A810\x00\x00', - b'28101-5CG-A820\x00\x00', - b'28101-5DJ-A040\x00\x00', - b'28101-5DJ-A060\x00\x00', - b'28101-5DJ-A510\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TBA-A540\x00\x00', - b'57114-TBA-A550\x00\x00', - b'57114-TBA-A560\x00\x00', - b'57114-TBA-A570\x00\x00', - b'57114-TEA-Q220\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TBA,A030\x00\x00', # modified firmware - b'39990-TBA-A030\x00\x00', - b'39990-TBG-A030\x00\x00', - b'39990-TEA-T020\x00\x00', - b'39990-TEG-A010\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TBA-A030\x00\x00', - b'77959-TBA-A040\x00\x00', - b'77959-TBG-A030\x00\x00', - b'77959-TEA-Q820\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TBA-A510\x00\x00', - b'78109-TBA-A520\x00\x00', - b'78109-TBA-A530\x00\x00', - b'78109-TBA-C520\x00\x00', - b'78109-TBC-A310\x00\x00', - b'78109-TBC-A320\x00\x00', - b'78109-TBC-A510\x00\x00', - b'78109-TBC-A520\x00\x00', - b'78109-TBC-A530\x00\x00', - b'78109-TBC-C510\x00\x00', - b'78109-TBC-C520\x00\x00', - b'78109-TBC-C530\x00\x00', - b'78109-TBH-A510\x00\x00', - b'78109-TBH-A530\x00\x00', - b'78109-TED-Q510\x00\x00', - b'78109-TEG-A310\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-TBA-A020\x00\x00', - b'36161-TBA-A030\x00\x00', - b'36161-TBA-A040\x00\x00', - b'36161-TBC-A020\x00\x00', - b'36161-TBC-A030\x00\x00', - b'36161-TED-Q320\x00\x00', - b'36161-TEG-A010\x00\x00', - b'36161-TEG-A020\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TBA-A010\x00\x00', - b'38897-TBA-A020\x00\x00', - ], - }, - CAR.CIVIC_BOSCH: { - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-5AA-A940\x00\x00', - b'37805-5AA-A950\x00\x00', - b'37805-5AA-C950\x00\x00', - b'37805-5AA-L940\x00\x00', - b'37805-5AA-L950\x00\x00', - b'37805-5AG-Z910\x00\x00', - b'37805-5AJ-A750\x00\x00', - b'37805-5AJ-L750\x00\x00', - b'37805-5AK-T530\x00\x00', - b'37805-5AN-A750\x00\x00', - b'37805-5AN-A830\x00\x00', - b'37805-5AN-A840\x00\x00', - b'37805-5AN-A930\x00\x00', - b'37805-5AN-A940\x00\x00', - b'37805-5AN-A950\x00\x00', - b'37805-5AN-AG20\x00\x00', - b'37805-5AN-AH20\x00\x00', - b'37805-5AN-AJ30\x00\x00', - b'37805-5AN-AK10\x00\x00', - b'37805-5AN-AK20\x00\x00', - b'37805-5AN-AR10\x00\x00', - b'37805-5AN-AR20\x00\x00', - b'37805-5AN-CH20\x00\x00', - b'37805-5AN-E630\x00\x00', - b'37805-5AN-E720\x00\x00', - b'37805-5AN-E820\x00\x00', - b'37805-5AN-J820\x00\x00', - b'37805-5AN-L840\x00\x00', - b'37805-5AN-L930\x00\x00', - b'37805-5AN-L940\x00\x00', - b'37805-5AN-LF20\x00\x00', - b'37805-5AN-LH20\x00\x00', - b'37805-5AN-LJ20\x00\x00', - b'37805-5AN-LR20\x00\x00', - b'37805-5AN-LS20\x00\x00', - b'37805-5AW-G720\x00\x00', - b'37805-5AZ-E850\x00\x00', - b'37805-5AZ-G540\x00\x00', - b'37805-5AZ-G740\x00\x00', - b'37805-5AZ-G840\x00\x00', - b'37805-5BB-A530\x00\x00', - b'37805-5BB-A540\x00\x00', - b'37805-5BB-A630\x00\x00', - b'37805-5BB-A640\x00\x00', - b'37805-5BB-C540\x00\x00', - b'37805-5BB-C630\x00\x00', - b'37805-5BB-C640\x00\x00', - b'37805-5BB-L540\x00\x00', - b'37805-5BB-L630\x00\x00', - b'37805-5BB-L640\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-5CG-A920\x00\x00', - b'28101-5CG-AB10\x00\x00', - b'28101-5CG-C110\x00\x00', - b'28101-5CG-C220\x00\x00', - b'28101-5CG-C320\x00\x00', - b'28101-5CG-G020\x00\x00', - b'28101-5CG-L020\x00\x00', - b'28101-5CK-A130\x00\x00', - b'28101-5CK-A140\x00\x00', - b'28101-5CK-A150\x00\x00', - b'28101-5CK-C130\x00\x00', - b'28101-5CK-C140\x00\x00', - b'28101-5CK-C150\x00\x00', - b'28101-5CK-G210\x00\x00', - b'28101-5CK-J710\x00\x00', - b'28101-5CK-Q610\x00\x00', - b'28101-5DJ-A610\x00\x00', - b'28101-5DJ-A710\x00\x00', - b'28101-5DV-E330\x00\x00', - b'28101-5DV-E610\x00\x00', - b'28101-5DV-E820\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TBG-A330\x00\x00', - b'57114-TBG-A340\x00\x00', - b'57114-TBG-A350\x00\x00', - b'57114-TGG-A340\x00\x00', - b'57114-TGG-C320\x00\x00', - b'57114-TGG-G320\x00\x00', - b'57114-TGG-L320\x00\x00', - b'57114-TGG-L330\x00\x00', - b'57114-TGK-T320\x00\x00', - b'57114-TGL-G330\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TBA-C020\x00\x00', - b'39990-TBA-C120\x00\x00', - b'39990-TEA-T820\x00\x00', - b'39990-TEZ-T020\x00\x00', - b'39990-TGG-A020\x00\x00', - b'39990-TGG-A120\x00\x00', - b'39990-TGG-J510\x00\x00', - b'39990-TGL-E130\x00\x00', - b'39990-TGN-E120\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TBA-A060\x00\x00', - b'77959-TBG-A050\x00\x00', - b'77959-TEA-G020\x00\x00', - b'77959-TGG-A020\x00\x00', - b'77959-TGG-A030\x00\x00', - b'77959-TGG-E010\x00\x00', - b'77959-TGG-G010\x00\x00', - b'77959-TGG-G110\x00\x00', - b'77959-TGG-J320\x00\x00', - b'77959-TGG-Z820\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TBA-A110\x00\x00', - b'78109-TBA-A910\x00\x00', - b'78109-TBA-C340\x00\x00', - b'78109-TBA-C910\x00\x00', - b'78109-TBC-A740\x00\x00', - b'78109-TBC-C540\x00\x00', - b'78109-TBG-A110\x00\x00', - b'78109-TBH-A710\x00\x00', - b'78109-TEG-A720\x00\x00', - b'78109-TFJ-G020\x00\x00', - b'78109-TGG-9020\x00\x00', - b'78109-TGG-A210\x00\x00', - b'78109-TGG-A220\x00\x00', - b'78109-TGG-A310\x00\x00', - b'78109-TGG-A320\x00\x00', - b'78109-TGG-A330\x00\x00', - b'78109-TGG-A610\x00\x00', - b'78109-TGG-A620\x00\x00', - b'78109-TGG-A810\x00\x00', - b'78109-TGG-A820\x00\x00', - b'78109-TGG-C220\x00\x00', - b'78109-TGG-E110\x00\x00', - b'78109-TGG-G030\x00\x00', - b'78109-TGG-G230\x00\x00', - b'78109-TGG-G410\x00\x00', - b'78109-TGK-Z410\x00\x00', - b'78109-TGL-G120\x00\x00', - b'78109-TGL-G130\x00\x00', - b'78109-TGL-G210\x00\x00', - b'78109-TGL-G230\x00\x00', - b'78109-TGL-GM10\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TBA-A150\x00\x00', - b'36802-TBA-A160\x00\x00', - b'36802-TFJ-G060\x00\x00', - b'36802-TGG-A050\x00\x00', - b'36802-TGG-A060\x00\x00', - b'36802-TGG-A130\x00\x00', - b'36802-TGG-G040\x00\x00', - b'36802-TGG-G130\x00\x00', - b'36802-TGK-Q120\x00\x00', - b'36802-TGL-G040\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TBA-A130\x00\x00', - b'36161-TBA-A140\x00\x00', - b'36161-TFJ-G070\x00\x00', - b'36161-TGG-A060\x00\x00', - b'36161-TGG-A080\x00\x00', - b'36161-TGG-A120\x00\x00', - b'36161-TGG-G050\x00\x00', - b'36161-TGG-G130\x00\x00', - b'36161-TGG-G140\x00\x00', - b'36161-TGK-Q120\x00\x00', - b'36161-TGL-G050\x00\x00', - b'36161-TGL-G070\x00\x00', - b'36161-TGG-G070\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TBA-A110\x00\x00', - b'38897-TBA-A020\x00\x00', - ], - (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ - b'39494-TGL-G030\x00\x00', - ], - }, - CAR.CIVIC_BOSCH_DIESEL: { - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-59N-G630\x00\x00', - b'37805-59N-G830\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-59Y-G220\x00\x00', - b'28101-59Y-G620\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TGN-E320\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TFK-G020\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TFK-G210\x00\x00', - b'77959-TGN-G220\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TFK-G020\x00\x00', - b'78109-TGN-G120\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TFK-G130\x00\x00', - b'36802-TGN-G130\x00\x00', - ], - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TGN-E010\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TFK-G130\x00\x00', - b'36161-TGN-G130\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TBA-A020\x00\x00', - ], - }, - CAR.CRV: { - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-T1W-A230\x00\x00', - b'57114-T1W-A240\x00\x00', - b'57114-TFF-A940\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-T0A-A230\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-T1W-A210\x00\x00', - b'78109-T1W-C210\x00\x00', - b'78109-T1X-A210\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-T1W-A830\x00\x00', - b'36161-T1W-C830\x00\x00', - b'36161-T1X-A830\x00\x00', - ], - }, - CAR.CRV_5G: { - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-5PA-AH20\x00\x00', - b'37805-5PA-3060\x00\x00', - b'37805-5PA-3080\x00\x00', - b'37805-5PA-3180\x00\x00', - b'37805-5PA-4050\x00\x00', - b'37805-5PA-4150\x00\x00', - b'37805-5PA-6520\x00\x00', - b'37805-5PA-6530\x00\x00', - b'37805-5PA-6630\x00\x00', - b'37805-5PA-6640\x00\x00', - b'37805-5PA-7630\x00\x00', - b'37805-5PA-9630\x00\x00', - b'37805-5PA-9640\x00\x00', - b'37805-5PA-9730\x00\x00', - b'37805-5PA-9830\x00\x00', - b'37805-5PA-9840\x00\x00', - b'37805-5PA-A650\x00\x00', - b'37805-5PA-A670\x00\x00', - b'37805-5PA-A680\x00\x00', - b'37805-5PA-A850\x00\x00', - b'37805-5PA-A870\x00\x00', - b'37805-5PA-A880\x00\x00', - b'37805-5PA-A890\x00\x00', - b'37805-5PA-AB10\x00\x00', - b'37805-5PA-AD10\x00\x00', - b'37805-5PA-AF20\x00\x00', - b'37805-5PA-C680\x00\x00', - b'37805-5PD-Q630\x00\x00', - b'37805-5PF-F730\x00\x00', - b'37805-5PF-M630\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-5RG-A020\x00\x00', - b'28101-5RG-A030\x00\x00', - b'28101-5RG-A040\x00\x00', - b'28101-5RG-A120\x00\x00', - b'28101-5RG-A220\x00\x00', - b'28101-5RH-A020\x00\x00', - b'28101-5RH-A030\x00\x00', - b'28101-5RH-A040\x00\x00', - b'28101-5RH-A120\x00\x00', - b'28101-5RH-A220\x00\x00', - b'28101-5RL-Q010\x00\x00', - b'28101-5RM-F010\x00\x00', - b'28101-5RM-K010\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TLA-A040\x00\x00', - b'57114-TLA-A050\x00\x00', - b'57114-TLA-A060\x00\x00', - b'57114-TLB-A830\x00\x00', - b'57114-TMC-Z040\x00\x00', - b'57114-TMC-Z050\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TLA-A040\x00\x00', - b'39990-TLA-A110\x00\x00', - b'39990-TLA-A220\x00\x00', - b'39990-TLA,A040\x00\x00', # modified firmware - b'39990-TME-T030\x00\x00', - b'39990-TME-T120\x00\x00', - b'39990-TMT-T010\x00\x00', - ], - (Ecu.electricBrakeBooster, 0x18da2bf1, None): [ - b'46114-TLA-A040\x00\x00', - b'46114-TLA-A050\x00\x00', - b'46114-TLA-A930\x00\x00', - b'46114-TMC-U020\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TLA-A110\x00\x00', - b'78109-TLA-A120\x00\x00', - b'78109-TLA-A210\x00\x00', - b'78109-TLA-A220\x00\x00', - b'78109-TLA-C020\x00\x00', - b'78109-TLA-C110\x00\x00', - b'78109-TLA-C210\x00\x00', - b'78109-TLA-C310\x00\x00', - b'78109-TLB-A020\x00\x00', - b'78109-TLB-A110\x00\x00', - b'78109-TLB-A120\x00\x00', - b'78109-TLB-A210\x00\x00', - b'78109-TLB-A220\x00\x00', - b'78109-TMC-Q210\x00\x00', - b'78109-TMM-F210\x00\x00', - b'78109-TMM-M110\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TLA-A010\x00\x00', - b'38897-TLA-A110\x00\x00', - b'38897-TNY-G010\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TLA-A040\x00\x00', - b'36802-TLA-A050\x00\x00', - b'36802-TLA-A060\x00\x00', - b'36802-TMC-Q040\x00\x00', - b'36802-TMC-Q070\x00\x00', - b'36802-TNY-A030\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TLA-A060\x00\x00', - b'36161-TLA-A070\x00\x00', - b'36161-TLA-A080\x00\x00', - b'36161-TMC-Q020\x00\x00', - b'36161-TMC-Q030\x00\x00', - b'36161-TMC-Q040\x00\x00', - b'36161-TNY-A020\x00\x00', - b'36161-TNY-A030\x00\x00', - b'36161-TNY-A040\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TLA-A240\x00\x00', - b'77959-TLA-A250\x00\x00', - b'77959-TLA-A320\x00\x00', - b'77959-TLA-A410\x00\x00', - b'77959-TLA-A420\x00\x00', - b'77959-TLA-Q040\x00\x00', - b'77959-TLA-Z040\x00\x00', - b'77959-TMM-F040\x00\x00', - ], - }, - CAR.CRV_EU: { - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-R5Z-G740\x00\x00', - b'37805-R5Z-G780\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [b'57114-T1V-G920\x00\x00'], - (Ecu.fwdRadar, 0x18dab0f1, None): [b'36161-T1V-G520\x00\x00'], - (Ecu.shiftByWire, 0x18da0bf1, None): [b'54008-T1V-G010\x00\x00'], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-5LH-E120\x00\x00', - b'28103-5LH-E100\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-T1V-G020\x00\x00', - b'78109-T1B-3050\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [b'77959-T1G-G940\x00\x00'], - }, - CAR.CRV_HYBRID: { - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TPA-G020\x00\x00', - b'57114-TPG-A020\x00\x00', - b'57114-TMB-H030\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TPA-G030\x00\x00', - b'39990-TPG-A020\x00\x00', - b'39990-TMA-H020\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TMA-H110\x00\x00', - b'38897-TPG-A110\x00\x00', - b'38897-TPG-A210\x00\x00', - ], - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TMB-H510\x00\x00', - b'54008-TMB-H610\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TMB-H040\x00\x00', - b'36161-TPA-E050\x00\x00', - b'36161-TPG-A030\x00\x00', - b'36161-TPG-A040\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TMB-H220\x00\x00', - b'78109-TPA-G520\x00\x00', - b'78109-TPG-A110\x00\x00', - b'78109-TPG-A210\x00\x00', - ], - (Ecu.hud, 0x18da61f1, None): [ - b'78209-TLA-X010\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TPA-E040\x00\x00', - b'36802-TPG-A020\x00\x00', - b'36802-TMB-H040\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TLA-C320\x00\x00', - b'77959-TLA-C410\x00\x00', - b'77959-TLA-C420\x00\x00', - b'77959-TLA-G220\x00\x00', - b'77959-TLA-H240\x00\x00', - ], - }, - CAR.FIT: { - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-T5R-L020\x00\x00', - b'57114-T5R-L220\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-T5R-C020\x00\x00', - b'39990-T5R-C030\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-T5A-J010\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-T5A-A210\x00\x00', - b'78109-T5A-A410\x00\x00', - b'78109-T5A-A420\x00\x00', - b'78109-T5A-A910\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-T5R-A040\x00\x00', - b'36161-T5R-A240\x00\x00', - b'36161-T5R-A520\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-T5R-A230\x00\x00', - ], - }, - CAR.FREED: { - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TDK-J010\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TDK-J050\x00\x00', - b'39990-TDK-N020\x00\x00', - ], - # TODO: vsa is "essential" for fpv2 but doesn't appear on some models - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TDK-J120\x00\x00', - b'57114-TDK-J330\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TDK-J310\x00\x00', - b'78109-TDK-J320\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-TDK-J070\x00\x00', - b'36161-TDK-J080\x00\x00', - b'36161-TDK-J530\x00\x00', - ], - }, - CAR.ODYSSEY: { - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-THR-A010\x00\x00', - b'38897-THR-A020\x00\x00', - ], - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-5MR-4080\x00\x00', - b'37805-5MR-A240\x00\x00', - b'37805-5MR-A250\x00\x00', - b'37805-5MR-A310\x00\x00', - b'37805-5MR-A740\x00\x00', - b'37805-5MR-A750\x00\x00', - b'37805-5MR-A840\x00\x00', - b'37805-5MR-C620\x00\x00', - b'37805-5MR-D530\x00\x00', - b'37805-5MR-K730\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-THR-A020\x00\x00', - b'39990-THR-A030\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-THR-A010\x00\x00', - b'77959-THR-A110\x00\x00', - b'77959-THR-X010\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-THR-A020\x00\x00', - b'36161-THR-A030\x00\x00', - b'36161-THR-A110\x00\x00', - b'36161-THR-A720\x00\x00', - b'36161-THR-A730\x00\x00', - b'36161-THR-A810\x00\x00', - b'36161-THR-A910\x00\x00', - b'36161-THR-C010\x00\x00', - b'36161-THR-D110\x00\x00', - b'36161-THR-K020\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-5NZ-A110\x00\x00', - b'28101-5NZ-A310\x00\x00', - b'28101-5NZ-C310\x00\x00', - b'28102-5MX-A001\x00\x00', - b'28102-5MX-A600\x00\x00', - b'28102-5MX-A610\x00\x00', - b'28102-5MX-A710\x00\x00', - b'28102-5MX-A900\x00\x00', - b'28102-5MX-A910\x00\x00', - b'28102-5MX-C001\x00\x00', - b'28102-5MX-D001\x00\x00', - b'28102-5MX-D710\x00\x00', - b'28102-5MX-K610\x00\x00', - b'28103-5NZ-A100\x00\x00', - b'28103-5NZ-A300\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-THR-A040\x00\x00', - b'57114-THR-A110\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-THR-A220\x00\x00', - b'78109-THR-A230\x00\x00', - b'78109-THR-A420\x00\x00', - b'78109-THR-A430\x00\x00', - b'78109-THR-A720\x00\x00', - b'78109-THR-A820\x00\x00', - b'78109-THR-A830\x00\x00', - b'78109-THR-AB20\x00\x00', - b'78109-THR-AB30\x00\x00', - b'78109-THR-AB40\x00\x00', - b'78109-THR-AC20\x00\x00', - b'78109-THR-AC30\x00\x00', - b'78109-THR-AC40\x00\x00', - b'78109-THR-AC50\x00\x00', - b'78109-THR-AD30\x00\x00', - b'78109-THR-AE20\x00\x00', - b'78109-THR-AE30\x00\x00', - b'78109-THR-AE40\x00\x00', - b'78109-THR-AK10\x00\x00', - b'78109-THR-AL10\x00\x00', - b'78109-THR-AN10\x00\x00', - b'78109-THR-C220\x00\x00', - b'78109-THR-C330\x00\x00', - b'78109-THR-CE20\x00\x00', - b'78109-THR-DA20\x00\x00', - b'78109-THR-DA30\x00\x00', - b'78109-THR-DA40\x00\x00', - b'78109-THR-K120\x00\x00', - ], - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-THR-A020\x00\x00', - ], - }, - CAR.ODYSSEY_CHN: { - (Ecu.eps, 0x18da30f1, None): [ - b'39990-T6D-H220\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-T6A-J010\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-T6A-F310\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-T6A-P040\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-T6A-P110\x00\x00', - ], - }, - CAR.PILOT: { - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TG7-A520\x00\x00', - b'54008-TG7-A530\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-5EY-A050\x00\x00', - b'28101-5EY-A100\x00\x00', - b'28101-5EZ-A050\x00\x00', - b'28101-5EZ-A060\x00\x00', - b'28101-5EZ-A100\x00\x00', - b'28101-5EZ-A210\x00\x00', - b'28101-5EZ-A600\x00\x00', - b'28101-5EZ-A430\x00\x00', - b'28101-5EZ-A700\x00\x00', - ], - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-RLV-4060\x00\x00', - b'37805-RLV-4070\x00\x00', - b'37805-RLV-A830\x00\x00', - b'37805-RLV-A840\x00\x00', - b'37805-RLV-C430\x00\x00', - b'37805-RLV-C510\x00\x00', - b'37805-RLV-C520\x00\x00', - b'37805-RLV-C530\x00\x00', - b'37805-RLV-C910\x00\x00', - b'37805-RLV-B220\x00\x00', - b'37805-RLV-B210\x00\x00', - b'37805-RLV-L160\x00\x00', - b'37805-RLV-B420\x00\x00', - b'37805-RLV-F120\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TG7-A030\x00\x00', - b'38897-TG7-A040\x00\x00', - b'38897-TG7-A110\x00\x00', - b'38897-TG7-A210\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TG7-A030\x00\x00', - b'39990-TG7-A040\x00\x00', - b'39990-TG7-A060\x00\x00', - b'39990-TG7-A070\x00\x00', - b'39990-TGS-A230\x00\x00', - b'39990-TGS-A320\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-TG7-A310\x00\x00', - b'36161-TG7-A520\x00\x00', - b'36161-TG7-A630\x00\x00', - b'36161-TG7-A720\x00\x00', - b'36161-TG7-A820\x00\x00', - b'36161-TG7-A930\x00\x00', - b'36161-TG7-C520\x00\x00', - b'36161-TG7-D520\x00\x00', - b'36161-TG7-D630\x00\x00', - b'36161-TG7-Y630\x00\x00', - b'36161-TG8-A520\x00\x00', - b'36161-TG8-A630\x00\x00', - b'36161-TG8-A720\x00\x00', - b'36161-TG8-A830\x00\x00', - b'36161-TGS-A130\x00\x00', - b'36161-TGT-A030\x00\x00', - b'36161-TGT-A130\x00\x00', - b'36161-TGS-A030\x00\x00', - b'36161-TGS-A220\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TG7-A020\x00\x00', - b'77959-TG7-A110\x00\x00', - b'77959-TG7-A210\x00\x00', - b'77959-TG7-Y210\x00\x00', - b'77959-TGS-A010\x00\x00', - b'77959-TGS-A110\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TG7-A040\x00\x00', - b'78109-TG7-A050\x00\x00', - b'78109-TG7-A420\x00\x00', - b'78109-TG7-A520\x00\x00', - b'78109-TG7-A720\x00\x00', - b'78109-TG7-AJ10\x00\x00', - b'78109-TG7-AJ20\x00\x00', - b'78109-TG7-AK10\x00\x00', - b'78109-TG7-AK20\x00\x00', - b'78109-TG7-AM20\x00\x00', - b'78109-TG7-AP10\x00\x00', - b'78109-TG7-AP20\x00\x00', - b'78109-TG7-AS20\x00\x00', - b'78109-TG7-AT20\x00\x00', - b'78109-TG7-AU20\x00\x00', - b'78109-TG7-AX20\x00\x00', - b'78109-TG7-D020\x00\x00', - b'78109-TG7-DJ10\x00\x00', - b'78109-TG7-YK20\x00\x00', - b'78109-TG8-A420\x00\x00', - b'78109-TG8-A520\x00\x00', - b'78109-TG8-AJ10\x00\x00', - b'78109-TG8-AJ20\x00\x00', - b'78109-TG8-AK20\x00\x00', - b'78109-TGS-AK20\x00\x00', - b'78109-TGS-AP20\x00\x00', - b'78109-TGT-AJ20\x00\x00', - b'78109-TGT-AK30\x00\x00', - b'78109-TGS-AT20\x00\x00', - b'78109-TGS-AX20\x00\x00', - b'78109-TGS-AJ20\x00\x00', - b'78109-TGS-AC10\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TG7-A130\x00\x00', - b'57114-TG7-A140\x00\x00', - b'57114-TG7-A230\x00\x00', - b'57114-TG7-A240\x00\x00', - b'57114-TG7-A630\x00\x00', - b'57114-TG7-A730\x00\x00', - b'57114-TG8-A140\x00\x00', - b'57114-TG8-A240\x00\x00', - b'57114-TG8-A630\x00\x00', - b'57114-TG8-A730\x00\x00', - b'57114-TGS-A530\x00\x00', - b'57114-TGT-A530\x00\x00', - ], - }, - CAR.ACURA_RDX: { - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TX5-A220\x00\x00', - b'57114-TX4-A220\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-TX5-A030\x00\x00', - b'36161-TX4-A030\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TX4-C010\x00\x00', - b'77959-TX4-B010\x00\x00', - b'77959-TX4-C020\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TX5-A310\x00\x00', - b'78109-TX4-A210\x00\x00', - b'78109-TX4-A310\x00\x00', - ], - }, - CAR.ACURA_RDX_3G: { - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-5YF-A130\x00\x00', - b'37805-5YF-A230\x00\x00', - b'37805-5YF-A320\x00\x00', - b'37805-5YF-A330\x00\x00', - b'37805-5YF-A420\x00\x00', - b'37805-5YF-A430\x00\x00', - b'37805-5YF-A750\x00\x00', - b'37805-5YF-A850\x00\x00', - b'37805-5YF-A870\x00\x00', - b'37805-5YF-AD20\x00\x00', - b'37805-5YF-C210\x00\x00', - b'37805-5YF-C220\x00\x00', - b'37805-5YF-C410\000\000', - b'37805-5YF-C420\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TJB-A030\x00\x00', - b'57114-TJB-A040\x00\x00', - b'57114-TJB-A120\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TJB-A040\x00\x00', - b'36802-TJB-A050\x00\x00', - b'36802-TJB-A540\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TJB-A040\x00\x00', - b'36161-TJB-A530\x00\x00', - ], - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TJB-A520\x00\x00', - b'54008-TJB-A530\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28102-5YK-A610\x00\x00', - b'28102-5YK-A620\x00\x00', - b'28102-5YK-A630\x00\x00', - b'28102-5YK-A700\x00\x00', - b'28102-5YK-A711\x00\x00', - b'28102-5YK-A800\x00\x00', - b'28102-5YL-A620\x00\x00', - b'28102-5YL-A700\x00\x00', - b'28102-5YL-A711\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TJB-A140\x00\x00', - b'78109-TJB-A240\x00\x00', - b'78109-TJB-A420\x00\x00', - b'78109-TJB-AB10\x00\x00', - b'78109-TJB-AD10\x00\x00', - b'78109-TJB-AF10\x00\x00', - b'78109-TJB-AQ20\x00\x00', - b'78109-TJB-AR10\x00\x00', - b'78109-TJB-AS10\000\000', - b'78109-TJB-AU10\x00\x00', - b'78109-TJB-AW10\x00\x00', - b'78109-TJC-A420\x00\x00', - b'78109-TJC-AA10\x00\x00', - b'78109-TJC-AD10\x00\x00', - b'78109-TJC-AF10\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TJB-A040\x00\x00', - b'77959-TJB-A120\x00\x00', - b'77959-TJB-A210\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', - ], - (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', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TJB-A030\x00\x00', - b'39990-TJB-A040\x00\x00', - b'39990-TJB-A070\x00\x00', - b'39990-TJB-A130\x00\x00', - ], - }, - CAR.RIDGELINE: { - (Ecu.eps, 0x18da30f1, None): [ - b'39990-T6Z-A020\x00\x00', - b'39990-T6Z-A030\x00\x00', - b'39990-T6Z-A050\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-T6Z-A020\x00\x00', - b'36161-T6Z-A310\x00\x00', - b'36161-T6Z-A420\x00\x00', - b'36161-T6Z-A520\x00\x00', - b'36161-T6Z-A620\x00\x00', - b'36161-TJZ-A120\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-T6Z-A010\x00\x00', - b'38897-T6Z-A110\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-T6Z-A420\x00\x00', - b'78109-T6Z-A510\x00\x00', - b'78109-T6Z-A710\x00\x00', - b'78109-T6Z-A810\x00\x00', - b'78109-T6Z-A910\x00\x00', - b'78109-T6Z-AA10\x00\x00', - b'78109-T6Z-C620\x00\x00', - b'78109-TJZ-A510\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-T6Z-A020\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-T6Z-A120\x00\x00', - b'57114-T6Z-A130\x00\x00', - b'57114-T6Z-A520\x00\x00', - b'57114-TJZ-A520\x00\x00', - ], - }, - CAR.INSIGHT: { - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TXM-A040\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36802-TXM-A070\x00\x00', - b'36802-TXM-A080\x00\x00', - ], - (Ecu.fwdCamera, 0x18dab5f1, None): [ - b'36161-TXM-A050\x00\x00', - b'36161-TXM-A060\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TXM-A230\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TXM-A030\x00\x00', - b'57114-TXM-A040\x00\x00', - ], - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TWA-A910\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TXM-A020\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TXM-A010\x00\x00', - b'78109-TXM-A020\x00\x00', - b'78109-TXM-A110\x00\x00', - b'78109-TXM-C010\x00\x00', - b'78109-TXM-A030\x00\x00', - ], - }, - CAR.HRV: { - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-T7A-A010\x00\x00', - b'38897-T7A-A110\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-THX-A020\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-T7A-A140\x00\x00', - b'36161-T7A-A240\x00\x00', - b'36161-T7A-C440\x00\x00', - b'36161-T7A-A040\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-T7A-A230\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-THX-A110\x00\x00', - b'78109-THX-A120\x00\x00', - b'78109-THX-A210\x00\x00', - b'78109-THX-A220\x00\x00', - b'78109-THX-C220\x00\x00', - b'78109-THW-A110\x00\x00', - ], - }, - CAR.HRV_3G: { - (Ecu.eps, 0x18DA30F1, None): [ - b'39990-3W0-A030\x00\x00', - ], - (Ecu.gateway, 0x18DAEFF1, None): [ - b'38897-3W1-A010\x00\x00', - ], - (Ecu.srs, 0x18DA53F1, None): [ - b'77959-3V0-A820\x00\x00', - ], - (Ecu.combinationMeter, 0x18DA60F1, None): [ - b'78108-3V1-A220\x00\x00', - ], - (Ecu.vsa, 0x18DA28F1, None): [ - b'57114-3W0-A040\x00\x00', - ], - (Ecu.transmission, 0x18DA1EF1, None): [ - b'28101-6EH-A010\x00\x00', - ], - (Ecu.programmedFuelInjection, 0x18DA10F1, None): [ - b'37805-6CT-A710\x00\x00', - ], - (Ecu.electricBrakeBooster, 0x18DA2BF1, None): [ - b'46114-3W0-A020\x00\x00', - ], - }, - CAR.ACURA_ILX: { - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TX6-A010\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-TV9-A140\x00\x00', - b'36161-TX6-A030\x00\x00', - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TX6-A230\x00\x00', - b'77959-TX6-C210\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-T3R-A120\x00\x00', - b'78109-T3R-A410\x00\x00', - b'78109-TV9-A510\x00\x00', - ], - }, - CAR.HONDA_E:{ - (Ecu.eps, 0x18DA30F1, None):[ - b'39990-TYF-N030\x00\x00' - ], - (Ecu.gateway, 0x18DAEFF1, None):[ - b'38897-TYF-E140\x00\x00' - ], - (Ecu.shiftByWire, 0x18DA0BF1, None):[ - b'54008-TYF-E010\x00\x00' - ], - (Ecu.srs, 0x18DA53F1, None):[ - b'77959-TYF-G430\x00\x00' - ], - (Ecu.combinationMeter, 0x18DA60F1, None):[ - b'78108-TYF-G610\x00\x00' - ], - (Ecu.fwdRadar, 0x18DAB0F1, None):[ - b'36802-TYF-E030\x00\x00' - ], - (Ecu.fwdCamera, 0x18DAB5F1, None):[ - b'36161-TYF-E020\x00\x00' - ], - (Ecu.vsa, 0x18DA28F1, None):[ - b'57114-TYF-E030\x00\x00' - ], - }, - CAR.CIVIC_2022: { - (Ecu.eps, 0x18DA30F1, None): [ - b'39990-T39-A130\x00\x00', - b'39990-T43-J020\x00\x00', - b'39990-T24-T120\x00\x00', - ], - (Ecu.gateway, 0x18DAEFF1, None): [ - b'38897-T20-A020\x00\x00', - b'38897-T20-A510\x00\x00', - b'38897-T21-A010\x00\x00', - b'38897-T20-A210\x00\x00', - b'38897-T20-A310\x00\x00', - b'38897-T24-Z120\x00\x00', - ], - (Ecu.srs, 0x18DA53F1, None): [ - b'77959-T20-A970\x00\x00', - b'77959-T47-A940\x00\x00', - b'77959-T47-A950\x00\x00', - b'77959-T20-M820\x00\x00', - ], - (Ecu.combinationMeter, 0x18DA60F1, None): [ - b'78108-T21-A220\x00\x00', - b'78108-T21-A620\x00\x00', - b'78108-T23-A110\x00\x00', - b'78108-T21-A230\x00\x00', - b'78108-T22-A020\x00\x00', - b'78108-T21-MB10\x00\x00', - ], - (Ecu.fwdRadar, 0x18dab0f1, None): [ - b'36161-T20-A070\x00\x00', - b'36161-T20-A080\x00\x00', - b'36161-T20-A060\x00\x00', - b'36161-T47-A070\x00\x00', - b'36161-T24-T070\x00\x00', - ], - (Ecu.vsa, 0x18DA28F1, None): [ - b'57114-T20-AB40\x00\x00', - b'57114-T43-JB30\x00\x00', - b'57114-T24-TB30\x00\x00', - ], - (Ecu.transmission, 0x18da1ef1, None): [ - b'28101-65D-A020\x00\x00', - b'28101-65D-A120\x00\x00', - b'28101-65H-A020\x00\x00', - b'28101-65H-A120\x00\x00', - b'28101-65J-N010\x00\x00', - ], - (Ecu.programmedFuelInjection, 0x18da10f1, None): [ - b'37805-64L-A540\x00\x00', - b'37805-64S-A540\x00\x00', - b'37805-64S-A720\x00\x00', - b'37805-64A-A540\x00\x00', - b'37805-64A-A620\x00\x00', - b'37805-64D-P510\x00\x00', - ], - }, - CAR.CLARITY: { - (Ecu.shiftByWire, 0x18da0bf1, None): [ - b'54008-TRW-A910\x00\x00', - ], - (Ecu.vsa, 0x18da28f1, None): [ - b'57114-TRW-A010\x00\x00', - b'57114-TRW-A020\x00\x00', - ], - (Ecu.eps, 0x18da30f1, None): [ - b'39990-TRW-A020\x00\x00', - b'39990-TRW,A020\x00\x00', # modified firmware - b'39990,TRW,A020\x00\x00', # extra modified firmware - ], - (Ecu.srs, 0x18da53f1, None): [ - b'77959-TRW-A210\x00\x00', - b'77959-TRW-A220\x00\x00', - ], - (Ecu.gateway, 0x18daeff1, None): [ - b'38897-TRW-A010\x00\x00', - ], - (Ecu.combinationMeter, 0x18da60f1, None): [ - b'78109-TRW-A020\x00\x00', - b'78109-TRW-A030\x00\x00', - ], - }, -} DBC = { CAR.ACCORD_NIDEC_4CYL: dbc_dict('honda_accord_touring_2016_can_generated', 'acura_ilx_2016_nidec'), diff --git a/selfdrive/car/hyundai/carcontroller.py b/selfdrive/car/hyundai/carcontroller.py index 9540a676f5..47d1708ac6 100644 --- a/selfdrive/car/hyundai/carcontroller.py +++ b/selfdrive/car/hyundai/carcontroller.py @@ -2,13 +2,13 @@ from cereal import car import cereal.messaging as messaging from openpilot.common.conversions import Conversions as CV from openpilot.common.numpy_fast import clip -from openpilot.common.params import Params, put_bool_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL from opendbc.can.packer import CANPacker from openpilot.selfdrive.car import apply_driver_steer_torque_limits, common_fault_avoidance from openpilot.selfdrive.car.hyundai import hyundaicanfd, hyundaican from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus -from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, HyundaiFlagsSP, Buttons, CarControllerParams, CANFD_CAR, CAR, CAMERA_SCC_CAR +from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, HyundaiFlagsSP, Buttons, CarControllerParams, CANFD_CAR, CAR, CAMERA_SCC_CAR, LEGACY_SAFETY_MODE_CAR from openpilot.selfdrive.controls.lib.drive_helpers import HYUNDAI_V_CRUISE_MIN VisualAlert = car.CarControl.HUDControl.VisualAlert @@ -63,7 +63,13 @@ class CarController: self.lat_disengage_init = False self.lat_active_last = False - self.sm = messaging.SubMaster(['longitudinalPlanSP']) + sub_services = ['longitudinalPlanSP'] + if CP.openpilotLongitudinalControl: + sub_services.append('radarState') + # TODO: Always true, prep for future conditional refactoring + if sub_services: + self.sm = messaging.SubMaster(sub_services) + self.param_s = Params() self.is_metric = self.param_s.get_bool("IsMetric") self.speed_limit_control_enabled = False @@ -93,11 +99,24 @@ class CarController: self.m_tsc = 0 self.steady_speed = 0 self.hkg_can_smooth_stop = self.param_s.get_bool("HkgSmoothStop") + self.lead_distance = 0 + + def calculate_lead_distance(self, hud_control: car.CarControl.HUDControl) -> float: + lead_one = self.sm["radarState"].leadOne + lead_two = self.sm["radarState"].leadTwo + + if lead_one.status and (not lead_two.status or lead_one.dRel < lead_two.dRel): + return lead_one.dRel + if lead_two.status: + return lead_two.dRel + + return 19 if hud_control.leadVisible else 0 def update(self, CC, CS, now_nanos): - if not self.CP.pcmCruiseSpeed: + if not self.CP.pcmCruiseSpeed or (self.CP.openpilotLongitudinalControl and self.frame % 5 == 0): self.sm.update(0) + if not self.CP.pcmCruiseSpeed: if self.sm.updated['longitudinalPlanSP']: self.v_tsc_state = self.sm['longitudinalPlanSP'].visionTurnControllerState self.slc_state = self.sm['longitudinalPlanSP'].speedLimitControlState @@ -108,7 +127,7 @@ class CarController: self.m_tsc = self.sm['longitudinalPlanSP'].turnSpeed if self.frame % 200 == 0: - self.speed_limit_control_enabled = self.param_s.get_bool("SpeedLimitControl") + self.speed_limit_control_enabled = self.param_s.get_bool("EnableSlc") self.is_metric = self.param_s.get_bool("IsMetric") self.last_speed_limit_sign_tap = self.param_s.get_bool("LastSpeedLimitSignTap") self.v_cruise_min = HYUNDAI_V_CRUISE_MIN[self.is_metric] * (CV.KPH_TO_MPH if not self.is_metric else 1) @@ -157,7 +176,7 @@ class CarController: if not self.CP.pcmCruiseSpeed: if not self.last_speed_limit_sign_tap_prev and self.last_speed_limit_sign_tap: self.sl_force_active_timer = self.frame - put_bool_nonblocking("LastSpeedLimitSignTap", False) + self.param_s.put_bool_nonblocking("LastSpeedLimitSignTap", False) self.last_speed_limit_sign_tap_prev = self.last_speed_limit_sign_tap sl_force_active = self.speed_limit_control_enabled and (self.frame < (self.sl_force_active_timer * DT_CTRL + 2.0)) @@ -223,16 +242,15 @@ class CarController: else: # button presses can_sends.extend(self.create_button_messages(CC, CS, use_clu11=False)) - if CS.buttons_counter != self.last_button_frame: - self.last_button_frame = CS.buttons_counter - if not (CC.cruiseControl.cancel or CC.cruiseControl.resume) and CS.out.cruiseState.enabled and not self.CP.pcmCruiseSpeed: - if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS: - # TODO: resume for alt button cars - pass - else: - self.cruise_button = self.get_cruise_buttons(CS, CC.vCruise) - if self.cruise_button is not None: - can_sends.append(hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, CS.buttons_counter+1, self.cruise_button)) + if not (CC.cruiseControl.cancel or CC.cruiseControl.resume) and CS.out.cruiseState.enabled and not self.CP.pcmCruiseSpeed: + if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS: + # TODO: resume for alt button cars + pass + else: + self.cruise_button = self.get_cruise_buttons(CS, CC.vCruise) + if self.cruise_button is not None: + if self.frame % 2 == 0: + can_sends.append(hyundaicanfd.create_buttons(self.packer, self.CP, self.CAN, ((self.frame // 2) + 1) % 0x10, self.cruise_button)) else: can_sends.append(hyundaican.create_lkas11(self.packer, self.frame, self.car_fingerprint, apply_steer, apply_steer_req, torque_fault, CS.lkas11, sys_warning, sys_state, CC.enabled, @@ -245,24 +263,32 @@ class CarController: if not (CC.cruiseControl.cancel or CC.cruiseControl.resume) and CS.out.cruiseState.enabled and not self.CP.pcmCruiseSpeed: self.cruise_button = self.get_cruise_buttons(CS, CC.vCruise) if self.cruise_button is not None: - send_freq = 1 - if not (self.v_tsc_state != 0 or self.m_tsc_state > 1) and abs(self.target_speed - self.v_set_dis) <= 2: - send_freq = 5 - # send resume at a max freq of 10Hz - if (self.frame - self.last_button_frame) * DT_CTRL > 0.1 * send_freq: - # send 25 messages at a time to increases the likelihood of cruise buttons being accepted - can_sends.extend([hyundaican.create_clu11(self.packer, self.frame, CS.clu11, self.cruise_button, self.CP.carFingerprint)] * 25) - if (self.frame - self.last_button_frame) * DT_CTRL >= 0.15 * send_freq: - self.last_button_frame = self.frame + if self.CP.carFingerprint in LEGACY_SAFETY_MODE_CAR: + send_freq = 1 + if not (self.v_tsc_state != 0 or self.m_tsc_state > 1) and abs(self.target_speed - self.v_set_dis) <= 2: + send_freq = 5 + # send resume at a max freq of 10Hz + if (self.frame - self.last_button_frame) * DT_CTRL > 0.1 * send_freq: + # send 25 messages at a time to increases the likelihood of cruise buttons being accepted + can_sends.extend([hyundaican.create_clu11(self.packer, self.frame, CS.clu11, self.cruise_button, self.CP.carFingerprint)] * 25) + if (self.frame - self.last_button_frame) * DT_CTRL >= 0.15 * send_freq: + self.last_button_frame = self.frame + elif self.frame % 2 == 0: + can_sends.extend([hyundaican.create_clu11(self.packer, (self.frame // 2) + 1, CS.clu11, self.cruise_button, self.CP.carFingerprint)] * 25) + + # Parse lead distance from radarState and display the corresponding distance in the car's cluster + if self.CP.openpilotLongitudinalControl and self.sm.updated['radarState'] and self.frame % 5 == 0: + self.lead_distance = self.calculate_lead_distance(hud_control) if self.frame % 2 == 0 and self.CP.openpilotLongitudinalControl: if self.hkg_can_smooth_stop: stopping = stopping and CS.out.vEgoRaw < 0.05 + # TODO: unclear if this is needed jerk = 3.0 if actuators.longControlState == LongCtrlState.pid else 1.0 use_fca = self.CP.flags & HyundaiFlags.USE_FCA.value can_sends.extend(hyundaican.create_acc_commands(self.packer, CC.enabled and CS.out.cruiseState.enabled, accel, jerk, int(self.frame / 2), - hud_control.leadVisible, set_speed_in_units, stopping, + self.lead_distance, set_speed_in_units, stopping, CC.cruiseControl.override, use_fca, CS.mainEnabled, CS, escc, self.CP.carFingerprint)) # 20 Hz LFA MFA message diff --git a/selfdrive/car/hyundai/carstate.py b/selfdrive/car/hyundai/carstate.py index fc36ce27f8..1f3e8d3ae8 100644 --- a/selfdrive/car/hyundai/carstate.py +++ b/selfdrive/car/hyundai/carstate.py @@ -8,7 +8,7 @@ from opendbc.can.parser import CANParser from opendbc.can.can_define import CANDefine from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, HyundaiFlagsSP, CAR, DBC, CAN_GEARS, CAMERA_SCC_CAR, \ - CANFD_CAR, EV_CAR, HYBRID_CAR, NON_SCC_CAR, NON_SCC_NO_FCA_CAR, NON_SCC_RADAR_FCA_CAR,\ + CANFD_CAR, NON_SCC_CAR, NON_SCC_NO_FCA_CAR, NON_SCC_RADAR_FCA_CAR, \ Buttons, CarControllerParams from openpilot.selfdrive.car.interfaces import CarStateBase @@ -37,8 +37,8 @@ class CarState(CarStateBase): else: # preferred and elect gear methods use same definition self.shifter_values = can_define.dv["LVR12"]["CF_Lvr_Gear"] - self.accelerator_msg_canfd = "ACCELERATOR" if CP.carFingerprint in EV_CAR else \ - "ACCELERATOR_ALT" if CP.carFingerprint in HYBRID_CAR else \ + self.accelerator_msg_canfd = "ACCELERATOR" if CP.flags & HyundaiFlags.EV else \ + "ACCELERATOR_ALT" if CP.flags & HyundaiFlags.HYBRID else \ "ACCELERATOR_BRAKE_ALT" self.cruise_btns_msg_canfd = "CRUISE_BUTTONS_ALT" if CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS else \ "CRUISE_BUTTONS" @@ -131,14 +131,14 @@ class CarState(CarStateBase): # TODO: Find brake pressure ret.brake = 0 - ret.brakePressed = cp.vl["TCS13"]["DriverBraking"] != 0 + ret.brakePressed = cp.vl["TCS13"]["DriverOverride"] == 2 # 2 includes regen braking by user on HEV/EV ret.brakeHoldActive = cp.vl["TCS15"]["AVH_LAMP"] == 2 # 0 OFF, 1 ERROR, 2 ACTIVE, 3 READY ret.parkingBrake = cp.vl["TCS13"]["PBRAKE_ACT"] == 1 - ret.brakeLights = bool(cp.vl["TCS13"]["BrakeLight"]) + ret.brakeLightsDEPRECATED = bool(cp.vl["TCS13"]["BrakeLight"]) ret.accFaulted = cp.vl["TCS13"]["ACCEnable"] != 0 # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED - if self.CP.carFingerprint in (HYBRID_CAR | EV_CAR): - if self.CP.carFingerprint in HYBRID_CAR: + if self.CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): + if self.CP.flags & HyundaiFlags.HYBRID: ret.gas = cp.vl["E_EMS11"]["CR_Vcu_AccPedDep_Pos"] / 254. else: ret.gas = cp.vl["E_EMS11"]["Accel_Pedal_Pos"] / 254. @@ -149,12 +149,12 @@ class CarState(CarStateBase): # Gear Selection via Cluster - For those Kia/Hyundai which are not fully discovered, we can use the Cluster Indicator for Gear Selection, # as this seems to be standard over all cars, but is not the preferred method. - if self.CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: + if self.CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): + gear = cp.vl["ELECT_GEAR"]["Elect_Gear_Shifter"] + elif self.CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: gear = cp.vl["CLU15"]["CF_Clu_Gear"] elif self.CP.carFingerprint in CAN_GEARS["use_tcu_gears"]: gear = cp.vl["TCU12"]["CUR_GR"] - elif self.CP.carFingerprint in CAN_GEARS["use_elect_gears"]: - gear = cp.vl["ELECT_GEAR"]["Elect_Gear_Shifter"] else: gear = cp.vl["LVR12"]["CF_Lvr_Gear"] @@ -164,8 +164,9 @@ class CarState(CarStateBase): aeb_src = "FCA11" if self.CP.flags & HyundaiFlags.USE_FCA.value else "SCC12" aeb_sig = "FCA_CmdAct" if self.CP.flags & HyundaiFlags.USE_FCA.value else "AEB_CmdAct" aeb_warning = cp_cruise.vl[aeb_src]["CF_VSM_Warn"] != 0 + scc_warning = cp_cruise.vl["SCC12"]["TakeOverReq"] == 1 # sometimes only SCC system shows an FCW aeb_braking = cp_cruise.vl[aeb_src]["CF_VSM_DecCmdAct"] != 0 or cp_cruise.vl[aeb_src][aeb_sig] != 0 - ret.stockFcw = aeb_warning and not aeb_braking + ret.stockFcw = (aeb_warning or scc_warning) and not aeb_braking ret.stockAeb = aeb_warning and aeb_braking elif self.CP.spFlags & HyundaiFlagsSP.SP_ENHANCED_SCC: aeb_src = "ESCC" @@ -210,8 +211,8 @@ class CarState(CarStateBase): self.mads_enabled = False if not self.control_initialized else ret.cruiseState.available - if self.CP.spFlags & HyundaiFlagsSP.SP_NAV_MSG: - self._update_traffic_signals(self.CP, cp, cp_cam) + if self.CP.spFlags & HyundaiFlagsSP.SP_NAV_MSG or self.CP.spFlags & HyundaiFlagsSP.SP_LKAS12: + self._update_traffic_signals(cp, cp_cam) ret.cruiseState.speedLimit = self._calculate_speed_limit() * speed_conv return ret @@ -222,14 +223,14 @@ class CarState(CarStateBase): self.is_metric = cp.vl["CRUISE_BUTTONS_ALT"]["DISTANCE_UNIT"] != 1 speed_factor = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS - if self.CP.carFingerprint in (EV_CAR | HYBRID_CAR): - offset = 255. if self.CP.carFingerprint in EV_CAR else 1023. + if self.CP.flags & (HyundaiFlags.EV | HyundaiFlags.HYBRID): + offset = 255. if self.CP.flags & HyundaiFlags.EV else 1023. ret.gas = cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL"] / offset ret.gasPressed = ret.gas > 1e-5 else: ret.gasPressed = bool(cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL_PRESSED"]) - ret.brakePressed = ret.brakeLights = cp.vl["TCS"]["DriverBraking"] == 1 + ret.brakePressed = ret.brakeLightsDEPRECATED = cp.vl["TCS"]["DriverBraking"] == 1 ret.doorOpen = cp.vl["DOORS_SEATBELTS"]["DRIVER_DOOR"] == 1 ret.seatbeltUnlatched = cp.vl["DOORS_SEATBELTS"]["DRIVER_SEATBELT"] == 0 @@ -283,7 +284,7 @@ class CarState(CarStateBase): # It limits the vehicle speed, overridable by pressing the accelerator past a certain point. # The car will brake, but does not respect positive acceleration commands in this mode # TODO: find this message on ICE & HYBRID cars + cruise control signals (if exists) - if self.CP.carFingerprint in EV_CAR: + if self.CP.flags & HyundaiFlags.EV: ret.cruiseState.nonAdaptive = cp.vl["MANUAL_SPEED_LIMIT_ASSIST"]["MSLA_ENABLED"] == 1 self.prev_cruise_buttons = self.cruise_buttons[-1] @@ -301,15 +302,19 @@ class CarState(CarStateBase): else cp_cam.vl["CAM_0x2a4"]) if self.CP.spFlags & HyundaiFlagsSP.SP_NAV_MSG: - self._update_traffic_signals(self.CP, cp, cp_cam) + self._update_traffic_signals(cp, cp_cam) ret.cruiseState.speedLimit = self._calculate_speed_limit() * speed_factor return ret - def _update_traffic_signals(self, CP, cp, cp_cam): - speed_limit_clu_canfd = cp if self.CP.flags & HyundaiFlags.CANFD_HDA2 else cp_cam - self._speed_limit_clu = speed_limit_clu_canfd.vl["CLUSTER_SPEED_LIMIT"]["SPEED_LIMIT_1"] if CP.carFingerprint in CANFD_CAR else \ - cp.vl["Navi_HU"]["SpeedLim_Nav_Clu"] + def _update_traffic_signals(self, cp, cp_cam): + if self.CP.carFingerprint in CANFD_CAR: + speed_limit_clu_bus_canfd = cp if self.CP.flags & HyundaiFlags.CANFD_HDA2 else cp_cam + self._speed_limit_clu = speed_limit_clu_bus_canfd.vl["CLUSTER_SPEED_LIMIT"]["SPEED_LIMIT_1"] + else: + sl_can_nav = cp.vl["Navi_HU"]["SpeedLim_Nav_Clu"] + sl_can_cam = cp_cam.vl["LKAS12"]["CF_Lkas_TsrSpeed_Display_Clu"] if self.CP.spFlags & HyundaiFlagsSP.SP_LKAS12 else None + self._speed_limit_clu = sl_can_cam if sl_can_cam is not None and sl_can_cam not in (0, 255) else sl_can_nav def _calculate_speed_limit(self): return self._speed_limit_clu if self._speed_limit_clu not in (0, 255) else 0 @@ -346,7 +351,7 @@ class CarState(CarStateBase): if CP.enableBsm: messages.append(("LCA11", 50)) - if CP.carFingerprint in (HYBRID_CAR | EV_CAR): + if CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): messages.append(("E_EMS11", 50)) else: messages += [ @@ -354,12 +359,12 @@ class CarState(CarStateBase): ("EMS16", 100), ] - if CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: + if CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): + messages.append(("ELECT_GEAR", 20)) + elif CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: pass elif CP.carFingerprint in CAN_GEARS["use_tcu_gears"]: messages.append(("TCU12", 100)) - elif CP.carFingerprint in CAN_GEARS["use_elect_gears"]: - messages.append(("ELECT_GEAR", 20)) else: messages.append(("LVR12", 100)) @@ -380,7 +385,7 @@ class CarState(CarStateBase): return CarState.get_cam_can_parser_canfd(CP) messages = [ - ("LKAS11", 100) + ("LKAS11", 100), ] if not CP.openpilotLongitudinalControl and CP.carFingerprint in (CAMERA_SCC_CAR | (NON_SCC_CAR - NON_SCC_NO_FCA_CAR - NON_SCC_RADAR_FCA_CAR)): @@ -400,6 +405,9 @@ class CarState(CarStateBase): ("FCA12", 50), ] + if CP.spFlags & HyundaiFlagsSP.SP_LKAS12: + messages.append(("LKAS12", 10)) + return CANParser(DBC[CP.carFingerprint]["pt"], messages, 2) def get_can_parser_canfd(self, CP): @@ -415,7 +423,7 @@ class CarState(CarStateBase): ("DOORS_SEATBELTS", 4), ] - if CP.carFingerprint in EV_CAR: + if CP.flags & HyundaiFlags.EV: messages += [ ("MANUAL_SPEED_LIMIT_ASSIST", 10), ] diff --git a/selfdrive/car/hyundai/enable_radar_tracks.py b/selfdrive/car/hyundai/enable_radar_tracks.py new file mode 100644 index 0000000000..3a64d50cb9 --- /dev/null +++ b/selfdrive/car/hyundai/enable_radar_tracks.py @@ -0,0 +1,47 @@ +from openpilot.selfdrive.car.isotp_parallel_query import IsoTpParallelQuery +from openpilot.common.swaglog import cloudlog + +EXT_DIAG_REQUEST = b'\x10\x07' +EXT_DIAG_RESPONSE = b'\x50\x07' + +WRITE_DATA_REQUEST = b'\x2e' +WRITE_DATA_RESPONSE = b'\x68' + +RADAR_TRACKS_CONFIG = b"\x00\x00\x00\x01\x00\x01" + + +def enable_radar_tracks(logcan, sendcan, bus=0, addr=0x7d0, config_data_id=b'\x01\x42', timeout=0.1, retry=10, debug=False): + cloudlog.warning("radar_tracks: enabling ...") + + for i in range(retry): + try: + query = IsoTpParallelQuery(sendcan, logcan, bus, [addr], [EXT_DIAG_REQUEST], [EXT_DIAG_RESPONSE], debug=debug) + + for _, _ in query.get_data(timeout).items(): + cloudlog.warning("radar_tracks: reconfigure radar to output radar points ...") + + query = IsoTpParallelQuery(sendcan, logcan, bus, [addr], + [WRITE_DATA_REQUEST + config_data_id + RADAR_TRACKS_CONFIG], + [WRITE_DATA_RESPONSE], debug=debug) + query.get_data(0) + + cloudlog.warning("radar_tracks: successfully enabled") + return True + + except Exception as e: + cloudlog.exception(f"radar_tracks exception: {e}") + + cloudlog.error(f"radar_tracks retry ({i + 1}) ...") + cloudlog.error(f"radar_tracks: failed") + return False + + +if __name__ == "__main__": + import time + import cereal.messaging as messaging + sendcan = messaging.pub_sock('sendcan') + logcan = messaging.sub_sock('can') + time.sleep(1) + + enabled = enable_radar_tracks(logcan, sendcan, bus=0, addr=0x7d0, config_data_id=b'\x01\x42', timeout=0.1, debug=False) + print(f"enabled: {enabled}") diff --git a/selfdrive/car/hyundai/fingerprints.py b/selfdrive/car/hyundai/fingerprints.py new file mode 100644 index 0000000000..6dcf6214e2 --- /dev/null +++ b/selfdrive/car/hyundai/fingerprints.py @@ -0,0 +1,1804 @@ +# ruff: noqa: E501 +from cereal import car +from openpilot.selfdrive.car.hyundai.values import CAR + +Ecu = car.CarParams.Ecu + +FINGERPRINTS = { + CAR.HYUNDAI_GENESIS: [{ + 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1024: 2, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1342: 6, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 5, 1407: 8, 1419: 8, 1427: 6, 1434: 2, 1456: 4 + }, + { + 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1024: 2, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 3, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1378: 4, 1379: 8, 1384: 5, 1407: 8, 1419: 8, 1427: 6, 1434: 2, 1456: 4 + }, + { + 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1268: 8, 1280: 1, 1281: 3, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 5, 1407: 8, 1419: 8, 1427: 6, 1434: 2, 1437: 8, 1456: 4 + }, + { + 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1378: 4, 1379: 8, 1384: 5, 1407: 8, 1425: 2, 1427: 6, 1437: 8, 1456: 4 + }, + { + 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 5, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1437: 8, 1456: 4 + }], + CAR.SANTA_FE: [{ + 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1227: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1379: 8, 1384: 8, 1407: 8, 1414: 3, 1419: 8, 1427: 6, 1456: 4, 1470: 8 + }, + { + 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 6, 764: 8, 809: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1155: 8, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1180: 8, 1183: 8, 1186: 2, 1227: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1384: 8, 1407: 8, 1414: 3, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 1988: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8 + }, + { + 67: 8, 68: 8, 80: 4, 160: 8, 161: 8, 272: 8, 288: 4, 339: 8, 356: 8, 357: 8, 399: 8, 544: 8, 608: 8, 672: 8, 688: 5, 704: 1, 790: 8, 809: 8, 848: 8, 880: 8, 898: 8, 900: 8, 901: 8, 904: 8, 1056: 8, 1064: 8, 1065: 8, 1072: 8, 1075: 8, 1087: 8, 1088: 8, 1151: 8, 1200: 8, 1201: 8, 1232: 4, 1264: 8, 1265: 8, 1266: 8, 1296: 8, 1306: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1348: 8, 1349: 8, 1369: 8, 1370: 8, 1371: 8, 1407: 8, 1415: 8, 1419: 8, 1440: 8, 1442: 4, 1461: 8, 1470: 8 + }], + CAR.SONATA: [{ + 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 546: 8, 549: 8, 550: 8, 576: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 8, 865: 8, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 908: 8, 909: 8, 912: 7, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1089: 5, 1096: 8, 1107: 5, 1108: 8, 1114: 8, 1136: 8, 1145: 8, 1151: 8, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 8, 1170: 8, 1173: 8, 1180: 8, 1183: 8, 1184: 8, 1186: 2, 1191: 2, 1193: 8, 1210: 8, 1225: 8, 1227: 8, 1265: 4, 1268: 8, 1280: 8, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1330: 8, 1339: 8, 1342: 6, 1343: 8, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1379: 8, 1384: 8, 1394: 8, 1407: 8, 1419: 8, 1427: 6, 1446: 8, 1456: 4, 1460: 8, 1470: 8, 1485: 8, 1504: 3, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8, 2015: 8 + }], + CAR.SONATA_LF: [{ + 66: 8, 67: 8, 68: 8, 127: 8, 273: 8, 274: 8, 275: 8, 339: 8, 356: 4, 399: 8, 447: 8, 512: 6, 544: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1253: 8, 1254: 8, 1255: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1314: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1397: 8, 1407: 8, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2008: 8, 2009: 8, 2012: 8, 2013: 8, 2014: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 + }], + CAR.KIA_SORENTO: [{ + 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1384: 8, 1407: 8, 1411: 8, 1419: 8, 1425: 2, 1427: 6, 1444: 8, 1456: 4, 1470: 8, 1489: 1 + }], + CAR.KIA_STINGER: [{ + 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 359: 8, 544: 8, 576: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 4, 1379: 8, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1456: 4, 1470: 8 + }], + CAR.GENESIS_G80: [{ + 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1024: 2, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1191: 2, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1434: 2, 1456: 4, 1470: 8 + }, + { + 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 359: 8, 544: 8, 546: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1157: 4, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 3, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1434: 2, 1437: 8, 1456: 4, 1470: 8 + }, + { + 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1157: 4, 1162: 8, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1193: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1437: 8, 1456: 4, 1470: 8 + }], + CAR.GENESIS_G90: [{ + 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 359: 8, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1162: 4, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 3, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1434: 2, 1456: 4, 1470: 8, 1988: 8, 2000: 8, 2003: 8, 2004: 8, 2005: 8, 2008: 8, 2011: 8, 2012: 8, 2013: 8 + }], + CAR.IONIQ_EV_2020: [{ + 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 524: 8, 544: 7, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1164: 8, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1379: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1456: 4, 1470: 8, 1473: 8, 1507: 8, 1535: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8, 2013: 8 + }], + CAR.IONIQ: [{ + 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 524: 8, 544: 8, 576: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1164: 8, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1379: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1473: 8, 1476: 8, 1507: 8, 1535: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8, 2013: 8 + }], + CAR.KONA_EV: [{ + 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 549: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 8, 1151: 6, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1307: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1378: 4, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1456: 4, 1470: 8, 1473: 8, 1507: 8, 1535: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8, 1157: 4, 1193: 8, 1379: 8, 1988: 8, 1996: 8 + }], + CAR.KONA_EV_2022: [{ + 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1069: 8, 1078: 4, 1136: 8, 1145: 8, 1151: 8, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 8, 1173: 8, 1183: 8, 1188: 8, 1191: 2, 1193: 8, 1225: 8, 1227: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1339: 8, 1342: 8, 1343: 8, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1379: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1446: 8, 1456: 4, 1470: 8, 1473: 8, 1485: 8, 1507: 8, 1535: 8, 1990: 8, 1998: 8 + }], + CAR.KIA_NIRO_EV: [{ + 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 516: 8, 544: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 8, 1151: 6, 1156: 8, 1157: 4, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1193: 8, 1225: 8, 1260: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1456: 4, 1470: 8, 1473: 8, 1507: 8, 1535: 8, 1990: 8, 1998: 8, 1996: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8, 2015: 8 + }], + CAR.KIA_OPTIMA_H: [{ + 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1168: 7, 1173: 8, 1236: 2, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1371: 8, 1407: 8, 1419: 8, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1476: 8, 1535: 8 + }, + { + 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 576: 8, 593: 8, 688: 5, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 909: 8, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1168: 7, 1173: 8, 1180: 8, 1186: 2, 1191: 2, 1265: 4, 1268: 8, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1371: 8, 1407: 8, 1419: 8, 1420: 8, 1425: 2, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1476: 8, 1535: 8 + }], + CAR.PALISADE: [{ + 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 546: 8, 547: 8, 548: 8, 549: 8, 576: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1123: 8, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1180: 8, 1186: 2, 1191: 2, 1193: 8, 1210: 8, 1225: 8, 1227: 8, 1265: 4, 1280: 8, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1384: 8, 1407: 8, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8 + }], +} + +FW_VERSIONS = { + CAR.AZERA_6TH_GEN: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00IG__ SCC F-CU- 1.00 1.00 99110-G8100 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00IG MDPS C 1.00 1.02 56310G8510\x00 4IGSC103', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00IG MFC AT MES LHD 1.00 1.04 99211-G8100 200511', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00bcsh8p54 U912\x00\x00\x00\x00\x00\x00SIG0M35MH0\xa4 |.', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81641KA051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.AZERA_HEV_6TH_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00IGH MFC AT KOR LHD 1.00 1.00 99211-G8000 180903', + b'\xf1\x00IGH MFC AT KOR LHD 1.00 1.02 99211-G8100 191029', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00IG MDPS C 1.00 1.00 56310M9600\x00 4IHSC100', + b'\xf1\x00IG MDPS C 1.00 1.01 56310M9350\x00 4IH8C101', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00IGhe SCC FHCUP 1.00 1.00 99110-M9100 ', + b'\xf1\x00IGhe SCC FHCUP 1.00 1.01 99110-M9000 ', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006T7N0_C2\x00\x006T7Q2051\x00\x00TIG2H24KA2\x12@\x11\xb7', + b'\xf1\x006T7N0_C2\x00\x006T7VA051\x00\x00TIGSH24KA1\xc7\x85\xe2`', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H570051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816H590051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.HYUNDAI_GENESIS: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DH LKAS 1.1 -150210', + b'\xf1\x00DH LKAS 1.4 -140110', + b'\xf1\x00DH LKAS 1.5 -140425', + ], + }, + CAR.IONIQ: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00AEhe SCC H-CUP 1.01 1.01 96400-G2000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2301 4AEHC107', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00AEH MFC AT EUR LHD 1.00 1.00 95740-G2400 180222', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6F2051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x816U3H1051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H1051\x00\x00HAE0G16US2\x00\x00\x00\x00', + ], + }, + CAR.IONIQ_PHEV_2019: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00AEhe SCC H-CUP 1.01 1.01 96400-G2100 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2501 4AEHC107', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00AEP MFC AT USA LHD 1.00 1.00 95740-G2400 180222', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PAE0G16NS1\x00\x00\x00\x00', + b'\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PAE0G16NS1\xdbD\r\x81', + ], + }, + CAR.IONIQ_PHEV: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2200 ', + b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2600 ', + b'\xf1\x00AEhe SCC F-CUP 1.00 1.02 99110-G2100 ', + b'\xf1\x00AEhe SCC FHCUP 1.00 1.00 99110-G2600 ', + b'\xf1\x00AEhe SCC FHCUP 1.00 1.02 99110-G2100 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00AE MDPS C 1.00 1.01 56310/G2310 4APHC101', + b'\xf1\x00AE MDPS C 1.00 1.01 56310/G2510 4APHC101', + b'\xf1\x00AE MDPS C 1.00 1.01 56310/G2560 4APHC101', + b'\xf1\x00AE MDPS C 1.00 1.01 56310G2510\x00 4APHC101', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00AEP MFC AT EUR LHD 1.00 1.01 95740-G2600 190819', + b'\xf1\x00AEP MFC AT EUR RHD 1.00 1.01 95740-G2600 190819', + b'\xf1\x00AEP MFC AT USA LHD 1.00 1.00 95740-G2700 201027', + b'\xf1\x00AEP MFC AT USA LHD 1.00 1.01 95740-G2600 190819', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816H6G6051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U3H1_C2\x00\x006U3J8051\x00\x00PAETG16UL0\x00\x00\x00\x00', + b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PAE0G16NL0\x00\x00\x00\x00', + b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PAE0G16NL2\xad\xeb\xabt', + b'\xf1\x816U3J8051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J8051\x00\x00PAETG16UL0\x00\x00\x00\x00', + b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PAE0G16NL0\x82zT\xd2', + b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PAE0G16NL2\x00\x00\x00\x00', + ], + }, + CAR.IONIQ_EV_2020: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00AEev SCC F-CUP 1.00 1.00 99110-G7200 ', + b'\xf1\x00AEev SCC F-CUP 1.00 1.00 99110-G7500 ', + b'\xf1\x00AEev SCC F-CUP 1.00 1.01 99110-G7000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00AE MDPS C 1.00 1.01 56310/G7310 4APEC101', + b'\xf1\x00AE MDPS C 1.00 1.01 56310/G7560 4APEC101', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G2600 190730', + b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G2700 201027', + b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.01 95740-G2600 190819', + b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.03 95740-G2500 190516', + b'\xf1\x00AEE MFC AT EUR RHD 1.00 1.01 95740-G2600 190819', + ], + }, + CAR.IONIQ_EV_LTD: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00AEev SCC F-CUP 1.00 1.00 96400-G7000 ', + b'\xf1\x00AEev SCC F-CUP 1.00 1.00 96400-G7100 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00AE MDPS C 1.00 1.02 56310G7300\x00 4AEEC102', + b'\xf1\x00AE MDPS C 1.00 1.03 56310/G7300 4AEEC103', + b'\xf1\x00AE MDPS C 1.00 1.03 56310G7300\x00 4AEEC103', + b'\xf1\x00AE MDPS C 1.00 1.04 56310/G7301 4AEEC104', + b'\xf1\x00AE MDPS C 1.00 1.04 56310/G7501 4AEEC104', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G2300 170703', + b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G2400 180222', + b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G7200 160418', + b'\xf1\x00AEE MFC AT USA LHD 1.00 1.00 95740-G2400 180222', + ], + }, + CAR.IONIQ_HEV_2022: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2600 ', + b'\xf1\x00AEhe SCC FHCUP 1.00 1.00 99110-G2600 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00AE MDPS C 1.00 1.01 56310G2510\x00 4APHC101', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00AEH MFC AT USA LHD 1.00 1.00 95740-G2700 201027', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HAE0G16NL2\x96\xda\xd4\xee', + b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HAE0G16NL2\x00\x00\x00\x00', + ], + }, + CAR.SONATA: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DN8_ SCC F-CU- 1.00 1.00 99110-L0000 ', + b'\xf1\x00DN8_ SCC F-CUP 1.00 1.00 99110-L0000 ', + b'\xf1\x00DN8_ SCC F-CUP 1.00 1.02 99110-L1000 ', + b'\xf1\x00DN8_ SCC FHCUP 1.00 1.00 99110-L0000 ', + b'\xf1\x00DN8_ SCC FHCUP 1.00 1.01 99110-L1000 ', + b'\xf1\x00DN8_ SCC FHCUP 1.00 1.02 99110-L1000 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00DN ESC \x01 102\x19\x04\x13 58910-L1300', + b'\xf1\x00DN ESC \x03 100 \x08\x01 58910-L0300', + b'\xf1\x00DN ESC \x06 104\x19\x08\x01 58910-L0100', + b'\xf1\x00DN ESC \x06 106 \x07\x01 58910-L0100', + b'\xf1\x00DN ESC \x06 107 \x07\x03 58910-L1300', + b'\xf1\x00DN ESC \x07 104\x19\x08\x01 58910-L0100', + b'\xf1\x00DN ESC \x07 106 \x07\x01 58910-L0100', + b'\xf1\x00DN ESC \x07 107"\x08\x07 58910-L0100', + b'\xf1\x00DN ESC \x08 103\x19\x06\x01 58910-L1300', + b'\xf1\x8758910-L0100\xf1\x00DN ESC \x06 104\x19\x08\x01 58910-L0100', + b'\xf1\x8758910-L0100\xf1\x00DN ESC \x06 106 \x07\x01 58910-L0100', + b'\xf1\x8758910-L0100\xf1\x00DN ESC \x07 104\x19\x08\x01 58910-L0100', + b'\xf1\x8758910-L0100\xf1\x00DN ESC \x07 106 \x07\x01 58910-L0100', + ], + (Ecu.engine, 0x7e0, None): [ + b'HM6M1_0a0_F00', + b'HM6M1_0a0_G20', + b'HM6M2_0a0_BD0', + b'\xf1\x81HM6M1_0a0_F00', + b'\xf1\x81HM6M1_0a0_G20', + b'\xf1\x82DNBVN5GMCCXXXDCA', + b'\xf1\x82DNBVN5GMCCXXXG2F', + b'\xf1\x82DNBWN5TMDCXXXG2E', + b'\xf1\x82DNCVN5GMCCXXXF0A', + b'\xf1\x82DNCVN5GMCCXXXG2B', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M1_0a0_J10', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82DNDWN5TMDCXXXJ1A', + b'\xf1\x8739110-2S041\xf1\x81HM6M1_0a0_M00', + b'\xf1\x8739110-2S041\xf1\x81HM6M1_0a0_M10', + b'\xf1\x8739110-2S042\xf1\x81HM6M1_0a0_M00', + b'\xf1\x8739110-2S278\xf1\x82DNDVD5GMCCXXXL5B', + b'\xf1\x87391162M003', + b'\xf1\x87391162M010', + b'\xf1\x87391162M013', + b'\xf1\x87391162M023', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DN8 MDPS C 1,00 1,01 56310L0010\x00 4DNAC101', + b'\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0010 4DNAC101', + b'\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC102', + b'\xf1\x00DN8 MDPS C 1.00 1.01 56310L0010\x00 4DNAC101', + b'\xf1\x00DN8 MDPS C 1.00 1.01 56310L0200\x00 4DNAC102', + b'\xf1\x00DN8 MDPS C 1.00 1.01 56310L0210\x00 4DNAC102', + b'\xf1\x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP100', + b'\xf1\x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP101', + b'\xf1\x00DN8 MDPS R 1.00 1.02 57700-L1000 4DNDP105', + b'\xf1\x8756310-L0010\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0010 4DNAC101', + b'\xf1\x8756310-L0210\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC101', + b'\xf1\x8756310-L1010\xf1\x00DN8 MDPS C 1.00 1.03 56310-L1010 4DNDC103', + b'\xf1\x8756310-L1030\xf1\x00DN8 MDPS C 1.00 1.03 56310-L1030 4DNDC103', + b'\xf1\x8756310L0010\x00\xf1\x00DN8 MDPS C 1,00 1,01 56310L0010\x00 4DNAC101', + b'\xf1\x8756310L0010\x00\xf1\x00DN8 MDPS C 1.00 1.01 56310L0010\x00 4DNAC101', + b'\xf1\x8756310L0210\x00\xf1\x00DN8 MDPS C 1.00 1.01 56310L0210\x00 4DNAC101', + b'\xf1\x8757700-L0000\xf1\x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP100', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DN8 MFC AT KOR LHD 1.00 1.02 99211-L1000 190422', + b'\xf1\x00DN8 MFC AT KOR LHD 1.00 1.04 99211-L1000 191016', + b'\xf1\x00DN8 MFC AT RUS LHD 1.00 1.03 99211-L1000 190705', + b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.00 99211-L0000 190716', + b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.01 99211-L0000 191016', + b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.03 99211-L0000 210603', + b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.05 99211-L1000 201109', + b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.06 99211-L1000 210325', + b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.07 99211-L1000 211223', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00HT6TA260BLHT6TA800A1TDN8C20KS4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x00HT6TA260BLHT6TA810A1TDN8M25GS0\x00\x00\x00\x00\x00\x00\xaa\x8c\xd9p', + b'\xf1\x00HT6WA250BLHT6WA910A1SDN8G25NB1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x00HT6WA250BLHT6WA910A1SDN8G25NB1\x00\x00\x00\x00\x00\x00\x96\xa1\xf1\x92', + b'\xf1\x00HT6WA280BLHT6WAD10A1SDN8G25NB2\x00\x00\x00\x00\x00\x00\x08\xc9O:', + b'\xf1\x00HT6WA280BLHT6WAD10A1SDN8G25NB4\x00\x00\x00\x00\x00\x00g!l[', + b'\xf1\x00HT6WA280BLHT6WAE10A1SDN8G25NB5\x00\x00\x00\x00\x00\x00\xe0t\xa9\xba', + b'\xf1\x00T02601BL T02730A1 VDN8T25XXX730NS5\xf7_\x92\xf5', + b'\xf1\x00T02601BL T02832A1 VDN8T25XXX832NS8G\x0e\xfeE', + b'\xf1\x00T02601BL T02900A1 VDN8T25XXX900NSA\xb9\x13\xf9p', + b'\xf1\x00T02601BL T02900A1 VDN8T25XXX900NSCF\xe4!Y', + b'\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16KB05\x95h%', + b'\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB1\xe3\xc10\xa1', + b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87954A02N060\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 VDN8T25XXX730NS5\xf7_\x92\xf5', + b'\xf1\x87SAKFBA2926554GJ2VefVww\x87xwwwww\x88\x87xww\x87wTo\xfb\xffvUo\xff\x8d\x16\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SAKFBA3030524GJ2UVugww\x97yx\x88\x87\x88vw\x87gww\x87wto\xf9\xfffUo\xff\xa2\x0c\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SAKFBA3356084GJ2\x86fvgUUuWgw\x86www\x87wffvf\xb6\xcf\xfc\xffeUO\xff\x12\x19\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SAKFBA3474944GJ2ffvgwwwwg\x88\x86x\x88\x88\x98\x88ffvfeo\xfa\xff\x86fo\xff\t\xae\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SAKFBA3475714GJ2Vfvgvg\x96yx\x88\x97\x88ww\x87ww\x88\x87xs_\xfb\xffvUO\xff\x0f\xff\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALDBA3510954GJ3ww\x87xUUuWx\x88\x87\x88\x87w\x88wvfwfc_\xf9\xff\x98wO\xffl\xe0\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA3573534GJ3\x89\x98\x89\x88EUuWgwvwwwwww\x88\x87xTo\xfa\xff\x86f\x7f\xffo\x0e\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA3601464GJ3\x88\x88\x88\x88ffvggwvwvw\x87gww\x87wvo\xfb\xff\x98\x88\x7f\xffjJ\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA3753044GJ3UUeVff\x86hwwwwvwwgvfgfvo\xf9\xfffU_\xffC\xae\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA3862294GJ3vfvgvefVxw\x87\x87w\x88\x87xwwwwc_\xf9\xff\x87w\x9f\xff\xd5\xdc\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA3873834GJ3fefVwuwWx\x88\x97\x88w\x88\x97xww\x87wU_\xfb\xff\x86f\x8f\xffN\x04\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA4525334GJ3\x89\x99\x99\x99fevWh\x88\x86\x88fwvgw\x88\x87xfo\xfa\xffuDo\xff\xd1>\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA4626804GJ3wwww\x88\x87\x88xx\x88\x87\x88wwgw\x88\x88\x98\x88\x95_\xf9\xffuDo\xff|\xe7\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA4803224GJ3wwwwwvwg\x88\x88\x98\x88wwww\x87\x88\x88xu\x9f\xfc\xff\x87f\x8f\xff\xea\xea\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA6212564GJ3\x87wwwUTuGg\x88\x86xx\x88\x87\x88\x87\x88\x98xu?\xf9\xff\x97f\x7f\xff\xb8\n\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA6347404GJ3wwwwff\x86hx\x88\x97\x88\x88\x88\x88\x88vfgf\x88?\xfc\xff\x86Uo\xff\xec/\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA6901634GJ3UUuWVeVUww\x87wwwwwvUge\x86/\xfb\xff\xbb\x99\x7f\xff]2\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALDBA7077724GJ3\x98\x88\x88\x88ww\x97ygwvwww\x87ww\x88\x87x\x87_\xfd\xff\xba\x99o\xff\x99\x01\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SALFBA3525114GJ2wvwgvfvggw\x86wffvffw\x86g\x85_\xf9\xff\xa8wo\xffv\xcd\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA3624024GJ2\x88\x88\x88\x88wv\x87hx\x88\x97\x88x\x88\x97\x88ww\x87w\x86o\xfa\xffvU\x7f\xff\xd1\xec\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA3960824GJ2wwwwff\x86hffvfffffvfwfg_\xf9\xff\xa9\x88\x8f\xffb\x99\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA4011074GJ2fgvwwv\x87hw\x88\x87xww\x87wwfgvu_\xfa\xffefo\xff\x87\xc0\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA4121304GJ2x\x87xwff\x86hwwwwww\x87wwwww\x84_\xfc\xff\x98\x88\x9f\xffi\xa6\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA4195874GJ2EVugvf\x86hgwvwww\x87wgw\x86wc_\xfb\xff\x98\x88\x8f\xff\xe23\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA4625294GJ2eVefeUeVx\x88\x97\x88wwwwwwww\xa7o\xfb\xffvw\x9f\xff\xee.\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA4728774GJ2vfvg\x87vwgww\x87ww\x88\x97xww\x87w\x86_\xfb\xffeD?\xffk0\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA5129064GJ2vfvgwv\x87hx\x88\x87\x88ww\x87www\x87wd_\xfa\xffvfo\xff\x1d\x00\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA5454914GJ2\x98\x88\x88\x88\x87vwgx\x88\x87\x88xww\x87ffvf\xa7\x7f\xf9\xff\xa8w\x7f\xff\x1b\x90\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA5987784GJ2UVugDDtGx\x88\x87\x88w\x88\x87xwwwwd/\xfb\xff\x97fO\xff\xb0h\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA5987864GJ2fgvwUUuWgwvw\x87wxwwwww\x84/\xfc\xff\x97w\x7f\xff\xdf\x1d\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA6337644GJ2vgvwwv\x87hgffvwwwwwwww\x85O\xfa\xff\xa7w\x7f\xff\xc5\xfc\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA6802004GJ2UUuWUUuWgw\x86www\x87www\x87w\x96?\xf9\xff\xa9\x88\x7f\xff\x9fK\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA6892284GJ233S5\x87w\x87xx\x88\x87\x88vwwgww\x87w\x84?\xfb\xff\x98\x88\x8f\xff*\x9e\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', + b'\xf1\x87SALFBA7005534GJ2eUuWfg\x86xxww\x87x\x88\x87\x88\x88w\x88\x87\x87O\xfc\xffuUO\xff\xa3k\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB1\xe3\xc10\xa1', + b'\xf1\x87SALFBA7152454GJ2gvwgFf\x86hx\x88\x87\x88vfWfffffd?\xfa\xff\xba\x88o\xff,\xcf\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB1\xe3\xc10\xa1', + b'\xf1\x87SALFBA7460044GJ2gx\x87\x88Vf\x86hx\x88\x87\x88wwwwgw\x86wd?\xfa\xff\x86U_\xff\xaf\x1f\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SALFBA7485034GJ2ww\x87xww\x87xfwvgwwwwvfgf\xa5/\xfc\xff\xa9w_\xff40\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SAMDBA7743924GJ3wwwwww\x87xgwvw\x88\x88\x88\x88wwww\x85_\xfa\xff\x86f\x7f\xff0\x9d\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB2\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SAMDBA7817334GJ3Vgvwvfvgww\x87wwwwwwfgv\x97O\xfd\xff\x88\x88o\xff\x8e\xeb\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB2\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SAMDBA8054504GJ3gw\x87xffvgffffwwwweUVUf?\xfc\xffvU_\xff\xddl\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB2\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SAMFB41553621GC7ww\x87xUU\x85Xvwwg\x88\x88\x88\x88wwgw\x86\xaf\xfb\xffuDo\xff\xaa\x8f\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SAMFB42555421GC7\x88\x88\x88\x88wvwgx\x88\x87\x88wwgw\x87wxw3\x8f\xfc\xff\x98f\x8f\xffga\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SAMFBA7978674GJ2gw\x87xgw\x97ywwwwvUGeUUeU\x87O\xfb\xff\x98w\x8f\xfffF\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SAMFBA8105254GJ2wx\x87\x88Vf\x86hx\x88\x87\x88wwwwwwww\x86O\xfa\xff\x99\x88\x7f\xffZG\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SAMFBA9283024GJ2wwwwEUuWwwgwwwwwwwww\x87/\xfb\xff\x98w\x8f\xff<\xd3\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SAMFBA9708354GJ2wwwwVf\x86h\x88wx\x87xww\x87\x88\x88\x88\x88w/\xfa\xff\x97w\x8f\xff\x86\xa0\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + b'\xf1\x87SANDB45316691GC6\x99\x99\x99\x99\x88\x88\xa8\x8avfwfwwww\x87wxwT\x9f\xfd\xff\x88wo\xff\x1c\xfa\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB3\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SANFB45889451GC7wx\x87\x88gw\x87x\x88\x88x\x88\x87wxw\x87wxw\x87\x8f\xfc\xffeU\x8f\xff+Q\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', + ], + }, + CAR.SONATA_LF: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00LF__ SCC F-CUP 1.00 1.00 96401-C2200 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00LF ESC \t 11 \x17\x01\x13 58920-C2610', + b'\xf1\x00LF ESC \x0c 11 \x17\x01\x13 58920-C2610', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81606D5051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81606D5K51\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81606G1051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00LFF LKAS AT USA LHD 1.00 1.01 95740-C1000 E51', + b'\xf1\x00LFF LKAS AT USA LHD 1.01 1.02 95740-C1000 E52', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24NL1\xb0\x9f\xee\xf5', + b'\xf1\x87LAHSGN012918KF10\x98\x88x\x87\x88\x88x\x87\x88\x88\x98\x88\x87w\x88w\x88\x88\x98\x886o\xf6\xff\x98w\x7f\xff3\x00\xf1\x816W3B1051\x00\x00\xf1\x006W351_C2\x00\x006W3B1051\x00\x00TLF0T20NL2\x00\x00\x00\x00', + b'\xf1\x87LAHSGN012918KF10\x98\x88x\x87\x88\x88x\x87\x88\x88\x98\x88\x87w\x88w\x88\x88\x98\x886o\xf6\xff\x98w\x7f\xff3\x00\xf1\x816W3B1051\x00\x00\xf1\x006W351_C2\x00\x006W3B1051\x00\x00TLF0T20NL2H\r\xbdm', + b'\xf1\x87LAJSG49645724HF0\x87x\x87\x88\x87www\x88\x99\xa8\x89\x88\x99\xa8\x89\x88\x99\xa8\x89S_\xfb\xff\x87f\x7f\xff^2\xf1\x816W3B1051\x00\x00\xf1\x006W351_C2\x00\x006W3B1051\x00\x00TLF0T20NL2H\r\xbdm', + b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B4051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24NL1\x00\x00\x00\x00', + b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B4051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24NL1\xb0\x9f\xee\xf5', + b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B4051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24SL2n\x8d\xbe\xd8', + ], + }, + CAR.TUCSON: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00TL__ FCA F-CUP 1.00 1.01 99110-D3500 ', + b'\xf1\x00TL__ FCA F-CUP 1.00 1.02 99110-D3510 ', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81606G3051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x8971TLC2NAIDDIR002\xf1\x8271TLC2NAIDDIR002', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00TL MFC AT KOR LHD 1.00 1.02 95895-D3800 180719', + b'\xf1\x00TL MFC AT USA LHD 1.00 1.06 95895-D3800 190107', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87KMLDCU585233TJ20wx\x87\x88x\x88\x98\x89vfwfwwww\x87f\x9f\xff\x98\xff\x7f\xf9\xf7s\xf1\x816T6G4051\x00\x00\xf1\x006T6J0_C2\x00\x006T6G4051\x00\x00TTL4G24NH2\x00\x00\x00\x00', + b'\xf1\x87LBJXAN202299KF22\x87x\x87\x88ww\x87xx\x88\x97\x88\x87\x88\x98x\x88\x99\x98\x89\x87o\xf6\xff\x87w\x7f\xff\x12\x9a\xf1\x81U083\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U083\x00\x00\x00\x00\x00\x00TTL2V20KL1\x8fRn\x8a', + ], + }, + CAR.SANTA_FE: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00TM__ SCC F-CUP 1.00 1.00 99110-S1210 ', + b'\xf1\x00TM__ SCC F-CUP 1.00 1.01 99110-S2000 ', + b'\xf1\x00TM__ SCC F-CUP 1.00 1.02 99110-S2000 ', + b'\xf1\x00TM__ SCC F-CUP 1.00 1.03 99110-S2000 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00TM ESC \x02 100\x18\x030 58910-S2600', + b'\xf1\x00TM ESC \x02 102\x18\x07\x01 58910-S2600', + b'\xf1\x00TM ESC \x02 103\x18\x11\x07 58910-S2600', + b'\xf1\x00TM ESC \x02 104\x19\x07\x07 58910-S2600', + b'\xf1\x00TM ESC \x03 103\x18\x11\x07 58910-S2600', + b'\xf1\x00TM ESC \x0c 103\x18\x11\x08 58910-S2650', + b'\xf1\x00TM ESC \r 100\x18\x031 58910-S2650', + b'\xf1\x00TM ESC \r 103\x18\x11\x08 58910-S2650', + b'\xf1\x00TM ESC \r 104\x19\x07\x08 58910-S2650', + b'\xf1\x00TM ESC \r 105\x19\x05# 58910-S1500', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81606EA051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81606G1051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81606G3051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00TM MDPS C 1.00 1.00 56340-S2000 8409', + b'\xf1\x00TM MDPS C 1.00 1.00 56340-S2000 8A12', + b'\xf1\x00TM MDPS C 1.00 1.01 56340-S2000 9129', + b'\xf1\x00TM MDPS R 1.00 1.02 57700-S1100 4TMDP102', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00TM MFC AT EUR LHD 1.00 1.01 99211-S1010 181207', + b'\xf1\x00TM MFC AT USA LHD 1.00 1.00 99211-S2000 180409', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS5\x00\x00\x00\x00', + b'\xf1\x00bcsh8p54 U833\x00\x00\x00\x00\x00\x00TTM4V22US3_<]\xf1', + b'\xf1\x87LBJSGA7082574HG0\x87www\x98\x88\x88\x88\x99\xaa\xb9\x9afw\x86gx\x99\xa7\x89co\xf8\xffvU_\xffR\xaf\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2T20NS1\x00\xa6\xe0\x91', + b'\xf1\x87LBKSGA0458404HG0vfvg\x87www\x89\x99\xa8\x99y\xaa\xa7\x9ax\x88\xa7\x88t_\xf9\xff\x86w\x8f\xff\x15x\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2T20NS1\x00\x00\x00\x00', + b'\xf1\x87LDJUEA6010814HG1\x87w\x87x\x86gvw\x88\x88\x98\x88gw\x86wx\x88\x97\x88\x85o\xf8\xff\x86f_\xff\xd37\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4T20NS0\xf8\x19\x92g', + b'\xf1\x87LDJUEA6458264HG1ww\x87x\x97x\x87\x88\x88\x99\x98\x89g\x88\x86xw\x88\x97x\x86o\xf7\xffvw\x8f\xff3\x9a\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4T20NS0\xf8\x19\x92g', + b'\xf1\x87LDKUEA2045844HG1wwww\x98\x88x\x87\x88\x88\xa8\x88x\x99\x97\x89x\x88\xa7\x88U\x7f\xf8\xffvfO\xffC\x1e\xf1\x816W3E0051\x00\x00\xf1\x006W351_C2\x00\x006W3E0051\x00\x00TTM4T20NS3\x00\x00\x00\x00', + b'\xf1\x87LDKUEA9993304HG1\x87www\x97x\x87\x88\x99\x99\xa9\x99x\x99\xa7\x89w\x88\x97x\x86_\xf7\xffwwO\xffl#\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4T20NS1R\x7f\x90\n', + b'\xf1\x87LDLUEA6061564HG1\xa9\x99\x89\x98\x87wwwx\x88\x97\x88x\x99\xa7\x89x\x99\xa7\x89sO\xf9\xffvU_\xff<\xde\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS50\xcb\xc3\xed', + b'\xf1\x87LDLUEA6159884HG1\x88\x87hv\x99\x99y\x97\x89\xaa\xb8\x9ax\x99\x87\x89y\x99\xb7\x99\xa7?\xf7\xff\x97wo\xff\xf3\x05\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS5\x00\x00\x00\x00', + b'\xf1\x87LDLUEA6852664HG1\x97wWu\x97www\x89\xaa\xc8\x9ax\x99\x97\x89x\x99\xa7\x89SO\xf7\xff\xa8\x88\x7f\xff\x03z\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS50\xcb\xc3\xed', + b'\xf1\x87LDLUEA6898374HG1fevW\x87wwwx\x88\x97\x88h\x88\x96\x88x\x88\xa7\x88ao\xf9\xff\x98\x99\x7f\xffD\xe2\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS5\x00\x00\x00\x00', + b'\xf1\x87LDLUEA6898374HG1fevW\x87wwwx\x88\x97\x88h\x88\x96\x88x\x88\xa7\x88ao\xf9\xff\x98\x99\x7f\xffD\xe2\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS50\xcb\xc3\xed', + b'\xf1\x87SBJWAA5842214GG0\x88\x87\x88xww\x87x\x89\x99\xa8\x99\x88\x99\x98\x89w\x88\x87xw_\xfa\xfffU_\xff\xd1\x8d\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x98{|\xe3', + b'\xf1\x87SBJWAA5890864GG0\xa9\x99\x89\x98\x98\x87\x98y\x89\x99\xa8\x99w\x88\x87xww\x87wvo\xfb\xffuD_\xff\x9f\xb5\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x98{|\xe3', + b'\xf1\x87SBJWAA6562474GG0ffvgeTeFx\x88\x97\x88ww\x87www\x87w\x84o\xfa\xff\x87fO\xff\xc2 \xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x00\x00\x00\x00', + b'\xf1\x87SBJWAA6562474GG0ffvgeTeFx\x88\x97\x88ww\x87www\x87w\x84o\xfa\xff\x87fO\xff\xc2 \xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x98{|\xe3', + b'\xf1\x87SBJWAA7780564GG0wvwgUUeVwwwwx\x88\x87\x88wwwwd_\xfc\xff\x86f\x7f\xff\xd7*\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS2F\x84<\xc0', + b'\xf1\x87SBJWAA8278284GG0ffvgUU\x85Xx\x88\x87\x88x\x88w\x88ww\x87w\x96o\xfd\xff\xa7U_\xff\xf2\xa0\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS2F\x84<\xc0', + b'\xf1\x87SBLWAA4363244GG0wvwgwv\x87hgw\x86ww\x88\x87xww\x87wdo\xfb\xff\x86f\x7f\xff3$\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS6\x00\x00\x00\x00', + b'\xf1\x87SBLWAA4363244GG0wvwgwv\x87hgw\x86ww\x88\x87xww\x87wdo\xfb\xff\x86f\x7f\xff3$\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS6x0\x17\xfe', + b'\xf1\x87SBLWAA4899564GG0VfvgUU\x85Xx\x88\x87\x88vfgf\x87wxwvO\xfb\xff\x97f\xb1\xffSB\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS7\x00\x00\x00\x00', + b'\xf1\x87SBLWAA6622844GG0wwwwff\x86hwwwwx\x88\x87\x88\x88\x88\x88\x88\x98?\xfd\xff\xa9\x88\x7f\xffn\xe5\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS7u\x1e{\x1c', + b'\xf1\x87SDJXAA7656854GG1DEtWUU\x85X\x88\x88\x98\x88w\x88\x87xx\x88\x87\x88\x96o\xfb\xff\x86f\x7f\xff.\xca\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4G24NS2\x00\x00\x00\x00', + b'\xf1\x87SDJXAA7656854GG1DEtWUU\x85X\x88\x88\x98\x88w\x88\x87xx\x88\x87\x88\x96o\xfb\xff\x86f\x7f\xff.\xca\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4G24NS2K\xdaV0', + b'\xf1\x87SDKXAA2443414GG1vfvgwv\x87h\x88\x88\x88\x88ww\x87wwwww\x99_\xfc\xffvD?\xffl\xd2\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4G24NS6\x00\x00\x00\x00', + ], + }, + CAR.SANTA_FE_2022: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00TM__ SCC F-CUP 1.00 1.00 99110-S1500 ', + b'\xf1\x00TM__ SCC FHCUP 1.00 1.00 99110-S1500 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00TM ESC \x01 102!\x04\x03 58910-S2DA0', + b'\xf1\x00TM ESC \x02 101 \x08\x04 58910-S2GA0', + b'\xf1\x00TM ESC \x02 103"\x07\x08 58910-S2GA0', + b'\xf1\x00TM ESC \x03 101 \x08\x02 58910-S2DA0', + b'\xf1\x00TM ESC \x04 101 \x08\x04 58910-S2GA0', + b'\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0', + b'\xf1\x00TM ESC 103!\x030 58910-S1MA0', + b'\xf1\x8758910-S1DA0\xf1\x00TM ESC \x1e 102 \x08\x08 58910-S1DA0', + b'\xf1\x8758910-S2DA0\xf1\x00TM ESC \x03 101 \x08\x02 58910-S2DA0', + b'\xf1\x8758910-S2GA0\xf1\x00TM ESC \x02 101 \x08\x04 58910-S2GA0', + b'\xf1\x8758910-S2GA0\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81HM6M1_0a0_G20', + b'\xf1\x81HM6M1_0a0_H00', + b'\xf1\x81HM6M2_0a0_G00', + b'\xf1\x82TACVN5GMI3XXXH0A', + b'\xf1\x82TACVN5GSI3XXXH0A', + b'\xf1\x82TMBZN5TMD3XXXG2E', + b'\xf1\x82TMCFD5MMCXXXXG0A', + b'\xf1\x87 \xf1\x81 ', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M1_0a0_J10', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M1_0a0_L50', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82TMDWN5TMD3TXXJ1A', + b'\xf1\x8739101-2STN8\xf1\x81HM6M1_0a0_M00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00TM MDPS C 1.00 1.01 56310-S1AB0 4TSDC101', + b'\xf1\x00TM MDPS C 1.00 1.01 56310-S1EB0 4TSDC101', + b'\xf1\x00TM MDPS C 1.00 1.02 56370-S2AA0 0B19', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00TM MFC AT EUR LHD 1.00 1.03 99211-S1500 210224', + b'\xf1\x00TM MFC AT MES LHD 1.00 1.05 99211-S1500 220126', + b'\xf1\x00TMA MFC AT MEX LHD 1.00 1.01 99211-S2500 210205', + b'\xf1\x00TMA MFC AT USA LHD 1.00 1.00 99211-S2500 200720', + b'\xf1\x00TMA MFC AT USA LHD 1.00 1.01 99211-S2500 210205', + b'\xf1\x00TMA MFC AT USA LHD 1.00 1.03 99211-S2500 220414', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00HT6TA290BLHT6TAF00A1STM0M25GS1\x00\x00\x00\x00\x00\x006\xd8\x97\x15', + b'\xf1\x00HT6WA280BLHT6WAD00A1STM2G25NH2\x00\x00\x00\x00\x00\x00\xf8\xc0\xc3\xaa', + b'\xf1\x00HT6WA280BLHT6WAD00A1STM4G25NH1\x00\x00\x00\x00\x00\x00\x9cl\x04\xbc', + b'\xf1\x00T02601BL T02730A1 VTMPT25XXX730NS2\xa6\x06\x88\xf7', + b'\xf1\x00T02601BL T02800A1 VTMPT25XXX800NS4\xed\xaf\xed\xf5', + b'\xf1\x00T02601BL T02900A1 VTMPT25XXW900NS1c\x918\xc5', + b'\xf1\x00T02601BL T02900A1 VTMPT25XXX900NS8\xb7\xaa\xfe\xfc', + b'\xf1\x00T02601BL T02900A1 VTMPT25XXX900NSA\xf3\xf4Uj', + b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 VTMPT25XXX730NS2\xa6', + b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 VTMPT25XXX730NS2\xa6\x06\x88\xf7', + b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02900A1 \xf1\x00T02601BL T02900A1 VTMPT25XXX900NS8\xb7\xaa\xfe\xfc', + b'\xf1\x87KMMYBU034207SB72x\x89\x88\x98h\x88\x98\x89\x87fhvvfWf33_\xff\x87\xff\x8f\xfa\x81\xe5\xf1\x89HT6TAF00A1\xf1\x82STM0M25GS1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SDMXCA8653204GN1EVugEUuWwwwwww\x87wwwwwv/\xfb\xff\xa8\x88\x9f\xff\xa5\x9c\xf1\x89HT6WAD00A1\xf1\x82STM4G25NH1\x00\x00\x00\x00\x00\x00', + b'\xf1\x87SDMXCA9087684GN1VfvgUUeVwwgwwwwwffffU?\xfb\xff\x97\x88\x7f\xff+\xa4\xf1\x89HT6WAD00A1\xf1\x82STM4G25NH1\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.SANTA_FE_HEV_2022: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00TMhe SCC FHCUP 1.00 1.00 99110-CL500 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLAC0 4TSHC102', + b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLEC0 4TSHC102', + b'\xf1\x00TM MDPS C 1.00 1.02 56310-GA000 4TSHA100', + b'\xf1\x00TM MDPS R 1.00 1.05 57700-CL000 4TSHP105', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00TMA MFC AT USA LHD 1.00 1.03 99211-S2500 220414', + b'\xf1\x00TMH MFC AT EUR LHD 1.00 1.06 99211-S1500 220727', + b'\xf1\x00TMH MFC AT USA LHD 1.00 1.03 99211-S1500 210224', + b'\xf1\x00TMH MFC AT USA LHD 1.00 1.06 99211-S1500 220727', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2H16SA3\xa3\x1b\xe14', + b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2H16UA3I\x94\xac\x8f', + b'\xf1\x87959102T250\x00\x00\x00\x00\x00\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E14\x00\x00\x00\x00\x00\x00\x00TTM2H16SA2\x80\xd7l\xb2', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x87391312MTC1', + b'\xf1\x87391312MTE0', + b'\xf1\x87391312MTL0', + ], + }, + CAR.SANTA_FE_PHEV_2022: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00TMhe SCC FHCUP 1.00 1.01 99110-CL500 ', + b'\xf1\x8799110CL500\xf1\x00TMhe SCC FHCUP 1.00 1.00 99110-CL500 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLAC0 4TSHC102', + b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLEC0 4TSHC102', + b'\xf1\x00TM MDPS C 1.00 1.02 56310CLEC0\x00 4TSHC102', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00TMP MFC AT USA LHD 1.00 1.03 99211-S1500 210224', + b'\xf1\x00TMP MFC AT USA LHD 1.00 1.06 99211-S1500 220727', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2P16SA1\x0b\xc5\x0f\xea', + b'\xf1\x8795441-3D121\x00\xf1\x81E16\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2P16SA0o\x88^\xbe', + b'\xf1\x8795441-3D121\x00\xf1\x81E16\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2P16SA1\x0b\xc5\x0f\xea', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x87391312MTF0', + b'\xf1\x87391312MTF1', + ], + }, + CAR.CUSTIN_1ST_GEN: { + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00KU ESC \x01 101!\x02\x03 58910-O3200', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00KU__ SCC F-CUP 1.00 1.01 99110-O3000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00KU MDPS C 1.00 1.01 56310/O3100 4KUCC101', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00KU2 MFC AT CHN LHD 1.00 1.02 99211-O3000 220923', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x87391212MEC0', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00bcsh8p54 U928\x00\x00\x00\x00\x00\x00SKU0T15KB2\x92U\xf9M', + ], + }, + CAR.KIA_STINGER: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5000 ', + b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5100 ', + b'\xf1\x00CK__ SCC F_CUP 1.00 1.02 96400-J5100 ', + b'\xf1\x00CK__ SCC F_CUP 1.00 1.03 96400-J5100 ', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xe0\x19\xff\xe7\xe7g\x01\xa2\x00\x0f\x00\x9e\x00\x06\x00\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x0f\x0e\x0f\x0f\x0e\r\x00\x00\x7f\x02.\xff\x00\x00~p\x00\x00\x00\x00u\xff\xf9\xff\x00\x00\x00\x00V\t\xd5\x01\xc0\x00\x00\x00\x007\xfb\xfc\x0b\x8d\x00', + b'\xf1\x81606DE051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640E0051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640H0051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x82CKJN3TMSDE0B\x00\x00\x00\x00', + b'\xf1\x82CKKN3TMD_H0A\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00CK MDPS R 1.00 1.04 57700-J5200 4C2CL104', + b'\xf1\x00CK MDPS R 1.00 1.04 57700-J5220 4C2VL104', + b'\xf1\x00CK MDPS R 1.00 1.04 57700-J5420 4C4VL104', + b'\xf1\x00CK MDPS R 1.00 1.06 57700-J5220 4C2VL106', + b'\xf1\x00CK MDPS R 1.00 1.06 57700-J5420 4C4VL106', + b'\xf1\x00CK MDPS R 1.00 1.07 57700-J5220 4C2VL107', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CK MFC AT EUR LHD 1.00 1.03 95740-J5000 170822', + b'\xf1\x00CK MFC AT USA LHD 1.00 1.03 95740-J5000 170822', + b'\xf1\x00CK MFC AT USA LHD 1.00 1.04 95740-J5000 180504', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\t\xb7\x17\xf5', + b'\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', + b'\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SCK0T33NB2\xb3\xee\xba\xdc', + b'\xf1\x87VCJLE17622572DK0vd6D\x99\x98y\x97vwVffUfvfC%CuT&Dx\x87o\xff{\x1c\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', + b'\xf1\x87VDHLG17000192DK2xdFffT\xa5VUD$DwT\x86wveVeeD&T\x99\xba\x8f\xff\xcc\x99\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\t\xb7\x17\xf5', + b'\xf1\x87VDHLG17000192DK2xdFffT\xa5VUD$DwT\x86wveVeeD&T\x99\xba\x8f\xff\xcc\x99\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', + b'\xf1\x87VDHLG17000192DK2xdFffT\xa5VUD$DwT\x86wveVeeD&T\x99\xba\x8f\xff\xcc\x99\xf1\x89E21\x00\x00\x00\x00\x00\x00\x00\xf1\x82SCK0T33NB0', + b'\xf1\x87VDHLG17034412DK2vD6DfVvVTD$D\x99w\x88\x98EDEDeT6DgfO\xff\xc3=\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', + b'\xf1\x87VDHLG17118862DK2\x8awWwgu\x96wVfUVwv\x97xWvfvUTGTx\x87o\xff\xc9\xed\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', + b'\xf1\x87VDHLG17274082DK2wfFf\x89x\x98wUT5T\x88v\x97xgeGefTGTVvO\xff\x1c\x14\xf1\x81E19\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E19\x00\x00\x00\x00\x00\x00\x00SCK0T33UB2\xee[\x97S', + b'\xf1\x87VDKLJ18675252DK6\x89vhgwwwwveVU\x88w\x87w\x99vgf\x97vXfgw_\xff\xc2\xfb\xf1\x89E25\x00\x00\x00\x00\x00\x00\x00\xf1\x82TCK0T33NB2', + b'\xf1\x87WAJTE17552812CH4vfFffvfVeT5DwvvVVdFeegeg\x88\x88o\xff\x1a]\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00TCK2T20NB1\x19\xd2\x00\x94', + ], + }, + CAR.KIA_STINGER_2022: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CK__ SCC F-CUP 1.00 1.00 99110-J5500 ', + b'\xf1\x00CK__ SCC FHCUP 1.00 1.00 99110-J5500 ', + b'\xf1\x00CK__ SCC FHCUP 1.00 1.00 99110-J5600 ', + b'\xf1\x00CK__ SCC FHCUP 1.00 1.01 99110-J5100 ', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81640N2051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640R0051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81HM6M1_0a0_H00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5300 4C2CL503', + b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5320 4C2VL503', + b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5380 4C2VR503', + b'\xf1\x00CK MDPS R 1.00 5.04 57700-J5520 4C4VL504', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CK MFC AT AUS RHD 1.00 1.00 99211-J5500 210622', + b'\xf1\x00CK MFC AT KOR LHD 1.00 1.00 99211-J5500 210622', + b'\xf1\x00CK MFC AT USA LHD 1.00 1.00 99211-J5500 210622', + b'\xf1\x00CK MFC AT USA LHD 1.00 1.03 99211-J5000 201209', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00bcsh8p54 E31\x00\x00\x00\x00\x00\x00\x00SCK0T25KH2B\xfbI\xe2', + b'\xf1\x00bcsh8p54 E31\x00\x00\x00\x00\x00\x00\x00SCK0T33NH07\xdf\xf0\xc1', + b'\xf1\x00bcsh8p54 E31\x00\x00\x00\x00\x00\x00\x00TCK0T33NH0%g~\xd3', + b'\xf1\x87VCNLF11383972DK1vffV\x99\x99\x89\x98\x86eUU\x88wg\x89vfff\x97fff\x99\x87o\xff"\xc1\xf1\x81E30\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E30\x00\x00\x00\x00\x00\x00\x00SCK0T33GH0\xbe`\xfb\xc6', + ], + }, + CAR.PALISADE: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00LX2 SCC FHCUP 1.00 1.04 99110-S8100 ', + b'\xf1\x00LX2_ SCC F-CUP 1.00 1.04 99110-S8100 ', + b'\xf1\x00LX2_ SCC F-CUP 1.00 1.05 99110-S8100 ', + b'\xf1\x00LX2_ SCC FHCU- 1.00 1.05 99110-S8100 ', + b'\xf1\x00LX2_ SCC FHCUP 1.00 1.00 99110-S8110 ', + b'\xf1\x00LX2_ SCC FHCUP 1.00 1.04 99110-S8100 ', + b'\xf1\x00LX2_ SCC FHCUP 1.00 1.05 99110-S8100 ', + b'\xf1\x00ON__ FCA FHCUP 1.00 1.01 99110-S9110 ', + b'\xf1\x00ON__ FCA FHCUP 1.00 1.02 99110-S9100 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00LX ESC \x01 103\x19\t\x10 58910-S8360', + b'\xf1\x00LX ESC \x01 1031\t\x10 58910-S8360', + b'\xf1\x00LX ESC \x0b 101\x19\x03\x17 58910-S8330', + b'\xf1\x00LX ESC \x0b 102\x19\x05\x07 58910-S8330', + b'\xf1\x00LX ESC \x0b 103\x19\t\x07 58910-S8330', + b'\xf1\x00LX ESC \x0b 103\x19\t\t 58910-S8350', + b'\xf1\x00LX ESC \x0b 103\x19\t\x10 58910-S8360', + b'\xf1\x00LX ESC \x0b 104 \x10\x16 58910-S8360', + b'\xf1\x00ON ESC \x01 101\x19\t\x08 58910-S9360', + b'\xf1\x00ON ESC \x0b 100\x18\x12\x18 58910-S9360', + b'\xf1\x00ON ESC \x0b 101\x19\t\x05 58910-S9320', + b'\xf1\x00ON ESC \x0b 101\x19\t\x08 58910-S9360', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81640J0051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640K0051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640S1051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00LX2 MDPS C 1,00 1,03 56310-S8020 4LXDC103', + b'\xf1\x00LX2 MDPS C 1.00 1.03 56310-S8000 4LXDC103', + b'\xf1\x00LX2 MDPS C 1.00 1.03 56310-S8020 4LXDC103', + b'\xf1\x00LX2 MDPS C 1.00 1.04 56310-S8020 4LXDC104', + b'\xf1\x00ON MDPS C 1.00 1.00 56340-S9000 8B13', + b'\xf1\x00ON MDPS C 1.00 1.01 56340-S9000 9201', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.00 99211-S8110 210226', + b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.03 99211-S8100 190125', + b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.05 99211-S8100 190909', + b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.07 99211-S8100 200422', + b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.08 99211-S8100 200903', + b'\xf1\x00ON MFC AT USA LHD 1.00 1.01 99211-S9100 181105', + b'\xf1\x00ON MFC AT USA LHD 1.00 1.03 99211-S9100 200720', + b'\xf1\x00ON MFC AT USA LHD 1.00 1.04 99211-S9100 211227', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00bcsh8p54 U872\x00\x00\x00\x00\x00\x00TON4G38NB1\x96z28', + b'\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', + b'\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00TON2G38NB5j\x94.\xde', + b'\xf1\x87LBLUFN591307KF25vgvw\x97wwwy\x99\xa7\x99\x99\xaa\xa9\x9af\x88\x96h\x95o\xf7\xff\x99f/\xff\xe4c\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB2\xd7\xc1/\xd1', + b"\xf1\x87LBLUFN622950KF36\xa8\x88\x88\x88\x87w\x87xh\x99\x96\x89\x88\x99\x98\x89\x88\x99\x98\x89\x87o\xf6\xff\x98\x88o\xffx'\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8", + b'\xf1\x87LBLUFN650868KF36\xa9\x98\x89\x88\xa8\x88\x88\x88h\x99\xa6\x89fw\x86gw\x88\x97x\xaa\x7f\xf6\xff\xbb\xbb\x8f\xff+\x82\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8', + b'\xf1\x87LBLUFN655162KF36\x98\x88\x88\x88\x98\x88\x88\x88x\x99\xa7\x89x\x99\xa7\x89x\x99\x97\x89g\x7f\xf7\xffwU_\xff\xe9!\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8', + b'\xf1\x87LBLUFN731381KF36\xb9\x99\x89\x98\x98\x88\x88\x88\x89\x99\xa8\x99\x88\x99\xa8\x89\x88\x88\x98\x88V\x7f\xf6\xff\x99w\x8f\xff\xad\xd8\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8', + b'\xf1\x87LDKVAA0028604HH1\xa8\x88x\x87vgvw\x88\x99\xa8\x89gw\x86ww\x88\x97x\x97o\xf9\xff\x97w\x7f\xffo\x02\xf1\x81U872\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U872\x00\x00\x00\x00\x00\x00TON4G38NB1\x96z28', + b'\xf1\x87LDKVAA3068374HH1wwww\x87xw\x87y\x99\xa7\x99w\x88\x87xw\x88\x97x\x85\xaf\xfa\xffvU/\xffU\xdc\xf1\x81U872\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U872\x00\x00\x00\x00\x00\x00TON4G38NB1\x96z28', + b'\xf1\x87LDKVBN382172KF26\x98\x88\x88\x88\xa8\x88\x88\x88x\x99\xa7\x89\x87\x88\x98x\x98\x99\xa9\x89\xa5_\xf6\xffDDO\xff\xcd\x16\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', + b'\xf1\x87LDKVBN424201KF26\xba\xaa\x9a\xa9\x99\x99\x89\x98\x89\x99\xa8\x99\x88\x99\x98\x89\x88\x99\xa8\x89v\x7f\xf7\xffwf_\xffq\xa6\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', + b'\xf1\x87LDKVBN540766KF37\x87wgv\x87w\x87xx\x99\x97\x89v\x88\x97h\x88\x88\x88\x88x\x7f\xf6\xffvUo\xff\xd3\x01\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', + b'\xf1\x87LDLVAA4225634HH1\x98\x88\x88\x88eUeVx\x88\x87\x88g\x88\x86xx\x88\x87\x88\x86o\xf9\xff\x87w\x7f\xff\xf2\xf7\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', + b'\xf1\x87LDLVAA4478824HH1\x87wwwvfvg\x89\x99\xa8\x99w\x88\x87x\x89\x99\xa8\x99\xa6o\xfa\xfffU/\xffu\x92\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', + b'\xf1\x87LDLVAA4777834HH1\x98\x88x\x87\x87wwwx\x88\x87\x88x\x99\x97\x89x\x88\x97\x88\x86o\xfa\xff\x86fO\xff\x1d9\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', + b'\xf1\x87LDLVAA5194534HH1ffvguUUUx\x88\xa7\x88h\x99\x96\x89x\x88\x97\x88ro\xf9\xff\x98wo\xff\xaaM\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', + b'\xf1\x87LDLVAA5949924HH1\xa9\x99y\x97\x87wwwx\x99\x97\x89x\x99\xa7\x89x\x99\xa7\x89\x87_\xfa\xffeD?\xff\xf1\xfd\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', + b'\xf1\x87LDLVBN560098KF26\x86fff\x87vgfg\x88\x96xfw\x86gfw\x86g\x95\xf6\xffeU_\xff\x92c\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', + b'\xf1\x87LDLVBN602045KF26\xb9\x99\x89\x98\x97vwgy\xaa\xb7\x9af\x88\x96hw\x99\xa7y\xa9\x7f\xf5\xff\x99w\x7f\xff,\xd3\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN628911KF26\xa9\x99\x89\x98\x98\x88\x88\x88y\x99\xa7\x99fw\x86gw\x88\x87x\x83\x7f\xf6\xff\x98wo\xff2\xda\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN645817KF37\x87www\x98\x87xwx\x99\x97\x89\x99\x99\x99\x99g\x88\x96x\xb6_\xf7\xff\x98fo\xff\xe2\x86\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN662115KF37\x98\x88\x88\x88\xa8\x88\x88\x88x\x99\x97\x89x\x99\xa7\x89\x88\x99\xa8\x89\x88\x7f\xf7\xfffD_\xff\xdc\x84\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN667933KF37\xb9\x99\x89\x98\xb9\x99\x99\x99x\x88\x87\x88w\x88\x87x\x88\x88\x98\x88\xcbo\xf7\xffe3/\xffQ!\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN673087KF37\x97www\x86fvgx\x99\x97\x89\x99\xaa\xa9\x9ag\x88\x86x\xe9_\xf8\xff\x98w\x7f\xff"\xad\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN673841KF37\x98\x88x\x87\x86g\x86xy\x99\xa7\x99\x88\x99\xa8\x89w\x88\x97xdo\xf5\xff\x98\x88\x8f\xffT\xec\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN681363KF37\x98\x88\x88\x88\x97x\x87\x88y\xaa\xa7\x9a\x88\x88\x98\x88\x88\x88\x88\x88vo\xf6\xffvD\x7f\xff%v\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN713782KF37\x99\x99y\x97\x98\x88\x88\x88x\x88\x97\x88\x88\x99\x98\x89\x88\x99\xa8\x89\x87o\xf7\xffeU?\xff7,\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN713890KF26\xb9\x99\x89\x98\xa9\x99\x99\x99x\x99\x97\x89\x88\x99\xa8\x89\x88\x99\xb8\x89Do\xf7\xff\xa9\x88o\xffs\r\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN733215KF37\x99\x98y\x87\x97wwwi\x99\xa6\x99x\x99\xa7\x89V\x88\x95h\x86o\xf7\xffeDO\xff\x12\xe7\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN750044KF37\xca\xa9\x8a\x98\xa7wwwy\xaa\xb7\x9ag\x88\x96x\x88\x99\xa8\x89\xb9\x7f\xf6\xff\xa8w\x7f\xff\xbe\xde\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN752612KF37\xba\xaa\x8a\xa8\x87w\x87xy\xaa\xa7\x9a\x88\x99\x98\x89x\x88\x97\x88\x96o\xf6\xffvU_\xffh\x1b\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN755553KF37\x87xw\x87\x97w\x87xy\x99\xa7\x99\x99\x99\xa9\x99Vw\x95gwo\xf6\xffwUO\xff\xb5T\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', + b'\xf1\x87LDLVBN757883KF37\x98\x87xw\x98\x87\x88xy\xaa\xb7\x9ag\x88\x96x\x89\x99\xa8\x99e\x7f\xf6\xff\xa9\x88o\xff5\x15\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', + b'\xf1\x87LDMVBN778156KF37\x87vWe\xa9\x99\x99\x99y\x99\xb7\x99\x99\x99\x99\x99x\x99\x97\x89\xa8\x7f\xf8\xffwf\x7f\xff\x82_\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', + b'\xf1\x87LDMVBN780576KF37\x98\x87hv\x97x\x97\x89x\x99\xa7\x89\x88\x99\x98\x89w\x88\x97x\x98\x7f\xf7\xff\xba\x88\x8f\xff\x1e0\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', + b'\xf1\x87LDMVBN783485KF37\x87www\x87vwgy\x99\xa7\x99\x99\x99\xa9\x99Vw\x95g\x89_\xf6\xff\xa9w_\xff\xc5\xd6\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', + b'\xf1\x87LDMVBN811844KF37\x87vwgvfffx\x99\xa7\x89Vw\x95gg\x88\xa6xe\x8f\xf6\xff\x97wO\xff\t\x80\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', + b'\xf1\x87LDMVBN830601KF37\xa7www\xa8\x87xwx\x99\xa7\x89Uw\x85Ww\x88\x97x\x88o\xf6\xff\x8a\xaa\x7f\xff\xe2:\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', + b'\xf1\x87LDMVBN848789KF37\x87w\x87x\x87w\x87xy\x99\xb7\x99\x87\x88\x98x\x88\x99\xa8\x89\x87\x7f\xf6\xfffUo\xff\xe3!\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN851595KF37\x97wgvvfffx\x99\xb7\x89\x88\x99\x98\x89\x87\x88\x98x\x99\x7f\xf7\xff\x97w\x7f\xff@\xf3\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN871852KF37\xb9\x99\x99\x99\xa8\x88\x88\x88y\x99\xa7\x99x\x99\xa7\x89\x88\x88\x98\x88\x89o\xf7\xff\xaa\x88o\xff\x0e\xed\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN873175KF26\xa8\x88\x88\x88vfVex\x99\xb7\x89\x88\x99\x98\x89x\x88\x97\x88f\x7f\xf7\xff\xbb\xaa\x8f\xff,\x04\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN879401KF26veVU\xa8\x88\x88\x88g\x88\xa6xVw\x95gx\x88\xa7\x88v\x8f\xf9\xff\xdd\xbb\xbf\xff\xb3\x99\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN881314KF37\xa8\x88h\x86\x97www\x89\x99\xa8\x99w\x88\x97xx\x99\xa7\x89\xca\x7f\xf8\xff\xba\x99\x8f\xff\xd8v\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN888651KF37\xa9\x99\x89\x98vfff\x88\x99\x98\x89w\x99\xa7y\x88\x88\x98\x88D\x8f\xf9\xff\xcb\x99\x8f\xff\xa5\x1e\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN889419KF37\xa9\x99y\x97\x87w\x87xx\x88\x97\x88w\x88\x97x\x88\x99\x98\x89e\x9f\xf9\xffeUo\xff\x901\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN895969KF37vefV\x87vgfx\x99\xa7\x89\x99\x99\xb9\x99f\x88\x96he_\xf7\xffxwo\xff\x14\xf9\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN899222KF37\xa8\x88x\x87\x97www\x98\x99\x99\x89\x88\x99\x98\x89f\x88\x96hdo\xf7\xff\xbb\xaa\x9f\xff\xe2U\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + b'\xf1\x87LDMVBN950669KF37\x97www\x96fffy\x99\xa7\x99\xa9\x99\xaa\x99g\x88\x96x\xb8\x8f\xf9\xffTD/\xff\xa7\xcb\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', + ], + }, + CAR.VELOSTER: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JS__ SCC H-CUP 1.00 1.02 95650-J3200 ', + b'\xf1\x00JS__ SCC HNCUP 1.00 1.02 95650-J3100 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816V8RAC00121.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x01TJS-JDK06F200H0A', + b'\x01TJS-JNU06F200H0A', + b'391282BJF5 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00JSL MDPS C 1.00 1.03 56340-J3000 8308', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JS LKAS AT KOR LHD 1.00 1.03 95740-J3000 K33', + b'\xf1\x00JS LKAS AT USA LHD 1.00 1.02 95740-J3000 K32', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJS0T16KS2\x0e\xba\x1e\xa2', + b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJS0T16NS1\x00\x00\x00\x00', + b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJS0T16NS1\xba\x02\xb8\x80', + ], + }, + CAR.GENESIS_G70: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00IK__ SCC F-CUP 1.00 1.01 96400-G9100 ', + b'\xf1\x00IK__ SCC F-CUP 1.00 1.02 96400-G9100 ', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81640F0051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00IK MDPS R 1.00 1.06 57700-G9420 4I4VL106', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00IK MFC AT USA LHD 1.00 1.01 95740-G9000 170920', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB2\x11\x1am\xda', + b'\xf1\x87VDJLT17895112DN4\x88fVf\x99\x88\x88\x88\x87fVe\x88vhwwUFU\x97eFex\x99\x7f\xff\xb7\x82\xf1\x81E25\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB2\x11\x1am\xda', + ], + }, + CAR.GENESIS_G70_2020: { + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00IK MDPS R 1.00 1.07 57700-G9220 4I2VL107', + b'\xf1\x00IK MDPS R 1.00 1.07 57700-G9420 4I4VL107', + b'\xf1\x00IK MDPS R 1.00 1.08 57700-G9200 4I2CL108', + b'\xf1\x00IK MDPS R 1.00 1.08 57700-G9420 4I4VL108', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB4\xecE\xefL', + b'\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T20KB3Wuvz', + b'\xf1\x87VCJLP18407832DN3\x88vXfvUVT\x97eFU\x87d7v\x88eVeveFU\x89\x98\x7f\xff\xb2\xb0\xf1\x81E25\x00\x00\x00', + b'\xf1\x87VDJLC18480772DK9\x88eHfwfff\x87eFUeDEU\x98eFe\x86T5DVyo\xff\x87s\xf1\x81E25\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33KB5\x9f\xa5&\x81', + b'\xf1\x87VDKLT18912362DN4wfVfwefeveVUwfvw\x88vWfvUFU\x89\xa9\x8f\xff\x87w\xf1\x81E25\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB4\xecE\xefL', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00IK__ SCC F-CUP 1.00 1.02 96400-G9100 ', + b'\xf1\x00IK__ SCC F-CUP 1.00 1.02 96400-G9100 \xf1\xa01.02', + b'\xf1\x00IK__ SCC FHCUP 1.00 1.02 96400-G9000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00IK MFC AT KOR LHD 1.00 1.01 95740-G9000 170920', + b'\xf1\x00IK MFC AT USA LHD 1.00 1.01 95740-G9000 170920', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81606G2051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640H0051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640J0051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.GENESIS_G80: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DH__ SCC F-CUP 1.00 1.01 96400-B1120 ', + b'\xf1\x00DH__ SCC FHCUP 1.00 1.01 96400-B1110 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DH LKAS AT KOR LHD 1.01 1.02 95895-B1500 170810', + b'\xf1\x00DH LKAS AT USA LHD 1.01 1.01 95895-B1500 161014', + b'\xf1\x00DH LKAS AT USA LHD 1.01 1.02 95895-B1500 170810', + b'\xf1\x00DH LKAS AT USA LHD 1.01 1.03 95895-B1500 180713', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00bcsh8p54 E18\x00\x00\x00\x00\x00\x00\x00SDH0G33KH2\xae\xde\xd5!', + b'\xf1\x00bcsh8p54 E18\x00\x00\x00\x00\x00\x00\x00SDH0G38NH2j\x9dA\x1c', + b'\xf1\x00bcsh8p54 E18\x00\x00\x00\x00\x00\x00\x00SDH0T33NH3\x97\xe6\xbc\xb8', + b'\xf1\x00bcsh8p54 E18\x00\x00\x00\x00\x00\x00\x00TDH0G38NH3:-\xa9n', + b'\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SDH0T33NH4\xd7O\x9e\xc9', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81640A4051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81640F0051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.GENESIS_G90: { + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87VDGMD15352242DD3w\x87gxwvgv\x87wvw\x88wXwffVfffUfw\x88o\xff\x06J\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcshcm49 E14\x00\x00\x00\x00\x00\x00\x00SHI0G50NB1tc5\xb7', + b'\xf1\x87VDGMD15866192DD3x\x88x\x89wuFvvfUf\x88vWwgwwwvfVgx\x87o\xff\xbc^\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcshcm49 E14\x00\x00\x00\x00\x00\x00\x00SHI0G50NB1tc5\xb7', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00HI__ SCC F-CUP 1.00 1.01 96400-D2100 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00HI LKAS AT USA LHD 1.00 1.00 95895-D2020 160302', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x810000000000\x00', + ], + }, + CAR.KONA: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00OS__ SCC F-CUP 1.00 1.00 95655-J9200 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x816V5RAK00018.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'"\x01TOS-0NU06F301J02', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00OS MDPS C 1.00 1.05 56310J9030\x00 4OSDC105', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00OS9 LKAS AT USA LHD 1.00 1.00 95740-J9300 g21', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x816U2VE051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VE051\x00\x00DOS4T16NS3\x00\x00\x00\x00', + ], + }, + CAR.KIA_CEED: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CD__ SCC F-CUP 1.00 1.02 99110-J7000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00CD MDPS C 1.00 1.06 56310-XX000 4CDEC106', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CD LKAS AT EUR LHD 1.00 1.01 99211-J7000 B40', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x01TCD-JECU4F202H0K', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x816U2V7051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V7051\x00\x00DCD0T14US1\x00\x00\x00\x00', + b'\xf1\x816U2V7051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V7051\x00\x00DCD0T14US1U\x867Z', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00CD ESC \x03 102\x18\x08\x05 58920-J7350', + ], + }, + CAR.KIA_FORTE: { + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00BD MDPS C 1.00 1.02 56310-XX000 4BD2C102', + b'\xf1\x00BD MDPS C 1.00 1.08 56310/M6300 4BDDC108', + b'\xf1\x00BD MDPS C 1.00 1.08 56310M6300\x00 4BDDC108', + b'\xf1\x00BDm MDPS C A.01 1.03 56310M7800\x00 4BPMC103', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00BD LKAS AT USA LHD 1.00 1.04 95740-M6000 J33', + b'\xf1\x00BDP LKAS AT USA LHD 1.00 1.05 99211-M6500 744', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00BDPE_SCC FHCUPC 1.00 1.04 99110-M6500\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x00BD__ SCC H-CUP 1.00 1.02 99110-M6000 ', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x01TBDM1NU06F200H01', + b'391182B945\x00', + b'\xf1\x81616F2051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x816VGRAH00018.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x8758900-M7AB0 \xf1\x816VQRAD00127.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006V2B0_C2\x00\x006V2C6051\x00\x00CBD0N20NL1\x00\x00\x00\x00', + b'\xf1\x816U2VC051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DBD0T16SS0\x00\x00\x00\x00', + b"\xf1\x816U2VC051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DBD0T16SS0\xcf\x1e'\xc3", + ], + }, + CAR.KIA_K5_2021: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DL3_ SCC F-CUP 1.00 1.03 99110-L2100 ', + b'\xf1\x00DL3_ SCC FHCUP 1.00 1.03 99110-L2000 ', + b'\xf1\x00DL3_ SCC FHCUP 1.00 1.03 99110-L2100 ', + b'\xf1\x00DL3_ SCC FHCUP 1.00 1.04 99110-L2100 ', + b'\xf1\x8799110L2000\xf1\x00DL3_ SCC FHCUP 1.00 1.03 99110-L2000 ', + b'\xf1\x8799110L2100\xf1\x00DL3_ SCC F-CUP 1.00 1.03 99110-L2100 ', + b'\xf1\x8799110L2100\xf1\x00DL3_ SCC FHCUP 1.00 1.03 99110-L2100 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DL3 MDPS C 1.00 1.01 56310-L3220 4DLAC101', + b'\xf1\x00DL3 MDPS C 1.00 1.02 56310-L2220 4DLDC102', + b'\xf1\x00DL3 MDPS C 1.00 1.02 56310L3220\x00 4DLAC102', + b'\xf1\x8756310-L3110\xf1\x00DL3 MDPS C 1.00 1.01 56310-L3110 4DLAC101', + b'\xf1\x8756310-L3220\xf1\x00DL3 MDPS C 1.00 1.01 56310-L3220 4DLAC101', + b'\xf1\x8757700-L3000\xf1\x00DL3 MDPS R 1.00 1.02 57700-L3000 4DLAP102', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DL3 MFC AT KOR LHD 1.00 1.04 99210-L2000 210527', + b'\xf1\x00DL3 MFC AT USA LHD 1.00 1.03 99210-L3000 200915', + b'\xf1\x00DL3 MFC AT USA LHD 1.00 1.04 99210-L3000 210208', + b'\xf1\x00DL3 MFC AT USA LHD 1.00 1.05 99210-L3000 211222', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00DL ESC \x01 104 \x07\x12 58910-L2200', + b'\xf1\x00DL ESC \x06 101 \x04\x02 58910-L3200', + b'\xf1\x00DL ESC \x06 103"\x08\x06 58910-L3200', + b'\xf1\x00DL ESC \t 100 \x06\x02 58910-L3800', + b'\xf1\x8758910-L3200\xf1\x00DL ESC \x06 101 \x04\x02 58910-L3200', + b'\xf1\x8758910-L3600\xf1\x00DL ESC \x03 100 \x08\x02 58910-L3600', + b'\xf1\x8758910-L3800\xf1\x00DL ESC \t 101 \x07\x02 58910-L3800', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81HM6M2_0a0_DQ0', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82DLDWN5TMDCXXXJ1B', + b'\xf1\x87391212MKT0', + b'\xf1\x87391212MKT3', + b'\xf1\x87391212MKV0', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00HT6TA261BLHT6TAB00A1SDL0C20KS0\x00\x00\x00\x00\x00\x00\\\x9f\xa5\x15', + b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL2T16NB1ia\x0b\xb8', + b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL2T16NB2.\x13\xf6\xed', + b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL4T16NB05\x94t\x18', + b'\xf1\x87954A02N300\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 WDL3T25XXX730NS2b\x1f\xb8%', + b'\xf1\x87SALFEA5652514GK2UUeV\x88\x87\x88xxwg\x87ww\x87wwfwvd/\xfb\xffvU_\xff\x93\xd3\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL2T16NB1ia\x0b\xb8', + b'\xf1\x87SALFEA6046104GK2wvwgeTeFg\x88\x96xwwwwffvfe?\xfd\xff\x86fo\xff\x97A\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL2T16NB1ia\x0b\xb8', + b'\xf1\x87SCMSAA8572454GK1\x87x\x87\x88Vf\x86hgwvwvwwgvwwgT?\xfb\xff\x97fo\xffH\xb8\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL4T16NB05\x94t\x18', + ], + }, + CAR.KIA_K5_HEV_2020: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DLhe SCC FHCUP 1.00 1.02 99110-L7000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DL3 MDPS C 1.00 1.02 56310-L7000 4DLHC102', + b'\xf1\x00DL3 MDPS C 1.00 1.02 56310-L7220 4DLHC102', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.02 99210-L2000 200309', + b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.04 99210-L2000 210527', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x87391162JLA0', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00PSBG2323 E08\x00\x00\x00\x00\x00\x00\x00TDL2H20KA2\xe3\xc6cz', + b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TDL2H20KA5T\xf2\xc9\xc2', + ], + }, + CAR.KONA_EV: { + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00OS IEB \x01 212 \x11\x13 58520-K4000', + b'\xf1\x00OS IEB \x02 212 \x11\x13 58520-K4000', + b'\xf1\x00OS IEB \x03 210 \x02\x14 58520-K4000', + b'\xf1\x00OS IEB \x03 212 \x11\x13 58520-K4000', + b'\xf1\x00OS IEB \r 105\x18\t\x18 58520-K4000', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00OE2 LKAS AT EUR LHD 1.00 1.00 95740-K4200 200', + b'\xf1\x00OSE LKAS AT EUR LHD 1.00 1.00 95740-K4100 W40', + b'\xf1\x00OSE LKAS AT EUR RHD 1.00 1.00 95740-K4100 W40', + b'\xf1\x00OSE LKAS AT KOR LHD 1.00 1.00 95740-K4100 W40', + b'\xf1\x00OSE LKAS AT USA LHD 1.00 1.00 95740-K4300 W50', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00OS MDPS C 1.00 1.03 56310/K4550 4OEDC103', + b'\xf1\x00OS MDPS C 1.00 1.04 56310K4000\x00 4OEDC104', + b'\xf1\x00OS MDPS C 1.00 1.04 56310K4050\x00 4OEDC104', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00OSev SCC F-CUP 1.00 1.00 99110-K4000 ', + b'\xf1\x00OSev SCC F-CUP 1.00 1.00 99110-K4100 ', + b'\xf1\x00OSev SCC F-CUP 1.00 1.01 99110-K4000 ', + b'\xf1\x00OSev SCC FNCUP 1.00 1.01 99110-K4000 ', + ], + }, + CAR.KONA_EV_2022: { + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00OS IEB \x02 102"\x05\x16 58520-K4010', + b'\xf1\x00OS IEB \x03 102"\x05\x16 58520-K4010', + b'\xf1\x00OS IEB \r 102"\x05\x16 58520-K4010', + b'\xf1\x8758520-K4010\xf1\x00OS IEB \x02 101 \x11\x13 58520-K4010', + b'\xf1\x8758520-K4010\xf1\x00OS IEB \x03 101 \x11\x13 58520-K4010', + b'\xf1\x8758520-K4010\xf1\x00OS IEB \x04 101 \x11\x13 58520-K4010', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00OSP LKA AT AUS RHD 1.00 1.04 99211-J9200 904', + b'\xf1\x00OSP LKA AT CND LHD 1.00 1.02 99211-J9110 802', + b'\xf1\x00OSP LKA AT EUR LHD 1.00 1.04 99211-J9200 904', + b'\xf1\x00OSP LKA AT EUR RHD 1.00 1.02 99211-J9110 802', + b'\xf1\x00OSP LKA AT EUR RHD 1.00 1.04 99211-J9200 904', + b'\xf1\x00OSP LKA AT USA LHD 1.00 1.04 99211-J9200 904', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00OSP MDPS C 1.00 1.02 56310-K4271 4OEPC102', + b'\xf1\x00OSP MDPS C 1.00 1.02 56310/K4271 4OEPC102', + b'\xf1\x00OSP MDPS C 1.00 1.02 56310/K4970 4OEPC102', + b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4260\x00 4OEPC102', + b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4261\x00 4OEPC102', + b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4971\x00 4OEPC102', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00YB__ FCA ----- 1.00 1.01 99110-K4500 \x00\x00\x00', + ], + }, + CAR.KONA_EV_2ND_GEN: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00SXev RDR ----- 1.00 1.00 99110-BF000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00SX2EMFC AT KOR LHD 1.00 1.00 99211-BF000 230410', + ], + }, + CAR.KIA_NIRO_EV: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4000 ', + b'\xf1\x00DEev SCC F-CUP 1.00 1.02 96400-Q4000 ', + b'\xf1\x00DEev SCC F-CUP 1.00 1.02 96400-Q4100 ', + b'\xf1\x00DEev SCC F-CUP 1.00 1.03 96400-Q4100 ', + b'\xf1\x00DEev SCC FHCUP 1.00 1.03 96400-Q4000 ', + b'\xf1\x8799110Q4000\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4000 ', + b'\xf1\x8799110Q4100\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4100 ', + b'\xf1\x8799110Q4500\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4500 ', + b'\xf1\x8799110Q4600\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4600 ', + b'\xf1\x8799110Q4600\xf1\x00DEev SCC FHCUP 1.00 1.00 99110-Q4600 ', + b'\xf1\x8799110Q4600\xf1\x00DEev SCC FNCUP 1.00 1.00 99110-Q4600 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DE MDPS C 1.00 1.04 56310Q4100\x00 4DEEC104', + b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4000\x00 4DEEC105', + b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4100\x00 4DEEC105', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.00 99211-Q4000 191211', + b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.00 99211-Q4100 200706', + b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.03 95740-Q4000 180821', + b'\xf1\x00DEE MFC AT KOR LHD 1.00 1.03 95740-Q4000 180821', + b'\xf1\x00DEE MFC AT USA LHD 1.00 1.00 99211-Q4000 191211', + b'\xf1\x00DEE MFC AT USA LHD 1.00 1.01 99211-Q4500 210428', + b'\xf1\x00DEE MFC AT USA LHD 1.00 1.03 95740-Q4000 180821', + ], + }, + CAR.KIA_NIRO_EV_2ND_GEN: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00SG2_ RDR ----- 1.00 1.01 99110-AT000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00SG2EMFC AT EUR LHD 1.01 1.09 99211-AT000 220801', + b'\xf1\x00SG2EMFC AT USA LHD 1.01 1.09 99211-AT000 220801', + ], + }, + CAR.KIA_NIRO_PHEV: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6D1051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816H6F4051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PDE0G16NL2&[\xc3\x01', + b'\xf1\x816U3H3051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H3051\x00\x00PDE0G16NS1\x00\x00\x00\x00', + b'\xf1\x816U3H3051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H3051\x00\x00PDE0G16NS1\x13\xcd\x88\x92', + b'\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PDE0G16NS2\x00\x00\x00\x00', + b"\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PDE0G16NS2\xf4'\\\x91", + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DE MDPS C 1.00 1.01 56310G5520\x00 4DEPC101', + b'\xf1\x00DE MDPS C 1.00 1.09 56310G5301\x00 4DEHC109', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DEP MFC AT USA LHD 1.00 1.00 95740-G5010 170117', + b'\xf1\x00DEP MFC AT USA LHD 1.00 1.01 95740-G5010 170424', + b'\xf1\x00DEP MFC AT USA LHD 1.00 1.05 99211-G5000 190826', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DEhe SCC F-CUP 1.00 1.02 99110-G5100 ', + b'\xf1\x00DEhe SCC H-CUP 1.01 1.02 96400-G5100 ', + ], + }, + CAR.KIA_NIRO_PHEV_2022: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6G6051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PDE0G16NL3\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DE MDPS C 1.00 1.01 56310G5520\x00 4DEPC101', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DEP MFC AT USA LHD 1.00 1.00 99211-G5500 210428', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DEhe SCC F-CUP 1.00 1.00 99110-G5600 ', + ], + }, + CAR.KIA_NIRO_HEV_2021: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HDE0G16NL3\x00\x00\x00\x00', + b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HDE0G16NL3\xb9\xd3\xfaW', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DE MDPS C 1.00 1.01 56310G5520\x00 4DEPC101', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DEH MFC AT USA LHD 1.00 1.00 99211-G5500 210428', + b'\xf1\x00DEH MFC AT USA LHD 1.00 1.07 99211-G5000 201221', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DEhe SCC FHCUP 1.00 1.00 99110-G5600 ', + ], + }, + CAR.KIA_SELTOS: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x8799110Q5100\xf1\x00SP2_ SCC FHCUP 1.01 1.05 99110-Q5100 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x8758910-Q5450\xf1\x00SP ESC \x07 101\x19\t\x05 58910-Q5450', + b'\xf1\x8758910-Q5450\xf1\x00SP ESC \t 101\x19\t\x05 58910-Q5450', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x01TSP2KNL06F100J0K', + b'\x01TSP2KNL06F200J0K', + b'\xf1\x81616D2051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81616D5051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00SP2 MDPS C 1.00 1.04 56300Q5200 ', + b'\xf1\x00SP2 MDPS C 1.01 1.05 56300Q5200 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00SP2 MFC AT USA LHD 1.00 1.04 99210-Q5000 191114', + b'\xf1\x00SP2 MFC AT USA LHD 1.00 1.05 99210-Q5000 201012', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87954A22D200\xf1\x81T01950A1 \xf1\x00T0190XBL T01950A1 DSP2T16X4X950NS6\xd30\xa5\xb9', + b'\xf1\x87954A22D200\xf1\x81T01950A1 \xf1\x00T0190XBL T01950A1 DSP2T16X4X950NS8\r\xfe\x9c\x8b', + b'\xf1\x87CZLUB49370612JF7h\xa8y\x87\x99\xa7hv\x99\x97fv\x88\x87x\x89x\x96O\xff\x88\xff\xff\xff.@\xf1\x816V2C2051\x00\x00\xf1\x006V2B0_C2\x00\x006V2C2051\x00\x00CSP4N20NS3\x00\x00\x00\x00', + ], + }, + CAR.KIA_OPTIMA_G4: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4100 ', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00JF ESC \x0f 16 \x16\x06\x17 58920-D5080', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JFWGN LDWS AT USA LHD 1.00 1.02 95895-D4100 G21', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6J0051\x00\x00\xf1\x006T6J0_C2\x00\x006T6J0051\x00\x00TJF0T20NSB\x00\x00\x00\x00', + ], + }, + CAR.KIA_OPTIMA_G4_FL: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4110 ', + ], + (Ecu.abs, 0x7d1, None): [ + b"\xf1\x00JF ESC \t 11 \x18\x03' 58920-D5260", + b'\xf1\x00JF ESC \x0b 11 \x18\x030 58920-D5180', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5001 h32', + b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5100 h32', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJF0T16NL0\t\xd2GW', + b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\x00\x00\x00\x00', + b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\xca3\xeb.', + b'\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DJF0T16NL2\x9eA\x80\x01', + b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJF0T16NL0\t\xd2GW', + b'\xf1\x816U2VA051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\x00\x00\x00\x00', + b'\xf1\x816U2VA051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\xca3\xeb.', + b'\xf1\x816U2VC051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DJF0T16NL2\x9eA\x80\x01', + b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B8051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B8051\x00\x00TJFSG24NH27\xa7\xc2\xb4', + ], + }, + CAR.KIA_OPTIMA_H: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JFhe SCC FNCUP 1.00 1.00 96400-A8000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JFP LKAS AT EUR LHD 1.00 1.03 95895-A8100 160711', + ], + }, + CAR.KIA_OPTIMA_H_G4_FL: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JFhe SCC FHCUP 1.00 1.01 99110-A8500 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JFH MFC AT KOR LHD 1.00 1.01 95895-A8200 180323', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6D1051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.ELANTRA: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00AD LKAS AT USA LHD 1.01 1.01 95895-F2000 251', + b'\xf1\x00ADP LKAS AT USA LHD 1.00 1.03 99211-F2000 X31', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006T6J0_C2\x00\x006T6F0051\x00\x00TAD0N20NS2\x00\x00\x00\x00', + b'\xf1\x006T6J0_C2\x00\x006T6F0051\x00\x00TAD0N20NS2\xc5\x92\x9e\x8a', + b'\xf1\x006T6J0_C2\x00\x006T6F0051\x00\x00TAD0N20SS2.~\x90\x87', + b'\xf1\x006T6K0_C2\x00\x006T6S2051\x00\x00TAD0N20NSD\x00\x00\x00\x00', + b'\xf1\x006T6K0_C2\x00\x006T6S2051\x00\x00TAD0N20NSD(\xfcA\x9d', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8161657051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816165D051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816165E051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x8161698051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00AD ESC \x11 11 \x18\x05\x06 58910-F2840', + b'\xf1\x00AD ESC \x11 12 \x15\t\t 58920-F2810', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00AD__ SCC H-CUP 1.00 1.00 99110-F2100 ', + b'\xf1\x00AD__ SCC H-CUP 1.00 1.01 96400-F2100 ', + ], + }, + CAR.ELANTRA_GT_I30: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00PD LKAS AT KOR LHD 1.00 1.02 95740-G3000 A51', + b'\xf1\x00PD LKAS AT USA LHD 1.01 1.01 95740-G3100 A54', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U2U0_C2\x00\x006U2T0051\x00\x00DPD0D16KS0u\xce\x1fk', + b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DPD0H16NS0e\x0e\xcd\x8e', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00PD MDPS C 1.00 1.00 56310G3300\x00 4PDDC100', + b'\xf1\x00PD MDPS C 1.00 1.04 56310/G3300 4PDDC104', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00PD ESC \t 104\x18\t\x03 58920-G3350', + b'\xf1\x00PD ESC \x0b 104\x18\t\x03 58920-G3350', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00PD__ SCC F-CUP 1.00 1.00 96400-G3300 ', + b'\xf1\x00PD__ SCC FNCUP 1.01 1.00 96400-G3000 ', + ], + }, + CAR.ELANTRA_2021: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CN7_ SCC F-CUP 1.00 1.01 99110-AA000 ', + b'\xf1\x00CN7_ SCC FHCUP 1.00 1.01 99110-AA000 ', + b'\xf1\x00CN7_ SCC FNCUP 1.00 1.01 99110-AA000 ', + b'\xf1\x8799110AA000\xf1\x00CN7_ SCC F-CUP 1.00 1.01 99110-AA000 ', + b'\xf1\x8799110AA000\xf1\x00CN7_ SCC FHCUP 1.00 1.01 99110-AA000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00CN7 MDPS C 1.00 1.06 56310/AA070 4CNDC106', + b'\xf1\x00CN7 MDPS C 1.00 1.06 56310AA050\x00 4CNDC106', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.00 99210-AB000 200819', + b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.01 99210-AB000 210205', + b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.03 99210-AA000 200819', + b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.03 99210-AB000 220426', + b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.06 99210-AA000 220111', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00CN ESC \t 101 \x10\x03 58910-AB800', + b'\xf1\x8758910-AA800\xf1\x00CN ESC \t 104 \x08\x03 58910-AA800', + b'\xf1\x8758910-AA800\xf1\x00CN ESC \t 105 \x10\x03 58910-AA800', + b'\xf1\x8758910-AB800\xf1\x00CN ESC \t 101 \x10\x03 58910-AB800\xf1\xa01.01', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00HT6WA280BLHT6VA640A1CCN0N20NS5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x00HT6WA280BLHT6VA640A1CCN0N20NS5\x00\x00\x00\x00\x00\x00\xe8\xba\xce\xfa', + b'\xf1\x87CXLQF40189012JL2f\x88\x86\x88\x88vUex\xb8\x88\x88\x88\x87\x88\x89fh?\xffz\xff\xff\xff\x08z\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', + b'\xf1\x87CXMQFM1916035JB2\x88vvgg\x87Wuwgev\xa9\x98\x88\x98h\x99\x9f\xffh\xff\xff\xff\xa5\xee\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', + b'\xf1\x87CXMQFM2135005JB2E\xb9\x89\x98W\xa9y\x97h\xa9\x98\x99wxvwh\x87\x7f\xffx\xff\xff\xff,,\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', + b'\xf1\x87CXMQFM2728305JB2E\x97\x87xw\x87vwgw\x84x\x88\x88w\x89EI\xbf\xff{\xff\xff\xff\xe6\x0e\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', + b'\xf1\x87CXMQFM3806705JB2\x89\x87wwx\x88g\x86\x99\x87\x86xwwv\x88yv\x7f\xffz\xff\xff\xffV\x15\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81HM6M2_0a0_FF0', + b'\xf1\x82CNCVD0AMFCXCSFFB', + b'\xf1\x82CNCWD0AMFCXCSFFA', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M2_0a0_G80', + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M2_0a0_HC0', + ], + }, + CAR.ELANTRA_HEV_2021: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.03 99210-AA000 200819', + b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.05 99210-AA000 210930', + b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.07 99210-AA000 220426', + b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.08 99210-AA000 220728', + b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.09 99210-AA000 221108', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CNhe SCC FHCUP 1.00 1.01 99110-BY000 ', + b'\xf1\x8799110BY000\xf1\x00CNhe SCC FHCUP 1.00 1.01 99110-BY000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00CN7 MDPS C 1.00 1.03 56310BY0500 4CNHC103', + b'\xf1\x00CN7 MDPS C 1.00 1.04 56310BY050\x00 4CNHC104', + b'\xf1\x8756310/BY050\xf1\x00CN7 MDPS C 1.00 1.02 56310/BY050 4CNHC102', + b'\xf1\x8756310/BY050\xf1\x00CN7 MDPS C 1.00 1.03 56310/BY050 4CNHC103', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006U3L0_C2\x00\x006U3K3051\x00\x00HCN0G16NS0\x00\x00\x00\x00', + b'\xf1\x006U3L0_C2\x00\x006U3K3051\x00\x00HCN0G16NS0\xb9?A\xaa', + b'\xf1\x006U3L0_C2\x00\x006U3K9051\x00\x00HCN0G16NS1\x00\x00\x00\x00', + b'\xf1\x816U3K3051\x00\x00\xf1\x006U3L0_C2\x00\x006U3K3051\x00\x00HCN0G16NS0\x00\x00\x00\x00', + b'\xf1\x816U3K3051\x00\x00\xf1\x006U3L0_C2\x00\x006U3K3051\x00\x00HCN0G16NS0\xb9?A\xaa', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816H6G6051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x816H6G8051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.KONA_HEV: { + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00OS IEB \x01 104 \x11 58520-CM000', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00OShe SCC FNCUP 1.00 1.01 99110-CM000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00OS MDPS C 1.00 1.00 56310CM030\x00 4OHDC100', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00OSH LKAS AT KOR LHD 1.00 1.01 95740-CM000 l31', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HOS0G16DS1\x16\xc7\xb0\xd9', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.SONATA_HYBRID: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00DNhe SCC F-CUP 1.00 1.02 99110-L5000 ', + b'\xf1\x00DNhe SCC FHCUP 1.00 1.02 99110-L5000 ', + b'\xf1\x8799110L5000\xf1\x00DNhe SCC F-CUP 1.00 1.02 99110-L5000 ', + b'\xf1\x8799110L5000\xf1\x00DNhe SCC FHCUP 1.00 1.02 99110-L5000 ', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00DN8 MDPS C 1.00 1.03 56310L5450\x00 4DNHC104', + b'\xf1\x8756310-L5450\xf1\x00DN8 MDPS C 1.00 1.02 56310-L5450 4DNHC102', + b'\xf1\x8756310-L5450\xf1\x00DN8 MDPS C 1.00 1.03 56310-L5450 4DNHC103', + b'\xf1\x8756310-L5500\xf1\x00DN8 MDPS C 1.00 1.02 56310-L5500 4DNHC102', + b'\xf1\x8756310L5450\x00\xf1\x00DN8 MDPS C 1.00 1.03 56310L5450\x00 4DNHC104', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.04 99211-L1000 191016', + b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.05 99211-L1000 201109', + b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.06 99211-L1000 210325', + b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.07 99211-L1000 211223', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00PSBG2323 E09\x00\x00\x00\x00\x00\x00\x00TDN2H20SA5\x97R\x88\x9e', + b'\xf1\x00PSBG2333 E14\x00\x00\x00\x00\x00\x00\x00TDN2H20SA6N\xc2\xeeW', + b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TDN2H20SA7\x1a3\xf9\xab', + b'\xf1\x87959102T250\x00\x00\x00\x00\x00\xf1\x81E09\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2323 E09\x00\x00\x00\x00\x00\x00\x00TDN2H20SA5\x97R\x88\x9e', + b'\xf1\x87959102T250\x00\x00\x00\x00\x00\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E14\x00\x00\x00\x00\x00\x00\x00TDN2H20SA6N\xc2\xeeW', + b'\xf1\x87PCU\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81E16\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TDN2H20SA7\x1a3\xf9\xab', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x87391062J002', + b'\xf1\x87391162J012', + b'\xf1\x87391162J013', + b'\xf1\x87391162J014', + ], + }, + CAR.KIA_SORENTO: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00UMP LKAS AT USA LHD 1.01 1.01 95740-C6550 d01', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00UM ESC \x0c 12 \x18\x05\x06 58910-C6330', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00UM__ SCC F-CUP 1.00 1.00 96400-C6500 ', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87LDKUAA0348164HE3\x87www\x87www\x88\x88\xa8\x88w\x88\x97xw\x88\x97x\x86o\xf8\xff\x87f\x7f\xff\x15\xe0\xf1\x81U811\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U811\x00\x00\x00\x00\x00\x00TUM4G33NL3V|DG', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81640F0051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.KIA_EV6: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CV1_ RDR ----- 1.00 1.01 99110-CV000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CV1 MFC AT EUR LHD 1.00 1.05 99210-CV000 211027', + b'\xf1\x00CV1 MFC AT EUR LHD 1.00 1.06 99210-CV000 220328', + b'\xf1\x00CV1 MFC AT EUR RHD 1.00 1.00 99210-CV100 220630', + b'\xf1\x00CV1 MFC AT KOR LHD 1.00 1.04 99210-CV000 210823', + b'\xf1\x00CV1 MFC AT KOR LHD 1.00 1.05 99210-CV000 211027', + b'\xf1\x00CV1 MFC AT KOR LHD 1.00 1.06 99210-CV000 220328', + b'\xf1\x00CV1 MFC AT USA LHD 1.00 1.00 99210-CV100 220630', + b'\xf1\x00CV1 MFC AT USA LHD 1.00 1.05 99210-CV000 211027', + b'\xf1\x00CV1 MFC AT USA LHD 1.00 1.06 99210-CV000 220328', + ], + }, + CAR.IONIQ_5: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00NE1_ RDR ----- 1.00 1.00 99110-GI000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.06 99211-GI000 210813', + b'\xf1\x00NE1 MFC AT EUR RHD 1.00 1.01 99211-GI010 211007', + b'\xf1\x00NE1 MFC AT EUR RHD 1.00 1.02 99211-GI010 211206', + b'\xf1\x00NE1 MFC AT KOR LHD 1.00 1.05 99211-GI010 220614', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI020 230719', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.01 99211-GI010 211007', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.02 99211-GI010 211206', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.03 99211-GI010 220401', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.05 99211-GI010 220614', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.06 99211-GI010 230110', + ], + }, + CAR.IONIQ_6: { + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CE__ RDR ----- 1.00 1.01 99110-KL000 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CE MFC AT EUR LHD 1.00 1.03 99211-KL000 221011', + b'\xf1\x00CE MFC AT USA LHD 1.00 1.04 99211-KL000 221213', + ], + }, + CAR.TUCSON_4TH_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00NX4 FR_CMR AT EUR LHD 1.00 2.02 99211-N9000 14E', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9210 14G', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9220 14K', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9240 14Q', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9250 14W', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9260 14Y', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.01 99211-N9100 14A', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.01 99211-N9240 14T', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00NX4__ 1.00 1.00 99110-N9100 ', + b'\xf1\x00NX4__ 1.00 1.01 99110-N9000 ', + b'\xf1\x00NX4__ 1.01 1.00 99110-N9100 ', + ], + }, + CAR.SANTA_CRUZ_1ST_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-CW000 14M', + b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-CW010 14X', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00NX4__ 1.00 1.00 99110-K5000 ', + b'\xf1\x00NX4__ 1.01 1.00 99110-K5000 ', + ], + }, + CAR.KIA_SPORTAGE_5TH_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00NQ5 FR_CMR AT AUS RHD 1.00 1.00 99211-P1040 663', + b'\xf1\x00NQ5 FR_CMR AT GEN LHD 1.00 1.00 99211-P1060 665', + b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1030 662', + b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1040 663', + b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1060 665', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00NQ5__ 1.00 1.02 99110-P1000 ', + b'\xf1\x00NQ5__ 1.00 1.03 99110-P1000 ', + b'\xf1\x00NQ5__ 1.01 1.03 99110-CH000 ', + b'\xf1\x00NQ5__ 1.01 1.03 99110-P1000 ', + ], + }, + CAR.GENESIS_GV70_1ST_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.01 99211-AR200 220125', + b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.01 99211-AR300 220125', + b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.04 99211-AR000 210204', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JK1_ SCC FHCUP 1.00 1.00 99110-AR200 ', + b'\xf1\x00JK1_ SCC FHCUP 1.00 1.00 99110-AR300 ', + b'\xf1\x00JK1_ SCC FHCUP 1.00 1.02 99110-AR000 ', + ], + }, + CAR.GENESIS_GV60_EV_1ST_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JW1 MFC AT USA LHD 1.00 1.02 99211-CU000 211215', + b'\xf1\x00JW1 MFC AT USA LHD 1.00 1.02 99211-CU100 211215', + b'\xf1\x00JW1 MFC AT USA LHD 1.00 1.03 99211-CU000 221118', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JW1_ RDR ----- 1.00 1.00 99110-CU000 ', + ], + }, + CAR.KIA_SORENTO_4TH_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00MQ4 MFC AT USA LHD 1.00 1.00 99210-R5100 221019', + b'\xf1\x00MQ4 MFC AT USA LHD 1.00 1.03 99210-R5000 200903', + b'\xf1\x00MQ4 MFC AT USA LHD 1.00 1.05 99210-R5000 210623', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00MQ4_ SCC F-CUP 1.00 1.06 99110-P2000 ', + b'\xf1\x00MQ4_ SCC FHCUP 1.00 1.06 99110-P2000 ', + b'\xf1\x00MQ4_ SCC FHCUP 1.00 1.08 99110-P2000 ', + ], + }, + CAR.KIA_SORENTO_HEV_4TH_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00MQ4HMFC AT KOR LHD 1.00 1.04 99210-P2000 200330', + b'\xf1\x00MQ4HMFC AT KOR LHD 1.00 1.12 99210-P2000 230331', + b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.10 99210-P2000 210406', + b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.11 99210-P2000 211217', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00MQhe SCC FHCUP 1.00 1.04 99110-P4000 ', + b'\xf1\x00MQhe SCC FHCUP 1.00 1.06 99110-P4000 ', + b'\xf1\x00MQhe SCC FHCUP 1.00 1.07 99110-P4000 ', + ], + }, + CAR.KIA_NIRO_HEV_2ND_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00SG2HMFC AT USA LHD 1.01 1.08 99211-AT000 220531', + b'\xf1\x00SG2HMFC AT USA LHD 1.01 1.09 99211-AT000 220801', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00SG2_ RDR ----- 1.00 1.01 99110-AT000 ', + ], + }, + CAR.GENESIS_GV80: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00JX1 MFC AT USA LHD 1.00 1.02 99211-T6110 220513', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00JX1_ SCC FHCUP 1.00 1.01 99110-T6100 ', + ], + }, + CAR.KIA_CARNIVAL_4TH_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00KA4 MFC AT KOR LHD 1.00 1.06 99210-R0000 220221', + b'\xf1\x00KA4 MFC AT USA LHD 1.00 1.00 99210-R0100 230105', + b'\xf1\x00KA4 MFC AT USA LHD 1.00 1.05 99210-R0000 201221', + b'\xf1\x00KA4 MFC AT USA LHD 1.00 1.06 99210-R0000 220221', + b'\xf1\x00KA4CMFC AT CHN LHD 1.00 1.01 99211-I4000 210525', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00KA4_ SCC FHCUP 1.00 1.00 99110-R0100 ', + b'\xf1\x00KA4_ SCC FHCUP 1.00 1.03 99110-R0000 ', + b'\xf1\x00KA4c SCC FHCUP 1.00 1.01 99110-I4000 ', + ], + }, + CAR.KIA_K8_HEV_1ST_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00GL3HMFC AT KOR LHD 1.00 1.03 99211-L8000 210907', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00GL3_ RDR ----- 1.00 1.02 99110-L8000 ', + ], + }, + CAR.STARIA_4TH_GEN: { + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00US4 MFC AT KOR LHD 1.00 1.06 99211-CG000 230524', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00US4_ RDR ----- 1.00 1.00 99110-CG000 ', + ], + }, + + # Non SCC + CAR.GENESIS_G70_2021_NON_SCC: { + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00IK MDPS R 1.00 1.08 57700-G9200 4I2CL108', + ], + (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00IK__ SCC --CUP 1.00 1.02 96400-G9100 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00IK MFC MT USA LHD 1.00 1.01 95740-G9000 170920', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81606G2051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.KONA_NON_SCC: { + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x816V5RAJ00040.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8161699051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00OS MDPS C 1.00 1.05 56310J9030\x00 4OSDC105', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00OS9 LKAS AT USA LHD 1.00 1.00 95740-J9200 g30', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006T6J0_C2\x00\x006T6K1051\x00\x00TOS4N20NS2\x00\x00\x00\x00', + ], + }, + CAR.KIA_FORTE_2019_NON_SCC: { + (Ecu.eps, 0x7D4, None): [ + b'\xf1\x00BD MDPS C 1.00 1.04 56310/M6000 4BDDC104', + ], + (Ecu.fwdCamera, 0x7C4, None): [ + b'\xf1\x00BD LKAS AT USA LHD 1.00 1.02 95740-M6000 J31', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81616B5051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x816VFRAF00018.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87CXJQAM4966515JB0x\xa9\x98\x9b\x99fff\x98feg\x88\x88w\x88Ff\x8f\xff{\xff\xff\xff\xa8\xf6\xf1\x816V2C1051\x00\x00\xf1\x006V2B0_C2\x00\x006V2C1051\x00\x00CBD0N20NS8q\xc1&\xd2', + ], + }, + CAR.KIA_FORTE_2021_NON_SCC: { + (Ecu.eps, 0x7D4, None): [ + b'\xf1\x00BD MDPS C 1.00 1.08 56310M6000\x00 4BDDC108', + ], + (Ecu.fwdCamera, 0x7C4, None): [ + b'\xf1\x00BD LKAS AT USA LHD 1.00 1.04 95740-M6000 J33', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81616B6051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x816VFRAL00010.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87CXLQAM0906975JB0\x89\x88\xa6\x8aVfug\xba\x87\x94yffuxgfo\xff\x8b\xff\xff\xff\x91\x82\xf1\x816V2C1051\x00\x00\xf1\x006V2B0_C2\x00\x006V2C1051\x00\x00CBD0N20NS8q\xc1&\xd2', + ], + }, + CAR.KIA_SELTOS_2023_NON_SCC: { + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x00SP ESC \t 101"\t\x01 58910-Q5510', + b'\xf1\x00SP ESC \r 100"\x04\x01 58910-Q5510', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x81616K0051\x00\x00\x00\x00\x00\x00\x00\x00', + b'\xf1\x81616G2051\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x00SP2 MDPS C 1.00 1.04 56310Q5240 4SPSC104', + b'\xf1\x00SP2 MDPS C 1.00 1.01 56300Q5920 ', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00SP2 MFC AT USA LHD 1.00 1.03 99210-Q5500 230208', + b'\xf1\x00SP2 MFC AT AUS RHD 1.00 1.02 99210-Q5500 220624', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x006V2B0_C2\x00\x006V2D5051\x00\x00CSP2N20NL0\x00\x00\x00\x00', + b'\xf1\x006V2B0_C2\x00\x006V2D4051\x00\x00CSP2N20KL1\x00\x00\x00\x00', + ], + }, + CAR.ELANTRA_2022_NON_SCC: { + (Ecu.eps, 0x7d4, None): [ + b'\xf1\x8756310AA030\x00\xf1\x00CN7 MDPS C 1.00 1.06 56310AA030\x00 4CNDC106', + ], + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.01 99210-AB000 210205', + ], + (Ecu.abs, 0x7d1, None): [ + b'\xf1\x8758910-AB500\xf1\x00CN ESC \t 100 \x06\x01 58910-AB500', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x87CXNQEM4091445JB3g\x98\x98\x89\x99\x87gv\x89wuwgwv\x89hD_\xffx\xff\xff\xff\x86\xeb\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82CNDWD0ANF3XCSG8A', + ], + }, + CAR.BAYON_1ST_GEN_NON_SCC: { + # TODO: Check working route for more FW + (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00BC3 LKA AT EUR LHD 1.00 1.01 99211-Q0100 261' + ], + }, +} diff --git a/selfdrive/car/hyundai/hyundaican.py b/selfdrive/car/hyundai/hyundaican.py index 00f62df231..91229478d5 100644 --- a/selfdrive/car/hyundai/hyundaican.py +++ b/selfdrive/car/hyundai/hyundaican.py @@ -39,8 +39,8 @@ def create_lkas11(packer, frame, car_fingerprint, apply_steer, steer_req, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_EV, CAR.KONA_HEV, CAR.KONA_EV_2022, CAR.SANTA_FE_2022, CAR.KIA_K5_2021, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.KIA_STINGER_2022, CAR.KIA_K5_HEV_2020, CAR.KIA_CEED, - CAR.AZERA_6TH_GEN, CAR.ELANTRA_2022_NON_SCC, CAR.GENESIS_G70_2021_NON_SCC, - CAR.KIA_SELTOS_2023_NON_SCC): + CAR.AZERA_6TH_GEN, CAR.AZERA_HEV_6TH_GEN, CAR.CUSTIN_1ST_GEN, CAR.ELANTRA_2022_NON_SCC, + CAR.GENESIS_G70_2021_NON_SCC, CAR.KIA_SELTOS_2023_NON_SCC, CAR.BAYON_1ST_GEN_NON_SCC): values["CF_Lkas_LdwsActivemode"] = int(left_lane) + (int(right_lane) << 1) values["CF_Lkas_LdwsOpt_USM"] = 2 @@ -129,7 +129,7 @@ def create_lfahda_mfc(packer, enabled, lat_active, lateral_paused, blinking_icon } return packer.make_can_msg("LFAHDA_MFC", 0, values) -def create_acc_commands(packer, enabled, accel, upper_jerk, idx, lead_visible, set_speed, stopping, long_override, use_fca, +def create_acc_commands(packer, enabled, accel, upper_jerk, idx, lead_distance, set_speed, stopping, long_override, use_fca, main_enabled, CS, escc, car_fingerprint): commands = [] @@ -176,7 +176,7 @@ def create_acc_commands(packer, enabled, accel, upper_jerk, idx, lead_visible, s "JerkUpperLimit": upper_jerk, # stock usually is 1.0 but sometimes uses higher values "JerkLowerLimit": 5.0, # stock usually is 0.5 but sometimes uses higher values "ACCMode": 2 if enabled and long_override else 1 if enabled else 4, # stock will always be 4 instead of 0 after first disengage - "ObjGap": 2 if lead_visible else 0, # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead + "ObjGap": get_object_gap(lead_distance) # 5: >30, m, 4: 25-30 m, 3: 20-25 m, 2: < 20 m, 0: no lead } commands.append(packer.make_can_msg("SCC14", 0, scc14_values)) @@ -236,3 +236,25 @@ def create_frt_radar_opt(packer): "CF_FCA_Equip_Front_Radar": 1, } return packer.make_can_msg("FRT_RADAR11", 0, frt_radar11_values) + + +def get_object_gap(lead_distance: float) -> int: + if lead_distance <= 0: + return 0 + + # Define distance ranges and corresponding values. + ranges = [(30, 5), + (25, 4), + (20, 3), + (0, 2)] + + # The next function scans through 'ranges' in ascending order, + # returning the associated distance range for the first range + # whose lower bound is exceeded by lead_distance. + # + # If lead_distance does not exceed any bounds, it defaults to 0 (no lead). + # + # For example: if lead_distance is 22, then 3 (20-25 m) is returned. + # This is because 22 is greater than the lower bound of this range (20), + # but does not exceed the next range's lower bound (25). + return next((gap for dist, gap in ranges if lead_distance > dist), 0) diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index 7302682c70..d13851d19c 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -2,16 +2,18 @@ from cereal import car from panda import Panda from openpilot.common.conversions import Conversions as CV from openpilot.common.params import Params +from openpilot.selfdrive.car.hyundai.enable_radar_tracks import enable_radar_tracks from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, HyundaiFlagsSP, CAR, DBC, CANFD_CAR, CAMERA_SCC_CAR, CANFD_RADAR_SCC_CAR, \ - EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, UNSUPPORTED_LONGITUDINAL_CAR, NON_SCC_CAR, \ - Buttons + CANFD_UNSUPPORTED_LONGITUDINAL_CAR, NON_SCC_CAR, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, \ + UNSUPPORTED_LONGITUDINAL_CAR, Buttons from openpilot.selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR from openpilot.selfdrive.car import create_button_events, get_safety_config, create_mads_event from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.disable_ecu import disable_ecu Ecu = car.CarParams.Ecu +SafetyModel = car.CarParams.SafetyModel ButtonType = car.CarState.ButtonEvent.Type EventName = car.CarEvent.EventName GearShifter = car.CarState.GearShifter @@ -20,6 +22,17 @@ BUTTONS_DICT = {Buttons.RES_ACCEL: ButtonType.accelCruise, Buttons.SET_DECEL: Bu Buttons.GAP_DIST: ButtonType.gapAdjustCruise, Buttons.CANCEL: ButtonType.cancel} +def set_safety_config_hyundai(candidate, CAN, can_fd=False): + platform = SafetyModel.hyundaiCanfd if can_fd else \ + SafetyModel.hyundaiLegacy if candidate in LEGACY_SAFETY_MODE_CAR else \ + SafetyModel.hyundai + cfgs = [get_safety_config(platform), ] + if CAN.ECAN >= 4: + cfgs.insert(0, get_safety_config(SafetyModel.noOutput)) + + return cfgs + + class CarInterface(CarInterfaceBase): @staticmethod def _get_params(ret, candidate, fingerprint, car_fw, experimental_long, docs): @@ -30,22 +43,28 @@ class CarInterface(CarInterfaceBase): # These cars have been put into dashcam only due to both a lack of users and test coverage. # These cars likely still work fine. Once a user confirms each car works and a test route is # added to selfdrive/car/tests/routes.py, we can remove it from this list. - # FIXME: the Optima Hybrid uses a different SCC12 checksum + # FIXME: the Optima Hybrid 2017 uses a different SCC12 checksum ret.dashcamOnly = candidate in ({CAR.KIA_OPTIMA_H, }) hda2 = Ecu.adas in [fw.ecu for fw in car_fw] CAN = CanBus(None, hda2, fingerprint) if candidate in CANFD_CAR: + # detect if car is hybrid + if 0x105 in fingerprint[CAN.ECAN]: + ret.flags |= HyundaiFlags.HYBRID.value + elif candidate in EV_CAR: + ret.flags |= HyundaiFlags.EV.value + # detect HDA2 with ADAS Driving ECU if hda2: - ret.flags |= HyundaiFlags.CANFD_HDA2.value if 0x110 in fingerprint[CAN.CAM]: ret.flags |= HyundaiFlags.CANFD_HDA2_ALT_STEERING.value else: # non-HDA2 if 0x1cf not in fingerprint[CAN.ECAN]: ret.flags |= HyundaiFlags.CANFD_ALT_BUTTONS.value + ret.customStockLongAvailable = False # ICE cars do not have 0x130; GEARS message on 0x40 or 0x70 instead if 0x130 not in fingerprint[CAN.ECAN]: if 0x40 not in fingerprint[CAN.ECAN]: @@ -55,6 +74,12 @@ class CarInterface(CarInterfaceBase): if candidate not in CANFD_RADAR_SCC_CAR: ret.flags |= HyundaiFlags.CANFD_CAMERA_SCC.value else: + # TODO: detect EV and hybrid + if candidate in HYBRID_CAR: + ret.flags |= HyundaiFlags.HYBRID.value + elif candidate in EV_CAR: + ret.flags |= HyundaiFlags.EV.value + # Send LFA message on cars with HDA if 0x485 in fingerprint[2]: ret.flags |= HyundaiFlags.SEND_LFA.value @@ -67,12 +92,15 @@ class CarInterface(CarInterfaceBase): ret.spFlags |= HyundaiFlagsSP.SP_ENHANCED_SCC.value ret.radarUnavailable = False + if 0x53E in fingerprint[2]: + ret.spFlags |= HyundaiFlagsSP.SP_LKAS12.value + ret.steerActuatorDelay = 0.1 # Default delay ret.steerLimitTimer = 0.4 CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) - if candidate == CAR.AZERA_6TH_GEN: - ret.mass = 1540. # average + if candidate in (CAR.AZERA_6TH_GEN, CAR.AZERA_HEV_6TH_GEN): + ret.mass = 1600. if candidate == CAR.AZERA_6TH_GEN else 1675. # ICE is ~average of 2.5L and 3.5L ret.wheelbase = 2.885 ret.steerRatio = 14.5 elif candidate in (CAR.SANTA_FE, CAR.SANTA_FE_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022): @@ -81,6 +109,10 @@ class CarInterface(CarInterfaceBase): # Values from optimizer ret.steerRatio = 16.55 # 13.8 is spec end-to-end ret.tireStiffnessFactor = 0.82 + if candidate in (CAR.SANTA_FE_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022): + if any(fw.ecu == "fwdRadar" and fw.fwVersion is not None for fw in car_fw): + ret.radarUnavailable = False + ret.spFlags |= HyundaiFlagsSP.SP_RADAR_TRACKS.value elif candidate in (CAR.SONATA, CAR.SONATA_HYBRID): ret.mass = 1513. ret.wheelbase = 2.84 @@ -95,7 +127,11 @@ class CarInterface(CarInterfaceBase): ret.wheelbase = 2.90 ret.steerRatio = 15.6 * 1.15 ret.tireStiffnessFactor = 0.63 - elif candidate == CAR.ELANTRA: + elif candidate == CAR.BAYON_1ST_GEN_NON_SCC: + ret.mass = 1150. + ret.wheelbase = 2.58 + ret.steerRatio = 13.27 * 1.15 # Variable steering ratio? https://www.hyundai.news/newsroom/dam/eu/uk/20210302_bayon_technical_data/hyundai-reveals-all-new_bayon-technical-data.pdf + elif candidate in (CAR.ELANTRA, CAR.ELANTRA_GT_I30): ret.mass = 1275. ret.wheelbase = 2.7 ret.steerRatio = 15.4 # 14 is Stock | Settled Params Learner values are steerRatio: 15.401566348670535 @@ -116,14 +152,11 @@ class CarInterface(CarInterfaceBase): ret.wheelbase = 3.01 ret.steerRatio = 16.5 ret.minSteerSpeed = 60 * CV.KPH_TO_MS - elif candidate in (CAR.KONA, CAR.KONA_EV, CAR.KONA_HEV, CAR.KONA_EV_2022, CAR.KONA_EV_2ND_GEN): + elif candidate in (CAR.KONA, CAR.KONA_EV, CAR.KONA_HEV, CAR.KONA_EV_2022, CAR.KONA_EV_2ND_GEN, CAR.KONA_NON_SCC): ret.mass = {CAR.KONA_EV: 1685., CAR.KONA_HEV: 1425., CAR.KONA_EV_2022: 1743., CAR.KONA_EV_2ND_GEN: 1740.}.get(candidate, 1275.) ret.wheelbase = {CAR.KONA_EV_2ND_GEN: 2.66, }.get(candidate, 2.6) ret.steerRatio = {CAR.KONA_EV_2ND_GEN: 13.6, }.get(candidate, 13.42) # Spec ret.tireStiffnessFactor = 0.385 - if candidate == CAR.KONA_EV_2022: - ret.spFlags |= HyundaiFlagsSP.SP_CAMERA_SCC_LEAD.value - ret.radarUnavailable = False elif candidate in (CAR.IONIQ, CAR.IONIQ_EV_LTD, CAR.IONIQ_PHEV_2019, CAR.IONIQ_HEV_2022, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV): ret.mass = 1490. # weight per hyundai site https://www.hyundaiusa.com/ioniq-electric/specifications.aspx ret.wheelbase = 2.7 @@ -131,6 +164,11 @@ class CarInterface(CarInterfaceBase): ret.tireStiffnessFactor = 0.385 if candidate in (CAR.IONIQ, CAR.IONIQ_EV_LTD, CAR.IONIQ_PHEV_2019): ret.minSteerSpeed = 32 * CV.MPH_TO_MS + elif candidate in (CAR.IONIQ_5, CAR.IONIQ_6): + ret.mass = 1948 + ret.wheelbase = 2.97 + ret.steerRatio = 14.26 + ret.tireStiffnessFactor = 0.65 elif candidate == CAR.VELOSTER: ret.mass = 2917. * CV.LB_TO_KG ret.wheelbase = 2.80 @@ -141,7 +179,7 @@ class CarInterface(CarInterfaceBase): ret.wheelbase = 2.67 ret.steerRatio = 14.00 * 1.15 ret.tireStiffnessFactor = 0.385 - elif candidate in (CAR.TUCSON_4TH_GEN, CAR.TUCSON_HYBRID_4TH_GEN): + elif candidate == CAR.TUCSON_4TH_GEN: ret.mass = 1630. # average ret.wheelbase = 2.756 ret.steerRatio = 16. @@ -151,13 +189,21 @@ class CarInterface(CarInterfaceBase): ret.wheelbase = 3.000 # steering ratio according to Hyundai News https://www.hyundainews.com/assets/documents/original/48035-2022SantaCruzProductGuideSpecsv2081521.pdf ret.steerRatio = 14.2 + elif candidate == CAR.CUSTIN_1ST_GEN: + ret.mass = 1690. # from https://www.hyundai-motor.com.tw/clicktobuy/custin#spec_0 + ret.wheelbase = 3.055 + ret.steerRatio = 17.0 # from learner + elif candidate == CAR.STARIA_4TH_GEN: + ret.mass = 2205. + ret.wheelbase = 3.273 + ret.steerRatio = 11.94 # https://www.hyundai.com/content/dam/hyundai/au/en/models/staria-load/premium-pip-update-2023/spec-sheet/STARIA_Load_Spec-Table_March_2023_v3.1.pdf # Kia elif candidate == CAR.KIA_SORENTO: ret.mass = 1985. ret.wheelbase = 2.78 ret.steerRatio = 14.4 * 1.1 # 10% higher at the center seems reasonable - elif candidate in (CAR.KIA_NIRO_EV, CAR.KIA_NIRO_EV_2ND_GEN, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_NIRO_HEV_2ND_GEN): + elif candidate in (CAR.KIA_NIRO_EV, CAR.KIA_NIRO_EV_2ND_GEN, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_NIRO_HEV_2ND_GEN, CAR.KIA_NIRO_PHEV_2022): ret.mass = 3543. * CV.LB_TO_KG # average of all the cars ret.wheelbase = 2.7 ret.steerRatio = 13.6 # average of all the cars @@ -169,10 +215,10 @@ class CarInterface(CarInterfaceBase): ret.wheelbase = 2.63 ret.steerRatio = 14.56 elif candidate == CAR.KIA_SPORTAGE_5TH_GEN: - ret.mass = 1700. # weight from SX and above trims, average of FWD and AWD versions + ret.mass = 1725. # weight from SX and above trims, average of FWD and AWD versions ret.wheelbase = 2.756 ret.steerRatio = 13.6 # steering ratio according to Kia News https://www.kiamedia.com/us/en/models/sportage/2023/specifications - elif candidate in (CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.KIA_OPTIMA_H): + elif candidate in (CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.KIA_OPTIMA_H, CAR.KIA_OPTIMA_H_G4_FL): ret.mass = 3558. * CV.LB_TO_KG ret.wheelbase = 2.80 ret.steerRatio = 13.75 @@ -203,24 +249,13 @@ class CarInterface(CarInterfaceBase): ret.wheelbase = 2.9 ret.steerRatio = 16. ret.tireStiffnessFactor = 0.65 - elif candidate in (CAR.IONIQ_5, CAR.IONIQ_6): - ret.mass = 1948 - ret.wheelbase = 2.97 - ret.steerRatio = 14.26 - ret.tireStiffnessFactor = 0.65 - elif candidate == CAR.KIA_SPORTAGE_HYBRID_5TH_GEN: - ret.mass = 1767. # SX Prestige trim support only - ret.wheelbase = 2.756 - ret.steerRatio = 13.6 - elif candidate in (CAR.KIA_SORENTO_4TH_GEN, CAR.KIA_SORENTO_HEV_4TH_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN): + elif candidate in (CAR.KIA_SORENTO_4TH_GEN, CAR.KIA_SORENTO_HEV_4TH_GEN): ret.wheelbase = 2.81 ret.steerRatio = 13.5 # average of the platforms if candidate == CAR.KIA_SORENTO_4TH_GEN: ret.mass = 3957 * CV.LB_TO_KG - elif candidate == CAR.KIA_SORENTO_HEV_4TH_GEN: - ret.mass = 4255 * CV.LB_TO_KG else: - ret.mass = 4537 * CV.LB_TO_KG + ret.mass = 4396 * CV.LB_TO_KG elif candidate == CAR.KIA_CARNIVAL_4TH_GEN: ret.mass = 2087. ret.wheelbase = 3.09 @@ -266,11 +301,14 @@ class CarInterface(CarInterfaceBase): if candidate in CANFD_CAR: ret.longitudinalTuning.kpV = [0.1] ret.longitudinalTuning.kiV = [0.0] - ret.experimentalLongitudinalAvailable = candidate not in NON_SCC_CAR + ret.experimentalLongitudinalAvailable = candidate not in (CANFD_UNSUPPORTED_LONGITUDINAL_CAR | NON_SCC_CAR) else: ret.longitudinalTuning.kpV = [0.5] ret.longitudinalTuning.kiV = [0.0] ret.experimentalLongitudinalAvailable = candidate not in (UNSUPPORTED_LONGITUDINAL_CAR | NON_SCC_CAR) + if candidate in CAMERA_SCC_CAR: + ret.spFlags |= HyundaiFlagsSP.SP_CAMERA_SCC_LEAD.value + ret.radarUnavailable = False ret.openpilotLongitudinalControl = experimental_long and ret.experimentalLongitudinalAvailable ret.pcmCruise = not ret.openpilotLongitudinalControl @@ -294,48 +332,36 @@ class CarInterface(CarInterfaceBase): ret.spFlags |= HyundaiFlagsSP.SP_NAV_MSG.value # *** panda safety config *** - if candidate in CANFD_CAR: - cfgs = [get_safety_config(car.CarParams.SafetyModel.hyundaiCanfd), ] - if CAN.ECAN >= 4: - cfgs.insert(0, get_safety_config(car.CarParams.SafetyModel.noOutput)) - ret.safetyConfigs = cfgs + ret.safetyConfigs = set_safety_config_hyundai(candidate, CAN, can_fd=(candidate in CANFD_CAR)) - if ret.flags & HyundaiFlags.CANFD_HDA2: - ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2 - if ret.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING: - ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING + if hda2: + ret.flags |= HyundaiFlags.CANFD_HDA2.value + ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2 + + if candidate in CANFD_CAR: + if hda2 and ret.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING: + ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING if ret.flags & HyundaiFlags.CANFD_ALT_BUTTONS: ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_ALT_BUTTONS - if ret.flags & HyundaiFlags.CANFD_CAMERA_SCC: - ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC else: - if candidate in LEGACY_SAFETY_MODE_CAR: - # these cars require a special panda safety mode due to missing counters and checksums in the messages - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hyundaiLegacy)] - else: - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hyundai, 0)] - - if candidate in CAMERA_SCC_CAR: - ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC - if 0x391 in fingerprint[0]: ret.spFlags |= HyundaiFlagsSP.SP_CAN_LFA_BTN.value ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_LFA_BTN - - if ret.spFlags & HyundaiFlagsSP.SP_ENHANCED_SCC: - ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_ESCC - if candidate in NON_SCC_CAR: ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_NON_SCC + if ret.flags & HyundaiFlags.CANFD_CAMERA_SCC or candidate in CAMERA_SCC_CAR: + ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC + if ret.spFlags & HyundaiFlagsSP.SP_ENHANCED_SCC: + ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_ESCC if ret.openpilotLongitudinalControl: ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_LONG - if candidate in HYBRID_CAR: + if ret.flags & HyundaiFlags.HYBRID: ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_HYBRID_GAS - elif candidate in EV_CAR: + elif ret.flags & HyundaiFlags.EV: ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_EV_GAS - if candidate in (CAR.KONA, CAR.KONA_EV, CAR.KONA_HEV, CAR.KONA_EV_2022): + if candidate in (CAR.KONA, CAR.KONA_EV, CAR.KONA_HEV, CAR.KONA_EV_2022, CAR.KONA_NON_SCC): ret.flags |= HyundaiFlags.ALT_LIMITS.value ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_ALT_LIMITS @@ -363,6 +389,12 @@ class CarInterface(CarInterfaceBase): if CP.flags & HyundaiFlags.ENABLE_BLINKERS: disable_ecu(logcan, sendcan, bus=CanBus(CP).ECAN, addr=0x7B1, com_cont_req=b'\x28\x83\x01') + # for enabling radar tracks on startup + # some CAN platforms are able to enable radar tracks config at the radar ECU, + # but the config is reset after ignition cycle + if CP.spFlags & HyundaiFlagsSP.SP_RADAR_TRACKS: + enable_radar_tracks(logcan, sendcan, bus=0, addr=0x7d0, config_data_id=b'\x01\x42') + def _update(self, c): ret = self.CS.update(self.cp, self.cp_cam) self.CS = self.sp_update_params(self.CS) diff --git a/selfdrive/car/hyundai/radar_interface.py b/selfdrive/car/hyundai/radar_interface.py index 9c0824b185..76f2c370d6 100644 --- a/selfdrive/car/hyundai/radar_interface.py +++ b/selfdrive/car/hyundai/radar_interface.py @@ -8,6 +8,7 @@ from openpilot.selfdrive.car.hyundai.values import DBC, HyundaiFlagsSP RADAR_START_ADDR = 0x500 RADAR_MSG_COUNT = 32 +# POC for parsing corner radars: https://github.com/commaai/openpilot/pull/24221/ def get_radar_can_parser(CP): if DBC[CP.carFingerprint]['radar'] is None: @@ -38,6 +39,8 @@ class RadarInterface(RadarInterfaceBase): self.radar_off_can = CP.radarUnavailable self.rcp = get_radar_can_parser(CP) + self.sp_radar_tracks = CP.spFlags & HyundaiFlagsSP.SP_RADAR_TRACKS + def update(self, can_strings): if self.radar_off_can or (self.rcp is None): return super().update(None) @@ -45,7 +48,7 @@ class RadarInterface(RadarInterfaceBase): vls = self.rcp.update_strings(can_strings) self.updated_messages.update(vls) - if self.trigger_msg not in self.updated_messages: + if self.trigger_msg not in self.updated_messages and not self.sp_radar_tracks: return None rr = self._update(self.updated_messages) diff --git a/selfdrive/car/hyundai/tests/print_platform_codes.py b/selfdrive/car/hyundai/tests/print_platform_codes.py index 6fe4582f54..f641535678 100755 --- a/selfdrive/car/hyundai/tests/print_platform_codes.py +++ b/selfdrive/car/hyundai/tests/print_platform_codes.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from cereal import car -from openpilot.selfdrive.car.hyundai.values import FW_VERSIONS, PLATFORM_CODE_ECUS, get_platform_codes +from openpilot.selfdrive.car.hyundai.values import PLATFORM_CODE_ECUS, get_platform_codes +from openpilot.selfdrive.car.hyundai.fingerprints import FW_VERSIONS Ecu = car.CarParams.Ecu ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} diff --git a/selfdrive/car/hyundai/tests/test_hyundai.py b/selfdrive/car/hyundai/tests/test_hyundai.py index 11268913aa..c7100d03f0 100755 --- a/selfdrive/car/hyundai/tests/test_hyundai.py +++ b/selfdrive/car/hyundai/tests/test_hyundai.py @@ -5,8 +5,10 @@ import unittest from cereal import car from openpilot.selfdrive.car.fw_versions import build_fw_dict from openpilot.selfdrive.car.hyundai.values import CAMERA_SCC_CAR, CANFD_CAR, CAN_GEARS, CAR, CHECKSUM, DATE_FW_ECUS, \ - EV_CAR, FW_QUERY_CONFIG, FW_VERSIONS, LEGACY_SAFETY_MODE_CAR, \ - UNSUPPORTED_LONGITUDINAL_CAR, PLATFORM_CODE_ECUS, get_platform_codes + HYBRID_CAR, EV_CAR, FW_QUERY_CONFIG, LEGACY_SAFETY_MODE_CAR, CANFD_FUZZY_WHITELIST, \ + UNSUPPORTED_LONGITUDINAL_CAR, PLATFORM_CODE_ECUS, HYUNDAI_VERSION_REQUEST_LONG, \ + get_platform_codes +from openpilot.selfdrive.car.hyundai.fingerprints import FW_VERSIONS Ecu = car.CarParams.Ecu ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} @@ -16,12 +18,11 @@ ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} NO_DATES_PLATFORMS = { # CAN FD CAR.KIA_SPORTAGE_5TH_GEN, - CAR.KIA_SPORTAGE_HYBRID_5TH_GEN, CAR.SANTA_CRUZ_1ST_GEN, CAR.TUCSON_4TH_GEN, - CAR.TUCSON_HYBRID_4TH_GEN, # CAN CAR.ELANTRA, + CAR.ELANTRA_GT_I30, CAR.KIA_CEED, CAR.KIA_FORTE, CAR.KIA_OPTIMA_G4, @@ -37,11 +38,19 @@ NO_DATES_PLATFORMS = { class TestHyundaiFingerprint(unittest.TestCase): - def test_canfd_not_in_can_features(self): + def test_can_features(self): + # Test no EV/HEV in any gear lists (should all use ELECT_GEAR) + self.assertEqual(set.union(*CAN_GEARS.values()) & (HYBRID_CAR | EV_CAR), set()) + + # Test CAN FD car not in CAN feature lists can_specific_feature_list = set.union(*CAN_GEARS.values(), *CHECKSUM.values(), LEGACY_SAFETY_MODE_CAR, UNSUPPORTED_LONGITUDINAL_CAR, CAMERA_SCC_CAR) for car_model in CANFD_CAR: self.assertNotIn(car_model, can_specific_feature_list, "CAN FD car unexpectedly found in a CAN feature list") + def test_hybrid_ev_sets(self): + self.assertEqual(HYBRID_CAR & EV_CAR, set(), "Shared cars between hybrid and EV") + self.assertEqual(CANFD_CAR & HYBRID_CAR, set(), "Hard coding CAN FD cars as hybrid is no longer supported") + def test_auxiliary_request_ecu_whitelist(self): # Asserts only auxiliary Ecus can exist in database for CAN-FD cars whitelisted_ecus = {ecu for r in FW_QUERY_CONFIG.requests for ecu in r.whitelist_ecus if r.auxiliary} @@ -57,7 +66,7 @@ class TestHyundaiFingerprint(unittest.TestCase): # Asserts no ECUs known to be shared across platforms exist in the database. # Tucson having Santa Cruz camera and EPS for example for car_model, ecus in FW_VERSIONS.items(): - with self.subTest(car_model=car_model): + with self.subTest(car_model=car_model.value): if car_model == CAR.SANTA_CRUZ_1ST_GEN: raise unittest.SkipTest("Skip checking Santa Cruz for its parts") @@ -67,6 +76,20 @@ class TestHyundaiFingerprint(unittest.TestCase): part = code.split(b"-")[1] self.assertFalse(part.startswith(b'CW'), "Car has bad part number") + def test_correct_ecu_response_database(self): + """ + Assert standard responses for certain ECUs, since they can + respond to multiple queries with different data + """ + expected_fw_prefix = HYUNDAI_VERSION_REQUEST_LONG[1:] + for car_model, ecus in FW_VERSIONS.items(): + with self.subTest(car_model=car_model.value): + for ecu, fws in ecus.items(): + # TODO: enable for Ecu.fwdRadar, Ecu.abs, Ecu.eps, Ecu.transmission + if ecu[0] in (Ecu.fwdCamera,): + self.assertTrue(all(fw.startswith(expected_fw_prefix) for fw in fws), + f"FW from unexpected request in database: {(ecu, fws)}") + @settings(max_examples=100) @given(data=st.data()) def test_platform_codes_fuzzy_fw(self, data): @@ -80,11 +103,11 @@ class TestHyundaiFingerprint(unittest.TestCase): def test_platform_code_ecus_available(self): # TODO: add queries for these non-CAN FD cars to get EPS no_eps_platforms = CANFD_CAR | {CAR.KIA_SORENTO, CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.KIA_OPTIMA_H, - CAR.SONATA_LF, CAR.TUCSON, CAR.GENESIS_G90, CAR.GENESIS_G80} + CAR.KIA_OPTIMA_H_G4_FL, CAR.SONATA_LF, CAR.TUCSON, CAR.GENESIS_G90, CAR.GENESIS_G80, CAR.ELANTRA} # Asserts ECU keys essential for fuzzy fingerprinting are available on all platforms for car_model, ecus in FW_VERSIONS.items(): - with self.subTest(car_model=car_model): + with self.subTest(car_model=car_model.value): for platform_code_ecu in PLATFORM_CODE_ECUS: if platform_code_ecu in (Ecu.fwdRadar, Ecu.eps) and car_model == CAR.HYUNDAI_GENESIS: continue @@ -99,7 +122,7 @@ class TestHyundaiFingerprint(unittest.TestCase): # - expected parsing of ECU FW dates for car_model, ecus in FW_VERSIONS.items(): - with self.subTest(car_model=car_model): + with self.subTest(car_model=car_model.value): for ecu, fws in ecus.items(): if ecu[0] not in PLATFORM_CODE_ECUS: continue @@ -157,10 +180,8 @@ class TestHyundaiFingerprint(unittest.TestCase): excluded_platforms = { CAR.GENESIS_G70, # shared platform code, part number, and date CAR.GENESIS_G70_2020, - CAR.TUCSON_4TH_GEN, # shared platform code and part number - CAR.TUCSON_HYBRID_4TH_GEN, } - excluded_platforms |= CANFD_CAR - EV_CAR # shared platform codes + excluded_platforms |= CANFD_CAR - EV_CAR - CANFD_FUZZY_WHITELIST # shared platform codes excluded_platforms |= NO_DATES_PLATFORMS # date codes are required to match platforms_with_shared_codes = set() @@ -173,7 +194,7 @@ class TestHyundaiFingerprint(unittest.TestCase): "subAddress": 0 if sub_addr is None else sub_addr}) CP = car.CarParams.new_message(carFw=car_fw) - matches = FW_QUERY_CONFIG.match_fw_to_car_fuzzy(build_fw_dict(CP.carFw)) + matches = FW_QUERY_CONFIG.match_fw_to_car_fuzzy(build_fw_dict(CP.carFw), FW_VERSIONS) if len(matches) == 1: self.assertEqual(list(matches)[0], platform) else: diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py index fa0510ac5a..d6419fc9c3 100644 --- a/selfdrive/car/hyundai/values.py +++ b/selfdrive/car/hyundai/values.py @@ -1,7 +1,6 @@ -# ruff: noqa: E501 import re from dataclasses import dataclass -from enum import Enum, IntFlag +from enum import Enum, IntFlag, StrEnum from typing import Dict, List, Optional, Set, Tuple, Union from cereal import car @@ -37,9 +36,9 @@ class CarControllerParams: # To determine the limit for your car, find the maximum value that the stock LKAS will request. # If the max stock LKAS request is <384, add your car to this list. - elif CP.carFingerprint in (CAR.GENESIS_G80, CAR.GENESIS_G90, CAR.ELANTRA, CAR.IONIQ, + elif CP.carFingerprint in (CAR.GENESIS_G80, CAR.GENESIS_G90, CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.IONIQ, CAR.IONIQ_EV_LTD, CAR.SANTA_FE_PHEV_2022, CAR.SONATA_LF, CAR.KIA_FORTE, CAR.KIA_NIRO_PHEV, - CAR.KIA_OPTIMA_H, CAR.KIA_SORENTO): + CAR.KIA_OPTIMA_H, CAR.KIA_OPTIMA_H_G4_FL, CAR.KIA_SORENTO): self.STEER_MAX = 255 # these cars have significantly more torque than most HKG; limit to 70% of max @@ -65,6 +64,8 @@ class HyundaiFlags(IntFlag): SEND_LFA = 128 USE_FCA = 256 CANFD_HDA2_ALT_STEERING = 512 + HYBRID = 1024 + EV = 2048 class HyundaiFlagsSP(IntFlag): @@ -72,12 +73,17 @@ class HyundaiFlagsSP(IntFlag): SP_CAN_LFA_BTN = 2 SP_NAV_MSG = 4 SP_CAMERA_SCC_LEAD = 8 + SP_LKAS12 = 16 + SP_RADAR_TRACKS = 32 -class CAR: +class CAR(StrEnum): # Hyundai AZERA_6TH_GEN = "HYUNDAI AZERA 6TH GEN" + AZERA_HEV_6TH_GEN = "HYUNDAI AZERA HYBRID 6TH GEN" + BAYON_1ST_GEN_NON_SCC = "HYUNDAI BAYON 1ST GEN NON-SCC" ELANTRA = "HYUNDAI ELANTRA 2017" + ELANTRA_GT_I30 = "HYUNDAI I30 N LINE 2019 & GT 2018 DCT" ELANTRA_2021 = "HYUNDAI ELANTRA 2021" ELANTRA_2022_NON_SCC = "HYUNDAI ELANTRA SE 2022 NON-SCC" ELANTRA_HEV_2021 = "HYUNDAI ELANTRA HYBRID 2021" @@ -89,6 +95,7 @@ class CAR: IONIQ_PHEV_2019 = "HYUNDAI IONIQ PLUG-IN HYBRID 2019" IONIQ_PHEV = "HYUNDAI IONIQ PHEV 2020" KONA = "HYUNDAI KONA 2020" + KONA_NON_SCC = "HYUNDAI KONA 2019 NON-SCC" KONA_EV = "HYUNDAI KONA ELECTRIC 2019" KONA_EV_2022 = "HYUNDAI KONA ELECTRIC 2022" KONA_EV_2ND_GEN = "HYUNDAI KONA ELECTRIC 2ND GEN" @@ -99,6 +106,7 @@ class CAR: SANTA_FE_PHEV_2022 = "HYUNDAI SANTA FE PlUG-IN HYBRID 2022" SONATA = "HYUNDAI SONATA 2020" SONATA_LF = "HYUNDAI SONATA 2019" + STARIA_4TH_GEN = "HYUNDAI STARIA 4TH GEN" TUCSON = "HYUNDAI TUCSON 2019" PALISADE = "HYUNDAI PALISADE 2020" VELOSTER = "HYUNDAI VELOSTER 2019" @@ -106,8 +114,8 @@ class CAR: IONIQ_5 = "HYUNDAI IONIQ 5 2022" IONIQ_6 = "HYUNDAI IONIQ 6 2023" TUCSON_4TH_GEN = "HYUNDAI TUCSON 4TH GEN" - TUCSON_HYBRID_4TH_GEN = "HYUNDAI TUCSON HYBRID 4TH GEN" SANTA_CRUZ_1ST_GEN = "HYUNDAI SANTA CRUZ 1ST GEN" + CUSTIN_1ST_GEN = "HYUNDAI CUSTIN 1ST GEN" # Kia KIA_FORTE = "KIA FORTE E 2018 & GT 2021" @@ -119,19 +127,19 @@ class CAR: KIA_NIRO_EV = "KIA NIRO EV 2020" KIA_NIRO_EV_2ND_GEN = "KIA NIRO EV 2ND GEN" KIA_NIRO_PHEV = "KIA NIRO HYBRID 2019" + KIA_NIRO_PHEV_2022 = "KIA NIRO PLUG-IN HYBRID 2022" KIA_NIRO_HEV_2021 = "KIA NIRO HYBRID 2021" KIA_NIRO_HEV_2ND_GEN = "KIA NIRO HYBRID 2ND GEN" KIA_OPTIMA_G4 = "KIA OPTIMA 4TH GEN" KIA_OPTIMA_G4_FL = "KIA OPTIMA 4TH GEN FACELIFT" KIA_OPTIMA_H = "KIA OPTIMA HYBRID 2017 & SPORTS 2019" + KIA_OPTIMA_H_G4_FL = "KIA OPTIMA HYBRID 4TH GEN FACELIFT" KIA_SELTOS = "KIA SELTOS 2021" KIA_SELTOS_2023_NON_SCC = "KIA SELTOS 2023 NON-SCC" KIA_SPORTAGE_5TH_GEN = "KIA SPORTAGE 5TH GEN" KIA_SORENTO = "KIA SORENTO GT LINE 2018" KIA_SORENTO_4TH_GEN = "KIA SORENTO 4TH GEN" KIA_SORENTO_HEV_4TH_GEN = "KIA SORENTO HYBRID 4TH GEN" - KIA_SORENTO_PHEV_4TH_GEN = "KIA SORENTO PLUG-IN HYBRID 4TH GEN" - KIA_SPORTAGE_HYBRID_5TH_GEN = "KIA SPORTAGE HYBRID 5TH GEN" KIA_STINGER = "KIA STINGER GT2 2018" KIA_STINGER_2022 = "KIA STINGER 2022" KIA_CEED = "KIA CEED INTRO ED 2019" @@ -151,9 +159,9 @@ class CAR: class Footnote(Enum): CANFD = CarFootnote( - "Requires a comma 3X or CAN FD panda kit " + - "for this CAN FD car.", - Column.MODEL, shop_footnote=True) + "Requires a CAN FD panda kit if not using " + + "comma 3X for this CAN FD car.", + Column.MODEL, shop_footnote=False) @dataclass @@ -167,8 +175,16 @@ class HyundaiCarInfo(CarInfo): CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { CAR.AZERA_6TH_GEN: HyundaiCarInfo("Hyundai Azera 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_k])), + CAR.AZERA_HEV_6TH_GEN: [ + HyundaiCarInfo("Hyundai Azera Hybrid 2019", "All", car_parts=CarParts.common([CarHarness.hyundai_c])), + HyundaiCarInfo("Hyundai Azera Hybrid 2020", "All", car_parts=CarParts.common([CarHarness.hyundai_k])), + ], CAR.ELANTRA: [ - HyundaiCarInfo("Hyundai Elantra 2017-19", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_b])), + # TODO: 2017-18 could be Hyundai G + HyundaiCarInfo("Hyundai Elantra 2017-18", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_b])), + HyundaiCarInfo("Hyundai Elantra 2019", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_g])), + ], + CAR.ELANTRA_GT_I30: [ HyundaiCarInfo("Hyundai Elantra GT 2017-19", car_parts=CarParts.common([CarHarness.hyundai_e])), HyundaiCarInfo("Hyundai i30 2017-19", car_parts=CarParts.common([CarHarness.hyundai_e])), ], @@ -189,16 +205,19 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { CAR.KONA: HyundaiCarInfo("Hyundai Kona 2020", car_parts=CarParts.common([CarHarness.hyundai_b])), CAR.KONA_EV: HyundaiCarInfo("Hyundai Kona Electric 2018-21", car_parts=CarParts.common([CarHarness.hyundai_g])), CAR.KONA_EV_2022: HyundaiCarInfo("Hyundai Kona Electric 2022-23", car_parts=CarParts.common([CarHarness.hyundai_o])), - CAR.KONA_HEV: HyundaiCarInfo("Hyundai Kona Hybrid 2020", video_link="https://youtu.be/0dwpAHiZgFo", - car_parts=CarParts.common([CarHarness.hyundai_i])), # TODO: check packages - CAR.KONA_EV_2ND_GEN: HyundaiCarInfo("Hyundai Kona Electric (with HDA II, Korea only) 2023", video_link="https://www.youtube.com/watch?v=U2fOCmcQ8hw", car_parts=CarParts.common([CarHarness.hyundai_r])), - CAR.SANTA_FE: HyundaiCarInfo("Hyundai Santa Fe 2019-20", "All", car_parts=CarParts.common([CarHarness.hyundai_d])), + CAR.KONA_HEV: HyundaiCarInfo("Hyundai Kona Hybrid 2020", car_parts=CarParts.common([CarHarness.hyundai_i])), # TODO: check packages + # TODO: this is the 2024 US MY, not yet released + CAR.KONA_EV_2ND_GEN: HyundaiCarInfo("Hyundai Kona Electric (with HDA II, Korea only) 2023", video_link="https://www.youtube.com/watch?v=U2fOCmcQ8hw", + car_parts=CarParts.common([CarHarness.hyundai_r])), + CAR.SANTA_FE: HyundaiCarInfo("Hyundai Santa Fe 2019-20", "All", video_link="https://youtu.be/bjDR0YjM__s", + car_parts=CarParts.common([CarHarness.hyundai_d])), CAR.SANTA_FE_2022: HyundaiCarInfo("Hyundai Santa Fe 2021-23", "All", video_link="https://youtu.be/VnHzSTygTS4", - car_parts=CarParts.common([CarHarness.hyundai_l])), + car_parts=CarParts.common([CarHarness.hyundai_l])), CAR.SANTA_FE_HEV_2022: HyundaiCarInfo("Hyundai Santa Fe Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_l])), - CAR.SANTA_FE_PHEV_2022: HyundaiCarInfo("Hyundai Santa Fe Plug-in Hybrid 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_l])), + CAR.SANTA_FE_PHEV_2022: HyundaiCarInfo("Hyundai Santa Fe Plug-in Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_l])), CAR.SONATA: HyundaiCarInfo("Hyundai Sonata 2020-23", "All", video_link="https://www.youtube.com/watch?v=ix63r9kE3Fw", - car_parts=CarParts.common([CarHarness.hyundai_a])), + car_parts=CarParts.common([CarHarness.hyundai_a])), + CAR.STARIA_4TH_GEN: HyundaiCarInfo("Hyundai Staria 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_k])), CAR.SONATA_LF: HyundaiCarInfo("Hyundai Sonata 2018-19", car_parts=CarParts.common([CarHarness.hyundai_e])), CAR.TUCSON: [ HyundaiCarInfo("Hyundai Tucson 2021", min_enable_speed=19 * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_l])), @@ -221,17 +240,18 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { CAR.TUCSON_4TH_GEN: [ HyundaiCarInfo("Hyundai Tucson 2022", car_parts=CarParts.common([CarHarness.hyundai_n])), HyundaiCarInfo("Hyundai Tucson 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_n])), + HyundaiCarInfo("Hyundai Tucson Hybrid 2022-24", "All", car_parts=CarParts.common([CarHarness.hyundai_n])), ], - CAR.TUCSON_HYBRID_4TH_GEN: HyundaiCarInfo("Hyundai Tucson Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_n])), CAR.SANTA_CRUZ_1ST_GEN: HyundaiCarInfo("Hyundai Santa Cruz 2022-23", car_parts=CarParts.common([CarHarness.hyundai_n])), + CAR.CUSTIN_1ST_GEN: HyundaiCarInfo("Hyundai Custin 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_k])), # Kia CAR.KIA_FORTE: [ HyundaiCarInfo("Kia Forte 2019-21", car_parts=CarParts.common([CarHarness.hyundai_g])), HyundaiCarInfo("Kia Forte 2023", car_parts=CarParts.common([CarHarness.hyundai_e])), ], - CAR.KIA_K5_2021: HyundaiCarInfo("Kia K5 2021-22", car_parts=CarParts.common([CarHarness.hyundai_a])), - CAR.KIA_K5_HEV_2020: HyundaiCarInfo("Kia K5 Hybrid 2020", car_parts=CarParts.common([CarHarness.hyundai_a])), + CAR.KIA_K5_2021: HyundaiCarInfo("Kia K5 2021-24", car_parts=CarParts.common([CarHarness.hyundai_a])), + CAR.KIA_K5_HEV_2020: HyundaiCarInfo("Kia K5 Hybrid 2020-22", car_parts=CarParts.common([CarHarness.hyundai_a])), CAR.KIA_K8_HEV_1ST_GEN: HyundaiCarInfo("Kia K8 Hybrid (with HDA II) 2023", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_q])), CAR.KIA_NIRO_EV: [ HyundaiCarInfo("Kia Niro EV 2019", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", car_parts=CarParts.common([CarHarness.hyundai_h])), @@ -244,31 +264,36 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { HyundaiCarInfo("Kia Niro Plug-in Hybrid 2018-19", "All", min_enable_speed=10. * CV.MPH_TO_MS, car_parts=CarParts.common([CarHarness.hyundai_c])), HyundaiCarInfo("Kia Niro Plug-in Hybrid 2020", "All", car_parts=CarParts.common([CarHarness.hyundai_d])), ], + CAR.KIA_NIRO_PHEV_2022: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_f])), CAR.KIA_NIRO_HEV_2021: [ - HyundaiCarInfo("Kia Niro Hybrid 2021-22", car_parts=CarParts.common([CarHarness.hyundai_f])), # TODO: 2021 could be hyundai_d, verify + HyundaiCarInfo("Kia Niro Hybrid 2021", car_parts=CarParts.common([CarHarness.hyundai_d])), + HyundaiCarInfo("Kia Niro Hybrid 2022", car_parts=CarParts.common([CarHarness.hyundai_f])), ], CAR.KIA_NIRO_HEV_2ND_GEN: HyundaiCarInfo("Kia Niro Hybrid 2023", car_parts=CarParts.common([CarHarness.hyundai_a])), CAR.KIA_OPTIMA_G4: HyundaiCarInfo("Kia Optima 2017", "Advanced Smart Cruise Control", - car_parts=CarParts.common([CarHarness.hyundai_b])), # TODO: may support 2016, 2018 + car_parts=CarParts.common([CarHarness.hyundai_b])), # TODO: may support 2016, 2018 CAR.KIA_OPTIMA_G4_FL: HyundaiCarInfo("Kia Optima 2019-20", car_parts=CarParts.common([CarHarness.hyundai_g])), - CAR.KIA_OPTIMA_H: [ - HyundaiCarInfo("Kia Optima Hybrid 2017", "Advanced Smart Cruise Control"), # TODO: may support adjacent years - HyundaiCarInfo("Kia Optima Hybrid 2019"), - ], + # TODO: may support adjacent years. may have a non-zero minimum steering speed + CAR.KIA_OPTIMA_H: HyundaiCarInfo("Kia Optima Hybrid 2017", "Advanced Smart Cruise Control", car_parts=CarParts.common([CarHarness.hyundai_c])), + CAR.KIA_OPTIMA_H_G4_FL: HyundaiCarInfo("Kia Optima Hybrid 2019", car_parts=CarParts.common([CarHarness.hyundai_h])), CAR.KIA_SELTOS: HyundaiCarInfo("Kia Seltos 2021", car_parts=CarParts.common([CarHarness.hyundai_a])), - CAR.KIA_SPORTAGE_5TH_GEN: HyundaiCarInfo("Kia Sportage 2023", car_parts=CarParts.common([CarHarness.hyundai_n])), + CAR.KIA_SPORTAGE_5TH_GEN: [ + HyundaiCarInfo("Kia Sportage 2023", car_parts=CarParts.common([CarHarness.hyundai_n])), + HyundaiCarInfo("Kia Sportage Hybrid 2023", car_parts=CarParts.common([CarHarness.hyundai_n])), + ], CAR.KIA_SORENTO: [ - HyundaiCarInfo("Kia Sorento 2018", "Advanced Smart Cruise Control", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", - car_parts=CarParts.common([CarHarness.hyundai_c])), + HyundaiCarInfo("Kia Sorento 2018", "Advanced Smart Cruise Control & LKAS", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", + car_parts=CarParts.common([CarHarness.hyundai_e])), HyundaiCarInfo("Kia Sorento 2019", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", car_parts=CarParts.common([CarHarness.hyundai_e])), ], CAR.KIA_SORENTO_4TH_GEN: HyundaiCarInfo("Kia Sorento 2021-23", car_parts=CarParts.common([CarHarness.hyundai_k])), - CAR.KIA_SORENTO_HEV_4TH_GEN: HyundaiCarInfo("Kia Sorento Hybrid 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_a])), - CAR.KIA_SORENTO_PHEV_4TH_GEN: HyundaiCarInfo("Kia Sorento Plug-in Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_a])), - CAR.KIA_SPORTAGE_HYBRID_5TH_GEN: HyundaiCarInfo("Kia Sportage Hybrid 2023", car_parts=CarParts.common([CarHarness.hyundai_n])), + CAR.KIA_SORENTO_HEV_4TH_GEN: [ + HyundaiCarInfo("Kia Sorento Hybrid 2021-23", "All", car_parts=CarParts.common([CarHarness.hyundai_a])), + HyundaiCarInfo("Kia Sorento Plug-in Hybrid 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_a])), + ], CAR.KIA_STINGER: HyundaiCarInfo("Kia Stinger 2018-20", video_link="https://www.youtube.com/watch?v=MJ94qoofYw0", car_parts=CarParts.common([CarHarness.hyundai_c])), - CAR.KIA_STINGER_2022: HyundaiCarInfo("Kia Stinger 2022", "All", car_parts=CarParts.common([CarHarness.hyundai_k])), + CAR.KIA_STINGER_2022: HyundaiCarInfo("Kia Stinger 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_k])), CAR.KIA_CEED: HyundaiCarInfo("Kia Ceed 2019", car_parts=CarParts.common([CarHarness.hyundai_e])), CAR.KIA_EV6: [ HyundaiCarInfo("Kia EV6 (Southeast Asia only) 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_p])), @@ -276,7 +301,7 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { HyundaiCarInfo("Kia EV6 (with HDA II) 2022-23", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_p])) ], CAR.KIA_CARNIVAL_4TH_GEN: [ - HyundaiCarInfo("Kia Carnival 2023-24", car_parts=CarParts.common([CarHarness.hyundai_a])), + HyundaiCarInfo("Kia Carnival 2022-24", car_parts=CarParts.common([CarHarness.hyundai_a])), HyundaiCarInfo("Kia Carnival (China only) 2023", car_parts=CarParts.common([CarHarness.hyundai_k])) ], @@ -296,7 +321,9 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = { CAR.GENESIS_GV80: HyundaiCarInfo("Genesis GV80 2023", "All", car_parts=CarParts.common([CarHarness.hyundai_m])), # Non-SCC Cars + CAR.BAYON_1ST_GEN_NON_SCC: HyundaiCarInfo("Hyundai Bayon Non-SCC 2021", "No Smart Cruise Control (SCC)", car_parts=CarParts.common([CarHarness.hyundai_n])), CAR.ELANTRA_2022_NON_SCC: HyundaiCarInfo("Hyundai Elantra Non-SCC 2022", "No Smart Cruise Control (SCC)", car_parts=CarParts.common([CarHarness.hyundai_k])), + CAR.KONA_NON_SCC: HyundaiCarInfo("Hyundai Kona Non-SCC 2019", "No Smart Cruise Control (SCC)", car_parts=CarParts.common([CarHarness.hyundai_b])), CAR.KIA_FORTE_2019_NON_SCC: HyundaiCarInfo("Kia Forte Non-SCC 2019", "No Smart Cruise Control (SCC)", car_parts=CarParts.common([CarHarness.hyundai_g])), CAR.KIA_FORTE_2021_NON_SCC: HyundaiCarInfo("Kia Forte Non-SCC 2021", "No Smart Cruise Control (SCC)", car_parts=CarParts.common([CarHarness.hyundai_g])), CAR.KIA_SELTOS_2023_NON_SCC: HyundaiCarInfo("Kia Seltos Non-SCC 2023-24", "No Smart Cruise Control (SCC)", car_parts=CarParts.common([CarHarness.hyundai_l])), @@ -310,84 +337,6 @@ class Buttons: GAP_DIST = 3 CANCEL = 4 # on newer models, this is a pause/resume button -FINGERPRINTS = { - CAR.ELANTRA: [{ - 66: 8, 67: 8, 68: 8, 127: 8, 273: 8, 274: 8, 275: 8, 339: 8, 356: 4, 399: 8, 512: 6, 544: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 897: 8, 832: 8, 899: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1170: 8, 1265: 4, 1280: 1, 1282: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1314: 8, 1322: 8, 1345: 8, 1349: 8, 1351: 8, 1353: 8, 1363: 8, 1366: 8, 1367: 8, 1369: 8, 1407: 8, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 2001: 8, 2003: 8, 2004: 8, 2009: 8, 2012: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 - }], - CAR.HYUNDAI_GENESIS: [{ - 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1024: 2, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1342: 6, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 5, 1407: 8, 1419: 8, 1427: 6, 1434: 2, 1456: 4 - }, - { - 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1024: 2, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 3, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1378: 4, 1379: 8, 1384: 5, 1407: 8, 1419: 8, 1427: 6, 1434: 2, 1456: 4 - }, - { - 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1268: 8, 1280: 1, 1281: 3, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 5, 1407: 8, 1419: 8, 1427: 6, 1434: 2, 1437: 8, 1456: 4 - }, - { - 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1378: 4, 1379: 8, 1384: 5, 1407: 8, 1425: 2, 1427: 6, 1437: 8, 1456: 4 - }, - { - 67: 8, 68: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 7, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 5, 897: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1287: 4, 1292: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1334: 8, 1335: 8, 1345: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 5, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1437: 8, 1456: 4 - }], - CAR.SANTA_FE: [{ - 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1227: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1379: 8, 1384: 8, 1407: 8, 1414: 3, 1419: 8, 1427: 6, 1456: 4, 1470: 8 - }, - { - 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 6, 764: 8, 809: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1155: 8, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1180: 8, 1183: 8, 1186: 2, 1227: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1384: 8, 1407: 8, 1414: 3, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 1988: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8 - }, - { - 67: 8, 68: 8, 80: 4, 160: 8, 161: 8, 272: 8, 288: 4, 339: 8, 356: 8, 357: 8, 399: 8, 544: 8, 608: 8, 672: 8, 688: 5, 704: 1, 790: 8, 809: 8, 848: 8, 880: 8, 898: 8, 900: 8, 901: 8, 904: 8, 1056: 8, 1064: 8, 1065: 8, 1072: 8, 1075: 8, 1087: 8, 1088: 8, 1151: 8, 1200: 8, 1201: 8, 1232: 4, 1264: 8, 1265: 8, 1266: 8, 1296: 8, 1306: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1348: 8, 1349: 8, 1369: 8, 1370: 8, 1371: 8, 1407: 8, 1415: 8, 1419: 8, 1440: 8, 1442: 4, 1461: 8, 1470: 8 - }], - CAR.SONATA: [ - {67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 546: 8, 549: 8, 550: 8, 576: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 8, 865: 8, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 908: 8, 909: 8, 912: 7, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1089: 5, 1096: 8, 1107: 5, 1108: 8, 1114: 8, 1136: 8, 1145: 8, 1151: 8, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 8, 1170: 8, 1173: 8, 1180: 8, 1183: 8, 1184: 8, 1186: 2, 1191: 2, 1193: 8, 1210: 8, 1225: 8, 1227: 8, 1265: 4, 1268: 8, 1280: 8, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1330: 8, 1339: 8, 1342: 6, 1343: 8, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1379: 8, 1384: 8, 1394: 8, 1407: 8, 1419: 8, 1427: 6, 1446: 8, 1456: 4, 1460: 8, 1470: 8, 1485: 8, 1504: 3, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8, 2015: 8}, - ], - CAR.SONATA_LF: [ - {66: 8, 67: 8, 68: 8, 127: 8, 273: 8, 274: 8, 275: 8, 339: 8, 356: 4, 399: 8, 447: 8, 512: 6, 544: 8, 593: 8, 608: 8, 688: 5, 790: 8, 809: 8, 832: 8, 884: 8, 897: 8, 899: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1151: 6, 1168: 7, 1170: 8, 1253: 8, 1254: 8, 1255: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1314: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1349: 8, 1351: 8, 1353: 8, 1363: 8, 1365: 8, 1366: 8, 1367: 8, 1369: 8, 1397: 8, 1407: 8, 1415: 8, 1419: 8, 1425: 2, 1427: 6, 1440: 8, 1456: 4, 1470: 8, 1472: 8, 1486: 8, 1487: 8, 1491: 8, 1530: 8, 1532: 5, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2008: 8, 2009: 8, 2012: 8, 2013: 8, 2014: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8}, - ], - CAR.KIA_SORENTO: [{ - 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1384: 8, 1407: 8, 1411: 8, 1419: 8, 1425: 2, 1427: 6, 1444: 8, 1456: 4, 1470: 8, 1489: 1 - }], - CAR.KIA_STINGER: [{ - 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 359: 8, 544: 8, 576: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 4, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 4, 1379: 8, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1456: 4, 1470: 8 - }], - CAR.GENESIS_G80: [{ - 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1024: 2, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1191: 2, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1434: 2, 1456: 4, 1470: 8 - }, - { - 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 359: 8, 544: 8, 546: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1157: 4, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 3, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1434: 2, 1437: 8, 1456: 4, 1470: 8 - }, - { - 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1156: 8, 1157: 4, 1162: 8, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1193: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1437: 8, 1456: 4, 1470: 8 - }], - CAR.GENESIS_G90: [{ - 67: 8, 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 358: 6, 359: 8, 544: 8, 593: 8, 608: 8, 688: 5, 809: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1107: 5, 1136: 8, 1151: 6, 1162: 4, 1168: 7, 1170: 8, 1173: 8, 1184: 8, 1265: 4, 1280: 1, 1281: 3, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1370: 8, 1371: 8, 1378: 4, 1384: 8, 1407: 8, 1419: 8, 1425: 2, 1427: 6, 1434: 2, 1456: 4, 1470: 8, 1988: 8, 2000: 8, 2003: 8, 2004: 8, 2005: 8, 2008: 8, 2011: 8, 2012: 8, 2013: 8 - }], - CAR.IONIQ_EV_2020: [{ - 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 524: 8, 544: 7, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1164: 8, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1379: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1456: 4, 1470: 8, 1473: 8, 1507: 8, 1535: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8, 2013: 8 - }], - CAR.IONIQ: [{ - 68:8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 524: 8, 544: 8, 576:8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1164: 8, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1379: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1473: 8, 1476: 8, 1507: 8, 1535: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8, 2013: 8 - }], - CAR.KONA_EV: [{ - 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 549: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 8, 1151: 6, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1225: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1307: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1378: 4, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1456: 4, 1470: 8, 1473: 8, 1507: 8, 1535: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8, 1157: 4, 1193: 8, 1379: 8, 1988: 8, 1996: 8 - }], - CAR.KONA_EV_2022: [{ - 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1069: 8, 1078: 4, 1136: 8, 1145: 8, 1151: 8, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 8, 1173: 8, 1183: 8, 1188: 8, 1191: 2, 1193: 8, 1225: 8, 1227: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1339: 8, 1342: 8, 1343: 8, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1379: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1446: 8, 1456: 4, 1470: 8, 1473: 8, 1485: 8, 1507: 8, 1535: 8, 1990: 8, 1998: 8 - }], - CAR.KIA_NIRO_EV: [{ - 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 516: 8, 544: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 8, 1151: 6, 1156: 8, 1157: 4, 1168: 7, 1173: 8, 1183: 8, 1186: 2, 1191: 2, 1193: 8, 1225: 8, 1260: 8, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1407: 8, 1419: 8, 1426: 8, 1427: 6, 1429: 8, 1430: 8, 1456: 4, 1470: 8, 1473: 8, 1507: 8, 1535: 8, 1990: 8, 1998: 8, 1996: 8, 2000: 8, 2004: 8, 2008: 8, 2012: 8, 2015: 8 - }], - CAR.KIA_OPTIMA_H: [{ - 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 593: 8, 688: 5, 832: 8, 881: 8, 882: 8, 897: 8, 902: 8, 903: 6, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1168: 7, 1173: 8, 1236: 2, 1265: 4, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1322: 8, 1331: 8, 1332: 8, 1333: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1371: 8, 1407: 8, 1419: 8, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1476: 8, 1535: 8 - }, - { - 68: 8, 127: 8, 304: 8, 320: 8, 339: 8, 352: 8, 356: 4, 544: 8, 576: 8, 593: 8, 688: 5, 881: 8, 882: 8, 897: 8, 902: 8, 903: 8, 909: 8, 912: 7, 916: 8, 1040: 8, 1056: 8, 1057: 8, 1078: 4, 1136: 6, 1151: 6, 1168: 7, 1173: 8, 1180: 8, 1186: 2, 1191: 2, 1265: 4, 1268: 8, 1280: 1, 1287: 4, 1290: 8, 1291: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1355: 8, 1363: 8, 1369: 8, 1371: 8, 1407: 8, 1419: 8, 1420: 8, 1425: 2, 1427: 6, 1429: 8, 1430: 8, 1448: 8, 1456: 4, 1470: 8, 1476: 8, 1535: 8 - }], - CAR.PALISADE: [{ - 67: 8, 127: 8, 304: 8, 320: 8, 339: 8, 356: 4, 544: 8, 546: 8, 547: 8, 548: 8, 549: 8, 576: 8, 593: 8, 608: 8, 688: 6, 809: 8, 832: 8, 854: 7, 870: 7, 871: 8, 872: 8, 897: 8, 902: 8, 903: 8, 905: 8, 909: 8, 913: 8, 916: 8, 1040: 8, 1042: 8, 1056: 8, 1057: 8, 1064: 8, 1078: 4, 1107: 5, 1123: 8, 1136: 8, 1151: 6, 1155: 8, 1156: 8, 1157: 4, 1162: 8, 1164: 8, 1168: 7, 1170: 8, 1173: 8, 1180: 8, 1186: 2, 1191: 2, 1193: 8, 1210: 8, 1225: 8, 1227: 8, 1265: 4, 1280: 8, 1287: 4, 1290: 8, 1292: 8, 1294: 8, 1312: 8, 1322: 8, 1342: 6, 1345: 8, 1348: 8, 1363: 8, 1369: 8, 1371: 8, 1378: 8, 1384: 8, 1407: 8, 1419: 8, 1427: 6, 1456: 4, 1470: 8, 1988: 8, 1996: 8, 2000: 8, 2004: 8, 2005: 8, 2008: 8, 2012: 8 - }], -} - def get_platform_codes(fw_versions: List[bytes]) -> Set[Tuple[bytes, Optional[bytes]]]: # Returns unique, platform-specific identification codes for a set of versions @@ -408,15 +357,14 @@ def get_platform_codes(fw_versions: List[bytes]) -> Set[Tuple[bytes, Optional[by return codes -def match_fw_to_car_fuzzy(live_fw_versions) -> Set[str]: +def match_fw_to_car_fuzzy(live_fw_versions, offline_fw_versions) -> Set[str]: # Non-electric CAN FD platforms often do not have platform code specifiers needed # to distinguish between hybrid and ICE. All EVs so far are either exclusively # electric or specify electric in the platform code. - # TODO: whitelist platforms that we've seen hybrid and ICE versions of that have these specifiers - fuzzy_platform_blacklist = set(CANFD_CAR - EV_CAR) - candidates = set() + fuzzy_platform_blacklist = {str(c) for c in (CANFD_CAR - EV_CAR - CANFD_FUZZY_WHITELIST)} + candidates: Set[str] = set() - for candidate, fws in FW_VERSIONS.items(): + for candidate, fws in offline_fw_versions.items(): # Keep track of ECUs which pass all checks (platform codes, within date range) valid_found_ecus = set() valid_expected_ecus = {ecu[1:] for ecu in fws if ecu[0] in PLATFORM_CODE_ECUS} @@ -478,6 +426,9 @@ PLATFORM_CODE_FW_PATTERN = re.compile(b'((?<=' + HYUNDAI_VERSION_REQUEST_LONG[1: DATE_FW_PATTERN = re.compile(b'(?<=[ -])([0-9]{6}$)') PART_NUMBER_FW_PATTERN = re.compile(b'(?<=[0-9][.,][0-9]{2} )([0-9]{5}[-/]?[A-Z][A-Z0-9]{3}[0-9])') +# We've seen both ICE and hybrid for these platforms, and they have hybrid descriptors (e.g. MQ4 vs MQ4H) +CANFD_FUZZY_WHITELIST = {CAR.KIA_SORENTO_4TH_GEN, CAR.KIA_SORENTO_HEV_4TH_GEN} + # List of ECUs expected to have platform codes, camera and radar should exist on all cars # TODO: use abs, it has the platform code and part number on many platforms PLATFORM_CODE_ECUS = [Ecu.fwdRadar, Ecu.fwdCamera, Ecu.eps] @@ -545,1572 +496,40 @@ FW_QUERY_CONFIG = FwQueryConfig( match_fw_to_car_fuzzy=match_fw_to_car_fuzzy, ) -FW_VERSIONS = { - CAR.AZERA_6TH_GEN: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00IG__ SCC F-CU- 1.00 1.00 99110-G8100 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00IG MDPS C 1.00 1.02 56310G8510\x00 4IGSC103', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00IG MFC AT MES LHD 1.00 1.04 99211-G8100 200511', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00bcsh8p54 U912\x00\x00\x00\x00\x00\x00SIG0M35MH0\xa4 |.', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81641KA051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.HYUNDAI_GENESIS: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00DH LKAS 1.1 -150210', - b'\xf1\x00DH LKAS 1.4 -140110', - b'\xf1\x00DH LKAS 1.5 -140425', - ], - }, - CAR.IONIQ: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00AEhe SCC H-CUP 1.01 1.01 96400-G2000 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2301 4AEHC107', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00AEH MFC AT EUR LHD 1.00 1.00 95740-G2400 180222', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6F2051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x816U3H1051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H1051\x00\x00HAE0G16US2\x00\x00\x00\x00', - ], - }, - CAR.IONIQ_PHEV_2019: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00AEhe SCC H-CUP 1.01 1.01 96400-G2100 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.07 56310/G2501 4AEHC107', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00AEP MFC AT USA LHD 1.00 1.00 95740-G2400 180222', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PAE0G16NS1\xdbD\r\x81', - b'\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PAE0G16NS1\x00\x00\x00\x00', - ], - }, - CAR.IONIQ_PHEV: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00AEhe SCC FHCUP 1.00 1.02 99110-G2100 ', - b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2200 ', - b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2600 ', - b'\xf1\x00AEhe SCC F-CUP 1.00 1.02 99110-G2100 ', - b'\xf1\x00AEhe SCC FHCUP 1.00 1.00 99110-G2600 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.01 56310/G2510 4APHC101', - b'\xf1\x00AE MDPS C 1.00 1.01 56310/G2560 4APHC101', - b'\xf1\x00AE MDPS C 1.00 1.01 56310G2510\x00 4APHC101', - b'\xf1\x00AE MDPS C 1.00 1.01 56310/G2310 4APHC101', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00AEP MFC AT USA LHD 1.00 1.01 95740-G2600 190819', - b'\xf1\x00AEP MFC AT EUR RHD 1.00 1.01 95740-G2600 190819', - b'\xf1\x00AEP MFC AT USA LHD 1.00 1.00 95740-G2700 201027', - b'\xf1\x00AEP MFC AT EUR LHD 1.00 1.01 95740-G2600 190819', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x816H6G6051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x816U3J9051\000\000\xf1\0006U3H1_C2\000\0006U3J9051\000\000PAE0G16NL0\x82zT\xd2', - b'\xf1\x816U3J8051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J8051\x00\x00PAETG16UL0\x00\x00\x00\x00', - b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PAE0G16NL2\x00\x00\x00\x00', - b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PAE0G16NL0\x00\x00\x00\x00', - b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PAE0G16NL2\xad\xeb\xabt', - b'\xf1\x006U3H1_C2\x00\x006U3J8051\x00\x00PAETG16UL0\x00\x00\x00\x00', - ], - }, - CAR.IONIQ_EV_2020: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00AEev SCC F-CUP 1.00 1.01 99110-G7000 ', - b'\xf1\x00AEev SCC F-CUP 1.00 1.00 99110-G7200 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.01 56310/G7310 4APEC101', - b'\xf1\x00AE MDPS C 1.00 1.01 56310/G7560 4APEC101', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.01 95740-G2600 190819', - b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.03 95740-G2500 190516', - b'\xf1\x00AEE MFC AT EUR RHD 1.00 1.01 95740-G2600 190819', - b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G2600 190730', - ], - }, - CAR.IONIQ_EV_LTD: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00AEev SCC F-CUP 1.00 1.00 96400-G7000 ', - b'\xf1\x00AEev SCC F-CUP 1.00 1.00 96400-G7100 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.02 56310G7300\x00 4AEEC102', - b'\xf1\x00AE MDPS C 1.00 1.04 56310/G7501 4AEEC104', - b'\xf1\x00AE MDPS C 1.00 1.03 56310/G7300 4AEEC103', - b'\xf1\x00AE MDPS C 1.00 1.03 56310G7300\x00 4AEEC103', - b'\xf1\x00AE MDPS C 1.00 1.04 56310/G7301 4AEEC104', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G7200 160418', - b'\xf1\x00AEE MFC AT USA LHD 1.00 1.00 95740-G2400 180222', - b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G2300 170703', - b'\xf1\x00AEE MFC AT EUR LHD 1.00 1.00 95740-G2400 180222', - ], - }, - CAR.IONIQ_HEV_2022: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2600 ', - b'\xf1\x00AEhe SCC FHCUP 1.00 1.00 99110-G2600 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00AE MDPS C 1.00 1.01 56310G2510\x00 4APHC101', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00AEH MFC AT USA LHD 1.00 1.00 95740-G2700 201027', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HAE0G16NL2\x00\x00\x00\x00', - b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HAE0G16NL2\x96\xda\xd4\xee', - ], - }, - CAR.SONATA: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00DN8_ SCC F-CU- 1.00 1.00 99110-L0000 ', - b'\xf1\x00DN8_ SCC F-CUP 1.00 1.00 99110-L0000 ', - b'\xf1\x00DN8_ SCC F-CUP 1.00 1.02 99110-L1000 ', - b'\xf1\x00DN8_ SCC FHCUP 1.00 1.00 99110-L0000 ', - b'\xf1\x00DN8_ SCC FHCUP 1.00 1.01 99110-L1000 ', - b'\xf1\x00DN8_ SCC FHCUP 1.00 1.02 99110-L1000 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00DN ESC \x07 106 \x07\x01 58910-L0100', - b'\xf1\x00DN ESC \x01 102\x19\x04\x13 58910-L1300', - b'\xf1\x00DN ESC \x03 100 \x08\x01 58910-L0300', - b'\xf1\x00DN ESC \x06 104\x19\x08\x01 58910-L0100', - b'\xf1\x00DN ESC \x07 104\x19\x08\x01 58910-L0100', - b'\xf1\x00DN ESC \x08 103\x19\x06\x01 58910-L1300', - b'\xf1\x00DN ESC \x07 107"\x08\x07 58910-L0100', - b'\xf1\x8758910-L0100\xf1\x00DN ESC \x07 106 \x07\x01 58910-L0100', - b'\xf1\x8758910-L0100\xf1\x00DN ESC \x06 104\x19\x08\x01 58910-L0100', - b'\xf1\x8758910-L0100\xf1\x00DN ESC \x06 106 \x07\x01 58910-L0100', - b'\xf1\x8758910-L0100\xf1\x00DN ESC \x07 104\x19\x08\x01 58910-L0100', - b'\xf1\x00DN ESC \x06 106 \x07\x01 58910-L0100', - b'\xf1\x00DN ESC \x06 107 \x07\x03 58910-L1300', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81HM6M1_0a0_F00', - b'\xf1\x82DNBVN5GMCCXXXDCA', - b'\xf1\x82DNBVN5GMCCXXXG2F', - b'\xf1\x82DNBWN5TMDCXXXG2E', - b'\xf1\x82DNCVN5GMCCXXXF0A', - b'\xf1\x82DNCVN5GMCCXXXG2B', - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M1_0a0_J10', - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82DNDWN5TMDCXXXJ1A', - b'\xf1\x8739110-2S041\xf1\x81HM6M1_0a0_M10', - b'\xf1\x87391162M003', - b'\xf1\x87391162M013', - b'\xf1\x87391162M023', - b'\xf1\x87391162M010', - b'HM6M1_0a0_F00', - b'HM6M1_0a0_G20', - b'HM6M2_0a0_BD0', - b'\xf1\x8739110-2S278\xf1\x82DNDVD5GMCCXXXL5B', - b'\xf1\x8739110-2S041\xf1\x81HM6M1_0a0_M00', - b'\xf1\x8739110-2S042\xf1\x81HM6M1_0a0_M00', - b'\xf1\x81HM6M1_0a0_G20', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00DN8 MDPS C 1,00 1,01 56310L0010\x00 4DNAC101', # modified firmware - b'\xf1\x00DN8 MDPS C 1.00 1.01 56310L0210\x00 4DNAC102', - b'\xf1\x8756310L0010\x00\xf1\x00DN8 MDPS C 1,00 1,01 56310L0010\x00 4DNAC101', # modified firmware - b'\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0010 4DNAC101', - b'\xf1\x00DN8 MDPS C 1.00 1.01 56310L0010\x00 4DNAC101', - b'\xf1\x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP100', - b'\xf1\x8756310-L0010\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0010 4DNAC101', - b'\xf1\x8756310-L0210\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC101', - b'\xf1\x8756310-L1010\xf1\x00DN8 MDPS C 1.00 1.03 56310-L1010 4DNDC103', - b'\xf1\x8756310-L1030\xf1\x00DN8 MDPS C 1.00 1.03 56310-L1030 4DNDC103', - b'\xf1\x8756310L0010\x00\xf1\x00DN8 MDPS C 1.00 1.01 56310L0010\x00 4DNAC101', - b'\xf1\x8756310L0210\x00\xf1\x00DN8 MDPS C 1.00 1.01 56310L0210\x00 4DNAC101', - b'\xf1\x8757700-L0000\xf1\x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP100', - b'\xf1\x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP101', - b'\xf1\x00DN8 MDPS R 1.00 1.02 57700-L1000 4DNDP105', - b'\xf1\x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC102', - b'\xf1\x00DN8 MDPS C 1.00 1.01 56310L0200\x00 4DNAC102', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00DN8 MFC AT KOR LHD 1.00 1.02 99211-L1000 190422', - b'\xf1\x00DN8 MFC AT KOR LHD 1.00 1.04 99211-L1000 191016', - b'\xf1\x00DN8 MFC AT RUS LHD 1.00 1.03 99211-L1000 190705', - b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.00 99211-L0000 190716', - b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.01 99211-L0000 191016', - b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.03 99211-L0000 210603', - b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.05 99211-L1000 201109', - b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.06 99211-L1000 210325', - b'\xf1\x00DN8 MFC AT USA LHD 1.00 1.07 99211-L1000 211223', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB1\xe3\xc10\xa1', - b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16KB05\x95h%', - b'\xf1\x00HT6TA260BLHT6TA800A1TDN8C20KS4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x00HT6TA260BLHT6TA810A1TDN8M25GS0\x00\x00\x00\x00\x00\x00\xaa\x8c\xd9p', - b'\xf1\x00HT6WA250BLHT6WA910A1SDN8G25NB1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x00HT6WA250BLHT6WA910A1SDN8G25NB1\x00\x00\x00\x00\x00\x00\x96\xa1\xf1\x92', - b'\xf1\x00HT6WA280BLHT6WAD10A1SDN8G25NB2\x00\x00\x00\x00\x00\x00\x08\xc9O:', - b'\xf1\x00HT6WA280BLHT6WAD10A1SDN8G25NB4\x00\x00\x00\x00\x00\x00g!l[', - b'\xf1\x00HT6WA280BLHT6WAE10A1SDN8G25NB5\x00\x00\x00\x00\x00\x00\xe0t\xa9\xba', - b'\xf1\x00T02601BL T02730A1 VDN8T25XXX730NS5\xf7_\x92\xf5', - b'\xf1\x00T02601BL T02832A1 VDN8T25XXX832NS8G\x0e\xfeE', - b'\xf1\x00T02601BL T02900A1 VDN8T25XXX900NSCF\xe4!Y', - b'\xf1\x87954A02N060\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 VDN8T25XXX730NS5\xf7_\x92\xf5', - b'\xf1\x87SAKFBA2926554GJ2VefVww\x87xwwwww\x88\x87xww\x87wTo\xfb\xffvUo\xff\x8d\x16\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SAKFBA3030524GJ2UVugww\x97yx\x88\x87\x88vw\x87gww\x87wto\xf9\xfffUo\xff\xa2\x0c\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SAKFBA3356084GJ2\x86fvgUUuWgw\x86www\x87wffvf\xb6\xcf\xfc\xffeUO\xff\x12\x19\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SAKFBA3474944GJ2ffvgwwwwg\x88\x86x\x88\x88\x98\x88ffvfeo\xfa\xff\x86fo\xff\t\xae\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SAKFBA3475714GJ2Vfvgvg\x96yx\x88\x97\x88ww\x87ww\x88\x87xs_\xfb\xffvUO\xff\x0f\xff\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALDBA3510954GJ3ww\x87xUUuWx\x88\x87\x88\x87w\x88wvfwfc_\xf9\xff\x98wO\xffl\xe0\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA3573534GJ3\x89\x98\x89\x88EUuWgwvwwwwww\x88\x87xTo\xfa\xff\x86f\x7f\xffo\x0e\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA3601464GJ3\x88\x88\x88\x88ffvggwvwvw\x87gww\x87wvo\xfb\xff\x98\x88\x7f\xffjJ\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA3753044GJ3UUeVff\x86hwwwwvwwgvfgfvo\xf9\xfffU_\xffC\xae\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA3862294GJ3vfvgvefVxw\x87\x87w\x88\x87xwwwwc_\xf9\xff\x87w\x9f\xff\xd5\xdc\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA3873834GJ3fefVwuwWx\x88\x97\x88w\x88\x97xww\x87wU_\xfb\xff\x86f\x8f\xffN\x04\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA4525334GJ3\x89\x99\x99\x99fevWh\x88\x86\x88fwvgw\x88\x87xfo\xfa\xffuDo\xff\xd1>\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA4626804GJ3wwww\x88\x87\x88xx\x88\x87\x88wwgw\x88\x88\x98\x88\x95_\xf9\xffuDo\xff|\xe7\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA4803224GJ3wwwwwvwg\x88\x88\x98\x88wwww\x87\x88\x88xu\x9f\xfc\xff\x87f\x8f\xff\xea\xea\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA6212564GJ3\x87wwwUTuGg\x88\x86xx\x88\x87\x88\x87\x88\x98xu?\xf9\xff\x97f\x7f\xff\xb8\n\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA6347404GJ3wwwwff\x86hx\x88\x97\x88\x88\x88\x88\x88vfgf\x88?\xfc\xff\x86Uo\xff\xec/\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA6901634GJ3UUuWVeVUww\x87wwwwwvUge\x86/\xfb\xff\xbb\x99\x7f\xff]2\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALDBA7077724GJ3\x98\x88\x88\x88ww\x97ygwvwww\x87ww\x88\x87x\x87_\xfd\xff\xba\x99o\xff\x99\x01\xf1\x89HT6WA910A1\xf1\x82SDN8G25NB1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALFBA3525114GJ2wvwgvfvggw\x86wffvffw\x86g\x85_\xf9\xff\xa8wo\xffv\xcd\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA3624024GJ2\x88\x88\x88\x88wv\x87hx\x88\x97\x88x\x88\x97\x88ww\x87w\x86o\xfa\xffvU\x7f\xff\xd1\xec\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA3960824GJ2wwwwff\x86hffvfffffvfwfg_\xf9\xff\xa9\x88\x8f\xffb\x99\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA4011074GJ2fgvwwv\x87hw\x88\x87xww\x87wwfgvu_\xfa\xffefo\xff\x87\xc0\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA4121304GJ2x\x87xwff\x86hwwwwww\x87wwwww\x84_\xfc\xff\x98\x88\x9f\xffi\xa6\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA4195874GJ2EVugvf\x86hgwvwww\x87wgw\x86wc_\xfb\xff\x98\x88\x8f\xff\xe23\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA4625294GJ2eVefeUeVx\x88\x97\x88wwwwwwww\xa7o\xfb\xffvw\x9f\xff\xee.\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA4728774GJ2vfvg\x87vwgww\x87ww\x88\x97xww\x87w\x86_\xfb\xffeD?\xffk0\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA5129064GJ2vfvgwv\x87hx\x88\x87\x88ww\x87www\x87wd_\xfa\xffvfo\xff\x1d\x00\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA5454914GJ2\x98\x88\x88\x88\x87vwgx\x88\x87\x88xww\x87ffvf\xa7\x7f\xf9\xff\xa8w\x7f\xff\x1b\x90\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA5987784GJ2UVugDDtGx\x88\x87\x88w\x88\x87xwwwwd/\xfb\xff\x97fO\xff\xb0h\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA5987864GJ2fgvwUUuWgwvw\x87wxwwwww\x84/\xfc\xff\x97w\x7f\xff\xdf\x1d\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA6337644GJ2vgvwwv\x87hgffvwwwwwwww\x85O\xfa\xff\xa7w\x7f\xff\xc5\xfc\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA6802004GJ2UUuWUUuWgw\x86www\x87www\x87w\x96?\xf9\xff\xa9\x88\x7f\xff\x9fK\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA6892284GJ233S5\x87w\x87xx\x88\x87\x88vwwgww\x87w\x84?\xfb\xff\x98\x88\x8f\xff*\x9e\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00SDN8T16NB0z{\xd4v', - b'\xf1\x87SALFBA7005534GJ2eUuWfg\x86xxww\x87x\x88\x87\x88\x88w\x88\x87\x87O\xfc\xffuUO\xff\xa3k\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB1\xe3\xc10\xa1', - b'\xf1\x87SALFBA7152454GJ2gvwgFf\x86hx\x88\x87\x88vfWfffffd?\xfa\xff\xba\x88o\xff,\xcf\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB1\xe3\xc10\xa1', - b'\xf1\x87SALFBA7485034GJ2ww\x87xww\x87xfwvgwwwwvfgf\xa5/\xfc\xff\xa9w_\xff40\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SAMDBA7743924GJ3wwwwww\x87xgwvw\x88\x88\x88\x88wwww\x85_\xfa\xff\x86f\x7f\xff0\x9d\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB2\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SAMDBA7817334GJ3Vgvwvfvgww\x87wwwwwwfgv\x97O\xfd\xff\x88\x88o\xff\x8e\xeb\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB2\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SAMDBA8054504GJ3gw\x87xffvgffffwwwweUVUf?\xfc\xffvU_\xff\xddl\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB2\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SAMFB41553621GC7ww\x87xUU\x85Xvwwg\x88\x88\x88\x88wwgw\x86\xaf\xfb\xffuDo\xff\xaa\x8f\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SAMFB42555421GC7\x88\x88\x88\x88wvwgx\x88\x87\x88wwgw\x87wxw3\x8f\xfc\xff\x98f\x8f\xffga\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SAMFBA7978674GJ2gw\x87xgw\x97ywwwwvUGeUUeU\x87O\xfb\xff\x98w\x8f\xfffF\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SAMFBA9283024GJ2wwwwEUuWwwgwwwwwwwww\x87/\xfb\xff\x98w\x8f\xff<\xd3\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SAMFBA9708354GJ2wwwwVf\x86h\x88wx\x87xww\x87\x88\x88\x88\x88w/\xfa\xff\x97w\x8f\xff\x86\xa0\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SANDB45316691GC6\x99\x99\x99\x99\x88\x88\xa8\x8avfwfwwww\x87wxwT\x9f\xfd\xff\x88wo\xff\x1c\xfa\xf1\x89HT6WAD10A1\xf1\x82SDN8G25NB3\x00\x00\x00\x00\x00\x00', - b'\xf1\x87SALFBA7460044GJ2gx\x87\x88Vf\x86hx\x88\x87\x88wwwwgw\x86wd?\xfa\xff\x86U_\xff\xaf\x1f\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SAMFBA8105254GJ2wx\x87\x88Vf\x86hx\x88\x87\x88wwwwwwww\x86O\xfa\xff\x99\x88\x7f\xffZG\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x87SANFB45889451GC7wx\x87\x88gw\x87x\x88\x88x\x88\x87wxw\x87wxw\x87\x8f\xfc\xffeU\x8f\xff+Q\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00SDN8T16NB2\n\xdd^\xbc', - b'\xf1\x00T02601BL T02900A1 VDN8T25XXX900NSA\xb9\x13\xf9p', - ], - }, - CAR.SONATA_LF: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00LF__ SCC F-CUP 1.00 1.00 96401-C2200 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00LF ESC \f 11 \x17\x01\x13 58920-C2610', - b'\xf1\x00LF ESC \t 11 \x17\x01\x13 58920-C2610', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81606D5051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81606D5K51\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81606G1051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00LFF LKAS AT USA LHD 1.00 1.01 95740-C1000 E51', - b'\xf1\x00LFF LKAS AT USA LHD 1.01 1.02 95740-C1000 E52', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24NL1\xb0\x9f\xee\xf5', - b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B4051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24NL1\x00\x00\x00\x00', - b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B4051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24NL1\xb0\x9f\xee\xf5', - b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B4051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B4051\x00\x00TLF0G24SL2n\x8d\xbe\xd8', - b'\xf1\x87LAHSGN012918KF10\x98\x88x\x87\x88\x88x\x87\x88\x88\x98\x88\x87w\x88w\x88\x88\x98\x886o\xf6\xff\x98w\x7f\xff3\x00\xf1\x816W3B1051\x00\x00\xf1\x006W351_C2\x00\x006W3B1051\x00\x00TLF0T20NL2\x00\x00\x00\x00', - b'\xf1\x87LAHSGN012918KF10\x98\x88x\x87\x88\x88x\x87\x88\x88\x98\x88\x87w\x88w\x88\x88\x98\x886o\xf6\xff\x98w\x7f\xff3\x00\xf1\x816W3B1051\x00\x00\xf1\x006W351_C2\x00\x006W3B1051\x00\x00TLF0T20NL2H\r\xbdm', - b'\xf1\x87LAJSG49645724HF0\x87x\x87\x88\x87www\x88\x99\xa8\x89\x88\x99\xa8\x89\x88\x99\xa8\x89S_\xfb\xff\x87f\x7f\xff^2\xf1\x816W3B1051\x00\x00\xf1\x006W351_C2\x00\x006W3B1051\x00\x00TLF0T20NL2H\r\xbdm', - ], - }, - CAR.TUCSON: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00TL__ FCA F-CUP 1.00 1.01 99110-D3500 ', - b'\xf1\x00TL__ FCA F-CUP 1.00 1.02 99110-D3510 ', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8971TLC2NAIDDIR002\xf1\x8271TLC2NAIDDIR002', - b'\xf1\x81606G3051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00TL MFC AT KOR LHD 1.00 1.02 95895-D3800 180719', - b'\xf1\x00TL MFC AT USA LHD 1.00 1.06 95895-D3800 190107', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87LBJXAN202299KF22\x87x\x87\x88ww\x87xx\x88\x97\x88\x87\x88\x98x\x88\x99\x98\x89\x87o\xf6\xff\x87w\x7f\xff\x12\x9a\xf1\x81U083\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U083\x00\x00\x00\x00\x00\x00TTL2V20KL1\x8fRn\x8a', - b'\xf1\x87KMLDCU585233TJ20wx\x87\x88x\x88\x98\x89vfwfwwww\x87f\x9f\xff\x98\xff\x7f\xf9\xf7s\xf1\x816T6G4051\x00\x00\xf1\x006T6J0_C2\x00\x006T6G4051\x00\x00TTL4G24NH2\x00\x00\x00\x00', - ], - }, - CAR.SANTA_FE: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00TM__ SCC F-CUP 1.00 1.00 99110-S1210 ', - b'\xf1\x00TM__ SCC F-CUP 1.00 1.01 99110-S2000 ', - b'\xf1\x00TM__ SCC F-CUP 1.00 1.02 99110-S2000 ', - b'\xf1\x00TM__ SCC F-CUP 1.00 1.03 99110-S2000 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00TM ESC \r 100\x18\x031 58910-S2650', - b'\xf1\x00TM ESC \r 105\x19\x05# 58910-S1500', - b'\xf1\x00TM ESC \r 103\x18\x11\x08 58910-S2650', - b'\xf1\x00TM ESC \r 104\x19\x07\x08 58910-S2650', - b'\xf1\x00TM ESC \x02 100\x18\x030 58910-S2600', - b'\xf1\x00TM ESC \x02 102\x18\x07\x01 58910-S2600', - b'\xf1\x00TM ESC \x02 103\x18\x11\x07 58910-S2600', - b'\xf1\x00TM ESC \x02 104\x19\x07\x07 58910-S2600', - b'\xf1\x00TM ESC \x03 103\x18\x11\x07 58910-S2600', - b'\xf1\x00TM ESC \x0c 103\x18\x11\x08 58910-S2650', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81606EA051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81606G1051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81606G3051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00TM MDPS C 1.00 1.00 56340-S2000 8409', - b'\xf1\x00TM MDPS C 1.00 1.00 56340-S2000 8A12', - b'\xf1\x00TM MDPS C 1.00 1.01 56340-S2000 9129', - b'\xf1\x00TM MDPS R 1.00 1.02 57700-S1100 4TMDP102', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00TM MFC AT EUR LHD 1.00 1.01 99211-S1010 181207', - b'\xf1\x00TM MFC AT USA LHD 1.00 1.00 99211-S2000 180409', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00bcsh8p54 U833\x00\x00\x00\x00\x00\x00TTM4V22US3_<]\xf1', - b'\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS5\x00\x00\x00\x00', - b'\xf1\x87LBJSGA7082574HG0\x87www\x98\x88\x88\x88\x99\xaa\xb9\x9afw\x86gx\x99\xa7\x89co\xf8\xffvU_\xffR\xaf\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2T20NS1\x00\xa6\xe0\x91', - b'\xf1\x87LBKSGA0458404HG0vfvg\x87www\x89\x99\xa8\x99y\xaa\xa7\x9ax\x88\xa7\x88t_\xf9\xff\x86w\x8f\xff\x15x\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2T20NS1\x00\x00\x00\x00', - b'\xf1\x87LDJUEA6010814HG1\x87w\x87x\x86gvw\x88\x88\x98\x88gw\x86wx\x88\x97\x88\x85o\xf8\xff\x86f_\xff\xd37\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4T20NS0\xf8\x19\x92g', - b'\xf1\x87LDJUEA6458264HG1ww\x87x\x97x\x87\x88\x88\x99\x98\x89g\x88\x86xw\x88\x97x\x86o\xf7\xffvw\x8f\xff3\x9a\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4T20NS0\xf8\x19\x92g', - b'\xf1\x87LDKUEA2045844HG1wwww\x98\x88x\x87\x88\x88\xa8\x88x\x99\x97\x89x\x88\xa7\x88U\x7f\xf8\xffvfO\xffC\x1e\xf1\x816W3E0051\x00\x00\xf1\x006W351_C2\x00\x006W3E0051\x00\x00TTM4T20NS3\x00\x00\x00\x00', - b'\xf1\x87LDKUEA9993304HG1\x87www\x97x\x87\x88\x99\x99\xa9\x99x\x99\xa7\x89w\x88\x97x\x86_\xf7\xffwwO\xffl#\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4T20NS1R\x7f\x90\n', - b'\xf1\x87LDLUEA6061564HG1\xa9\x99\x89\x98\x87wwwx\x88\x97\x88x\x99\xa7\x89x\x99\xa7\x89sO\xf9\xffvU_\xff<\xde\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS50\xcb\xc3\xed', - b'\xf1\x87LDLUEA6159884HG1\x88\x87hv\x99\x99y\x97\x89\xaa\xb8\x9ax\x99\x87\x89y\x99\xb7\x99\xa7?\xf7\xff\x97wo\xff\xf3\x05\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS5\x00\x00\x00\x00', - b'\xf1\x87LDLUEA6852664HG1\x97wWu\x97www\x89\xaa\xc8\x9ax\x99\x97\x89x\x99\xa7\x89SO\xf7\xff\xa8\x88\x7f\xff\x03z\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS50\xcb\xc3\xed', - b'\xf1\x87LDLUEA6898374HG1fevW\x87wwwx\x88\x97\x88h\x88\x96\x88x\x88\xa7\x88ao\xf9\xff\x98\x99\x7f\xffD\xe2\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS5\x00\x00\x00\x00', - b'\xf1\x87LDLUEA6898374HG1fevW\x87wwwx\x88\x97\x88h\x88\x96\x88x\x88\xa7\x88ao\xf9\xff\x98\x99\x7f\xffD\xe2\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4T20NS50\xcb\xc3\xed', - b'\xf1\x87SBJWAA5842214GG0\x88\x87\x88xww\x87x\x89\x99\xa8\x99\x88\x99\x98\x89w\x88\x87xw_\xfa\xfffU_\xff\xd1\x8d\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x98{|\xe3', - b'\xf1\x87SBJWAA5890864GG0\xa9\x99\x89\x98\x98\x87\x98y\x89\x99\xa8\x99w\x88\x87xww\x87wvo\xfb\xffuD_\xff\x9f\xb5\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x98{|\xe3', - b'\xf1\x87SBJWAA6562474GG0ffvgeTeFx\x88\x97\x88ww\x87www\x87w\x84o\xfa\xff\x87fO\xff\xc2 \xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x00\x00\x00\x00', - b'\xf1\x87SBJWAA6562474GG0ffvgeTeFx\x88\x97\x88ww\x87www\x87w\x84o\xfa\xff\x87fO\xff\xc2 \xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS1\x98{|\xe3', - b'\xf1\x87SBJWAA7780564GG0wvwgUUeVwwwwx\x88\x87\x88wwwwd_\xfc\xff\x86f\x7f\xff\xd7*\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS2F\x84<\xc0', - b'\xf1\x87SBJWAA8278284GG0ffvgUU\x85Xx\x88\x87\x88x\x88w\x88ww\x87w\x96o\xfd\xff\xa7U_\xff\xf2\xa0\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM2G24NS2F\x84<\xc0', - b'\xf1\x87SBLWAA4363244GG0wvwgwv\x87hgw\x86ww\x88\x87xww\x87wdo\xfb\xff\x86f\x7f\xff3$\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS6\x00\x00\x00\x00', - b'\xf1\x87SBLWAA4363244GG0wvwgwv\x87hgw\x86ww\x88\x87xww\x87wdo\xfb\xff\x86f\x7f\xff3$\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS6x0\x17\xfe', - b'\xf1\x87SBLWAA4899564GG0VfvgUU\x85Xx\x88\x87\x88vfgf\x87wxwvO\xfb\xff\x97f\xb1\xffSB\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS7\x00\x00\x00\x00', - b'\xf1\x87SBLWAA6622844GG0wwwwff\x86hwwwwx\x88\x87\x88\x88\x88\x88\x88\x98?\xfd\xff\xa9\x88\x7f\xffn\xe5\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM2G24NS7u\x1e{\x1c', - b'\xf1\x87SDJXAA7656854GG1DEtWUU\x85X\x88\x88\x98\x88w\x88\x87xx\x88\x87\x88\x96o\xfb\xff\x86f\x7f\xff.\xca\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4G24NS2\x00\x00\x00\x00', - b'\xf1\x87SDJXAA7656854GG1DEtWUU\x85X\x88\x88\x98\x88w\x88\x87xx\x88\x87\x88\x96o\xfb\xff\x86f\x7f\xff.\xca\xf1\x816W3C2051\x00\x00\xf1\x006W351_C2\x00\x006W3C2051\x00\x00TTM4G24NS2K\xdaV0', - b'\xf1\x87SDKXAA2443414GG1vfvgwv\x87h\x88\x88\x88\x88ww\x87wwwww\x99_\xfc\xffvD?\xffl\xd2\xf1\x816W3E1051\x00\x00\xf1\x006W351_C2\x00\x006W3E1051\x00\x00TTM4G24NS6\x00\x00\x00\x00', - ], - }, - CAR.SANTA_FE_2022: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00TM__ SCC F-CUP 1.00 1.00 99110-S1500 ', - b'\xf1\x00TM__ SCC FHCUP 1.00 1.00 99110-S1500 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00TM ESC \x01 102!\x04\x03 58910-S2DA0', - b'\xf1\x00TM ESC \x02 101 \x08\x04 58910-S2GA0', - b'\xf1\x00TM ESC \x03 101 \x08\x02 58910-S2DA0', - b'\xf1\x8758910-S2DA0\xf1\x00TM ESC \x03 101 \x08\x02 58910-S2DA0', - b'\xf1\x8758910-S2GA0\xf1\x00TM ESC \x02 101 \x08\x04 58910-S2GA0', - b'\xf1\x8758910-S1DA0\xf1\x00TM ESC \x1e 102 \x08\x08 58910-S1DA0', - b'\xf1\x8758910-S2GA0\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0', - b'\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0', - b'\xf1\x00TM ESC \x04 101 \x08\x04 58910-S2GA0', - b'\xf1\x00TM ESC \x02 103"\x07\x08 58910-S2GA0', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M1_0a0_L50', - b'\xf1\x81HM6M1_0a0_H00', - b'\xf1\x82TACVN5GMI3XXXH0A', - b'\xf1\x82TMBZN5TMD3XXXG2E', - b'\xf1\x82TACVN5GSI3XXXH0A', - b'\xf1\x82TMCFD5MMCXXXXG0A', - b'\xf1\x81HM6M1_0a0_G20', - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82TMDWN5TMD3TXXJ1A', - b'\xf1\x81HM6M2_0a0_G00', - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M1_0a0_J10', - b'\xf1\x8739101-2STN8\xf1\x81HM6M1_0a0_M00', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00TM MDPS C 1.00 1.02 56370-S2AA0 0B19', - b'\xf1\x00TM MDPS C 1.00 1.01 56310-S1AB0 4TSDC101', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00TMA MFC AT MEX LHD 1.00 1.01 99211-S2500 210205', - b'\xf1\x00TMA MFC AT USA LHD 1.00 1.00 99211-S2500 200720', - b'\xf1\x00TM MFC AT EUR LHD 1.00 1.03 99211-S1500 210224', - b'\xf1\x00TMA MFC AT USA LHD 1.00 1.01 99211-S2500 210205', - b'\xf1\x00TMA MFC AT USA LHD 1.00 1.03 99211-S2500 220414', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00HT6WA280BLHT6WAD00A1STM2G25NH2\x00\x00\x00\x00\x00\x00\xf8\xc0\xc3\xaa', - b'\xf1\x00HT6WA280BLHT6WAD00A1STM4G25NH1\x00\x00\x00\x00\x00\x00\x9cl\x04\xbc', - b'\xf1\x00T02601BL T02900A1 VTMPT25XXX900NSA\xf3\xf4Uj', - b'\xf1\x87SDMXCA9087684GN1VfvgUUeVwwgwwwwwffffU?\xfb\xff\x97\x88\x7f\xff+\xa4\xf1\x89HT6WAD00A1\xf1\x82STM4G25NH1\x00\x00\x00\x00\x00\x00', - b'\xf1\x00T02601BL T02730A1 VTMPT25XXX730NS2\xa6\x06\x88\xf7', - b'\xf1\x87SDMXCA8653204GN1EVugEUuWwwwwww\x87wwwwwv/\xfb\xff\xa8\x88\x9f\xff\xa5\x9c\xf1\x89HT6WAD00A1\xf1\x82STM4G25NH1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 VTMPT25XXX730NS2\xa6\x06\x88\xf7', - b'\xf1\x87KMMYBU034207SB72x\x89\x88\x98h\x88\x98\x89\x87fhvvfWf33_\xff\x87\xff\x8f\xfa\x81\xe5\xf1\x89HT6TAF00A1\xf1\x82STM0M25GS1\x00\x00\x00\x00\x00\x00', - b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 VTMPT25XXX730NS2\xa6', - b'\xf1\x00HT6TA290BLHT6TAF00A1STM0M25GS1\x00\x00\x00\x00\x00\x006\xd8\x97\x15', - b'\xf1\x00T02601BL T02900A1 VTMPT25XXX900NS8\xb7\xaa\xfe\xfc', - b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02900A1 \xf1\x00T02601BL T02900A1 VTMPT25XXX900NS8\xb7\xaa\xfe\xfc', - b'\xf1\x00T02601BL T02800A1 VTMPT25XXX800NS4\xed\xaf\xed\xf5', - b'\xf1\x00T02601BL T02900A1 VTMPT25XXW900NS1c\x918\xc5', - ], - }, - CAR.SANTA_FE_HEV_2022: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00TMhe SCC FHCUP 1.00 1.00 99110-CL500 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLAC0 4TSHC102', - b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLEC0 4TSHC102', - b'\xf1\x00TM MDPS R 1.00 1.05 57700-CL000 4TSHP105', - b'\xf1\x00TM MDPS C 1.00 1.02 56310-GA000 4TSHA100', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00TMH MFC AT EUR LHD 1.00 1.06 99211-S1500 220727', - b'\xf1\x00TMH MFC AT USA LHD 1.00 1.03 99211-S1500 210224', - b'\xf1\x00TMH MFC AT USA LHD 1.00 1.06 99211-S1500 220727', - b'\xf1\x00TMA MFC AT USA LHD 1.00 1.03 99211-S2500 220414', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2H16SA3\xa3\x1b\xe14', - b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2H16UA3I\x94\xac\x8f', - b'\xf1\x87959102T250\x00\x00\x00\x00\x00\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E14\x00\x00\x00\x00\x00\x00\x00TTM2H16SA2\x80\xd7l\xb2', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x87391312MTC1', - b'\xf1\x87391312MTE0', - b'\xf1\x87391312MTL0', - ], - }, - CAR.SANTA_FE_PHEV_2022: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x8799110CL500\xf1\x00TMhe SCC FHCUP 1.00 1.00 99110-CL500 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLAC0 4TSHC102', - b'\xf1\x00TM MDPS C 1.00 1.02 56310-CLEC0 4TSHC102', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00TMP MFC AT USA LHD 1.00 1.03 99211-S1500 210224', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8795441-3D121\x00\xf1\x81E16\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2P16SA0o\x88^\xbe', - b'\xf1\x8795441-3D121\x00\xf1\x81E16\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TTM2P16SA1\x0b\xc5\x0f\xea', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x87391312MTF0', - ], - }, - CAR.KIA_STINGER: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5100 ', - b'\xf1\x00CK__ SCC F_CUP 1.00 1.03 96400-J5100 ', - b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5000 ', - b'\xf1\x00CK__ SCC F_CUP 1.00 1.02 96400-J5100 ', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81606DE051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81640E0051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x82CKJN3TMSDE0B\x00\x00\x00\x00', - b'\xf1\x82CKKN3TMD_H0A\x00\x00\x00\x00', - b'\xe0\x19\xff\xe7\xe7g\x01\xa2\x00\x0f\x00\x9e\x00\x06\x00\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x0f\x0e\x0f\x0f\x0e\r\x00\x00\x7f\x02.\xff\x00\x00~p\x00\x00\x00\x00u\xff\xf9\xff\x00\x00\x00\x00V\t\xd5\x01\xc0\x00\x00\x00\x007\xfb\xfc\x0b\x8d\x00', - b'\xf1\x81640H0051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00CK MDPS R 1.00 1.04 57700-J5200 4C2CL104', - b'\xf1\x00CK MDPS R 1.00 1.04 57700-J5220 4C2VL104', - b'\xf1\x00CK MDPS R 1.00 1.04 57700-J5420 4C4VL104', - b'\xf1\x00CK MDPS R 1.00 1.06 57700-J5420 4C4VL106', - b'\xf1\x00CK MDPS R 1.00 1.07 57700-J5220 4C2VL107', - b'\xf1\x00CK MDPS R 1.00 1.06 57700-J5220 4C2VL106', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CK MFC AT USA LHD 1.00 1.03 95740-J5000 170822', - b'\xf1\x00CK MFC AT USA LHD 1.00 1.04 95740-J5000 180504', - b'\xf1\x00CK MFC AT EUR LHD 1.00 1.03 95740-J5000 170822', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SCK0T33NB2\xb3\xee\xba\xdc', - b'\xf1\x87VCJLE17622572DK0vd6D\x99\x98y\x97vwVffUfvfC%CuT&Dx\x87o\xff{\x1c\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', - b'\xf1\x87VDHLG17000192DK2xdFffT\xa5VUD$DwT\x86wveVeeD&T\x99\xba\x8f\xff\xcc\x99\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', - b'\xf1\x87VDHLG17000192DK2xdFffT\xa5VUD$DwT\x86wveVeeD&T\x99\xba\x8f\xff\xcc\x99\xf1\x89E21\x00\x00\x00\x00\x00\x00\x00\xf1\x82SCK0T33NB0', - b'\xf1\x87VDHLG17034412DK2vD6DfVvVTD$D\x99w\x88\x98EDEDeT6DgfO\xff\xc3=\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', - b'\xf1\x87VDHLG17118862DK2\x8awWwgu\x96wVfUVwv\x97xWvfvUTGTx\x87o\xff\xc9\xed\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', - b'\xf1\x87VDKLJ18675252DK6\x89vhgwwwwveVU\x88w\x87w\x99vgf\x97vXfgw_\xff\xc2\xfb\xf1\x89E25\x00\x00\x00\x00\x00\x00\x00\xf1\x82TCK0T33NB2', - b'\xf1\x87WAJTE17552812CH4vfFffvfVeT5DwvvVVdFeegeg\x88\x88o\xff\x1a]\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00TCK2T20NB1\x19\xd2\x00\x94', - b'\xf1\x87VDHLG17274082DK2wfFf\x89x\x98wUT5T\x88v\x97xgeGefTGTVvO\xff\x1c\x14\xf1\x81E19\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E19\x00\x00\x00\x00\x00\x00\x00SCK0T33UB2\xee[\x97S', - b'\xf1\x87VDHLG17000192DK2xdFffT\xa5VUD$DwT\x86wveVeeD&T\x99\xba\x8f\xff\xcc\x99\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\t\xb7\x17\xf5', - b'\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\t\xb7\x17\xf5', - b'\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0', - ], - }, - CAR.KIA_STINGER_2022: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00CK__ SCC F-CUP 1.00 1.00 99110-J5500 ', - b'\xf1\x00CK__ SCC FHCUP 1.00 1.00 99110-J5500 ', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81640R0051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81HM6M1_0a0_H00', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5380 4C2VR503', - b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5300 4C2CL503', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CK MFC AT AUS RHD 1.00 1.00 99211-J5500 210622', - b'\xf1\x00CK MFC AT KOR LHD 1.00 1.00 99211-J5500 210622', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87VCNLF11383972DK1vffV\x99\x99\x89\x98\x86eUU\x88wg\x89vfff\x97fff\x99\x87o\xff"\xc1\xf1\x81E30\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E30\x00\x00\x00\x00\x00\x00\x00SCK0T33GH0\xbe`\xfb\xc6', - b'\xf1\x00bcsh8p54 E31\x00\x00\x00\x00\x00\x00\x00SCK0T25KH2B\xfbI\xe2', - ], - }, - CAR.PALISADE: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00LX2_ SCC F-CUP 1.00 1.04 99110-S8100 ', - b'\xf1\x00LX2_ SCC F-CUP 1.00 1.05 99110-S8100 ', - b'\xf1\x00LX2 SCC FHCUP 1.00 1.04 99110-S8100 ', - b'\xf1\x00LX2_ SCC FHCU- 1.00 1.05 99110-S8100 ', - b'\xf1\x00LX2_ SCC FHCUP 1.00 1.00 99110-S8110 ', - b'\xf1\x00LX2_ SCC FHCUP 1.00 1.04 99110-S8100 ', - b'\xf1\x00LX2_ SCC FHCUP 1.00 1.05 99110-S8100 ', - b'\xf1\x00ON__ FCA FHCUP 1.00 1.02 99110-S9100 ', - b'\xf1\x00ON__ FCA FHCUP 1.00 1.01 99110-S9110 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00LX ESC \x01 103\x19\t\x10 58910-S8360', - b'\xf1\x00LX ESC \x01 1031\t\x10 58910-S8360', - b'\xf1\x00LX ESC \x0b 101\x19\x03\x17 58910-S8330', - b'\xf1\x00LX ESC \x0b 102\x19\x05\x07 58910-S8330', - b'\xf1\x00LX ESC \x0b 103\x19\t\t 58910-S8350', - b'\xf1\x00LX ESC \x0b 103\x19\t\x07 58910-S8330', - b'\xf1\x00LX ESC \x0b 103\x19\t\x10 58910-S8360', - b'\xf1\x00LX ESC \x0b 104 \x10\x16 58910-S8360', - b'\xf1\x00ON ESC \x0b 100\x18\x12\x18 58910-S9360', - b'\xf1\x00ON ESC \x0b 101\x19\t\x08 58910-S9360', - b'\xf1\x00ON ESC \x0b 101\x19\t\x05 58910-S9320', - b'\xf1\x00ON ESC \x01 101\x19\t\x08 58910-S9360', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81640J0051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81640K0051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81640S1051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00LX2 MDPS C 1,00 1,03 56310-S8020 4LXDC103', - b'\xf1\x00LX2 MDPS C 1.00 1.03 56310-S8000 4LXDC103', - b'\xf1\x00LX2 MDPS C 1.00 1.03 56310-S8020 4LXDC103', - b'\xf1\x00LX2 MDPS C 1.00 1.04 56310-S8020 4LXDC104', - b'\xf1\x00ON MDPS C 1.00 1.00 56340-S9000 8B13', - b'\xf1\x00ON MDPS C 1.00 1.01 56340-S9000 9201', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.03 99211-S8100 190125', - b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.05 99211-S8100 190909', - b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.07 99211-S8100 200422', - b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.08 99211-S8100 200903', - b'\xf1\x00ON MFC AT USA LHD 1.00 1.01 99211-S9100 181105', - b'\xf1\x00ON MFC AT USA LHD 1.00 1.03 99211-S9100 200720', - b'\xf1\x00LX2 MFC AT USA LHD 1.00 1.00 99211-S8110 210226', - b'\xf1\x00ON MFC AT USA LHD 1.00 1.04 99211-S9100 211227', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00bcsh8p54 U872\x00\x00\x00\x00\x00\x00TON4G38NB1\x96z28', - b'\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', - b'\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00TON2G38NB5j\x94.\xde', - b'\xf1\x87LBLUFN591307KF25vgvw\x97wwwy\x99\xa7\x99\x99\xaa\xa9\x9af\x88\x96h\x95o\xf7\xff\x99f/\xff\xe4c\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB2\xd7\xc1/\xd1', - b'\xf1\x87LBLUFN650868KF36\xa9\x98\x89\x88\xa8\x88\x88\x88h\x99\xa6\x89fw\x86gw\x88\x97x\xaa\x7f\xf6\xff\xbb\xbb\x8f\xff+\x82\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8', - b'\xf1\x87LBLUFN655162KF36\x98\x88\x88\x88\x98\x88\x88\x88x\x99\xa7\x89x\x99\xa7\x89x\x99\x97\x89g\x7f\xf7\xffwU_\xff\xe9!\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8', - b'\xf1\x87LBLUFN731381KF36\xb9\x99\x89\x98\x98\x88\x88\x88\x89\x99\xa8\x99\x88\x99\xa8\x89\x88\x88\x98\x88V\x7f\xf6\xff\x99w\x8f\xff\xad\xd8\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8', - b'\xf1\x87LDKVAA0028604HH1\xa8\x88x\x87vgvw\x88\x99\xa8\x89gw\x86ww\x88\x97x\x97o\xf9\xff\x97w\x7f\xffo\x02\xf1\x81U872\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U872\x00\x00\x00\x00\x00\x00TON4G38NB1\x96z28', - b'\xf1\x87LDKVAA3068374HH1wwww\x87xw\x87y\x99\xa7\x99w\x88\x87xw\x88\x97x\x85\xaf\xfa\xffvU/\xffU\xdc\xf1\x81U872\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U872\x00\x00\x00\x00\x00\x00TON4G38NB1\x96z28', - b'\xf1\x87LDKVBN382172KF26\x98\x88\x88\x88\xa8\x88\x88\x88x\x99\xa7\x89\x87\x88\x98x\x98\x99\xa9\x89\xa5_\xf6\xffDDO\xff\xcd\x16\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', - b'\xf1\x87LDKVBN424201KF26\xba\xaa\x9a\xa9\x99\x99\x89\x98\x89\x99\xa8\x99\x88\x99\x98\x89\x88\x99\xa8\x89v\x7f\xf7\xffwf_\xffq\xa6\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', - b'\xf1\x87LDKVBN540766KF37\x87wgv\x87w\x87xx\x99\x97\x89v\x88\x97h\x88\x88\x88\x88x\x7f\xf6\xffvUo\xff\xd3\x01\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', - b'\xf1\x87LDLVAA4225634HH1\x98\x88\x88\x88eUeVx\x88\x87\x88g\x88\x86xx\x88\x87\x88\x86o\xf9\xff\x87w\x7f\xff\xf2\xf7\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', - b'\xf1\x87LDLVAA4777834HH1\x98\x88x\x87\x87wwwx\x88\x87\x88x\x99\x97\x89x\x88\x97\x88\x86o\xfa\xff\x86fO\xff\x1d9\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', - b'\xf1\x87LDLVAA5194534HH1ffvguUUUx\x88\xa7\x88h\x99\x96\x89x\x88\x97\x88ro\xf9\xff\x98wo\xff\xaaM\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', - b'\xf1\x87LDLVAA5949924HH1\xa9\x99y\x97\x87wwwx\x99\x97\x89x\x99\xa7\x89x\x99\xa7\x89\x87_\xfa\xffeD?\xff\xf1\xfd\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', - b'\xf1\x87LDLVBN560098KF26\x86fff\x87vgfg\x88\x96xfw\x86gfw\x86g\x95\xf6\xffeU_\xff\x92c\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB2\xafL]\xe7', - b'\xf1\x87LDLVBN602045KF26\xb9\x99\x89\x98\x97vwgy\xaa\xb7\x9af\x88\x96hw\x99\xa7y\xa9\x7f\xf5\xff\x99w\x7f\xff,\xd3\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN628911KF26\xa9\x99\x89\x98\x98\x88\x88\x88y\x99\xa7\x99fw\x86gw\x88\x87x\x83\x7f\xf6\xff\x98wo\xff2\xda\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN645817KF37\x87www\x98\x87xwx\x99\x97\x89\x99\x99\x99\x99g\x88\x96x\xb6_\xf7\xff\x98fo\xff\xe2\x86\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN662115KF37\x98\x88\x88\x88\xa8\x88\x88\x88x\x99\x97\x89x\x99\xa7\x89\x88\x99\xa8\x89\x88\x7f\xf7\xfffD_\xff\xdc\x84\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN667933KF37\xb9\x99\x89\x98\xb9\x99\x99\x99x\x88\x87\x88w\x88\x87x\x88\x88\x98\x88\xcbo\xf7\xffe3/\xffQ!\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN673087KF37\x97www\x86fvgx\x99\x97\x89\x99\xaa\xa9\x9ag\x88\x86x\xe9_\xf8\xff\x98w\x7f\xff"\xad\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN673841KF37\x98\x88x\x87\x86g\x86xy\x99\xa7\x99\x88\x99\xa8\x89w\x88\x97xdo\xf5\xff\x98\x88\x8f\xffT\xec\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN681363KF37\x98\x88\x88\x88\x97x\x87\x88y\xaa\xa7\x9a\x88\x88\x98\x88\x88\x88\x88\x88vo\xf6\xffvD\x7f\xff%v\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN713782KF37\x99\x99y\x97\x98\x88\x88\x88x\x88\x97\x88\x88\x99\x98\x89\x88\x99\xa8\x89\x87o\xf7\xffeU?\xff7,\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN713890KF26\xb9\x99\x89\x98\xa9\x99\x99\x99x\x99\x97\x89\x88\x99\xa8\x89\x88\x99\xb8\x89Do\xf7\xff\xa9\x88o\xffs\r\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN733215KF37\x99\x98y\x87\x97wwwi\x99\xa6\x99x\x99\xa7\x89V\x88\x95h\x86o\xf7\xffeDO\xff\x12\xe7\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN750044KF37\xca\xa9\x8a\x98\xa7wwwy\xaa\xb7\x9ag\x88\x96x\x88\x99\xa8\x89\xb9\x7f\xf6\xff\xa8w\x7f\xff\xbe\xde\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN752612KF37\xba\xaa\x8a\xa8\x87w\x87xy\xaa\xa7\x9a\x88\x99\x98\x89x\x88\x97\x88\x96o\xf6\xffvU_\xffh\x1b\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN755553KF37\x87xw\x87\x97w\x87xy\x99\xa7\x99\x99\x99\xa9\x99Vw\x95gwo\xf6\xffwUO\xff\xb5T\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX4G38NB3X\xa8\xc08', - b'\xf1\x87LDLVBN757883KF37\x98\x87xw\x98\x87\x88xy\xaa\xb7\x9ag\x88\x96x\x89\x99\xa8\x99e\x7f\xf6\xff\xa9\x88o\xff5\x15\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', - b'\xf1\x87LDMVBN778156KF37\x87vWe\xa9\x99\x99\x99y\x99\xb7\x99\x99\x99\x99\x99x\x99\x97\x89\xa8\x7f\xf8\xffwf\x7f\xff\x82_\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', - b'\xf1\x87LDMVBN780576KF37\x98\x87hv\x97x\x97\x89x\x99\xa7\x89\x88\x99\x98\x89w\x88\x97x\x98\x7f\xf7\xff\xba\x88\x8f\xff\x1e0\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', - b'\xf1\x87LDMVBN783485KF37\x87www\x87vwgy\x99\xa7\x99\x99\x99\xa9\x99Vw\x95g\x89_\xf6\xff\xa9w_\xff\xc5\xd6\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', - b'\xf1\x87LDMVBN811844KF37\x87vwgvfffx\x99\xa7\x89Vw\x95gg\x88\xa6xe\x8f\xf6\xff\x97wO\xff\t\x80\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', - b'\xf1\x87LDMVBN830601KF37\xa7www\xa8\x87xwx\x99\xa7\x89Uw\x85Ww\x88\x97x\x88o\xf6\xff\x8a\xaa\x7f\xff\xe2:\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB4\xd6\xe8\xd7\xa6', - b'\xf1\x87LDMVBN848789KF37\x87w\x87x\x87w\x87xy\x99\xb7\x99\x87\x88\x98x\x88\x99\xa8\x89\x87\x7f\xf6\xfffUo\xff\xe3!\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN851595KF37\x97wgvvfffx\x99\xb7\x89\x88\x99\x98\x89\x87\x88\x98x\x99\x7f\xf7\xff\x97w\x7f\xff@\xf3\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN873175KF26\xa8\x88\x88\x88vfVex\x99\xb7\x89\x88\x99\x98\x89x\x88\x97\x88f\x7f\xf7\xff\xbb\xaa\x8f\xff,\x04\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN879401KF26veVU\xa8\x88\x88\x88g\x88\xa6xVw\x95gx\x88\xa7\x88v\x8f\xf9\xff\xdd\xbb\xbf\xff\xb3\x99\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN881314KF37\xa8\x88h\x86\x97www\x89\x99\xa8\x99w\x88\x97xx\x99\xa7\x89\xca\x7f\xf8\xff\xba\x99\x8f\xff\xd8v\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN888651KF37\xa9\x99\x89\x98vfff\x88\x99\x98\x89w\x99\xa7y\x88\x88\x98\x88D\x8f\xf9\xff\xcb\x99\x8f\xff\xa5\x1e\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN889419KF37\xa9\x99y\x97\x87w\x87xx\x88\x97\x88w\x88\x97x\x88\x99\x98\x89e\x9f\xf9\xffeUo\xff\x901\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN895969KF37vefV\x87vgfx\x99\xa7\x89\x99\x99\xb9\x99f\x88\x96he_\xf7\xffxwo\xff\x14\xf9\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDMVBN899222KF37\xa8\x88x\x87\x97www\x98\x99\x99\x89\x88\x99\x98\x89f\x88\x96hdo\xf7\xff\xbb\xaa\x9f\xff\xe2U\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b"\xf1\x87LBLUFN622950KF36\xa8\x88\x88\x88\x87w\x87xh\x99\x96\x89\x88\x99\x98\x89\x88\x99\x98\x89\x87o\xf6\xff\x98\x88o\xffx'\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8", - b'\xf1\x87LDMVBN950669KF37\x97www\x96fffy\x99\xa7\x99\xa9\x99\xaa\x99g\x88\x96x\xb8\x8f\xf9\xffTD/\xff\xa7\xcb\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - b'\xf1\x87LDLVAA4478824HH1\x87wwwvfvg\x89\x99\xa8\x99w\x88\x87x\x89\x99\xa8\x99\xa6o\xfa\xfffU/\xffu\x92\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6', - b'\xf1\x87LDMVBN871852KF37\xb9\x99\x99\x99\xa8\x88\x88\x88y\x99\xa7\x99x\x99\xa7\x89\x88\x88\x98\x88\x89o\xf7\xff\xaa\x88o\xff\x0e\xed\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89', - ], - }, - CAR.VELOSTER: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JS__ SCC H-CUP 1.00 1.02 95650-J3200 ', - b'\xf1\x00JS__ SCC HNCUP 1.00 1.02 95650-J3100 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x816V8RAC00121.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x01TJS-JNU06F200H0A', - b'\x01TJS-JDK06F200H0A', - b'391282BJF5 ', - ], - (Ecu.eps, 0x7d4, None): [b'\xf1\x00JSL MDPS C 1.00 1.03 56340-J3000 8308', ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00JS LKAS AT USA LHD 1.00 1.02 95740-J3000 K32', - b'\xf1\x00JS LKAS AT KOR LHD 1.00 1.03 95740-J3000 K33', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJS0T16NS1\xba\x02\xb8\x80', - b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJS0T16NS1\x00\x00\x00\x00', - b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJS0T16KS2\016\xba\036\xa2', - ], - }, - CAR.GENESIS_G70: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00IK__ SCC F-CUP 1.00 1.02 96400-G9100 ', - b'\xf1\x00IK__ SCC F-CUP 1.00 1.01 96400-G9100 ', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81640F0051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00IK MDPS R 1.00 1.06 57700-G9420 4I4VL106', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00IK MFC AT USA LHD 1.00 1.01 95740-G9000 170920', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB2\x11\x1am\xda', - b'\xf1\x87VDJLT17895112DN4\x88fVf\x99\x88\x88\x88\x87fVe\x88vhwwUFU\x97eFex\x99\xff\xb7\x82\xf1\x81E25\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB2\x11\x1am\xda', - ], - }, - CAR.GENESIS_G70_2020: { - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00IK MDPS R 1.00 1.07 57700-G9220 4I2VL107', - b'\xf1\x00IK MDPS R 1.00 1.07 57700-G9420 4I4VL107', - b'\xf1\x00IK MDPS R 1.00 1.08 57700-G9420 4I4VL108', - b'\xf1\x00IK MDPS R 1.00 1.08 57700-G9200 4I2CL108', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87VCJLP18407832DN3\x88vXfvUVT\x97eFU\x87d7v\x88eVeveFU\x89\x98\x7f\xff\xb2\xb0\xf1\x81E25\x00\x00\x00', - b'\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB4\xecE\xefL', - b'\xf1\x87VDKLT18912362DN4wfVfwefeveVUwfvw\x88vWfvUFU\x89\xa9\x8f\xff\x87w\xf1\x81E25\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33NB4\xecE\xefL', - b'\xf1\x87VDJLC18480772DK9\x88eHfwfff\x87eFUeDEU\x98eFe\x86T5DVyo\xff\x87s\xf1\x81E25\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T33KB5\x9f\xa5&\x81', - b'\xf1\x00bcsh8p54 E25\x00\x00\x00\x00\x00\x00\x00SIK0T20KB3Wuvz', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00IK__ SCC F-CUP 1.00 1.02 96400-G9100 ', - b'\xf1\x00IK__ SCC F-CUP 1.00 1.02 96400-G9100 \xf1\xa01.02', - b'\xf1\x00IK__ SCC FHCUP 1.00 1.02 96400-G9000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00IK MFC AT USA LHD 1.00 1.01 95740-G9000 170920', - b'\xf1\x00IK MFC AT KOR LHD 1.00 1.01 95740-G9000 170920', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81640J0051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81640H0051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81606G2051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.GENESIS_G70_2021_NON_SCC: { - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00IK MDPS R 1.00 1.08 57700-G9200 4I2CL108', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00IK__ SCC --CUP 1.00 1.02 96400-G9100 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00IK MFC MT USA LHD 1.00 1.01 95740-G9000 170920', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81606G2051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.GENESIS_G80: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00DH__ SCC F-CUP 1.00 1.01 96400-B1120 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00DH LKAS AT USA LHD 1.01 1.03 95895-B1500 180713', - b'\xf1\x00DH LKAS AT USA LHD 1.01 1.02 95895-B1500 170810', - b'\xf1\x00DH LKAS AT USA LHD 1.01 1.01 95895-B1500 161014', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SDH0T33NH4\xd7O\x9e\xc9', - b'\xf1\x00bcsh8p54 E18\x00\x00\x00\x00\x00\x00\x00TDH0G38NH3:-\xa9n', - b'\xf1\x00bcsh8p54 E18\x00\x00\x00\x00\x00\x00\x00SDH0G38NH2j\x9dA\x1c', - b'\xf1\x00bcsh8p54 E18\x00\x00\x00\x00\x00\x00\x00SDH0T33NH3\x97\xe6\xbc\xb8', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81640F0051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.GENESIS_G90: { - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87VDGMD15352242DD3w\x87gxwvgv\x87wvw\x88wXwffVfffUfw\x88o\xff\x06J\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcshcm49 E14\x00\x00\x00\x00\x00\x00\x00SHI0G50NB1tc5\xb7', - b'\xf1\x87VDGMD15866192DD3x\x88x\x89wuFvvfUf\x88vWwgwwwvfVgx\x87o\xff\xbc^\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcshcm49 E14\x00\x00\x00\x00\x00\x00\x00SHI0G50NB1tc5\xb7', - ], - (Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00HI__ SCC F-CUP 1.00 1.01 96400-D2100 '], - (Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00HI LKAS AT USA LHD 1.00 1.00 95895-D2020 160302'], - (Ecu.engine, 0x7e0, None): [b'\xf1\x810000000000\x00'], - }, - CAR.KONA: { - (Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x00OS__ SCC F-CUP 1.00 1.00 95655-J9200 ', ], - (Ecu.abs, 0x7d1, None): [b'\xf1\x816V5RAK00018.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', ], - (Ecu.engine, 0x7e0, None): [b'"\x01TOS-0NU06F301J02', ], - (Ecu.eps, 0x7d4, None): [b'\xf1\x00OS MDPS C 1.00 1.05 56310J9030\x00 4OSDC105', ], - (Ecu.fwdCamera, 0x7c4, None): [b'\xf1\x00OS9 LKAS AT USA LHD 1.00 1.00 95740-J9300 g21', ], - (Ecu.transmission, 0x7e1, None): [b'\xf1\x816U2VE051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VE051\x00\x00DOS4T16NS3\x00\x00\x00\x00', ], - }, - CAR.KIA_CEED: { - (Ecu.fwdRadar, 0x7D0, None): [b'\xf1\000CD__ SCC F-CUP 1.00 1.02 99110-J7000 ', ], - (Ecu.eps, 0x7D4, None): [b'\xf1\000CD MDPS C 1.00 1.06 56310-XX000 4CDEC106', ], - (Ecu.fwdCamera, 0x7C4, None): [b'\xf1\000CD LKAS AT EUR LHD 1.00 1.01 99211-J7000 B40', ], - (Ecu.engine, 0x7E0, None): [b'\001TCD-JECU4F202H0K', ], - (Ecu.transmission, 0x7E1, None): [ - b'\xf1\x816U2V7051\000\000\xf1\0006U2V0_C2\000\0006U2V7051\000\000DCD0T14US1\000\000\000\000', - b'\xf1\x816U2V7051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V7051\x00\x00DCD0T14US1U\x867Z', - ], - (Ecu.abs, 0x7D1, None): [b'\xf1\000CD ESC \003 102\030\b\005 58920-J7350', ], - }, - CAR.KIA_FORTE: { - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00BD MDPS C 1.00 1.02 56310-XX000 4BD2C102', - b'\xf1\x00BD MDPS C 1.00 1.08 56310/M6300 4BDDC108', - b'\xf1\x00BD MDPS C 1.00 1.08 56310M6300\x00 4BDDC108', - b'\xf1\x00BDm MDPS C A.01 1.03 56310M7800\x00 4BPMC103', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00BD LKAS AT USA LHD 1.00 1.04 95740-M6000 J33', - b'\xf1\x00BDP LKAS AT USA LHD 1.00 1.05 99211-M6500 744', - ], - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\x00BD__ SCC H-CUP 1.00 1.02 99110-M6000 ', - b'\xf1\x00BDPE_SCC FHCUPC 1.00 1.04 99110-M6500\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x01TBDM1NU06F200H01', - b'391182B945\x00', - b'\xf1\x81616F2051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x816VGRAH00018.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x8758900-M7AB0 \xf1\x816VQRAD00127.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x006V2B0_C2\x00\x006V2C6051\x00\x00CBD0N20NL1\x00\x00\x00\x00', - b'\xf1\x816U2VC051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DBD0T16SS0\x00\x00\x00\x00', - b"\xf1\x816U2VC051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DBD0T16SS0\xcf\x1e'\xc3", - ], - }, - CAR.KIA_K5_2021: { - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\000DL3_ SCC FHCUP 1.00 1.03 99110-L2000 ', - b'\xf1\x8799110L2000\xf1\000DL3_ SCC FHCUP 1.00 1.03 99110-L2000 ', - b'\xf1\x8799110L2100\xf1\x00DL3_ SCC F-CUP 1.00 1.03 99110-L2100 ', - b'\xf1\x8799110L2100\xf1\x00DL3_ SCC FHCUP 1.00 1.03 99110-L2100 ', - b'\xf1\x00DL3_ SCC F-CUP 1.00 1.03 99110-L2100 ', - ], - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x8756310-L3110\xf1\000DL3 MDPS C 1.00 1.01 56310-L3110 4DLAC101', - b'\xf1\x8756310-L3220\xf1\x00DL3 MDPS C 1.00 1.01 56310-L3220 4DLAC101', - b'\xf1\x8757700-L3000\xf1\x00DL3 MDPS R 1.00 1.02 57700-L3000 4DLAP102', - b'\xf1\x00DL3 MDPS C 1.00 1.01 56310-L3220 4DLAC101', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00DL3 MFC AT USA LHD 1.00 1.03 99210-L3000 200915', - b'\xf1\x00DL3 MFC AT USA LHD 1.00 1.04 99210-L3000 210208', - ], - (Ecu.abs, 0x7D1, None): [ - b'\xf1\000DL ESC \006 101 \004\002 58910-L3200', - b'\xf1\x8758910-L3200\xf1\000DL ESC \006 101 \004\002 58910-L3200', - b'\xf1\x8758910-L3800\xf1\x00DL ESC \t 101 \x07\x02 58910-L3800', - b'\xf1\x8758910-L3600\xf1\x00DL ESC \x03 100 \x08\x02 58910-L3600', - b'\xf1\x00DL ESC \t 100 \x06\x02 58910-L3800', - ], - (Ecu.engine, 0x7E0, None): [ - b'\xf1\x87391212MKT0', - b'\xf1\x87391212MKV0', - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82DLDWN5TMDCXXXJ1B', - ], - (Ecu.transmission, 0x7E1, None): [ - b'\xf1\000bcsh8p54 U913\000\000\000\000\000\000TDL2T16NB1ia\v\xb8', - b'\xf1\x87SALFEA5652514GK2UUeV\x88\x87\x88xxwg\x87ww\x87wwfwvd/\xfb\xffvU_\xff\x93\xd3\xf1\x81U913\000\000\000\000\000\000\xf1\000bcsh8p54 U913\000\000\000\000\000\000TDL2T16NB1ia\v\xb8', - b'\xf1\x87SALFEA6046104GK2wvwgeTeFg\x88\x96xwwwwffvfe?\xfd\xff\x86fo\xff\x97A\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL2T16NB1ia\x0b\xb8', - b'\xf1\x87SCMSAA8572454GK1\x87x\x87\x88Vf\x86hgwvwvwwgvwwgT?\xfb\xff\x97fo\xffH\xb8\xf1\x81U913\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL4T16NB05\x94t\x18', - b'\xf1\x87954A02N300\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 WDL3T25XXX730NS2b\x1f\xb8%', - b'\xf1\x00bcsh8p54 U913\x00\x00\x00\x00\x00\x00TDL4T16NB05\x94t\x18', - ], - }, - CAR.KIA_FORTE_2019_NON_SCC: { - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00BD MDPS C 1.00 1.04 56310/M6000 4BDDC104', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00BD LKAS AT USA LHD 1.00 1.02 95740-M6000 J31', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81616B5051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x816VFRAF00018.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87CXJQAM4966515JB0x\xa9\x98\x9b\x99fff\x98feg\x88\x88w\x88Ff\x8f\xff{\xff\xff\xff\xa8\xf6\xf1\x816V2C1051\x00\x00\xf1\x006V2B0_C2\x00\x006V2C1051\x00\x00CBD0N20NS8q\xc1&\xd2', - ], - }, - CAR.KIA_FORTE_2021_NON_SCC: { - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00BD MDPS C 1.00 1.08 56310M6000\x00 4BDDC108', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00BD LKAS AT USA LHD 1.00 1.04 95740-M6000 J33', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81616B6051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x816VFRAL00010.ELF\xf1\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87CXLQAM0906975JB0\x89\x88\xa6\x8aVfug\xba\x87\x94yffuxgfo\xff\x8b\xff\xff\xff\x91\x82\xf1\x816V2C1051\x00\x00\xf1\x006V2B0_C2\x00\x006V2C1051\x00\x00CBD0N20NS8q\xc1&\xd2', - ], - }, - CAR.KIA_K5_HEV_2020: { - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\x00DLhe SCC FHCUP 1.00 1.02 99110-L7000 ', - ], - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00DL3 MDPS C 1.00 1.02 56310-L7000 4DLHC102', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.02 99210-L2000 200309', - ], - (Ecu.engine, 0x7E0, None): [ - b'\xf1\x87391162JLA0', - ], - (Ecu.transmission, 0x7E1, None): [ - b'\xf1\x00PSBG2323 E08\x00\x00\x00\x00\x00\x00\x00TDL2H20KA2\xe3\xc6cz', - ], - }, - CAR.KONA_EV: { - (Ecu.abs, 0x7D1, None): [ - b'\xf1\x00OS IEB \r 105\x18\t\x18 58520-K4000', - b'\xf1\x00OS IEB \x01 212 \x11\x13 58520-K4000', - b'\xf1\x00OS IEB \x02 212 \x11\x13 58520-K4000', - b'\xf1\x00OS IEB \x03 210 \x02\x14 58520-K4000', - b'\xf1\x00OS IEB \x03 212 \x11\x13 58520-K4000', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00OE2 LKAS AT EUR LHD 1.00 1.00 95740-K4200 200', - b'\xf1\x00OSE LKAS AT EUR LHD 1.00 1.00 95740-K4100 W40', - b'\xf1\x00OSE LKAS AT EUR RHD 1.00 1.00 95740-K4100 W40', - b'\xf1\x00OSE LKAS AT KOR LHD 1.00 1.00 95740-K4100 W40', - b'\xf1\x00OSE LKAS AT USA LHD 1.00 1.00 95740-K4300 W50', - ], - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00OS MDPS C 1.00 1.03 56310/K4550 4OEDC103', - b'\xf1\x00OS MDPS C 1.00 1.04 56310K4000\x00 4OEDC104', - b'\xf1\x00OS MDPS C 1.00 1.04 56310K4050\x00 4OEDC104', - ], - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\x00OSev SCC F-CUP 1.00 1.00 99110-K4000 ', - b'\xf1\x00OSev SCC F-CUP 1.00 1.00 99110-K4100 ', - b'\xf1\x00OSev SCC F-CUP 1.00 1.01 99110-K4000 ', - b'\xf1\x00OSev SCC FNCUP 1.00 1.01 99110-K4000 ', - ], - }, - CAR.KONA_EV_2022: { - (Ecu.abs, 0x7D1, None): [ - b'\xf1\x8758520-K4010\xf1\x00OS IEB \x02 101 \x11\x13 58520-K4010', - b'\xf1\x8758520-K4010\xf1\x00OS IEB \x04 101 \x11\x13 58520-K4010', - b'\xf1\x8758520-K4010\xf1\x00OS IEB \x03 101 \x11\x13 58520-K4010', - b'\xf1\x00OS IEB \r 102"\x05\x16 58520-K4010', - b'\xf1\x00OS IEB \x02 102"\x05\x16 58520-K4010', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00OSP LKA AT CND LHD 1.00 1.02 99211-J9110 802', - b'\xf1\x00OSP LKA AT EUR RHD 1.00 1.02 99211-J9110 802', - b'\xf1\x00OSP LKA AT AUS RHD 1.00 1.04 99211-J9200 904', - b'\xf1\x00OSP LKA AT EUR LHD 1.00 1.04 99211-J9200 904', - b'\xf1\x00OSP LKA AT EUR RHD 1.00 1.04 99211-J9200 904', - b'\xf1\x00OSP LKA AT USA LHD 1.00 1.04 99211-J9200 904', - ], - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4260\x00 4OEPC102', - b'\xf1\x00OSP MDPS C 1.00 1.02 56310/K4970 4OEPC102', - b'\xf1\x00OSP MDPS C 1.00 1.02 56310/K4271 4OEPC102', - b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4971\x00 4OEPC102', - b'\xf1\x00OSP MDPS C 1.00 1.02 56310K4261\x00 4OEPC102', - ], - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\x00YB__ FCA ----- 1.00 1.01 99110-K4500 \x00\x00\x00', - ], - }, - CAR.KONA_EV_2ND_GEN: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00SXev RDR ----- 1.00 1.00 99110-BF000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00SX2EMFC AT KOR LHD 1.00 1.00 99211-BF000 230410', - ], - }, - CAR.KIA_NIRO_EV: { - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4000 ', - b'\xf1\x00DEev SCC F-CUP 1.00 1.02 96400-Q4000 ', - b'\xf1\x00DEev SCC F-CUP 1.00 1.02 96400-Q4100 ', - b'\xf1\x00DEev SCC F-CUP 1.00 1.03 96400-Q4100 ', - b'\xf1\x00DEev SCC FHCUP 1.00 1.03 96400-Q4000 ', - b'\xf1\x8799110Q4000\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4000 ', - b'\xf1\x8799110Q4100\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4100 ', - b'\xf1\x8799110Q4500\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4500 ', - b'\xf1\x8799110Q4600\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4600 ', - b'\xf1\x8799110Q4600\xf1\x00DEev SCC FNCUP 1.00 1.00 99110-Q4600 ', - b'\xf1\x8799110Q4600\xf1\x00DEev SCC FHCUP 1.00 1.00 99110-Q4600 ', - ], - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4000\x00 4DEEC105', - b'\xf1\x00DE MDPS C 1.00 1.05 56310Q4100\x00 4DEEC105', - b'\xf1\x00DE MDPS C 1.00 1.04 56310Q4100\x00 4DEEC104', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.00 99211-Q4100 200706', - b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.00 99211-Q4000 191211', - b'\xf1\x00DEE MFC AT USA LHD 1.00 1.00 99211-Q4000 191211', - b'\xf1\x00DEE MFC AT USA LHD 1.00 1.03 95740-Q4000 180821', - b'\xf1\x00DEE MFC AT USA LHD 1.00 1.01 99211-Q4500 210428', - b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.03 95740-Q4000 180821', - b'\xf1\x00DEE MFC AT KOR LHD 1.00 1.03 95740-Q4000 180821', - ], - }, - CAR.KIA_NIRO_EV_2ND_GEN: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00SG2_ RDR ----- 1.00 1.01 99110-AT000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00SG2EMFC AT EUR LHD 1.01 1.09 99211-AT000 220801', - b'\xf1\x00SG2EMFC AT USA LHD 1.01 1.09 99211-AT000 220801', - ], - }, - CAR.KIA_NIRO_PHEV: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6F4051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x816H6D1051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b"\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PDE0G16NS2\xf4'\\\x91", - b'\xf1\x816U3J2051\x00\x00\xf1\x006U3H0_C2\x00\x006U3J2051\x00\x00PDE0G16NS2\x00\x00\x00\x00', - b'\xf1\x816U3H3051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H3051\x00\x00PDE0G16NS1\x00\x00\x00\x00', - b'\xf1\x816U3H3051\x00\x00\xf1\x006U3H0_C2\x00\x006U3H3051\x00\x00PDE0G16NS1\x13\xcd\x88\x92', - b'\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00PDE0G16NL2&[\xc3\x01', - ], - (Ecu.eps, 0x7D4, None): [ - b'\xf1\x00DE MDPS C 1.00 1.09 56310G5301\x00 4DEHC109', - b'\xf1\x00DE MDPS C 1.00 1.01 56310G5520\x00 4DEPC101', - ], - (Ecu.fwdCamera, 0x7C4, None): [ - b'\xf1\x00DEP MFC AT USA LHD 1.00 1.01 95740-G5010 170424', - b'\xf1\x00DEP MFC AT USA LHD 1.00 1.00 95740-G5010 170117', - b'\xf1\x00DEP MFC AT USA LHD 1.00 1.05 99211-G5000 190826', - ], - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\x00DEhe SCC H-CUP 1.01 1.02 96400-G5100 ', - b'\xf1\x00DEhe SCC F-CUP 1.00 1.02 99110-G5100 ', - ], - }, - CAR.KIA_NIRO_HEV_2021: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HDE0G16NL3\x00\x00\x00\x00', - b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HDE0G16NL3\xb9\xd3\xfaW', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00DE MDPS C 1.00 1.01 56310G5520\x00 4DEPC101', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00DEH MFC AT USA LHD 1.00 1.07 99211-G5000 201221', - b'\xf1\x00DEH MFC AT USA LHD 1.00 1.00 99211-G5500 210428', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00DEhe SCC FHCUP 1.00 1.00 99110-G5600 ', - ], - }, - CAR.KIA_SELTOS: { - (Ecu.fwdRadar, 0x7d0, None): [b'\xf1\x8799110Q5100\xf1\000SP2_ SCC FHCUP 1.01 1.05 99110-Q5100 ',], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x8758910-Q5450\xf1\000SP ESC \a 101\031\t\005 58910-Q5450', - b'\xf1\x8758910-Q5450\xf1\000SP ESC \t 101\031\t\005 58910-Q5450', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81616D2051\000\000\000\000\000\000\000\000', - b'\xf1\x81616D5051\000\000\000\000\000\000\000\000', - b'\001TSP2KNL06F100J0K', - b'\001TSP2KNL06F200J0K', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\000SP2 MDPS C 1.00 1.04 56300Q5200 ', - b'\xf1\000SP2 MDPS C 1.01 1.05 56300Q5200 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\000SP2 MFC AT USA LHD 1.00 1.04 99210-Q5000 191114', - b'\xf1\000SP2 MFC AT USA LHD 1.00 1.05 99210-Q5000 201012', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87CZLUB49370612JF7h\xa8y\x87\x99\xa7hv\x99\x97fv\x88\x87x\x89x\x96O\xff\x88\xff\xff\xff.@\xf1\x816V2C2051\000\000\xf1\0006V2B0_C2\000\0006V2C2051\000\000CSP4N20NS3\000\000\000\000', - b'\xf1\x87954A22D200\xf1\x81T01950A1 \xf1\000T0190XBL T01950A1 DSP2T16X4X950NS6\xd30\xa5\xb9', - b'\xf1\x87954A22D200\xf1\x81T01950A1 \xf1\000T0190XBL T01950A1 DSP2T16X4X950NS8\r\xfe\x9c\x8b', - ], - }, - CAR.KIA_SELTOS_2023_NON_SCC: { - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00SP ESC \t 101"\t\x01 58910-Q5510', - b'\xf1\x00SP ESC \r 100"\x04\x01 58910-Q5510', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81616K0051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x81616G2051\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00SP2 MDPS C 1.00 1.04 56310Q5240 4SPSC104', - b'\xf1\x00SP2 MDPS C 1.00 1.01 56300Q5920 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00SP2 MFC AT USA LHD 1.00 1.03 99210-Q5500 230208', - b'\xf1\x00SP2 MFC AT AUS RHD 1.00 1.02 99210-Q5500 220624', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x006V2B0_C2\x00\x006V2D5051\x00\x00CSP2N20NL0\x00\x00\x00\x00', - b'\xf1\x006V2B0_C2\x00\x006V2D4051\x00\x00CSP2N20KL1\x00\x00\x00\x00', - ], - }, - CAR.KIA_OPTIMA_G4: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4100 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00JF ESC \x0f 16 \x16\x06\x17 58920-D5080', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00JFWGN LDWS AT USA LHD 1.00 1.02 95895-D4100 G21', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6J0051\x00\x00\xf1\x006T6J0_C2\x00\x006T6J0051\x00\x00TJF0T20NSB\x00\x00\x00\x00', - ], - }, - CAR.KIA_OPTIMA_G4_FL: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JF__ SCC F-CUP 1.00 1.00 96400-D4110 ', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00JF ESC \x0b 11 \x18\x030 58920-D5180', - b"\xf1\x00JF ESC \t 11 \x18\x03' 58920-D5260", - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5001 h32', - b'\xf1\x00JFA LKAS AT USA LHD 1.00 1.00 95895-D5100 h32', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJF0T16NL0\t\xd2GW', - b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\xca3\xeb.', - b'\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DJF0T16NL2\x9eA\x80\x01', - b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\x00\x00\x00\x00', - b'\xf1\x816U2V8051\x00\x00\xf1\x006U2V0_C2\x00\x006U2V8051\x00\x00DJF0T16NL0\t\xd2GW', - b'\xf1\x816U2VA051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\xca3\xeb.', - b'\xf1\x816U2VC051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VC051\x00\x00DJF0T16NL2\x9eA\x80\x01', - b'\xf1\x816U2VA051\x00\x00\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DJF0T16NL1\x00\x00\x00\x00', - b'\xf1\x87\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf1\x816T6B8051\x00\x00\xf1\x006T6H0_C2\x00\x006T6B8051\x00\x00TJFSG24NH27\xa7\xc2\xb4', - ], - }, - CAR.KIA_OPTIMA_H: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JFhe SCC FNCUP 1.00 1.00 96400-A8000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00JFP LKAS AT EUR LHD 1.00 1.03 95895-A8100 160711', - ], - }, - CAR.ELANTRA: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00PD LKAS AT USA LHD 1.01 1.01 95740-G3100 A54', - b'\xf1\x00PD LKAS AT KOR LHD 1.00 1.02 95740-G3000 A51', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x006U2V0_C2\x00\x006U2VA051\x00\x00DPD0H16NS0e\x0e\xcd\x8e', - b'\xf1\x006U2U0_C2\x00\x006U2T0051\x00\x00DPD0D16KS0u\xce\x1fk', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00PD MDPS C 1.00 1.04 56310/G3300 4PDDC104', - b'\xf1\x00PD MDPS C 1.00 1.00 56310G3300\x00 4PDDC100', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00PD ESC \x0b 104\x18\t\x03 58920-G3350', - b'\xf1\x00PD ESC \t 104\x18\t\x03 58920-G3350', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00PD__ SCC F-CUP 1.00 1.00 96400-G3300 ', - b'\xf1\x00PD__ SCC FNCUP 1.01 1.00 96400-G3000 ', - ], - }, - CAR.ELANTRA_2021: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00CN7_ SCC F-CUP 1.00 1.01 99110-AA000 ', - b'\xf1\x00CN7_ SCC FHCUP 1.00 1.01 99110-AA000 ', - b'\xf1\x00CN7_ SCC FNCUP 1.00 1.01 99110-AA000 ', - b'\xf1\x8799110AA000\xf1\x00CN7_ SCC FHCUP 1.00 1.01 99110-AA000 ', - b'\xf1\x8799110AA000\xf1\x00CN7_ SCC F-CUP 1.00 1.01 99110-AA000 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00CN7 MDPS C 1.00 1.06 56310AA050\x00 4CNDC106', - b'\xf1\x00CN7 MDPS C 1.00 1.06 56310/AA070 4CNDC106', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.00 99210-AB000 200819', - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.03 99210-AA000 200819', - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.01 99210-AB000 210205', - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.06 99210-AA000 220111', - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.03 99210-AB000 220426', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00CN ESC \t 101 \x10\x03 58910-AB800', - b'\xf1\x8758910-AA800\xf1\x00CN ESC \t 104 \x08\x03 58910-AA800', - b'\xf1\x8758910-AA800\xf1\x00CN ESC \t 105 \x10\x03 58910-AA800', - b'\xf1\x8758910-AB800\xf1\x00CN ESC \t 101 \x10\x03 58910-AB800\xf1\xa01.01', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x00HT6WA280BLHT6VA640A1CCN0N20NS5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x00HT6WA280BLHT6VA640A1CCN0N20NS5\x00\x00\x00\x00\x00\x00\xe8\xba\xce\xfa', - b'\xf1\x87CXMQFM2135005JB2E\xb9\x89\x98W\xa9y\x97h\xa9\x98\x99wxvwh\x87\177\xffx\xff\xff\xff,,\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', - b'\xf1\x87CXMQFM1916035JB2\x88vvgg\x87Wuwgev\xa9\x98\x88\x98h\x99\x9f\xffh\xff\xff\xff\xa5\xee\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', - b'\xf1\x87CXLQF40189012JL2f\x88\x86\x88\x88vUex\xb8\x88\x88\x88\x87\x88\x89fh?\xffz\xff\xff\xff\x08z\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', - b'\xf1\x87CXMQFM2728305JB2E\x97\x87xw\x87vwgw\x84x\x88\x88w\x89EI\xbf\xff{\xff\xff\xff\xe6\x0e\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', - b'\xf1\x87CXMQFM3806705JB2\x89\x87wwx\x88g\x86\x99\x87\x86xwwv\x88yv\x7f\xffz\xff\xff\xffV\x15\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x82CNCWD0AMFCXCSFFA', - b'\xf1\x81HM6M2_0a0_FF0', - b'\xf1\x82CNCVD0AMFCXCSFFB', - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M2_0a0_G80', - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M2_0a0_HC0', - ], - }, - CAR.ELANTRA_2022_NON_SCC: { - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x8756310AA030\x00\xf1\x00CN7 MDPS C 1.00 1.06 56310AA030\x00 4CNDC106', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.01 99210-AB000 210205', - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x8758910-AB500\xf1\x00CN ESC \t 100 \x06\x01 58910-AB500', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87CXNQEM4091445JB3g\x98\x98\x89\x99\x87gv\x89wuwgwv\x89hD_\xffx\xff\xff\xff\x86\xeb\xf1\x89HT6VA640A1\xf1\x82CCN0N20NS5\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82CNDWD0ANF3XCSG8A', - ], - }, - CAR.ELANTRA_HEV_2021: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.05 99210-AA000 210930', - b'\xf1\000CN7HMFC AT USA LHD 1.00 1.03 99210-AA000 200819', - b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.07 99210-AA000 220426', - b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.08 99210-AA000 220728', - b'\xf1\x00CN7HMFC AT USA LHD 1.00 1.09 99210-AA000 221108', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00CNhe SCC FHCUP 1.00 1.01 99110-BY000 ', - b'\xf1\x8799110BY000\xf1\x00CNhe SCC FHCUP 1.00 1.01 99110-BY000 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00CN7 MDPS C 1.00 1.03 56310BY0500 4CNHC103', - b'\xf1\x8756310/BY050\xf1\x00CN7 MDPS C 1.00 1.03 56310/BY050 4CNHC103', - b'\xf1\x8756310/BY050\xf1\000CN7 MDPS C 1.00 1.02 56310/BY050 4CNHC102', - b'\xf1\x00CN7 MDPS C 1.00 1.04 56310BY050\x00 4CNHC104', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\0006U3L0_C2\000\0006U3K3051\000\000HCN0G16NS0\xb9?A\xaa', - b'\xf1\0006U3L0_C2\000\0006U3K3051\000\000HCN0G16NS0\000\000\000\000', - b'\xf1\x816U3K3051\000\000\xf1\0006U3L0_C2\000\0006U3K3051\000\000HCN0G16NS0\xb9?A\xaa', - b'\xf1\x816U3K3051\x00\x00\xf1\x006U3L0_C2\x00\x006U3K3051\x00\x00HCN0G16NS0\x00\x00\x00\x00', - b'\xf1\x006U3L0_C2\x00\x006U3K9051\x00\x00HCN0G16NS1\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6G5051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x816H6G6051\x00\x00\x00\x00\x00\x00\x00\x00', - b'\xf1\x816H6G8051\x00\x00\x00\x00\x00\x00\x00\x00', - ] - }, - CAR.KONA_HEV: { - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00OS IEB \x01 104 \x11 58520-CM000', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00OShe SCC FNCUP 1.00 1.01 99110-CM000 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00OS MDPS C 1.00 1.00 56310CM030\x00 4OHDC100', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00OSH LKAS AT KOR LHD 1.00 1.01 95740-CM000 l31', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x816U3J9051\x00\x00\xf1\x006U3H1_C2\x00\x006U3J9051\x00\x00HOS0G16DS1\x16\xc7\xb0\xd9', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x816H6F6051\x00\x00\x00\x00\x00\x00\x00\x00', - ] - }, - CAR.SONATA_HYBRID: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00DNhe SCC FHCUP 1.00 1.02 99110-L5000 ', - b'\xf1\x8799110L5000\xf1\x00DNhe SCC FHCUP 1.00 1.02 99110-L5000 ', - b'\xf1\000DNhe SCC F-CUP 1.00 1.02 99110-L5000 ', - b'\xf1\x8799110L5000\xf1\000DNhe SCC F-CUP 1.00 1.02 99110-L5000 ', - ], - (Ecu.eps, 0x7d4, None): [ - b'\xf1\x8756310-L5500\xf1\x00DN8 MDPS C 1.00 1.02 56310-L5500 4DNHC102', - b'\xf1\x8756310-L5450\xf1\x00DN8 MDPS C 1.00 1.02 56310-L5450 4DNHC102', - b'\xf1\x8756310-L5450\xf1\000DN8 MDPS C 1.00 1.03 56310-L5450 4DNHC103', - b'\xf1\x00DN8 MDPS C 1.00 1.03 56310L5450\x00 4DNHC104', - b'\xf1\x8756310L5450\x00\xf1\x00DN8 MDPS C 1.00 1.03 56310L5450\x00 4DNHC104', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.04 99211-L1000 191016', - b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.05 99211-L1000 201109', - b'\xf1\000DN8HMFC AT USA LHD 1.00 1.06 99211-L1000 210325', - b'\xf1\x00DN8HMFC AT USA LHD 1.00 1.07 99211-L1000 211223', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\000PSBG2333 E14\x00\x00\x00\x00\x00\x00\x00TDN2H20SA6N\xc2\xeeW', - b'\xf1\x87959102T250\x00\x00\x00\x00\x00\xf1\x81E09\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2323 E09\x00\x00\x00\x00\x00\x00\x00TDN2H20SA5\x97R\x88\x9e', - b'\xf1\000PSBG2323 E09\000\000\000\000\000\000\000TDN2H20SA5\x97R\x88\x9e', - b'\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TDN2H20SA7\x1a3\xf9\xab', - b'\xf1\x87PCU\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81E16\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E16\x00\x00\x00\x00\x00\x00\x00TDN2H20SA7\x1a3\xf9\xab', - b'\xf1\x87959102T250\x00\x00\x00\x00\x00\xf1\x81E14\x00\x00\x00\x00\x00\x00\x00\xf1\x00PSBG2333 E14\x00\x00\x00\x00\x00\x00\x00TDN2H20SA6N\xc2\xeeW', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x87391162J012', - b'\xf1\x87391162J013', - b'\xf1\x87391162J014', - b'\xf1\x87391062J002', - ], - }, - CAR.KIA_SORENTO: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00UMP LKAS AT USA LHD 1.01 1.01 95740-C6550 d01' - ], - (Ecu.abs, 0x7d1, None): [ - b'\xf1\x00UM ESC \x0c 12 \x18\x05\x06 58910-C6330' - ], - (Ecu.fwdRadar, 0x7D0, None): [ - b'\xf1\x00UM__ SCC F-CUP 1.00 1.00 96400-C6500 ' - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x87LDKUAA0348164HE3\x87www\x87www\x88\x88\xa8\x88w\x88\x97xw\x88\x97x\x86o\xf8\xff\x87f\x7f\xff\x15\xe0\xf1\x81U811\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U811\x00\x00\x00\x00\x00\x00TUM4G33NL3V|DG' - ], - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x81640F0051\x00\x00\x00\x00\x00\x00\x00\x00' - ], - }, - CAR.KIA_SORENTO_PHEV_4TH_GEN: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00MQhe SCC FHCUP 1.00 1.06 99110-P4000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.11 99210-P2000 211217', - ] - }, - CAR.KIA_EV6: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00CV1_ RDR ----- 1.00 1.01 99110-CV000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CV1 MFC AT USA LHD 1.00 1.05 99210-CV000 211027', - b'\xf1\x00CV1 MFC AT USA LHD 1.00 1.06 99210-CV000 220328', - b'\xf1\x00CV1 MFC AT EUR LHD 1.00 1.05 99210-CV000 211027', - b'\xf1\x00CV1 MFC AT EUR LHD 1.00 1.06 99210-CV000 220328', - b'\xf1\x00CV1 MFC AT EUR RHD 1.00 1.00 99210-CV100 220630', - b'\xf1\x00CV1 MFC AT USA LHD 1.00 1.00 99210-CV100 220630', - b'\xf1\x00CV1 MFC AT KOR LHD 1.00 1.04 99210-CV000 210823', - b'\xf1\x00CV1 MFC AT KOR LHD 1.00 1.05 99210-CV000 211027', - b'\xf1\x00CV1 MFC AT KOR LHD 1.00 1.06 99210-CV000 220328', - ], - }, - CAR.IONIQ_5: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00NE1_ RDR ----- 1.00 1.00 99110-GI000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.02 99211-GI010 211206', - b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.06 99211-GI000 210813', - b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.05 99211-GI010 220614', - b'\xf1\x00NE1 MFC AT KOR LHD 1.00 1.05 99211-GI010 220614', - b'\xf1\x00NE1 MFC AT EUR RHD 1.00 1.01 99211-GI010 211007', - b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.01 99211-GI010 211007', - b'\xf1\x00NE1 MFC AT EUR RHD 1.00 1.02 99211-GI010 211206', - b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.03 99211-GI010 220401', - b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.06 99211-GI010 230110', - ], - }, - CAR.IONIQ_6: { - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00CE__ RDR ----- 1.00 1.01 99110-KL000 ', - ], - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00CE MFC AT USA LHD 1.00 1.04 99211-KL000 221213', - ], - }, - CAR.TUCSON_4TH_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9210 14G', - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.01 99211-N9240 14T', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00NX4__ 1.00 1.00 99110-N9100 ', - b'\xf1\x00NX4__ 1.01 1.00 99110-N9100 ', - ], - }, - CAR.TUCSON_HYBRID_4TH_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9240 14Q', - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9220 14K', - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.01 99211-N9100 14A', - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9250 14W', - b'\xf1\x00NX4 FR_CMR AT EUR LHD 1.00 2.02 99211-N9000 14E', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00NX4__ 1.00 1.00 99110-N9100 ', - b'\xf1\x00NX4__ 1.01 1.00 99110-N9100 ', - b'\xf1\x00NX4__ 1.00 1.01 99110-N9000 ', - ], - }, - CAR.KIA_SPORTAGE_HYBRID_5TH_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00NQ5 FR_CMR AT GEN LHD 1.00 1.00 99211-P1060 665', - b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1060 665', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00NQ5__ 1.01 1.03 99110-CH000 ', - ], - }, - CAR.SANTA_CRUZ_1ST_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-CW000 14M', - b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-CW010 14X', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00NX4__ 1.00 1.00 99110-K5000 ', - b'\xf1\x00NX4__ 1.01 1.00 99110-K5000 ', - ], - }, - CAR.KIA_SPORTAGE_5TH_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1030 662', - b'\xf1\x00NQ5 FR_CMR AT USA LHD 1.00 1.00 99211-P1040 663', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00NQ5__ 1.00 1.02 99110-P1000 ', - b'\xf1\x00NQ5__ 1.00 1.03 99110-P1000 ', - b'\xf1\x00NQ5__ 1.01 1.03 99110-P1000 ', - ], - }, - CAR.GENESIS_GV70_1ST_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.04 99211-AR000 210204', - b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.01 99211-AR200 220125', - b'\xf1\x00JK1 MFC AT USA LHD 1.00 1.01 99211-AR300 220125', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JK1_ SCC FHCUP 1.00 1.02 99110-AR000 ', - b'\xf1\x00JK1_ SCC FHCUP 1.00 1.00 99110-AR200 ', - b'\xf1\x00JK1_ SCC FHCUP 1.00 1.00 99110-AR300 ', - ], - }, - CAR.GENESIS_GV60_EV_1ST_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00JW1 MFC AT USA LHD 1.00 1.02 99211-CU100 211215', - b'\xf1\x00JW1 MFC AT USA LHD 1.00 1.02 99211-CU000 211215', - b'\xf1\x00JW1 MFC AT USA LHD 1.00 1.03 99211-CU000 221118', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JW1_ RDR ----- 1.00 1.00 99110-CU000 ', - ], - }, - CAR.KIA_SORENTO_4TH_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00MQ4 MFC AT USA LHD 1.00 1.05 99210-R5000 210623', - b'\xf1\x00MQ4 MFC AT USA LHD 1.00 1.03 99210-R5000 200903', - b'\xf1\x00MQ4 MFC AT USA LHD 1.00 1.00 99210-R5100 221019', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00MQ4_ SCC FHCUP 1.00 1.06 99110-P2000 ', - b'\xf1\x00MQ4_ SCC F-CUP 1.00 1.06 99110-P2000 ', - b'\xf1\x00MQ4_ SCC FHCUP 1.00 1.08 99110-P2000 ', - ], - }, - CAR.KIA_NIRO_HEV_2ND_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00SG2HMFC AT USA LHD 1.01 1.08 99211-AT000 220531', - b'\xf1\x00SG2HMFC AT USA LHD 1.01 1.09 99211-AT000 220801', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00SG2_ RDR ----- 1.00 1.01 99110-AT000 ', - ], - }, - CAR.GENESIS_GV80: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00JX1 MFC AT USA LHD 1.00 1.02 99211-T6110 220513', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00JX1_ SCC FHCUP 1.00 1.01 99110-T6100 ', - ], - }, - CAR.KIA_CARNIVAL_4TH_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00KA4 MFC AT USA LHD 1.00 1.06 99210-R0000 220221', - b'\xf1\x00KA4CMFC AT CHN LHD 1.00 1.01 99211-I4000 210525', - b'\xf1\x00KA4 MFC AT USA LHD 1.00 1.00 99210-R0100 230105', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00KA4_ SCC FHCUP 1.00 1.03 99110-R0000 ', - b'\xf1\x00KA4c SCC FHCUP 1.00 1.01 99110-I4000 ', - ], - }, - CAR.KIA_SORENTO_HEV_4TH_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00MQ4HMFC AT KOR LHD 1.00 1.12 99210-P2000 230331', - b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.11 99210-P2000 211217', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00MQhe SCC FHCUP 1.00 1.07 99110-P4000 ', - ], - }, - CAR.KIA_K8_HEV_1ST_GEN: { - (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00GL3HMFC AT KOR LHD 1.00 1.03 99211-L8000 210907', - ], - (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00GL3_ RDR ----- 1.00 1.02 99110-L8000 ', - ], - }, -} CHECKSUM = { "crc8": [CAR.SANTA_FE, CAR.SONATA, CAR.PALISADE, CAR.KIA_SELTOS, CAR.ELANTRA_2021, CAR.ELANTRA_HEV_2021, - CAR.SONATA_HYBRID, CAR.SANTA_FE_2022, CAR.KIA_K5_2021, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.KIA_K5_HEV_2020, - CAR.ELANTRA_2022_NON_SCC, CAR.GENESIS_G70_2021_NON_SCC, CAR.KIA_SELTOS_2023_NON_SCC], + CAR.SONATA_HYBRID, CAR.SANTA_FE_2022, CAR.KIA_K5_2021, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, + CAR.KIA_K5_HEV_2020, CAR.CUSTIN_1ST_GEN, CAR.ELANTRA_2022_NON_SCC, CAR.GENESIS_G70_2021_NON_SCC, + CAR.KIA_SELTOS_2023_NON_SCC, CAR.BAYON_1ST_GEN_NON_SCC], "6B": [CAR.KIA_SORENTO, CAR.HYUNDAI_GENESIS], } CAN_GEARS = { - # which message has the gear - "use_cluster_gears": {CAR.ELANTRA, CAR.KONA}, + # which message has the gear. hybrid and EV use ELECT_GEAR + "use_cluster_gears": {CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.KONA}, "use_tcu_gears": {CAR.KIA_OPTIMA_G4, CAR.KIA_OPTIMA_G4_FL, CAR.SONATA_LF, CAR.VELOSTER, CAR.TUCSON}, - "use_elect_gears": {CAR.KIA_NIRO_EV, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, - CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, - CAR.KONA_HEV, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, - CAR.KONA_EV_2022, CAR.KIA_K5_HEV_2020}, } -CANFD_CAR = {CAR.KIA_EV6, CAR.IONIQ_5, CAR.IONIQ_6, CAR.TUCSON_4TH_GEN, CAR.TUCSON_HYBRID_4TH_GEN, CAR.KIA_SPORTAGE_HYBRID_5TH_GEN, - CAR.SANTA_CRUZ_1ST_GEN, CAR.KIA_SPORTAGE_5TH_GEN, CAR.GENESIS_GV70_1ST_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, +CANFD_CAR = {CAR.KIA_EV6, CAR.IONIQ_5, CAR.IONIQ_6, CAR.TUCSON_4TH_GEN, CAR.SANTA_CRUZ_1ST_GEN, CAR.KIA_SPORTAGE_5TH_GEN, CAR.GENESIS_GV70_1ST_GEN, CAR.GENESIS_GV60_EV_1ST_GEN, CAR.KIA_SORENTO_4TH_GEN, CAR.KIA_NIRO_HEV_2ND_GEN, CAR.KIA_NIRO_EV_2ND_GEN, - CAR.GENESIS_GV80, CAR.KIA_CARNIVAL_4TH_GEN, CAR.KIA_SORENTO_HEV_4TH_GEN, CAR.KONA_EV_2ND_GEN, CAR.KIA_K8_HEV_1ST_GEN} + CAR.GENESIS_GV80, CAR.KIA_CARNIVAL_4TH_GEN, CAR.KIA_SORENTO_HEV_4TH_GEN, CAR.KONA_EV_2ND_GEN, CAR.KIA_K8_HEV_1ST_GEN, + CAR.STARIA_4TH_GEN} # The radar does SCC on these cars when HDA I, rather than the camera -CANFD_RADAR_SCC_CAR = {CAR.GENESIS_GV70_1ST_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, CAR.KIA_SORENTO_4TH_GEN, CAR.GENESIS_GV80, - CAR.KIA_CARNIVAL_4TH_GEN, CAR.KIA_SORENTO_HEV_4TH_GEN, CAR.KONA_EV_2ND_GEN, CAR.IONIQ_6} +CANFD_RADAR_SCC_CAR = {CAR.GENESIS_GV70_1ST_GEN, CAR.KIA_SORENTO_4TH_GEN, CAR.GENESIS_GV80, CAR.KIA_CARNIVAL_4TH_GEN, CAR.KIA_SORENTO_HEV_4TH_GEN} + +# These CAN FD cars do not accept communication control to disable the ADAS ECU, +# responds with 0x7F2822 - 'conditions not correct' +CANFD_UNSUPPORTED_LONGITUDINAL_CAR = {CAR.IONIQ_6, CAR.KONA_EV_2ND_GEN} # The camera does SCC on these cars, rather than the radar CAMERA_SCC_CAR = {CAR.KONA_EV_2022, } # these cars use a different gas signal HYBRID_CAR = {CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ, - CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.TUCSON_HYBRID_4TH_GEN, - CAR.KIA_SPORTAGE_HYBRID_5TH_GEN, CAR.KIA_SORENTO_PHEV_4TH_GEN, CAR.KIA_K5_HEV_2020, CAR.KIA_NIRO_HEV_2ND_GEN, - CAR.KIA_SORENTO_HEV_4TH_GEN, CAR.KIA_OPTIMA_H, CAR.KIA_K8_HEV_1ST_GEN} + CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.KIA_K5_HEV_2020, + CAR.KIA_OPTIMA_H, CAR.KIA_OPTIMA_H_G4_FL, CAR.AZERA_HEV_6TH_GEN, CAR.KIA_NIRO_PHEV_2022} EV_CAR = {CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.KIA_NIRO_EV, CAR.KIA_NIRO_EV_2ND_GEN, CAR.KONA_EV_2022, CAR.KIA_EV6, CAR.IONIQ_5, CAR.IONIQ_6, CAR.GENESIS_GV60_EV_1ST_GEN, CAR.KONA_EV_2ND_GEN} @@ -2118,13 +537,14 @@ EV_CAR = {CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.KIA_NIRO_EV, CAR # these cars require a special panda safety mode due to missing counters and checksums in the messages LEGACY_SAFETY_MODE_CAR = {CAR.HYUNDAI_GENESIS, CAR.IONIQ_EV_LTD, CAR.KIA_OPTIMA_G4, CAR.VELOSTER, CAR.GENESIS_G70, CAR.GENESIS_G80, CAR.KIA_CEED, CAR.ELANTRA, CAR.IONIQ_HEV_2022, - CAR.KIA_OPTIMA_H} + CAR.KIA_OPTIMA_H, CAR.ELANTRA_GT_I30} # these cars have not been verified to work with longitudinal yet - radar disable, sending correct messages, etc. -UNSUPPORTED_LONGITUDINAL_CAR = LEGACY_SAFETY_MODE_CAR | {CAR.KIA_NIRO_PHEV, CAR.KIA_SORENTO, CAR.SONATA_LF, CAR.KIA_OPTIMA_G4_FL} +UNSUPPORTED_LONGITUDINAL_CAR = LEGACY_SAFETY_MODE_CAR | {CAR.KIA_NIRO_PHEV, CAR.KIA_SORENTO, CAR.SONATA_LF, CAR.KIA_OPTIMA_G4_FL, + CAR.KIA_OPTIMA_H_G4_FL} NON_SCC_CAR = {CAR.KIA_FORTE_2021_NON_SCC, CAR.ELANTRA_2022_NON_SCC, CAR.KIA_FORTE_2019_NON_SCC, CAR.GENESIS_G70_2021_NON_SCC, - CAR.KIA_SELTOS_2023_NON_SCC} + CAR.KIA_SELTOS_2023_NON_SCC, CAR.KONA_NON_SCC, CAR.BAYON_1ST_GEN_NON_SCC} NON_SCC_NO_FCA_CAR = {CAR.KIA_FORTE_2019_NON_SCC, } NON_SCC_RADAR_FCA_CAR = {CAR.GENESIS_G70_2021_NON_SCC, } @@ -2132,7 +552,10 @@ NON_SCC_RADAR_FCA_CAR = {CAR.GENESIS_G70_2021_NON_SCC, } # If no points are outputted by default it might be possible to turn it on using selfdrive/debug/hyundai_enable_radar_points.py DBC = { CAR.AZERA_6TH_GEN: dbc_dict('hyundai_kia_generic', None), + CAR.AZERA_HEV_6TH_GEN: dbc_dict('hyundai_kia_generic', None), + CAR.BAYON_1ST_GEN_NON_SCC: dbc_dict('hyundai_kia_generic', None), CAR.ELANTRA: dbc_dict('hyundai_kia_generic', None), + CAR.ELANTRA_GT_I30: dbc_dict('hyundai_kia_generic', None), CAR.ELANTRA_2021: dbc_dict('hyundai_kia_generic', None), CAR.ELANTRA_2022_NON_SCC: dbc_dict('hyundai_kia_generic', None), CAR.ELANTRA_HEV_2021: dbc_dict('hyundai_kia_generic', None), @@ -2159,19 +582,21 @@ DBC = { CAR.KIA_OPTIMA_G4: dbc_dict('hyundai_kia_generic', None), CAR.KIA_OPTIMA_G4_FL: dbc_dict('hyundai_kia_generic', None), CAR.KIA_OPTIMA_H: dbc_dict('hyundai_kia_generic', None), + CAR.KIA_OPTIMA_H_G4_FL: dbc_dict('hyundai_kia_generic', None), CAR.KIA_SELTOS: dbc_dict('hyundai_kia_generic', None), CAR.KIA_SELTOS_2023_NON_SCC: dbc_dict('hyundai_kia_generic', None), CAR.KIA_SORENTO: dbc_dict('hyundai_kia_generic', None), # Has 0x5XX messages, but different format CAR.KIA_STINGER: dbc_dict('hyundai_kia_generic', None), CAR.KIA_STINGER_2022: dbc_dict('hyundai_kia_generic', None), CAR.KONA: dbc_dict('hyundai_kia_generic', None), + CAR.KONA_NON_SCC: dbc_dict('hyundai_kia_generic', None), CAR.KONA_EV: dbc_dict('hyundai_kia_generic', None), CAR.KONA_EV_2022: dbc_dict('hyundai_kia_generic', None), CAR.KONA_HEV: dbc_dict('hyundai_kia_generic', None), CAR.SANTA_FE: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar_generated'), - CAR.SANTA_FE_2022: dbc_dict('hyundai_kia_generic', None), - CAR.SANTA_FE_HEV_2022: dbc_dict('hyundai_kia_generic', None), - CAR.SANTA_FE_PHEV_2022: dbc_dict('hyundai_kia_generic', None), + CAR.SANTA_FE_2022: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar_generated'), + CAR.SANTA_FE_HEV_2022: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar_generated'), + CAR.SANTA_FE_PHEV_2022: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar_generated'), CAR.SONATA: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar_generated'), CAR.SONATA_LF: dbc_dict('hyundai_kia_generic', None), # Has 0x5XX messages, but different format CAR.TUCSON: dbc_dict('hyundai_kia_generic', None), @@ -2181,14 +606,11 @@ DBC = { CAR.KIA_EV6: dbc_dict('hyundai_canfd', None), CAR.SONATA_HYBRID: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar_generated'), CAR.TUCSON_4TH_GEN: dbc_dict('hyundai_canfd', None), - CAR.TUCSON_HYBRID_4TH_GEN: dbc_dict('hyundai_canfd', None), CAR.IONIQ_5: dbc_dict('hyundai_canfd', None), CAR.IONIQ_6: dbc_dict('hyundai_canfd', None), CAR.SANTA_CRUZ_1ST_GEN: dbc_dict('hyundai_canfd', None), CAR.KIA_SPORTAGE_5TH_GEN: dbc_dict('hyundai_canfd', None), - CAR.KIA_SPORTAGE_HYBRID_5TH_GEN: dbc_dict('hyundai_canfd', None), CAR.GENESIS_GV70_1ST_GEN: dbc_dict('hyundai_canfd', None), - CAR.KIA_SORENTO_PHEV_4TH_GEN: dbc_dict('hyundai_canfd', None), CAR.GENESIS_GV60_EV_1ST_GEN: dbc_dict('hyundai_canfd', None), CAR.KIA_SORENTO_4TH_GEN: dbc_dict('hyundai_canfd', None), CAR.KIA_NIRO_HEV_2ND_GEN: dbc_dict('hyundai_canfd', None), @@ -2198,4 +620,7 @@ DBC = { CAR.KIA_SORENTO_HEV_4TH_GEN: dbc_dict('hyundai_canfd', None), CAR.KONA_EV_2ND_GEN: dbc_dict('hyundai_canfd', None), CAR.KIA_K8_HEV_1ST_GEN: dbc_dict('hyundai_canfd', None), + CAR.CUSTIN_1ST_GEN: dbc_dict('hyundai_kia_generic', None), + CAR.KIA_NIRO_PHEV_2022: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar_generated'), + CAR.STARIA_4TH_GEN: dbc_dict('hyundai_canfd', None), } diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 0ebab681cf..b639a01288 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -1,17 +1,20 @@ -import yaml +import json import operator import os import time import numpy as np +import tomllib from abc import abstractmethod, ABC -from typing import Any, Dict, Optional, Tuple, List, Callable +from difflib import SequenceMatcher +from enum import StrEnum +from typing import Any, Dict, Optional, Tuple, List, Callable, NamedTuple from cereal import car from openpilot.common.basedir import BASEDIR from openpilot.common.conversions import Conversions as CV -from openpilot.common.kalman.simple_kalman import KF1D, get_kalman_gain +from openpilot.common.simple_kalman import KF1D, get_kalman_gain from openpilot.common.numpy_fast import clip -from openpilot.common.params import Params, put_nonblocking, put_bool_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL from openpilot.selfdrive.car import apply_hysteresis, gen_empty_fingerprint, scale_rot_inertia, scale_tire_stiffness, STD_CARGO_KG from openpilot.selfdrive.controls.lib.desire_helper import LANE_CHANGE_SPEED_MIN @@ -22,30 +25,49 @@ from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel ButtonType = car.CarState.ButtonEvent.Type GearShifter = car.CarState.GearShifter EventName = car.CarEvent.EventName -TorqueFromLateralAccelCallbackType = Callable[[float, car.CarParams.LateralTorqueTuning, float, float, bool], float] MAX_CTRL_SPEED = (V_CRUISE_MAX + 4) * CV.KPH_TO_MS ACCEL_MAX = 2.0 ACCEL_MIN = -3.5 FRICTION_THRESHOLD = 0.3 -TORQUE_PARAMS_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/params.yaml') -TORQUE_OVERRIDE_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/override.yaml') -TORQUE_SUBSTITUTE_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/substitute.yaml') +TORQUE_PARAMS_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/params.toml') +TORQUE_OVERRIDE_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/override.toml') +TORQUE_SUBSTITUTE_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/substitute.toml') +TORQUE_NN_MODEL_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/lat_models') + +# dict used to rename activation functions whose names aren't valid python identifiers +ACTIVATION_FUNCTION_NAMES = {'σ': 'sigmoid'} GAC_DICT = {1: 1, 2: 2, 3: 3} +FORWARD_GEARS = [GearShifter.drive, GearShifter.low, GearShifter.eco, + GearShifter.sport, GearShifter.manumatic, GearShifter.brake] + + +def similarity(s1: str, s2: str) -> float: + return SequenceMatcher(None, s1, s2).ratio() + + +class LatControlInputs(NamedTuple): + lateral_acceleration: float + roll_compensation: float + vego: float + aego: float + + +TorqueFromLateralAccelCallbackType = Callable[[LatControlInputs, car.CarParams.LateralTorqueTuning, float, float, bool, bool], float] def get_torque_params(candidate): - with open(TORQUE_SUBSTITUTE_PATH) as f: - sub = yaml.load(f, Loader=yaml.CSafeLoader) + with open(TORQUE_SUBSTITUTE_PATH, 'rb') as f: + sub = tomllib.load(f) if candidate in sub: candidate = sub[candidate] - with open(TORQUE_PARAMS_PATH) as f: - params = yaml.load(f, Loader=yaml.CSafeLoader) - with open(TORQUE_OVERRIDE_PATH) as f: - override = yaml.load(f, Loader=yaml.CSafeLoader) + with open(TORQUE_PARAMS_PATH, 'rb') as f: + params = tomllib.load(f) + with open(TORQUE_OVERRIDE_PATH, 'rb') as f: + override = tomllib.load(f) # Ensure no overlap if sum([candidate in x for x in [sub, params, override]]) > 1: @@ -60,6 +82,111 @@ def get_torque_params(candidate): return {key: out[i] for i, key in enumerate(params['legend'])} +# lateral neural network feedforward +class FluxModel: + def __init__(self, params_file, zero_bias=False): + with open(params_file, "r") as f: + params = json.load(f) + + self.input_size = params["input_size"] + self.output_size = params["output_size"] + self.input_mean = np.array(params["input_mean"], dtype=np.float32).T + self.input_std = np.array(params["input_std"], dtype=np.float32).T + self.layers = [] + self.friction_override = False + + for layer_params in params["layers"]: + W = np.array(layer_params[next(key for key in layer_params.keys() if key.endswith('_W'))], dtype=np.float32).T + b = np.array(layer_params[next(key for key in layer_params.keys() if key.endswith('_b'))], dtype=np.float32).T + if zero_bias: + b = np.zeros_like(b) + activation = layer_params["activation"] + for k, v in ACTIVATION_FUNCTION_NAMES.items(): + activation = activation.replace(k, v) + self.layers.append((W, b, activation)) + + self.validate_layers() + self.check_for_friction_override() + + # Begin activation functions. + # These are called by name using the keys in the model json file + @staticmethod + def sigmoid(x): + return 1 / (1 + np.exp(-x)) + + @staticmethod + def identity(x): + return x + # End activation functions + + def forward(self, x): + for W, b, activation in self.layers: + x = getattr(self, activation)(x.dot(W) + b) + return x + + def evaluate(self, input_array): + in_len = len(input_array) + if in_len != self.input_size: + # If the input is length 2-4, then it's a simplified evaluation. + # In that case, need to add on zeros to fill out the input array to match the correct length. + if 2 <= in_len: + input_array = input_array + [0] * (self.input_size - in_len) + else: + raise ValueError(f"Input array length {len(input_array)} must be length 2 or greater") + + input_array = np.array(input_array, dtype=np.float32) + + # Rescale the input array using the input_mean and input_std + input_array = (input_array - self.input_mean) / self.input_std + + output_array = self.forward(input_array) + + return float(output_array[0, 0]) + + def validate_layers(self): + for W, b, activation in self.layers: + if not hasattr(self, activation): + raise ValueError(f"Unknown activation: {activation}") + + def check_for_friction_override(self): + y = self.evaluate([10.0, 0.0, 0.2]) + self.friction_override = (y < 0.1) + + +def get_nn_model_path(_car, eps_firmware) -> Tuple[Optional[str], float]: + def check_nn_path(_check_model): + _model_path = None + _max_similarity = -1.0 + for f in os.listdir(TORQUE_NN_MODEL_PATH): + if f.endswith(".json"): + model = f.replace(".json", "").replace(f"{TORQUE_NN_MODEL_PATH}/", "") + similarity_score = similarity(model, _check_model) + if similarity_score > _max_similarity: + _max_similarity = similarity_score + _model_path = os.path.join(TORQUE_NN_MODEL_PATH, f) + return _model_path, _max_similarity + + if len(eps_firmware) > 3: + eps_firmware = eps_firmware.replace("\\", "") + check_model = f"{_car} {eps_firmware}" + else: + check_model = _car + model_path, max_similarity = check_nn_path(check_model) + if _car not in model_path or 0.0 <= max_similarity < 0.9: + check_model = _car + model_path, max_similarity = check_nn_path(check_model) + if _car not in model_path or 0.0 <= max_similarity < 0.9: + model_path = None + return model_path, max_similarity + + +def get_nn_model(_car, eps_firmware) -> Tuple[Optional[FluxModel], float]: + model, similarity_score = get_nn_model_path(_car, eps_firmware) + if model is not None: + model = FluxModel(model) + return model, similarity_score + + # generic car and radar interfaces class CarInterfaceBase(ABC): @@ -111,6 +238,20 @@ class CarInterfaceBase(ABC): self.reverse_dm_cam = self.param_s.get_bool("ReverseDmCam") self.mads_main_toggle = self.param_s.get_bool("MadsCruiseMain") self.lkas_toggle = self.param_s.get_bool("LkasToggle") + self.last_mads_init = 0. + self.madsEnabledInit = False + self.madsEnabledInitPrev = False + + self.lat_torque_nn_model = None + eps_firmware = str(next((fw.fwVersion for fw in CP.carFw if fw.ecu == "eps"), "")) + self.has_lateral_torque_nn = self.initialize_lat_torque_nn(CP.carFingerprint, eps_firmware) + + def get_ff_nn(self, x): + return self.lat_torque_nn_model.evaluate(x) + + def initialize_lat_torque_nn(self, _car, eps_firmware) -> bool: + self.lat_torque_nn_model, _ = get_nn_model(_car, eps_firmware) + return self.lat_torque_nn_model is not None and self.param_s.get_bool("NNFF") @staticmethod def get_pid_accel_limits(CP, current_speed, cruise_speed): @@ -129,10 +270,25 @@ class CarInterfaceBase(ABC): ret = cls._get_params(ret, candidate, fingerprint, car_fw, experimental_long, docs) params = Params() - if params.get_bool("EnforceTorqueLateral") and ret.steerControlType != car.CarParams.SteerControlType.angle: - ret = CarInterfaceBase.sp_configure_torque_tune(candidate, ret) - if params.get_bool("CustomTorqueLateral"): - ret = CarInterfaceBase.sp_configure_custom_torque_tune(ret, params) + if ret.steerControlType != car.CarParams.SteerControlType.angle: + if params.get_bool("EnforceTorqueLateral") or params.get_bool("NNFF"): + ret = CarInterfaceBase.sp_configure_torque_tune(candidate, ret) + if params.get_bool("CustomTorqueLateral"): + ret = CarInterfaceBase.sp_configure_custom_torque_tune(ret, params) + + if ret.lateralTuning.which() == 'torque': + eps_firmware = str(next((fw.fwVersion for fw in car_fw if fw.ecu == "eps"), "")) + model, similarity_score = get_nn_model_path(candidate, eps_firmware) + if model is not None: + ret.lateralTuning.torque.nnModelName = nn_model_name = os.path.splitext(os.path.basename(model))[0] + ret.lateralTuning.torque.nnModelFuzzyMatch = (similarity_score < 0.99) + if 'b\'' in nn_model_name: + nn_model, _ = nn_model_name.split('b\'') + else: + nn_model = nn_model_name + params.put("NNFFCarModel", nn_model) + else: + ret.lateralTuning.torque.nnModelName = "mock" # Vehicle mass is published curb weight plus assumed payload such as a human driver; notCars have no assumed payload if not ret.notCar: @@ -157,17 +313,16 @@ class CarInterfaceBase(ABC): @staticmethod def get_steer_feedforward_default(desired_angle, v_ego): # Proportional to realigning tire momentum: lateral acceleration. - # TODO: something with lateralPlan.curvatureRates return desired_angle * (v_ego**2) def get_steer_feedforward_function(self): return self.get_steer_feedforward_default - def torque_from_lateral_accel_linear(self, lateral_accel_value: float, torque_params: car.CarParams.LateralTorqueTuning, - lateral_accel_error: float, lateral_accel_deadzone: float, friction_compensation: bool) -> float: + def torque_from_lateral_accel_linear(self, latcontrol_inputs: LatControlInputs, torque_params: car.CarParams.LateralTorqueTuning, + lateral_accel_error: float, lateral_accel_deadzone: float, friction_compensation: bool, gravity_adjusted: bool) -> float: # The default is a linear relationship between torque and lateral acceleration (accounting for road roll and steering friction) friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation) - return (lateral_accel_value / float(torque_params.latAccelFactor)) + friction + return (latcontrol_inputs.lateral_acceleration / float(torque_params.latAccelFactor)) + friction def torque_from_lateral_accel(self) -> TorqueFromLateralAccelCallbackType: return self.torque_from_lateral_accel_linear @@ -415,6 +570,26 @@ class CarInterfaceBase(ABC): return mads_enabled + def get_sp_started_mads(self, cs_out, CS): + if not cs_out.cruiseState.available and CS.out.cruiseState.available: + self.madsEnabledInit = False + self.madsEnabledInitPrev = False + return False + if not self.mads_main_toggle or self.prev_acc_mads_combo: + return CS.madsEnabled + if not self.madsEnabledInit and CS.madsEnabled: + self.madsEnabledInit = True + self.last_mads_init = time.monotonic() + if cs_out.gearShifter not in FORWARD_GEARS: + self.last_mads_init = time.monotonic() + if self.madsEnabledInit and (not self.madsEnabledInitPrev or cs_out.gearShifter not in FORWARD_GEARS): + if time.monotonic() < self.last_mads_init + 1.: + return False + self.madsEnabledInitPrev = True + return cs_out.cruiseState.available + else: + return CS.madsEnabled + def get_sp_common_state(self, cs_out, CS, min_enable_speed_pcm=False, gear_allowed=True, gap_button=False): cs_out.cruiseState.enabled = CS.accEnabled if not self.CP.pcmCruise or not self.CP.pcmCruiseSpeed or min_enable_speed_pcm else \ cs_out.cruiseState.enabled @@ -448,7 +623,7 @@ class CarInterfaceBase(ABC): cs_out.madsEnabled = CS.madsEnabled cs_out.accEnabled = CS.accEnabled cs_out.disengageByBrake = CS.disengageByBrake - cs_out.brakeLights |= cs_out.brakePressed or cs_out.brakeHoldActive or cs_out.parkingBrake or cs_out.regenBraking + cs_out.brakeLightsDEPRECATED |= cs_out.brakePressed or cs_out.brakeHoldActive or cs_out.parkingBrake or cs_out.regenBraking return cs_out, CS @@ -461,7 +636,7 @@ class CarInterfaceBase(ABC): if self.gap_button_counter > 50: self.gap_button_counter = 0 self.experimental_mode_hold = True - put_bool_nonblocking("ExperimentalMode", not self.experimental_mode) + self.param_s.put_bool_nonblocking("ExperimentalMode", not self.experimental_mode) else: self.gap_button_counter = 0 self.experimental_mode_hold = False @@ -485,14 +660,14 @@ class CarInterfaceBase(ABC): CS.gac_tr_cluster = gac_default if CS.gac_tr != 2: CS.gac_tr = 2 - put_nonblocking("LongitudinalPersonality", "2") + self.param_s.put_nonblocking("LongitudinalPersonality", "2") return cs_out, CS if gac_button: self.gac_button_counter += 1 elif self.prev_gac_button and not gac_button and self.gac_button_counter < 50: self.gac_button_counter = 0 CS.gac_tr = self.get_sp_gac_state(CS.gac_tr, 0, 2, inc_dec) - put_nonblocking("LongitudinalPersonality", str(CS.gac_tr)) + self.param_s.put_nonblocking("LongitudinalPersonality", str(CS.gac_tr)) else: self.gac_button_counter = 0 CS.gac_tr_cluster = clip(CS.gac_tr + 1, gac_min, gac_max) # always 1 higher @@ -524,7 +699,7 @@ class CarInterfaceBase(ABC): self.cruise_cancelled_btn = True events.add(EventName.manualLongitudinalRequired) # do disable on MADS button if ACC is disabled - if b.type == ButtonType.altButton1 and b.pressed: + if b.type == ButtonType.altButton1 and b.pressed and self.enable_mads: if not cs_out.madsEnabled: # disabled MADS if not cs_out.cruiseState.enabled: events.add(EventName.buttonCancel) @@ -606,6 +781,7 @@ class CarStateBase(ABC): self.mads_enabled = False self.prev_mads_enabled = False self.control_initialized = False + self.pcm_cruise_enabled = False self.gap_dist_button = 0 self.gac_tr = int(self.param_s.get("LongitudinalPersonality")) self.gac_tr_cluster = clip(int(self.param_s.get("LongitudinalPersonality")), 1, 3) @@ -620,7 +796,7 @@ class CarStateBase(ABC): def update_speed_kf(self, v_ego_raw): if abs(v_ego_raw - self.v_ego_kf.x[0][0]) > 2.0: # Prevent large accelerations when car starts at non zero speed - self.v_ego_kf.x = [[v_ego_raw], [0.0]] + self.v_ego_kf.set_x([[v_ego_raw], [0.0]]) v_ego_x = self.v_ego_kf.update(v_ego_raw) return float(v_ego_x[0]), float(v_ego_x[1]) @@ -717,9 +893,14 @@ class CarStateBase(ABC): return None +INTERFACE_ATTR_FILE = { + "FINGERPRINTS": "fingerprints", + "FW_VERSIONS": "fingerprints", +} + # interface-specific helpers -def get_interface_attr(attr: str, combine_brands: bool = False, ignore_none: bool = False) -> Dict[str, Any]: +def get_interface_attr(attr: str, combine_brands: bool = False, ignore_none: bool = False) -> Dict[str | StrEnum, Any]: # read all the folders in selfdrive/car and return a dict where: # - keys are all the car models or brand names # - values are attr values from all car folders @@ -727,7 +908,7 @@ def get_interface_attr(attr: str, combine_brands: bool = False, ignore_none: boo for car_folder in sorted([x[0] for x in os.walk(BASEDIR + '/selfdrive/car')]): try: brand_name = car_folder.split('/')[-1] - brand_values = __import__(f'openpilot.selfdrive.car.{brand_name}.values', fromlist=[attr]) + brand_values = __import__(f'openpilot.selfdrive.car.{brand_name}.{INTERFACE_ATTR_FILE.get(attr, "values")}', fromlist=[attr]) if hasattr(brand_values, attr) or not ignore_none: attr_data = getattr(brand_values, attr, None) else: @@ -743,3 +924,35 @@ def get_interface_attr(attr: str, combine_brands: bool = False, ignore_none: boo pass return result + + +class NanoFFModel: + def __init__(self, weights_loc: str, platform: str): + self.weights_loc = weights_loc + self.platform = platform + self.load_weights(platform) + + def load_weights(self, platform: str): + with open(self.weights_loc, 'r') as fob: + self.weights = {k: np.array(v) for k, v in json.load(fob)[platform].items()} + + def relu(self, x: np.ndarray): + return np.maximum(0.0, x) + + def forward(self, x: np.ndarray): + assert x.ndim == 1 + x = (x - self.weights['input_norm_mat'][:, 0]) / (self.weights['input_norm_mat'][:, 1] - self.weights['input_norm_mat'][:, 0]) + x = self.relu(np.dot(x, self.weights['w_1']) + self.weights['b_1']) + x = self.relu(np.dot(x, self.weights['w_2']) + self.weights['b_2']) + x = self.relu(np.dot(x, self.weights['w_3']) + self.weights['b_3']) + x = np.dot(x, self.weights['w_4']) + self.weights['b_4'] + return x + + def predict(self, x: List[float], do_sample: bool = False): + x = self.forward(np.array(x)) + if do_sample: + pred = np.random.laplace(x[0], np.exp(x[1]) / self.weights['temperature']) + else: + pred = x[0] + pred = pred * (self.weights['output_norm_mat'][1] - self.weights['output_norm_mat'][0]) + self.weights['output_norm_mat'][0] + return pred diff --git a/selfdrive/car/isotp_parallel_query.py b/selfdrive/car/isotp_parallel_query.py index adbc598ea6..696935fd35 100644 --- a/selfdrive/car/isotp_parallel_query.py +++ b/selfdrive/car/isotp_parallel_query.py @@ -3,7 +3,7 @@ from collections import defaultdict from functools import partial import cereal.messaging as messaging -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.boardd.boardd import can_list_to_can_capnp from panda.python.uds import CanClient, IsoTpMessage, FUNCTIONAL_ADDRS, get_rx_addr_for_tx_addr diff --git a/selfdrive/car/mazda/carcontroller.py b/selfdrive/car/mazda/carcontroller.py index 2efb00e014..d348406714 100644 --- a/selfdrive/car/mazda/carcontroller.py +++ b/selfdrive/car/mazda/carcontroller.py @@ -1,7 +1,7 @@ from cereal import car import cereal.messaging as messaging from openpilot.common.conversions import Conversions as CV -from openpilot.common.params import Params, put_bool_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL from opendbc.can.packer import CANPacker from openpilot.selfdrive.car import apply_driver_steer_torque_limits @@ -66,7 +66,7 @@ class CarController: self.m_tsc = self.sm['longitudinalPlanSP'].turnSpeed if self.frame % 200 == 0: - self.speed_limit_control_enabled = self.param_s.get_bool("SpeedLimitControl") + self.speed_limit_control_enabled = self.param_s.get_bool("EnableSlc") self.is_metric = self.param_s.get_bool("IsMetric") self.last_speed_limit_sign_tap = self.param_s.get_bool("LastSpeedLimitSignTap") self.v_cruise_min = MAZDA_V_CRUISE_MIN[self.is_metric] * (CV.KPH_TO_MPH if not self.is_metric else 1) @@ -76,7 +76,7 @@ class CarController: if not self.CP.pcmCruiseSpeed: if not self.last_speed_limit_sign_tap_prev and self.last_speed_limit_sign_tap: self.sl_force_active_timer = self.frame - put_bool_nonblocking("LastSpeedLimitSignTap", False) + self.param_s.put_bool_nonblocking("LastSpeedLimitSignTap", False) self.last_speed_limit_sign_tap_prev = self.last_speed_limit_sign_tap sl_force_active = self.speed_limit_control_enabled and (self.frame < (self.sl_force_active_timer * DT_CTRL + 2.0)) @@ -110,10 +110,11 @@ class CarController: # Mazda Stop and Go requires a RES button (or gas) press if the car stops more than 3 seconds # Send Resume button when planner wants car to move can_sends.append(mazdacan.create_button_cmd(self.packer, self.CP.carFingerprint, CS.crz_btns_counter, Buttons.RESUME)) - elif CS.out.cruiseState.enabled and not self.CP.pcmCruiseSpeed and self.frame % 10 == 0: + elif CS.out.cruiseState.enabled and not self.CP.pcmCruiseSpeed: self.cruise_button = self.get_cruise_buttons(CS, CC.vCruise) if self.cruise_button is not None: - can_sends.append(mazdacan.create_button_cmd(self.packer, self.CP.carFingerprint, CS.crz_btns_counter, self.cruise_button)) + if self.frame % 10 == 0: + can_sends.append(mazdacan.create_button_cmd(self.packer, self.CP.carFingerprint, self.frame // 10, self.cruise_button)) self.apply_steer_last = apply_steer diff --git a/selfdrive/car/mazda/fingerprints.py b/selfdrive/car/mazda/fingerprints.py new file mode 100644 index 0000000000..292f407935 --- /dev/null +++ b/selfdrive/car/mazda/fingerprints.py @@ -0,0 +1,260 @@ +from cereal import car +from openpilot.selfdrive.car.mazda.values import CAR + +Ecu = car.CarParams.Ecu + +FW_VERSIONS = { + CAR.CX5_2022: { + (Ecu.eps, 0x730, None): [ + b'KSD5-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'PEW5-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2G-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2H-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2H-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX85-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXFG-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'SH54-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'K131-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'KGWD-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KSD5-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'GSH7-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-U\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'PG69-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXDL-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXFG-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXFG-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB2-21PS1-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB2-21PS1-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'SH51-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.CX5: { + (Ecu.eps, 0x730, None): [ + b'K319-3210X-A-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KCB8-3210X-B-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KJ01-3210X-G-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KJ01-3210X-J-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KJ01-3210X-M-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'PA53-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PAR4-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2E-188K2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2F-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2G-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2H-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2H-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2H-188K2-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2K-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX38-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX42-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX68-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYFA-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYFC-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYFD-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYNF-188K2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'SHKT-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'K123-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'K123-437K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KBJ5-437K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KL2K-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KN0W-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'B61L-67XK2-R\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-V\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-M\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-N\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-R\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'PA66-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PA66-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX39-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX39-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX68-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB1-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB1-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB1-21PS1-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB2-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB2-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB2-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB2-21PS1-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYB2-21PS1-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYNC-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'SH9T-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.CX9: { + (Ecu.eps, 0x730, None): [ + b'K070-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KJ01-3210X-G-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KJ01-3210X-L-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'PX23-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX24-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM4-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXN8-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXN8-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYD7-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYD8-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYFM-188K2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYFM-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'K123-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'TK80-67XK2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'TK80-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'TA0B-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'TK79-437K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'TK79-437K2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'TM53-437K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'TN40-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'B61L-67XK2-P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-V\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-K\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'TK80-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'PXM4-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM7-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM7-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYD5-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYD5-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYD6-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYD6-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYFM-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYFM-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.MAZDA3: { + (Ecu.eps, 0x730, None): [ + b'BHN1-3210X-J-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K070-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'KR11-3210X-K-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'P5JD-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PY2P-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYJW-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYKC-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYKE-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'B63C-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GHP9-67Y10---41\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'B45A-437AS-0-08\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'B61L-67XK2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-Q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'P52G-21PS1-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PY2S-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYKA-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYKE-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYKE-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.MAZDA6: { + (Ecu.eps, 0x730, None): [ + b'GBEF-3210X-B-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GBEF-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GFBC-3210X-A-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'PA34-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX4F-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYH7-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYH7-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'K131-67XK2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'GBVH-437K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GBVH-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GDDM-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'B61L-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'B61L-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'PA28-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYH3-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PYH7-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, + CAR.CX9_2021: { + (Ecu.eps, 0x730, None): [ + b'TC3M-3210X-A-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'PXGW-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXGW-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM4-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM4-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM6-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM7-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'K131-67XK2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'K131-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'TA0B-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'GSH7-67XK2-M\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-N\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'GSH7-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.transmission, 0x7e1, None): [ + b'PXM4-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM6-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXM7-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, +} diff --git a/selfdrive/car/mazda/values.py b/selfdrive/car/mazda/values.py index eb1843e66e..8330ed805b 100644 --- a/selfdrive/car/mazda/values.py +++ b/selfdrive/car/mazda/values.py @@ -1,4 +1,5 @@ from dataclasses import dataclass, field +from enum import StrEnum from typing import Dict, List, Union from cereal import car @@ -25,7 +26,7 @@ class CarControllerParams: pass -class CAR: +class CAR(StrEnum): CX5 = "MAZDA CX-5" CX9 = "MAZDA CX-9" MAZDA3 = "MAZDA 3" @@ -54,7 +55,7 @@ CAR_INFO: Dict[str, Union[MazdaCarInfo, List[MazdaCarInfo]]] = { CAR.MAZDA3: MazdaCarInfo("Mazda 3 2017-18"), CAR.MAZDA6: MazdaCarInfo("Mazda 6 2017-20"), CAR.CX9_2021: MazdaCarInfo("Mazda CX-9 2021-23", video_link="https://youtu.be/dA3duO4a0O4"), - CAR.CX5_2022: MazdaCarInfo("Mazda CX-5 2022-23"), + CAR.CX5_2022: MazdaCarInfo("Mazda CX-5 2022-24"), } @@ -74,274 +75,15 @@ class Buttons: FW_QUERY_CONFIG = FwQueryConfig( requests=[ - Request( - [StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], - [StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], - ), - # Log responses on powertrain bus + # TODO: check data to ensure ABS does not skip ISO-TP frames on bus 0 Request( [StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], [StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], bus=0, - logging=True, ), ], ) -FW_VERSIONS = { - CAR.CX5_2022: { - (Ecu.eps, 0x730, None): [ - b'KSD5-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'PX2G-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2H-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2H-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX85-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'SH54-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXFG-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'K131-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'KSD5-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'GSH7-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-U\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'PYB2-21PS1-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB2-21PS1-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'SH51-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXDL-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXFG-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - CAR.CX5: { - (Ecu.eps, 0x730, None): [ - b'K319-3210X-A-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KCB8-3210X-B-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KJ01-3210X-G-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KJ01-3210X-J-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KJ01-3210X-M-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'PA53-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PAR4-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYFA-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYFC-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYFD-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYNF-188K2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2F-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2G-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2H-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2H-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2H-188K2-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX2K-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX38-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX42-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX68-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'SHKT-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'K123-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'K123-437K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KBJ5-437K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KL2K-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KN0W-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'B61L-67XK2-R\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-V\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-M\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-N\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-R\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'PA66-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PA66-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX39-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX39-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX68-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB1-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB1-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB1-21PS1-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB2-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB2-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB2-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB2-21PS1-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYB2-21PS1-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYNC-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'SH9T-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - - CAR.CX9 : { - (Ecu.eps, 0x730, None): [ - b'K070-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KJ01-3210X-G-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KJ01-3210X-L-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'PX23-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX24-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM4-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXN8-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXN8-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYD7-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYD8-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYFM-188K2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYFM-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'K123-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'TK80-67XK2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'TK80-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'TA0B-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'TK79-437K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'TK79-437K2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'TM53-437K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'TN40-437K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'B61L-67XK2-P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-V\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-K\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'TK80-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'PXM4-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM7-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM7-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYFM-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYFM-21PS1-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYD5-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYD5-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYD6-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYD6-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - - CAR.MAZDA3: { - (Ecu.eps, 0x730, None): [ - b'BHN1-3210X-J-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K070-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'KR11-3210X-K-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - - ], - (Ecu.engine, 0x7e0, None): [ - b'P5JD-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PY2P-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYJW-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYKC-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYKE-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'B63C-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GHP9-67Y10---41\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'B45A-437AS-0-08\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'B61L-67XK2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-Q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'PY2S-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'P52G-21PS1-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYKA-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYKE-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYKE-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - - CAR.MAZDA6: { - (Ecu.eps, 0x730, None): [ - b'GBEF-3210X-B-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GBEF-3210X-C-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GFBC-3210X-A-00\000\000\000\000\000\000\000\000\000', - ], - (Ecu.engine, 0x7e0, None): [ - b'PA34-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PX4F-188K2-D\000\000\000\000\000\000\000\000\000\000\000\000', - b'PYH7-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYH7-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'K131-67XK2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-E\000\000\000\000\000\000\000\000\000\000\000\000', - ], - (Ecu.abs, 0x760, None): [ - b'GBVH-437K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GBVH-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GDDM-437K2-A\000\000\000\000\000\000\000\000\000\000\000\000', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'B61L-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'B61L-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-P\000\000\000\000\000\000\000\000\000\000\000\000', - ], - (Ecu.transmission, 0x7e1, None): [ - b'PA28-21PS1-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PYH3-21PS1-D\000\000\000\000\000\000\000\000\000\000\000\000', - b'PYH7-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - }, - - CAR.CX9_2021 : { - (Ecu.eps, 0x730, None): [ - b'TC3M-3210X-A-00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'PXGW-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM4-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM4-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM6-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXGW-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x764, None): [ - b'K131-67XK2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'K131-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x760, None): [ - b'TA0B-437K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x706, None): [ - b'GSH7-67XK2-M\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-N\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-S\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'GSH7-67XK2-T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.transmission, 0x7e1, None): [ - b'PXM4-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM6-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - ], - } -} - DBC = { CAR.CX5: dbc_dict('mazda_2017', None), diff --git a/selfdrive/car/mock/values.py b/selfdrive/car/mock/values.py index 8426041b32..c6c96579b4 100644 --- a/selfdrive/car/mock/values.py +++ b/selfdrive/car/mock/values.py @@ -1,9 +1,10 @@ +from enum import StrEnum from typing import Dict, List, Optional, Union from openpilot.selfdrive.car.docs_definitions import CarInfo -class CAR: +class CAR(StrEnum): MOCK = 'mock' diff --git a/selfdrive/car/nissan/fingerprints.py b/selfdrive/car/nissan/fingerprints.py new file mode 100644 index 0000000000..69e88be898 --- /dev/null +++ b/selfdrive/car/nissan/fingerprints.py @@ -0,0 +1,104 @@ +# ruff: noqa: E501 +from cereal import car +from openpilot.selfdrive.car.nissan.values import CAR + +Ecu = car.CarParams.Ecu + +FINGERPRINTS = { + CAR.XTRAIL: [{ + 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 520: 2, 523: 6, 548: 8, 645: 8, 658: 8, 665: 8, 666: 8, 674: 2, 682: 8, 683: 8, 689: 8, 723: 8, 758: 3, 768: 2, 783: 3, 851: 8, 855: 8, 1041: 8, 1055: 2, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1111: 4, 1227: 8, 1228: 8, 1247: 4, 1266: 8, 1273: 7, 1342: 1, 1376: 6, 1401: 8, 1474: 2, 1497: 3, 1821: 8, 1823: 8, 1837: 8, 2015: 8, 2016: 8, 2024: 8 + }, + { + 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 520: 2, 523: 6, 527: 1, 548: 8, 637: 4, 645: 8, 658: 8, 665: 8, 666: 8, 674: 2, 682: 8, 683: 8, 689: 8, 723: 8, 758: 3, 768: 6, 783: 3, 851: 8, 855: 8, 1041: 8, 1055: 2, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1111: 4, 1227: 8, 1228: 8, 1247: 4, 1266: 8, 1273: 7, 1342: 1, 1376: 6, 1401: 8, 1474: 8, 1497: 3, 1534: 6, 1792: 8, 1821: 8, 1823: 8, 1837: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 2015: 8, 2016: 8, 2024: 8 + }], + CAR.LEAF: [{ + 2: 5, 42: 6, 264: 3, 361: 8, 372: 8, 384: 8, 389: 8, 403: 8, 459: 7, 460: 4, 470: 8, 520: 1, 569: 8, 581: 8, 634: 7, 640: 8, 644: 8, 645: 8, 646: 5, 658: 8, 682: 8, 683: 8, 689: 8, 724: 6, 758: 3, 761: 2, 783: 3, 852: 8, 853: 8, 856: 8, 861: 8, 944: 1, 976: 6, 1008: 7, 1011: 7, 1057: 3, 1227: 8, 1228: 8, 1261: 5, 1342: 1, 1354: 8, 1361: 8, 1459: 8, 1477: 8, 1497: 3, 1549: 8, 1573: 6, 1821: 8, 1837: 8, 1856: 8, 1859: 8, 1861: 8, 1864: 8, 1874: 8, 1888: 8, 1891: 8, 1893: 8, 1906: 8, 1947: 8, 1949: 8, 1979: 8, 1981: 8, 2016: 8, 2017: 8, 2021: 8, 643: 5, 1792: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8 + }, + { + 2: 5, 42: 8, 264: 3, 361: 8, 372: 8, 384: 8, 389: 8, 403: 8, 459: 7, 460: 4, 470: 8, 520: 1, 569: 8, 581: 8, 634: 7, 640: 8, 643: 5, 644: 8, 645: 8, 646: 5, 658: 8, 682: 8, 683: 8, 689: 8, 724: 6, 758: 3, 761: 2, 772: 8, 773: 6, 774: 7, 775: 8, 776: 6, 777: 7, 778: 6, 783: 3, 852: 8, 853: 8, 856: 8, 861: 8, 943: 8, 944: 1, 976: 6, 1008: 7, 1009: 8, 1010: 8, 1011: 7, 1012: 8, 1013: 8, 1019: 8, 1020: 8, 1021: 8, 1022: 8, 1057: 3, 1227: 8, 1228: 8, 1261: 5, 1342: 1, 1354: 8, 1361: 8, 1402: 8, 1459: 8, 1477: 8, 1497: 3, 1549: 8, 1573: 6, 1821: 8, 1837: 8 + }], + CAR.LEAF_IC: [{ + 2: 5, 42: 6, 264: 3, 282: 8, 361: 8, 372: 8, 384: 8, 389: 8, 403: 8, 459: 7, 460: 4, 470: 8, 520: 1, 569: 8, 581: 8, 634: 7, 640: 8, 643: 5, 644: 8, 645: 8, 646: 5, 658: 8, 682: 8, 683: 8, 689: 8, 756: 5, 758: 3, 761: 2, 783: 3, 830: 2, 852: 8, 853: 8, 856: 8, 861: 8, 943: 8, 944: 1, 1001: 6, 1057: 3, 1227: 8, 1228: 8, 1229: 8, 1342: 1, 1354: 8, 1361: 8, 1459: 8, 1477: 8, 1497: 3, 1514: 6, 1549: 8, 1573: 6, 1792: 8, 1821: 8, 1822: 8, 1837: 8, 1838: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8, 2016: 8, 2017: 8 + }], + CAR.ROGUE: [{ + 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 520: 2, 523: 6, 548: 8, 634: 7, 643: 5, 645: 8, 658: 8, 665: 8, 666: 8, 674: 2, 682: 8, 683: 8, 689: 8, 723: 8, 758: 3, 772: 8, 773: 6, 774: 7, 775: 8, 776: 6, 777: 7, 778: 6, 783: 3, 851: 8, 855: 8, 1041: 8, 1042: 8, 1055: 2, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1110: 7, 1111: 7, 1227: 8, 1228: 8, 1247: 4, 1266: 8, 1273: 7, 1342: 1, 1376: 6, 1401: 8, 1474: 2, 1497: 3, 1534: 7, 1792: 8, 1821: 8, 1823: 8, 1837: 8, 1839: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 + }], + CAR.ALTIMA: [{ + 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 438: 8, 451: 8, 517: 8, 520: 2, 522: 8, 523: 6, 539: 8, 541: 7, 542: 8, 543: 8, 544: 8, 545: 8, 546: 8, 547: 8, 548: 8, 570: 8, 576: 8, 577: 8, 582: 8, 583: 8, 584: 8, 586: 8, 587: 8, 588: 8, 589: 8, 590: 8, 591: 8, 592: 8, 600: 8, 601: 8, 610: 8, 611: 8, 612: 8, 614: 8, 615: 8, 616: 8, 617: 8, 622: 8, 623: 8, 634: 7, 638: 8, 645: 8, 648: 5, 654: 6, 658: 8, 659: 8, 660: 8, 661: 8, 665: 8, 666: 8, 674: 2, 675: 8, 676: 8, 682: 8, 683: 8, 684: 8, 685: 8, 686: 8, 687: 8, 689: 8, 690: 8, 703: 8, 708: 7, 709: 7, 711: 7, 712: 7, 713: 7, 714: 8, 715: 8, 716: 8, 717: 7, 718: 7, 719: 7, 720: 7, 723: 8, 726: 7, 727: 7, 728: 7, 735: 8, 746: 8, 748: 6, 749: 6, 750: 8, 758: 3, 772: 8, 773: 6, 774: 7, 775: 8, 776: 6, 777: 7, 778: 6, 779: 7, 781: 7, 782: 7, 783: 3, 851: 8, 855: 5, 1001: 6, 1041: 8, 1042: 8, 1055: 3, 1100: 7, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1110: 7, 1111: 7, 1144: 7, 1145: 7, 1227: 8, 1228: 8, 1229: 8, 1232: 8, 1247: 4, 1258: 8, 1259: 8, 1266: 8, 1273: 7, 1306: 1, 1314: 8, 1323: 8, 1324: 8, 1342: 1, 1376: 8, 1401: 8, 1454: 8, 1497: 3, 1514: 6, 1526: 8, 1527: 5, 1792: 8, 1821: 8, 1823: 8, 1837: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 + }], +} + +FW_VERSIONS = { + CAR.ALTIMA: { + (Ecu.fwdCamera, 0x707, None): [ + b'284N86CA1D', + ], + (Ecu.eps, 0x742, None): [ + b'6CA2B\xa9A\x02\x02G8A89P90D6A\x00\x00\x01\x80', + ], + (Ecu.engine, 0x7e0, None): [ + b'237109HE2B', + ], + (Ecu.gateway, 0x18dad0f1, None): [ + b'284U29HE0A', + ], + }, + CAR.LEAF: { + (Ecu.abs, 0x740, None): [ + b'476606WK9B', + ], + (Ecu.eps, 0x742, None): [ + b'5SN2A\xb7A\x05\x02N126F\x15\xb2\x00\x00\x00\x00\x00\x00\x00\x80', + ], + (Ecu.fwdCamera, 0x707, None): [ + b'6WK2CDB\x04\x18\x00\x00\x00\x00\x00R=1\x18\x99\x10\x00\x00\x00\x80', + ], + (Ecu.gateway, 0x18dad0f1, None): [ + b'284U26WK0C', + ], + }, + CAR.LEAF_IC: { + (Ecu.fwdCamera, 0x707, None): [ + b'5SH1BDB\x04\x18\x00\x00\x00\x00\x00_-?\x04\x91\xf2\x00\x00\x00\x80', + b'5SH4BDB\x04\x18\x00\x00\x00\x00\x00_-?\x04\x91\xf2\x00\x00\x00\x80', + b'5SK0ADB\x04\x18\x00\x00\x00\x00\x00_(5\x07\x9aQ\x00\x00\x00\x80', + ], + (Ecu.abs, 0x740, None): [ + b'476605SD2E', + b'476605SH1D', + b'476605SK2A', + ], + (Ecu.eps, 0x742, None): [ + b'5SH2A\x99A\x05\x02N123F\x15\x81\x00\x00\x00\x00\x00\x00\x00\x80', + b'5SH2C\xb7A\x05\x02N123F\x15\xa3\x00\x00\x00\x00\x00\x00\x00\x80', + b'5SK3A\x99A\x05\x02N123F\x15u\x00\x00\x00\x00\x00\x00\x00\x80', + ], + (Ecu.gateway, 0x18dad0f1, None): [ + b'284U25SF0C', + b'284U25SH3A', + b'284U25SK2D', + ], + }, + CAR.XTRAIL: { + (Ecu.fwdCamera, 0x707, None): [ + b'284N86FR2A', + ], + (Ecu.abs, 0x740, None): [ + b'6FU0AD\x11\x02\x00\x02e\x95e\x80iQ#\x01\x00\x00\x00\x00\x00\x80', + b'6FU1BD\x11\x02\x00\x02e\x95e\x80iX#\x01\x00\x00\x00\x00\x00\x80', + ], + (Ecu.eps, 0x742, None): [ + b'6FP2A\x99A\x05\x02N123F\x18\x02\x00\x00\x00\x00\x00\x00\x00\x80', + ], + (Ecu.combinationMeter, 0x743, None): [ + b'6FR2A\x18B\x05\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80', + ], + (Ecu.engine, 0x7e0, None): [ + b'6FR9A\xa0A\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80', + b'6FU9B\xa0A\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80', + ], + (Ecu.gateway, 0x18dad0f1, None): [ + b'284U26FR0E', + ], + }, +} diff --git a/selfdrive/car/nissan/values.py b/selfdrive/car/nissan/values.py index 979e09eb66..d064ce894d 100644 --- a/selfdrive/car/nissan/values.py +++ b/selfdrive/car/nissan/values.py @@ -1,5 +1,5 @@ -# ruff: noqa: E501 from dataclasses import dataclass, field +from enum import StrEnum from typing import Dict, List, Optional, Union from cereal import car @@ -21,7 +21,7 @@ class CarControllerParams: pass -class CAR: +class CAR(StrEnum): XTRAIL = "NISSAN X-TRAIL 2017" LEAF = "NISSAN LEAF 2018" # Leaf with ADAS ECU found behind instrument cluster instead of glovebox @@ -45,41 +45,6 @@ CAR_INFO: Dict[str, Optional[Union[NissanCarInfo, List[NissanCarInfo]]]] = { CAR.ALTIMA: NissanCarInfo("Nissan Altima 2019-20", car_parts=CarParts.common([CarHarness.nissan_b])), } -FINGERPRINTS = { - CAR.XTRAIL: [ - { - 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 520: 2, 523: 6, 548: 8, 645: 8, 658: 8, 665: 8, 666: 8, 674: 2, 682: 8, 683: 8, 689: 8, 723: 8, 758: 3, 768: 2, 783: 3, 851: 8, 855: 8, 1041: 8, 1055: 2, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1111: 4, 1227: 8, 1228: 8, 1247: 4, 1266: 8, 1273: 7, 1342: 1, 1376: 6, 1401: 8, 1474: 2, 1497: 3, 1821: 8, 1823: 8, 1837: 8, 2015: 8, 2016: 8, 2024: 8 - }, - { - 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 520: 2, 523: 6, 527: 1, 548: 8, 637: 4, 645: 8, 658: 8, 665: 8, 666: 8, 674: 2, 682: 8, 683: 8, 689: 8, 723: 8, 758: 3, 768: 6, 783: 3, 851: 8, 855: 8, 1041: 8, 1055: 2, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1111: 4, 1227: 8, 1228: 8, 1247: 4, 1266: 8, 1273: 7, 1342: 1, 1376: 6, 1401: 8, 1474: 8, 1497: 3, 1534: 6, 1792: 8, 1821: 8, 1823: 8, 1837: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 2015: 8, 2016: 8, 2024: 8 - }, - ], - CAR.LEAF: [ - { - 2: 5, 42: 6, 264: 3, 361: 8, 372: 8, 384: 8, 389: 8, 403: 8, 459: 7, 460: 4, 470: 8, 520: 1, 569: 8, 581: 8, 634: 7, 640: 8, 644: 8, 645: 8, 646: 5, 658: 8, 682: 8, 683: 8, 689: 8, 724: 6, 758: 3, 761: 2, 783: 3, 852: 8, 853: 8, 856: 8, 861: 8, 944: 1, 976: 6, 1008: 7, 1011: 7, 1057: 3, 1227: 8, 1228: 8, 1261: 5, 1342: 1, 1354: 8, 1361: 8, 1459: 8, 1477: 8, 1497: 3, 1549: 8, 1573: 6, 1821: 8, 1837: 8, 1856: 8, 1859: 8, 1861: 8, 1864: 8, 1874: 8, 1888: 8, 1891: 8, 1893: 8, 1906: 8, 1947: 8, 1949: 8, 1979: 8, 1981: 8, 2016: 8, 2017: 8, 2021: 8, 643: 5, 1792: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8 - }, - # 2020 Leaf SV Plus - { - 2: 5, 42: 8, 264: 3, 361: 8, 372: 8, 384: 8, 389: 8, 403: 8, 459: 7, 460: 4, 470: 8, 520: 1, 569: 8, 581: 8, 634: 7, 640: 8, 643: 5, 644: 8, 645: 8, 646: 5, 658: 8, 682: 8, 683: 8, 689: 8, 724: 6, 758: 3, 761: 2, 772: 8, 773: 6, 774: 7, 775: 8, 776: 6, 777: 7, 778: 6, 783: 3, 852: 8, 853: 8, 856: 8, 861: 8, 943: 8, 944: 1, 976: 6, 1008: 7, 1009: 8, 1010: 8, 1011: 7, 1012: 8, 1013: 8, 1019: 8, 1020: 8, 1021: 8, 1022: 8, 1057: 3, 1227: 8, 1228: 8, 1261: 5, 1342: 1, 1354: 8, 1361: 8, 1402: 8, 1459: 8, 1477: 8, 1497: 3, 1549: 8, 1573: 6, 1821: 8, 1837: 8 - }, - ], - CAR.LEAF_IC: [ - { - 2: 5, 42: 6, 264: 3, 282: 8, 361: 8, 372: 8, 384: 8, 389: 8, 403: 8, 459: 7, 460: 4, 470: 8, 520: 1, 569: 8, 581: 8, 634: 7, 640: 8, 643: 5, 644: 8, 645: 8, 646: 5, 658: 8, 682: 8, 683: 8, 689: 8, 756: 5, 758: 3, 761: 2, 783: 3, 830: 2, 852: 8, 853: 8, 856: 8, 861: 8, 943: 8, 944: 1, 1001: 6, 1057: 3, 1227: 8, 1228: 8, 1229: 8, 1342: 1, 1354: 8, 1361: 8, 1459: 8, 1477: 8, 1497: 3, 1514: 6, 1549: 8, 1573: 6, 1792: 8, 1821: 8, 1822: 8, 1837: 8, 1838: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8, 2016: 8, 2017: 8 - }, - ], - CAR.ROGUE: [ - { - 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 520: 2, 523: 6, 548: 8, 634: 7, 643: 5, 645: 8, 658: 8, 665: 8, 666: 8, 674: 2, 682: 8, 683: 8, 689: 8, 723: 8, 758: 3, 772: 8, 773: 6, 774: 7, 775: 8, 776: 6, 777: 7, 778: 6, 783: 3, 851: 8, 855: 8, 1041: 8, 1042: 8, 1055: 2, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1110: 7, 1111: 7, 1227: 8, 1228: 8, 1247: 4, 1266: 8, 1273: 7, 1342: 1, 1376: 6, 1401: 8, 1474: 2, 1497: 3, 1534: 7, 1792: 8, 1821: 8, 1823: 8, 1837: 8, 1839: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 - }, - ], - CAR.ALTIMA: [ - { - 2: 5, 42: 6, 346: 6, 347: 5, 348: 8, 349: 7, 361: 8, 386: 8, 389: 8, 397: 8, 398: 8, 403: 8, 438: 8, 451: 8, 517: 8, 520: 2, 522: 8, 523: 6, 539: 8, 541: 7, 542: 8, 543: 8, 544: 8, 545: 8, 546: 8, 547: 8, 548: 8, 570: 8, 576: 8, 577: 8, 582: 8, 583: 8, 584: 8, 586: 8, 587: 8, 588: 8, 589: 8, 590: 8, 591: 8, 592: 8, 600: 8, 601: 8, 610: 8, 611: 8, 612: 8, 614: 8, 615: 8, 616: 8, 617: 8, 622: 8, 623: 8, 634: 7, 638: 8, 645: 8, 648: 5, 654: 6, 658: 8, 659: 8, 660: 8, 661: 8, 665: 8, 666: 8, 674: 2, 675: 8, 676: 8, 682: 8, 683: 8, 684: 8, 685: 8, 686: 8, 687: 8, 689: 8, 690: 8, 703: 8, 708: 7, 709: 7, 711: 7, 712: 7, 713: 7, 714: 8, 715: 8, 716: 8, 717: 7, 718: 7, 719: 7, 720: 7, 723: 8, 726: 7, 727: 7, 728: 7, 735: 8, 746: 8, 748: 6, 749: 6, 750: 8, 758: 3, 772: 8, 773: 6, 774: 7, 775: 8, 776: 6, 777: 7, 778: 6, 779: 7, 781: 7, 782: 7, 783: 3, 851: 8, 855: 5, 1001: 6, 1041: 8, 1042: 8, 1055: 3, 1100: 7, 1104: 4, 1105: 6, 1107: 4, 1108: 8, 1110: 7, 1111: 7, 1144: 7, 1145: 7, 1227: 8, 1228: 8, 1229: 8, 1232: 8, 1247: 4, 1258: 8, 1259: 8, 1266: 8, 1273: 7, 1306: 1, 1314: 8, 1323: 8, 1324: 8, 1342: 1, 1376: 8, 1401: 8, 1454: 8, 1497: 3, 1514: 6, 1526: 8, 1527: 5, 1792: 8, 1821: 8, 1823: 8, 1837: 8, 1872: 8, 1937: 8, 1953: 8, 1968: 8, 1988: 8, 2000: 8, 2001: 8, 2004: 8, 2005: 8, 2015: 8, 2016: 8, 2017: 8, 2024: 8, 2025: 8 - }, - ] -} - # Default diagnostic session NISSAN_DIAGNOSTIC_REQUEST_KWP = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL, 0x81]) NISSAN_DIAGNOSTIC_RESPONSE_KWP = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL + 0x40, 0x81]) @@ -94,104 +59,37 @@ NISSAN_VERSION_RESPONSE_KWP = b'\x61\x83' NISSAN_RX_OFFSET = 0x20 FW_QUERY_CONFIG = FwQueryConfig( - requests=[ + requests=[request for bus, logging in ((0, False), (1, True)) for request in [ Request( [NISSAN_DIAGNOSTIC_REQUEST_KWP, NISSAN_VERSION_REQUEST_KWP], [NISSAN_DIAGNOSTIC_RESPONSE_KWP, NISSAN_VERSION_RESPONSE_KWP], + bus=bus, + logging=logging, ), Request( [NISSAN_DIAGNOSTIC_REQUEST_KWP, NISSAN_VERSION_REQUEST_KWP], [NISSAN_DIAGNOSTIC_RESPONSE_KWP, NISSAN_VERSION_RESPONSE_KWP], rx_offset=NISSAN_RX_OFFSET, + bus=bus, + logging=logging, ), # Rogue's engine solely responds to this Request( [NISSAN_DIAGNOSTIC_REQUEST_KWP_2, NISSAN_VERSION_REQUEST_KWP], [NISSAN_DIAGNOSTIC_RESPONSE_KWP_2, NISSAN_VERSION_RESPONSE_KWP], + bus=bus, + logging=logging, ), Request( [StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], [StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], rx_offset=NISSAN_RX_OFFSET, + bus=bus, + logging=logging, ), - ], + ]], ) -FW_VERSIONS = { - CAR.ALTIMA: { - (Ecu.fwdCamera, 0x707, None): [ - b'284N86CA1D', - ], - (Ecu.eps, 0x742, None): [ - b'6CA2B\xa9A\x02\x02G8A89P90D6A\x00\x00\x01\x80', - ], - (Ecu.engine, 0x7e0, None): [ - b'237109HE2B', - ], - (Ecu.gateway, 0x18dad0f1, None): [ - b'284U29HE0A', - ], - }, - CAR.LEAF: { - (Ecu.abs, 0x740, None): [ - b'476606WK9B', - ], - (Ecu.eps, 0x742, None): [ - b'5SN2A\xb7A\x05\x02N126F\x15\xb2\x00\x00\x00\x00\x00\x00\x00\x80', - ], - (Ecu.fwdCamera, 0x707, None): [ - b'6WK2CDB\x04\x18\x00\x00\x00\x00\x00R=1\x18\x99\x10\x00\x00\x00\x80', - ], - (Ecu.gateway, 0x18dad0f1, None): [ - b'284U26WK0C', - ], - }, - CAR.LEAF_IC: { - (Ecu.fwdCamera, 0x707, None): [ - b'5SH1BDB\x04\x18\x00\x00\x00\x00\x00_-?\x04\x91\xf2\x00\x00\x00\x80', - b'5SK0ADB\x04\x18\x00\x00\x00\x00\x00_(5\x07\x9aQ\x00\x00\x00\x80', - b'5SH4BDB\x04\x18\x00\x00\x00\x00\x00_-?\x04\x91\xf2\x00\x00\x00\x80', - ], - (Ecu.abs, 0x740, None): [ - b'476605SH1D', - b'476605SK2A', - b'476605SD2E', - ], - (Ecu.eps, 0x742, None): [ - b'5SH2A\x99A\x05\x02N123F\x15\x81\x00\x00\x00\x00\x00\x00\x00\x80', - b'5SK3A\x99A\x05\x02N123F\x15u\x00\x00\x00\x00\x00\x00\x00\x80', - b'5SH2C\xb7A\x05\x02N123F\x15\xa3\x00\x00\x00\x00\x00\x00\x00\x80', - ], - (Ecu.gateway, 0x18dad0f1, None): [ - b'284U25SH3A', - b'284U25SK2D', - b'284U25SF0C', - ], - }, - CAR.XTRAIL: { - (Ecu.fwdCamera, 0x707, None): [ - b'284N86FR2A', - ], - (Ecu.abs, 0x740, None): [ - b'6FU1BD\x11\x02\x00\x02e\x95e\x80iX#\x01\x00\x00\x00\x00\x00\x80', - b'6FU0AD\x11\x02\x00\x02e\x95e\x80iQ#\x01\x00\x00\x00\x00\x00\x80', - ], - (Ecu.eps, 0x742, None): [ - b'6FP2A\x99A\x05\x02N123F\x18\x02\x00\x00\x00\x00\x00\x00\x00\x80', - ], - (Ecu.combinationMeter, 0x743, None): [ - b'6FR2A\x18B\x05\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80', - ], - (Ecu.engine, 0x7e0, None): [ - b'6FU9B\xa0A\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80', - b'6FR9A\xa0A\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80', - ], - (Ecu.gateway, 0x18dad0f1, None): [ - b'284U26FR0E', - ], - }, -} - DBC = { CAR.XTRAIL: dbc_dict('nissan_x_trail_2017_generated', None), CAR.LEAF: dbc_dict('nissan_leaf_2018_generated', None), diff --git a/selfdrive/car/subaru/carcontroller.py b/selfdrive/car/subaru/carcontroller.py index 6c22b75103..df7447269c 100644 --- a/selfdrive/car/subaru/carcontroller.py +++ b/selfdrive/car/subaru/carcontroller.py @@ -5,7 +5,8 @@ from openpilot.common.params import Params from opendbc.can.packer import CANPacker from openpilot.selfdrive.car import apply_driver_steer_torque_limits, common_fault_avoidance from openpilot.selfdrive.car.subaru import subarucan -from openpilot.selfdrive.car.subaru.values import DBC, GLOBAL_GEN2, PREGLOBAL_CARS, HYBRID_CARS, STEER_RATE_LIMITED, CanBus, CarControllerParams, SubaruFlags, SubaruFlagsSP +from openpilot.selfdrive.car.subaru.values import DBC, GLOBAL_ES_ADDR, GLOBAL_GEN2, PREGLOBAL_CARS, HYBRID_CARS, STEER_RATE_LIMITED, \ + CanBus, CarControllerParams, SubaruFlags, SubaruFlagsSP # FIXME: These limits aren't exact. The real limit is more than likely over a larger time period and # involves the total steering angle change rather than rate, but these limits work well for now @@ -27,11 +28,10 @@ class CarController: self.param_s = Params() + self.subaru_sng = False if CP.spFlags & SubaruFlagsSP.SP_SUBARU_SNG: self.subaru_sng = True self.manual_parking_brake = self.param_s.get_bool("SubaruManualParkingBrakeSng") - self.throttle_cnt = -1 - self.brake_pedal_cnt = -1 self.prev_close_distance = 0 self.prev_standstill = False self.standstill_start = 0 @@ -120,12 +120,12 @@ class CarController: can_sends.append(subarucan.create_preglobal_es_distance(self.packer, cruise_button, CS.es_distance_msg)) if self.subaru_sng: - can_sends.append(subarucan.create_preglobal_throttle(self.packer, CS.throttle_msg, throttle_cmd)) + 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, self.CP.openpilotLongitudinalControl, - CC.longActive, hud_control.leadVisible)) + can_sends.append(subarucan.create_es_dashstatus(self.packer, self.frame // 10, CS.es_dashstatus_msg, CC.enabled, + self.CP.openpilotLongitudinalControl, CC.longActive, hud_control.leadVisible)) can_sends.append(subarucan.create_es_lkas_state(self.packer, self.frame // 10, CS.es_lkas_state_msg, CC.latActive, CS.madsEnabled, hud_control.visualAlert, hud_control.leftLaneVisible, hud_control.rightLaneVisible, @@ -135,17 +135,18 @@ class CarController: can_sends.append(subarucan.create_es_infotainment(self.packer, self.frame // 10, CS.es_infotainment_msg, hud_control.visualAlert)) if self.subaru_sng: - can_sends.append(subarucan.create_throttle(self.packer, CS.throttle_msg, throttle_cmd)) + 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, CS.brake_pedal_msg, speed_cmd, pcm_cancel_cmd)) + 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, self.CP.openpilotLongitudinalControl, CC.longActive, cruise_rpm)) - can_sends.append(subarucan.create_es_brake(self.packer, self.frame // 5, CS.es_brake_msg, CC.enabled, cruise_brake)) + can_sends.append(subarucan.create_es_brake(self.packer, self.frame // 5, CS.es_brake_msg, + self.CP.openpilotLongitudinalControl, CC.longActive, cruise_brake)) can_sends.append(subarucan.create_es_distance(self.packer, self.frame // 5, CS.es_distance_msg, 0, pcm_cancel_cmd, self.CP.openpilotLongitudinalControl, cruise_brake > 0, cruise_throttle)) @@ -155,6 +156,21 @@ class CarController: bus = CanBus.alt if self.CP.carFingerprint in GLOBAL_GEN2 else CanBus.main can_sends.append(subarucan.create_es_distance(self.packer, CS.es_distance_msg["COUNTER"] + 1, CS.es_distance_msg, bus, pcm_cancel_cmd)) + if self.CP.flags & SubaruFlags.DISABLE_EYESIGHT: + # Tester present (keeps eyesight disabled) + if self.frame % 100 == 0: + can_sends.append([GLOBAL_ES_ADDR, 0, b"\x02\x3E\x80\x00\x00\x00\x00\x00", CanBus.camera]) + + # Create all of the other eyesight messages to keep the rest of the car happy when eyesight is disabled + if self.frame % 5 == 0: + can_sends.append(subarucan.create_es_highbeamassist(self.packer)) + + if self.frame % 10 == 0: + can_sends.append(subarucan.create_es_static_1(self.packer)) + + if self.frame % 2 == 0: + can_sends.append(subarucan.create_es_static_2(self.packer)) + new_actuators = actuators.copy() new_actuators.steer = self.apply_steer_last / self.p.STEER_MAX new_actuators.steerOutputCan = self.apply_steer_last diff --git a/selfdrive/car/subaru/carstate.py b/selfdrive/car/subaru/carstate.py index aa4e8acc8f..036dcbcd49 100644 --- a/selfdrive/car/subaru/carstate.py +++ b/selfdrive/car/subaru/carstate.py @@ -36,7 +36,7 @@ class CarState(CarStateBase): brake_msg = "ES_Brake" if self.car_fingerprint in PREGLOBAL_CARS else "ES_DashStatus" brake_sig = "Cruise_Brake_Lights" if self.car_fingerprint in PREGLOBAL_CARS else "Brake_Lights" - ret.brakeLights = bool(cp_cam.vl[brake_msg][brake_sig]) + ret.brakeLightsDEPRECATED = bool(cp_cam.vl[brake_msg][brake_sig]) cp_wheels = cp_body if self.car_fingerprint in GLOBAL_GEN2 else cp ret.wheelSpeeds = self.get_wheel_speeds( diff --git a/selfdrive/car/subaru/fingerprints.py b/selfdrive/car/subaru/fingerprints.py new file mode 100644 index 0000000000..ad8ebe87cd --- /dev/null +++ b/selfdrive/car/subaru/fingerprints.py @@ -0,0 +1,547 @@ +from cereal import car +from openpilot.selfdrive.car.subaru.values import CAR + +Ecu = car.CarParams.Ecu + +FW_VERSIONS = { + CAR.ASCENT: { + (Ecu.abs, 0x7b0, None): [ + b'\xa5 \x19\x02\x00', + b'\xa5 !\x02\x00', + ], + (Ecu.eps, 0x746, None): [ + b'\x05\xc0\xd0\x00', + b'\x85\xc0\xd0\x00', + b'\x95\xc0\xd0\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00d\xb9\x00\x00\x00\x00', + b'\x00\x00d\xb9\x1f@ \x10', + b'\x00\x00e@\x00\x00\x00\x00', + b'\x00\x00e@\x1f@ $', + b"\x00\x00e~\x1f@ '", + ], + (Ecu.engine, 0x7e0, None): [ + b'\xbb,\xa0t\x07', + b'\xd1,\xa0q\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\x00\xfe\xf7\x00\x00', + b'\x01\xfe\xf7\x00\x00', + b'\x01\xfe\xf9\x00\x00', + b'\x01\xfe\xfa\x00\x00', + ], + }, + CAR.ASCENT_2023: { + (Ecu.abs, 0x7b0, None): [ + b'\xa5 #\x03\x00', + ], + (Ecu.eps, 0x746, None): [ + b'%\xc0\xd0\x11', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x05!\x08\x1dK\x05!\x08\x01/', + ], + (Ecu.engine, 0x7a2, None): [ + b'\xe5,\xa0P\x07', + ], + (Ecu.transmission, 0x7a3, None): [ + b'\x04\xfe\xf3\x00\x00', + ], + }, + CAR.LEGACY: { + (Ecu.abs, 0x7b0, None): [ + b'\xa1 \x02\x01', + b'\xa1 \x02\x02', + b'\xa1 \x03\x03', + b'\xa1 \x04\x01', + ], + (Ecu.eps, 0x746, None): [ + b'\x9b\xc0\x11\x00', + b'\x9b\xc0\x11\x02', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00e\x80\x00\x1f@ \x19\x00', + b'\x00\x00e\x9a\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xde"a0\x07', + b'\xde,\xa0@\x07', + b'\xe2"aq\x07', + b'\xe2,\xa0@\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xa5\xf6\x05@\x00', + b'\xa5\xfe\xc7@\x00', + b'\xa7\xf6\x04@\x00', + b'\xa7\xfe\xc4@\x00', + ], + }, + CAR.IMPREZA: { + (Ecu.abs, 0x7b0, None): [ + b'z\x84\x19\x90\x00', + b'z\x94\x08\x90\x00', + b'z\x94\x08\x90\x01', + b'z\x94\x0c\x90\x00', + b'z\x94\x0c\x90\x01', + b'z\x94.\x90\x00', + b'z\x94?\x90\x00', + b'z\x9c\x19\x80\x01', + b'\xa2 \x185\x00', + b'\xa2 \x193\x00', + b'\xa2 \x194\x00', + b'\xa2 \x19`\x00', + ], + (Ecu.eps, 0x746, None): [ + b'z\xc0\x00\x00', + b'z\xc0\x04\x00', + b'z\xc0\x08\x00', + b'z\xc0\n\x00', + b'z\xc0\x0c\x00', + b'\x8a\xc0\x00\x00', + b'\x8a\xc0\x10\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00c\xf4\x00\x00\x00\x00', + b'\x00\x00c\xf4\x1f@ \x07', + b'\x00\x00d)\x00\x00\x00\x00', + b'\x00\x00d)\x1f@ \x07', + b'\x00\x00dd\x00\x00\x00\x00', + b'\x00\x00dd\x1f@ \x0e', + b'\x00\x00d\xb5\x1f@ \x0e', + b'\x00\x00d\xdc\x00\x00\x00\x00', + b'\x00\x00d\xdc\x1f@ \x0e', + b'\x00\x00e\x02\x1f@ \x14', + b'\x00\x00e\x1c\x00\x00\x00\x00', + b'\x00\x00e\x1c\x1f@ \x14', + b'\x00\x00e+\x00\x00\x00\x00', + b'\x00\x00e+\x1f@ \x14', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xaa\x00Bu\x07', + b'\xaa\x01bt\x07', + b'\xaa!`u\x07', + b'\xaa!au\x07', + b'\xaa!av\x07', + b'\xaa!aw\x07', + b'\xaa!dq\x07', + b'\xaa!ds\x07', + b'\xaa!dt\x07', + b'\xaaafs\x07', + b'\xbe!as\x07', + b'\xbe!at\x07', + b'\xbeacr\x07', + b'\xc5!`r\x07', + b'\xc5!`s\x07', + b'\xc5!ap\x07', + b'\xc5!ar\x07', + b'\xc5!as\x07', + b'\xc5!dr\x07', + b'\xc5!ds\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xe3\xd0\x081\x00', + b'\xe3\xd5\x161\x00', + b'\xe3\xe5F1\x00', + b'\xe3\xf5\x06\x00\x00', + b'\xe3\xf5\x07\x00\x00', + b'\xe3\xf5C\x00\x00', + b'\xe3\xf5F\x00\x00', + b'\xe3\xf5G\x00\x00', + b'\xe4\xe5\x061\x00', + b'\xe4\xf5\x02\x00\x00', + b'\xe4\xf5\x07\x00\x00', + b'\xe5\xf5\x04\x00\x00', + b'\xe5\xf5$\x00\x00', + b'\xe5\xf5B\x00\x00', + ], + }, + CAR.IMPREZA_2020: { + (Ecu.abs, 0x7b0, None): [ + b'\xa2 \x193\x00', + b'\xa2 \x194\x00', + b'\xa2 `\x00', + b'\xa2 !3\x00', + b'\xa2 !`\x00', + b'\xa2 !i\x00', + ], + (Ecu.eps, 0x746, None): [ + b'\n\xc0\x04\x00', + b'\n\xc0\x04\x01', + b'\x9a\xc0\x00\x00', + b'\x9a\xc0\x04\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00eb\x1f@ "', + b'\x00\x00eq\x00\x00\x00\x00', + b'\x00\x00eq\x1f@ "', + b'\x00\x00e\x8f\x00\x00\x00\x00', + b'\x00\x00e\x8f\x1f@ )', + b'\x00\x00e\x92\x00\x00\x00\x00', + b'\x00\x00e\xa4\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xca!`0\x07', + b'\xca!`p\x07', + b'\xca!ap\x07', + b'\xca!f@\x07', + b'\xca!fp\x07', + b'\xcc!`p\x07', + b'\xcc!fp\x07', + b'\xcc"f0\x07', + b'\xe6!`@\x07', + b'\xe6!fp\x07', + b'\xe6"f0\x07', + b'\xe6"fp\x07', + b'\xf3"f@\x07', + b'\xf3"fp\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xe6\xf5\x04\x00\x00', + b'\xe6\xf5$\x00\x00', + b'\xe6\xf5D0\x00', + b'\xe7\xf5\x04\x00\x00', + b'\xe7\xf5D0\x00', + b'\xe7\xf6B0\x00', + b'\xe9\xf5"\x00\x00', + b'\xe9\xf5B0\x00', + b'\xe9\xf6B0\x00', + b'\xe9\xf6F0\x00', + ], + }, + CAR.CROSSTREK_HYBRID: { + (Ecu.abs, 0x7b0, None): [ + b'\xa2 \x19e\x01', + b'\xa2 !e\x01', + ], + (Ecu.eps, 0x746, None): [ + b'\n\xc2\x01\x00', + b'\x9a\xc2\x01\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00el\x1f@ #', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xd7!`@\x07', + b'\xd7!`p\x07', + b'\xf4!`0\x07', + ], + }, + CAR.FORESTER: { + (Ecu.abs, 0x7b0, None): [ + b'\xa3 \x18\x14\x00', + b'\xa3 \x18&\x00', + b'\xa3 \x19\x14\x00', + b'\xa3 \x19&\x00', + b'\xa3 \x14\x00', + b'\xa3 \x14\x01', + ], + (Ecu.eps, 0x746, None): [ + b'\x8d\xc0\x00\x00', + b'\x8d\xc0\x04\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00e!\x00\x00\x00\x00', + b'\x00\x00e!\x1f@ \x11', + b'\x00\x00e^\x00\x00\x00\x00', + b'\x00\x00e^\x1f@ !', + b'\x00\x00e`\x1f@ ', + b'\x00\x00e\x97\x00\x00\x00\x00', + b'\x00\x00e\x97\x1f@ 0', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xb6"`A\x07', + b'\xb6\xa2`A\x07', + b'\xcb"`@\x07', + b'\xcb"`p\x07', + b'\xcf"`0\x07', + b'\xcf"`p\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\x1a\xe6B1\x00', + b'\x1a\xe6F1\x00', + b'\x1a\xf6B0\x00', + b'\x1a\xf6B`\x00', + b'\x1a\xf6F`\x00', + b'\x1a\xf6b0\x00', + b'\x1a\xf6b`\x00', + ], + }, + CAR.FORESTER_HYBRID: { + (Ecu.abs, 0x7b0, None): [ + b'\xa3 \x19T\x00', + ], + (Ecu.eps, 0x746, None): [ + b'\x8d\xc2\x00\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00eY\x1f@ !', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xd2\xa1`r\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\x1b\xa7@a\x00', + ], + }, + CAR.FORESTER_PREGLOBAL: { + (Ecu.abs, 0x7b0, None): [ + b'm\x97\x14@', + b'}\x97\x14@', + ], + (Ecu.eps, 0x746, None): [ + b'm\xc0\x10\x00', + b'}\xc0\x10\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00c\xe9\x00\x00\x00\x00', + b'\x00\x00c\xe9\x1f@ \x03', + b'\x00\x00d5\x1f@ \t', + b'\x00\x00d\xd3\x1f@ \t', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xa7"@p\x07', + b'\xa7)\xa0q\x07', + b'\xba"@@\x07', + b'\xba"@p\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\x1a\xf6F`\x00', + b'\xda\xf2`\x80\x00', + b'\xda\xfd\xe0\x80\x00', + b'\xdc\xf2@`\x00', + b'\xdc\xf2``\x00', + b'\xdc\xf2`\x80\x00', + b'\xdc\xf2`\x81\x00', + ], + }, + CAR.LEGACY_PREGLOBAL: { + (Ecu.abs, 0x7b0, None): [ + b'[\x97D\x00', + b'[\xba\xc4\x03', + b'k\x97D\x00', + b'k\x9aD\x00', + b'{\x97D\x00', + ], + (Ecu.eps, 0x746, None): [ + b'K\xb0\x00\x01', + b'[\xb0\x00\x01', + b'k\xb0\x00\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00c\x94\x1f@\x10\x08', + b'\x00\x00c\xb7\x1f@\x10\x16', + b'\x00\x00c\xec\x1f@ \x04', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xa0"@q\x07', + b'\xa0+@p\x07', + b'\xab*@r\x07', + b'\xab+@p\x07', + b'\xb4"@0\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xbd\xf2\x00`\x00', + b'\xbe\xf2\x00p\x00', + b'\xbe\xfb\xc0p\x00', + b'\xbf\xf2\x00\x80\x00', + b'\xbf\xfb\xc0\x80\x00', + ], + }, + CAR.OUTBACK_PREGLOBAL: { + (Ecu.abs, 0x7b0, None): [ + b'[\xba\xac\x03', + b'[\xf7\xac\x00', + b'[\xf7\xac\x03', + b'[\xf7\xbc\x03', + b'k\x97\xac\x00', + b'k\x9a\xac\x00', + b'{\x97\xac\x00', + b'{\x9a\xac\x00', + ], + (Ecu.eps, 0x746, None): [ + b'K\xb0\x00\x00', + b'K\xb0\x00\x02', + b'[\xb0\x00\x00', + b'k\xb0\x00\x00', + b'{\xb0\x00\x01', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00c\x90\x1f@\x10\x0e', + b'\x00\x00c\x94\x00\x00\x00\x00', + b'\x00\x00c\x94\x1f@\x10\x08', + b'\x00\x00c\xb7\x1f@\x10\x16', + b'\x00\x00c\xd1\x1f@\x10\x17', + b'\x00\x00c\xec\x1f@ \x04', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xa0"@\x80\x07', + b'\xa0*@q\x07', + b'\xa0*@u\x07', + b'\xa0+@@\x07', + b'\xa0bAq\x07', + b'\xab"@@\x07', + b'\xab"@s\x07', + b'\xab*@@\x07', + b'\xab+@@\x07', + b'\xb4"@0\x07', + b'\xb4"@p\x07', + b'\xb4"@r\x07', + b'\xb4+@p\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xbd\xf2@`\x00', + b'\xbd\xf2@\x81\x00', + b'\xbd\xfb\xe0\x80\x00', + b'\xbe\xf2@p\x00', + b'\xbe\xf2@\x80\x00', + b'\xbe\xfb\xe0p\x00', + b'\xbf\xe2@\x80\x00', + b'\xbf\xf2@\x80\x00', + b'\xbf\xfb\xe0b\x00', + ], + }, + CAR.OUTBACK_PREGLOBAL_2018: { + (Ecu.abs, 0x7b0, None): [ + b'\x8b\x97\xac\x00', + b'\x8b\x97\xbc\x00', + b'\x8b\x99\xac\x00', + b'\x8b\x9a\xac\x00', + b'\x9b\x97\xac\x00', + b'\x9b\x97\xbe\x10', + b'\x9b\x9a\xac\x00', + ], + (Ecu.eps, 0x746, None): [ + b'{\xb0\x00\x00', + b'{\xb0\x00\x01', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00df\x1f@ \n', + b'\x00\x00d\x95\x00\x00\x00\x00', + b'\x00\x00d\x95\x1f@ \x0f', + b'\x00\x00d\xfe\x00\x00\x00\x00', + b'\x00\x00d\xfe\x1f@ \x15', + b'\x00\x00e\x19\x1f@ \x15', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xb5"@P\x07', + b'\xb5"@p\x07', + b'\xb5+@@\x07', + b'\xb5b@1\x07', + b'\xb5q\xe0@\x07', + b'\xc4"@0\x07', + b'\xc4+@0\x07', + b'\xc4b@p\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xbb\xf2@`\x00', + b'\xbb\xfb\xe0`\x00', + b'\xbc\xaf\xe0`\x00', + b'\xbc\xe2@\x80\x00', + b'\xbc\xf2@\x80\x00', + b'\xbc\xf2@\x81\x00', + b'\xbc\xfb\xe0`\x00', + b'\xbc\xfb\xe0\x80\x00', + ], + }, + CAR.OUTBACK: { + (Ecu.abs, 0x7b0, None): [ + b'\xa1 \x06\x00', + b'\xa1 \x06\x01', + b'\xa1 \x06\x02', + b'\xa1 \x07\x00', + b'\xa1 \x07\x02', + b'\xa1 \x07\x03', + b'\xa1 \x08\x00', + b'\xa1 \x08\x01', + b'\xa1 \x08\x02', + b'\xa1 "\t\x00', + b'\xa1 "\t\x01', + ], + (Ecu.eps, 0x746, None): [ + b'\x1b\xc0\x10\x00', + b'\x9b\xc0\x10\x00', + b'\x9b\xc0\x10\x02', + b'\x9b\xc0 \x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x00\x00eJ\x00\x00\x00\x00\x00\x00', + b'\x00\x00eJ\x00\x1f@ \x19\x00', + b'\x00\x00e\x80\x00\x1f@ \x19\x00', + b'\x00\x00e\x9a\x00\x00\x00\x00\x00\x00', + b'\x00\x00e\x9a\x00\x1f@ 1\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xbc"`@\x07', + b'\xbc"`q\x07', + b'\xbc,\xa0q\x07', + b'\xbc,\xa0u\x07', + b'\xde"`0\x07', + b'\xde,\xa0@\x07', + b'\xe2"`0\x07', + b'\xe2"`p\x07', + b'\xe2"`q\x07', + b'\xe3,\xa0@\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xa5\xf6D@\x00', + b'\xa5\xfe\xf6@\x00', + b'\xa5\xfe\xf7@\x00', + b'\xa5\xfe\xf8@\x00', + b'\xa7\x8e\xf40\x00', + b'\xa7\xf6D@\x00', + b'\xa7\xfe\xf4@\x00', + ], + }, + CAR.FORESTER_2022: { + (Ecu.abs, 0x7b0, None): [ + b'\xa3 !v\x00', + b'\xa3 !x\x00', + b'\xa3 "v\x00', + b'\xa3 "x\x00', + ], + (Ecu.eps, 0x746, None): [ + b'-\xc0\x040', + b'-\xc0%0', + b'=\xc0%\x02', + b'=\xc04\x02', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\x04!\x01\x1eD\x07!\x00\x04,', + b'\x04!\x08\x01.\x07!\x08\x022', + ], + (Ecu.engine, 0x7e0, None): [ + b'\xd5"`0\x07', + b'\xd5"a0\x07', + b'\xf1"`q\x07', + b'\xf1"aq\x07', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\x1d\x86B0\x00', + b'\x1d\xf6B0\x00', + b'\x1e\x86B0\x00', + b'\x1e\xf6D0\x00', + ], + }, + CAR.OUTBACK_2023: { + (Ecu.abs, 0x7b0, None): [ + b'\xa1 #\x14\x00', + b'\xa1 #\x17\x00', + ], + (Ecu.eps, 0x746, None): [ + b'+\xc0\x10\x11\x00', + b'+\xc0\x12\x11\x00', + ], + (Ecu.fwdCamera, 0x787, None): [ + b'\t!\x08\x046\x05!\x08\x01/', + ], + (Ecu.engine, 0x7a2, None): [ + b'\xed,\xa0q\x07', + b'\xed,\xa2q\x07', + ], + (Ecu.transmission, 0x7a3, None): [ + b'\xa8\x8e\xf41\x00', + b'\xa8\xfe\xf41\x00', + ], + }, +} diff --git a/selfdrive/car/subaru/interface.py b/selfdrive/car/subaru/interface.py index 0780ee4351..069338bb4b 100644 --- a/selfdrive/car/subaru/interface.py +++ b/selfdrive/car/subaru/interface.py @@ -1,8 +1,9 @@ from cereal import car from panda import Panda from openpilot.selfdrive.car import get_safety_config, create_mads_event +from openpilot.selfdrive.car.disable_ecu import disable_ecu from openpilot.selfdrive.car.interfaces import CarInterfaceBase -from openpilot.selfdrive.car.subaru.values import CAR, LKAS_ANGLE, GLOBAL_GEN2, PREGLOBAL_CARS, HYBRID_CARS, SubaruFlags, SubaruFlagsSP +from openpilot.selfdrive.car.subaru.values import CAR, GLOBAL_ES_ADDR, LKAS_ANGLE, GLOBAL_GEN2, PREGLOBAL_CARS, HYBRID_CARS, SubaruFlags, SubaruFlagsSP ButtonType = car.CarState.ButtonEvent.Type EventName = car.CarEvent.EventName @@ -72,7 +73,7 @@ class CarInterface(CarInterfaceBase): # Certain Impreza / Crosstrek EPS use 3071 max value and do not work with stock value/scaling. if any(fw.ecu == "eps" and fw.fwVersion in (b'z\xc0\x00\x00', b'z\xc0\x04\x00', b'z\xc0\x08\x00', b'\x8a\xc0\x00\x00', b'\x8a\xc0\x10\x00') for fw in car_fw): - ret.safetyConfigs[0].safetyParam = Panda.FLAG_SUBARU_MAX_STEER_IMPREZA_2018 + ret.safetyConfigs[0].safetyParam |= Panda.FLAG_SUBARU_MAX_STEER_IMPREZA_2018 ret.steerActuatorDelay = 0.18 # measured ret.lateralTuning.pid.kf = 0.00003333 ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.133, 0.2], [0.0133, 0.02]] @@ -112,7 +113,7 @@ class CarInterface(CarInterfaceBase): ret.steerActuatorDelay = 0.1 elif candidate in (CAR.FORESTER_PREGLOBAL, CAR.OUTBACK_PREGLOBAL_2018): - ret.safetyConfigs[0].safetyParam = Panda.FLAG_SUBARU_LEGACY_FLIP_DRIVER_TORQUE # Outback 2018-2019 and Forester have reversed driver torque signal + ret.safetyConfigs[0].safetyParam |= Panda.FLAG_SUBARU_PREGLOBAL_REVERSED_DRIVER_TORQUE # Outback 2018-2019 and Forester have reversed driver torque signal ret.mass = 1568 ret.wheelbase = 2.67 ret.centerToFront = ret.wheelbase * 0.5 @@ -133,9 +134,12 @@ class CarInterface(CarInterfaceBase): else: raise ValueError(f"unknown car: {candidate}") - #ret.experimentalLongitudinalAvailable = candidate not in (GLOBAL_GEN2 | PREGLOBAL_CARS | LKAS_ANGLE | HYBRID_CARS) + ret.experimentalLongitudinalAvailable = candidate not in (GLOBAL_GEN2 | PREGLOBAL_CARS | LKAS_ANGLE | HYBRID_CARS) ret.openpilotLongitudinalControl = experimental_long and ret.experimentalLongitudinalAvailable + if candidate in GLOBAL_GEN2 and ret.openpilotLongitudinalControl: + ret.flags |= SubaruFlags.DISABLE_EYESIGHT.value + if ret.openpilotLongitudinalControl: ret.longitudinalTuning.kpBP = [0., 5., 35.] ret.longitudinalTuning.kpV = [0.8, 1.0, 1.5] @@ -207,5 +211,10 @@ class CarInterface(CarInterfaceBase): return ret + @staticmethod + def init(CP, logcan, sendcan): + if CP.flags & SubaruFlags.DISABLE_EYESIGHT: + disable_ecu(logcan, sendcan, bus=2, addr=GLOBAL_ES_ADDR, com_cont_req=b'\x28\x03\x01') + def apply(self, c, now_nanos): return self.CC.update(c, self.CS, now_nanos) diff --git a/selfdrive/car/subaru/subarucan.py b/selfdrive/car/subaru/subarucan.py index 411b034323..a033903d18 100644 --- a/selfdrive/car/subaru/subarucan.py +++ b/selfdrive/car/subaru/subarucan.py @@ -46,9 +46,9 @@ def create_es_distance(packer, frame, es_distance_msg, bus, pcm_cancel_cmd, long # Do not disable openpilot on Eyesight Soft Disable, if openpilot is controlling long values["Cruise_Soft_Disable"] = 0 + values["Cruise_Fault"] = 0 - if brake_cmd: - values["Cruise_Brake_Active"] = 1 + values["Cruise_Brake_Active"] = brake_cmd if pcm_cancel_cmd: values["Cruise_Cancel"] = 1 @@ -157,14 +157,15 @@ def create_es_dashstatus(packer, frame, dashstatus_msg, enabled, long_enabled, l values["COUNTER"] = frame % 0x10 - if enabled and long_active: + if long_enabled: values["Cruise_State"] = 0 - values["Cruise_Activated"] = 1 + values["Cruise_Activated"] = enabled values["Cruise_Disengaged"] = 0 values["Car_Follow"] = int(lead_visible) - if long_enabled: values["PCB_Off"] = 1 # AEB is not presevered, so show the PCB_Off on dash + values["LDW_Off"] = 0 + values["Cruise_Fault"] = 0 # Filter stock LKAS disabled and Keep hands on steering wheel OFF alerts if values["LKAS_State_Msg"] in (2, 3): @@ -172,7 +173,7 @@ def create_es_dashstatus(packer, frame, dashstatus_msg, enabled, long_enabled, l return packer.make_can_msg("ES_DashStatus", CanBus.main, values) -def create_es_brake(packer, frame, es_brake_msg, enabled, brake_value): +def create_es_brake(packer, frame, es_brake_msg, long_enabled, long_active, brake_value): values = {s: es_brake_msg[s] for s in [ "CHECKSUM", "Signal1", @@ -187,14 +188,14 @@ def create_es_brake(packer, frame, es_brake_msg, enabled, brake_value): values["COUNTER"] = frame % 0x10 - if enabled: - values["Cruise_Activated"] = 1 + if long_enabled: + values["Cruise_Brake_Fault"] = 0 + values["Cruise_Activated"] = long_active - values["Brake_Pressure"] = brake_value + values["Brake_Pressure"] = brake_value - if brake_value > 0: - values["Cruise_Brake_Active"] = 1 - values["Cruise_Brake_Lights"] = 1 if brake_value >= 70 else 0 + values["Cruise_Brake_Active"] = brake_value > 0 + values["Cruise_Brake_Lights"] = brake_value >= 70 return packer.make_can_msg("ES_Brake", CanBus.main, values) @@ -204,7 +205,6 @@ def create_es_status(packer, frame, es_status_msg, long_enabled, long_active, cr "Signal1", "Cruise_Fault", "Cruise_RPM", - "Signal2", "Cruise_Activated", "Brake_Lights", "Cruise_Hold", @@ -215,9 +215,9 @@ def create_es_status(packer, frame, es_status_msg, long_enabled, long_active, cr if long_enabled: values["Cruise_RPM"] = cruise_rpm + values["Cruise_Fault"] = 0 - if long_active: - values["Cruise_Activated"] = 1 + values["Cruise_Activated"] = long_active return packer.make_can_msg("ES_Status", CanBus.main, values) @@ -248,6 +248,30 @@ def create_es_infotainment(packer, frame, es_infotainment_msg, visual_alert): return packer.make_can_msg("ES_Infotainment", CanBus.main, values) +def create_es_highbeamassist(packer): + values = { + "HBA_Available": False, + } + + return packer.make_can_msg("ES_HighBeamAssist", CanBus.main, values) + + +def create_es_static_1(packer): + values = { + "SET_3": 3, + } + + return packer.make_can_msg("ES_STATIC_1", CanBus.main, values) + + +def create_es_static_2(packer): + values = { + "SET_3": 3, + } + + return packer.make_can_msg("ES_STATIC_2", CanBus.main, values) + + # *** Subaru Pre-global *** def subaru_preglobal_checksum(packer, values, addr, checksum_byte=7): @@ -293,9 +317,8 @@ def create_preglobal_es_distance(packer, cruise_button, es_distance_msg): return packer.make_can_msg("ES_Distance", CanBus.main, values) -def create_brake_pedal(packer, brake_pedal_msg, speed_cmd, brake_cmd): +def create_brake_pedal(packer, frame, brake_pedal_msg, speed_cmd, brake_cmd): values = {s: brake_pedal_msg[s] for s in [ - "COUNTER", "Signal1", "Speed", "Signal2", @@ -305,6 +328,8 @@ def create_brake_pedal(packer, brake_pedal_msg, speed_cmd, brake_cmd): "Signal4", ]} + values["COUNTER"] = frame % 0x10 + if speed_cmd: values["Speed"] = 3 if brake_cmd: @@ -314,10 +339,9 @@ def create_brake_pedal(packer, brake_pedal_msg, speed_cmd, brake_cmd): return packer.make_can_msg("Brake_Pedal", CanBus.camera, values) -def create_throttle(packer, throttle_msg, throttle_cmd): +def create_throttle(packer, frame, throttle_msg, throttle_cmd): values = {s: throttle_msg[s] for s in [ "CHECKSUM", - "COUNTER", "Signal1", "Engine_RPM", "Signal2", @@ -328,16 +352,17 @@ def create_throttle(packer, throttle_msg, throttle_cmd): "Off_Accel", ]} + values["COUNTER"] = frame % 0x10 + if throttle_cmd: values["Throttle_Pedal"] = 5 return packer.make_can_msg("Throttle", 2, values) -def create_preglobal_throttle(packer, throttle_msg, throttle_cmd): +def create_preglobal_throttle(packer, frame, throttle_msg, throttle_cmd): values = {s: throttle_msg[s] for s in [ "Throttle_Pedal", - "COUNTER", "Signal1", "Not_Full_Throttle", "Signal2", @@ -351,6 +376,8 @@ def create_preglobal_throttle(packer, throttle_msg, throttle_cmd): "Signal4", ]} + values["COUNTER"] = frame % 0x10 + if throttle_cmd: values["Throttle_Pedal"] = 5 diff --git a/selfdrive/car/subaru/tests/test_subaru.py b/selfdrive/car/subaru/tests/test_subaru.py new file mode 100644 index 0000000000..c8cdf66065 --- /dev/null +++ b/selfdrive/car/subaru/tests/test_subaru.py @@ -0,0 +1,20 @@ +from cereal import car +import unittest +from openpilot.selfdrive.car.subaru.fingerprints import FW_VERSIONS + +Ecu = car.CarParams.Ecu + +ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} + + +class TestSubaruFingerprint(unittest.TestCase): + def test_fw_version_format(self): + for platform, fws_per_ecu in FW_VERSIONS.items(): + for (ecu, _, _), fws in fws_per_ecu.items(): + fw_size = len(fws[0]) + for fw in fws: + self.assertEqual(len(fw), fw_size, f"{platform} {ecu}: {len(fw)} {fw_size}") + + +if __name__ == "__main__": + unittest.main() diff --git a/selfdrive/car/subaru/values.py b/selfdrive/car/subaru/values.py index 19c50fa8da..16f81652cb 100644 --- a/selfdrive/car/subaru/values.py +++ b/selfdrive/car/subaru/values.py @@ -1,5 +1,5 @@ from dataclasses import dataclass, field -from enum import Enum, IntFlag +from enum import Enum, IntFlag, StrEnum from panda import Panda from typing import Dict, List, Union @@ -27,7 +27,7 @@ class CarControllerParams: self.STEER_DELTA_DOWN = 40 elif CP.carFingerprint == CAR.IMPREZA_2020: self.STEER_MAX = 1439 - elif CP.safetyConfigs[0].safetyParam == Panda.FLAG_SUBARU_MAX_STEER_IMPREZA_2018: + elif CP.safetyConfigs[0].safetyParam & Panda.FLAG_SUBARU_MAX_STEER_IMPREZA_2018: self.STEER_MAX = 3071 else: self.STEER_MAX = 2047 @@ -46,18 +46,23 @@ class CarControllerParams: RPM_INACTIVE = 600 # a good base rpm for zero acceleration - THROTTLE_LOOKUP_BP = [0, 1] + THROTTLE_LOOKUP_BP = [0, 2] THROTTLE_LOOKUP_V = [THROTTLE_INACTIVE, THROTTLE_MAX] - RPM_LOOKUP_BP = [0, 1] + RPM_LOOKUP_BP = [0, 2] RPM_LOOKUP_V = [RPM_INACTIVE, RPM_MAX] - BRAKE_LOOKUP_BP = [-1, 0] + BRAKE_LOOKUP_BP = [-3.5, 0] BRAKE_LOOKUP_V = [BRAKE_MAX, BRAKE_MIN] class SubaruFlags(IntFlag): SEND_INFOTAINMENT = 1 + DISABLE_EYESIGHT = 2 + + +GLOBAL_ES_ADDR = 0x787 +GEN2_ES_BUTTONS_DID = b'\x11\x30' class SubaruFlagsSP(IntFlag): @@ -70,7 +75,7 @@ class CanBus: camera = 2 -class CAR: +class CAR(StrEnum): # Global platform ASCENT = "SUBARU ASCENT LIMITED 2019" ASCENT_2023 = "SUBARU ASCENT 2023" @@ -95,6 +100,9 @@ class Footnote(Enum): GLOBAL = CarFootnote( "In the non-US market, openpilot requires the car to come equipped with EyeSight with Lane Keep Assistance.", Column.PACKAGE) + EXP_LONG = CarFootnote( + "Enabling longitudinal control (alpha) will disable all EyeSight functionality, including AEB, LDW, and RAB.", + Column.LONGITUDINAL) @dataclass @@ -106,6 +114,9 @@ class SubaruCarInfo(CarInfo): def init_make(self, CP: car.CarParams): self.car_parts.parts.extend([Tool.socket_8mm_deep, Tool.pry_tool]) + if CP.experimentalLongitudinalAvailable: + self.footnotes.append(Footnote.EXP_LONG) + CAR_INFO: Dict[str, Union[SubaruCarInfo, List[SubaruCarInfo]]] = { CAR.ASCENT: SubaruCarInfo("Subaru Ascent 2019-21", "All"), CAR.OUTBACK: SubaruCarInfo("Subaru Outback 2020-22", "All", car_parts=CarParts.common([CarHarness.subaru_b])), @@ -121,18 +132,27 @@ CAR_INFO: Dict[str, Union[SubaruCarInfo, List[SubaruCarInfo]]] = { SubaruCarInfo("Subaru XV 2020-21"), ], # TODO: is there an XV and Impreza too? - CAR.CROSSTREK_HYBRID: SubaruCarInfo("Subaru Crosstrek Hybrid 2020"), + CAR.CROSSTREK_HYBRID: SubaruCarInfo("Subaru Crosstrek Hybrid 2020", car_parts=CarParts.common([CarHarness.subaru_b])), CAR.FORESTER_HYBRID: SubaruCarInfo("Subaru Forester Hybrid 2020"), CAR.FORESTER: SubaruCarInfo("Subaru Forester 2019-21", "All"), CAR.FORESTER_PREGLOBAL: SubaruCarInfo("Subaru Forester 2017-18"), CAR.LEGACY_PREGLOBAL: SubaruCarInfo("Subaru Legacy 2015-18"), CAR.OUTBACK_PREGLOBAL: SubaruCarInfo("Subaru Outback 2015-17"), CAR.OUTBACK_PREGLOBAL_2018: SubaruCarInfo("Subaru Outback 2018-19"), - CAR.FORESTER_2022: SubaruCarInfo("Subaru Forester 2022", "All", car_parts=CarParts.common([CarHarness.subaru_c])), + CAR.FORESTER_2022: SubaruCarInfo("Subaru Forester 2022-23", "All", car_parts=CarParts.common([CarHarness.subaru_c])), CAR.OUTBACK_2023: SubaruCarInfo("Subaru Outback 2023", "All", car_parts=CarParts.common([CarHarness.subaru_d])), CAR.ASCENT_2023: SubaruCarInfo("Subaru Ascent 2023", "All", car_parts=CarParts.common([CarHarness.subaru_d])), } +LKAS_ANGLE = {CAR.FORESTER_2022, CAR.OUTBACK_2023, CAR.ASCENT_2023} +GLOBAL_GEN2 = {CAR.OUTBACK, CAR.LEGACY, CAR.OUTBACK_2023, CAR.ASCENT_2023} +PREGLOBAL_CARS = {CAR.FORESTER_PREGLOBAL, CAR.LEGACY_PREGLOBAL, CAR.OUTBACK_PREGLOBAL, CAR.OUTBACK_PREGLOBAL_2018} +HYBRID_CARS = {CAR.CROSSTREK_HYBRID, CAR.FORESTER_HYBRID} + +# Cars that temporarily fault when steering angle rate is greater than some threshold. +# Appears to be all torque-based cars produced around 2019 - present +STEER_RATE_LIMITED = GLOBAL_GEN2 | {CAR.IMPREZA_2020, CAR.FORESTER} + 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]) + \ @@ -143,554 +163,35 @@ FW_QUERY_CONFIG = FwQueryConfig( Request( [StdQueries.TESTER_PRESENT_REQUEST, SUBARU_VERSION_REQUEST], [StdQueries.TESTER_PRESENT_RESPONSE, SUBARU_VERSION_RESPONSE], + whitelist_ecus=[Ecu.abs, Ecu.eps, Ecu.fwdCamera, Ecu.engine, Ecu.transmission], ), # Some Eyesight modules fail on TESTER_PRESENT_REQUEST # TODO: check if this resolves the fingerprinting issue for the 2023 Ascent and other new Subaru cars Request( [SUBARU_VERSION_REQUEST], [SUBARU_VERSION_RESPONSE], + whitelist_ecus=[Ecu.fwdCamera], + ), + # Non-OBD requests + Request( + [StdQueries.TESTER_PRESENT_REQUEST, SUBARU_VERSION_REQUEST], + [StdQueries.TESTER_PRESENT_RESPONSE, SUBARU_VERSION_RESPONSE], + whitelist_ecus=[Ecu.abs, Ecu.eps, Ecu.fwdCamera, Ecu.engine, Ecu.transmission], + bus=0, + ), + Request( + [StdQueries.TESTER_PRESENT_REQUEST, SUBARU_VERSION_REQUEST], + [StdQueries.TESTER_PRESENT_RESPONSE, SUBARU_VERSION_RESPONSE], + whitelist_ecus=[Ecu.abs, Ecu.eps, Ecu.fwdCamera, Ecu.engine, Ecu.transmission], + bus=1, + obd_multiplexing=False, ), ], -) - -FW_VERSIONS = { - CAR.ASCENT: { - (Ecu.abs, 0x7b0, None): [ - b'\xa5 \x19\x02\x00', - b'\xa5 !\002\000', - b'\xf1\x82\xa5 \x19\x02\x00', - ], - (Ecu.eps, 0x746, None): [ - b'\x85\xc0\xd0\x00', - b'\005\xc0\xd0\000', - b'\x95\xc0\xd0\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00d\xb9\x1f@ \x10', - b'\000\000e~\037@ \'', - b'\x00\x00e@\x1f@ $', - b'\x00\x00d\xb9\x00\x00\x00\x00', - b'\x00\x00e@\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xbb,\xa0t\a', - b'\xf1\x82\xbb,\xa0t\x87', - b'\xf1\x82\xbb,\xa0t\a', - b'\xf1\x82\xd9,\xa0@\a', - b'\xf1\x82\xd1,\xa0q\x07', - b'\xd1,\xa0q\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\x00\xfe\xf7\x00\x00', - b'\001\xfe\xf9\000\000', - b'\x01\xfe\xf7\x00\x00', - b'\x01\xfe\xfa\x00\x00', - ], - }, - CAR.ASCENT_2023: { - (Ecu.abs, 0x7b0, None): [ - b'\xa5 #\x03\x00', - ], - (Ecu.eps, 0x746, None): [ - b'%\xc0\xd0\x11', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x05!\x08\x1dK\x05!\x08\x01/', - ], - (Ecu.engine, 0x7a2, None): [ - b'\xe5,\xa0P\x07', - ], - (Ecu.transmission, 0x7a3, None): [ - b'\x04\xfe\xf3\x00\x00', - ], - }, - CAR.LEGACY: { - (Ecu.abs, 0x7b0, None): [ - b'\xa1\\ x04\x01', - b'\xa1 \x03\x03', - b'\xa1 \x02\x01', - ], - (Ecu.eps, 0x746, None): [ - b'\x9b\xc0\x11\x00', - b'\x9b\xc0\x11\x02', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00e\x80\x00\x1f@ \x19\x00', - b'\x00\x00e\x9a\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xde\"a0\x07', - b'\xe2"aq\x07', - b'\xde,\xa0@\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xa5\xf6\x05@\x00', - b'\xa7\xf6\x04@\x00', - b'\xa5\xfe\xc7@\x00', - ], - }, - CAR.IMPREZA: { - (Ecu.abs, 0x7b0, None): [ - b'\x7a\x94\x3f\x90\x00', - b'\xa2 \x185\x00', - b'\xa2 \x193\x00', - b'\xa2 \x194\x00', - b'z\x94.\x90\x00', - b'z\x94\b\x90\x01', - b'\xa2 \x19`\x00', - b'z\x94\f\x90\001', - b'z\x9c\x19\x80\x01', - b'z\x94\x08\x90\x00', - b'z\x84\x19\x90\x00', - b'\xf1\x00\xb2\x06\x04', - b'z\x94\x0c\x90\x00', - ], - (Ecu.eps, 0x746, None): [ - b'\x7a\xc0\x0c\x00', - b'z\xc0\x08\x00', - b'\x8a\xc0\x00\x00', - b'z\xc0\x04\x00', - b'z\xc0\x00\x00', - b'\x8a\xc0\x10\x00', - b'z\xc0\n\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00\x64\xb5\x1f\x40\x20\x0e', - b'\x00\x00d\xdc\x1f@ \x0e', - b'\x00\x00e\x1c\x1f@ \x14', - b'\x00\x00d)\x1f@ \a', - b'\x00\x00e+\x1f@ \x14', - b'\000\000e+\000\000\000\000', - b'\000\000dd\037@ \016', - b'\000\000e\002\037@ \024', - b'\x00\x00d)\x00\x00\x00\x00', - b'\x00\x00c\xf4\x00\x00\x00\x00', - b'\x00\x00d\xdc\x00\x00\x00\x00', - b'\x00\x00dd\x00\x00\x00\x00', - b'\x00\x00c\xf4\x1f@ \x07', - b'\x00\x00e\x1c\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xaa\x61\x66\x73\x07', - b'\xbeacr\a', - b'\xc5!`r\a', - b'\xaa!ds\a', - b'\xaa!`u\a', - b'\xaa!dq\a', - b'\xaa!dt\a', - b'\xc5!ar\a', - b'\xbe!as\a', - b'\xc5!as\x07', - b'\xc5!ds\a', - b'\xc5!`s\a', - b'\xaa!au\a', - b'\xbe!at\a', - b'\xaa\x00Bu\x07', - b'\xc5!dr\x07', - b'\xaa!aw\x07', - b'\xaa!av\x07', - b'\xaa\x01bt\x07', - b'\xc5!ap\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xe3\xe5\x46\x31\x00', - b'\xe4\xe5\x061\x00', - b'\xe5\xf5\x04\x00\x00', - b'\xe3\xf5G\x00\x00', - b'\xe3\xf5\a\x00\x00', - b'\xe3\xf5C\x00\x00', - b'\xe5\xf5B\x00\x00', - b'\xe5\xf5$\000\000', - b'\xe4\xf5\a\000\000', - b'\xe3\xf5F\000\000', - b'\xe4\xf5\002\000\000', - b'\xe3\xd0\x081\x00', - b'\xe3\xf5\x06\x00\x00', - b'\xe3\xd5\x161\x00', - ], - }, - CAR.IMPREZA_2020: { - (Ecu.abs, 0x7b0, None): [ - b'\xa2 \0314\000', - b'\xa2 \0313\000', - b'\xa2 !i\000', - b'\xa2 !`\000', - b'\xf1\x00\xb2\x06\x04', - b'\xa2 `\x00', - b'\xa2 !3\x00', - ], - (Ecu.eps, 0x746, None): [ - b'\x9a\xc0\000\000', - b'\n\xc0\004\000', - b'\x9a\xc0\x04\x00', - b'\n\xc0\x04\x01', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\000\000eb\037@ \"', - b'\x00\x00e\x8f\x1f@ )', - b'\x00\x00eq\x1f@ "', - b'\x00\x00eq\x00\x00\x00\x00', - b'\x00\x00e\x8f\x00\x00\x00\x00', - b'\x00\x00e\xa4\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xca!ap\a', - b'\xca!`p\a', - b'\xca!`0\a', - b'\xcc\"f0\a', - b'\xcc!fp\a', - b'\xca!f@\x07', - b'\xca!fp\x07', - b'\xf3"f@\x07', - b'\xe6!fp\x07', - b'\xf3"fp\x07', - b'\xe6"f0\x07', - b'\xe6"fp\x07', - b'\xe6!`@\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xe6\xf5\004\000\000', - b'\xe6\xf5$\000\000', - b'\xe7\xf6B0\000', - b'\xe7\xf5D0\000', - b'\xf1\x00\xd7\x10@', - b'\xe6\xf5D0\x00', - b'\xe9\xf6F0\x00', - b'\xe9\xf5B0\x00', - b'\xe9\xf6B0\x00', - b'\xe9\xf5"\x00\x00', - ], - }, - CAR.CROSSTREK_HYBRID: { - (Ecu.abs, 0x7b0, None): [ - b'\xa2 \x19e\x01', - b'\xa2 !e\x01', - ], - (Ecu.eps, 0x746, None): [ - b'\x9a\xc2\x01\x00', - b'\n\xc2\x01\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00el\x1f@ #', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xd7!`@\x07', - b'\xd7!`p\a', - b'\xf4!`0\x07', - ], - }, - CAR.FORESTER: { - (Ecu.abs, 0x7b0, None): [ - b'\xa3 \x18\x14\x00', - b'\xa3 \024\000', - b'\xa3 \031\024\000', - b'\xa3 \x14\x01', - b'\xf1\x00\xbb\r\x05', - b'\xa3 \x18&\x00', - b'\xa3 \x19&\x00', - ], - (Ecu.eps, 0x746, None): [ - b'\x8d\xc0\x04\x00', - b'\x8d\xc0\x00\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00e!\x1f@ \x11', - b'\x00\x00e\x97\x1f@ 0', - b'\000\000e`\037@ ', - b'\xf1\x00\xac\x02\x00', - b'\x00\x00e!\x00\x00\x00\x00', - b'\x00\x00e\x97\x00\x00\x00\x00', - b'\x00\x00e^\x1f@ !', - b'\x00\x00e^\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xb6"`A\x07', - b'\xcf"`0\x07', - b'\xcb\"`@\a', - b'\xcb\"`p\a', - b'\xf1\x00\xa2\x10\n', - b'\xcf"`p\x07', - b'\xb6\xa2`A\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\032\xf6B0\000', - b'\x1a\xf6F`\x00', - b'\032\xf6b`\000', - b'\x1a\xf6B`\x00', - b'\x1a\xf6b0\x00', - b'\x1a\xe6B1\x00', - b'\x1a\xe6F1\x00', - ], - }, - CAR.FORESTER_HYBRID: { - (Ecu.abs, 0x7b0, None): [ - b'\xa3 \x19T\x00', - ], - (Ecu.eps, 0x746, None): [ - b'\x8d\xc2\x00\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00eY\x1f@ !', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xd2\xa1`r\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\x1b\xa7@a\x00', - ], - }, - CAR.FORESTER_PREGLOBAL: { - (Ecu.abs, 0x7b0, None): [ - b'\x7d\x97\x14\x40', - b'\xf1\x00\xbb\x0c\x04', - ], - (Ecu.eps, 0x746, None): [ - b'}\xc0\x10\x00', - b'm\xc0\x10\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00\x64\x35\x1f\x40\x20\x09', - b'\x00\x00c\xe9\x1f@ \x03', - b'\x00\x00d\xd3\x1f@ \t' - ], - (Ecu.engine, 0x7e0, None): [ - b'\xba"@p\a', - b'\xa7)\xa0q\a', - b'\xf1\x82\xa7)\xa0q\a', - b'\xba"@@\a', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xdc\xf2\x60\x60\x00', - b'\xdc\xf2@`\x00', - b'\xda\xfd\xe0\x80\x00', - b'\xdc\xf2`\x81\000', - b'\xdc\xf2`\x80\x00', - b'\x1a\xf6F`\x00', - ], - }, - CAR.LEGACY_PREGLOBAL: { - (Ecu.abs, 0x7b0, None): [ - b'k\x97D\x00', - b'[\xba\xc4\x03', - b'{\x97D\x00', - b'[\x97D\000', - ], - (Ecu.eps, 0x746, None): [ - b'[\xb0\x00\x01', - b'K\xb0\x00\x01', - b'k\xb0\x00\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00c\xb7\x1f@\x10\x16', - b'\x00\x00c\x94\x1f@\x10\x08', - b'\x00\x00c\xec\x1f@ \x04', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xab*@r\a', - b'\xa0+@p\x07', - b'\xb4"@0\x07', - b'\xa0"@q\a', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xbe\xf2\x00p\x00', - b'\xbf\xfb\xc0\x80\x00', - b'\xbd\xf2\x00`\x00', - b'\xbf\xf2\000\x80\000', - ], - }, - CAR.OUTBACK_PREGLOBAL: { - (Ecu.abs, 0x7b0, None): [ - b'{\x9a\xac\x00', - b'k\x97\xac\x00', - b'\x5b\xf7\xbc\x03', - b'[\xf7\xac\x03', - b'{\x97\xac\x00', - b'k\x9a\xac\000', - b'[\xba\xac\x03', - b'[\xf7\xac\000', - ], - (Ecu.eps, 0x746, None): [ - b'k\xb0\x00\x00', - b'[\xb0\x00\x00', - b'\x4b\xb0\x00\x02', - b'K\xb0\x00\x00', - b'{\xb0\x00\x01', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00c\xec\x1f@ \x04', - b'\x00\x00c\xd1\x1f@\x10\x17', - b'\xf1\x00\xf0\xe0\x0e', - b'\x00\x00c\x94\x00\x00\x00\x00', - b'\x00\x00c\x94\x1f@\x10\b', - b'\x00\x00c\xb7\x1f@\x10\x16', - b'\000\000c\x90\037@\020\016', - b'\x00\x00c\xec\x37@\x04', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xb4+@p\a', - b'\xab\"@@\a', - b'\xa0\x62\x41\x71\x07', - b'\xa0*@q\a', - b'\xab*@@\a', - b'\xb4"@0\a', - b'\xb4"@p\a', - b'\xab"@s\a', - b'\xab+@@\a', - b'\xb4"@r\a', - b'\xa0+@@\x07', - b'\xa0\"@\x80\a', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xbd\xfb\xe0\x80\x00', - b'\xbe\xf2@\x80\x00', - b'\xbf\xe2\x40\x80\x00', - b'\xbf\xf2@\x80\x00', - b'\xbe\xf2@p\x00', - b'\xbd\xf2@`\x00', - b'\xbd\xf2@\x81\000', - b'\xbe\xfb\xe0p\000', - b'\xbf\xfb\xe0b\x00', - ], - }, - CAR.OUTBACK_PREGLOBAL_2018: { - (Ecu.abs, 0x7b0, None): [ - b'\x8b\x97\xac\x00', - b'\x8b\x9a\xac\x00', - b'\x9b\x97\xac\x00', - b'\x8b\x97\xbc\x00', - b'\x8b\x99\xac\x00', - b'\x9b\x9a\xac\000', - b'\x9b\x97\xbe\x10', - ], - (Ecu.eps, 0x746, None): [ - b'{\xb0\x00\x00', - b'{\xb0\x00\x01', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00df\x1f@ \n', - b'\x00\x00d\xfe\x1f@ \x15', - b'\x00\x00d\x95\x00\x00\x00\x00', - b'\x00\x00d\x95\x1f@ \x0f', - b'\x00\x00d\xfe\x00\x00\x00\x00', - b'\x00\x00e\x19\x1f@ \x15', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xb5"@p\a', - b'\xb5+@@\a', - b'\xb5"@P\a', - b'\xc4"@0\a', - b'\xb5b@1\x07', - b'\xb5q\xe0@\a', - b'\xc4+@0\a', - b'\xc4b@p\a', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xbc\xf2@\x81\x00', - b'\xbc\xfb\xe0\x80\x00', - b'\xbc\xf2@\x80\x00', - b'\xbb\xf2@`\x00', - b'\xbc\xe2@\x80\x00', - b'\xbc\xfb\xe0`\x00', - b'\xbc\xaf\xe0`\x00', - b'\xbb\xfb\xe0`\000', - ], - }, - CAR.OUTBACK: { - (Ecu.abs, 0x7b0, None): [ - b'\xa1 \x06\x01', - b'\xa1 \a\x00', - b'\xa1 \b\001', - b'\xa1 \x06\x00', - b'\xa1 "\t\x01', - b'\xa1 \x08\x02', - b'\xa1 \x06\x02', - b'\xa1 \x07\x02', - b'\xa1 \x08\x00', - b'\xa1 "\t\x00', - ], - (Ecu.eps, 0x746, None): [ - b'\x9b\xc0\x10\x00', - b'\x9b\xc0\x20\x00', - b'\x1b\xc0\x10\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x00\x00eJ\x00\x1f@ \x19\x00', - b'\000\000e\x80\000\037@ \031\000', - b'\x00\x00e\x9a\x00\x00\x00\x00\x00\x00', - b'\x00\x00e\x9a\x00\x1f@ 1\x00', - b'\x00\x00eJ\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\xbc,\xa0q\x07', - b'\xbc\"`@\a', - b'\xde"`0\a', - b'\xf1\x82\xbc,\xa0q\a', - b'\xf1\x82\xe3,\xa0@\x07', - b'\xe2"`0\x07', - b'\xe2"`p\x07', - b'\xf1\x82\xe2,\xa0@\x07', - b'\xbc"`q\x07', - b'\xe3,\xa0@\x07', - b'\xbc,\xa0u\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xa5\xfe\xf7@\x00', - b'\xa5\xf6D@\x00', - b'\xa5\xfe\xf6@\x00', - b'\xa7\x8e\xf40\x00', - b'\xf1\x82\xa7\xf6D@\x00', - b'\xa7\xf6D@\x00', - b'\xa7\xfe\xf4@\x00', - b'\xa5\xfe\xf8@\x00', - ], - }, - CAR.FORESTER_2022: { - (Ecu.abs, 0x7b0, None): [ - b'\xa3 !x\x00', - b'\xa3 !v\x00', - b'\xa3 "v\x00', - b'\xa3 "x\x00', - ], - (Ecu.eps, 0x746, None): [ - b'-\xc0%0', - b'-\xc0\x040', - b'=\xc0%\x02', - b'=\xc04\x02', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\x04!\x01\x1eD\x07!\x00\x04,' - ], - (Ecu.engine, 0x7e0, None): [ - b'\xd5"a0\x07', - b'\xd5"`0\x07', - b'\xf1"aq\x07', - b'\xf1"`q\x07', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\x1d\x86B0\x00', - b'\x1d\xf6B0\x00', - b'\x1e\x86B0\x00', - b'\x1e\xf6D0\x00', - ], - }, - CAR.OUTBACK_2023: { - (Ecu.abs, 0x7b0, None): [ - b'\xa1 #\x17\x00', - ], - (Ecu.eps, 0x746, None): [ - b'+\xc0\x12\x11\x00', - ], - (Ecu.fwdCamera, 0x787, None): [ - b'\t!\x08\x046\x05!\x08\x01/', - ], - (Ecu.engine, 0x7a2, None): [ - b'\xed,\xa2q\x07', - ], - (Ecu.transmission, 0x7a3, None): [ - b'\xa8\x8e\xf41\x00', - ] + # We don't get the EPS from non-OBD queries on GEN2 cars. Note that we still attempt to match when it exists + non_essential_ecus={ + Ecu.eps: list(GLOBAL_GEN2), } -} +) DBC = { CAR.ASCENT: dbc_dict('subaru_global_2017_generated', None), @@ -709,12 +210,3 @@ DBC = { CAR.OUTBACK_PREGLOBAL: dbc_dict('subaru_outback_2015_generated', None), CAR.OUTBACK_PREGLOBAL_2018: dbc_dict('subaru_outback_2019_generated', None), } - -LKAS_ANGLE = {CAR.FORESTER_2022, CAR.OUTBACK_2023, CAR.ASCENT_2023} -GLOBAL_GEN2 = {CAR.OUTBACK, CAR.LEGACY, CAR.OUTBACK_2023, CAR.ASCENT_2023} -PREGLOBAL_CARS = {CAR.FORESTER_PREGLOBAL, CAR.LEGACY_PREGLOBAL, CAR.OUTBACK_PREGLOBAL, CAR.OUTBACK_PREGLOBAL_2018} -HYBRID_CARS = {CAR.CROSSTREK_HYBRID, CAR.FORESTER_HYBRID} - -# Cars that temporarily fault when steering angle rate is greater than some threshold. -# Appears to be all cars that started production after 2020 -STEER_RATE_LIMITED = GLOBAL_GEN2 | {CAR.IMPREZA_2020} diff --git a/selfdrive/car/sunnypilot_carname.json b/selfdrive/car/sunnypilot_carname.json index de48bc420d..c8090c8b3b 100644 --- a/selfdrive/car/sunnypilot_carname.json +++ b/selfdrive/car/sunnypilot_carname.json @@ -12,6 +12,7 @@ "Buick LaCrosse 2017-19": "BUICK LACROSSE 2017", "Cadillac Escalade 2017": "CADILLAC ESCALADE 2017", "Cadillac Escalade ESV 2016": "CADILLAC ESCALADE ESV 2016", + "Cadillac Escalade ESV 2019": "CADILLAC ESCALADE ESV 2019", "Chevrolet Bolt EUV 2022-23": "CHEVROLET BOLT EUV 2022", "Chevrolet Bolt EV 2022-23": "CHEVROLET BOLT EUV 2022", "Chevrolet Silverado 1500 2020-21": "CHEVROLET SILVERADO 1500 2020", @@ -19,12 +20,13 @@ "Chevrolet Volt 2017-18": "CHEVROLET VOLT PREMIER 2017", "Chrysler Pacifica 2017-18": "CHRYSLER PACIFICA 2018", "Chrysler Pacifica 2019-20": "CHRYSLER PACIFICA 2020", - "Chrysler Pacifica 2021": "CHRYSLER PACIFICA 2020", - "Chrysler Pacifica Hybrid 2017-18": "CHRYSLER PACIFICA HYBRID 2017", + "Chrysler Pacifica 2021-23": "CHRYSLER PACIFICA 2020", + "Chrysler Pacifica Hybrid 2017": "CHRYSLER PACIFICA HYBRID 2017", + "Chrysler Pacifica Hybrid 2018": "CHRYSLER PACIFICA HYBRID 2018", "Chrysler Pacifica Hybrid 2019-23": "CHRYSLER PACIFICA HYBRID 2019", "Ford Bronco Sport 2021-22": "FORD BRONCO SPORT 1ST GEN", "Ford Escape 2020-22": "FORD ESCAPE 4TH GEN", - "Ford Explorer 2020-22": "FORD EXPLORER 6TH GEN", + "Ford Explorer 2020-23": "FORD EXPLORER 6TH GEN", "Ford Focus 2018": "FORD FOCUS 4TH GEN", "Ford Kuga 2020-22": "FORD ESCAPE 4TH GEN", "Ford Maverick 2022": "FORD MAVERICK 1ST GEN", @@ -47,13 +49,13 @@ "Honda Accord Hybrid 2018-22": "HONDA ACCORD HYBRID 2018", "Honda Civic 2016-18": "HONDA CIVIC 2016", "Honda Civic 2019-21": "HONDA CIVIC (BOSCH) 2019", - "Honda Civic 2022": "HONDA CIVIC 2022", + "Honda Civic 2022-23": "HONDA CIVIC 2022", "Honda Civic Hatchback 2017-21": "HONDA CIVIC (BOSCH) 2019", - "Honda Civic Hatchback 2022": "HONDA CIVIC 2022", + "Honda Civic Hatchback 2022-23": "HONDA CIVIC 2022", "Honda Clarity 2018-22": "HONDA CLARITY 2018", "Honda CR-V 2015-16": "HONDA CR-V 2016", "Honda CR-V 2017-22": "HONDA CR-V 2017", - "Honda CR-V Hybrid 2017-19": "HONDA CR-V HYBRID 2019", + "Honda CR-V Hybrid 2017-20": "HONDA CR-V HYBRID 2019", "Honda e 2020": "HONDA E 2020", "Honda Fit 2018-20": "HONDA FIT 2018", "Honda Freed 2020": "HONDA FREED 2020", @@ -66,13 +68,18 @@ "Honda Pilot 2016-22": "HONDA PILOT 2017", "Honda Ridgeline 2017-23": "HONDA RIDGELINE 2017", "Hyundai Azera 2022": "HYUNDAI AZERA 6TH GEN", - "Hyundai Elantra 2017-19": "HYUNDAI ELANTRA 2017", + "Hyundai Azera Hybrid 2019": "HYUNDAI AZERA HYBRID 6TH GEN", + "Hyundai Azera Hybrid 2020": "HYUNDAI AZERA HYBRID 6TH GEN", + "Hyundai Bayon Non-SCC 2021": "HYUNDAI BAYON 1ST GEN NON-SCC", + "Hyundai Custin 2023": "HYUNDAI CUSTIN 1ST GEN", + "Hyundai Elantra 2017-18": "HYUNDAI ELANTRA 2017", + "Hyundai Elantra 2019": "HYUNDAI ELANTRA 2017", "Hyundai Elantra 2021-23": "HYUNDAI ELANTRA 2021", - "Hyundai Elantra GT 2017-19": "HYUNDAI ELANTRA 2017", + "Hyundai Elantra GT 2017-19": "HYUNDAI I30 N LINE 2019 & GT 2018 DCT", "Hyundai Elantra Hybrid 2021-23": "HYUNDAI ELANTRA HYBRID 2021", "Hyundai Elantra Non-SCC 2022": "HYUNDAI ELANTRA SE 2022 NON-SCC", "Hyundai Genesis 2015-16": "HYUNDAI GENESIS 2015-2016", - "Hyundai i30 2017-19": "HYUNDAI ELANTRA 2017", + "Hyundai i30 2017-19": "HYUNDAI I30 N LINE 2019 & GT 2018 DCT", "Hyundai Ioniq 5 (Southeast Asia only) 2022-23": "HYUNDAI IONIQ 5 2022", "Hyundai Ioniq 5 (with HDA II) 2022-23": "HYUNDAI IONIQ 5 2022", "Hyundai Ioniq 5 (without HDA II) 2022-23": "HYUNDAI IONIQ 5 2022", @@ -88,24 +95,26 @@ "Hyundai Kona Electric 2022-23": "HYUNDAI KONA ELECTRIC 2022", "Hyundai Kona Electric (with HDA II, Korea only) 2023": "HYUNDAI KONA ELECTRIC 2ND GEN", "Hyundai Kona Hybrid 2020": "HYUNDAI KONA HYBRID 2020", + "Hyundai Kona Non-SCC 2019": "HYUNDAI KONA 2019 NON-SCC", "Hyundai Palisade 2020-22": "HYUNDAI PALISADE 2020", "Hyundai Santa Cruz 2022-23": "HYUNDAI SANTA CRUZ 1ST GEN", "Hyundai Santa Fe 2019-20": "HYUNDAI SANTA FE 2019", "Hyundai Santa Fe 2021-23": "HYUNDAI SANTA FE 2022", "Hyundai Santa Fe Hybrid 2022-23": "HYUNDAI SANTA FE HYBRID 2022", - "Hyundai Santa Fe Plug-in Hybrid 2022": "HYUNDAI SANTA FE PlUG-IN HYBRID 2022", + "Hyundai Santa Fe Plug-in Hybrid 2022-23": "HYUNDAI SANTA FE PlUG-IN HYBRID 2022", "Hyundai Sonata 2018-19": "HYUNDAI SONATA 2019", "Hyundai Sonata 2020-23": "HYUNDAI SONATA 2020", "Hyundai Sonata Hybrid 2020-23": "HYUNDAI SONATA HYBRID 2021", + "Hyundai Staria 2023": "HYUNDAI STARIA 4TH GEN", "Hyundai Tucson 2021": "HYUNDAI TUCSON 2019", "Hyundai Tucson 2022": "HYUNDAI TUCSON 4TH GEN", "Hyundai Tucson 2023": "HYUNDAI TUCSON 4TH GEN", "Hyundai Tucson Diesel 2019": "HYUNDAI TUCSON 2019", - "Hyundai Tucson Hybrid 2022-23": "HYUNDAI TUCSON HYBRID 4TH GEN", + "Hyundai Tucson Hybrid 2022-24": "HYUNDAI TUCSON 4TH GEN", "Hyundai Veloster 2019-20": "HYUNDAI VELOSTER 2019", "Jeep Grand Cherokee 2016-18": "JEEP GRAND CHEROKEE V6 2018", "Jeep Grand Cherokee 2019-21": "JEEP GRAND CHEROKEE 2019", - "Kia Carnival 2023-24": "KIA CARNIVAL 4TH GEN", + "Kia Carnival 2022-24": "KIA CARNIVAL 4TH GEN", "Kia Carnival (China only) 2023": "KIA CARNIVAL 4TH GEN", "Kia Ceed 2019": "KIA CEED INTRO ED 2019", "Kia EV6 (Southeast Asia only) 2022-23": "KIA EV6 2022", @@ -115,62 +124,66 @@ "Kia Forte 2023": "KIA FORTE E 2018 & GT 2021", "Kia Forte Non-SCC 2019": "KIA FORTE 2019 NON-SCC", "Kia Forte Non-SCC 2021": "KIA FORTE LXS 2021 NON-SCC", - "Kia K5 2021-22": "KIA K5 2021", - "Kia K5 Hybrid 2020": "KIA K5 HYBRID 2020", + "Kia K5 2021-24": "KIA K5 2021", + "Kia K5 Hybrid 2020-22": "KIA K5 HYBRID 2020", "Kia K8 Hybrid (with HDA II) 2023": "KIA K8 HYBRID 1ST GEN", "Kia Niro EV 2019": "KIA NIRO EV 2020", "Kia Niro EV 2020": "KIA NIRO EV 2020", "Kia Niro EV 2021": "KIA NIRO EV 2020", "Kia Niro EV 2022": "KIA NIRO EV 2020", "Kia Niro EV 2023": "KIA NIRO EV 2ND GEN", - "Kia Niro Hybrid 2021-22": "KIA NIRO HYBRID 2021", + "Kia Niro Hybrid 2021": "KIA NIRO HYBRID 2021", + "Kia Niro Hybrid 2022": "KIA NIRO HYBRID 2021", "Kia Niro Hybrid 2023": "KIA NIRO HYBRID 2ND GEN", "Kia Niro Plug-in Hybrid 2018-19": "KIA NIRO HYBRID 2019", "Kia Niro Plug-in Hybrid 2020": "KIA NIRO HYBRID 2019", + "Kia Niro Plug-in Hybrid 2022": "KIA NIRO PLUG-IN HYBRID 2022", "Kia Optima 2017": "KIA OPTIMA 4TH GEN", "Kia Optima 2019-20": "KIA OPTIMA 4TH GEN FACELIFT", + "Kia Optima Hybrid 2019": "KIA OPTIMA HYBRID 4TH GEN FACELIFT", "Kia Seltos 2021": "KIA SELTOS 2021", "Kia Seltos Non-SCC 2023-24": "KIA SELTOS 2023 NON-SCC", "Kia Sorento 2018": "KIA SORENTO GT LINE 2018", "Kia Sorento 2019": "KIA SORENTO GT LINE 2018", "Kia Sorento 2021-23": "KIA SORENTO 4TH GEN", - "Kia Sorento Hybrid 2023": "KIA SORENTO HYBRID 4TH GEN", - "Kia Sorento Plug-in Hybrid 2022-23": "KIA SORENTO PLUG-IN HYBRID 4TH GEN", + "Kia Sorento Hybrid 2021-23": "KIA SORENTO HYBRID 4TH GEN", + "Kia Sorento Plug-in Hybrid 2022-23": "KIA SORENTO HYBRID 4TH GEN", "Kia Sportage 2023": "KIA SPORTAGE 5TH GEN", - "Kia Sportage Hybrid 2023": "KIA SPORTAGE HYBRID 5TH GEN", + "Kia Sportage Hybrid 2023": "KIA SPORTAGE 5TH GEN", "Kia Stinger 2018-20": "KIA STINGER GT2 2018", - "Kia Stinger 2022": "KIA STINGER 2022", + "Kia Stinger 2022-23": "KIA STINGER 2022", "Kia Telluride 2020-22": "HYUNDAI PALISADE 2020", "Lexus CT Hybrid 2017-18": "LEXUS CT HYBRID 2018", "Lexus ES 2017-18": "LEXUS ES 2018", - "Lexus ES 2019-22": "LEXUS ES 2019", - "Lexus ES Hybrid 2017-18": "LEXUS ES HYBRID 2018", - "Lexus ES Hybrid 2019-23": "LEXUS ES HYBRID 2019", + "Lexus ES 2019-24": "LEXUS ES 2019", + "Lexus ES Hybrid 2017-18": "LEXUS ES 2018", + "Lexus ES Hybrid 2019-24": "LEXUS ES 2019", + "Lexus GS F 2016": "LEXUS GS F 2016", "Lexus IS 2017-19": "LEXUS IS 2018", - "Lexus IS 2023": "LEXUS IS 2023", + "Lexus IS 2022-23": "LEXUS IS 2023", "Lexus NX 2018-19": "LEXUS NX 2018", "Lexus NX 2020-21": "LEXUS NX 2020", - "Lexus NX Hybrid 2018-19": "LEXUS NX HYBRID 2018", - "Lexus NX Hybrid 2020-21": "LEXUS NX HYBRID 2020", + "Lexus NX Hybrid 2018-19": "LEXUS NX 2018", + "Lexus NX Hybrid 2020-21": "LEXUS NX 2020", "Lexus RC 2018-20": "LEXUS RC 2020", "Lexus RX 2016": "LEXUS RX 2016", "Lexus RX 2017-19": "LEXUS RX 2016", "Lexus RX 2020-22": "LEXUS RX 2020", - "Lexus RX Hybrid 2016": "LEXUS RX HYBRID 2017", - "Lexus RX Hybrid 2017-19": "LEXUS RX HYBRID 2017", - "Lexus RX Hybrid 2020-22": "LEXUS RX HYBRID 2020", - "Lexus UX Hybrid 2019-23": "TOYOTA COROLLA HYBRID TSS2 2019", + "Lexus RX Hybrid 2016": "LEXUS RX 2016", + "Lexus RX Hybrid 2017-19": "LEXUS RX 2016", + "Lexus RX Hybrid 2020-22": "LEXUS RX 2020", + "Lexus UX Hybrid 2019-23": "TOYOTA COROLLA TSS2 2019", "Lincoln Aviator 2020-21": "FORD EXPLORER 6TH GEN", "MAN eTGE 2020-23": "VOLKSWAGEN CRAFTER 2ND GEN", "MAN TGE 2017-23": "VOLKSWAGEN CRAFTER 2ND GEN", - "Mazda CX-5 2022-23": "MAZDA CX-5 2022", + "Mazda CX-5 2022-24": "MAZDA CX-5 2022", "Mazda CX-9 2021-23": "MAZDA CX-9 2021", "Nissan Altima 2019-20": "NISSAN ALTIMA 2020", "Nissan Leaf 2018-23": "NISSAN LEAF 2018", "Nissan Rogue 2018-20": "NISSAN ROGUE 2019", "Nissan X-Trail 2017": "NISSAN X-TRAIL 2017", - "Ram 1500 2019-23": "RAM 1500 5TH GEN", - "Ram 2500 2020-22": "RAM HD 5TH GEN", + "Ram 1500 2019-24": "RAM 1500 5TH GEN", + "Ram 2500 2020-24": "RAM HD 5TH GEN", "Ram 3500 2019-22": "RAM HD 5TH GEN", "SEAT Ateca 2018": "SEAT ATECA 1ST GEN", "SEAT Leon 2014-20": "SEAT LEON 3RD GEN", @@ -189,7 +202,7 @@ "Subaru XV 2018-19": "SUBARU IMPREZA LIMITED 2019", "Subaru XV 2020-21": "SUBARU IMPREZA SPORT 2020", "Škoda Fabia 2022-23": "SKODA FABIA 4TH GEN", - "Škoda Kamiq 2021": "SKODA KAMIQ 1ST GEN", + "Škoda Kamiq 2021-23": "SKODA KAMIQ 1ST GEN", "Škoda Karoq 2019-23": "SKODA KAROQ 1ST GEN", "Škoda Kodiaq 2017-23": "SKODA KODIAQ 1ST GEN", "Škoda Octavia 2015-19": "SKODA OCTAVIA 3RD GEN", @@ -197,32 +210,32 @@ "Škoda Scala 2020-23": "SKODA SCALA 1ST GEN", "Škoda Superb 2015-22": "SKODA SUPERB 3RD GEN", "Toyota Alphard 2019-20": "TOYOTA ALPHARD 2020", - "Toyota Alphard Hybrid 2021": "TOYOTA ALPHARD HYBRID 2021", + "Toyota Alphard Hybrid 2021": "TOYOTA ALPHARD 2020", "Toyota Avalon 2016": "TOYOTA AVALON 2016", "Toyota Avalon 2017-18": "TOYOTA AVALON 2016", "Toyota Avalon 2019-21": "TOYOTA AVALON 2019", "Toyota Avalon 2022": "TOYOTA AVALON 2022", - "Toyota Avalon Hybrid 2019-21": "TOYOTA AVALON HYBRID 2019", - "Toyota Avalon Hybrid 2022": "TOYOTA AVALON HYBRID 2022", + "Toyota Avalon Hybrid 2019-21": "TOYOTA AVALON 2019", + "Toyota Avalon Hybrid 2022": "TOYOTA AVALON 2022", "Toyota C-HR 2017-20": "TOYOTA C-HR 2018", "Toyota C-HR 2021": "TOYOTA C-HR 2021", - "Toyota C-HR Hybrid 2017-20": "TOYOTA C-HR HYBRID 2018", - "Toyota C-HR Hybrid 2021-22": "TOYOTA C-HR HYBRID 2022", + "Toyota C-HR Hybrid 2017-20": "TOYOTA C-HR 2018", + "Toyota C-HR Hybrid 2021-22": "TOYOTA C-HR 2021", "Toyota Camry 2018-20": "TOYOTA CAMRY 2018", - "Toyota Camry 2021-23": "TOYOTA CAMRY 2021", - "Toyota Camry Hybrid 2018-20": "TOYOTA CAMRY HYBRID 2018", - "Toyota Camry Hybrid 2021-23": "TOYOTA CAMRY HYBRID 2021", + "Toyota Camry 2021-24": "TOYOTA CAMRY 2021", + "Toyota Camry Hybrid 2018-20": "TOYOTA CAMRY 2018", + "Toyota Camry Hybrid 2021-24": "TOYOTA CAMRY 2021", "Toyota Corolla 2017-19": "TOYOTA COROLLA 2017", "Toyota Corolla 2020-22": "TOYOTA COROLLA TSS2 2019", "Toyota Corolla Cross (Non-US only) 2020-23": "TOYOTA COROLLA TSS2 2019", - "Toyota Corolla Cross Hybrid (Non-US only) 2020-22": "TOYOTA COROLLA HYBRID TSS2 2019", + "Toyota Corolla Cross Hybrid (Non-US only) 2020-22": "TOYOTA COROLLA TSS2 2019", "Toyota Corolla Hatchback 2019-22": "TOYOTA COROLLA TSS2 2019", - "Toyota Corolla Hybrid 2020-22": "TOYOTA COROLLA HYBRID TSS2 2019", - "Toyota Corolla Hybrid (Non-US only) 2020-23": "TOYOTA COROLLA HYBRID TSS2 2019", + "Toyota Corolla Hybrid 2020-22": "TOYOTA COROLLA TSS2 2019", + "Toyota Corolla Hybrid (Non-US only) 2020-23": "TOYOTA COROLLA TSS2 2019", "Toyota Highlander 2017-19": "TOYOTA HIGHLANDER 2017", "Toyota Highlander 2020-23": "TOYOTA HIGHLANDER 2020", - "Toyota Highlander Hybrid 2017-19": "TOYOTA HIGHLANDER HYBRID 2018", - "Toyota Highlander Hybrid 2020-23": "TOYOTA HIGHLANDER HYBRID 2020", + "Toyota Highlander Hybrid 2017-19": "TOYOTA HIGHLANDER 2017", + "Toyota Highlander Hybrid 2020-23": "TOYOTA HIGHLANDER 2020", "Toyota Mirai 2021": "TOYOTA MIRAI 2021", "Toyota Prius 2016": "TOYOTA PRIUS 2017", "Toyota Prius 2017-20": "TOYOTA PRIUS 2017", @@ -234,17 +247,19 @@ "Toyota RAV4 2017-18": "TOYOTA RAV4 2017", "Toyota RAV4 2019-21": "TOYOTA RAV4 2019", "Toyota RAV4 2022": "TOYOTA RAV4 2022", + "Toyota RAV4 2023-24": "TOYOTA RAV4 2023", "Toyota RAV4 Hybrid 2016": "TOYOTA RAV4 HYBRID 2017", "Toyota RAV4 Hybrid 2017-18": "TOYOTA RAV4 HYBRID 2017", - "Toyota RAV4 Hybrid 2019-21": "TOYOTA RAV4 HYBRID 2019", - "Toyota RAV4 Hybrid 2022": "TOYOTA RAV4 HYBRID 2022", + "Toyota RAV4 Hybrid 2019-21": "TOYOTA RAV4 2019", + "Toyota RAV4 Hybrid 2022": "TOYOTA RAV4 2022", + "Toyota RAV4 Hybrid 2023-24": "TOYOTA RAV4 2023", "Toyota Sienna 2018-20": "TOYOTA SIENNA 2018", "Volkswagen Arteon 2018-23": "VOLKSWAGEN ARTEON 1ST GEN", "Volkswagen Arteon eHybrid 2020-23": "VOLKSWAGEN ARTEON 1ST GEN", "Volkswagen Arteon R 2020-23": "VOLKSWAGEN ARTEON 1ST GEN", "Volkswagen Atlas 2018-23": "VOLKSWAGEN ATLAS 1ST GEN", - "Volkswagen Atlas Cross Sport 2021-22": "VOLKSWAGEN ATLAS 1ST GEN", - "Volkswagen California 2021": "VOLKSWAGEN TRANSPORTER T6.1", + "Volkswagen Atlas Cross Sport 2020-22": "VOLKSWAGEN ATLAS 1ST GEN", + "Volkswagen California 2021-23": "VOLKSWAGEN TRANSPORTER T6.1", "Volkswagen Caravelle 2020": "VOLKSWAGEN TRANSPORTER T6.1", "Volkswagen CC 2018-22": "VOLKSWAGEN ARTEON 1ST GEN", "Volkswagen Crafter 2017-23": "VOLKSWAGEN CRAFTER 2ND GEN", @@ -266,12 +281,12 @@ "Volkswagen Polo 2018-23": "VOLKSWAGEN POLO 6TH GEN", "Volkswagen Polo GTI 2018-23": "VOLKSWAGEN POLO 6TH GEN", "Volkswagen T-Cross 2021": "VOLKSWAGEN T-CROSS 1ST GEN", - "Volkswagen T-Roc 2021": "VOLKSWAGEN T-ROC 1ST GEN", + "Volkswagen T-Roc 2018-22": "VOLKSWAGEN T-ROC 1ST GEN", "Volkswagen Taos 2022-23": "VOLKSWAGEN TAOS 1ST GEN", "Volkswagen Teramont 2018-22": "VOLKSWAGEN ATLAS 1ST GEN", "Volkswagen Teramont Cross Sport 2021-22": "VOLKSWAGEN ATLAS 1ST GEN", "Volkswagen Teramont X 2021-22": "VOLKSWAGEN ATLAS 1ST GEN", - "Volkswagen Tiguan 2018-23": "VOLKSWAGEN TIGUAN 2ND GEN", + "Volkswagen Tiguan 2018-24": "VOLKSWAGEN TIGUAN 2ND GEN", "Volkswagen Tiguan eHybrid 2021-23": "VOLKSWAGEN TIGUAN 2ND GEN", "Volkswagen Touran 2016-23": "VOLKSWAGEN TOURAN 2ND GEN" } diff --git a/selfdrive/car/tesla/fingerprints.py b/selfdrive/car/tesla/fingerprints.py new file mode 100644 index 0000000000..772ca59efa --- /dev/null +++ b/selfdrive/car/tesla/fingerprints.py @@ -0,0 +1,28 @@ +# ruff: noqa: E501 +from cereal import car +from openpilot.selfdrive.car.tesla.values import CAR + +Ecu = car.CarParams.Ecu + +FINGERPRINTS = { + CAR.AP1_MODELS: [{ + 1: 8, 3: 8, 14: 8, 21: 4, 69: 8, 109: 4, 257: 3, 264: 8, 267: 5, 277: 6, 280: 6, 283: 5, 293: 4, 296: 4, 309: 5, 325: 8, 328: 5, 336: 8, 341: 8, 360: 7, 373: 8, 389: 8, 415: 8, 513: 5, 516: 8, 520: 4, 522: 8, 524: 8, 526: 8, 532: 3, 536: 8, 537: 3, 542: 8, 551: 5, 552: 2, 556: 8, 558: 8, 568: 8, 569: 8, 574: 8, 577: 8, 582: 5, 584: 4, 585: 8, 590: 8, 606: 8, 622: 8, 627: 6, 638: 8, 641: 8, 643: 8, 660: 5, 693: 8, 696: 8, 697: 8, 712: 8, 728: 8, 744: 8, 760: 8, 772: 8, 775: 8, 776: 8, 777: 8, 778: 8, 782: 8, 788: 8, 791: 8, 792: 8, 796: 2, 797: 8, 798: 6, 799: 8, 804: 8, 805: 8, 807: 8, 808: 1, 809: 8, 812: 8, 813: 8, 814: 5, 815: 8, 820: 8, 823: 8, 824: 8, 829: 8, 830: 5, 836: 8, 840: 8, 841: 8, 845: 8, 846: 5, 852: 8, 856: 4, 857: 6, 861: 8, 862: 5, 872: 8, 873: 8, 877: 8, 878: 8, 879: 8, 880: 8, 884: 8, 888: 8, 889: 8, 893: 8, 896: 8, 901: 6, 904: 3, 905: 8, 908: 2, 909: 8, 920: 8, 921: 8, 925: 4, 936: 8, 937: 8, 941: 8, 949: 8, 952: 8, 953: 6, 957: 8, 968: 8, 973: 8, 984: 8, 987: 8, 989: 8, 990: 8, 1000: 8, 1001: 8, 1006: 8, 1016: 8, 1026: 8, 1028: 8, 1029: 8, 1030: 8, 1032: 1, 1033: 1, 1034: 8, 1048: 1, 1064: 8, 1070: 8, 1080: 8, 1160: 4, 1281: 8, 1329: 8, 1332: 8, 1335: 8, 1337: 8, 1368: 8, 1412: 8, 1436: 8, 1465: 8, 1476: 8, 1497: 8, 1524: 8, 1527: 8, 1601: 8, 1605: 8, 1611: 8, 1614: 8, 1617: 8, 1621: 8, 1627: 8, 1630: 8, 1800: 4, 1804: 8, 1812: 8, 1815: 8, 1816: 8, 1828: 8, 1831: 8, 1832: 8, 1840: 8, 1848: 8, 1864: 8, 1880: 8, 1892: 8, 1896: 8, 1912: 8, 1960: 8, 1992: 8, 2008: 3, 2043: 5, 2045: 4 + }], +} + +FW_VERSIONS = { + CAR.AP2_MODELS: { + (Ecu.adas, 0x649, None): [ + b'\x01\x00\x8b\x07\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11', + ], + (Ecu.electricBrakeBooster, 0x64d, None): [ + b'1037123-00-A', + ], + (Ecu.fwdRadar, 0x671, None): [ + b'\x01\x00W\x00\x00\x00\x07\x00\x00\x00\x00\x08\x01\x00\x00\x00\x07\xff\xfe', + ], + (Ecu.eps, 0x730, None): [ + b'\x10#\x01', + ], + }, +} diff --git a/selfdrive/car/tesla/values.py b/selfdrive/car/tesla/values.py index 15283ae4b2..12877f1344 100644 --- a/selfdrive/car/tesla/values.py +++ b/selfdrive/car/tesla/values.py @@ -1,5 +1,5 @@ -# ruff: noqa: E501 from collections import namedtuple +from enum import StrEnum from typing import Dict, List, Union from cereal import car @@ -12,7 +12,7 @@ Ecu = car.CarParams.Ecu Button = namedtuple('Button', ['event_type', 'can_addr', 'can_msg', 'values']) -class CAR: +class CAR(StrEnum): AP1_MODELS = 'TESLA AP1 MODEL S' AP2_MODELS = 'TESLA AP2 MODEL S' @@ -22,13 +22,6 @@ CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { CAR.AP2_MODELS: CarInfo("Tesla AP2 Model S", "All"), } -FINGERPRINTS = { - CAR.AP1_MODELS: [ - { - 1: 8, 3: 8, 14: 8, 21: 4, 69: 8, 109: 4, 257: 3, 264: 8, 267: 5, 277: 6, 280: 6, 283: 5, 293: 4, 296: 4, 309: 5, 325: 8, 328: 5, 336: 8, 341: 8, 360: 7, 373: 8, 389: 8, 415: 8, 513: 5, 516: 8, 520: 4, 522: 8, 524: 8, 526: 8, 532: 3, 536: 8, 537: 3, 542: 8, 551: 5, 552: 2, 556: 8, 558: 8, 568: 8, 569: 8, 574: 8, 577: 8, 582: 5, 584: 4, 585: 8, 590: 8, 606: 8, 622: 8, 627: 6, 638: 8, 641: 8, 643: 8, 660: 5, 693: 8, 696: 8, 697: 8, 712: 8, 728: 8, 744: 8, 760: 8, 772: 8, 775: 8, 776: 8, 777: 8, 778: 8, 782: 8, 788: 8, 791: 8, 792: 8, 796: 2, 797: 8, 798: 6, 799: 8, 804: 8, 805: 8, 807: 8, 808: 1, 809: 8, 812: 8, 813: 8, 814: 5, 815: 8, 820: 8, 823: 8, 824: 8, 829: 8, 830: 5, 836: 8, 840: 8, 841: 8, 845: 8, 846: 5, 852: 8, 856: 4, 857: 6, 861: 8, 862: 5, 872: 8, 873: 8, 877: 8, 878: 8, 879: 8, 880: 8, 884: 8, 888: 8, 889: 8, 893: 8, 896: 8, 901: 6, 904: 3, 905: 8, 908: 2, 909: 8, 920: 8, 921: 8, 925: 4, 936: 8, 937: 8, 941: 8, 949: 8, 952: 8, 953: 6, 957: 8, 968: 8, 973: 8, 984: 8, 987: 8, 989: 8, 990: 8, 1000: 8, 1001: 8, 1006: 8, 1016: 8, 1026: 8, 1028: 8, 1029: 8, 1030: 8, 1032: 1, 1033: 1, 1034: 8, 1048: 1, 1064: 8, 1070: 8, 1080: 8, 1160: 4, 1281: 8, 1329: 8, 1332: 8, 1335: 8, 1337: 8, 1368: 8, 1412: 8, 1436: 8, 1465: 8, 1476: 8, 1497: 8, 1524: 8, 1527: 8, 1601: 8, 1605: 8, 1611: 8, 1614: 8, 1617: 8, 1621: 8, 1627: 8, 1630: 8, 1800: 4, 1804: 8, 1812: 8, 1815: 8, 1816: 8, 1828: 8, 1831: 8, 1832: 8, 1840: 8, 1848: 8, 1864: 8, 1880: 8, 1892: 8, 1896: 8, 1912: 8, 1960: 8, 1992: 8, 2008: 3, 2043: 5, 2045: 4 - }, - ], -} DBC = { CAR.AP2_MODELS: dbc_dict('tesla_powertrain', 'tesla_radar', chassis_dbc='tesla_can'), @@ -54,22 +47,6 @@ FW_QUERY_CONFIG = FwQueryConfig( ] ) -FW_VERSIONS = { - CAR.AP2_MODELS: { - (Ecu.adas, 0x649, None): [ - b'\x01\x00\x8b\x07\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11', - ], - (Ecu.electricBrakeBooster, 0x64d, None): [ - b'1037123-00-A', - ], - (Ecu.fwdRadar, 0x671, None): [ - b'\x01\x00W\x00\x00\x00\x07\x00\x00\x00\x00\x08\x01\x00\x00\x00\x07\xff\xfe', - ], - (Ecu.eps, 0x730, None): [ - b'\x10#\x01', - ], - }, -} class CANBUS: # Lateral harness diff --git a/selfdrive/car/tests/routes.py b/selfdrive/car/tests/routes.py index f7ad219f63..8db950ced0 100755 --- a/selfdrive/car/tests/routes.py +++ b/selfdrive/car/tests/routes.py @@ -24,7 +24,6 @@ non_tested_cars = [ HYUNDAI.GENESIS_G90, HONDA.ODYSSEY_CHN, VOLKSWAGEN.CRAFTER_MK2, # need a route from an ACC-equipped Crafter - TOYOTA.RAV4_TSS2_2023, SUBARU.FORESTER_HYBRID, ] @@ -38,8 +37,8 @@ class CarTestRoute(NamedTuple): routes = [ CarTestRoute("efdf9af95e71cd84|2022-05-13--19-03-31", COMMA.BODY), - CarTestRoute("0c94aa1e1296d7c6|2021-05-05--19-48-37", CHRYSLER.JEEP_CHEROKEE), - CarTestRoute("91dfedae61d7bd75|2021-05-22--20-07-52", CHRYSLER.JEEP_CHEROKEE_2019), + CarTestRoute("0c94aa1e1296d7c6|2021-05-05--19-48-37", CHRYSLER.JEEP_GRAND_CHEROKEE), + CarTestRoute("91dfedae61d7bd75|2021-05-22--20-07-52", CHRYSLER.JEEP_GRAND_CHEROKEE_2019), CarTestRoute("420a8e183f1aed48|2020-03-05--07-15-29", CHRYSLER.PACIFICA_2017_HYBRID), CarTestRoute("43a685a66291579b|2021-05-27--19-47-29", CHRYSLER.PACIFICA_2018), CarTestRoute("378472f830ee7395|2021-05-28--07-38-43", CHRYSLER.PACIFICA_2018_HYBRID), @@ -53,6 +52,8 @@ routes = [ CarTestRoute("62241b0c7fea4589|2022-09-01--15-32-49", FORD.EXPLORER_MK6), CarTestRoute("e886087f430e7fe7|2023-06-16--23-06-36", FORD.FOCUS_MK4), CarTestRoute("bd37e43731e5964b|2023-04-30--10-42-26", FORD.MAVERICK_MK1), + CarTestRoute("112e4d6e0cad05e1|2023-11-14--08-21-43", FORD.F_150_LIGHTNING_MK1), + CarTestRoute("83a4e056c7072678|2023-11-13--16-51-33", FORD.MUSTANG_MACH_E_MK1), #TestRoute("f1b4c567731f4a1b|2018-04-30--10-15-35", FORD.FUSION), CarTestRoute("7cc2a8365b4dd8a9|2018-12-02--12-10-44", GM.ACADIA), @@ -60,6 +61,7 @@ routes = [ CarTestRoute("75a6bcb9b8b40373|2023-03-11--22-47-33", GM.BUICK_LACROSSE), CarTestRoute("ef8f2185104d862e|2023-02-09--18-37-13", GM.ESCALADE), CarTestRoute("46460f0da08e621e|2021-10-26--07-21-46", GM.ESCALADE_ESV), + CarTestRoute("168f8b3be57f66ae|2023-09-12--21-44-42", GM.ESCALADE_ESV_2019), CarTestRoute("c950e28c26b5b168|2018-05-30--22-03-41", GM.VOLT), CarTestRoute("f08912a233c1584f|2022-08-11--18-02-41", GM.BOLT_EUV, segment=1), CarTestRoute("555d4087cf86aa91|2022-12-02--12-15-07", GM.BOLT_EUV, segment=14), # Bolt EV @@ -94,11 +96,13 @@ routes = [ CarTestRoute("f44aa96ace22f34a|2021-12-22--06-22-31", HONDA.CIVIC_2022), CarTestRoute("87d7f06ade479c2e|2023-09-11--23-30-11", HYUNDAI.AZERA_6TH_GEN), + CarTestRoute("66189dd8ec7b50e6|2023-09-20--07-02-12", HYUNDAI.AZERA_HEV_6TH_GEN), CarTestRoute("6fe86b4e410e4c37|2020-07-22--16-27-13", HYUNDAI.HYUNDAI_GENESIS), CarTestRoute("b5d6dc830ad63071|2022-12-12--21-28-25", HYUNDAI.GENESIS_GV60_EV_1ST_GEN, segment=12), CarTestRoute("70c5bec28ec8e345|2020-08-08--12-22-23", HYUNDAI.GENESIS_G70), CarTestRoute("ca4de5b12321bd98|2022-10-18--21-15-59", HYUNDAI.GENESIS_GV70_1ST_GEN), CarTestRoute("6b301bf83f10aa90|2020-11-22--16-45-07", HYUNDAI.GENESIS_G80), + CarTestRoute("0bbe367c98fa1538|2023-09-16--00-16-49", HYUNDAI.CUSTIN_1ST_GEN), CarTestRoute("f0709d2bc6ca451f|2022-10-15--08-13-54", HYUNDAI.SANTA_CRUZ_1ST_GEN), CarTestRoute("4dbd55df87507948|2022-03-01--09-45-38", HYUNDAI.SANTA_FE), CarTestRoute("bf43d9df2b660eb0|2021-09-23--14-16-37", HYUNDAI.SANTA_FE_2022), @@ -110,17 +114,18 @@ routes = [ CarTestRoute("7653b2bce7bcfdaa|2020-03-04--15-34-32", HYUNDAI.KIA_OPTIMA_G4), CarTestRoute("018654717bc93d7d|2022-09-19--23-11-10", HYUNDAI.KIA_OPTIMA_G4_FL, segment=0), CarTestRoute("f9716670b2481438|2023-08-23--14-49-50", HYUNDAI.KIA_OPTIMA_H), + CarTestRoute("6a42c1197b2a8179|2023-09-21--10-23-44", HYUNDAI.KIA_OPTIMA_H_G4_FL), CarTestRoute("c75a59efa0ecd502|2021-03-11--20-52-55", HYUNDAI.KIA_SELTOS), - CarTestRoute("b3537035ffe6a7d6|2022-10-17--15-23-49", HYUNDAI.KIA_SPORTAGE_HYBRID_5TH_GEN), CarTestRoute("5b7c365c50084530|2020-04-15--16-13-24", HYUNDAI.SONATA), CarTestRoute("b2a38c712dcf90bd|2020-05-18--18-12-48", HYUNDAI.SONATA_LF), + CarTestRoute("c344fd2492c7a9d2|2023-12-11--09-03-23", HYUNDAI.STARIA_4TH_GEN), CarTestRoute("fb3fd42f0baaa2f8|2022-03-30--15-25-05", HYUNDAI.TUCSON), CarTestRoute("db68bbe12250812c|2022-12-05--00-54-12", HYUNDAI.TUCSON_4TH_GEN), # 2023 - CarTestRoute("36e10531feea61a4|2022-07-25--13-37-42", HYUNDAI.TUCSON_HYBRID_4TH_GEN), + CarTestRoute("36e10531feea61a4|2022-07-25--13-37-42", HYUNDAI.TUCSON_4TH_GEN), # hybrid CarTestRoute("5875672fc1d4bf57|2020-07-23--21-33-28", HYUNDAI.KIA_SORENTO), CarTestRoute("1d0d000db3370fd0|2023-01-04--22-28-42", HYUNDAI.KIA_SORENTO_4TH_GEN, segment=5), CarTestRoute("fc19648042eb6896|2023-08-16--11-43-27", HYUNDAI.KIA_SORENTO_HEV_4TH_GEN, segment=14), - CarTestRoute("628935d7d3e5f4f7|2022-11-30--01-12-46", HYUNDAI.KIA_SORENTO_PHEV_4TH_GEN), + CarTestRoute("628935d7d3e5f4f7|2022-11-30--01-12-46", HYUNDAI.KIA_SORENTO_HEV_4TH_GEN), # plug-in hybrid CarTestRoute("9c917ba0d42ffe78|2020-04-17--12-43-19", HYUNDAI.PALISADE), CarTestRoute("05a8f0197fdac372|2022-10-19--14-14-09", HYUNDAI.IONIQ_5), # HDA2 CarTestRoute("eb4eae1476647463|2023-08-26--18-07-04", HYUNDAI.IONIQ_6, segment=6), # HDA2 @@ -150,12 +155,15 @@ routes = [ CarTestRoute("50c6c9b85fd1ff03|2020-10-26--17-56-06", HYUNDAI.KIA_NIRO_EV), CarTestRoute("b153671049a867b3|2023-04-05--10-00-30", HYUNDAI.KIA_NIRO_EV_2ND_GEN), CarTestRoute("173219cf50acdd7b|2021-07-05--10-27-41", HYUNDAI.KIA_NIRO_PHEV), + CarTestRoute("23349923ba5c4e3b|2023-12-02--08-51-54", HYUNDAI.KIA_NIRO_PHEV_2022), CarTestRoute("34a875f29f69841a|2021-07-29--13-02-09", HYUNDAI.KIA_NIRO_HEV_2021), CarTestRoute("db04d2c63990e3ba|2023-02-08--16-52-39", HYUNDAI.KIA_NIRO_HEV_2ND_GEN), CarTestRoute("50a2212c41f65c7b|2021-05-24--16-22-06", HYUNDAI.KIA_FORTE), CarTestRoute("192283cdbb7a58c2|2022-10-15--01-43-18", HYUNDAI.KIA_SPORTAGE_5TH_GEN), + CarTestRoute("09559f1fcaed4704|2023-11-16--02-24-57", HYUNDAI.KIA_SPORTAGE_5TH_GEN), # openpilot longitudinal + CarTestRoute("b3537035ffe6a7d6|2022-10-17--15-23-49", HYUNDAI.KIA_SPORTAGE_5TH_GEN), # hybrid CarTestRoute("c5ac319aa9583f83|2021-06-01--18-18-31", HYUNDAI.ELANTRA), - CarTestRoute("734ef96182ddf940|2022-10-02--16-41-44", HYUNDAI.ELANTRA), # 2019 Elantra GT + CarTestRoute("734ef96182ddf940|2022-10-02--16-41-44", HYUNDAI.ELANTRA_GT_I30), CarTestRoute("82e9cdd3f43bf83e|2021-05-15--02-42-51", HYUNDAI.ELANTRA_2021), CarTestRoute("715ac05b594e9c59|2021-06-20--16-21-07", HYUNDAI.ELANTRA_HEV_2021), CarTestRoute("7120aa90bbc3add7|2021-08-02--07-12-31", HYUNDAI.SONATA_HYBRID), @@ -163,56 +171,57 @@ routes = [ CarTestRoute("6b0d44d22df18134|2023-05-06--10-36-55", HYUNDAI.GENESIS_GV80), CarTestRoute("00c829b1b7613dea|2021-06-24--09-10-10", TOYOTA.ALPHARD_TSS2), - CarTestRoute("912119ebd02c7a42|2022-03-19--07-24-50", TOYOTA.ALPHARDH_TSS2), + CarTestRoute("912119ebd02c7a42|2022-03-19--07-24-50", TOYOTA.ALPHARD_TSS2), # hybrid CarTestRoute("000cf3730200c71c|2021-05-24--10-42-05", TOYOTA.AVALON), CarTestRoute("0bb588106852abb7|2021-05-26--12-22-01", TOYOTA.AVALON_2019), - CarTestRoute("87bef2930af86592|2021-05-30--09-40-54", TOYOTA.AVALONH_2019), + CarTestRoute("87bef2930af86592|2021-05-30--09-40-54", TOYOTA.AVALON_2019), # hybrid CarTestRoute("e9966711cfb04ce3|2022-01-11--07-59-43", TOYOTA.AVALON_TSS2), - CarTestRoute("eca1080a91720a54|2022-03-17--13-32-29", TOYOTA.AVALONH_TSS2), + CarTestRoute("eca1080a91720a54|2022-03-17--13-32-29", TOYOTA.AVALON_TSS2), # hybrid CarTestRoute("6cdecc4728d4af37|2020-02-23--15-44-18", TOYOTA.CAMRY), CarTestRoute("2f37c007683e85ba|2023-09-02--14-39-44", TOYOTA.CAMRY), # openpilot longitudinal, with radar CAN filter + CarTestRoute("54034823d30962f5|2021-05-24--06-37-34", TOYOTA.CAMRY), # hybrid CarTestRoute("3456ad0cd7281b24|2020-12-13--17-45-56", TOYOTA.CAMRY_TSS2), - CarTestRoute("ffccc77938ddbc44|2021-01-04--16-55-41", TOYOTA.CAMRYH_TSS2), - CarTestRoute("54034823d30962f5|2021-05-24--06-37-34", TOYOTA.CAMRYH), + CarTestRoute("ffccc77938ddbc44|2021-01-04--16-55-41", TOYOTA.CAMRY_TSS2), # hybrid CarTestRoute("4e45c89c38e8ec4d|2021-05-02--02-49-28", TOYOTA.COROLLA), CarTestRoute("5f5afb36036506e4|2019-05-14--02-09-54", TOYOTA.COROLLA_TSS2), - CarTestRoute("5ceff72287a5c86c|2019-10-19--10-59-02", TOYOTA.COROLLAH_TSS2), + CarTestRoute("5ceff72287a5c86c|2019-10-19--10-59-02", TOYOTA.COROLLA_TSS2), # hybrid CarTestRoute("d2525c22173da58b|2021-04-25--16-47-04", TOYOTA.PRIUS), CarTestRoute("32a7df20486b0f70|2020-02-06--16-06-50", TOYOTA.RAV4H), CarTestRoute("cdf2f7de565d40ae|2019-04-25--03-53-41", TOYOTA.RAV4_TSS2), CarTestRoute("a5c341bb250ca2f0|2022-05-18--16-05-17", TOYOTA.RAV4_TSS2_2022), - CarTestRoute("7e34a988419b5307|2019-12-18--19-13-30", TOYOTA.RAV4H_TSS2), - CarTestRoute("2475fb3eb2ffcc2e|2022-04-29--12-46-23", TOYOTA.RAV4H_TSS2_2022), - CarTestRoute("49e041422a032273|2023-09-14--09-21-32", TOYOTA.RAV4H_TSS2_2023), + CarTestRoute("ad5a3fa719bc2f83|2023-10-17--19-48-42", TOYOTA.RAV4_TSS2_2023), + CarTestRoute("7e34a988419b5307|2019-12-18--19-13-30", TOYOTA.RAV4_TSS2), # hybrid + CarTestRoute("2475fb3eb2ffcc2e|2022-04-29--12-46-23", TOYOTA.RAV4_TSS2_2022), # hybrid CarTestRoute("7a31f030957b9c85|2023-04-01--14-12-51", TOYOTA.LEXUS_ES), + CarTestRoute("37041c500fd30100|2020-12-30--12-17-24", TOYOTA.LEXUS_ES), # hybrid CarTestRoute("e6a24be49a6cd46e|2019-10-29--10-52-42", TOYOTA.LEXUS_ES_TSS2), + CarTestRoute("f49e8041283f2939|2019-05-30--11-51-51", TOYOTA.LEXUS_ES_TSS2), # hybrid CarTestRoute("da23c367491f53e2|2021-05-21--09-09-11", TOYOTA.LEXUS_CTH, segment=3), - CarTestRoute("f49e8041283f2939|2019-05-30--11-51-51", TOYOTA.LEXUS_ESH_TSS2), - CarTestRoute("37041c500fd30100|2020-12-30--12-17-24", TOYOTA.LEXUS_ESH), CarTestRoute("32696cea52831b02|2021-11-19--18-13-30", TOYOTA.LEXUS_RC), + CarTestRoute("ab9b64a5e5960cba|2023-10-24--17-32-08", TOYOTA.LEXUS_GS_F), CarTestRoute("886fcd8408d570e9|2020-01-29--02-18-55", TOYOTA.LEXUS_RX), - CarTestRoute("d27ad752e9b08d4f|2021-05-26--19-39-51", TOYOTA.LEXUS_RXH), + CarTestRoute("d27ad752e9b08d4f|2021-05-26--19-39-51", TOYOTA.LEXUS_RX), # hybrid CarTestRoute("01b22eb2ed121565|2020-02-02--11-25-51", TOYOTA.LEXUS_RX_TSS2), - CarTestRoute("b74758c690a49668|2020-05-20--15-58-57", TOYOTA.LEXUS_RXH_TSS2), - CarTestRoute("ec429c0f37564e3c|2020-02-01--17-28-12", TOYOTA.LEXUS_NXH), + CarTestRoute("b74758c690a49668|2020-05-20--15-58-57", TOYOTA.LEXUS_RX_TSS2), # hybrid CarTestRoute("964c09eb11ca8089|2020-11-03--22-04-00", TOYOTA.LEXUS_NX), + CarTestRoute("ec429c0f37564e3c|2020-02-01--17-28-12", TOYOTA.LEXUS_NX), # hybrid CarTestRoute("3fd5305f8b6ca765|2021-04-28--19-26-49", TOYOTA.LEXUS_NX_TSS2), - CarTestRoute("09ae96064ed85a14|2022-06-09--12-22-31", TOYOTA.LEXUS_NXH_TSS2), + CarTestRoute("09ae96064ed85a14|2022-06-09--12-22-31", TOYOTA.LEXUS_NX_TSS2), # hybrid CarTestRoute("0a302ffddbb3e3d3|2020-02-08--16-19-08", TOYOTA.HIGHLANDER_TSS2), - CarTestRoute("437e4d2402abf524|2021-05-25--07-58-50", TOYOTA.HIGHLANDERH_TSS2), + CarTestRoute("437e4d2402abf524|2021-05-25--07-58-50", TOYOTA.HIGHLANDER_TSS2), # hybrid CarTestRoute("3183cd9b021e89ce|2021-05-25--10-34-44", TOYOTA.HIGHLANDER), - CarTestRoute("80d16a262e33d57f|2021-05-23--20-01-43", TOYOTA.HIGHLANDERH), + CarTestRoute("80d16a262e33d57f|2021-05-23--20-01-43", TOYOTA.HIGHLANDER), # hybrid CarTestRoute("eb6acd681135480d|2019-06-20--20-00-00", TOYOTA.SIENNA), CarTestRoute("2e07163a1ba9a780|2019-08-25--13-15-13", TOYOTA.LEXUS_IS), CarTestRoute("649bf2997ada6e3a|2023-08-08--18-04-22", TOYOTA.LEXUS_IS_TSS2), CarTestRoute("0a0de17a1e6a2d15|2020-09-21--21-24-41", TOYOTA.PRIUS_TSS2), CarTestRoute("9b36accae406390e|2021-03-30--10-41-38", TOYOTA.MIRAI), CarTestRoute("cd9cff4b0b26c435|2021-05-13--15-12-39", TOYOTA.CHR), + CarTestRoute("57858ede0369a261|2021-05-18--20-34-20", TOYOTA.CHR), # hybrid CarTestRoute("ea8fbe72b96a185c|2023-02-08--15-11-46", TOYOTA.CHR_TSS2), CarTestRoute("ea8fbe72b96a185c|2023-02-22--09-20-34", TOYOTA.CHR_TSS2), # openpilot longitudinal, with smartDSU - CarTestRoute("57858ede0369a261|2021-05-18--20-34-20", TOYOTA.CHRH), - CarTestRoute("6719965b0e1d1737|2023-02-09--22-44-05", TOYOTA.CHRH_TSS2), - # CarTestRoute("6719965b0e1d1737|2023-08-29--06-40-05", TOYOTA.CHRH_TSS2), # openpilot longitudinal, radar disabled + CarTestRoute("6719965b0e1d1737|2023-02-09--22-44-05", TOYOTA.CHR_TSS2), # hybrid + # CarTestRoute("6719965b0e1d1737|2023-08-29--06-40-05", TOYOTA.CHR_TSS2), # hybrid, openpilot longitudinal, radar disabled CarTestRoute("14623aae37e549f3|2021-10-24--01-20-49", TOYOTA.PRIUS_V), CarTestRoute("202c40641158a6e5|2021-09-21--09-43-24", VOLKSWAGEN.ARTEON_MK1), @@ -247,7 +256,8 @@ routes = [ CarTestRoute("c321c6b697c5a5ff|2020-06-23--11-04-33", SUBARU.FORESTER), CarTestRoute("791340bc01ed993d|2019-03-10--16-28-08", SUBARU.IMPREZA), CarTestRoute("8bf7e79a3ce64055|2021-05-24--09-36-27", SUBARU.IMPREZA_2020), - # CarTestRoute("8de015561e1ea4a0|2023-08-29--17-08-31", SUBARU.IMPREZA), # openpilot longitudinal + CarTestRoute("8de015561e1ea4a0|2023-08-29--17-08-31", SUBARU.IMPREZA), # openpilot longitudinal + # CarTestRoute("c3d1ccb52f5f9d65|2023-07-22--01-23-20", SUBARU.OUTBACK, segment=9), # gen2 longitudinal, eyesight disabled CarTestRoute("1bbe6bf2d62f58a8|2022-07-14--17-11-43", SUBARU.OUTBACK, segment=10), CarTestRoute("c56e69bbc74b8fad|2022-08-18--09-43-51", SUBARU.LEGACY, segment=3), CarTestRoute("f4e3a0c511a076f4|2022-08-04--16-16-48", SUBARU.CROSSTREK_HYBRID, segment=2), diff --git a/selfdrive/car/tests/test_can_fingerprint.py b/selfdrive/car/tests/test_can_fingerprint.py index 406ccd07f0..63621b459d 100755 --- a/selfdrive/car/tests/test_can_fingerprint.py +++ b/selfdrive/car/tests/test_can_fingerprint.py @@ -8,7 +8,7 @@ from openpilot.selfdrive.car.fingerprints import _FINGERPRINTS as FINGERPRINTS class TestCanFingerprint(unittest.TestCase): - @parameterized.expand([(c, f) for c, f in FINGERPRINTS.items()]) + @parameterized.expand(list(FINGERPRINTS.items())) def test_can_fingerprint(self, car_model, fingerprints): """Tests online fingerprinting function on offline fingerprints""" diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py index 787b5d6316..a920bd45da 100755 --- a/selfdrive/car/tests/test_car_interfaces.py +++ b/selfdrive/car/tests/test_car_interfaces.py @@ -18,7 +18,7 @@ from openpilot.selfdrive.test.fuzzy_generation import DrawType, FuzzyGenerator ALL_ECUS = list({ecu for ecus in FW_VERSIONS.values() for ecu in ecus.keys()}) -MAX_EXAMPLES = int(os.environ.get('MAX_EXAMPLES', '5')) +MAX_EXAMPLES = int(os.environ.get('MAX_EXAMPLES', '20')) def get_fuzzy_car_interface_args(draw: DrawType) -> dict: @@ -133,7 +133,7 @@ class TestCarInterfaces(unittest.TestCase): # Make sure we can combine dicts ret = get_interface_attr('DBC', combine_brands=True) - self.assertGreaterEqual(len(ret), 170) + self.assertGreaterEqual(len(ret), 160) # We don't support combining non-dicts ret = get_interface_attr('CAR', combine_brands=True) diff --git a/selfdrive/car/tests/test_fw_fingerprint.py b/selfdrive/car/tests/test_fw_fingerprint.py index 378b68e43e..064f2e5651 100755 --- a/selfdrive/car/tests/test_fw_fingerprint.py +++ b/selfdrive/car/tests/test_fw_fingerprint.py @@ -5,14 +5,13 @@ import time import unittest from collections import defaultdict from parameterized import parameterized -import threading +from unittest import mock from cereal import car -from openpilot.common.params import Params from openpilot.selfdrive.car.car_helpers import interfaces from openpilot.selfdrive.car.fingerprints import FW_VERSIONS from openpilot.selfdrive.car.fw_versions import FW_QUERY_CONFIGS, FUZZY_EXCLUDE_ECUS, VERSIONS, build_fw_dict, \ - match_fw_to_car, get_fw_versions, get_present_ecus + match_fw_to_car, get_brand_ecu_matches, get_fw_versions, get_present_ecus from openpilot.selfdrive.car.vin import get_vin CarFw = car.CarParams.CarFw @@ -64,7 +63,7 @@ class TestFwFingerprint(unittest.TestCase): "address": addr, "subAddress": 0 if sub_addr is None else sub_addr}) CP.carFw = fw _, matches = match_fw_to_car(CP.carFw, allow_exact=False, log=False) - brand_matches = config.match_fw_to_car_fuzzy(build_fw_dict(CP.carFw)) + brand_matches = config.match_fw_to_car_fuzzy(build_fw_dict(CP.carFw), VERSIONS[brand]) # If both have matches, they must agree if len(matches) == 1 and len(brand_matches) == 1: @@ -97,7 +96,7 @@ class TestFwFingerprint(unittest.TestCase): def test_fw_version_lists(self): for car_model, ecus in FW_VERSIONS.items(): - with self.subTest(car_model=car_model): + with self.subTest(car_model=car_model.value): for ecu, ecu_fw in ecus.items(): with self.subTest(ecu): duplicates = {fw for fw in ecu_fw if ecu_fw.count(fw) > 1} @@ -119,13 +118,13 @@ class TestFwFingerprint(unittest.TestCase): for brand, config in FW_QUERY_CONFIGS.items(): for car_model, ecus in VERSIONS[brand].items(): bad_ecus = set(ecus).intersection(config.extra_ecus) - with self.subTest(car_model=car_model): + with self.subTest(car_model=car_model.value): self.assertFalse(len(bad_ecus), f'{car_model}: Fingerprints contain ECUs added for data collection: {bad_ecus}') def test_blacklisted_ecus(self): blacklisted_addrs = (0x7c4, 0x7d0) # includes A/C ecu and an unknown ecu for car_model, ecus in FW_VERSIONS.items(): - with self.subTest(car_model=car_model): + with self.subTest(car_model=car_model.value): CP = interfaces[car_model][0].get_non_essential_params(car_model) if CP.carName == 'subaru': for ecu in ecus.keys(): @@ -148,6 +147,12 @@ class TestFwFingerprint(unittest.TestCase): with self.subTest(): self.fail(f"Brands do not implement FW_QUERY_CONFIG: {brand_versions - brand_configs}") + # Ensure each brand has at least 1 ECU to query, and extra ECU retrieval + for brand, config in FW_QUERY_CONFIGS.items(): + self.assertEqual(len(config.get_all_ecus({}, include_extra_ecus=False)), 0) + self.assertEqual(config.get_all_ecus({}), set(config.extra_ecus)) + self.assertGreater(len(config.get_all_ecus(VERSIONS[brand])), 0) + def test_fw_request_ecu_whitelist(self): for brand, config in FW_QUERY_CONFIGS.items(): with self.subTest(brand=brand): @@ -173,32 +178,47 @@ class TestFwFingerprint(unittest.TestCase): self.assertFalse(request_obj.auxiliary and request_obj.bus == 1 and request_obj.obd_multiplexing, f"{brand.title()}: OBD multiplexed request is marked auxiliary: {request_obj}") + def test_brand_ecu_matches(self): + empty_response = {brand: set() for brand in FW_QUERY_CONFIGS} + self.assertEqual(get_brand_ecu_matches(set()), empty_response) + + # we ignore bus + expected_response = empty_response | {'toyota': {(0x750, 0xf)}} + self.assertEqual(get_brand_ecu_matches({(0x758, 0xf, 99)}), expected_response) + class TestFwFingerprintTiming(unittest.TestCase): N: int = 5 - TOL: float = 0.12 + TOL: float = 0.05 - @staticmethod - def _run_thread(thread: threading.Thread) -> float: - params = Params() - params.put_bool("ObdMultiplexingEnabled", True) - thread.start() - t = time.perf_counter() - while thread.is_alive(): - time.sleep(0.02) - if not params.get_bool("ObdMultiplexingChanged"): - params.put_bool("ObdMultiplexingChanged", True) - return time.perf_counter() - t + # for patched functions + current_obd_multiplexing: bool + total_time: float + + def fake_set_obd_multiplexing(self, _, obd_multiplexing): + """The 10Hz blocking params loop adds on average 50ms to the query time for each OBD multiplexing change""" + if obd_multiplexing != self.current_obd_multiplexing: + self.current_obd_multiplexing = obd_multiplexing + self.total_time += 0.1 / 2 + + def fake_get_data(self, timeout): + self.total_time += timeout + return {} def _benchmark_brand(self, brand, num_pandas): fake_socket = FakeSocket() - brand_time = 0 - for _ in range(self.N): - thread = threading.Thread(target=get_fw_versions, args=(fake_socket, fake_socket, brand), - kwargs=dict(num_pandas=num_pandas)) - brand_time += self._run_thread(thread) + self.total_time = 0 + with (mock.patch("openpilot.selfdrive.car.fw_versions.set_obd_multiplexing", self.fake_set_obd_multiplexing), + mock.patch("openpilot.selfdrive.car.isotp_parallel_query.IsoTpParallelQuery.get_data", self.fake_get_data)): + for _ in range(self.N): + # Treat each brand as the most likely (aka, the first) brand with OBD multiplexing initially on + self.current_obd_multiplexing = True - return brand_time / self.N + t = time.perf_counter() + get_fw_versions(fake_socket, fake_socket, brand, num_pandas=num_pandas) + self.total_time += time.perf_counter() - t + + return self.total_time / self.N def _assert_timing(self, avg_time, ref_time): self.assertLess(avg_time, ref_time + self.TOL) @@ -206,45 +226,53 @@ class TestFwFingerprintTiming(unittest.TestCase): def test_startup_timing(self): # Tests worse-case VIN query time and typical present ECU query time - vin_ref_time = 1.0 - present_ecu_ref_time = 0.8 + vin_ref_times = {'worst': 1.5, 'best': 0.5} # best assumes we go through all queries to get a match + present_ecu_ref_time = 0.75 + + def fake_get_ecu_addrs(*_, timeout): + self.total_time += timeout + return set() fake_socket = FakeSocket() - present_ecu_time = 0.0 - for _ in range(self.N): - thread = threading.Thread(target=get_present_ecus, args=(fake_socket, fake_socket), - kwargs=dict(num_pandas=2)) - present_ecu_time += self._run_thread(thread) - self._assert_timing(present_ecu_time / self.N, present_ecu_ref_time) - print(f'get_present_ecus, query time={present_ecu_time / self.N} seconds') + self.total_time = 0.0 + with (mock.patch("openpilot.selfdrive.car.fw_versions.set_obd_multiplexing", self.fake_set_obd_multiplexing), + mock.patch("openpilot.selfdrive.car.fw_versions.get_ecu_addrs", fake_get_ecu_addrs)): + for _ in range(self.N): + self.current_obd_multiplexing = True + get_present_ecus(fake_socket, fake_socket, num_pandas=2) + self._assert_timing(self.total_time / self.N, present_ecu_ref_time) + print(f'get_present_ecus, query time={self.total_time / self.N} seconds') - vin_time = 0.0 - for _ in range(self.N): - thread = threading.Thread(target=get_vin, args=(fake_socket, fake_socket, 1)) - vin_time += self._run_thread(thread) - self._assert_timing(vin_time / self.N, vin_ref_time) - print(f'get_vin, query time={vin_time / self.N} seconds') + for name, args in (('worst', {}), ('best', {'retry': 1})): + with self.subTest(name=name): + self.total_time = 0.0 + with (mock.patch("openpilot.selfdrive.car.isotp_parallel_query.IsoTpParallelQuery.get_data", self.fake_get_data)): + for _ in range(self.N): + get_vin(fake_socket, fake_socket, (0, 1), **args) + self._assert_timing(self.total_time / self.N, vin_ref_times[name]) + print(f'get_vin {name} case, query time={self.total_time / self.N} seconds') @pytest.mark.timeout(60) def test_fw_query_timing(self): - total_ref_time = 6.07 + total_ref_time = 6.8 brand_ref_times = { 1: { - 'body': 0.11, + 'gm': 0.5, + 'body': 0.1, 'chrysler': 0.3, - 'ford': 0.2, - 'honda': 0.52, - 'hyundai': 0.72, - 'mazda': 0.2, - 'nissan': 0.4, - 'subaru': 0.2, + 'ford': 0.1, + 'honda': 0.55, + 'hyundai': 0.65, + 'mazda': 0.1, + 'nissan': 0.8, + 'subaru': 0.45, 'tesla': 0.2, 'toyota': 1.6, 'volkswagen': 0.2, }, 2: { - 'ford': 0.3, - 'hyundai': 1.12, + 'ford': 0.2, + 'hyundai': 1.05, } } diff --git a/selfdrive/car/tests/test_lateral_limits.py b/selfdrive/car/tests/test_lateral_limits.py index 1fc626972f..10e24ff4c5 100755 --- a/selfdrive/car/tests/test_lateral_limits.py +++ b/selfdrive/car/tests/test_lateral_limits.py @@ -95,8 +95,8 @@ if __name__ == "__main__": _jerks["down_jerk"] > MAX_LAT_JERK_DOWN violation_str = " - VIOLATION" if violation else "" - print(f"{car_model:{max_car_model_len}} - up jerk: {round(_jerks['up_jerk'], 2):5} \ - m/s^3, down jerk: {round(_jerks['down_jerk'], 2):5} m/s^3{violation_str}") + print(f"{car_model:{max_car_model_len}} - up jerk: {round(_jerks['up_jerk'], 2):5} " + + f"m/s^3, down jerk: {round(_jerks['down_jerk'], 2):5} m/s^3{violation_str}") # exit with test result sys.exit(not result.result.wasSuccessful()) diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py index e6460d491e..537214d14c 100755 --- a/selfdrive/car/tests/test_models.py +++ b/selfdrive/car/tests/test_models.py @@ -2,28 +2,32 @@ import capnp import os import importlib +import pytest +import random import unittest from collections import defaultdict, Counter +import hypothesis.strategies as st +from hypothesis import Phase, given, settings from typing import List, Optional, Tuple from parameterized import parameterized_class -from cereal import log, car +from cereal import messaging, log, car from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL +from openpilot.selfdrive.car import gen_empty_fingerprint from openpilot.selfdrive.car.fingerprints import all_known_cars from openpilot.selfdrive.car.car_helpers import FRAME_FINGERPRINT, interfaces -from openpilot.selfdrive.car.gm.values import CAR as GM from openpilot.selfdrive.car.honda.values import CAR as HONDA, HONDA_BOSCH -from openpilot.selfdrive.car.hyundai.values import CAR as HYUNDAI from openpilot.selfdrive.car.tests.routes import non_tested_cars, routes, CarTestRoute from openpilot.selfdrive.controls.controlsd import Controls -from openpilot.selfdrive.test.openpilotci import get_url +from openpilot.selfdrive.test.helpers import read_segment_list +from openpilot.system.hardware.hw import DEFAULT_DOWNLOAD_CACHE_ROOT +from openpilot.tools.lib.comma_car_segments import get_url from openpilot.tools.lib.logreader import LogReader from openpilot.tools.lib.route import Route, SegmentName, RouteName from panda.tests.libpanda import libpanda_py -from openpilot.selfdrive.test.helpers import SKIP_ENV_VAR EventName = car.CarEvent.EventName PandaType = log.PandaState.PandaType @@ -33,11 +37,8 @@ NUM_JOBS = int(os.environ.get("NUM_JOBS", "1")) JOB_ID = int(os.environ.get("JOB_ID", "0")) INTERNAL_SEG_LIST = os.environ.get("INTERNAL_SEG_LIST", "") INTERNAL_SEG_CNT = int(os.environ.get("INTERNAL_SEG_CNT", "0")) - -ignore_addr_checks_valid = [ - GM.BUICK_REGAL, - HYUNDAI.GENESIS_G70_2020, -] +MAX_EXAMPLES = int(os.environ.get("MAX_EXAMPLES", "50")) +CI = os.environ.get("CI", None) is not None def get_test_cases() -> List[Tuple[str, Optional[CarTestRoute]]]: @@ -50,33 +51,111 @@ def get_test_cases() -> List[Tuple[str, Optional[CarTestRoute]]]: for i, c in enumerate(sorted(all_known_cars())): if i % NUM_JOBS == JOB_ID: - test_cases.extend(sorted((c, r) for r in routes_by_car.get(c, (None,)))) + test_cases.extend(sorted((c.value, r) for r in routes_by_car.get(c, (None,)))) else: - with open(os.path.join(BASEDIR, INTERNAL_SEG_LIST), "r") as f: - seg_list = f.read().splitlines() - - cnt = INTERNAL_SEG_CNT or len(seg_list) - seg_list_iter = iter(seg_list[:cnt]) - - for platform in seg_list_iter: - platform = platform[2:] # get rid of comment - segment_name = SegmentName(next(seg_list_iter)) + segment_list = read_segment_list(os.path.join(BASEDIR, INTERNAL_SEG_LIST)) + segment_list = random.sample(segment_list, INTERNAL_SEG_CNT or len(segment_list)) + for platform, segment in segment_list: + segment_name = SegmentName(segment) test_cases.append((platform, CarTestRoute(segment_name.route_name.canonical_name, platform, segment=segment_name.segment_num))) return test_cases - +@pytest.mark.slow +@pytest.mark.shared_download_cache class TestCarModelBase(unittest.TestCase): car_model: Optional[str] = None test_route: Optional[CarTestRoute] = None - ci: bool = True + test_route_on_bucket: bool = True # whether the route is on the preserved CI bucket can_msgs: List[capnp.lib.capnp._DynamicStructReader] + fingerprint: dict[int, dict[int, int]] elm_frame: Optional[int] + car_safety_mode_frame: Optional[int] + + @classmethod + def get_logreader(cls, seg): + if len(INTERNAL_SEG_LIST): + route_name = RouteName(cls.test_route.route) + return LogReader(f"cd:/{route_name.dongle_id}/{route_name.time_str}/{seg}/rlog.bz2") + else: + return LogReader(get_url(cls.test_route.route, seg)) + + @classmethod + def get_testing_data_from_logreader(cls, lr): + car_fw = [] + can_msgs = [] + cls.elm_frame = None + cls.car_safety_mode_frame = None + cls.fingerprint = gen_empty_fingerprint() + experimental_long = False + for msg in lr: + if msg.which() == "can": + can_msgs.append(msg) + if len(can_msgs) <= FRAME_FINGERPRINT: + for m in msg.can: + if m.src < 64: + cls.fingerprint[m.src][m.address] = len(m.dat) + + elif msg.which() == "carParams": + car_fw = msg.carParams.carFw + if msg.carParams.openpilotLongitudinalControl: + experimental_long = True + if cls.car_model is None and not cls.ci: + cls.car_model = msg.carParams.carFingerprint + + # Log which can frame the panda safety mode left ELM327, for CAN validity checks + elif msg.which() == 'pandaStates': + for ps in msg.pandaStates: + if cls.elm_frame is None and ps.safetyModel != SafetyModel.elm327: + cls.elm_frame = len(can_msgs) + if cls.car_safety_mode_frame is None and ps.safetyModel not in \ + (SafetyModel.elm327, SafetyModel.noOutput): + cls.car_safety_mode_frame = len(can_msgs) + + elif msg.which() == 'pandaStateDEPRECATED': + if cls.elm_frame is None and msg.pandaStateDEPRECATED.safetyModel != SafetyModel.elm327: + cls.elm_frame = len(can_msgs) + if cls.car_safety_mode_frame is None and msg.pandaStateDEPRECATED.safetyModel not in \ + (SafetyModel.elm327, SafetyModel.noOutput): + cls.car_safety_mode_frame = len(can_msgs) + + if len(can_msgs) > int(50 / DT_CTRL): + return car_fw, can_msgs, experimental_long + + raise Exception("no can data found") + + @classmethod + def get_testing_data(cls): + test_segs = (2, 1, 0) + if cls.test_route.segment is not None: + test_segs = (cls.test_route.segment,) + + # Try the primary method first (CI or internal) + for seg in test_segs: + try: + lr = cls.get_logreader(seg) + return cls.get_testing_data_from_logreader(lr) + except Exception: + pass + + # Route is not in CI bucket, assume either user has access (private), or it is public + # test_route_on_ci_bucket will fail when running in CI + if not len(INTERNAL_SEG_LIST): + cls.test_route_on_bucket = False + + for seg in test_segs: + try: + lr = LogReader(Route(cls.test_route.route).log_paths()[seg]) + return cls.get_testing_data_from_logreader(lr) + except Exception: + pass + + raise Exception(f"Route: {repr(cls.test_route.route)} with segments: {test_segs} not found or no CAN msgs found. Is it uploaded and public?") + - @unittest.skipIf(SKIP_ENV_VAR in os.environ, f"Long running test skipped. Unset {SKIP_ENV_VAR} to run") @classmethod def setUpClass(cls): if cls.__name__ == 'TestCarModel' or cls.__name__.endswith('Base'): @@ -92,75 +171,20 @@ class TestCarModelBase(unittest.TestCase): raise unittest.SkipTest raise Exception(f"missing test route for {cls.car_model}") - test_segs = (2, 1, 0) - if cls.test_route.segment is not None: - test_segs = (cls.test_route.segment,) - - for seg in test_segs: - try: - if len(INTERNAL_SEG_LIST): - route_name = RouteName(cls.test_route.route) - lr = LogReader(f"cd:/{route_name.dongle_id}/{route_name.time_str}/{seg}/rlog.bz2") - elif cls.ci: - lr = LogReader(get_url(cls.test_route.route, seg)) - else: - lr = LogReader(Route(cls.test_route.route).log_paths()[seg]) - except Exception: - continue - - car_fw = [] - can_msgs = [] - cls.elm_frame = None - fingerprint = defaultdict(dict) - experimental_long = False - enabled_toggle = True - dashcam_only = False - for msg in lr: - if msg.which() == "can": - can_msgs.append(msg) - if len(can_msgs) <= FRAME_FINGERPRINT: - for m in msg.can: - if m.src < 64: - fingerprint[m.src][m.address] = len(m.dat) - - elif msg.which() == "carParams": - car_fw = msg.carParams.carFw - dashcam_only = msg.carParams.dashcamOnly - if msg.carParams.openpilotLongitudinalControl: - experimental_long = True - if cls.car_model is None and not cls.ci: - cls.car_model = msg.carParams.carFingerprint - - elif msg.which() == 'initData': - for param in msg.initData.params.entries: - if param.key == 'OpenpilotEnabledToggle': - enabled_toggle = param.value.strip(b'\x00') == b'1' - - # Log which can frame the panda safety mode left ELM327, for CAN validity checks - if msg.which() == 'pandaStates': - for ps in msg.pandaStates: - if cls.elm_frame is None and ps.safetyModel != SafetyModel.elm327: - cls.elm_frame = len(can_msgs) - - elif msg.which() == 'pandaStateDEPRECATED': - if cls.elm_frame is None and msg.pandaStateDEPRECATED.safetyModel != SafetyModel.elm327: - cls.elm_frame = len(can_msgs) - - if len(can_msgs) > int(50 / DT_CTRL): - break - else: - raise Exception(f"Route: {repr(cls.test_route.route)} with segments: {test_segs} not found or no CAN msgs found. Is it uploaded?") + car_fw, can_msgs, experimental_long = cls.get_testing_data() # if relay is expected to be open in the route - cls.openpilot_enabled = enabled_toggle and not dashcam_only + cls.openpilot_enabled = cls.car_safety_mode_frame is not None cls.can_msgs = sorted(can_msgs, key=lambda msg: msg.logMonoTime) cls.CarInterface, cls.CarController, cls.CarState = interfaces[cls.car_model] - cls.CP = cls.CarInterface.get_params(cls.car_model, fingerprint, car_fw, experimental_long, docs=False) + cls.CP = cls.CarInterface.get_params(cls.car_model, cls.fingerprint, car_fw, experimental_long, docs=False) assert cls.CP assert cls.CP.carFingerprint == cls.car_model + os.environ["COMMA_CACHE"] = DEFAULT_DOWNLOAD_CACHE_ROOT + @classmethod def tearDownClass(cls): del cls.can_msgs @@ -229,7 +253,7 @@ class TestCarModelBase(unittest.TestCase): error_cnt += car.RadarData.Error.canError in rr.errors self.assertEqual(error_cnt, 0) - def test_panda_safety_rx_valid(self): + def test_panda_safety_rx_checks(self): if self.CP.dashcamOnly: self.skipTest("no need to check panda safety for dashcamOnly") @@ -251,20 +275,24 @@ class TestCarModelBase(unittest.TestCase): failed_addrs[hex(msg.address)] += 1 # ensure all msgs defined in the addr checks are valid - if self.car_model not in ignore_addr_checks_valid: - self.safety.safety_tick_current_rx_checks() - if t > 1e6: - self.assertTrue(self.safety.addr_checks_valid()) + self.safety.safety_tick_current_safety_config() + if t > 1e6: + self.assertTrue(self.safety.safety_config_valid()) - # No need to check relay malfunction on disabled routes (relay closed), - # or before fingerprinting is done (1s of tolerance to exit silent mode) - if self.openpilot_enabled and t / 1e4 > (self.elm_frame + 100): - self.assertFalse(self.safety.get_relay_malfunction()) - else: - self.safety.set_relay_malfunction(False) + # Don't check relay malfunction on disabled routes (relay closed), + # or before fingerprinting is done (elm327 and noOutput) + if self.openpilot_enabled and t / 1e4 > self.car_safety_mode_frame: + self.assertFalse(self.safety.get_relay_malfunction()) + else: + self.safety.set_relay_malfunction(False) self.assertFalse(len(failed_addrs), f"panda safety RX check failed: {failed_addrs}") + # ensure RX checks go invalid after small time with no traffic + self.safety.set_timer(int(t + (2*1e6))) + self.safety.safety_tick_current_safety_config() + self.assertFalse(self.safety.safety_config_valid()) + def test_panda_safety_tx_cases(self, data=None): """Asserts we can tx common messages""" if self.CP.notCar: @@ -301,6 +329,73 @@ class TestCarModelBase(unittest.TestCase): CC = car.CarControl.new_message(cruiseControl={'resume': True}) test_car_controller(CC) + # Skip stdout/stderr capture with pytest, causes elevated memory usage + @pytest.mark.nocapture + @settings(max_examples=MAX_EXAMPLES, deadline=None, + phases=(Phase.reuse, Phase.generate, Phase.shrink)) + @given(data=st.data()) + def test_panda_safety_carstate_fuzzy(self, data): + """ + For each example, pick a random CAN message on the bus and fuzz its data, + checking for panda state mismatches. + """ + + if self.CP.dashcamOnly: + self.skipTest("no need to check panda safety for dashcamOnly") + + valid_addrs = [(addr, bus, size) for bus, addrs in self.fingerprint.items() for addr, size in addrs.items()] + address, bus, size = data.draw(st.sampled_from(valid_addrs)) + + msg_strategy = st.binary(min_size=size, max_size=size) + msgs = data.draw(st.lists(msg_strategy, min_size=20)) + + CC = car.CarControl.new_message() + + for dat in msgs: + # due to panda updating state selectively, only edges are expected to match + # TODO: warm up CarState with real CAN messages to check edge of both sources + # (eg. toyota's gasPressed is the inverse of a signal being set) + prev_panda_gas = self.safety.get_gas_pressed_prev() + prev_panda_brake = self.safety.get_brake_pressed_prev() + prev_panda_regen_braking = self.safety.get_regen_braking_prev() + prev_panda_vehicle_moving = self.safety.get_vehicle_moving() + prev_panda_cruise_engaged = self.safety.get_cruise_engaged_prev() + prev_panda_acc_main_on = self.safety.get_acc_main_on() + + to_send = libpanda_py.make_CANPacket(address, bus, dat) + self.safety.safety_rx_hook(to_send) + + can = messaging.new_message('can', 1) + can.can = [log.CanData(address=address, dat=dat, src=bus)] + + CS = self.CI.update(CC, (can.to_bytes(),)) + + if self.safety.get_gas_pressed_prev() != prev_panda_gas: + self.assertEqual(CS.gasPressed, self.safety.get_gas_pressed_prev()) + + if self.safety.get_brake_pressed_prev() != prev_panda_brake: + # TODO: remove this exception once this mismatch is resolved + brake_pressed = CS.brakePressed + if CS.brakePressed and not self.safety.get_brake_pressed_prev(): + if self.CP.carFingerprint in (HONDA.PILOT, HONDA.RIDGELINE) and CS.brake > 0.05: + brake_pressed = False + + self.assertEqual(brake_pressed, self.safety.get_brake_pressed_prev()) + + if self.safety.get_regen_braking_prev() != prev_panda_regen_braking: + self.assertEqual(CS.regenBraking, self.safety.get_regen_braking_prev()) + + if self.safety.get_vehicle_moving() != prev_panda_vehicle_moving: + self.assertEqual(not CS.standstill, self.safety.get_vehicle_moving()) + + if not (self.CP.carName == "honda" and self.CP.carFingerprint not in HONDA_BOSCH): + if self.safety.get_cruise_engaged_prev() != prev_panda_cruise_engaged: + self.assertEqual(CS.cruiseState.enabled, self.safety.get_cruise_engaged_prev()) + + if self.CP.carName == "honda": + if self.safety.get_acc_main_on() != prev_panda_acc_main_on: + self.assertEqual(CS.cruiseState.available, self.safety.get_acc_main_on()) + def test_panda_safety_carstate(self): """ Assert that panda safety matches openpilot's carState @@ -384,8 +479,14 @@ class TestCarModelBase(unittest.TestCase): failed_checks = {k: v for k, v in checks.items() if v > 0} self.assertFalse(len(failed_checks), f"panda safety doesn't agree with openpilot: {failed_checks}") + @unittest.skipIf(not CI, "Accessing non CI-bucket routes is allowed only when not in CI") + def test_route_on_ci_bucket(self): + self.assertTrue(self.test_route_on_bucket, "Route not on CI bucket. " + + "This is fine to fail for WIP car ports, just let us know and we can upload your routes to the CI bucket.") + @parameterized_class(('car_model', 'test_route'), get_test_cases()) +@pytest.mark.xdist_group_class_property('test_route') class TestCarModel(TestCarModelBase): pass diff --git a/selfdrive/car/tests/test_models_segs.txt b/selfdrive/car/tests/test_models_segs.txt index 11c19685da..ca089bbdde 100644 --- a/selfdrive/car/tests/test_models_segs.txt +++ b/selfdrive/car/tests/test_models_segs.txt @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b93de5a9a259934896d8573d9b0f696289b88693908968009fe144e2e10a3355 -size 127597 +oid sha256:cadad21e1230729c70cffb4c46dd0a5dda4eec1a262b1bcd9f1b6b98265c20b5 +size 125104 diff --git a/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A030x00x00'.json b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A030x00x00'.json new file mode 100755 index 0000000000..39f881e4a7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A030x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.786729],[0.5672887],[0.28005219],[0.035554193],[0.5677058],[0.56628585],[0.56508285],[0.55352837],[0.54181147],[0.52912265],[0.5155199],[0.035507876],[0.0354848],[0.03545452],[0.03514088],[0.03492326],[0.034622278],[0.034296613]],"model_test_loss":0.019161002710461617,"input_size":18,"current_date_and_time":"2023-08-05_00-23-35","input_mean":[[27.090303],[0.047497954],[0.016577758],[0.0007272725],[0.044373695],[0.045599286],[0.046824276],[0.053295966],[0.05693411],[0.058819015],[0.0594564],[0.0004213227],[0.0004913575],[0.00056855136],[0.0008395286],[0.0009874002],[0.0010656398],[0.0010756186]],"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.25851473],[2.4962583],[-0.016582556],[-0.08381792],[-0.16407841],[0.7527331],[0.22097391]],"dense_1_W":[[0.23336808,-0.7667592,0.0008973085,0.34888005,0.4696916,-0.8726721,-0.052713018,-0.3410398,0.083063185,-0.21388897,0.14544983,-0.6639639,0.34076384,0.43210688,-0.18405053,0.14303815,0.1860583,-0.29693],[1.5149847,0.7346798,0.0012407255,0.12526828,-0.15258078,0.75175434,0.43043575,0.8569343,0.3044722,0.6560543,-0.6017985,0.586774,-0.2042676,-0.57615256,-0.82250106,-0.3673933,0.39087212,0.28107244],[-0.056961607,0.14175236,-0.14529344,-0.21935074,-0.4685559,-0.38604775,-0.30533233,0.08093428,-0.054244533,0.046247467,0.002660106,-1.0756555,-0.34733522,0.5118129,0.555274,0.9977485,0.5343106,0.76034987],[0.043177918,1.1426508,-0.2574032,-0.80439544,-1.0474149,0.018192194,-0.72060835,-1.5457815,0.4839822,-0.22740847,0.33749956,0.56239605,-0.18597472,-0.7004514,-0.12335018,0.9408467,1.3969381,1.9147022],[0.15510105,-0.51416093,-0.1709066,0.3122005,-0.27975515,-0.18827502,-0.018079426,-0.07361344,-0.17749901,-0.16815776,0.329771,-0.96269935,-0.41497013,-0.11298405,0.90808386,0.5985053,0.6670271,1.0441304],[0.04084261,-0.3579519,5.764384,2.1556206,-3.1756268,-2.5591285,-3.1059926,-2.1751692,1.9893773,5.344765,3.8095784,0.0068162596,-0.05961051,-0.7790495,0.25181335,0.08936475,-0.4691672,-1.5800782],[0.008442975,-0.9664588,1.254223,0.07495671,-0.9211808,-0.31230834,-1.420559,1.5870605,2.9423354,1.2097238,-1.5209136,0.53799206,-0.24978906,-0.4991973,-0.045118414,0.22720768,-0.021786746,-0.028036244]],"activation":"σ"},{"dense_2_W":[[0.08589389,0.5554316,-0.76533294,1.4370406,-0.749679,0.8190772,0.7847909],[-0.36651522,-0.23656718,-0.9679525,0.54530346,-0.44935027,-0.33107117,-0.11653592],[0.1937388,-0.51963365,-0.41821185,-0.56238693,-0.42072704,0.29349342,0.28873855],[0.18568017,-0.6255592,0.3175428,-0.1296441,0.36066276,0.090375744,0.011777949],[0.29389882,0.41541627,0.29456857,-0.06099775,0.8544443,-0.32980224,-0.018656367],[0.46638128,1.1828619,-1.0409766,1.1076639,-0.8162737,-0.1841819,0.35339093],[-3.1295595,-1.7625448,-0.9519052,2.3819635,-1.5629697,1.4751475,1.054407],[-0.26031867,-0.17098531,-0.86596596,-0.2823039,-0.09237936,-0.5557033,0.21093917],[0.17419276,-0.33989495,0.75525665,-0.23243514,0.067577615,-0.11459458,-0.12737218],[-0.5143146,-0.114794,-0.48588708,0.014262976,-0.3147008,-0.3320594,-0.050031766],[0.69564664,-0.20285861,-0.045860726,-0.24353331,-0.077484764,-0.48740336,-0.49667886],[-0.73832846,-0.056390353,-1.1750503,0.9696539,-0.14256468,-0.9768354,0.3639443],[-0.33827624,1.3389958,-0.90204453,1.2786052,-0.37693223,1.0066575,0.7839061]],"activation":"σ","dense_2_b":[[0.004400438],[-0.012242325],[-0.24042149],[-0.2775402],[0.026533086],[0.17362237],[-0.11018203],[-0.26839134],[-0.012196942],[-0.27722296],[0.061678015],[-0.030844057],[-0.1247429]]},{"dense_3_W":[[-0.004011368,0.44971785,-0.29006478,0.44446334,0.15595631,0.18539023,-0.027091525,-0.36382222,-0.47578183,0.3841759,-0.58085823,0.21311298,0.43156254],[-0.114403516,-0.58336,-0.15005592,0.4984802,0.050974183,-0.2988934,0.17598677,-0.38844588,-0.43446323,-0.46759152,0.59965366,-0.22926027,0.46112597],[-0.666863,-0.06357686,-0.37007764,0.7205996,0.7096061,-0.1758518,-0.8103027,-0.44219843,0.7200449,0.5289802,-0.16617142,-0.40598816,0.00529661]],"activation":"identity","dense_3_b":[[-0.09627088],[0.058493696],[0.09405641]]},{"dense_4_W":[[0.8841606,-0.039429788,-0.82832056]],"dense_4_b":[[-0.09594059]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A040x00x00'.json b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A040x00x00'.json new file mode 100755 index 0000000000..8c389b9507 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A040x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.8066874],[0.6620071],[0.29624054],[0.031885646],[0.67469865],[0.6712079],[0.6675276],[0.6426469],[0.62732595],[0.60797465],[0.5914247],[0.032055974],[0.032022122],[0.031979207],[0.031657174],[0.031374358],[0.031031318],[0.030767966]],"model_test_loss":0.016631487756967545,"input_size":18,"current_date_and_time":"2023-08-05_00-24-05","input_mean":[[27.279354],[0.07628178],[0.004740573],[0.004332477],[0.07348854],[0.07386953],[0.074113265],[0.07658985],[0.07849997],[0.08176357],[0.08127507],[0.004234957],[0.004238124],[0.004233249],[0.004148433],[0.004073079],[0.0040188804],[0.0037603448]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.5227308],[-0.9277926],[0.01344287],[-0.12681559],[1.8620169],[-0.18611176],[-0.46804744]],"dense_1_W":[[1.3088025,0.7938517,-0.07550197,0.12162848,-0.23023312,-0.53417087,0.7298755,-0.35863844,-1.232776,-0.32464856,0.69969106,-0.19938065,0.14594285,0.67643446,-0.7466748,-0.1924248,0.25988856,0.03815833],[-0.00032034,0.09513859,0.14649239,0.84448385,-0.33081084,-0.7636266,-0.43756434,0.15544043,-0.5536561,0.5097238,-0.44260737,-0.99638957,-0.6095418,0.38101298,-0.108550996,0.5993398,-0.28177363,-0.27099723],[0.017245863,-0.8860011,0.06905833,-0.23131342,-0.31428957,-0.5846859,0.11834183,0.10321145,-0.19951913,-0.13262431,0.051923424,-0.18100934,-0.4455598,0.7395236,-0.022803197,0.41319725,0.7613758,1.0495721],[0.01882326,-0.8194868,-0.009853303,0.4151132,0.38719785,-0.25005072,0.4127618,0.054583337,-0.5390043,-0.10014917,0.34088063,-1.117872,-0.08286508,0.46948376,0.35110041,0.38353947,0.25921276,-0.5767032],[1.2597413,-0.06712699,0.07406188,0.005649942,0.32073185,0.41326395,-0.71213233,0.1408067,0.5081324,0.06824581,-0.22174098,0.42761666,-0.5766476,-0.7140219,0.44048855,0.48427463,0.31352678,-0.4882206],[-0.016965292,1.2305305,0.10325935,0.24419214,2.1640618,2.4280353,2.9627275,1.0981169,-1.7519482,-3.7584212,-3.6021638,-0.63591194,-0.52256954,0.8271195,-0.3019169,-0.87059563,0.38380772,0.69980204],[-0.031441774,-1.5607485,-7.438145,1.1177127,1.5216038,0.7637881,0.8477267,-0.835395,-1.5533942,-0.35314834,1.1110218,-1.644007,-1.0006105,-0.3352244,0.20025133,0.83611494,0.31554085,0.33613914]],"activation":"σ"},{"dense_2_W":[[-0.38370743,0.32968736,-0.004957762,-0.9081518,0.15075667,-0.068389416,0.008115187],[-0.3697097,0.47690573,-0.55084234,-0.7900301,0.27233642,0.14098246,-0.3138353],[-1.0909184,-0.5307646,0.27474627,-0.8662306,-0.30040765,0.033314817,-0.3492279],[0.5701307,-0.5303288,0.031248378,0.6385814,0.010645484,-0.016549833,0.46346626],[0.1442632,-0.42781132,0.24439524,0.23937261,-0.81748235,0.064812824,0.4000337],[-0.36214906,0.19428124,0.5956358,0.9273549,-0.14404434,0.21891229,-0.5955698],[0.7355732,-0.09893048,0.07489529,0.38501185,0.9168706,0.050819628,1.2076929],[0.6842598,0.1722268,-0.2845938,0.2455436,0.97617817,0.25799465,1.0193411],[-0.08084107,-0.58205926,0.07038275,-0.30948064,0.07723996,-0.5130746,0.4102158],[0.04777135,-0.3226301,0.02726643,-0.6204659,0.7076705,-0.080048494,-0.05065219],[0.33558354,-0.32304227,0.38823822,-0.8043962,0.65630925,-0.22564156,-0.18366374],[-0.72608715,0.54069227,-0.4357295,0.016691474,0.19214477,-0.21972942,-0.7132383],[-0.2671177,-0.59838676,-0.09683501,-0.67224425,0.39455676,0.14678267,0.29082012]],"activation":"σ","dense_2_b":[[0.042974856],[0.047666013],[0.071242],[-0.067780755],[-0.13547619],[-0.022536043],[-0.1646825],[-0.09613349],[-0.062535584],[0.06297165],[0.19214764],[-0.0261287],[-0.11438154]]},{"dense_3_W":[[0.3077478,0.14613815,0.65330607,-0.18163036,-0.67502165,-0.5579221,-0.202035,0.18795493,0.12072459,-0.10777223,0.4149204,0.61287045,0.58160293],[-0.5099703,-0.19231012,-0.377239,0.59486294,0.59117395,0.51951456,0.15894152,0.528822,-0.40744722,-0.56634617,-0.6320977,-0.22041576,-0.54817945],[0.33777002,-0.54104495,-0.24469995,-0.37649524,-0.5114555,0.42566466,-0.16754289,-0.10115532,0.15072124,0.3869163,0.36524448,-0.001329152,0.4387867]],"activation":"identity","dense_3_b":[[-0.04467462],[0.033724587],[-0.113627024]]},{"dense_4_W":[[0.64887154,-1.1038072,0.022054804]],"dense_4_b":[[-0.033230864]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A070x00x00'.json b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A070x00x00'.json new file mode 100755 index 0000000000..05288d3d86 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A070x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.804848],[0.8000588],[0.3076164],[0.04094818],[0.8080633],[0.80525005],[0.80151165],[0.7824581],[0.7688379],[0.75354946],[0.73837227],[0.040943466],[0.040922932],[0.04089199],[0.04062815],[0.040328],[0.039892863],[0.03927387]],"model_test_loss":0.036003123968839645,"input_size":18,"current_date_and_time":"2023-08-05_00-24-34","input_mean":[[28.423885],[0.007884776],[-0.0031538303],[0.015055777],[0.006704811],[0.0065370076],[0.0068571228],[0.0054512075],[0.004117628],[0.005428144],[0.0066870335],[0.015062948],[0.015041507],[0.015016925],[0.014904091],[0.014769581],[0.014618669],[0.014560436]],"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.16520002],[1.9058155],[0.08453396],[-0.5702096],[-0.022235246],[2.1811569],[0.32843062]],"dense_1_W":[[0.007258376,0.5546316,0.0021156757,-0.11869205,-0.44563162,0.5686885,-0.49791276,0.32130694,0.18480486,0.20529743,-0.2983059,0.9580912,-0.30417892,-0.17480053,-0.5471751,-0.15583673,0.09669533,0.13655974],[1.1045209,0.72982305,-0.0012157066,-0.32325575,0.36619568,0.28777912,0.4200975,0.32855922,1.0964329,0.0125418985,-0.3758639,0.045545604,0.15269232,-0.3104408,0.2671959,-0.42339674,-0.24723499,-0.19590895],[-0.018215153,-0.9239081,-7.2882724,-0.043018136,0.89870304,0.26894778,0.9689756,-0.2952786,-1.5947425,-0.1945536,0.7288008,-1.1317624,-0.5719013,-0.14229906,0.4161876,-0.08783979,0.42565742,0.90669537],[1.5756099,0.74937963,-0.6682266,0.17876424,0.41060305,0.463597,-0.1566954,-0.2545488,0.60787153,0.32818866,-0.6589883,0.27973333,-0.2438422,-0.05319809,-0.15574023,-0.6602739,0.26140356,0.13322982],[0.0029903697,0.8079928,-1.8084258,0.065171555,2.247587,1.658609,1.4290156,-0.038293317,-1.8411868,-2.3568115,-1.5802773,-0.48189434,-0.3668556,0.065492555,-0.07620456,-0.24639589,0.45018005,0.522461],[0.8719188,-0.5783348,-0.004002766,0.28650954,-0.4252121,-0.44623157,0.058663256,-0.56094223,-0.55295444,-0.3040901,0.3919486,-0.46245384,-0.029172314,0.18465641,0.25736162,0.39288744,0.36129612,-0.11474042],[0.04924682,-0.42568168,0.00047019235,0.047753103,-0.6865259,-0.47911242,-0.964993,-0.102179274,-0.02535022,0.20489506,-0.38479173,0.51818967,0.28378603,-0.42722967,-0.48230556,0.024352815,0.07428285,0.62325346]],"activation":"σ"},{"dense_2_W":[[0.90986884,0.47950652,0.25053373,0.19939893,0.022542464,-0.38787457,0.35567287],[-1.0180658,-1.145854,0.6623716,-0.28077835,0.15672879,-0.85848707,-1.4568413],[1.406467,0.28726155,-0.062790155,-0.1506732,-0.9504507,0.3980746,-0.17273381],[1.1017784,-0.79252,-0.19594195,-0.58535796,-0.43267435,-1.4622566,1.099609],[-1.6988904,-1.4887654,1.0556726,0.14193814,0.567861,-0.78099054,-1.1916547],[1.3314943,-0.04540647,0.01911306,0.5834418,0.35737038,-0.3738458,-0.9131301],[-1.4514605,-1.1643327,0.3310674,-0.40083563,-0.2108704,-0.35081738,-1.25731],[1.4591875,0.51000947,0.6822781,-0.026922852,-0.20268947,-0.74282473,-0.7089955],[-1.5790056,-0.81782144,0.12857606,-0.031774927,0.009384996,-0.011062012,-0.47970626],[0.6185028,-0.44301233,0.16603012,-0.12869644,-0.550066,-0.039163988,-0.13839607],[-0.018947372,0.18183467,-0.7923736,0.45726624,-0.7995292,-0.59161717,0.1465947],[1.1080922,-0.83549255,-1.2054135,0.81522685,-0.83383155,-1.7733766,0.60040456],[-1.173769,0.9102019,0.8067946,0.12065304,0.46038142,0.988551,-0.8998902]],"activation":"σ","dense_2_b":[[-0.34571314],[-0.06508791],[-0.16475885],[-0.51652795],[0.09335283],[-0.3354126],[-0.05395547],[-0.31864733],[0.0341759],[-0.28023538],[-0.24353532],[-0.6017034],[0.3884714]]},{"dense_3_W":[[-0.14432088,-0.26102468,-0.16678491,0.27030742,0.5432606,0.36784706,0.31559888,-0.39181647,0.25105116,0.031935308,0.059210572,-0.27962592,-0.23508798],[0.10690615,-0.6226754,0.33630693,0.72590107,-0.7262614,0.36729288,-0.35301742,0.729708,-0.85739464,0.085655235,-0.09123609,0.3166798,-0.6107507],[-0.24342504,0.5378751,-0.33611593,-0.14817247,0.11123475,0.48445055,0.52930707,0.3598816,0.5077164,-0.062455237,-0.2566208,-0.5888578,-0.27487496]],"activation":"identity","dense_3_b":[[0.18145333],[-0.101992324],[0.0892087]]},{"dense_4_W":[[-0.021246718,1.246937,-0.05223701]],"dense_4_b":[[-0.08010172]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A130x00x00'.json b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A130x00x00'.json new file mode 100755 index 0000000000..0676cba6ca --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020 b'39990-TJB-A130x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.23255],[0.72479707],[0.2731752],[0.041931108],[0.7306734],[0.728485],[0.72535795],[0.70364136],[0.6862298],[0.6646152],[0.6451095],[0.041831795],[0.041856535],[0.04186677],[0.041598115],[0.04127907],[0.040753823],[0.040154044]],"model_test_loss":0.02374698594212532,"input_size":18,"current_date_and_time":"2023-08-05_00-25-01","input_mean":[[25.491344],[0.044132378],[0.0061853817],[-0.0029408792],[0.041254394],[0.04185997],[0.04264751],[0.044891346],[0.045578476],[0.048339594],[0.049801964],[-0.002985854],[-0.0029757507],[-0.0029692403],[-0.003035695],[-0.0031368348],[-0.0032066072],[-0.003333973]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.2589055],[-0.6300203],[-0.18905114],[0.035437174],[-0.19216189],[-0.18303323],[0.30025914]],"dense_1_W":[[-0.22914602,0.37103513,-3.0855074,-0.016385019,-0.1979585,0.269418,0.30819643,-0.057719447,-0.6764055,-0.551892,0.44502893,-0.14667127,0.09163551,0.13834381,-0.032953348,-0.1365294,0.108110294,-0.015983328],[0.78569615,-0.10759539,-2.9499667,0.063911594,0.32446858,0.47014278,-0.37796447,0.17923851,0.04087841,-0.1296694,-0.25734457,0.13309121,0.117884666,-0.24419518,0.18338855,-0.34687102,-0.28147766,0.2696666],[-0.08656571,0.008094062,3.595688,-0.26259422,-0.08986283,-0.2759453,-0.21220718,0.46498194,-0.04266637,0.19100346,-0.15709823,-0.12756641,0.08520138,-0.15009129,0.46134138,0.45091918,-0.34697345,-0.04493433],[-0.0057781595,0.89213103,-0.6567681,0.06595929,0.7855131,0.69278926,1.5298123,0.91839993,-2.0061233,-2.435459,-0.6626293,-0.74082696,0.24077982,0.32887235,0.38966477,-0.42399997,-0.13695207,0.89643025],[0.00082410604,0.5266071,0.0135379555,0.69229037,-0.6991144,0.1244281,-0.08241515,0.19330071,0.6835726,-0.17600393,-0.27664047,0.3862313,-0.16833216,0.13843256,-0.8122221,-0.7083284,-0.53014934,0.8007278],[-0.002461339,0.5366552,0.005371866,-0.20480752,-0.02694003,0.43186262,-0.022536932,-0.2710664,-0.20992674,0.055011317,0.10523869,0.7081066,-0.25829124,-0.3393486,-0.033259023,0.11424787,0.25399274,-0.21338066],[-0.83344615,0.4972349,-2.674982,-0.8011467,-0.00091532787,0.15652598,-0.1011277,0.16851202,-0.010218224,-0.3162073,-0.21929123,0.8358039,-0.3675451,0.20605241,-0.044107787,0.02273551,-0.12779047,0.16776903]],"activation":"σ"},{"dense_2_W":[[-0.19773088,-0.07987414,-0.46394402,-0.25385913,-0.51523316,-0.7734022,-0.24892572],[0.7524863,-0.83441466,-0.15295947,-0.52500844,-0.65857184,-1.0245075,-0.12141446],[0.47812417,-0.31713268,-0.4710023,0.8264185,-0.8333809,-0.7837305,-0.21949],[-0.10150827,-0.33362886,-0.570894,-0.6523667,-0.12733579,-1.03887,0.089515604],[0.2693557,0.33961922,0.5830918,-0.16009484,0.88582087,-0.18754318,0.27771476],[-0.32544395,0.44090092,0.28255528,-0.7974365,0.17504413,0.75356585,0.58148295],[-0.31234935,0.13871694,0.8212621,-0.041753158,0.7099144,0.2015646,-0.056245737],[0.2175629,0.09308608,0.80202895,-0.24198753,0.48807403,-0.22803837,0.64155793],[-0.37297815,-0.454524,-0.2041459,-0.21450296,-0.4926007,-0.6716726,-0.30035603],[0.28631696,-0.6844529,-0.3590589,0.0717205,-0.8350303,-0.9547256,0.01994262],[0.09526404,-0.37569124,-0.54859555,-0.25455466,0.08059891,-0.5854736,-0.28227013],[0.49766162,-0.4683451,-0.30763015,1.2545203,-1.0363722,-0.6756313,-0.67825943],[-0.020436687,-0.17459548,-0.8167955,0.5455366,-0.37868357,-0.6452078,-0.50482]],"activation":"σ","dense_2_b":[[0.14226258],[0.20491779],[0.21216024],[-0.09415054],[-0.10954374],[-0.15493721],[-0.081466906],[-0.0703362],[0.024982613],[-0.039309245],[-0.06658772],[0.5169116],[0.23269281]]},{"dense_3_W":[[0.032323103,-0.54836,-0.5319698,-0.29569536,0.23183687,0.6694105,0.038498178,0.63660324,-0.38424796,0.06097146,-0.4531479,-0.43248698,-0.5142001],[0.6478883,0.25922352,0.62727135,0.7343839,-0.5265464,-0.61613655,-0.18139401,0.109259166,0.08149141,0.73708165,0.20760447,-0.15330316,0.5328034],[-0.27989653,-0.7052997,-0.25653857,0.116460204,0.14982809,0.19868049,0.6558363,0.39804822,-0.17899916,0.09420844,0.19702157,-0.65146506,-0.42718345]],"activation":"identity","dense_3_b":[[0.008412994],[-0.026723087],[0.007888077]]},{"dense_4_W":[[0.60362816,-0.77239645,0.9147824]],"dense_4_b":[[0.010696713]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/ACURA RDX 2020.json b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020.json new file mode 100755 index 0000000000..68c6079aea --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/ACURA RDX 2020.json @@ -0,0 +1 @@ +{"input_std":[[8.319796],[0.8197253],[0.2695665],[0.042975243],[0.82591987],[0.8242552],[0.82166827],[0.7989035],[0.78012997],[0.7541669],[0.727379],[0.042928882],[0.042931043],[0.04292182],[0.042691696],[0.042392965],[0.04186602],[0.041271493]],"model_test_loss":0.026207376271486282,"input_size":18,"current_date_and_time":"2023-08-05_00-22-46","input_mean":[[26.074522],[0.02839493],[0.0066744387],[0.002057746],[0.02693295],[0.026884235],[0.027213756],[0.03047188],[0.032183405],[0.03682154],[0.037578877],[0.0020827646],[0.0020767434],[0.002068271],[0.0019987107],[0.001959759],[0.0019052405],[0.0017531246]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.040739167],[2.3032],[0.12316159],[-0.2659433],[-0.14477858],[2.5866256],[0.007428121]],"dense_1_W":[[-0.00041187002,-0.43338582,0.00060599507,-0.1214792,0.11413983,-0.5961203,0.28133482,0.20372222,-0.3518884,0.004369656,0.059917737,-0.8609317,0.057816904,0.6169038,0.3990334,0.008638719,0.40356407,-0.16347249],[2.204209,-0.6977474,0.0003794136,-0.029842956,0.42360333,-0.03850665,0.77470416,0.13669024,-1.1576334,-0.2837559,0.290581,-0.20709048,0.06827377,0.39236906,0.2664924,-0.070944384,0.061474152,-0.18787181],[0.0027994395,1.1713752,3.9056025,-0.2533814,-0.5706249,-0.31465232,-0.28078023,0.9239433,0.8800892,0.45323586,-1.5842354,1.1251147,0.001203793,-0.631376,0.17771868,-0.5216376,-0.3776946,0.2864524],[-0.45875242,-0.35037747,-0.0044959267,0.2115901,0.49776042,0.40634266,0.16292186,0.085123494,-0.9553305,-0.6551008,1.0865217,-0.71530885,-0.122710146,0.41569617,0.053198084,-0.013457165,0.36482632,-0.3238176],[-0.002217434,1.7620963,-1.2475897,0.2861537,2.5786693,1.6882615,2.2971427,0.5035391,-3.1869397,-3.7319245,-1.4041471,-1.1169863,-0.17736337,0.21103925,0.1615338,-0.7596914,0.4106967,0.9845423],[2.4344306,-0.5410767,0.0015357351,-0.4139311,-0.2258391,0.22010726,-0.43920308,0.3511928,0.9479655,0.80018866,-0.516027,0.007953332,0.033446178,-0.082440384,0.35339966,-0.26683265,-0.33867463,0.3848125],[-0.006754755,0.48652485,-0.00026165723,-0.07224382,-0.032497358,0.3571908,-0.30286846,-0.38309038,0.36634418,0.2480767,-0.20110212,0.7545479,0.11547977,-0.7146525,-0.018818611,-0.31016228,0.010726242,0.2242711]],"activation":"σ"},{"dense_2_W":[[0.5528864,0.008744154,0.6015725,0.22935376,-0.51005757,-0.5996119,-0.061544895],[-1.4023882,0.050312754,-0.09053194,-0.5902193,0.3458193,-0.14508769,0.946796],[-1.1020836,-1.510418,0.81544393,-0.40635344,-0.4560999,-0.2849373,1.1164322],[-0.4434681,-0.6467564,0.35384342,-0.4493043,-0.23754148,-0.24804021,0.9237547],[-0.27906877,-0.9630674,0.42410734,-0.76862967,-0.59738564,-0.70335937,-0.18449919],[-0.50024533,-0.013576657,0.25596973,0.105690226,-0.52567744,0.80972326,0.7098216],[-0.8556806,-0.14960146,-0.14877279,0.25888273,-0.18901795,-0.16515623,0.7054368],[-1.041555,0.5246004,0.87523067,-0.4851678,-0.5188004,1.3508142,1.344452],[0.83991337,0.54517484,0.09614608,0.028868627,0.35332617,0.22425945,-0.24393064],[0.48884755,-0.6723522,0.161554,-0.18337585,0.010732531,0.042358696,-0.94669324],[0.7589174,0.44016284,-0.21002136,-0.7584538,-0.1012028,-0.44348133,-0.34792235],[0.68993133,-0.13230318,-0.20205282,0.33807474,0.2551999,-0.7216631,-0.9246813],[0.55567986,0.92921287,-0.3879664,-0.06419992,0.44321644,0.34334105,-0.7811811]],"activation":"σ","dense_2_b":[[0.009339096],[-0.027214382],[-0.19324711],[-0.1799901],[-0.3219004],[-0.0076973503],[0.031202752],[0.1887236],[-0.10121091],[-0.21036065],[-0.02065366],[-0.068702094],[0.096490316]]},{"dense_3_W":[[0.5728007,-0.3089611,0.28924087,-0.5445901,0.35486373,-0.44516575,-0.5423116,0.1779453,0.58426845,0.66963387,-0.31166366,0.6550927,0.50334716],[-0.40078798,-0.027345562,-0.5357739,-0.5126658,-0.5254064,-0.32021227,-0.44433862,-0.79833746,-0.10665151,0.20663711,-0.17090832,0.98109436,0.78809434],[-0.17410587,0.23138371,0.66809905,0.2743278,0.096785605,0.5667218,0.52852666,0.4389385,-0.4016732,0.05424836,-0.7506198,-0.71257013,-0.20795672]],"activation":"identity","dense_3_b":[[0.02470415],[0.1408834],[-0.05001292]]},{"dense_4_W":[[-0.3242929,-0.272474,0.8721407]],"dense_4_b":[[-0.046378713]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566G0HA14A1'.json b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566G0HA14A1'.json new file mode 100755 index 0000000000..5a9673b63d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566G0HA14A1'.json @@ -0,0 +1 @@ +{"input_std":[[6.577478],[0.7438756],[0.36118278],[0.032957785],[0.73931956],[0.7406723],[0.74192834],[0.74210787],[0.7407529],[0.73199296],[0.7199361],[0.03313112],[0.03308075],[0.03302625],[0.032850783],[0.032766964],[0.032702252],[0.03262269]],"model_test_loss":0.005140421446412802,"input_size":18,"current_date_and_time":"2023-08-05_01-40-02","input_mean":[[25.733025],[-0.0530399],[-0.0037603835],[-0.010416541],[-0.052312925],[-0.051846784],[-0.05134495],[-0.054431908],[-0.05473598],[-0.057869826],[-0.06307359],[-0.0104753],[-0.010442205],[-0.010416312],[-0.010369451],[-0.010322098],[-0.010290761],[-0.010380604]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.3245497],[-1.4683536],[-1.0290579],[-1.1341333],[-2.1062934],[0.3018172],[-0.23615684]],"dense_1_W":[[-0.7003263,0.49873114,0.0898631,-0.124622256,-0.074973226,0.9586173,-0.38187122,-0.2140207,-0.17437121,-0.08466658,0.18243429,0.332077,0.091170385,-0.31530052,-0.40582517,-0.18025973,0.01580242,0.16465585],[0.65071887,0.098929696,0.081038885,-0.43317255,0.09570322,0.6772797,0.09694697,-0.2210818,-0.36565584,0.14244506,0.1442449,-0.060965866,0.69212425,-0.22231308,-0.38532606,0.025514778,-0.33013564,0.31779227],[-0.45925462,-0.7011064,-0.117601246,-0.29964444,0.5295153,-1.7198939,1.0653187,-0.25740883,-0.017742164,-0.3926751,0.14859986,0.093567744,-0.0036377048,0.6028897,-0.024838587,-0.72965765,0.22210832,0.17412421],[-0.41014504,0.7981556,0.12894426,-0.15330562,-0.46003667,0.80571204,-0.28026396,0.07452426,0.46427798,0.08275176,-0.15462086,-0.22026892,0.2446177,-0.11201427,0.13369443,0.085089125,0.04192831,-0.079959705],[-1.4503621,0.59118265,0.22731866,-0.0001668829,-0.1303347,0.73156023,-0.5737055,0.043029774,0.20244285,-0.0695449,0.08930824,0.064521626,0.068293415,-0.44724983,0.15501118,0.5946885,0.51368195,0.7538089],[0.004021074,-0.6826504,-3.3770466,-0.7409217,1.6001521,0.0391899,-0.124299094,-1.0929167,-1.0039091,0.09728141,1.62364,0.04166459,-0.9421838,-0.19240098,1.0952632,0.8884146,0.37573487,-0.81200004],[-0.018716704,0.2596357,0.085221626,-0.33597907,-0.328589,0.86857575,-0.25697392,-0.06518752,0.058769446,-0.46493977,0.26284,0.32883435,0.3965106,-0.51409185,-0.35840464,0.25830442,0.17984946,-0.09297429]],"activation":"σ"},{"dense_2_W":[[-0.5632885,-0.53817147,0.64087266,-0.6966918,0.19645694,0.20904736,-0.6993455],[-0.16920735,-1.1400033,0.759447,-0.8198524,-0.19880797,0.8225933,-0.57966435],[-1.5840745,0.2576235,-1.4874045,-0.97268665,0.10756933,-1.5350775,0.09277853],[-0.746399,-0.69672894,0.029895214,-0.47871673,-0.044179466,-0.40327352,0.16566314],[-0.038666934,0.08509904,0.038226664,0.19170763,-0.115979545,-0.61926454,-0.34254095],[0.4221073,0.9338458,0.43968564,0.060404833,-0.27444592,0.18882848,0.04802321],[0.11849655,0.6292092,-1.1421567,0.91632056,0.12051813,-0.47201702,0.47282815],[0.65729594,0.95542836,0.29725003,-0.13384224,0.040036652,-0.3340561,0.91600364],[-0.50302577,0.20259018,-0.82741207,-0.78905314,-0.99308705,0.37110266,-0.2015438],[-0.6504161,-0.95296395,1.3312038,-0.82766765,-0.015905075,0.6261558,-0.30300564],[-0.5737891,0.27416453,-0.13240442,-1.0399845,-0.13625641,-1.1091161,-0.10313148],[-0.88772994,-1.1795825,1.4089849,-0.89326316,-0.2216985,1.2031909,-1.0210301],[-0.45486033,-0.6124461,0.7889247,-0.48303822,-0.066258006,0.67935133,-0.68396086]],"activation":"σ","dense_2_b":[[0.1795089],[0.1396347],[0.28086272],[0.088517],[-0.40390638],[0.033958796],[-0.24937943],[-0.11856169],[-0.36012134],[0.3268745],[-0.16133401],[0.5044416],[-0.036166213]]},{"dense_3_W":[[0.21906924,-0.43080992,-0.26896283,-0.5586104,0.46261472,-0.18390699,0.68614185,0.44715905,0.5650668,-0.5596256,0.0845164,-0.1399013,-0.0069408407],[-0.6725418,-0.5217038,-0.41263464,-0.14729826,-0.3349171,0.45824003,0.45669848,0.41630223,-0.1198797,-0.37809664,-0.58279663,-0.39970228,-0.46720004],[-0.0911098,-0.2839844,0.74057204,0.28854206,-0.602245,-0.027574118,-0.23919757,-0.57538325,-0.20772439,0.4040517,-0.1298003,0.9268099,-0.33000454]],"activation":"identity","dense_3_b":[[0.09233651],[0.16433457],[-0.078944445]]},{"dense_4_W":[[0.3148156,0.70836514,-0.25909597]],"dense_4_b":[[0.12378432]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x873Q0909144K xf1x895072xf1x82x0571G0HA16A1'.json b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x873Q0909144K xf1x895072xf1x82x0571G0HA16A1'.json new file mode 100755 index 0000000000..fe26c2fbaa --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x873Q0909144K xf1x895072xf1x82x0571G0HA16A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.444296],[0.925862],[0.3873827],[0.037189186],[0.91709805],[0.9205691],[0.92302024],[0.92303276],[0.92241675],[0.9182511],[0.9138257],[0.0370443],[0.03708567],[0.03713202],[0.037330262],[0.03739135],[0.037358396],[0.037249684]],"model_test_loss":0.005741582717746496,"input_size":18,"current_date_and_time":"2023-08-05_02-04-31","input_mean":[[25.35733],[0.06905999],[0.003920239],[-0.0061412086],[0.06798497],[0.067765675],[0.067846335],[0.07060763],[0.07478977],[0.08159132],[0.08384652],[-0.00630684],[-0.006240933],[-0.0061786305],[-0.005954251],[-0.0058416207],[-0.005766785],[-0.0058315513]],"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.09965041],[-2.8333573],[0.1400968],[0.009966896],[-0.54726493],[0.0015999223],[-3.2500806]],"dense_1_W":[[0.008949206,-0.7134963,-0.039546415,0.32233778,0.046066836,-1.0873427,0.9605672,0.20299414,0.19314864,0.08948046,-0.20269577,-0.3755727,-0.37828064,0.14123754,0.4638058,0.26318562,-0.13823359,-0.23261546],[-1.1191226,1.24295,0.5152675,-0.08874825,0.0025459442,0.80788636,-0.104676746,0.4805844,-0.02262418,-0.03299286,-0.034461044,0.1827796,0.026162459,-0.3095013,0.17938249,0.18499815,-0.08783259,-0.045922197],[0.00032858906,1.4926245,0.046637077,-0.32630235,-0.5585684,0.4034735,0.034369424,0.32580245,0.6714615,0.1760409,-0.24315467,0.4334825,0.4505814,-0.71569765,-0.20759046,0.37798336,0.05509028,-0.05075517],[-0.0020555735,1.4031184,4.5700407,0.20270438,0.024622126,0.36119592,0.061005134,0.40066856,0.019982928,-1.0741708,-0.95529234,0.091578454,0.10358388,-0.14398912,-0.42586878,0.46220022,-0.20536982,0.016865704],[-0.002008851,-0.69844705,0.08216384,0.44206062,-0.69932556,-0.9771249,1.0371966,0.47466856,0.09576244,-0.109484494,-0.39007372,-0.006908211,0.0011474143,0.66040933,1.1697054,0.06390619,0.45119238,0.11735442],[0.008935762,0.91445494,0.028773237,-0.52121264,-0.174554,0.9050357,-1.0716133,0.12847908,0.044074073,-0.09941267,-0.028681703,0.0962431,0.08194988,0.08453359,0.29791412,-0.14331576,0.10533343,-0.020068252],[-1.1533717,-1.6527721,-0.52385485,-0.4202616,0.2607004,-1.0356239,0.27048177,-0.3373225,-0.09205943,0.3441015,-0.11975457,-0.055931754,0.18685083,0.20495965,0.187628,-0.1650148,-0.1626427,0.17851348]],"activation":"σ"},{"dense_2_W":[[-0.16502862,0.6035214,-0.4797608,-0.26366422,0.1172479,0.65635234,-0.32176182],[0.82605934,-0.22745298,-0.5525386,-0.36830527,0.23893076,-0.3919843,0.49190587],[-0.2966492,0.09588704,-0.45871517,-0.11154242,0.35666984,0.039538093,-0.1328796],[0.034723956,-0.46226948,-0.48428744,0.31498548,-0.24748813,-0.13231282,0.09660036],[-0.1478363,-0.19293658,-0.2720306,-0.45817015,-0.37688,-0.50546414,-0.28803188],[0.8061317,-0.35915154,0.11437668,-0.25236553,0.11779728,-0.5324483,0.11850576],[0.022361243,-0.26832423,-0.62965536,0.22057025,0.24124865,-0.34575233,-0.38505265],[0.2575399,0.05998816,0.061493885,0.018274274,-0.5433316,-0.29543966,-0.61841214],[-0.16821893,-0.15542041,0.30067912,0.050528307,0.18159576,0.247534,-0.4873542],[-0.5824741,0.4054871,0.64855784,0.20722958,-0.41800383,0.43538094,-0.7275382],[0.31753623,0.07011032,0.57152003,0.090241544,0.20502838,0.20511343,-0.107010804],[0.44585994,-0.39532375,-0.526214,-0.23581168,0.26709425,-0.246547,0.028189523],[-0.5761572,-0.07350907,0.4795847,-0.2759125,-0.26325545,0.70039105,0.071710885]],"activation":"σ","dense_2_b":[[-0.027677696],[0.045070633],[-0.02658284],[-0.22184646],[-0.017363569],[0.015014292],[-0.24714506],[-0.25203505],[-0.008711522],[-0.065313436],[-0.03065247],[0.060002126],[0.012620704]]},{"dense_3_W":[[0.20473917,-0.651288,-0.23288384,-0.59891415,-0.1475974,-0.23222987,-0.32410318,0.11691736,0.6000578,0.51066893,0.20957007,-0.028224448,-0.19108637],[-0.31180796,-0.4837876,-0.252939,-0.34604937,0.15680352,-0.285469,0.56567293,-0.51167464,-0.016737705,0.21543846,0.13277481,-0.622958,0.62488127],[-0.6404472,0.4868364,0.45634153,-0.29710093,0.09397441,0.103426725,0.52781576,-0.28619406,-0.16805595,-0.5277735,-0.58615893,0.44762912,-0.23755693]],"activation":"identity","dense_3_b":[[-0.00061371934],[0.0008866203],[0.0041582286]]},{"dense_4_W":[[0.2813102,0.8880676,-1.0474501]],"dense_4_b":[[-0.0030482505]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x875Q0909144R xf1x891061xf1x82x0516G00804A1'.json b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x875Q0909144R xf1x891061xf1x82x0516G00804A1'.json new file mode 100755 index 0000000000..623cfc6fd6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x875Q0909144R xf1x891061xf1x82x0516G00804A1'.json @@ -0,0 +1 @@ +{"input_std":[[5.647897],[0.77807677],[0.3786303],[0.027181908],[0.76505655],[0.7691365],[0.7753112],[0.75485826],[0.7388133],[0.7235482],[0.7017126],[0.027084801],[0.027107615],[0.02713881],[0.02727208],[0.027347732],[0.027291704],[0.02712333]],"model_test_loss":0.005975625012069941,"input_size":18,"current_date_and_time":"2023-08-05_02-53-24","input_mean":[[22.687336],[0.041830763],[0.0013497239],[0.0025117223],[0.04265397],[0.041225184],[0.040064774],[0.041646685],[0.041738126],[0.039837133],[0.037775867],[0.0025273785],[0.0024943845],[0.0024706146],[0.002355649],[0.0022401763],[0.00213939],[0.0020558846]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.1844455],[-1.1541857],[-0.015318193],[-0.6885228],[0.031907413],[-0.4154868],[-1.2283381]],"dense_1_W":[[0.9976641,0.21748708,0.007614968,0.21005726,-0.24952233,-1.1167002,0.40800944,0.65574366,0.16467258,-0.026125554,-0.32524306,0.22688352,0.1259429,-0.41789296,0.24079186,-0.22830102,0.100322604,0.023678515],[-0.29762468,0.88740426,0.112175226,-0.2225173,-0.3093645,0.6364987,-0.8023527,0.6150709,-0.10853348,-0.07048834,-0.07352686,0.06482338,0.32714766,-0.2653219,0.07407067,-0.046005152,0.16475457,-0.06553305],[0.00032146444,1.5183012,0.071805686,0.15944685,-0.55036193,0.6881477,-0.78218305,0.17549933,0.40891948,0.07851986,-0.28071985,-0.39318854,0.309669,0.0018471086,-0.49772733,-0.035861548,0.156975,-0.014822093],[-0.18374057,-0.45571524,-0.09747847,0.07835499,0.71659774,-0.95522517,0.26217383,-0.50928473,0.20344277,0.040699393,0.03725089,-0.14224511,-0.37767497,0.40781656,0.231836,-0.3131839,0.16274065,-0.08154563],[-0.0026246961,0.9705764,3.6681292,-0.3000036,-0.44400433,0.16176015,-0.41099662,-0.02601824,0.6407803,0.42456567,-1.0577953,0.48476946,0.20323749,-0.25966495,0.19856524,-0.14002256,-0.3655814,0.23497105],[0.010234776,-1.908564,-0.07929717,0.75593996,0.50410277,-1.43933,-0.60249954,-1.4044362,-2.1078866,-1.8422328,-0.08159568,-0.5587607,-0.7469554,0.5997705,-0.32854697,0.038176045,0.069803216,-0.09369286],[0.9902383,-0.13063963,-0.006834419,-0.00481643,0.19603567,1.0950303,-0.60231364,-0.26128826,-0.18049927,-0.24451904,0.4080662,0.18761696,-0.05200454,-0.23603702,-0.033294257,-0.26397884,0.005336438,0.10861761]],"activation":"σ"},{"dense_2_W":[[-0.12819418,-0.04965034,-0.019238193,0.548027,-0.31324998,-0.24846186,-0.71080023],[0.48580822,-0.4452061,-0.3211533,0.52164257,-0.2934621,-0.21353783,-0.5648211],[-0.046689708,-0.15082699,-0.101832494,0.57533866,-0.3347912,0.2058913,-0.032502484],[-0.4508244,0.53148896,0.68331164,-1.0367274,0.18762335,0.049984977,0.4796921],[-0.10827881,0.098909445,0.20143649,0.0621116,-0.09980022,-0.70837736,-0.24850541],[-0.23459274,0.3976682,0.74400216,0.07945248,-0.0918161,-0.36116856,0.36160964],[-0.3334947,-0.7710084,-0.63277185,0.45722532,-0.16698726,0.29963008,-0.40333414],[0.11296678,-0.55500394,-0.5733111,0.19517982,-0.14325383,-0.23166345,-0.026499728],[0.50150007,-0.38261527,-0.6961804,-0.25895122,0.30894667,-0.5299628,0.123440936],[0.7214627,-0.086619996,-0.38500652,0.52342546,-0.49543855,0.60024095,-0.007926223],[-0.12577087,-0.13799962,-0.6489934,-0.43941757,-0.5788901,-0.08122388,-0.21836436],[-1.039173,0.054396313,0.21242972,-0.7820335,0.25794864,-0.04855301,0.87666434],[0.5399379,-0.034065444,-0.23672304,0.35554442,-0.06592034,0.20189549,-0.34307384]],"activation":"σ","dense_2_b":[[-0.13632841],[0.048632354],[-0.15356292],[-0.122767694],[-0.10747351],[0.089311264],[-0.14307816],[-0.14580268],[-0.17635764],[-0.0041631833],[-0.09472099],[-0.12868434],[-0.12293586]]},{"dense_3_W":[[-0.23443374,-0.43379006,0.38643113,0.7170689,-0.31815973,0.7005203,-0.0989276,0.3470744,-0.09264834,-0.51163256,-0.15258677,-0.2910665,0.27302915],[0.28812635,0.20398347,0.22110644,-0.7146041,-0.27986667,-0.2958926,0.4361534,-0.012043313,0.31531844,0.467926,0.4048369,-0.29521784,0.3930137],[0.25268626,0.5656607,0.34994185,0.061901323,0.4205215,-0.66544545,-0.048824873,0.40229976,0.3616486,0.054331604,-0.57134205,-0.731286,0.493206]],"activation":"identity","dense_3_b":[[0.13606566],[-0.14437976],[-0.14025378]]},{"dense_4_W":[[0.3672289,-1.1880862,-0.3997548]],"dense_4_b":[[0.14610623]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x875Q0909144T xf1x891072xf1x82x0521G00807A1'.json b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x875Q0909144T xf1x891072xf1x82x0521G00807A1'.json new file mode 100755 index 0000000000..7a36f606d2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN b'xf1x875Q0909144T xf1x891072xf1x82x0521G00807A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.406553],[1.1444793],[0.48023388],[0.04517182],[1.1198108],[1.1292706],[1.1378976],[1.1248115],[1.1107553],[1.0959218],[1.0747414],[0.04489478],[0.04499193],[0.04508163],[0.045316804],[0.045437645],[0.045486297],[0.045448944]],"model_test_loss":0.010464400053024292,"input_size":18,"current_date_and_time":"2023-08-05_03-20-24","input_mean":[[21.85032],[-0.06325212],[0.01593448],[-0.0067214244],[-0.0617676],[-0.062218133],[-0.062741525],[-0.052988674],[-0.046424996],[-0.036852293],[-0.026416903],[-0.006868046],[-0.006833722],[-0.0067935614],[-0.006550063],[-0.006349941],[-0.00603803],[-0.0058110217]],"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.1758758],[-0.02333589],[-0.9422901],[-1.8183272],[-2.0369716],[-0.0022337937],[1.0386317]],"dense_1_W":[[-0.016577989,0.8713441,5.688127,-0.3929182,-0.04865473,0.6506077,-0.28903118,0.36254203,-0.011359748,-0.80350965,-0.7413686,0.2852788,-0.180391,0.030887136,-0.24853921,-0.10783466,0.50824666,-0.06847572],[-0.0092391325,-0.21448685,0.03441581,0.110536866,-0.0051872088,-0.92594856,0.75064564,0.028740149,0.03222661,0.006082844,-0.101520896,-0.4111015,0.1091794,0.39225927,-0.2532579,-0.039659202,0.11658903,-0.053364333],[-1.3687131,-0.16632304,0.15804188,0.0037932456,-0.12444754,1.1138352,-1.0514365,-0.041139685,-0.25043303,0.26688784,-0.07053993,-0.37225965,0.32112512,-0.027879953,-0.051089693,0.14374797,-0.18620768,0.005694514],[-0.6469966,-1.5555854,-0.20889208,-0.5880108,0.4715537,-1.2139171,0.75022185,-0.16585363,-0.2956166,-0.15876539,0.14122242,0.035947774,-0.33897576,0.19888888,0.6707361,0.18586846,0.10368669,-0.28106293],[-0.657111,1.6010174,0.21602994,0.4263732,-0.06848571,0.5598709,-0.49075437,0.25268188,0.11085831,0.2158561,-0.10458329,0.24656911,-0.39565903,0.37622258,-0.67023623,-0.14563817,-0.02180011,0.20525338],[-0.026721686,-1.4577084,-0.026119402,0.5333309,0.38764423,-0.9197922,0.69576514,-0.31642672,-0.1339865,0.10481822,0.14266707,-0.6337337,0.012707174,0.26578203,0.16265541,0.17228846,-0.1989113,-0.10555704],[1.4377016,0.06603403,0.16708663,-0.15933846,0.11354903,0.99252284,-1.1596392,-0.35168508,-0.15729623,0.031751093,0.12479976,0.37379214,-0.23274498,-0.43550903,0.18850462,0.39560428,-0.2743065,-0.03711172]],"activation":"σ"},{"dense_2_W":[[0.13976535,-0.567236,0.72977924,-0.37755272,0.8387794,-0.6176494,-0.1588559],[-0.46564472,0.4264771,-0.77863467,0.6377271,-0.32651326,1.3463035,-0.59549373],[0.28558275,0.28753272,-0.4952516,0.7528485,-0.7717421,0.5046622,-0.77360827],[-0.96945935,-0.0453178,-0.6731784,0.21861276,0.0004108777,-0.5904792,0.046018012],[-1.2385854,0.6857041,0.36958358,0.8480664,-0.43229854,-0.010444919,-1.322231],[0.036224924,0.3547489,-0.8043728,-0.053537022,0.016718367,0.6929881,-0.30040604],[0.06862226,-0.259559,0.5140289,-0.7720217,-0.041946124,-0.51667583,-0.06930547],[0.9849274,0.889979,0.15711601,-0.24940383,0.5364856,0.5195277,-0.788271],[-0.02180253,-0.22045894,0.29244867,-0.09937624,0.62102586,-0.9813616,0.22756088],[1.0398556,-0.8574942,0.72217983,-1.5679595,0.9945934,-1.205857,0.5450476],[0.5572645,-0.56064814,0.49424344,-0.6622529,0.9019719,-0.7570887,-0.12037264],[-0.0053947666,-0.6394732,0.45090503,-0.25865456,0.5792981,-0.59776926,0.17400868],[-0.01624432,-0.8273978,0.76286685,-0.8753738,0.50364363,-0.188468,0.7102324]],"activation":"σ","dense_2_b":[[-0.094213076],[-0.007611653],[-0.09876658],[-0.20891039],[-0.34281158],[-0.024532793],[-0.36961433],[0.07229608],[-0.094220944],[-0.19420828],[-0.24400096],[-0.022362027],[-0.14466679]]},{"dense_3_W":[[0.35009202,-0.54889274,-0.6271456,0.3699252,-0.7306264,-0.040469803,-0.1333791,-0.34627312,0.48485342,-0.027413882,0.41518027,-0.20679481,0.6512874],[0.52266765,-0.75062644,-0.04478057,0.18780099,-0.42413864,-0.6919877,0.13284668,-0.4328708,0.10996859,0.4937182,0.5085866,0.6378642,0.523424],[-0.18289043,-0.62926316,-0.77449095,-0.5117072,0.27590525,0.27471027,0.27253544,0.13643086,-0.122853294,0.6343227,0.06519875,0.55697745,0.34692377]],"activation":"identity","dense_3_b":[[-0.00441717],[-0.0539032],[0.024021728]]},{"dense_4_W":[[0.27877802,0.706807,0.113575056]],"dense_4_b":[[-0.045484345]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN.json b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN.json new file mode 100755 index 0000000000..61fac13379 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI A3 3RD GEN.json @@ -0,0 +1 @@ +{"input_std":[[8.821153],[1.1607649],[0.47132117],[0.042723242],[1.137403],[1.1458488],[1.154415],[1.1424824],[1.1269064],[1.1112212],[1.0889144],[0.04246643],[0.04255451],[0.042637058],[0.04284904],[0.04293054],[0.04296549],[0.04289919]],"model_test_loss":0.010373540222644806,"input_size":18,"current_date_and_time":"2023-08-05_01-15-19","input_mean":[[22.519371],[-0.051268775],[0.008842468],[-0.0062438333],[-0.049525455],[-0.050104525],[-0.050982136],[-0.044812053],[-0.03977025],[-0.029485626],[-0.022126574],[-0.00628094],[-0.006273981],[-0.00626523],[-0.006110039],[-0.005949586],[-0.0056778532],[-0.005516688]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.145696],[-2.4282207],[-0.0467647],[0.10926833],[0.0520818],[0.04222916],[-0.5462429]],"dense_1_W":[[0.89382285,0.05062796,0.92885584,0.07922598,0.5873072,1.1331865,-0.91537136,-0.13934332,0.17509349,-0.017687947,0.1421727,0.07907387,-0.43241176,-0.29524758,0.64221257,0.25150946,-0.05171897,-0.2579187],[-0.98185164,0.15350275,0.9519401,-0.09016293,0.5030077,0.777908,-0.5172474,-0.1343053,0.060967423,0.059980214,0.10476908,0.17575294,-0.20688392,-0.37559837,0.5713468,0.08849066,0.06383742,-0.21201873],[-0.0056540756,0.34154844,-0.0002563853,0.1807267,0.48449796,1.7143611,-1.3936676,-0.35775846,-0.5523075,-0.15023966,0.5988954,0.72132236,0.18023057,-0.46348006,-0.3817839,0.23941651,-0.06494792,-0.41726813],[-0.01459551,1.354641,6.4718165,-0.45382518,-0.35718468,0.69441503,-0.12716621,-0.10042224,-0.016146144,-0.4092775,-1.1707406,0.24052495,0.18990588,-0.1906599,0.070675336,0.2473157,-0.13808818,0.048208434],[-0.0009390727,1.1310523,0.0082692,-0.10876187,0.25259772,1.0159874,-0.72615826,0.107342415,0.0071694367,-0.065621555,0.13799563,-0.24110964,-0.073862016,-0.496919,-0.3644365,0.16880687,0.13885318,0.15355359],[-0.0016120744,-1.5514591,-0.000675083,0.40327275,0.8975076,-0.8923279,0.7910547,-0.40612024,-0.35091725,-0.101295106,0.38604048,-0.3228168,-0.17239958,-0.3530256,0.58767676,0.15752153,0.060442753,-0.32661223],[0.028779855,2.903487,-0.022664804,0.67652136,0.86524385,1.6721133,1.4576133,1.4279684,0.98554605,0.5130255,-0.469917,-0.0684012,0.4178242,0.3712093,-0.7501333,-0.06791517,0.33725083,-0.09968473]],"activation":"σ"},{"dense_2_W":[[0.72010493,-0.22845428,0.34250122,-0.10947913,-0.09878085,0.19209231,0.3437535],[-0.19205496,-0.07013072,-0.7416267,0.25280657,-0.1804019,0.4552836,0.12560841],[0.3121345,0.351005,0.5316866,0.03252624,-0.057188597,-0.9498188,0.07712814],[-0.16806532,0.25612888,0.43424875,-0.24325378,0.23957624,-0.14204793,-0.13016012],[-0.02399125,-0.71077454,0.03666176,-0.044081435,-0.495433,0.2724298,0.22011437],[-0.24902506,-0.59004927,-0.13717845,-0.5492086,-0.8540712,1.7531782,-0.18482044],[0.045421652,0.13694939,0.35765722,-0.28403643,0.13330263,-0.053298414,0.07322283],[-0.34804162,-0.38957596,-0.1432544,0.071290284,-0.538751,1.1790421,0.29278603],[0.45716798,-0.3516285,-0.2764383,0.4446462,0.76846844,-0.7801458,0.49539566],[0.07269321,-0.15379232,-0.8779124,-0.92490155,-0.91285044,1.7692323,0.028679641],[-0.763075,0.17418097,-0.2823778,0.04659932,-0.030475633,0.37596756,-0.66006523],[-0.30286422,-0.03590232,-0.012065834,-0.16185908,-0.2584895,0.3575371,-0.36891615],[-0.39941847,0.09128256,-0.32452282,-0.36513522,0.06978018,0.028525386,-0.7303688]],"activation":"σ","dense_2_b":[[0.048172507],[-0.07530213],[-0.340101],[-0.022203589],[0.009521725],[0.46328664],[0.004919447],[0.022925986],[-0.15940326],[0.40359482],[-0.14555077],[-0.02970779],[-0.24673922]]},{"dense_3_W":[[-0.32974115,-0.5017099,0.5581341,-0.22340928,-0.03365036,-0.20835784,0.537433,0.5391966,-0.36658195,-0.5869503,0.17776869,-0.013170913,0.49127203],[-0.29820803,0.28987518,-0.24515595,0.25772423,-0.04187076,0.69620353,-0.3389867,0.12667182,0.150237,0.5090255,0.49386412,-0.3637399,-0.01771473],[0.5784079,-0.0028831854,0.43896967,0.60790384,-0.4540079,-0.45909828,0.046820417,-0.56937873,0.530507,-0.1309796,0.32449916,-0.49291292,-0.07336644]],"activation":"identity","dense_3_b":[[0.0460099],[-0.07466251],[0.050609488]]},{"dense_4_W":[[0.13093115,-0.7773025,0.81287336]],"dense_4_b":[[0.057754416]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567G6000800'.json b/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567G6000800'.json new file mode 100755 index 0000000000..a8aa9f68ea --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567G6000800'.json @@ -0,0 +1 @@ +{"input_std":[[7.7607994],[0.9292432],[0.46292055],[0.044395123],[0.9189823],[0.92225415],[0.9265908],[0.9041406],[0.89363676],[0.8758474],[0.8587412],[0.044199012],[0.04426089],[0.044309698],[0.044270102],[0.044164237],[0.043878913],[0.043546345]],"model_test_loss":0.012919353321194649,"input_size":18,"current_date_and_time":"2023-08-05_04-11-04","input_mean":[[23.187113],[0.0015932432],[0.011463172],[-0.037785653],[0.0014130658],[0.002005605],[0.0032030009],[0.008243341],[0.012254494],[0.015819417],[0.020851867],[-0.037866723],[-0.03782731],[-0.037789218],[-0.037560076],[-0.037380483],[-0.037283257],[-0.037284937]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3650206],[0.3503434],[0.049026404],[0.48147553],[-0.2179137],[-1.1410009],[0.35613173]],"dense_1_W":[[-0.0044370415,-0.088976935,0.09736069,0.13261136,-0.5935368,0.10521503,-0.8068187,-0.09207722,-0.15163152,-0.2225436,-0.56512666,0.64190215,0.6911761,-0.20394018,0.26521412,0.14738402,0.2390292,0.669949],[1.9099827,-0.20041782,0.06653255,0.04290131,1.081289,-0.07771372,0.5794198,0.055194955,0.3341548,0.12740795,0.00016614748,-0.01401175,-0.253479,0.3490117,-0.38425395,0.33906642,0.35481378,-0.3718989],[0.05287488,0.7134841,4.096453,-0.08065371,0.21688524,0.47354707,-0.46061245,0.13619322,0.7494003,-1.0308193,-0.90699166,-0.027265368,-0.0905294,0.0786151,-0.066612154,-0.21861951,0.6264546,-0.2477698],[0.49850515,-0.52765816,-0.02077531,-0.22489151,-0.06462903,-0.47247145,0.5355608,0.028485456,-0.11019967,0.13962062,-0.107459456,0.038771443,-0.23801842,0.5196211,0.15457287,-0.32410073,-0.018090906,0.15865909],[0.046214443,-0.64695966,-0.0069883303,0.25497442,0.20284595,-0.9400158,0.75683576,-0.27035123,-0.1531759,-0.27745956,0.27680025,-0.41793835,0.021180544,-0.06378223,0.15259326,0.23614758,0.19549917,-0.32855147],[-0.4081381,-0.5767889,-0.02048695,0.4837626,0.07757592,-0.59393334,0.50364584,-0.10654109,0.20280221,0.018726189,-0.1135464,-0.4784118,-0.17838266,0.2907484,0.2355112,-0.19352722,-0.16305554,0.076068975],[1.9215813,0.28210905,-0.07538363,0.33930507,-0.7474612,0.30265597,-1.1443635,-0.11762971,-0.41968435,-0.16676956,0.13010335,0.02262152,0.14194168,-0.5343928,-0.14601786,0.24347968,-0.24895756,0.15329723]],"activation":"σ"},{"dense_2_W":[[-0.97410744,0.3293568,-0.51517206,-0.3463321,-1.3647133,-0.86492306,0.36742914],[-0.38897687,0.48228312,0.33890837,0.44431418,1.3277258,0.16005625,-0.45875192],[0.02537137,-1.8192227,-2.2544084,-0.079543754,0.45377818,1.312974,-1.4039407],[0.19882208,-0.9093105,0.20501111,-0.87385803,-0.422892,-1.2277902,0.26516685],[-0.5868707,-0.1976348,-0.052873705,0.8127852,1.433916,0.6659879,-0.36126196],[-0.34342724,-0.59553665,0.40787566,-0.7651616,-0.49521706,-0.50139594,-0.44844094],[0.0324562,-0.030006122,-0.81495327,-0.08844059,-0.73199207,-0.9749751,0.193641],[-0.50183594,-0.53056437,-0.015531296,0.18623666,-0.09462893,-0.7861786,0.3987878],[0.38298038,0.19052242,0.19199069,0.044229858,-1.4711231,-1.2591913,0.59195024],[0.43198085,0.019489845,-0.22293438,0.16365366,0.32915708,0.86797434,-0.5055899],[-0.8588905,0.09965971,-0.15875271,-0.10829414,-0.3715543,-0.28131244,0.4689924],[0.4073162,-0.31107745,0.34453806,-1.0047082,-1.3331152,-0.3225261,-0.28392723],[-0.24590243,-0.5074513,0.45170495,-1.0937929,-0.29165098,-0.9534984,-0.44262615]],"activation":"σ","dense_2_b":[[-0.20421302],[-0.071595274],[-0.49483255],[0.08749108],[-0.27975222],[-0.030872881],[-0.04815583],[0.030535745],[0.12027835],[-0.10508093],[-0.19207817],[0.09736322],[0.057723336]]},{"dense_3_W":[[0.23816557,0.46098536,-0.6313008,0.7918219,-0.5916585,0.48531923,-0.27558136,-0.31984928,0.4619099,0.14357577,0.11340685,0.10802043,0.23884438],[0.3486614,-0.639459,-0.26902324,0.48187697,-0.6724132,0.48073167,0.26574108,0.25904334,0.53890723,-0.5283542,0.16785589,0.6735239,0.8907758],[-0.34013325,0.23225747,-0.83007133,0.5564732,-0.3356769,0.4536341,0.2693847,0.08861304,0.22285238,0.06831062,0.16584419,0.2606426,0.047501706]],"activation":"identity","dense_3_b":[[-0.010792147],[0.008722057],[-0.2345991]]},{"dense_4_W":[[0.14804278,1.4997839,0.04654937]],"dense_4_b":[[0.0038731655]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571G60533A1'.json b/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571G60533A1'.json new file mode 100755 index 0000000000..e409b82438 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571G60533A1'.json @@ -0,0 +1 @@ +{"input_std":[[6.9746957],[0.74846905],[0.3776189],[0.03050829],[0.73187035],[0.7361276],[0.7414741],[0.73505235],[0.7348843],[0.72738355],[0.71373457],[0.03035072],[0.030408371],[0.030481495],[0.03054445],[0.030590964],[0.030465184],[0.030331135]],"model_test_loss":0.010437331162393093,"input_size":18,"current_date_and_time":"2023-08-05_04-35-32","input_mean":[[21.84806],[0.037775595],[-0.00015706694],[-0.021587897],[0.040338658],[0.039734323],[0.039004818],[0.040646035],[0.039115567],[0.03719198],[0.038230542],[-0.021592842],[-0.021576356],[-0.021578403],[-0.021549474],[-0.021593899],[-0.021818507],[-0.022061665]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0914413],[0.0015551149],[0.22065881],[-0.1891756],[-0.0135917235],[-0.038417384],[-0.022252519]],"dense_1_W":[[0.011237223,0.097167924,0.01444804,0.2124649,1.3246,0.31190768,0.7195392,0.8302937,0.22576901,0.45450732,-0.10925574,0.03514202,0.5961049,0.3985722,0.61802393,0.080905825,0.32926518,-0.25256667],[-0.02162882,2.0190244,5.799918,-0.14539114,-1.9311626,0.66446453,-0.11302035,0.1226316,0.6734189,0.16489778,-1.2370133,0.56925017,-0.12738787,-0.374375,-0.18332094,0.38210422,-0.45544025,0.283806],[-0.005536447,0.6118752,0.005302229,-0.35660002,-1.1228982,1.576737,-0.6586397,-0.06552918,0.1747147,0.03373086,-0.1062423,0.7913594,0.33732173,-0.76828235,-0.055734146,-0.2576106,-0.09492317,0.33747092],[0.011188102,-1.2844069,-0.0012297877,0.07251332,-0.095956035,-1.1642455,-0.28017807,-0.014453496,0.04811712,-0.47494012,-0.488219,-0.11300311,-0.44098395,0.07885455,0.16945864,0.42555395,-0.1273186,-0.15138112],[-0.007230606,-0.44893888,0.0066998103,-0.16217937,0.25698268,-0.87970287,0.6202854,-0.15496038,0.051418323,-0.038406387,-0.06764698,0.17037104,-0.27248234,0.2816981,0.18553548,-0.33725816,0.08385291,0.045085847],[0.00084464176,-0.54823476,-0.0034105896,0.26671872,-0.015223509,-0.9550469,0.6014387,0.025267186,0.13067198,-0.43440172,0.20197645,-0.44261578,-0.16689432,-0.023613267,0.7486101,-0.19077903,-0.2137139,-0.02373193],[-0.030234346,-0.13823445,-2.021196,0.2427088,-0.07732753,-1.0305628,0.04975273,-0.1942112,-0.12176859,1.0165497,1.224236,-0.5657689,0.1795685,-0.1477603,0.30288523,-0.0046483153,0.2759976,-0.32901245]],"activation":"σ"},{"dense_2_W":[[0.083859816,0.933766,1.0253052,-0.7105447,-0.9955442,-0.8595731,-0.21401848],[0.25676674,-0.2483161,-0.51074135,-0.31487563,0.7560016,0.6237004,-0.36207017],[-0.45140705,-0.555112,-0.32009697,0.2014101,-0.14508359,-0.7487613,-0.5627604],[-0.052259363,-0.27644405,-0.56982166,-0.22415726,-0.08912631,-0.3108934,-0.07020982],[-0.30388612,-0.282844,0.6231819,-0.1827591,-0.8701069,-0.1363012,-0.06061468],[0.42716765,0.14838749,-0.77454436,-0.08531688,0.5431199,-0.33343503,0.47535864],[-0.29570216,0.054118063,0.8065188,-0.5626743,-0.58843243,-0.2626986,-0.13115627],[-0.16683827,0.01042097,-0.6624693,-0.16589774,-0.064373836,0.67642355,0.30223835],[-0.3474019,0.1442944,-0.24758828,-0.12841912,0.015519108,-0.8910641,0.26689053],[0.015551913,0.25193524,-0.28172082,-0.35587707,0.7043338,0.18275745,0.33005205],[0.1932851,0.3542477,0.49002793,-0.33909148,0.05432396,-0.86836,0.086581126],[0.35653573,0.041390643,-0.34532556,0.07281016,0.62669814,-0.24314882,0.41167533],[-0.19783325,0.031141564,-0.33750173,0.097428255,-0.43643403,0.22732346,0.46779665]],"activation":"σ","dense_2_b":[[0.3251711],[0.03284726],[-0.2276918],[-0.27249786],[0.07225366],[-0.064165816],[-0.052187826],[-0.040996723],[-0.27600503],[-0.027009819],[-0.094922386],[-0.079575196],[-0.04894184]]},{"dense_3_W":[[0.5707442,0.06543564,-0.41911805,-0.4872908,0.30000013,-0.5824054,0.31254762,0.37488416,-0.03498339,-0.31771377,0.49000293,-0.547452,-0.31576237],[-0.08784592,0.36186367,-0.35686487,-0.21170178,-0.28615108,0.6641257,0.09387274,0.36688283,-0.31936723,-0.52464163,-0.24194345,0.13221104,-0.044297554],[0.6223347,-0.6184397,0.5959415,0.56463706,0.57754964,0.3649079,-0.118873656,-0.58997124,-0.048462644,-0.46443146,0.43778852,0.10792423,0.27066556]],"activation":"identity","dense_3_b":[[-0.033067573],[0.030761039],[-0.045770094]]},{"dense_4_W":[[1.1994555,-0.36797908,0.91548634]],"dense_4_b":[[-0.03687687]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN.json b/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN.json new file mode 100755 index 0000000000..04a37fb732 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/AUDI Q3 2ND GEN.json @@ -0,0 +1 @@ +{"input_std":[[7.7137036],[0.9591701],[0.43025136],[0.042929597],[0.94636554],[0.9494532],[0.9542092],[0.9331239],[0.92229235],[0.90257126],[0.88295245],[0.04270026],[0.042758208],[0.042818923],[0.042808957],[0.04270763],[0.04245825],[0.04215921]],"model_test_loss":0.013933051377534866,"input_size":18,"current_date_and_time":"2023-08-05_03-45-12","input_mean":[[22.835394],[0.021439364],[0.0072024865],[-0.030873412],[0.021618834],[0.022110935],[0.02246376],[0.027221544],[0.027849164],[0.028268991],[0.032981515],[-0.030950077],[-0.030914158],[-0.030886404],[-0.030796975],[-0.03080609],[-0.030815149],[-0.030869272]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.04303998],[0.18157572],[-0.08682473],[2.9495513],[1.4374219],[0.6783021],[-2.7817473]],"dense_1_W":[[-0.0047104284,-0.6137708,0.002341153,0.0833492,0.08768307,-0.81527835,0.6300508,-0.16833228,-0.25419337,-0.031592067,0.122596905,-0.10794349,-0.06970466,0.1521993,-0.04051286,0.059251916,-0.11607053,0.024402162],[-0.06346717,-0.8082159,0.0040190252,0.3896669,0.06872366,-0.7609862,1.0698833,-0.06101861,0.1457311,0.19787341,-0.21086167,-0.07617529,-0.40358907,0.012452437,0.10700336,0.3594503,0.025611963,-0.14057784],[-0.010002668,-1.4602287,-5.6766963,0.03532623,-0.3498076,-0.005860239,0.092076786,-0.22858407,-0.4043539,0.277433,2.0291262,0.044144016,0.06367758,-0.2504535,0.3463553,-0.27935135,0.18728429,-0.15520296],[1.595175,1.1790471,0.33827057,-0.36523697,-0.028244315,0.88139707,-1.6474634,0.3107364,-0.13230316,0.019280735,-0.015979009,0.5001427,-0.13290524,-0.15675303,0.12809546,-0.09519324,-0.046115097,0.14121765],[0.01943066,0.3716076,-0.048877437,-0.3783698,0.8343788,-0.51018566,1.0465596,-0.123417296,-0.446517,0.0398392,0.5281696,-0.3002102,-0.4030578,-0.23385769,0.45266014,-0.15139927,-0.084088355,-0.8366423],[-0.05169121,0.34580684,-0.0006902231,-0.0828817,-0.67921466,1.1092558,-0.4253136,0.008052844,-0.08571924,0.14040273,-0.057995982,0.5459289,-0.1640265,-0.24621837,-0.44702664,0.25875458,-0.16363451,0.07772843],[-1.5420308,-0.0795151,0.32449803,0.09269649,-0.12254087,0.95711464,-0.32903105,0.03880426,-0.24505275,0.3849109,-0.085893035,0.1646195,-0.14589338,-0.44051296,-0.05752575,0.38210398,0.32775694,-0.34554252]],"activation":"σ"},{"dense_2_W":[[-1.1991313,-0.99167293,-0.51472193,0.16773303,0.02101984,0.2913248,1.2563334],[0.50807565,0.2559231,0.3110827,-0.7911515,-0.2996264,-0.76801026,0.21431924],[-0.85551465,-0.3015842,-0.283833,0.5011012,-1.0202202,0.6740454,0.972628],[0.98223805,1.0016109,-0.09864264,0.13172226,-0.12697673,-0.40963414,-0.35780042],[-1.1385525,-0.88758576,-0.2415131,1.0169281,-0.37200353,0.83228046,0.58273304],[0.21168564,-0.01694945,-0.13944875,0.12901805,-0.58597475,-0.23450175,0.07449124],[0.6887359,0.49634412,-0.4524045,-0.5046205,0.80216706,-0.37323585,0.15390924],[-0.86359656,-0.8294278,-0.10975485,-0.111551575,-0.21511969,1.1387116,0.014124521],[0.6704329,0.7197621,-0.16924202,-0.03436297,0.3256051,-0.6220993,-0.3785999],[0.88013136,0.211954,0.26013535,-0.5998456,-0.14124529,-1.0012022,0.30486783],[0.8889406,0.25632593,0.029823503,-0.6760066,0.40066594,-0.6796646,-0.42230535],[-0.09985791,-0.6314821,-0.6048359,-0.28479984,0.022334062,-0.11070772,-0.50172895],[-1.0790496,-0.81828046,-0.26459435,-0.15203167,-0.10264537,0.7340549,0.6219628]],"activation":"σ","dense_2_b":[[0.07743759],[-0.08656865],[-0.028110785],[0.011056744],[0.33631137],[-0.33865649],[0.093462616],[0.28041044],[-0.1485106],[-0.10288075],[-0.118501574],[-0.19659644],[0.23902157]]},{"dense_3_W":[[-0.21247761,-0.3863918,-0.35711917,-0.15159392,-0.3087554,0.27256498,0.059494548,0.79742235,-0.6449726,-0.3814191,-0.6635471,0.14567713,0.6240987],[-0.60485286,0.36261612,-0.3062913,0.5288856,-0.8237054,0.14184983,0.36521724,-0.6798562,0.19129165,0.76819366,0.3231601,0.028053993,-0.89101535],[0.5106036,-0.047764797,0.003893947,0.122273564,-0.616694,-0.30744067,0.10899531,-0.98274595,0.045314062,0.3392997,0.15401444,0.406467,-0.3275237]],"activation":"identity","dense_3_b":[[0.0072817504],[0.054671016],[0.3754705]]},{"dense_4_W":[[0.18990728,-1.0539979,-0.04924367]],"dense_4_b":[[-0.04299712]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/BUICK LACROSSE 2017.json b/selfdrive/car/torque_data/lat_models/BUICK LACROSSE 2017.json new file mode 100755 index 0000000000..dcd89c8157 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/BUICK LACROSSE 2017.json @@ -0,0 +1 @@ +{"input_std":[[6.227712],[1.1068953],[1.0287797],[0.031075474],[1.0763543],[1.0856286],[1.0965383],[1.126149],[1.1471479],[1.1817935],[1.207976],[0.03088383],[0.030962178],[0.031021496],[0.031159075],[0.031329848],[0.031462345],[0.031319857]],"model_test_loss":0.004972144495695829,"input_size":18,"current_date_and_time":"2023-08-31_18-04-43","input_mean":[[24.297255],[0.05408088],[-0.024366971],[0.017203888],[0.04666708],[0.049268622],[0.050475407],[0.05590255],[0.04882452],[0.04647568],[0.05159426],[0.017288238],[0.017341834],[0.017397404],[0.017483119],[0.017647635],[0.018217644],[0.018788869]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.022334022],[-0.100295104],[-0.110021666],[-0.37309307],[-0.18126963],[-0.90585893],[-0.5534994]],"dense_1_W":[[0.0030549474,1.145932,-0.09721581,0.18435507,-0.2573822,-0.19281419,0.43596926,0.1603594,0.10032455,-0.051014125,0.4603509,0.38878915,-0.22585483,-0.29935592,-0.04472448,-0.15199424,0.44078583,-0.19637495],[0.007835068,0.57188964,0.18070067,-0.2610156,-0.17529912,0.14483498,-0.23499107,0.4929414,0.10448897,-0.45648035,0.029684572,0.1314099,-0.16433047,0.2065975,0.07887834,-0.0060373824,-0.20691155,0.13691476],[-0.005327477,1.7886202,2.9505506,0.09841906,-1.9402149,-1.3852259,-0.043792397,0.660079,0.60579574,0.24349208,0.29671067,0.08202194,-0.13981113,0.36684915,0.057882063,-0.41412312,0.31871474,-0.02327852],[1.0903977,-1.1873779,0.14879608,0.040507846,0.040393896,0.13455993,0.9753803,0.085223004,-0.06493875,-0.20206894,0.18746802,-0.24526027,-0.08939371,0.2430548,0.13119027,0.15268146,0.20207612,-0.083613925],[0.0021948,3.2657847,-0.18798442,-0.12689658,-0.30403885,0.3367026,0.91909635,1.7143666,0.045331903,-0.31545398,-0.051042344,-0.3529171,0.29837632,0.09466574,-0.8073861,-0.0039647045,-0.1720164,0.5201512],[1.0928359,1.2096838,-0.14703602,0.018953208,-0.03811592,-0.2855322,-0.8143947,0.05326237,-0.066094,0.064099275,-0.06976516,-0.06933611,0.34876755,-0.25860986,-0.14344722,-0.07053271,-0.20750608,0.025129952],[-0.0055736825,0.64105284,0.10726179,-0.17012087,-0.001185817,0.5677425,-0.93299127,0.09094073,0.0109323105,0.2228847,-0.16700141,0.30421817,0.13674305,-0.49573237,-0.13086164,0.31447932,0.15766789,-0.16813341]],"activation":"σ"},{"dense_2_W":[[0.27341422,-0.47601527,-0.6289435,1.3114856,-0.18440256,-0.69279665,-0.58332384],[-0.34085867,-0.29880068,-0.9368486,0.2080702,0.6225143,-0.6358373,-1.1943169],[0.6918406,0.15412113,0.04159215,-0.6581899,0.24066101,-0.043641392,0.045506563],[-0.026726253,-0.81909335,0.16420767,0.00291583,-0.3189569,-0.5359374,-0.7172654],[-0.8483084,-0.35060802,-0.41203314,-0.5305087,0.47287297,-0.28290507,-0.8737458],[0.35316753,0.90733016,-0.2770915,0.20165613,0.20155826,0.36213335,-0.24496384],[-0.5022167,-0.5612638,0.38854852,-0.018215526,-0.19334692,-0.4468064,-0.86793435],[0.47059315,0.23489894,0.41844767,-0.08509097,-0.31178007,0.11894885,0.5030957],[0.24172585,0.24865924,-0.15847187,-0.7011813,0.48085362,0.14869425,0.23137042],[-0.618487,0.12818213,-0.6849712,0.29365247,0.20846452,-0.063214555,0.125115],[0.5387756,0.06612413,-0.4151303,-0.63775194,0.5008791,-0.059868183,0.5720243],[-0.32397416,-0.08635292,-0.4818767,-0.67876416,-0.5552992,0.2187673,-0.4787086],[-0.89717907,-0.42284042,0.31489655,-0.8514086,-0.7674914,-0.41609457,-0.006730729]],"activation":"σ","dense_2_b":[[0.44311488],[0.11209076],[-0.0894076],[0.1847591],[-0.1593725],[-0.022556875],[0.21991341],[-0.05744998],[-0.057585794],[-0.2627398],[-0.054548565],[0.105285086],[-0.19715697]]},{"dense_3_W":[[-0.35089782,-0.39416888,-0.30615157,-0.46847108,-0.26617768,0.43837857,-0.485962,-0.2902945,-0.17870793,0.2757293,0.6125576,-0.24665116,-0.21227285],[-0.37411463,0.19765407,-0.014807391,0.06321688,0.37360784,0.22288837,-0.116587795,0.029183213,0.6631047,0.11275381,-0.27042058,-0.44573787,0.14713542],[-0.50715375,-0.38213205,0.5145017,-0.6412086,-0.39256987,0.058481824,-0.437418,0.30487192,0.5463277,-0.17863718,0.47274628,-0.5652254,-0.2641463]],"activation":"identity","dense_3_b":[[0.0534896],[0.01632865],[0.023216043]]},{"dense_4_W":[[0.3922371,0.50241,1.2339215]],"dense_4_b":[[0.022297831]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHEVROLET BOLT EUV 2022.json b/selfdrive/car/torque_data/lat_models/CHEVROLET BOLT EUV 2022.json new file mode 100755 index 0000000000..f228dcfa17 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHEVROLET BOLT EUV 2022.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/selfdrive/car/torque_data/lat_models/CHEVROLET BOLT EV NO ACC.json b/selfdrive/car/torque_data/lat_models/CHEVROLET BOLT EV NO ACC.json new file mode 100755 index 0000000000..0558edf3a8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHEVROLET BOLT EV NO ACC.json @@ -0,0 +1 @@ +{"input_std":[[7.8204904],[1.1288383],[1.3588161],[0.03592331],[1.0998698],[1.1152987],[1.1261423],[1.0726436],[1.0445082],[1.0255826],[0.9991902],[0.035928443],[0.03594955],[0.035947755],[0.035830557],[0.035794962],[0.035545427],[0.03522763]],"model_test_loss":0.013521275483071804,"input_size":18,"current_date_and_time":"2023-08-31_20-20-29","input_mean":[[21.15819],[-0.07168204],[-0.011260089],[-0.009422209],[-0.05070435],[-0.059720647],[-0.06839208],[-0.058936212],[-0.056256358],[-0.04905059],[-0.043772068],[-0.009612985],[-0.0095514655],[-0.009495763],[-0.009358192],[-0.009470251],[-0.009541206],[-0.009760213]],"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.14674146],[-0.13742483],[-0.22120655],[-4.8659616],[0.37734386],[0.0043874597],[0.0011968147]],"dense_1_W":[[-0.008038606,0.36823353,0.13374972,-0.121557444,0.8109894,0.1619341,-0.27322704,-0.5143952,-0.13323402,-0.28316674,0.41146618,0.069739744,-0.05502182,-0.16582587,-0.03316632,0.15212743,0.63178277,-0.47640973],[0.00472655,5.34618,2.1071396,-0.27966323,-3.491801,-4.7198477,-0.9055106,3.4698536,0.36450383,0.52648926,-0.9086405,0.34823787,0.17502202,0.17913261,0.5389167,-0.95546067,-1.1175836,1.1106054],[-0.0044299415,0.17029423,-0.07841701,-0.13078262,-2.5494642,-1.063504,-0.3024431,1.9482937,3.7423036,1.9179893,-2.4140003,-0.19327636,-0.11139729,0.8710235,0.80850005,-0.5346497,0.122894056,-0.8393351],[-3.4416573,0.2720535,-0.036259558,-0.13027346,0.13627039,-0.30027944,0.2926907,-0.53764284,-0.08440139,-0.01651856,0.15396604,0.15355577,-0.04698026,-0.14798953,0.14998728,-0.3586781,0.75842935,-0.37555856],[-0.29392308,-4.2560554,0.054719303,0.40846434,-2.129364,-3.1015625,-3.853146,-3.1836767,-2.180161,-2.0388255,-2.4251742,0.03920686,-0.38703024,0.41823363,-0.019605622,-0.5604943,0.22793195,0.0057709315],[-0.002196624,5.8481355,-0.09095744,-0.015489594,-2.612487,-1.536748,0.06610644,2.500532,0.4939543,-0.63674825,-0.8083325,-0.26766282,-0.16603528,0.10459684,-0.6615658,-0.78105426,-0.5034555,0.9925575],[-0.013433307,-0.20619735,-0.15958488,-0.25665176,1.9273874,1.1793138,-0.34153762,0.061601996,-0.73064274,0.42999524,0.5411453,0.031738162,-0.11005042,-0.7472006,-0.14436004,0.4244081,-0.2877388,0.18756717]],"activation":"σ"},{"dense_2_W":[[-0.67943275,-0.24000154,-0.13848315,0.30882534,-0.01988677,0.0654716,-0.14717165],[-0.55921,-0.0072287056,-0.21438314,0.13855484,-0.18693337,0.091503285,-0.6234959],[0.29719043,0.34836015,0.31882486,2.2765832,-2.8485565,-0.13084944,0.18394771],[0.09499309,0.20721479,-0.22826056,-0.5555067,0.4858052,-0.297806,-0.7479107],[0.7698728,-0.12123032,-0.32042873,0.64103067,0.29181543,0.35124788,0.3626909],[-0.7722087,-0.0970277,-0.66611034,0.8990095,0.008845325,-0.2853908,0.096749336],[-0.056676403,0.10399554,0.07880596,0.15535226,-0.29964685,0.20662634,0.747629],[-0.45565298,-0.61348987,-0.3170684,0.66529834,0.20692064,0.1784706,-0.52314126],[0.07283485,-0.041357554,-0.5544705,0.029298512,-0.07259363,0.12714466,-0.4060869],[-0.6921391,-0.28740877,0.16838852,0.34705403,0.5441259,-0.56957257,-0.23424709],[0.5224591,0.08929995,-0.3917331,0.77703923,1.2387965,0.4035521,0.038004678],[-0.21601413,-0.27209452,-0.006628554,0.26490286,-0.48555186,-0.14057891,-0.23594409],[0.025565607,-0.1843107,-0.74081415,0.21653186,-0.20180094,-0.1775718,0.2597312]],"activation":"σ","dense_2_b":[[-0.11495718],[0.029644735],[-1.5003729],[0.0062865904],[0.063854754],[0.043472946],[-0.03168991],[-0.05123685],[-0.21858792],[0.11300286],[-0.04152576],[-0.09974841],[-0.10666013]]},{"dense_3_W":[[-0.46642318,0.29889506,0.0647746,0.031128142,-0.5190028,-0.2265485,-0.12124089,0.15220042,0.1487402,0.09831015,0.57098764,-0.353228,0.45436162],[0.24007116,0.43487012,-0.43202627,0.39710402,-0.47436452,0.5207094,-0.44189987,0.55030584,-0.002478384,0.49253044,-0.40208483,0.25778514,0.05400483],[0.40668672,-0.80624264,0.49121335,0.28858688,0.4708336,-1.031162,-0.12058632,-0.4919157,-0.0032738608,-1.1038178,0.59533536,0.42121547,-0.42830208]],"activation":"identity","dense_3_b":[[-0.09258446],[-0.10893599],[0.048807696]]},{"dense_4_W":[[0.013993477,-1.1382563,0.45117924]],"dense_4_b":[[0.10757936]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHEVROLET EQUINOX NO ACC.json b/selfdrive/car/torque_data/lat_models/CHEVROLET EQUINOX NO ACC.json new file mode 100755 index 0000000000..00a68d269b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHEVROLET EQUINOX NO ACC.json @@ -0,0 +1 @@ +{"input_std":[[10.534294],[1.5504998],[1.4046903],[0.029573984],[1.5927145],[1.578906],[1.564156],[1.5118331],[1.493684],[1.4678634],[1.4253669],[0.02943281],[0.029483505],[0.029535847],[0.02967169],[0.029826282],[0.03000203],[0.030046586]],"model_test_loss":0.02003631368279457,"input_size":18,"current_date_and_time":"2023-08-31_20-50-28","input_mean":[[20.131113],[0.009686473],[0.06975938],[0.0023475066],[0.0038891183],[0.0060874033],[0.008401226],[0.013517541],[0.01840766],[0.0266773],[0.02453028],[0.0023093733],[0.002328295],[0.0023440488],[0.0024961669],[0.0025724813],[0.0024677413],[0.0023574075]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-4.0288644],[0.10457083],[-3.9555483],[0.1691402],[-0.012094571],[-0.0782635],[-0.2598278]],"dense_1_W":[[-2.1827135,1.6132607,-0.9255983,0.116717376,-1.8178183,-0.54029983,0.33489665,0.56080383,-0.22747517,-0.5733255,0.5044412,-0.2292483,0.043896638,0.08075467,-0.28934216,0.17338042,0.0033520209,0.10574474],[-0.03214852,1.3043286,1.787647,-0.19292493,-1.496456,-1.6432034,-1.0122085,0.6772478,0.9241051,2.137595,1.1481318,0.7382223,0.24003813,-0.26050806,-0.28489965,-0.055436503,-1.5187881,0.5395662],[-2.130688,-2.4082897,0.8946516,1.182773,1.0356439,1.0627962,0.681919,-1.07377,0.9514841,0.2902732,-0.51102746,-1.0186149,0.06007755,0.55835754,-0.8702267,-0.27547133,1.1577551,-0.79220283],[0.048019372,0.56005365,0.090563335,0.04659274,-0.3400944,0.08129445,0.079794005,1.6712024,0.37665895,0.92944545,-0.818461,1.0755452,0.03035464,-0.7417196,0.46747556,-1.7863483,0.1933551,0.6655417],[0.010540867,-2.1044421,0.123707764,0.19983652,-0.3400125,0.042333197,-0.14189881,-0.15991694,1.1688339,0.89001805,-1.0717757,-0.12767468,-0.23459645,0.55075175,0.08273279,-1.410371,-0.11742753,1.0628744],[-0.0035597957,3.3175247,-0.08206834,-0.41877395,-2.3628318,-0.3887815,0.33513132,1.0517763,1.3315583,-0.45716277,-0.83998686,0.038495045,-0.29630885,-0.5393306,0.004715303,-0.3557685,-0.0024815162,0.5117863],[-0.06787126,-1.0245934,0.846602,0.76652443,-3.6147707,-3.2961829,-3.046585,-2.334436,-2.2018268,-2.0479157,-2.1753612,-0.3235234,0.3021576,0.6696055,-0.5296955,-0.34782553,-0.6869261,0.61321783]],"activation":"σ"},{"dense_2_W":[[0.64928615,0.2816972,-0.8923362,0.39578387,-0.61536825,0.81299543,0.32944572],[-3.469548,-0.088318504,4.506985,1.7126206,-0.54613674,1.1776173,-1.3406864],[-0.16514356,-0.18710926,-0.049463313,-0.74177825,-0.89867437,-0.12767266,-0.41532612],[0.3880128,0.14577644,-0.22068585,0.47859693,-0.3810993,0.21953157,-0.28429258],[0.09226449,-0.31862667,-0.7718878,-0.3926271,0.39786428,0.24407528,0.50177044],[0.67237484,0.12668592,-0.30338138,-0.625696,0.26677904,-0.40067798,-0.32989067],[0.55108297,-0.46753818,-0.2422762,-0.32914385,1.0277789,-0.21390574,-0.51578075],[-0.6387295,0.087801814,0.4115124,0.19489816,-0.50232434,0.88593876,0.04993241],[-0.0012766474,-0.39255276,-0.43439093,0.5811583,0.04147405,0.39352056,-0.2983913],[0.5312808,-0.46965963,-0.2202195,0.022353612,0.9100419,-0.7610306,-0.045171853],[-0.4153422,0.25298238,-0.16235219,0.6847717,-0.24125478,0.12481583,0.17123348],[0.019955412,-0.049374487,-0.028301261,-0.1474805,-0.99081236,0.46832514,0.04314314],[-0.060847353,-0.4487362,0.11238633,-0.2315336,0.61632276,-0.037449174,-0.31603873]],"activation":"σ","dense_2_b":[[-0.0784909],[-0.78942764],[-0.15396598],[-0.0694357],[0.42111325],[0.13395377],[0.13471761],[-0.2390017],[-0.10127865],[0.021352982],[-0.10597191],[-0.0495153],[0.08049109]]},{"dense_3_W":[[-0.5803282,-0.4269681,-0.29210615,-0.35849357,0.6151693,0.4374335,0.33656615,-0.38959798,-0.124871194,0.80708337,-0.2547417,-0.4598867,0.28997138],[-0.024669895,1.1817242,-0.08351745,-0.24313891,-0.31439584,-0.25903952,-0.07882097,0.5553487,-0.3152985,-0.31680647,-0.116309114,0.010063961,0.2913986],[-0.43385702,-0.37067002,0.0936241,0.23112701,0.11643858,-0.15334345,-0.003450505,0.18969658,0.37703827,-0.25617403,0.11559996,-0.19988349,0.1828592]],"activation":"identity","dense_3_b":[[0.098078996],[0.0034752209],[0.008636777]]},{"dense_4_W":[[-0.73048496,0.39407238,-0.07285802]],"dense_4_b":[[-0.09288416]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHEVROLET SILVERADO 1500 2020.json b/selfdrive/car/torque_data/lat_models/CHEVROLET SILVERADO 1500 2020.json new file mode 100755 index 0000000000..fe64977fe9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHEVROLET SILVERADO 1500 2020.json @@ -0,0 +1 @@ +{"input_std":[[9.111214],[1.4682485],[0.57526964],[0.04511676],[1.4448825],[1.4523145],[1.460504],[1.4530647],[1.436759],[1.409998],[1.3768793],[0.04496706],[0.044998076],[0.04501952],[0.044998042],[0.04498694],[0.044818893],[0.04446676]],"model_test_loss":0.022049037739634514,"input_size":18,"current_date_and_time":"2023-08-05_05-39-06","input_mean":[[24.08155],[0.011368711],[0.0031438756],[-0.0055672466],[0.01115314],[0.0110932905],[0.010956869],[0.013351914],[0.012678603],[0.010665299],[0.007861591],[-0.0056356518],[-0.0056050173],[-0.005582452],[-0.0056302436],[-0.0057524433],[-0.0058822],[-0.006047828]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.4668645],[0.0061378293],[0.14334162],[-1.507637],[-3.6057515],[-0.045111466],[0.18928593]],"dense_1_W":[[0.6566544,0.7743814,0.18751603,0.04858998,0.7569071,0.25307912,-2.068015,0.9910395,0.86449015,0.5162737,0.17964111,0.73959017,-0.13406877,-1.2188785,0.051854312,0.557273,0.42717713,-0.4706351],[0.025763594,2.3271172,7.5912685,-0.59063435,-1.0175278,0.07860616,-0.39720893,-1.3828933,0.27263463,0.5794174,-0.941214,0.5112712,0.31876096,-0.38133666,-0.17985544,0.50390506,-0.42106378,0.24962576],[0.05800794,4.917338,-0.050065108,0.5062318,2.31812,2.2346003,0.97258455,2.237544,3.1694891,3.0328865,2.4481356,0.87150276,0.23922867,-0.27206227,-0.76175624,-0.59474605,0.022229204,0.18751834],[0.91351914,0.42640725,0.21792875,-0.6499657,0.42711547,0.46455538,-0.7128904,0.6972329,0.07784378,0.15792462,0.86492527,0.16739717,0.3357893,-0.1592361,0.10722909,0.21031618,-0.019191844,-0.031056747],[-1.390049,0.89916164,0.30032212,0.0886132,0.81011575,-0.3205005,-2.085708,1.6698592,1.496016,0.86138624,0.12484511,0.47975743,-0.41812262,-0.7270122,-0.06460007,0.9231981,0.42574838,-0.64465237],[-0.001402944,-1.1569467,0.0005942974,0.063189715,-0.09013453,-1.2986813,1.6477252,-0.4343868,-0.08533708,-0.27364805,0.21535206,-0.34249792,-0.48679602,0.6684111,0.16701448,0.39430234,0.2199159,-0.27228448],[-1.1195272,0.015763488,-0.200724,0.05122529,0.40223718,0.5024332,-1.402779,-0.47795737,-0.24807225,-0.70503217,-0.21363245,0.76604843,-0.14105192,-0.4387646,-0.28273064,-0.21595778,0.03305617,0.22701742]],"activation":"σ"},{"dense_2_W":[[1.7721981,2.2011127,0.29388586,0.38426542,0.83704543,-2.9152303,0.5229557],[-0.36864644,0.42984635,-0.41658726,-0.041540317,0.18798253,0.38724944,-0.65996665],[-0.52116436,0.2358491,-0.2220775,-0.032654468,-0.48732167,0.3548198,-0.45838025],[-0.2911298,-0.46853513,0.03141412,-0.795555,-0.18514551,-0.08353839,-0.33849046],[-0.67049307,0.10367472,0.4490753,-0.55316794,-0.48152244,0.31841356,-0.14415056],[0.28696507,-1.2001104,-0.55151457,0.95023096,-1.3845363,-0.3174642,-0.3309214],[-0.6142683,0.0910831,-0.18282256,-0.44715023,0.37679994,0.44533804,0.027039269],[0.14790064,-0.27130985,-0.18719442,-0.13985236,-0.22100836,-0.6535676,-0.19135725],[-0.4416883,-0.37975168,-0.43114612,-0.07862877,0.20007153,0.95488816,-0.52858645],[-0.17171355,0.2863653,0.4144529,0.679835,0.34844747,-1.2170105,0.29281953],[0.06252894,0.095131,-0.13292563,-0.6726018,-0.39990836,-0.68776375,-0.36863],[0.7808943,-0.8408942,0.13730413,0.102169715,0.1682241,-0.5337488,1.5183735],[0.11278698,0.10173518,0.10506139,0.4002509,0.16067709,-1.1565727,0.75811535]],"activation":"σ","dense_2_b":[[-1.5210099],[-0.0006081214],[0.021954967],[0.032652497],[0.19418235],[-0.42663833],[0.11631468],[-0.27090475],[0.18836942],[-0.4026297],[-0.3532125],[-0.095932305],[-0.094078794]]},{"dense_3_W":[[-0.08552111,0.15208419,0.3206692,-0.46672416,-0.0039158463,-0.05807648,-0.5021984,0.15186986,-0.59495836,0.2405156,-0.5498271,0.070102595,0.26428217],[-0.63763195,0.14358082,0.45475405,0.4365134,0.5539486,-0.44107583,0.46288002,-0.1564132,0.39014947,-0.55990654,-0.05062592,-0.5582297,-0.45318148],[0.57558644,-0.5381224,-0.6278913,0.21171339,-0.06526249,-0.1312582,0.3146726,-0.45940813,-0.15466015,0.11860342,0.36926913,-0.16175088,0.17500523]],"activation":"identity","dense_3_b":[[-0.03552377],[0.059005316],[-0.037881076]]},{"dense_4_W":[[0.43992618,-0.9712287,0.43158254]],"dense_4_b":[[-0.04844147]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHEVROLET SUBURBAN PREMIER 2019.json b/selfdrive/car/torque_data/lat_models/CHEVROLET SUBURBAN PREMIER 2019.json new file mode 100755 index 0000000000..1383fdf7f9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHEVROLET SUBURBAN PREMIER 2019.json @@ -0,0 +1 @@ +{"input_std":[[7.0000353],[0.91031396],[1.269469],[0.0315604],[0.9563133],[0.95031977],[0.9356424],[0.873496],[0.8912867],[0.8935701],[0.96191794],[0.031832103],[0.031727515],[0.031619374],[0.03170114],[0.03179356],[0.031944003],[0.03203715]],"model_test_loss":0.025683574378490448,"input_size":18,"current_date_and_time":"2023-08-31_22-32-43","input_mean":[[27.019146],[0.2162388],[-0.102987334],[-0.016973253],[0.2426502],[0.23661843],[0.22663806],[0.18541981],[0.17368032],[0.14804864],[0.09238692],[-0.017235657],[-0.017166195],[-0.017074104],[-0.016875083],[-0.016880676],[-0.017125089],[-0.017351476]],"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.23588695],[-0.5088953],[1.5173167],[0.21325926],[0.7270255],[1.0430372],[-2.1749456]],"dense_1_W":[[-0.00035987928,1.4975938,2.03412,-0.83676016,-5.5800395,-1.7383903,-0.18633558,6.249567,0.15692733,1.1870492,-1.8389847,0.8397649,0.41889027,0.19991927,-0.71028113,-0.42742363,-0.01929488,0.56470984],[0.1451778,-0.42022082,-0.08357744,0.37352008,0.13762045,-0.513736,0.19210075,-0.99654514,0.07671047,0.3092085,-0.09438795,-0.7692168,-0.05790273,-0.019019479,0.68036485,-0.3681197,0.042775016,0.113177255],[0.17934947,0.6802453,0.53991216,1.2953564,0.36064458,-2.232729,-1.3662916,9.39327,3.2034888,0.82174385,-3.8604288,-0.059266165,0.23885792,1.2206435,-0.037034295,-1.0659415,-1.2380418,-0.38709572],[-0.63551307,0.14085051,-0.058989003,-0.096907504,-0.08637354,-0.9568107,-0.203569,0.09172185,-1.7067626,0.23453063,0.40079904,-0.33019188,-0.14800894,0.4674501,-0.058009204,-0.3754687,-0.10436635,0.64636946],[0.33742648,-0.36501276,-0.034292817,-0.51860994,-1.3856511,-1.5455489,-1.0439808,-0.75624853,-1.0810176,-0.5734188,0.55518353,-0.80131483,-0.6185672,-0.28676248,-0.104135,-0.62493587,-0.8962451,-1.5516719],[0.43760708,-1.6991494,-0.03338309,-0.96213526,0.00956474,-1.2663416,-1.9227605,-3.5994406,0.26717234,1.618855,-0.69799376,-0.3365453,0.08994935,0.16855639,-2.0510433,-1.3217996,-1.0182589,-0.993361],[0.38308197,-1.8382412,-0.15014274,0.11305897,1.90282,-0.91276294,-1.8583714,-2.2861354,-1.0779126,-2.9923978,-2.1958616,-0.40794706,-0.3506177,0.21085607,0.39614698,0.46702477,-0.1904523,-0.28659886]],"activation":"σ"},{"dense_2_W":[[-0.13722074,0.17729984,-0.24335465,0.24187207,-0.14201832,-0.07732416,0.13892417],[-0.4686111,0.30702016,-0.15520222,0.2413592,-0.06519562,-0.02441734,0.05019473],[0.79214656,-0.7921441,-0.6606072,0.055532016,-0.11311045,-0.08024592,-0.0085274875],[-0.25042439,0.21615438,0.4954985,0.0046605244,-0.4504836,-0.13616334,-0.39802498],[0.49501747,-0.8520829,-0.74666256,0.59406155,-0.3424727,-0.42375195,-0.056689456],[0.09918636,-0.27861944,-0.06896329,0.07916021,0.39362162,-0.3197992,-0.38495535],[-0.44832206,0.775501,-1.5508496,-1.2964923,0.2656348,0.73607206,0.102380335],[-0.12338452,0.45182562,0.15285002,0.36166486,0.106165096,-0.44855922,0.26180896],[1.468655,-2.9420528,1.1340134,-1.8203074,-1.8435699,1.8503501,-0.6241417],[0.11571435,0.44641992,0.5466342,0.460799,0.34136263,0.118771955,0.03079372],[-0.89526504,0.4808293,-0.020656256,0.23367782,0.24296117,0.14677529,-0.17654741],[0.48179916,-0.9906037,-0.5923862,-0.4594782,-0.35988396,0.8058588,-0.045400906],[0.5093772,0.44455037,0.17609815,-0.81010824,-0.7701845,-0.67883664,-0.105422966]],"activation":"σ","dense_2_b":[[-0.016313186],[-0.23423415],[-0.11555125],[0.031153541],[-0.008395348],[-0.05427732],[0.04926095],[-0.03232725],[1.3587319],[0.039414253],[-0.2525624],[0.069728516],[-0.1901692]]},{"dense_3_W":[[-0.40749985,-0.48021835,0.56590366,0.18960631,0.38889936,-0.016490487,0.2452584,-0.49623072,0.38123888,-0.64162004,-0.4950841,-0.28877184,0.033746734],[-0.42167312,0.4292303,-0.117614456,-0.051768117,0.051334534,0.5342065,0.5592815,-0.093919486,0.65363497,-0.43596736,0.16242468,0.2578982,-0.2107315],[0.3909801,0.0338481,0.17298904,-0.6669294,0.66819596,0.5040033,-0.11421765,0.24396016,0.58365494,-0.4551556,0.13173825,0.29966846,-0.28813577]],"activation":"identity","dense_3_b":[[-0.039529935],[-0.049995966],[-0.054298006]]},{"dense_4_W":[[0.5930795,0.46760607,0.73884505]],"dense_4_b":[[-0.046037514]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHEVROLET TRAILBLAZER 2021.json b/selfdrive/car/torque_data/lat_models/CHEVROLET TRAILBLAZER 2021.json new file mode 100755 index 0000000000..d81339bae9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHEVROLET TRAILBLAZER 2021.json @@ -0,0 +1 @@ +{"input_std":[[10.263361],[1.5407822],[1.6990757],[0.031916086],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[1.4340314],[0.031784274],[0.031784274],[0.031784274],[0.031784274],[0.031784274],[0.031784274],[0.031784274]],"model_test_loss":0.050728149712085724,"input_size":18,"current_date_and_time":"2023-09-28_17-19-10","input_mean":[[21.170568],[0.0028904085],[-0.01997667],[-0.011566885],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[0.0088682],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887],[-0.011584887]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.8283137],[-0.6380811],[-0.14581172],[0.21757337],[-0.17584349],[-0.15822433],[-0.04526756]],"dense_1_W":[[-0.12061483,-2.6186888,-5.533526,1.2848519,0.10997799,0.09768942,0.29055217,-0.4338942,0.45353734,0.40870407,0.74510694,0.035301626,0.1254258,0.06881082,-0.43392724,-0.6579088,0.12848276,0.10206295],[0.47858974,1.0521514,0.13895132,-0.11845431,-0.6055809,-0.30129787,0.10536316,0.36635193,0.062468443,0.16439146,0.7524098,-0.08773286,0.08453637,0.14768569,0.054678865,0.04296218,-0.1013483,-0.017113626],[1.5098917,0.5894743,0.59322363,-0.40857914,-0.04409986,-0.059111845,-0.22999583,0.13513245,0.20424314,0.8996403,0.6257698,-0.012137316,-0.26447135,0.33300093,0.5780546,0.11556365,-0.21325883,-0.11405065],[-0.09270235,4.2095594,-0.03419901,-0.85176253,-0.792438,-1.1375993,-0.95709634,-0.5417718,0.13269264,0.34799594,0.8776221,0.23166949,0.25684002,0.14214455,0.31949127,-0.1842014,-0.048224565,0.06972774],[-0.07368613,7.987101,-1.5705101,-2.7268257,-1.6060512,-2.2150717,-1.7734491,-1.0044583,-0.9965295,-0.53904784,-0.71252525,0.82295734,0.079120055,0.8620408,0.040507376,0.5511871,0.57866305,-0.3000211],[-0.19393307,1.3685007,-0.81581175,-0.65915656,-0.26665,-0.18225093,-0.2348052,-0.613443,-0.4242962,-0.1411918,-0.40366364,0.14329708,-0.15040468,0.111927874,0.35063627,0.2598781,0.044979107,-0.13300987],[-0.15487364,1.5682242,-0.39758956,-1.613167,-1.2005973,-1.3606614,-1.4602566,-0.8778308,-0.8630755,-1.1338134,-1.5346371,0.44767708,-0.07334435,0.46988532,0.38771385,0.18633042,-0.31606805,0.49087706]],"activation":"σ"},{"dense_2_W":[[0.08773213,1.118686,-0.19026187,-0.18222769,0.05527968,-0.51330656,-0.036496755],[-0.5858637,-0.4254996,0.021144927,-0.08652764,-0.21240492,0.2946317,0.2629631],[0.20821263,-0.6136043,-0.2656985,-0.11885001,-0.23193532,0.573116,0.19101338],[1.3147112,0.8279403,-1.8892661,0.22684072,0.5924725,0.18479976,1.5572529],[0.09764118,0.8507632,0.54017293,-0.14499734,-0.08574703,-0.8551757,0.525648],[-0.63802594,-0.65069646,0.26210403,-0.24471927,0.48373717,-0.2968227,0.06695796],[-2.1634326,-0.6064817,-1.8872,1.6661983,0.24116987,-1.8317598,-1.4297333],[0.030689137,0.045585413,-0.619795,-0.3127205,0.00026456476,-1.2520658,-0.021226548],[-0.43981192,-0.6087822,0.26009014,-0.41205314,0.10397853,0.30045325,0.15389265],[-1.4882747,1.6382228,0.1060073,1.4234135,2.3527496,-1.4529006,-0.6220931],[0.32924128,-0.7916863,-0.16856577,-0.49799073,-0.3400066,0.34466445,0.47758287],[-0.3820367,-0.07035885,-0.770717,-0.08017813,-0.4997505,-0.5413408,-0.22099844],[-0.5534209,0.15586813,0.46922186,-0.285645,-0.43601796,-0.5457336,-0.09376932]],"activation":"σ","dense_2_b":[[-0.07499287],[0.056654293],[-0.033568453],[0.012748798],[-0.16169988],[-0.031001234],[0.4491975],[-0.18781444],[-0.022485357],[-0.4145325],[0.05514316],[-0.17725536],[-0.027867718]]},{"dense_3_W":[[0.48439038,0.11946673,-0.10710485,0.2569157,0.55854136,0.69526154,-0.045092683,-0.22340369,-0.057273377,-0.43256047,0.51690865,-0.45954293,0.5041862],[-0.39225766,0.5658039,0.13191655,-0.26512942,-0.45468462,0.029447814,-0.7955542,-0.47096017,0.19746478,-0.40087095,0.6816974,-0.313998,-0.2719639],[-0.20068921,-0.29952648,0.34961987,-0.66211593,-0.47286674,-0.1865282,0.25309294,0.27628332,0.5233655,0.30510098,0.5197866,-0.51454246,0.46288064]],"activation":"identity","dense_3_b":[[0.055204097],[0.070561714],[0.057622224]]},{"dense_4_W":[[-0.5929016,-1.4001877,-0.6662524]],"dense_4_b":[[-0.06424638]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHEVROLET VOLT PREMIER 2017.json b/selfdrive/car/torque_data/lat_models/CHEVROLET VOLT PREMIER 2017.json new file mode 100755 index 0000000000..881f47c901 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHEVROLET VOLT PREMIER 2017.json @@ -0,0 +1 @@ +{"input_std":[[9.342214],[1.5915664],[0.60113484],[0.048193663],[1.5680411],[1.57577],[1.5836853],[1.5711677],[1.5445132],[1.5007596],[1.4529978],[0.047915205],[0.04800539],[0.04808892],[0.04822398],[0.04817677],[0.047881734],[0.047405947]],"model_test_loss":0.019342588260769844,"input_size":18,"current_date_and_time":"2023-08-05_06-09-11","input_mean":[[22.757933],[-0.016342578],[-0.001405228],[-0.014619173],[-0.018091483],[-0.018382493],[-0.019270267],[-0.018759886],[-0.019559544],[-0.017848592],[-0.020014366],[-0.014564899],[-0.01457757],[-0.014600966],[-0.014757987],[-0.014915743],[-0.015121007],[-0.015359475]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.045577038],[-2.8160777],[-0.21418032],[2.9552083],[-0.06852827],[0.029141279],[-0.053249933]],"dense_1_W":[[0.0010664682,1.3813498,-8.153277,-0.009101015,-0.1484779,1.0008405,-1.5930991,-1.195274,0.6136762,0.3560462,-0.30077773,0.93531257,0.14550218,-0.40074933,-0.21716364,0.13834935,-0.0658936,-0.49427196],[-0.7338253,-0.037501235,-0.49922377,-1.0526338,-0.46141604,-1.3649396,0.7309814,-0.91667104,0.044683233,-0.18628967,-0.20878822,-0.2678598,0.48446324,0.51164204,0.09547851,0.41491362,-0.4524314,0.16594785],[-0.0032175342,3.5451593,-0.11421584,-0.2511033,0.27893174,0.6384996,0.80790603,1.3835542,1.8000495,2.249461,1.4026878,0.7851167,-0.35052946,0.041820426,-0.39790183,0.45703772,-0.30459648,0.18287674],[0.72289664,-0.77138704,-0.5025135,-0.49323097,-0.39893976,-0.8779149,0.6848096,-0.58729875,-0.16643623,-0.14427555,-0.15013328,-0.11467142,-0.27280045,0.48508415,0.52080667,-0.0029569597,-0.28170735,0.06367212],[0.00014026981,-2.0353239,0.0060915067,0.4794941,1.1882906,-1.512865,0.80642134,-0.26044324,-0.56213886,-0.365122,0.55078083,-0.34897435,-0.32031298,0.46106994,0.37792024,-0.14116105,0.15597256,-0.32811671],[0.0011494387,1.9060265,8.3941965,-0.3078165,-0.9530427,0.6589645,-1.2487054,-0.541133,0.13451256,0.2805466,-0.33187166,0.9900705,0.2821258,-0.51270896,-0.5130031,-0.28222615,0.042734932,0.27233443],[-0.0014444552,-1.0933362,0.003359957,-0.15052961,0.37165833,1.7087307,-1.4971043,0.673802,-0.108465396,-0.088505454,0.21561684,0.6252258,-0.15019403,-0.34727478,0.08958758,-0.1723621,-0.25557828,0.29778987]],"activation":"σ"},{"dense_2_W":[[0.20810607,-0.13481373,-0.15003344,-0.6067625,-0.31937903,-0.37380016,0.4666911],[0.71834767,0.15669753,-0.11389502,0.27131546,-0.060118295,0.039282244,0.52961355],[-0.27200606,0.43380752,-0.106262706,-0.49363258,0.35659012,-0.01706296,-1.0807354],[-0.79583454,-0.66428274,-0.42157334,-0.52979547,-0.2803004,-0.57637554,0.084149174],[0.1230394,-0.57023287,0.28639448,-0.506744,-0.9920808,0.7510901,0.8584937],[-0.41256845,0.35423175,0.13009231,0.5198333,0.7576573,-0.7053181,-0.3390053],[-0.15090485,0.33375353,-0.64164793,0.57386595,0.25700107,-0.15245672,-0.49020413],[-0.50120676,0.5210849,-0.3282951,0.4276323,1.0257447,-1.0398436,-0.8911315],[0.11402861,-0.41491523,0.247507,-0.39776865,-0.6089287,0.20646147,0.6692102],[0.09411492,0.31819808,0.41330767,0.024243973,0.2314893,0.08529045,0.14911193],[0.5179265,0.20473345,-0.36762783,-0.009045922,-0.19436747,-0.548099,-0.08656279],[-0.69121784,-0.14201449,0.3887621,0.10787631,1.0371574,-0.64747447,-0.73437464],[-0.07860244,-0.597764,0.019551078,0.010199122,-0.7493642,0.66619915,0.121666186]],"activation":"σ","dense_2_b":[[-0.04259814],[-0.053309314],[-0.28045595],[-0.23801634],[0.00944943],[-0.109921046],[-0.037457183],[0.24627604],[-0.0069056284],[-0.04725389],[-0.03361769],[0.044101644],[-0.0009850285]]},{"dense_3_W":[[-0.19631335,-0.47722518,-0.019853225,-0.29363275,-0.625923,0.35145283,0.62401354,0.14337404,-0.25707108,-0.51310915,0.2565006,0.61742216,-0.07952821],[0.5868974,-0.36786363,-0.0177682,-0.45121866,0.68608487,-0.55178356,-0.35236016,-0.7226455,-0.015394288,-0.10650332,0.5391039,0.17791761,0.34196886],[0.16821232,-0.35580373,0.26906335,0.41736925,-0.6979869,0.41801625,0.34707317,0.7784011,-0.10002936,0.32485273,-0.3644285,0.49092358,-0.43872768]],"activation":"identity","dense_3_b":[[-0.019481273],[0.031026587],[-0.03595322]]},{"dense_4_W":[[-0.72340566,0.21244061,-0.67248434]],"dense_4_b":[[0.026229527]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018 b'68288891AE'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018 b'68288891AE'.json new file mode 100755 index 0000000000..a3d545654f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018 b'68288891AE'.json @@ -0,0 +1 @@ +{"input_std":[[8.373018],[0.9030777],[0.5074704],[0.04613504],[0.88142586],[0.8866381],[0.89388347],[0.8932321],[0.8819763],[0.8731947],[0.8590319],[0.045989916],[0.0460441],[0.0460619],[0.045975763],[0.045940377],[0.045967344],[0.045802947]],"model_test_loss":0.015751762315630913,"input_size":18,"current_date_and_time":"2023-08-05_06-59-32","input_mean":[[24.77125],[-0.0032338882],[0.0011955422],[-0.006900902],[-0.0038386101],[-0.0039004202],[-0.0042313747],[-0.0024037024],[-0.00096440193],[0.0012867558],[0.0017196954],[-0.0071007432],[-0.00707776],[-0.00704705],[-0.006997249],[-0.0070410697],[-0.007170475],[-0.0072323773]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.6144774],[-0.611369],[0.06358977],[0.3156127],[0.8767984],[3.4156723],[0.003413344]],"dense_1_W":[[-1.6343578,-1.049992,-0.0069447346,-0.07656319,0.9073908,-0.4678912,0.71257806,0.1714419,-0.26281458,-0.35347363,-0.3895179,0.44868368,0.380276,-0.39410144,-0.2020346,-0.5423825,0.033040486,0.34113047],[0.061624493,-0.82921517,-0.01718619,0.5021635,0.38075656,-0.9557198,1.0850599,-0.040632535,-0.06843774,-0.057645954,0.08296408,-0.80168,-0.18512976,0.29119503,0.110343546,0.41180205,0.12086572,-0.41889068],[-0.010757727,0.5473467,0.011401861,0.6086944,0.049230263,0.99673975,-1.3204706,0.28527504,0.3079167,-0.08217005,-0.11085929,-0.020257747,-0.23550712,0.24950017,-0.5063016,-0.26893258,0.0859618,0.10826616],[0.00026013076,0.23115467,-0.069196984,-0.75177777,0.22679992,1.7333206,0.07338034,0.116831884,0.0074134893,-0.018370198,0.30970082,-0.50682133,-0.19027503,-0.6724099,-0.18199274,0.13397577,0.164965,-0.20918545],[-0.20541261,-0.5444166,-0.021420065,-0.3442164,0.057785954,-0.30310464,0.30055538,-0.1295605,-0.19352978,0.24066639,-0.042200003,-0.36956027,-0.02677732,0.31982243,0.6093545,-0.115526475,0.1776776,-0.22874752],[1.5681508,-0.8700428,-0.003696639,0.28922054,0.5389638,-0.2202644,0.91082454,0.17935306,-0.5075993,-0.52194244,-0.18601756,0.29824322,0.11232214,-0.089093655,-0.6800216,-0.10418546,-0.23698366,0.39502653],[0.0059208865,1.0288696,6.2661505,-0.66229445,-1.1125858,-0.38614404,-0.32643217,0.47949737,1.3503966,0.5618509,-1.4472144,0.6179492,0.65568125,-0.07885619,0.13408393,-0.21204486,-0.24597093,-0.19171685]],"activation":"σ"},{"dense_2_W":[[-0.6874904,1.4170951,-0.12745337,-0.60079765,1.2469791,1.1586337,-0.78649855],[1.2081319,0.90333015,-1.1146795,-0.48159444,-0.3649141,-0.17463505,-0.6678926],[-0.55214715,-0.34822515,0.66485703,0.39923072,-0.12463221,0.08416195,0.28940073],[-0.050559178,-0.5941852,0.69570416,0.4125025,-0.4354757,-0.7011088,-0.16208832],[1.1914842,0.6823764,-1.2257708,-0.15821911,0.2223274,-0.7032655,-0.848314],[1.6538767,1.1209396,-1.2886561,-0.4070121,-0.115177,-0.8090923,-0.81735224],[0.22016695,-0.7717329,-0.11587681,0.21162826,-0.92120653,-0.97903466,0.43579248],[0.56604755,0.37791598,-0.20845827,0.09919322,-0.30082363,-0.038313784,0.5362454],[-0.68821806,-0.49654222,0.9537832,0.65139836,-0.11693425,0.14916053,-0.06942568],[0.046630222,-0.8000676,0.7262631,0.11821005,0.051495228,-0.85939616,0.057547066],[0.53842676,0.48920274,-1.0697515,-0.08906106,-0.111993946,0.0057545984,-0.07658284],[0.6831117,-1.0648286,0.68546003,0.0413394,-0.80540425,-1.5328187,0.56354785],[0.16279308,0.67666584,-0.6573683,-0.31834096,0.037058678,0.16600053,-0.30611348]],"activation":"σ","dense_2_b":[[0.18475154],[-0.5353296],[0.0045686276],[0.0644243],[-0.34292984],[-0.44532895],[-0.15199955],[-0.039516825],[-0.0066641783],[-0.121129245],[-0.30155125],[-0.13434392],[-0.20536488]]},{"dense_3_W":[[0.5609779,0.41182333,0.09668643,-0.11169122,0.65781176,-0.20218727,-0.20579323,-0.39217472,-0.1875857,0.07013257,-0.14129624,-0.8516521,-0.4181056],[0.17330131,0.5577742,-0.41269195,0.3908688,-0.28000897,-0.4038982,-0.7611636,-0.17782487,0.4776658,0.10774335,-0.63901216,0.07952478,0.30694935],[0.6155099,0.32474285,-0.5803224,-0.57116944,0.52884084,0.5404638,-0.44095984,0.5225624,-0.6491606,-0.3627888,0.35069153,-0.8106001,0.3223117]],"activation":"identity","dense_3_b":[[-0.08286718],[-0.068888254],[0.0319719]]},{"dense_4_W":[[-0.13953766,0.008684733,-0.9822762]],"dense_4_b":[[-0.035473026]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018 b'68378884AA'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018 b'68378884AA'.json new file mode 100755 index 0000000000..c7ee2877a3 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018 b'68378884AA'.json @@ -0,0 +1 @@ +{"input_std":[[7.4114137],[0.8722323],[0.46932527],[0.044081252],[0.86028934],[0.8640826],[0.86798763],[0.8536187],[0.8410519],[0.82815075],[0.810109],[0.044043],[0.04407502],[0.04409199],[0.043937493],[0.043765776],[0.043546446],[0.04328152]],"model_test_loss":0.014643135480582714,"input_size":18,"current_date_and_time":"2023-08-05_07-24-40","input_mean":[[24.419659],[0.074539855],[-0.0017381747],[-0.008417752],[0.07829621],[0.077322125],[0.07638317],[0.07649018],[0.07914126],[0.07727339],[0.07422926],[-0.008268176],[-0.008305934],[-0.00833634],[-0.0085348915],[-0.008592072],[-0.008777455],[-0.008993609]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.6179284],[0.023280667],[-0.08620803],[0.06128514],[0.02275239],[-0.18200094],[1.8732487]],"dense_1_W":[[1.1412842,-0.65644145,-0.021648865,0.20894393,0.11492929,0.024267908,0.52723205,0.019462796,-0.47829676,-0.16443051,0.17201795,0.42243433,-0.36430183,0.22046827,0.32417053,-0.18519317,0.080741584,-0.16006538],[-0.005015809,-1.0202065,-5.871842,0.71349776,1.488136,0.45296022,0.71639055,-0.3002113,-2.253665,-0.42296624,1.242773,-0.7964674,-0.9905283,0.2496325,0.61510533,-0.15485354,0.21373129,0.04878167],[-0.010342299,-0.39523616,0.046641767,-0.24375893,-0.06735964,-1.2132907,0.37299547,0.3911464,-0.25198907,0.3312644,-0.34782395,-0.48724928,0.29790998,0.35056496,-0.0473569,-0.43243703,0.6975423,-0.29797408],[-0.00034046813,0.5919114,0.09751131,-0.5365073,-0.27980977,0.6561016,-1.3969619,0.7704919,0.22894996,0.1283786,-0.47947106,0.7656381,-0.072749116,-0.22385994,-0.35181323,-0.12690988,0.14871003,0.11680299],[-0.013497786,0.45467585,4.8478483e-5,-0.03120461,-0.101532854,1.0691814,-0.8467964,-0.021295521,-0.45961225,0.59129924,-0.089904785,0.008552424,0.18295166,0.22167599,-0.15085436,-0.24900465,-0.119021356,0.22574107],[-0.008662208,-0.63313335,0.018632747,0.3784552,0.43672615,-1.0928847,0.454874,0.19710287,-0.28992844,0.23891906,-0.09657884,-0.4631879,0.07360768,0.18814832,-0.12545085,0.2790517,0.08361877,-0.19971517],[1.1187938,0.60673416,0.01786017,-0.09599037,-0.13338761,0.18924287,-0.71290374,0.25608516,0.055396356,0.32042313,-0.14714265,0.16070165,-0.44769058,-0.3857691,0.32144114,-0.2591744,0.04301578,0.12334804]],"activation":"σ"},{"dense_2_W":[[-0.82576907,-0.44307485,-0.5584657,-0.26069835,0.025256865,-0.22589661,-0.30988473],[0.5059596,0.51916337,0.37335545,-0.78297406,-0.5575328,0.4401032,0.58699924],[0.11900411,0.11446233,0.19891147,-0.46948108,-0.9270995,0.35623828,-0.6453305],[0.19260314,0.21158606,-0.80488014,0.1861143,-0.40799478,0.14247413,-0.47271043],[-0.017787304,0.20611304,0.4156514,-0.61586165,-0.94270116,0.66989255,-0.67521656],[-0.31637055,0.20475076,0.49659994,-0.8381352,0.3070665,0.29303974,0.3692397],[-0.24042161,0.14646454,0.4807689,-0.38160017,-0.11857776,0.52430975,-0.6127423],[-0.65716666,-0.05448026,-0.08932297,0.44863978,0.6453178,-0.8167935,0.32415792],[-0.97310895,-0.9338679,-0.55535233,0.95583254,0.7763494,-1.2186505,-0.56390756],[-0.756582,0.030662287,-0.5920601,0.26177648,0.0058387904,-0.79189116,0.22250274],[-0.32252684,0.052682888,0.22795783,-0.22263758,0.1424579,-0.4165235,0.082806356],[-0.5069151,0.230296,-0.7718149,0.86378086,0.6413413,-0.7768083,0.09442894],[0.7895166,-1.1067913,-0.9261671,1.5575143,0.72259814,-0.71757495,1.2043413]],"activation":"σ","dense_2_b":[[-0.25221804],[0.009360817],[-0.21046683],[-0.30669668],[-0.19557822],[-0.051661972],[-0.010102212],[-0.07111588],[-0.024985338],[-0.20747323],[-0.070582196],[-0.024536485],[0.429603]]},{"dense_3_W":[[-0.05159049,0.4616699,0.31688318,-0.35587642,0.10358843,0.23453818,0.62690145,-0.17403877,-0.34668615,-0.2585309,0.042846948,-0.64290446,-0.66602695],[0.25770965,-0.6448781,-0.1178888,0.02731388,-0.62877536,-0.4874037,-0.16834061,0.3735322,0.6264744,0.23036048,0.57248384,0.0652369,0.033351496],[0.08815916,-0.34792545,-0.33370885,0.6393934,0.23722698,-0.3480035,0.47185498,-0.6307859,-0.080584675,0.27943882,0.40409383,-0.10291437,0.25641736]],"activation":"identity","dense_3_b":[[0.06215998],[-0.043686442],[0.044486612]]},{"dense_4_W":[[-1.0976462,0.4308298,-0.47021297]],"dense_4_b":[[-0.056185924]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018.json new file mode 100755 index 0000000000..f8074bf939 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.210334],[0.9762297],[0.46461004],[0.04707402],[0.9570847],[0.962571],[0.9688103],[0.9626872],[0.9493875],[0.93438673],[0.91365314],[0.046885576],[0.04696745],[0.047010563],[0.047022652],[0.047106303],[0.047075313],[0.0468335]],"model_test_loss":0.01662263832986355,"input_size":18,"current_date_and_time":"2023-08-05_06-34-39","input_mean":[[24.433825],[0.027294964],[-0.007775845],[-0.008583761],[0.028062655],[0.026877884],[0.025869267],[0.024155349],[0.025895124],[0.02763769],[0.028466335],[-0.00856314],[-0.008589166],[-0.008611988],[-0.008814955],[-0.008984508],[-0.009198656],[-0.009352716]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.01408288],[1.6081693],[-0.06155718],[-1.54345],[-0.24193887],[-2.5958166],[-2.5204089]],"dense_1_W":[[0.0027263653,0.8206801,-0.0032928735,0.13611287,-0.076531366,1.5959642,-1.2799904,-0.06996241,0.03039119,0.02152609,0.0963275,0.5368505,0.14871612,-0.3396571,-0.2039869,-0.6619022,-0.039203983,0.4320533],[1.0668212,-0.75284845,0.1227131,0.26535362,0.13527365,-0.2295604,1.1708634,-0.021281645,-0.15021786,0.39643094,0.74283296,-0.3838045,0.003083275,-0.19208938,-0.0017936465,0.703765,-0.092454515,-0.31097198],[0.0027553164,0.7843536,4.634527,-0.26233014,-0.5298467,-0.5220332,-0.74772763,0.2625032,1.8427289,0.32081687,-1.2304753,0.90846735,0.22365782,0.250327,-0.6063961,-0.39930865,-0.18285267,0.079409026],[-1.1514753,-1.0265552,0.13074096,0.38378564,0.7118709,-0.35103342,1.0191414,-0.004307897,-0.1731455,0.13679343,1.0576029,-0.40426365,-0.26618227,0.048847493,0.23475589,0.2227605,0.085375875,-0.30894497],[-0.0047089225,-0.5524328,-0.0045054047,0.66928285,0.064004675,-1.3554454,0.75827724,-0.44520453,-0.070583,0.2953706,-0.17199413,-0.52929235,0.076917104,0.5385476,0.43512538,-0.24582133,0.1710678,-0.17150968],[-0.85862017,0.34829536,0.10180492,-0.16177164,-0.70526654,0.610196,-0.51517403,0.19511817,0.5740542,0.4342128,0.10650083,-0.08206996,-0.14800107,-0.11421001,0.25861365,0.49271822,0.13999887,-0.38721174],[-0.852335,-0.32791263,-0.10090505,-0.21708132,0.70464164,-0.4129493,0.19680835,-0.0039844504,-0.58808166,-0.5447895,-0.055174615,-0.009039755,0.3263737,0.39800122,-0.43388817,-0.2980978,-0.109957084,0.34861532]],"activation":"σ"},{"dense_2_W":[[-0.8770086,-0.024234872,-0.29209283,0.2774463,0.24086247,-0.38808098,0.76261544],[0.7931689,-0.4432339,0.5408512,-0.40607476,0.018381504,0.22573993,-1.2025113],[0.2774073,-0.28390488,0.48924458,-0.10028617,-1.1787524,0.55241233,-0.31903595],[1.187657,-0.90130055,-0.11544119,-0.48425758,-0.5087712,1.5533149,-0.44771603],[0.58252364,-0.7203072,0.46005324,0.2731612,-0.67982006,0.15357131,-0.57816696],[-0.9171702,0.37134174,-0.41417953,0.17179497,0.39356327,-0.10935133,-0.09958233],[-0.66176236,0.14740363,0.07868582,-0.40370503,0.3730389,-0.06752067,0.5966177],[0.057574127,-0.085722245,0.09327541,0.19917345,-0.112103276,0.4723292,-0.71419835],[-0.3262963,-0.03496345,-0.18610413,0.28829092,0.5575449,-0.96931815,0.2509937],[-0.14358501,-0.53553015,0.102502294,0.38049912,-0.011593848,-0.10357873,0.38666174],[1.0979931,-0.5266687,0.011019552,-0.36888388,-0.36552617,0.7437136,-1.0329511],[-0.99298805,0.033587284,-0.0815785,0.2939779,0.17858009,-0.36309564,0.7169502],[0.1916819,-0.3956481,0.23111235,-0.19816011,-0.79406476,0.9587695,-0.5586975]],"activation":"σ","dense_2_b":[[-0.08816166],[0.23371251],[-0.22228523],[-0.015670193],[-0.03642067],[-0.008211963],[-0.17989649],[0.0062512616],[-0.030759228],[-0.15077485],[0.01450626],[-0.07085153],[-0.13338038]]},{"dense_3_W":[[-0.13808444,0.27692232,0.13246109,0.13561308,-0.050800115,-0.3225275,-0.5869831,0.64456654,0.19247706,-0.48861238,0.47843403,-0.009448491,-0.38144258],[-0.18783484,-0.17080472,0.36493075,-0.6014318,-0.6958318,0.33951765,0.06917564,0.34324136,0.5521416,-0.65650636,0.07141213,0.48251265,-0.095275834],[0.67380184,-0.285928,-0.43182224,0.052221615,0.0014595015,0.21199639,-0.06704697,-0.40021017,0.5456471,0.4511299,-0.31108952,0.5755762,-0.41977003]],"activation":"identity","dense_3_b":[[0.05807602],[-0.052454475],[-0.061056226]]},{"dense_4_W":[[0.47078133,-0.7455223,-0.98688024]],"dense_4_b":[[0.054955926]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68416742AA'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68416742AA'.json new file mode 100755 index 0000000000..2614d74873 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68416742AA'.json @@ -0,0 +1 @@ +{"input_std":[[5.639734],[0.85540456],[0.51403534],[0.0358391],[0.8370467],[0.8427152],[0.8486273],[0.84191525],[0.8333683],[0.81845397],[0.8031892],[0.03569495],[0.03575506],[0.035804357],[0.035734106],[0.035606634],[0.035394073],[0.035043836]],"model_test_loss":0.01249884907156229,"input_size":18,"current_date_and_time":"2023-08-05_08-42-51","input_mean":[[28.944149],[0.008511811],[0.006614594],[-0.0007803046],[0.008761563],[0.008401991],[0.0077602137],[0.010470908],[0.011851343],[0.013133246],[0.012414774],[-0.00091107877],[-0.00089483795],[-0.000888365],[-0.0009297467],[-0.00096828357],[-0.0011469029],[-0.0011704979]],"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.42215475],[-0.13067937],[-0.97678196],[0.032708973],[-0.21987508],[-0.13514404],[-0.035059012]],"dense_1_W":[[0.21781056,-0.33137965,-0.021430474,-0.025393143,0.41623712,-0.85452425,0.5125608,-0.028942296,-0.25001037,0.1056078,0.02808124,0.07531937,-0.1905481,0.16195467,0.12945747,0.20600978,-0.26016086,0.06601578],[0.45804447,0.39586294,0.016093273,-0.4889348,0.2889768,0.097107925,-0.4900717,0.08450028,0.12946251,0.029848771,-0.04884375,0.29394668,0.08218726,-0.18262681,0.046750773,0.006920203,0.25929216,-0.123556316],[-0.36142796,-0.4761168,-0.031057041,-0.03201091,0.3264201,-0.28861398,0.03595103,-0.03517199,0.12988408,-0.33035025,0.20245835,-0.050757732,-0.106270775,0.37782818,-0.1009953,-0.13087629,0.26906365,-0.10609762],[0.025104474,0.019358486,-0.024905588,0.21881673,-0.25832435,0.96893126,-0.7209163,0.41793713,-0.13289197,-0.12783904,0.13794017,0.21045911,0.050720435,-0.25170416,-0.62401164,-0.024670731,-0.29609823,0.35617065],[-0.008312407,-0.7407596,-7.084344,0.028729403,0.6807612,-0.014186225,0.67334884,0.29722595,-0.9668716,-0.531245,0.66484416,-1.1115197,-0.64549005,-0.120867796,-0.17233334,0.78614897,0.8250422,0.34976736],[-0.48205698,0.4224278,0.018553648,-0.2134916,0.04153917,0.7245894,-0.93251956,0.013013465,0.24247682,0.04031593,-0.08674914,0.14843619,0.25142464,-0.052657608,-0.067281075,-0.18016832,-0.3367292,0.36795783],[0.0060425145,-0.6726894,0.12755352,0.6079416,-0.19894339,-0.67753744,0.42177054,0.25688335,-0.6894623,-0.2502804,0.32992235,-0.27346176,-0.35465118,0.29624695,-0.12629414,-0.6665767,-0.173872,0.28384444]],"activation":"σ"},{"dense_2_W":[[-0.7923206,-0.009339641,-0.5352346,0.6091468,-0.04876316,0.39490545,-0.034111094],[-1.0249208,0.39700195,-0.58438927,0.16584569,0.17201081,0.5389196,-0.0868657],[-0.6531692,-0.007390197,0.17620674,-0.13442127,-0.58781165,0.47517285,-0.3037654],[0.93093103,-0.8664581,0.60659295,-0.41851223,-0.008249123,-0.3610143,-0.1658192],[0.18383585,-0.9612978,0.108306736,-1.0595605,0.6152441,-0.18968369,0.12764637],[-0.23412292,0.8866577,-0.36853278,0.41754025,-0.6953287,-0.2107403,0.3878631],[1.6182716,-1.1367084,1.2613131,-0.22455032,-1.5450573,-1.1383495,1.2916391],[-0.6907885,0.21876465,-0.37425384,0.28203624,-0.37134746,-0.060869645,-0.36596343],[0.32001236,-0.48894957,0.4011093,-0.63292897,0.14903933,-0.69945556,0.2776244],[0.7659646,-0.14666194,0.77608156,-0.29742083,0.26605186,0.016574113,-0.22834513],[-0.71138144,-0.062448937,0.30001172,-0.01717667,-1.2297869,0.69679105,0.046717945],[-0.7727106,0.2412452,-0.464044,0.80845594,-0.62951875,-0.08542672,0.07366458],[-0.025123067,-0.027039677,0.34798175,-0.7620366,0.43302727,-0.89325774,0.0035131366]],"activation":"σ","dense_2_b":[[-0.099672936],[-0.0876946],[-0.08204721],[-0.025810441],[-0.34068185],[0.060692374],[-0.024438279],[-0.07015547],[-0.039097134],[-0.14396088],[-0.15622896],[-0.005676818],[-0.011064758]]},{"dense_3_W":[[0.39419955,0.5720024,0.54087794,-0.73478484,-0.51288295,0.4327564,-0.5041765,0.3271926,-0.48603916,-0.5796963,0.72407377,0.71574676,-0.6588747],[-0.4544194,0.26937458,0.039873235,-0.34116194,0.16377093,-0.59205776,0.7291578,-0.12695956,0.7046899,0.10085361,0.14058925,-0.6534143,-0.31029704],[0.36182398,0.6130376,-0.03244722,-0.1537163,-0.62813044,0.25602,-0.7971318,0.06725275,-0.21288694,0.23565246,0.45994118,0.029152358,-0.028171498]],"activation":"identity","dense_3_b":[[-0.008158646],[0.024065692],[-0.046528816]]},{"dense_4_W":[[0.623884,-0.1895593,0.47617644]],"dense_4_b":[[-0.010568268]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68460393AA'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68460393AA'.json new file mode 100755 index 0000000000..d19a7be8cb --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68460393AA'.json @@ -0,0 +1 @@ +{"input_std":[[5.4242563],[1.090038],[0.5387467],[0.045696616],[1.0706453],[1.0769838],[1.0826412],[1.0662853],[1.044258],[1.015598],[0.9955335],[0.045430943],[0.04546534],[0.04548917],[0.045445427],[0.045430474],[0.045357496],[0.045145508]],"model_test_loss":0.012552225962281227,"input_size":18,"current_date_and_time":"2023-08-05_09-07-51","input_mean":[[28.232662],[0.0413919],[8.108091e-5],[-0.00953157],[0.038943794],[0.03873717],[0.039187554],[0.038665015],[0.041457415],[0.042767525],[0.03904675],[-0.009741066],[-0.009699849],[-0.009670657],[-0.009643033],[-0.009600081],[-0.00964547],[-0.009827622]],"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.13912317],[-0.18454184],[-0.12308464],[-0.05414716],[0.22322485],[0.0986465],[0.046013463]],"dense_1_W":[[0.039979875,-0.45747104,0.01409263,0.1038344,-0.39685473,-0.33794326,0.87375444,-0.39493144,-0.022856656,0.16293114,-0.1021352,-0.16609733,-0.13024335,0.3786684,-0.14359765,0.29113892,0.29941785,-0.29400635],[0.052472137,-0.053698886,-5.422898,-0.21991543,0.313983,0.36116323,0.05229922,-0.48481512,-0.699478,-1.117739,-0.30874887,-0.38158453,-0.1338971,-0.44151375,-0.17320636,0.7264404,0.32501188,0.7165989],[-0.010304283,-0.98240876,-0.022742985,0.22672749,0.48251867,-0.9433817,0.9824343,0.13986214,-0.1942156,-0.30411872,0.28717113,-0.571053,0.24414678,0.07596924,0.18768153,0.14563765,-0.18377183,-0.043441784],[0.005285528,1.0535682,-0.017260179,-0.33124572,0.0039716414,0.74013585,-0.39428404,-0.272743,0.07434402,0.27876472,-0.08732285,0.96002966,-0.4802241,-0.25286382,0.28896594,0.02317922,0.14128046,-0.017183177],[0.28194147,0.18924262,-0.002696126,0.21734203,0.0018270598,0.7102033,-0.8090373,0.58956873,0.02791912,0.08000271,-0.14373638,0.92130774,-0.071700506,-0.61309874,-0.88973755,-0.11552046,-0.11336341,0.41735962],[0.31988075,-0.3792179,-0.0064482973,0.41482916,0.30242506,-0.8525714,0.587519,-0.21211164,-0.014709177,-0.25068194,0.2086841,-0.5114691,0.027261272,0.32500595,0.09924409,-0.19256444,0.16786371,-0.11739298],[0.0021515805,0.30027154,5.952735,0.5089647,-1.6394058,-1.0211537,-0.9829749,0.8358446,2.6611304,0.60455,-0.4308957,0.83339345,0.9026655,0.08858586,-0.7351174,-0.9489569,-0.40282488,-0.341631]],"activation":"σ"},{"dense_2_W":[[0.9260268,-0.8087541,0.7243133,-1.0124146,-0.4938717,0.81473345,0.11277119],[0.21146505,0.24969757,-0.018303309,0.021199943,-1.0386741,0.06976922,-0.5488614],[-0.3201507,0.091772825,-0.39746743,0.5359968,0.67508984,0.09967213,0.25258896],[-0.54746306,-0.0038191364,-0.20888582,0.43253246,-0.3283931,0.21827807,0.25115517],[-0.54352003,0.28153777,0.21302846,-0.8480698,-0.58262014,-0.61925584,-0.10825497],[0.3063305,0.2462994,0.23962738,-0.41100392,-0.53911793,0.321222,0.07766791],[0.10468989,-0.021128409,-0.6309457,0.36274424,0.28997198,0.0035589251,0.40533248],[-0.29012105,-0.5573741,0.27605262,0.3979421,-0.06551908,0.22975506,-0.36112309],[-0.64441514,-0.102396026,-0.47194633,-0.14262818,0.6258268,-0.06171014,0.020799521],[0.47843814,0.04975281,0.31482425,0.13627958,-0.5157222,0.59243554,-0.54984564],[0.5728869,0.45515713,-0.12804388,0.15026231,-0.317451,0.033666957,-0.3124569],[0.6588982,-0.52865326,0.89718544,-0.6003115,-0.33325368,0.73482186,-0.22547686],[-0.5273782,-0.087307595,-0.60608846,0.036910504,-0.22960147,-0.7512217,0.302108]],"activation":"σ","dense_2_b":[[-0.13479586],[-0.13513349],[0.0009373699],[-0.042181917],[-0.29355353],[-0.048629034],[-0.046268582],[-0.0064258813],[0.05825038],[-0.13651372],[-0.1501067],[-0.08589544],[0.048994377]]},{"dense_3_W":[[0.3654538,0.115187585,-0.439915,0.5377413,0.007418098,0.27751163,0.044657342,-0.17946307,-0.3654914,0.116421804,0.4164621,0.6509678,-0.427143],[-0.15930192,0.5932584,-0.62384886,-0.061347995,-0.07626731,0.02358485,-0.5655159,-0.30620593,0.20285667,0.5263857,0.33262604,-0.40084362,-0.63168716],[-0.39700428,-0.15882798,0.5767276,0.6016253,-0.090940565,0.20918909,-0.052728947,-0.0024816794,0.44058868,-0.63286716,-0.04175788,-0.5301039,0.33433867]],"activation":"identity","dense_3_b":[[-0.052033406],[-0.022464612],[0.028837651]]},{"dense_4_W":[[-0.79853165,-0.5028229,0.9493444]],"dense_4_b":[[0.032302264]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68524936AB'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68524936AB'.json new file mode 100755 index 0000000000..3038daba51 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020 b'68524936AB'.json @@ -0,0 +1 @@ +{"input_std":[[3.987233],[0.8537959],[0.3147956],[0.046582546],[0.84401494],[0.84688294],[0.84943753],[0.8459254],[0.8367666],[0.8265147],[0.81790316],[0.046407577],[0.046432234],[0.046448592],[0.046412252],[0.046326056],[0.046176534],[0.045897327]],"model_test_loss":0.015449066646397114,"input_size":18,"current_date_and_time":"2023-08-05_10-23-38","input_mean":[[25.967857],[0.06622085],[-0.0020416742],[0.015556498],[0.066534],[0.067036055],[0.06743562],[0.06573888],[0.06696677],[0.06556534],[0.06443423],[0.015573572],[0.015597905],[0.015617301],[0.015684133],[0.015687725],[0.01558393],[0.015239334]],"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.0808946],[0.037367117],[-0.038749795],[0.9390711],[-0.32065046],[-1.1784762],[-0.88848305]],"dense_1_W":[[-0.00011032098,0.9780359,-0.0014145505,-0.4366488,-0.013176787,0.33611873,-0.29262367,-0.3578369,0.11645427,0.42088133,-0.2598451,0.6237576,-0.13795596,-0.09887536,-0.12733373,-0.08417586,0.4013575,-0.07988855],[-0.0009259077,-0.062645964,-0.0018059709,-0.12713021,-0.055080768,-0.22723031,-0.026899165,0.200585,-0.42516625,0.22538531,-0.08643315,-0.6855331,0.5384225,0.5383578,-0.28057948,0.35908887,0.18033692,-0.29071817],[0.00023606251,-0.2708152,-3.7008457,-0.18686758,0.7081413,0.5238141,0.29570386,-0.37760863,-0.7263605,-0.6313755,0.52763283,-0.7201515,-0.24693261,-0.0033690718,0.19305243,0.28949165,0.15849951,0.32188925],[-0.0030307523,0.9266019,-0.00071122346,0.2938597,-0.7209375,-0.25652483,-0.833887,-0.41061628,-0.6894746,-0.44843826,-0.023134246,0.7723488,-0.032426476,-0.21999909,1.0757654,0.2777427,0.4482543,0.7690393],[0.005163568,0.3910777,0.0008774753,-0.1327848,0.038467746,0.2735437,-0.44077805,0.32235864,0.39658654,0.20570071,-0.13710664,0.1422694,-0.52818966,-0.07204501,-0.05014466,0.01687801,-0.32406497,-0.30950892],[0.22730923,0.26141903,-0.000953725,-0.37078547,0.3688389,0.28006992,-0.35340187,0.032271273,-0.079801165,0.38975418,-0.13068317,0.51164424,-0.14360848,-0.15369992,0.077170156,-0.22220115,-0.43598184,0.27546084],[0.2213501,-0.15664451,0.00094546424,0.3464266,-0.53368324,-0.1391294,0.38088232,-0.02687833,-0.24897413,0.004964223,-0.012853597,-0.73865753,0.11176492,0.6087426,-0.2588389,0.3292955,0.21136026,-0.15702726]],"activation":"σ"},{"dense_2_W":[[0.8372817,-0.25008437,-0.12787572,0.2646305,0.31623498,0.13657083,-1.0080503],[0.046799798,0.00918828,0.40113875,0.2216699,-0.27304304,-0.38028294,0.39347392],[-0.23938853,-0.34641623,-0.62152797,-0.46418,-0.7241759,-0.5278883,0.25341335],[-0.09937506,0.8862087,-0.24579188,-0.27517456,-0.660784,-0.34946993,-0.0786754],[0.7788807,-0.035170402,-0.38853168,0.22640607,0.14605336,0.8359692,-0.7039278],[-0.16715685,0.30906233,0.4299202,-0.15657364,-0.75562745,-0.5894536,0.67901284],[0.011040685,0.72528595,-0.3475271,0.20744416,0.0671484,-0.801704,-0.032896496],[-0.10695809,0.57284784,0.13369241,0.09459562,-0.75450206,-0.65015566,0.64747673],[0.41928726,-1.2618666,-0.31203488,0.500999,0.60130423,-0.015696425,-0.93787414],[-0.3277222,0.70236963,0.41655436,-0.5232463,-0.6613873,-0.7214429,0.6023961],[0.5236259,-0.8083846,-0.4727932,0.5152158,0.49668074,0.51633376,-0.30741963],[-0.29883748,-0.70302063,-0.06388201,-0.46135828,0.15648502,0.5698643,-0.37563467],[0.8581469,-0.22009362,-0.6310318,0.2918128,-0.03789091,0.3939349,-0.40259096]],"activation":"σ","dense_2_b":[[-0.11143744],[-0.044303834],[-0.28920218],[0.07294065],[-0.20649768],[-0.017393855],[0.033349346],[-0.0056764074],[-0.25138023],[0.08198082],[-0.17676844],[-0.29986814],[-0.16457124]]},{"dense_3_W":[[-0.49123013,-0.094490446,-0.23686716,0.6143184,-0.5806659,-0.10567876,0.564474,0.3225216,-0.16980709,0.15226522,-0.5543669,-0.2539091,-0.2111866],[-0.67487806,0.6078758,0.5300193,0.3342076,-0.46282768,0.7419035,-0.11941694,0.1968823,-0.3510679,0.7736118,-0.1578716,0.12241213,-0.426154],[-0.028797744,-0.23915093,0.5088453,-0.23264304,0.015492338,-0.5100102,-0.40799907,-0.34939715,-0.29578912,-0.24078988,0.72473073,-0.1903113,-0.08354421]],"activation":"identity","dense_3_b":[[0.04028917],[0.022620372],[0.00910732]]},{"dense_4_W":[[-0.95017105,-0.7261867,0.14058225]],"dense_4_b":[[-0.029187044]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020.json new file mode 100755 index 0000000000..555843209f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA 2020.json @@ -0,0 +1 @@ +{"input_std":[[5.693015],[1.1106057],[0.4839505],[0.047381964],[1.0865142],[1.0940344],[1.1007035],[1.0835435],[1.057553],[1.0248959],[0.99939334],[0.047141436],[0.047186267],[0.047211904],[0.04706877],[0.046951234],[0.04684611],[0.04661448]],"model_test_loss":0.013941051438450813,"input_size":18,"current_date_and_time":"2023-08-05_08-16-38","input_mean":[[28.37103],[0.03974344],[-0.014893848],[-0.00037599605],[0.044908416],[0.043708824],[0.042289667],[0.039325528],[0.043006305],[0.04660932],[0.04483933],[-0.00043650295],[-0.0004215664],[-0.0004140165],[-0.0003983723],[-0.00044116066],[-0.00051853625],[-0.00058758573]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.1451855],[-0.15737621],[-0.060310073],[0.6073345],[-0.05780308],[-0.16048814],[-0.23519869]],"dense_1_W":[[0.69470924,-0.6133493,0.0012405561,0.019553972,0.06448226,-0.73440015,1.0196836,-0.032631803,-0.21402587,-0.03535706,0.08963821,-0.4151518,0.04951377,0.21540186,0.08403593,0.30007103,0.0721286,-0.21808833],[-0.0055281483,-0.97871476,0.053892706,0.29578617,0.24488142,-0.9456837,0.31968737,0.23062654,-0.3851994,-0.14804605,0.12488454,-0.59180176,0.1747962,0.582284,-0.056728594,0.052842837,-0.25234208,0.08868016],[0.19908331,-0.23178522,-0.00033343132,0.29788065,-0.2630549,-0.9329808,0.9836051,-0.025557669,-0.046352006,0.021415278,-0.10175714,-0.44916221,0.41586125,-0.027728092,-0.11277255,0.28242412,-0.4416653,0.19147082],[0.49298579,0.29445317,0.0024654444,-0.034087177,-0.32976052,0.7320162,-0.13650697,-0.18142147,0.048409745,0.3485382,-0.1782508,0.17317066,0.0046146074,-0.455786,0.23675595,0.17629597,-0.2908207,0.05100971],[0.0025918921,0.60664314,0.08437282,0.0038275314,-0.26773483,0.7368417,-0.8442401,0.35636544,0.09660225,0.06810851,-0.23716143,0.15216075,0.4089829,-0.25967675,-0.5667884,-0.037151016,-0.22253121,0.35003844],[-0.0069139847,0.5928849,5.9585037,-0.2729994,-1.1027155,-0.5361705,-0.39928573,-0.21191321,1.6408015,0.88942456,-0.5805952,0.711463,1.0614796,0.75551856,-0.25333017,-1.0107019,-0.6404496,-0.4423781],[0.77807605,0.4254286,-0.0070603983,0.13885634,-0.11155952,0.92952013,-1.1097448,0.25786868,0.18906161,-0.19558257,0.03620436,0.5284809,0.28771606,-0.39166483,-0.412538,-0.41851315,-0.53765815,0.6955264]],"activation":"σ"},{"dense_2_W":[[0.14673255,-0.25427318,-0.41763714,-0.57974076,-0.56608886,-0.18331228,0.027660826],[-0.22915831,-0.55615884,-0.4508235,0.34225336,0.5593746,0.40537748,0.7960525],[0.21956417,-0.07734256,0.27312982,-0.3854605,-0.08650003,-0.27906924,0.26293612],[-0.77091247,-0.7756027,-0.9580333,0.765381,0.32493275,-0.51463944,0.7389473],[0.5907749,0.26036587,0.5915251,0.1214773,-0.029054264,-0.13793655,-0.038385104],[0.2536978,-0.44341302,0.088218234,-0.07722079,-0.69654363,-0.04497505,-0.37380072],[0.1492596,0.50270057,0.46113217,0.08208802,-0.44300494,-0.049104072,-0.38107514],[-0.033503003,0.31365246,-0.23077266,-0.51006895,0.10363347,-0.780032,-0.6072311],[0.19008167,0.41587985,0.41156146,-0.36104697,-0.25369507,-0.020715002,0.101388365],[-0.12538931,-0.93145704,-0.38526508,0.757801,0.4460356,0.22134012,0.059445396],[-0.010972688,-0.04331066,-0.5205074,-0.61291635,-0.38937822,-0.5410802,-0.776376],[-2.1453147,-0.70847136,-1.2064056,-0.31943244,0.13231355,1.2215211,-0.11054935],[-0.57651573,-0.17007175,-0.34664136,0.4060285,0.8317285,0.13207953,0.11835387]],"activation":"σ","dense_2_b":[[-0.10427355],[0.11536775],[-0.10146174],[0.08055071],[-0.1175017],[-0.09294055],[-0.12414659],[-0.12894793],[-0.122823305],[-0.0023050748],[-0.09449869],[-0.25891626],[0.0091852965]]},{"dense_3_W":[[0.018232554,0.26810202,0.2565264,0.30350316,0.51860917,0.3029135,0.5572722,0.37361154,0.45107833,-0.48839125,0.3939663,-0.0054893196,0.054042112],[0.4726983,-0.7600223,-0.2362871,-0.7305271,0.3979434,-0.16793822,0.08976205,-0.10595847,-0.5852833,-0.20750386,-0.19634347,-0.16581649,-0.49387524],[0.102563694,-0.77121973,0.49441037,-0.74888134,0.4121642,0.45769525,-0.36120865,0.5654234,0.5058435,0.45810163,0.20354177,-0.564163,-0.42752033]],"activation":"identity","dense_3_b":[[-0.09124249],[-0.07674238],[-0.08837357]]},{"dense_4_W":[[-0.9619778,-0.7475,-0.82428706]],"dense_4_b":[[0.088022344]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017 b'68288309AC'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017 b'68288309AC'.json new file mode 100755 index 0000000000..479e2cb351 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017 b'68288309AC'.json @@ -0,0 +1 @@ +{"input_std":[[7.6217413],[0.7114013],[0.42171296],[0.030692505],[0.70313025],[0.7054758],[0.7074203],[0.7039908],[0.70165694],[0.6984613],[0.69011045],[0.030523904],[0.030557213],[0.03057646],[0.030458547],[0.030253412],[0.029954236],[0.029606614]],"model_test_loss":0.014747933484613895,"input_size":18,"current_date_and_time":"2023-08-05_11-38-04","input_mean":[[28.228518],[0.08038404],[-0.0051411754],[-0.0056266068],[0.07707682],[0.07840141],[0.07956922],[0.07400305],[0.0744884],[0.072456144],[0.070939764],[-0.005806301],[-0.0057515134],[-0.0057001603],[-0.00563613],[-0.005653806],[-0.0057565314],[-0.0059536397]],"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.20161064],[0.3708137],[-0.2759572],[-1.7354532],[-0.006582411],[-0.1967276],[-1.6732626]],"dense_1_W":[[-0.0022043844,-0.47374737,0.12160097,0.6890159,0.3377973,-1.5650418,0.3390089,-0.20914559,-0.29470372,0.56673414,-0.3568904,-0.3345458,-0.1208839,-0.0800197,0.28805646,-0.16699065,-0.24808967,0.006654419],[0.22055951,0.5663217,0.014226842,-0.33060122,-0.48807305,0.8183591,-0.4619248,-0.16517015,0.22057265,0.120730974,-0.15235895,0.21393985,0.4685399,-0.42490304,-0.18560103,0.05731757,-0.09875112,0.17101038],[-0.18863444,0.46009055,0.0143123325,-0.09180277,-0.15147366,0.57024676,-0.45547467,-0.067543074,-0.022116022,0.31504935,-0.16846871,-0.01573877,0.087595,0.038511798,-0.007259396,-0.22452337,-0.12686455,0.20235924],[2.2950037,-0.15815431,0.0035836962,-0.67872524,0.08919689,-0.5821427,0.21903394,-0.044731744,-0.04884043,0.08973389,-0.054229386,0.02415706,0.070902705,0.26732698,0.2716208,0.2851963,0.22980438,-0.22686587],[0.0044000545,-0.21573843,-0.07105931,0.26565573,0.38492048,-0.6680098,1.1778332,-0.87731117,-0.20947257,-0.06640749,0.37599987,-0.25529432,0.014358948,0.2096504,0.005265327,-0.15837903,-0.03779916,0.04513996],[0.007100553,1.2550566,7.1150217,-0.43107417,-0.036019012,-0.31804258,-1.1444212,0.16977336,0.6080755,-0.29834473,-0.24948287,0.9989788,0.054998364,0.1742214,-1.2599926,0.17053154,0.40663227,0.12926742],[2.3231199,0.16382016,-0.0039322176,0.6659583,0.38590056,0.4255518,-0.53491396,-0.038882855,0.059910268,-0.08183135,0.11287891,-0.23418863,0.033189584,-0.24378267,-0.18320867,-0.231686,-0.18503504,0.1318578]],"activation":"σ"},{"dense_2_W":[[0.29945847,-0.4116662,-0.6404434,0.4817164,0.4524414,-0.32461753,-0.28166708],[-1.3570027,0.5354018,0.13801058,-1.1377261,-1.2545471,0.47778574,-0.6778595],[-0.53093123,0.3986449,0.514258,-0.44630268,-0.34877014,-0.09241833,0.015654555],[-0.33301157,0.015162718,-0.57307935,0.51319146,0.76107,-0.32635444,0.0483822],[0.4356511,-0.56064665,-0.60171497,0.31180757,0.058051504,-0.12626185,-0.16386817],[-0.49370843,1.3684434,0.6723376,0.47739267,-0.3493264,0.4534191,1.194232],[-0.6864368,-0.55467093,-0.28965995,0.21849571,-0.2885239,-0.4037181,-0.2568297],[-0.027406203,0.4347179,0.52915186,-0.7199698,-0.98106146,0.1689552,0.6664304],[0.53957736,-0.43386227,-0.17693467,-1.3255388,-0.7924073,-0.93818575,-0.79954004],[0.4243802,-0.7055154,-0.8640908,0.6045224,0.35185826,0.29153374,-0.043798342],[-0.18059891,-0.5451181,-0.31403798,0.29197556,0.48968676,-0.36734742,-0.6153273],[-0.21743168,0.0968663,-0.7951512,0.22858825,0.056076594,0.352806,-0.43122748],[-0.5219958,0.7666835,0.78582376,0.04805443,-0.69653535,-0.1948839,0.47690478]],"activation":"σ","dense_2_b":[[0.14940926],[-0.26764292],[-0.065943636],[-0.012099177],[0.020878451],[-0.037716556],[-0.27098712],[-0.24203163],[-0.3071356],[-0.19974586],[0.091521814],[-0.030127151],[0.011759832]]},{"dense_3_W":[[0.2272818,-0.7090007,-0.44646376,0.5245258,-0.11126927,0.06856284,-0.55245084,-0.03672042,-0.2831085,-0.26106173,-0.15778822,0.6185201,-0.25463623],[-0.6678536,0.27332652,0.32911164,-0.46993744,-0.57457846,0.51333696,-0.51108074,0.419496,-0.4008391,-0.28695276,-0.4039776,-0.2274611,0.65224385],[-0.4540261,-0.110272445,0.62588185,0.3793935,0.21624547,0.00488706,0.2968329,0.5401233,-0.0827374,-0.28764433,-0.7044611,-0.16364492,0.43638176]],"activation":"identity","dense_3_b":[[0.025508499],[-0.012451561],[-0.038591553]]},{"dense_4_W":[[-0.36511594,0.9680025,0.498792]],"dense_4_b":[[-0.017125914]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017 b'68288309AD'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017 b'68288309AD'.json new file mode 100755 index 0000000000..c10e99ad04 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017 b'68288309AD'.json @@ -0,0 +1 @@ +{"input_std":[[8.597233],[0.65757],[0.39041167],[0.03043365],[0.64351803],[0.6471017],[0.6502902],[0.6549102],[0.6508157],[0.6482903],[0.64279133],[0.03026653],[0.03030699],[0.030344505],[0.030493243],[0.030504394],[0.030502517],[0.030399079]],"model_test_loss":0.01550232619047165,"input_size":18,"current_date_and_time":"2023-08-05_12-03-26","input_mean":[[24.96868],[0.017203558],[0.004998304],[-0.016466307],[0.014747153],[0.015813118],[0.016414983],[0.015427833],[0.0135320425],[0.01846833],[0.02000356],[-0.016424928],[-0.016428037],[-0.016443778],[-0.016528388],[-0.01664044],[-0.016721481],[-0.017032597]],"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.11971746],[-1.0482128],[-1.290418],[1.6633401],[-0.09557239],[-0.15225793],[-1.3385328]],"dense_1_W":[[0.029821552,0.035007924,5.103129,-0.37369263,-0.89283395,-0.5466001,-1.1722021,0.012656213,2.3184931,0.7863226,-0.40544683,0.035955865,-0.05933657,-0.36182928,0.14284906,0.47995996,0.0033706422,-0.05209815],[-0.19044665,0.46416685,-0.0097643575,0.022599934,0.1270844,0.3457657,-0.6301875,0.13222663,0.3651115,-0.04052697,-0.097950056,0.36680222,-0.53108186,0.37180126,-0.26814926,-0.22918452,0.24378005,-0.03704089],[-0.8465522,-0.15320513,-0.2111905,-0.33488435,0.19261867,-0.35840833,0.37324944,0.059546437,-0.20470025,-0.08982175,0.30586445,0.101371676,-0.18726619,0.18133822,0.12725775,-0.01725966,0.3126423,-0.20531909],[0.33607936,0.10578455,-0.012572882,-0.17274776,-0.05706274,0.27834845,-0.03742849,0.37046883,0.18207937,0.15750422,-0.21119557,0.58034253,0.14551485,-0.19281861,-0.6219534,-0.07461531,0.12687907,0.13601732],[-0.0028057445,-0.130438,-0.00028447545,-0.2205653,-0.061741494,-0.76060104,0.43488175,0.2109757,0.20559938,0.036044482,-0.22720902,0.10089816,-0.075031996,0.35783985,-0.16343401,-0.207879,0.11746362,0.11620118],[-0.04128383,-0.4868478,0.11253476,0.52899015,0.35399616,-0.4295484,0.33201,-0.13990371,0.08484948,0.10046226,-0.107716724,-0.22875123,-0.03329333,-0.11531053,-0.070716955,-0.003677542,0.12015404,-0.13361935],[-0.84564525,-0.20329769,0.20679265,-0.17321548,-0.43559217,0.6301703,-0.17066625,0.18654998,0.05553996,0.11210628,-0.30537042,0.45863834,0.17521833,-0.08643193,-0.42064783,-0.15470168,-0.061689895,0.282349]],"activation":"σ"},{"dense_2_W":[[-0.2675255,-1.0888523,0.5519257,0.19295022,0.6083571,0.013318467,0.068802685],[-0.029764846,0.5881194,-0.5320143,0.56432325,-0.7338648,-0.6991274,0.78376025],[-0.24376978,0.97442836,-0.43990833,0.58720297,-1.1058803,-0.24998356,0.5523079],[0.37818435,-0.04477066,-0.6413349,0.7311632,-0.7551129,-0.66932064,0.80996406],[0.42194343,-0.55635,0.24982749,-0.08299721,-0.47013214,-0.32509625,0.34097055],[0.18750918,-0.48607266,0.018563168,-0.4435128,0.025003254,0.37226567,-0.5008819],[-0.690127,-0.061610896,0.52321345,-1.2141404,0.24980456,0.39222413,0.29739323],[0.12713604,0.8961836,-0.0420679,0.3697559,-0.66627675,-0.9004507,0.36056203],[-0.17872968,-0.5655011,0.31398085,-0.0073691937,0.8368489,-0.102135964,-0.098749965],[-0.25579226,-0.1895283,0.65268534,-0.032067355,0.88545084,-0.2616384,-0.73489314],[0.038353052,-0.6248039,-0.17452268,-0.3505884,0.6240491,0.117965795,-0.40689456],[0.11943678,0.85648805,-0.7428271,0.4420883,-0.14259496,0.047728933,0.06425332],[-0.37097242,-0.49184024,0.3623645,0.066325314,0.36482123,0.62196106,-0.6113287]],"activation":"σ","dense_2_b":[[0.015802983],[-0.010237919],[-0.12576309],[-0.016577639],[-0.0723307],[0.007504116],[-0.2507953],[-0.20577176],[0.01650445],[0.004272095],[0.07060706],[-0.113387175],[0.05941394]]},{"dense_3_W":[[-0.102179505,0.7396626,0.40349957,0.35000306,-0.14271958,-0.41911846,-0.75510114,-0.080605164,-0.25986177,0.05678764,-0.36452737,0.42877302,-0.3750224],[-0.2336813,-0.17504057,0.076827765,0.26307496,-0.2195151,-0.025769087,0.016375436,0.34215918,0.22750534,-0.33795378,-0.350775,0.46386904,0.27268404],[0.4288828,-0.7942581,-0.19615512,-0.62076753,-0.11076431,0.41423005,-0.07186949,-0.72240573,0.56579494,0.56211066,0.2636863,-0.4551915,0.2820574]],"activation":"identity","dense_3_b":[[-0.045709725],[-0.0753816],[0.058061324]]},{"dense_4_W":[[0.6145353,0.11919738,-0.88881034]],"dense_4_b":[[-0.05525869]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017.json new file mode 100755 index 0000000000..3f3339df3a --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.330973],[0.76358914],[0.44177866],[0.03320337],[0.7486537],[0.75224125],[0.7557512],[0.75438327],[0.7465672],[0.74091655],[0.72914463],[0.0329607],[0.03301792],[0.033070814],[0.03301661],[0.03287754],[0.032609064],[0.032365352]],"model_test_loss":0.017960982397198677,"input_size":18,"current_date_and_time":"2023-08-05_11-13-44","input_mean":[[26.671413],[0.058293253],[0.0043816683],[-0.009296047],[0.051497567],[0.053402483],[0.055134997],[0.052773204],[0.048979968],[0.049683023],[0.049251523],[-0.009440276],[-0.009414148],[-0.0093886675],[-0.009580273],[-0.009747584],[-0.0099527575],[-0.010216651]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.0565631],[-0.21411526],[0.8872178],[-0.73335165],[0.15017867],[-0.11148372],[-0.47569525]],"dense_1_W":[[0.3191545,0.60174775,0.28932345,-0.22362822,-0.29199237,0.8730365,-0.521551,0.33030298,0.11159445,0.13276689,-0.38501248,0.6321162,0.3564933,0.05880718,-0.9028309,-0.1717296,-0.26462427,0.5646279],[-0.023215095,-0.07631244,-6.183804,0.4336958,-0.626333,-0.124013826,0.87823963,0.39341283,-1.2711039,-0.14306393,0.85833305,-0.31328923,-0.0057761483,-0.45113772,-0.13151798,0.48965174,-0.36885157,0.3205572],[-2.0049603,0.2562212,0.0074997903,0.15363267,-0.39047363,0.31743163,0.21375915,-0.08397038,-0.018758992,-0.03530787,0.008622982,-0.12050882,0.1763159,-0.0045240982,0.037064075,-0.22826771,-0.13217667,0.04430793],[1.9245242,0.17275631,0.007043335,0.38269743,-0.0008547418,0.339189,-0.33623248,0.24801533,-0.05911935,-0.28433016,0.1669682,0.35657904,-0.114900894,-0.49049523,-0.009977193,-0.22768717,0.10655727,-0.07729294],[0.087077305,-0.6003964,-0.1793809,0.25290787,0.029625213,-0.19629402,0.31878904,-0.08061085,-0.21837004,0.20829839,0.08959171,-0.30037507,0.05254617,-0.03698672,0.101752795,0.042104118,-0.12350318,0.0102602765],[0.0048545175,-0.21292417,0.016375653,-0.053975366,0.13703452,-1.074619,0.58369935,-0.17510407,-0.09377952,-0.14615338,0.07890737,-0.15442717,0.22381516,0.0459976,0.11773441,-0.018902443,0.06373771,-0.104368865],[-0.09855327,-0.1122513,-0.37817958,-0.008812584,-0.5383468,0.15305355,-0.7411861,-0.4013825,0.30445403,0.2985024,-0.095201105,0.47804987,-0.17235969,-0.47166833,0.08742673,-0.13090365,0.016420232,0.102743514]],"activation":"σ"},{"dense_2_W":[[0.15356968,0.03880223,-0.0033031541,0.71969205,-0.5551066,-1.2770053,0.852479],[-0.5814842,-0.4205401,-0.44136125,-0.20208618,0.62991315,1.2533134,-0.07128404],[-0.85485667,-0.27133262,-0.18317062,-0.5872431,0.0009068991,-0.8143884,0.24185239],[0.485521,-0.12876768,0.13680507,0.5191915,-0.33198348,-1.0602576,0.5135775],[0.9131491,-0.41206366,-0.11229955,0.8287815,0.013217909,-0.9175312,0.48983303],[-0.20012985,-0.18931809,-0.43908978,-0.2832052,0.8635579,0.22567339,0.18861422],[0.018180205,-0.3399698,-0.79971874,0.03282556,-0.17152967,0.065363236,-0.11356214],[-0.90014875,0.04525059,-0.62574875,0.21017492,-0.2622857,-0.64767957,-0.17940037],[0.053192608,-0.6683769,0.5183324,0.3161827,-0.43558958,-0.7137959,0.50653154],[-0.084774315,0.02843045,0.11588221,0.48853788,-0.6368693,-0.9299525,0.7869719],[0.12993711,0.85281557,-0.52333623,0.47304502,0.3320428,0.84226716,-0.51683784],[-0.24643111,0.40814662,-0.45649922,0.021663502,0.7520966,0.5363597,-0.51477396],[-0.30198774,-1.0936731,0.5198244,-0.6298923,-0.47961158,-0.46270132,0.17015655]],"activation":"σ","dense_2_b":[[-0.030014591],[0.112632275],[-0.38837513],[-0.009132882],[0.32848948],[0.05313135],[-0.1084323],[-0.38779393],[-0.17182945],[-0.17182226],[0.08077316],[-0.009312498],[-0.20723443]]},{"dense_3_W":[[-0.7191352,0.82575274,-0.4208178,-0.42105228,-0.12746234,0.6060775,-0.36437324,0.011044404,-0.06605932,-0.23161481,-0.07892281,-0.2586107,0.22741254],[-0.03922699,0.28218865,-0.08608041,-0.49147275,-0.75184256,0.37435916,0.46016482,-0.0026176786,-0.28095058,-0.18674251,0.6548586,0.23019525,-0.66313064],[-0.70486027,0.67592573,0.31197107,-0.25772044,-0.32144958,0.59903663,-0.013240984,-0.097765416,-0.4100128,-0.39269626,0.3077929,0.50466055,-0.20290402]],"activation":"identity","dense_3_b":[[0.06820397],[0.04168449],[0.03600891]]},{"dense_4_W":[[-0.5796537,-0.81390715,-0.64433306]],"dense_4_b":[[-0.04506098]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2018 b'68288309AD'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2018 b'68288309AD'.json new file mode 100755 index 0000000000..02c740db16 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2018 b'68288309AD'.json @@ -0,0 +1 @@ +{"input_std":[[8.082215],[0.9560447],[0.410062],[0.042449385],[0.9435806],[0.9485456],[0.9529106],[0.93789405],[0.9226771],[0.9034362],[0.883721],[0.04244234],[0.04244558],[0.042444732],[0.042347185],[0.042244907],[0.04203911],[0.041821305]],"model_test_loss":0.015666939318180084,"input_size":18,"current_date_and_time":"2023-08-05_12-54-12","input_mean":[[25.45074],[0.0068904622],[-0.000671541],[-0.0010801569],[0.0104450565],[0.008953298],[0.0077940514],[0.010752567],[0.011151168],[0.013636157],[0.015005147],[-0.001118472],[-0.0011114934],[-0.0011069404],[-0.0010113739],[-0.0010170324],[-0.001066506],[-0.001190821]],"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.011303913],[-0.101262875],[0.56544256],[0.19651274],[0.02540219],[1.1908269],[-0.025591249]],"dense_1_W":[[0.03296629,-0.9849526,-0.019233003,0.26284894,0.30721006,-1.0549244,1.2970554,-0.45588621,-0.42953083,0.06103454,0.2431949,-0.9065374,0.36690086,0.2656691,0.35073105,0.49389052,0.051688332,-0.3485854],[-0.03754764,-0.49999028,-0.007074961,0.79917264,-0.36037976,-1.3411741,0.58469564,-0.23178867,-0.068214,-0.08796609,-0.065810174,-0.13842778,-0.5216702,-0.056535564,-0.13458252,-0.2092706,-0.31087565,0.35361972],[0.27463603,-0.381356,-0.012061922,-0.31239793,-0.053919703,-0.6916296,0.3541282,-0.15095334,-0.10328145,-0.0723153,0.042322796,0.11545691,0.21939,-0.17112115,0.07391443,0.072348714,-0.040974505,0.090883106],[0.064744584,0.17418511,-5.185299,0.5444673,0.9003128,0.6023629,1.193266,-0.46961012,-2.531239,-1.2398077,0.90796435,-0.18854257,0.029938832,0.16980654,-0.6187146,-0.35119575,0.58308375,0.098467305],[-0.9406685,-0.2624951,-0.027796533,0.20334917,-0.34153846,-0.1046165,-1.0237727,-0.11846653,-0.1513934,-0.28889307,0.1425305,-0.16230091,0.041497145,0.13115646,-0.4476718,-0.026639748,-0.115308225,0.2959161],[0.26337644,0.9059509,0.0142672965,0.11553737,-0.15986507,0.4649627,-0.57561105,0.28975698,0.2352414,0.12916806,-0.24250211,0.5852871,-0.28024945,-0.32947764,-0.29004428,0.07504865,-0.22164239,0.1658566],[0.8496862,0.06132964,-0.026063204,0.33203503,-0.71281123,0.53899145,-0.5046964,-1.0536666,-0.46766424,-0.0017764475,0.28805846,0.3337219,-0.00876953,-0.1794407,-0.8609011,0.06300348,-0.16952239,0.4276372]],"activation":"σ"},{"dense_2_W":[[0.5989996,0.28228945,0.24243695,0.30473667,0.09565392,0.039883718,-0.012167493],[-0.5965035,-0.5132559,-0.809263,-1.0380533,0.74597716,-0.19448324,-0.51433825],[-0.50900024,-0.6781642,-0.055860262,-0.07686463,0.5264645,0.64901555,0.37830654],[0.45566165,0.4638939,0.18080807,-0.37435606,0.34035242,-0.17389183,0.09466603],[0.25517422,-1.1810887,0.02548111,-2.524108,-0.26499692,2.612718,2.0904224],[-0.07452685,0.45176342,0.5291961,-0.22377542,0.35242108,-0.58295393,-0.43978348],[-0.64365584,-0.28436708,-0.5298343,-0.7013793,0.43208584,-0.31733987,0.3173478],[-0.7023152,-0.3866031,-0.5978307,-0.52242154,0.5038582,0.18732077,0.032031976],[0.4123047,0.50972766,0.4979604,-0.016046334,-0.44517237,-0.36656827,0.027112957],[-0.108008094,0.34119272,0.5035501,-0.27905923,-0.5105666,0.12349028,-0.39550483],[-1.6549016,-0.76342964,-0.9001871,0.484857,0.38083476,0.5935866,1.0620447],[-0.8487929,-0.73791504,-0.902351,-0.034185782,0.5050549,0.61939895,0.6907873],[0.555242,0.61760396,0.53889614,-0.2472908,-0.5995396,-0.14475305,-0.4659583]],"activation":"σ","dense_2_b":[[-0.037849087],[-0.0046516205],[-0.06366198],[0.015965618],[0.48888913],[0.04543125],[-0.052545607],[-0.00619908],[-0.047677517],[-0.02190815],[-0.068623856],[0.03490071],[-0.04638153]]},{"dense_3_W":[[0.59825534,-0.7146144,-0.55275774,0.16583651,-0.29240578,0.5159985,-0.39059043,-0.5139529,0.074755795,0.25480804,-0.6676097,-0.45776275,0.18318963],[0.25388056,-0.35969815,-0.34763938,0.38946125,-0.42040497,0.5035119,-0.014665137,-0.4923147,0.66271615,0.11658979,-0.08055782,-0.3412976,0.6100553],[-0.36014816,-0.29852802,0.31007996,0.45297718,-0.111436516,-0.08528401,0.3125368,-0.56639135,0.013241491,0.4247302,-0.6792052,-1.0650945,0.05410819]],"activation":"identity","dense_3_b":[[0.032773122],[0.016646186],[0.008999612]]},{"dense_4_W":[[-0.85478663,-0.68413824,-0.13936913]],"dense_4_b":[[-0.024688363]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2018.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2018.json new file mode 100755 index 0000000000..b3a029677d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.08229],[0.9560322],[0.4162128],[0.04234246],[0.944914],[0.9496715],[0.9534703],[0.93756986],[0.9214626],[0.9029512],[0.8827786],[0.042334676],[0.04232983],[0.042330787],[0.04222349],[0.042102575],[0.041963458],[0.041727293]],"model_test_loss":0.015212969854474068,"input_size":18,"current_date_and_time":"2023-08-05_12-28-56","input_mean":[[25.450489],[0.007018491],[0.0017526483],[-0.0012496245],[0.010258301],[0.00915797],[0.008296782],[0.009687563],[0.010408748],[0.012445741],[0.015780684],[-0.0012874664],[-0.0012762811],[-0.0012723668],[-0.0012203716],[-0.0012326657],[-0.001319404],[-0.0014248163]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.0474128],[-2.0153387],[0.3068582],[-0.005494932],[-0.8460963],[0.043121926],[0.34363338]],"dense_1_W":[[0.40921986,0.83686906,0.017928291,-0.14663637,0.03245214,0.9670171,-0.557215,0.053447653,0.19983685,0.14913826,-0.07026286,0.35218892,-0.1331316,-0.24948378,0.23776667,0.024677012,-0.18177196,0.081563935],[-0.4710796,1.0182377,0.025632562,0.25463507,0.15371,0.5884998,-0.50182223,0.27641,0.27793694,0.40336907,-0.31872264,-0.23831047,0.10746539,0.053897705,-0.08914807,0.09828412,-0.39313728,0.18685032],[0.9079908,-0.5044986,0.027937002,-0.09682488,0.6568831,-0.38266635,0.9817865,1.2524801,0.38089994,0.12696266,-0.30947885,-0.50164545,-0.23758912,0.010382648,0.9870671,0.36033058,-0.08208099,-0.4297762],[-0.0020627899,0.96122843,0.0019422979,-0.2890112,-0.19326063,0.67663735,-1.2096393,0.69867593,0.24395284,0.015038193,-0.2639015,0.23797843,-0.19254467,0.17160857,-0.3693636,-0.3780116,-0.1757647,0.36420926],[-0.035085507,0.022627689,-5.207178,0.662441,1.6342354,1.2160088,1.2780991,-1.1770558,-2.9736173,-1.1000638,0.7337506,-0.5362961,-0.29924804,0.33022583,-0.7002066,0.04807395,0.3741729,0.31349945],[-0.002872556,-0.54440963,-0.0055537154,0.1456208,-0.30050763,-1.4995376,0.9476729,-0.74908423,-0.28116608,0.15615615,-0.03335187,-0.0051539144,0.13452101,-0.20905544,0.25087494,-0.45868522,-0.40181822,0.4119573],[1.0714998,-0.38579407,-0.024760136,0.06929095,-0.7495878,-0.25940558,-0.19196063,-0.39601323,-0.32055146,-0.10028662,0.06978139,0.50141144,0.43209225,-0.3733558,-0.8468494,-0.051437717,-0.19248068,0.45854166]],"activation":"σ"},{"dense_2_W":[[1.0826005,-0.20854715,0.12272468,0.45186186,-0.33309188,-0.11777644,0.57938504],[-0.5927767,-0.28290668,0.62141377,-0.6324294,-0.03813597,0.25737914,-0.082683794],[0.16264565,-0.50887585,-0.4667856,0.048738178,-0.5574825,0.1486967,-0.059898414],[-0.73018765,-0.33298212,0.464258,-0.22951585,-0.19468288,0.58376384,-0.10449995],[-0.3376829,-0.015965454,-0.5374289,-0.1125972,0.20699061,0.46242332,-0.39699847],[-0.7966657,1.1282952,-1.2893173,0.0007569245,-3.1860337,-0.18262017,-0.9651093],[-0.3432437,0.15395725,0.49788675,-0.6686831,-0.3084999,0.4104962,-0.19762419],[-0.6902327,-0.03177878,-0.3615717,-0.1965282,0.21896532,0.31481862,-0.39253464],[0.06330853,0.59432584,-0.7664653,1.0718739,-0.22649164,-0.9899889,0.19520594],[0.60814977,0.26673782,-0.8529133,1.0040137,0.14190473,-1.0532364,0.009188715],[-0.6209684,-0.01673939,-0.322892,-0.14584474,0.1624394,0.21571153,-0.7087542],[-0.5637814,-0.47300205,-0.21020818,-0.21443935,0.19412827,0.17739315,-0.7089613],[0.77079105,0.29888508,-0.3602861,0.5112615,-0.24378149,-0.1931251,-0.20249362]],"activation":"σ","dense_2_b":[[-0.03581929],[-0.046200734],[-0.1481214],[-0.077726975],[-0.17219913],[0.35100186],[-0.07100971],[-0.14290616],[-0.059892148],[-0.38624978],[-0.13309816],[-0.087655105],[-0.046923585]]},{"dense_3_W":[[-0.57040024,0.40345442,0.19436547,0.42902845,0.120898366,-0.63833594,0.39891332,-0.13518181,-0.37702882,0.18261324,0.54879117,0.5178564,-0.069270305],[0.16411436,0.5797063,-0.04110642,0.032352872,0.10857908,0.12132189,0.4528278,0.5046357,-0.54672295,-0.514517,0.102962494,0.39607972,-0.62058264],[-0.04601366,0.16334765,-0.16627654,0.103514455,0.6421524,-1.1889938,0.9212643,0.16994889,-0.85712564,-1.0109627,0.3073874,0.13189326,-0.2665801]],"activation":"identity","dense_3_b":[[-0.081992626],[-0.0802459],[0.057288777]]},{"dense_4_W":[[-1.0061765,-0.9223554,-0.31279898]],"dense_4_b":[[0.07849179]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68416741AA'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68416741AA'.json new file mode 100755 index 0000000000..2cfe8d0c26 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68416741AA'.json @@ -0,0 +1 @@ +{"input_std":[[3.540884],[0.72527695],[0.45695683],[0.034991868],[0.709294],[0.71476114],[0.72185975],[0.7211512],[0.7235535],[0.7168181],[0.7078516],[0.034848806],[0.03490882],[0.034961533],[0.03501503],[0.03508182],[0.035303213],[0.035285834]],"model_test_loss":0.008240409195423126,"input_size":18,"current_date_and_time":"2023-08-05_13-46-44","input_mean":[[25.921837],[0.0125832055],[-0.01164115],[0.0026885534],[0.014492291],[0.0139633],[0.013493571],[0.008726519],[0.008531813],[0.009844244],[0.0044681607],[0.0026176367],[0.0026374457],[0.0026502886],[0.0027010296],[0.00267962],[0.0024883181],[0.0022550253]],"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.13672608],[-0.041571867],[1.2636456],[-0.065467335],[0.011800385],[-0.46202916],[-1.372556]],"dense_1_W":[[0.007422458,0.6754113,7.4073644,0.11848473,-2.1631336,-0.912065,-0.8724629,-0.2556371,3.0907576,1.412602,-0.8293619,0.79462373,0.14016043,0.24535954,-0.30560818,-0.57401854,-0.60158664,0.14450504],[-0.0018305334,0.09137483,0.0048553096,-0.18322048,-0.17445193,1.1315465,-0.99553066,0.20692046,-0.1573373,0.10723841,0.034833677,0.013222382,0.04913359,-0.063011676,0.080315255,0.007860034,-0.06869685,-0.10426123],[0.41642052,-0.43292236,-0.00016212527,-0.28172606,0.22388797,-0.5387432,0.5000487,-0.0662662,-0.19251756,-0.24930976,0.21399923,0.21182868,0.23792529,0.36422804,-0.12048849,-0.10356604,-0.18955365,0.20988986],[0.007196369,-0.40141714,0.004146293,0.24328095,0.08316568,-0.7725523,0.24712877,0.31170592,-0.2618485,0.3492374,-0.23321508,-0.5998228,0.054245714,0.05656959,0.42039597,0.29605547,-0.16332126,-0.25805196],[-0.0066868253,0.24793896,-0.9155987,-0.22574951,0.2279949,-0.75932324,0.5498709,-0.50319123,-0.25042525,-0.16740315,0.9464338,-0.6654067,-0.46457547,-0.62106884,0.38022646,0.66043746,0.57050747,-0.051786408],[-0.013603165,-0.7850666,0.22816952,-0.94007343,0.6314619,-1.1180922,0.9316161,0.71419287,1.565776,0.82271457,-0.6743947,-0.03324018,-0.22406328,0.11753971,-0.86198115,-0.7191324,-1.2573929,-1.3663477],[-0.39971876,-0.90275395,-0.002747763,0.3259772,0.053136084,-0.1129504,0.67844796,-0.12035228,-0.111051224,-0.23912819,0.22313052,0.015122417,-0.042040545,0.31138957,-0.21768394,-0.19387904,0.17800824,-0.058540124]],"activation":"σ"},{"dense_2_W":[[-0.2712744,-0.27548417,-0.24589045,-0.94929534,0.056101516,0.37687665,-0.34930152],[0.12890357,0.107452646,0.05273279,-0.2842241,-0.26417354,-0.36303985,-0.88106096],[0.10812536,0.8229097,-0.48439428,-0.6146967,0.30271894,-0.47587743,-0.72306526],[-0.2970765,-0.9954584,0.8347318,0.28984168,0.22221072,-0.08318426,0.5174111],[0.022121632,-0.9320088,-0.13187025,0.84971243,0.11638838,-0.18265942,0.6944859],[-0.81018156,-1.4140185,0.0050559104,0.8047088,0.112945594,0.11903153,1.4750458],[-0.10029377,0.79245657,-0.129312,-0.96144485,-0.14801987,-0.19154973,-0.27617636],[-0.42813414,-1.1076767,0.41040602,0.6022723,0.2166483,0.101234265,0.25476956],[-0.2616646,0.06810875,-0.2897757,-0.34468642,0.19396816,-0.23995267,0.042478308],[0.064412996,0.088728696,-0.83973736,0.046822183,-0.044361882,-0.2079744,-0.5540397],[-0.9322635,-0.08910884,2.045478,0.7023676,0.27462402,-0.3360689,-0.5251471],[-0.82763696,0.09217775,-0.5712728,-0.1493765,0.17474991,-0.029826907,-0.55813324],[-0.30443445,-0.47327244,-0.5111389,-0.45714694,0.37277365,0.38366705,0.1959204]],"activation":"σ","dense_2_b":[[0.08118501],[0.07975673],[0.11642572],[-0.2567934],[-0.4266919],[-0.5458668],[0.18571955],[-0.08934562],[-0.29633301],[0.13670655],[0.07141965],[-0.30583197],[-0.0840992]]},{"dense_3_W":[[-0.5074871,-0.28185704,0.4593259,0.47745362,-0.44245535,0.07299903,-0.67817503,0.13860504,0.30813742,0.42423633,-0.060915153,-0.56996584,-0.0628069],[-0.63610864,-0.52725506,-0.59844047,0.43560866,0.6619392,0.40266907,-0.7854964,0.7018912,-0.12779734,-0.56247413,0.6380423,0.3426679,0.12550351],[-0.22990963,-0.22485729,0.11532963,0.1304727,0.34375438,0.09126867,-0.44410926,0.5529583,-0.08919587,-0.62609166,-0.042024292,-0.44053796,-0.45395342]],"activation":"identity","dense_3_b":[[-0.029381804],[-0.053650945],[-0.030720724]]},{"dense_4_W":[[-0.4063532,-1.1326009,-0.48396984]],"dense_4_b":[[0.045191046]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68460392AA'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68460392AA'.json new file mode 100755 index 0000000000..6db2a51340 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68460392AA'.json @@ -0,0 +1 @@ +{"input_std":[[6.110466],[1.1166294],[0.4333575],[0.04491246],[1.101045],[1.106509],[1.1112565],[1.0918282],[1.0688635],[1.0413644],[1.0151801],[0.044668887],[0.044713814],[0.04475609],[0.044801924],[0.04479171],[0.044668294],[0.04430072]],"model_test_loss":0.020542951300740242,"input_size":18,"current_date_and_time":"2023-08-05_14-14-04","input_mean":[[28.738178],[0.04136104],[-0.0026099419],[-0.0051334198],[0.044128302],[0.043093566],[0.041869074],[0.042427693],[0.046236813],[0.04548593],[0.042877004],[-0.005089196],[-0.005111265],[-0.0051377458],[-0.005226521],[-0.005262634],[-0.00543846],[-0.0057465434]],"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.037278734],[-0.079774134],[-0.8162887],[-0.31243566],[-0.22615224],[-0.8256233],[1.4499795]],"dense_1_W":[[-0.005449315,0.35854638,-0.0047398233,-0.1440494,-0.512616,0.7778192,-0.398415,0.0010072874,-0.5800812,-0.10013973,0.26047555,0.16202927,-0.008031342,-0.13875856,-0.22610746,-0.6603844,-0.10960839,0.40812218],[-0.051943477,-0.26004118,4.607082,-0.12921393,-1.9564761,-0.83791864,-1.289598,0.3517151,3.87916,1.1050774,-0.77605593,0.896561,0.58562213,-0.5287581,0.122337416,-0.44951877,-0.40622,-0.16376685],[-0.16226001,0.83511513,0.009577342,-0.011364819,0.009493924,0.34977683,-0.5710836,0.20358273,-0.047720235,0.21904317,-0.13963147,0.61891454,0.1469637,-0.6860567,-0.14435394,0.13068855,-0.094664365,0.1009682],[-0.0026090448,-0.75837827,0.00792941,-0.042877182,0.24020967,-0.6194338,0.44166493,0.017847896,-0.3192753,-0.4271276,0.41098025,-0.60054016,0.18626004,0.17326199,0.068281084,0.23828898,0.28316006,-0.3320513],[0.027624318,-0.76117027,0.0054043583,0.33760962,0.116977885,-0.9307711,1.0756055,-0.2172874,-0.21198179,0.080145285,0.04210036,-0.51823384,-0.11447423,0.13206464,0.51927197,0.14165966,-0.1777355,-0.111683],[-0.12876868,-0.7229542,-0.0074477443,0.16747089,0.050191335,-0.50053203,0.59926206,-0.26795742,0.048716802,0.004515228,-0.00087909383,-0.8720959,0.3561962,0.41411182,0.0037264847,-0.26657674,0.36355504,-0.20191583],[1.5456613,0.3672433,2.1607227,0.15501712,-1.0307076,-0.12250712,-0.5461449,-0.012928717,-0.08450569,-0.32112712,-0.7111483,0.63424677,-0.07049318,-0.2134942,0.5441593,0.11881617,0.13171925,0.11188784]],"activation":"σ"},{"dense_2_W":[[0.4314676,0.43680868,-0.33696127,-0.17014731,-0.05842231,-0.7266061,-0.5114572],[0.15322033,0.046555553,-0.43650016,0.8490571,0.8243241,0.27194533,0.093695216],[0.61560154,-0.12009854,0.3021778,-0.2980031,-0.6986972,-0.52874625,0.2868508],[-0.20433629,0.17755696,-0.016080111,0.48249146,-0.24425584,0.93740374,0.18655425],[-0.00067611254,-0.5348082,-0.04893072,0.16420071,0.84226584,0.48445752,-0.53488594],[0.5304203,-0.052413676,0.84903955,-0.7850803,-0.39337084,-0.48024574,0.22300348],[-0.40384635,-0.2198121,-0.9246295,0.21698718,0.013713661,0.33346254,-0.16243497],[-0.21693845,-0.5599039,0.16844617,0.33478138,-0.2944021,0.2285425,-0.45965782],[0.65655226,0.5756963,0.40696257,-0.87685615,-0.025619268,-0.60703444,0.34351036],[0.4858341,0.5645004,0.280065,-0.61226463,-0.070656925,-0.8439244,-0.4341403],[-0.5802423,-0.2585727,-0.5184978,0.41481337,0.55786633,0.19180918,0.27964547],[-0.1608777,-0.050595388,-0.75230426,0.0011275461,0.055260886,-0.035873853,0.49184152],[-0.052665144,-0.035036366,0.5804482,-0.8756545,-0.8726204,-0.6846766,0.07926964]],"activation":"σ","dense_2_b":[[-0.19394487],[-0.10838762],[-0.07325213],[-0.033972114],[-0.0065951333],[-0.2264441],[-0.26640517],[-0.066091046],[-0.1312786],[0.049138386],[-0.10959771],[-0.018617028],[0.049152326]]},{"dense_3_W":[[0.5829933,0.53154945,-0.6436874,0.26961514,0.2114049,0.48927963,-0.077363156,-0.117650375,-0.07863482,-0.42213118,-0.025127105,0.1802662,-0.78018814],[0.1384695,-0.57305473,0.30702972,-0.31226707,-0.617097,0.32141355,-0.5152638,-0.5388638,0.6503955,0.7239906,-0.5044503,-0.32009524,0.49322724],[-0.43255872,-0.18591267,-0.57748216,0.21049492,0.18677677,-0.35376894,-0.43073297,-0.34409273,-0.587622,-0.17651634,0.07379629,0.51700467,-0.6392041]],"activation":"identity","dense_3_b":[[0.030356286],[-0.044458546],[0.07339491]]},{"dense_4_W":[[-0.28381646,0.84335744,-0.5880341]],"dense_4_b":[[-0.055418875]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68525339AA'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68525339AA'.json new file mode 100755 index 0000000000..b944ebfeaf --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68525339AA'.json @@ -0,0 +1 @@ +{"input_std":[[5.7788153],[0.86318105],[0.45887572],[0.03240975],[0.84916407],[0.85424227],[0.8574619],[0.8389892],[0.81995696],[0.7941099],[0.7717739],[0.032342657],[0.03233888],[0.032331638],[0.03231616],[0.03229451],[0.032231897],[0.032137062]],"model_test_loss":0.026132144033908844,"input_size":18,"current_date_and_time":"2023-08-05_14-38-55","input_mean":[[28.931513],[0.014174745],[-0.00050709123],[-0.013757554],[0.015852991],[0.01568708],[0.0151331145],[0.015902033],[0.014520537],[0.010255078],[0.009157378],[-0.013667275],[-0.013699755],[-0.01373048],[-0.013899637],[-0.014020047],[-0.014123588],[-0.014132852]],"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.0011439975],[0.08114154],[-0.047111176],[-0.00014506892],[-0.058797296],[0.008746821],[-0.112746514]],"dense_1_W":[[0.0036827116,-0.85230404,0.9694389,-0.6527038,0.10460156,0.8590413,0.14416954,0.9132283,0.17232226,0.01029374,-0.95463884,0.84203064,-0.34578338,0.032106902,-0.14620203,0.13692686,0.3113949,-0.13478504],[-7.447542e-5,0.9491887,-0.04109987,0.040202092,0.2734764,1.0008796,-0.82018507,-0.34369794,-0.270975,0.00058271387,0.25813425,-0.29383036,0.18492047,-0.31528273,0.09403308,0.24762149,0.21983506,-0.28232306],[0.0005957179,-1.5132132,-0.064817086,0.1532922,0.5894306,-0.46862274,0.68522537,0.05819377,0.22867863,0.007096001,0.020394647,-0.46124545,0.3289496,-0.03179155,0.22535956,-0.1858501,0.12605724,-0.11331306],[0.0037144264,0.17526588,0.8997809,0.13560319,0.7582112,0.3016461,1.6678429,-1.3722198,-1.1396137,-0.3491821,0.39440334,-0.2175496,-0.17992109,0.026779918,-0.19932391,0.65749645,0.42792454,-0.59700435],[-0.004916627,-0.86949986,-3.1472104,-0.046245735,0.58949816,0.13029447,0.49943313,0.119921446,-1.1917382,-1.7929658,-0.74677783,-0.51036227,0.06405667,0.093736,0.075880684,0.12603562,0.5108349,0.052058537],[0.0023457597,-0.664783,4.946816,0.81403846,-2.2644951,-2.0607138,-1.7517816,0.28588998,3.9568594,2.7328053,-0.2896687,0.79322964,0.75960326,-0.25073573,-0.5724614,-0.71555763,-1.2048925,0.40946966],[-0.0023486963,-0.7795025,0.021107612,-0.08805968,-0.32326528,-0.68839264,0.9240335,0.4994968,-0.023836527,0.175137,-0.34672633,-0.34674078,0.32279867,0.05844317,-0.023075575,0.37232506,-0.09687563,-0.12452232]],"activation":"σ"},{"dense_2_W":[[-0.37854546,0.34903055,-0.4462544,0.11327805,-0.24875195,0.35234123,-0.5626592],[0.42957336,0.53799313,-0.06286047,-0.31929597,0.14332363,0.52426404,-0.65911615],[-0.15604308,0.447812,-0.58008,0.051283363,-0.40378952,0.24825498,-0.20840329],[-0.3440618,-0.9011778,1.4646084,0.38501295,-0.4189048,-0.5722096,0.6253895],[-0.36881042,0.15492533,-0.12835744,-0.13917302,-0.41941592,-0.064528316,-0.024679296],[-0.3952051,-0.19353123,0.42472473,0.25226733,0.36719245,0.15404089,0.17196153],[0.046834674,0.48506153,-0.014719895,-0.01911938,-0.5700787,0.12933014,0.3826227],[0.5885063,0.33175373,-0.5520266,0.16487138,0.027746325,0.20234767,-0.6893546],[-0.24454424,-0.71767586,-0.108539544,0.74538267,-0.101703376,0.06964665,-0.1827993],[-0.8758459,-0.6128819,1.5650461,0.45312274,-0.5894857,-0.4010452,0.24010707],[-0.3640231,-0.295227,0.009693909,0.32785308,-0.42453107,0.5494616,-0.3201437],[0.6608706,-0.08454871,-0.5333993,-0.6653004,-0.021712486,0.63731277,-0.43692258],[-0.34482664,-1.5146594,1.5212393,0.5039458,-0.98475206,0.15418348,1.4046031]],"activation":"σ","dense_2_b":[[-0.012626887],[-0.060023643],[0.050328624],[-0.15241708],[0.002586862],[-0.0811935],[-0.032516863],[-0.047326654],[-0.04986636],[-0.058775026],[-0.035809994],[0.05208208],[-0.15562724]]},{"dense_3_W":[[0.6006235,-0.2893421,-0.28629094,0.28537595,0.56650835,-0.51059633,0.07124142,0.10285289,-0.06570319,0.27793735,-0.042230252,0.327788,-0.6483426],[0.23293988,-0.25339293,0.4200759,-0.49375746,0.0040358165,-0.6081097,-0.108511046,0.4325967,-0.2370615,-0.4646658,0.5137965,0.62279403,0.19901751],[0.46578276,-0.67444813,-0.6492283,0.40810102,0.13862292,0.4688345,-0.19089985,-0.38935006,0.5318019,0.25233418,0.2683579,-0.5857107,0.32623842]],"activation":"identity","dense_3_b":[[0.028790487],[0.028534047],[-0.03063328]]},{"dense_4_W":[[0.7596348,0.72767824,-1.0551875]],"dense_4_b":[[0.031701148]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68525339AB'.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68525339AB'.json new file mode 100755 index 0000000000..7e10555ddb --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019 b'68525339AB'.json @@ -0,0 +1 @@ +{"input_std":[[4.7539926],[0.93529695],[0.4818552],[0.038544405],[0.9241015],[0.9277656],[0.93047893],[0.92769974],[0.9196844],[0.90819216],[0.8909238],[0.038282566],[0.03835162],[0.03842366],[0.03860774],[0.038648367],[0.038378567],[0.037988614]],"model_test_loss":0.01552480086684227,"input_size":18,"current_date_and_time":"2023-08-05_15-05-03","input_mean":[[28.271704],[-0.018472683],[0.008247399],[-0.011640539],[-0.016549714],[-0.016534679],[-0.015966991],[-0.012970649],[-0.013244884],[-0.021792166],[-0.030313933],[-0.0117374305],[-0.011689001],[-0.011635759],[-0.011480733],[-0.011386347],[-0.011478815],[-0.011520906]],"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.16247147],[-1.9445274],[0.015820462],[0.1109649],[0.18606652],[0.14743169],[-0.25301546]],"dense_1_W":[[0.033168066,-0.87919986,-6.0003424,-0.11847333,0.23891214,-0.017026797,0.21457405,0.06397584,-1.1299858,0.119912185,1.2341022,-0.718399,-0.26759303,-0.5534113,1.0412015,0.43450904,0.20104626,-0.084277354],[0.6811516,-0.121241845,-0.015429761,-0.15817125,0.8674318,0.3464547,0.028172173,0.14950341,0.32529193,-0.21055248,0.17845789,0.92391425,-0.07065611,-0.065732196,-0.22456542,-0.7568571,-0.347454,-0.64657813],[0.060744118,-0.73202413,-0.012868376,0.4323286,0.18275686,-0.9485156,0.8238945,-0.10487157,-0.10203484,0.05330652,0.008031068,-0.023272691,-0.24555291,-0.039335933,0.06328203,0.17615116,-0.27155656,0.016184507],[-0.022168336,-0.4993914,4.419826,0.3107063,-2.6004608,-1.7346139,-1.8055027,-0.15056731,3.5626802,3.1007571,0.50810057,0.7390148,0.39296082,-0.6219894,-0.9289591,0.29771698,-0.002542225,-0.38791353],[0.07870597,0.8395529,0.013242184,-0.37794262,-0.2873907,0.75163865,-0.4381639,-0.17677695,0.047819123,0.007587919,0.010396626,0.38303232,0.201019,-0.5262356,0.27791938,-0.081237584,-0.17390475,0.19786458],[0.25589576,0.27254564,0.0028974493,0.337075,-0.32846543,0.07265917,-1.2584563,-0.101628564,0.20059124,-0.32358432,0.050918363,-0.031572163,0.28416264,-0.78280866,0.062558874,-0.11689831,0.5253208,0.8678441],[0.16486502,-0.6348946,-0.0078088874,0.20368655,-0.37894782,-0.3180483,0.77805275,-0.105039515,-0.10222425,-0.17470093,0.12180855,-0.6105949,-0.108344056,0.27209398,0.18639357,0.055669807,0.4774451,0.18108374]],"activation":"σ"},{"dense_2_W":[[-0.5479722,0.51978314,-0.3325378,0.7052226,0.82599765,0.20821774,-0.5566406],[-0.47786564,-0.5044051,1.2295787,0.34785864,-0.5027773,-0.53672224,0.4329206],[0.3557253,0.010534457,0.42732254,-0.4092949,-0.46742332,-0.6942757,0.48867208],[-0.70371103,-0.37598246,-0.64199096,0.5582689,0.3377767,-0.16154085,-0.6031509],[0.28246686,-0.18254404,-1.0761517,-0.44560048,1.0163425,0.6645717,-0.7254034],[0.038954254,-0.6713239,-1.047652,0.3876244,0.296178,-0.048443664,-0.5365625],[0.15319476,0.32095867,0.7348781,-0.05432626,0.10117875,-0.50145245,0.5931825],[0.23199868,-0.5129736,-0.18174349,-0.5271858,-0.4329709,-0.0027121021,-0.46761963],[0.1928321,0.30944964,-0.6179093,0.20904343,0.51145256,0.19034328,-0.9151516],[-0.14230113,0.5926942,-0.46564186,-0.1299676,0.29295698,-0.15119109,-0.7302749],[-0.27700615,-0.49345413,0.12770167,0.36850908,-0.8730177,0.26205686,0.66320413],[-0.47383484,-0.05481399,0.00739117,-0.33691958,-0.48928645,-0.14246316,-0.07991372],[-0.24223731,0.29117322,-0.2750107,0.42836645,0.5076202,0.4529231,-0.034581553]],"activation":"σ","dense_2_b":[[-0.011054851],[0.11898975],[0.016430143],[-0.121288925],[0.033908624],[-0.1270793],[0.024081398],[-0.03873727],[-0.03128879],[0.0043782927],[-0.054906446],[-0.03501189],[-0.075150594]]},{"dense_3_W":[[-0.5973777,0.6543564,0.6513368,-0.6236035,-0.6703424,-0.5459989,0.5743272,0.303027,-0.17172754,-0.5232033,0.20740275,0.17208031,-0.37048194],[0.17000821,0.15035313,0.15856911,0.34882855,0.46245342,0.4996729,-0.02127124,-0.097889625,-0.309891,-0.5858313,-0.07663794,0.36841103,-0.12395392],[-0.1960993,0.25925174,0.46165013,0.112479284,-0.15205826,0.03679703,0.6391964,0.15686889,-0.34719947,0.024827098,0.5550302,-0.29560098,-0.13534045]],"activation":"identity","dense_3_b":[[0.06578365],[-0.039697763],[0.035733122]]},{"dense_4_W":[[-1.3297648,-0.00095071405,-0.35285485]],"dense_4_b":[[-0.06175809]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019.json b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019.json new file mode 100755 index 0000000000..e00c5807e6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/CHRYSLER PACIFICA HYBRID 2019.json @@ -0,0 +1 @@ +{"input_std":[[6.150079],[1.133713],[0.43403986],[0.044542935],[1.116597],[1.1228739],[1.1282343],[1.1087918],[1.0829574],[1.0503302],[1.0201406],[0.044353947],[0.04440376],[0.04444536],[0.044435233],[0.044352584],[0.04415751],[0.04374931]],"model_test_loss":0.021649373695254326,"input_size":18,"current_date_and_time":"2023-08-05_13-22-16","input_mean":[[28.718779],[0.027420705],[-0.0010486431],[-0.006476941],[0.03194379],[0.030714247],[0.029522395],[0.031175172],[0.03329464],[0.03204752],[0.030367676],[-0.006409366],[-0.0064388723],[-0.0064642774],[-0.006523428],[-0.0065177125],[-0.006653054],[-0.0068931]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.1557553],[0.15239237],[-0.7883996],[0.21607175],[-0.10778271],[-0.110362194],[-0.0008402114]],"dense_1_W":[[-0.39730522,-1.2665217,-0.018751338,-0.36011004,0.06413814,0.13557298,0.675142,-0.58107,-0.71815616,-0.67207223,0.8874161,-0.21224383,0.3109732,0.11582158,-0.10825705,0.20035155,0.13655844,-0.11123461],[0.08248368,-0.9288284,0.006650333,-0.3600497,0.048258215,-0.4385164,0.7812643,-0.36598027,-0.17953908,0.0043003927,0.14774609,-0.2284627,-0.15616533,0.35386756,0.5318769,0.081253365,-0.030911509,-0.12792926],[-0.012793936,-0.95197654,0.0013175827,0.4850853,0.06403457,-0.60757506,1.0891476,-0.15639184,-0.07080147,-0.141186,0.14856425,-0.6297083,-0.09511309,0.13792045,-0.003489132,0.39871147,0.23734719,-0.41034752],[0.036720853,-1.1706092,-0.0117205065,0.22939475,0.06332086,-0.27194244,0.6138069,0.0057003004,-0.23597574,-0.20802614,0.23779614,-0.2707945,-0.065516055,0.16179438,-0.1341947,0.014489582,0.27160132,-0.19034316],[-0.017165367,-0.31984007,-5.1292553,-0.09900438,1.891005,1.522304,1.3964776,-0.27762464,-3.1030765,-1.4986553,0.23631042,-0.58467907,-0.44058293,0.4239101,-0.07130837,0.06697376,0.22419664,0.49982306],[-0.029110994,-0.78375465,0.030992711,0.09522315,-0.32218152,-0.18287186,0.20446928,0.2509469,-0.32046452,-0.69563234,0.43957192,-0.2393486,0.0034883572,0.3692833,-0.1480584,-0.21708085,-0.04099675,0.16072796],[0.011984756,0.4372055,0.00038938643,-0.3804347,-0.14191024,0.83822465,-0.75622463,0.1774374,-0.15122366,-0.08789587,0.1162553,0.36315253,0.019167189,-0.015732778,-0.21518882,-0.17138954,-0.06687768,0.16531232]],"activation":"σ"},{"dense_2_W":[[-0.66123444,0.053167176,-0.67734295,-0.43834037,0.30200854,-0.6062845,0.49393648],[-0.5499434,-0.5910183,-0.04735582,-0.9205705,0.29150906,0.18296994,0.49427703],[-0.3087813,-0.6735604,0.1032743,-0.7492757,-0.47998416,0.38746807,-0.3792903],[0.22218491,-0.37423322,-0.68595016,-0.3057585,-0.67376715,0.18519343,0.26224977],[0.12493204,-0.6740838,-0.48158708,-0.11590075,-0.6646322,0.3766876,0.5211831],[0.033400588,-0.37467673,0.13653982,-0.7425377,-0.58915126,-0.44702393,0.15368707],[-0.03525442,0.6467697,0.27980375,0.53180575,0.5175674,-0.2184231,-1.3612056],[-0.26941165,0.034494866,0.54393685,0.823304,0.91855395,-0.5912671,-0.16972241],[0.5912191,0.50708044,0.8906907,0.4043412,-0.6052221,0.9453074,-0.9854745],[-0.1847966,0.29045746,-0.35760128,0.2358291,0.08363469,-0.28862038,-0.6393691],[0.082734466,-0.20940094,0.1263725,-0.61631376,-0.29357114,-0.22268835,0.48448983],[0.008772746,-0.3295119,-0.77102983,-0.37905028,0.1420826,0.19744958,0.12742513],[-0.34957173,-0.4635609,-0.6658351,-0.074581586,-0.137647,-0.031496365,0.17163728]],"activation":"σ","dense_2_b":[[-0.011190517],[-0.11420608],[-0.11911637],[-0.047058385],[-0.05209559],[-0.0067813573],[-0.6960103],[-0.2218484],[-0.638528],[-0.1287715],[-0.13393182],[-0.13222918],[-0.08612358]]},{"dense_3_W":[[-0.56854904,-0.004440354,0.20522526,-0.5189793,-0.5598319,0.004857475,0.7723675,0.08466752,0.3211879,0.22073807,-0.50451374,0.14052922,-0.15547366],[0.4760816,0.49406376,0.28560668,-0.27424216,0.0395443,0.63189626,-0.5996514,-0.59683996,-0.2216528,0.065270856,-0.40737736,0.13047104,-0.32319623],[0.35351506,0.5386659,0.32769755,0.12265874,0.56839216,0.5655456,-0.034122158,-0.18965866,-0.329834,0.10452169,-0.11418242,0.32698897,0.31875592]],"activation":"identity","dense_3_b":[[0.17258255],[-0.16791473],[-0.16998908]]},{"dense_4_W":[[-0.9664698,0.46322697,0.7462367]],"dense_4_b":[[-0.17601651]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GENESIS (DH).json b/selfdrive/car/torque_data/lat_models/GENESIS (DH).json new file mode 100755 index 0000000000..e80fc2aa96 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GENESIS (DH).json @@ -0,0 +1 @@ +{"test_dict":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.2699708,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.44897613,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.27972165,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.6288122,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.009419857,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.29464614,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.8718414,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.16241446,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.23373634,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5460306,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.18178429,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.2661167,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.25971827,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8656753,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.65435606,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.16348448,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.23745517,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.55276626,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.005459955,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.57930475,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.6679626,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6516425,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.48749548,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.16435784,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.6784933,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.6372965,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.19476463,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.66950613,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.5756492,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.26849964,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.35364658,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8425623,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.29070386,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.84755886,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.70718986,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.025362803,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.14202757,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.46855992,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.2911558,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6686591,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.29949942,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.46808085,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.019595843,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.68658686,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5766193,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.7178196,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.0318396,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.29348856,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.6638601,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6627258,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.07437267,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.6055348,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.23798963,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.17592952,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.01030465,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.7545617,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.18164062,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.16152,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8436983,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9237289,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.19309354,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.19966654,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.48542765,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.1542686,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.011308879,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.95253545,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.92795116,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.1619431,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.21448861,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.30357608,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.17162016,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9254877,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.61486626,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.2479979,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.72604245,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.6708805,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.35719714,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.0061618295,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.8119934,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.4702388,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.830137},"input_std":[[8.253246],[1.2265166],[0.8396968],[0.03495619],[1.1769793],[1.1944457],[1.2117249],[1.2462167],[1.2448307],[1.2171412],[1.172086],[0.035094533],[0.035049263],[0.034998577],[0.034752842],[0.034525692],[0.034230117],[0.03413073]],"model_test_loss":0.003963234834372997,"input_size":18,"current_date_and_time":"2023-07-16_12-10-58","input_mean":[[24.465681],[0.14132848],[0.343076],[0.019675385],[0.10810958],[0.11891723],[0.12978078],[0.16952017],[0.17916267],[0.17290013],[0.1463772],[0.019302443],[0.019420939],[0.019535815],[0.01998929],[0.020338312],[0.020922989],[0.02162974]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"test_dict_zero_bias":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.23143637,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.4652263,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.35620037,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.72915876,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.033811964,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2459415,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.93224394,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.19291008,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.20748353,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5995451,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.11259879,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.31002465,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.34267417,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.84346217,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.67134356,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2411822,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.2577998,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5963392,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.030760199,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.61936307,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7194478,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6834684,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.4523713,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.23015223,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.6842142,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.62436,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.16453701,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.71494484,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.62495947,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.20527135,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.37316445,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.95322937,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.24505597,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.8992404,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7107156,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.023601279,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.12803368,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.4761059,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.34226668,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.66734576,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2568946,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5198489,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.039260928,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.6992957,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.57003254,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.7749707,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.06198548,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.3452634,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.6636515,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6915985,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.027520018,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.6457659,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.27366233,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.20291242,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.03861127,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.8053802,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.23112899,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.13886195,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8606299,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.97973317,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.16530247,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2352428,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.510034,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.15056436,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.02322955,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0131809,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.93524235,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.20059028,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.2240225,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2621489,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.13601273,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.90459216,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.6621921,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.2747507,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.83059245,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.6849924,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.43381947,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.043959964,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.7887305,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.5149402,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8446559},"layers":[{"dense_1_b":[[-0.06827587],[-0.028500285],[-0.25173208],[-0.07750105],[-0.2940142],[0.6922563],[0.8121905],[0.7862803],[0.045949236],[-0.752093],[0.0956208],[-0.07192505]],"dense_1_W":[[0.9860141,0.06856981,0.16649614,0.34863472,-0.4680053,-0.5291158,0.22607322,-0.44315264,0.38767982,0.095361136,-0.04150002,-0.23525304,-0.02514362,0.030176405,-0.124883376,0.21063851,0.24710408,-0.0042801024],[0.7650095,0.40897316,0.15986899,-0.41831535,0.20153247,0.535765,0.31352526,-0.11838379,0.07478691,0.30549064,-0.25162768,-0.5103203,-0.74696344,-0.36560678,0.2748608,0.26366073,0.6311933,0.713333],[-0.13126527,-0.39487827,-0.13285579,-0.5997767,-0.07298161,-0.73874617,0.102481976,-0.4895145,0.20335777,-0.06410841,0.16459773,-0.49094355,0.15613374,0.11448425,0.020741098,0.16492575,0.4202937,0.23035619],[0.21678914,0.28709143,0.31667808,0.38460296,0.2784755,-0.118180774,0.23113173,0.31613338,-0.14956291,-0.21667449,-0.32722402,-0.27772832,-0.49006936,0.2742082,0.011245524,-0.43906662,0.3694417,0.1636142],[-0.49277544,-0.32197058,-0.020395037,-0.17285073,-1.8189527,-1.3681763,-0.9464799,2.308432,2.1192882,0.9617323,-0.55478024,0.17136998,0.28032053,-0.1915387,-0.2276642,0.34017745,-0.0736793,-0.046107627],[0.9547897,-0.1796725,0.08065475,0.2715653,0.6025838,0.07301243,0.63076055,-1.0844946,0.0689092,-0.19870193,-0.028648961,0.3244974,0.11944415,0.042525414,-0.11440154,-0.070732705,-0.13264629,-0.3839806],[0.4166084,-0.22970842,0.03894506,0.27970275,-1.6061078,-0.7616155,-1.0644445,2.3107653,1.3266898,0.7445326,-0.42004168,0.32592276,-0.5272901,-0.058386777,-0.011751664,-0.24185024,0.2550218,0.037888173],[1.227693,-0.08679133,-0.058664244,-0.32752186,-0.33977526,-0.44716588,0.1074168,1.2112535,0.38789093,-0.5875413,-0.13212678,-0.48916072,-0.5090327,0.048765358,0.009949782,-0.036129378,0.4284392,0.5424678],[0.05534743,-0.0070937686,0.012779384,-0.020212462,-0.810695,-0.7458955,-0.06678266,0.24761188,0.7959795,0.18153493,-0.77803063,-0.3331065,-0.41612664,-0.10347939,0.4260129,-0.12432382,0.19131409,0.5900885],[-1.3917207,-0.10825836,0.25955147,0.117827095,0.1907617,0.056196008,-0.44743136,0.46662346,-0.07211038,-0.27684382,0.048279505,-0.67529994,-0.1008146,-0.26535323,-0.21489926,0.33245432,0.37282628,0.8048224],[0.9139895,0.18345529,-0.11113925,-0.024819624,-0.0057961256,0.42582917,0.20965768,0.09122352,-0.04145471,-0.08591005,0.033041902,0.102651305,0.28468904,-0.14300235,-0.1514348,0.27464387,-0.3937016,-0.21395943],[0.14075463,-0.36453637,0.022140993,-0.24156585,-0.22243826,0.5132401,0.317588,-1.4172845,0.07024156,0.36280203,0.19390614,0.31465214,-0.43508086,-0.014590371,0.38123438,0.31295216,0.064947814,-0.3264055]],"activation":"σ"},{"dense_2_W":[[0.2944305,-0.1596823,-0.53525865,0.49642923,0.23475026,0.23187475,0.71439105,0.65725046,-0.721471,0.39266056,0.37784654,-0.27128077],[0.081694655,0.13397129,0.15713829,-0.09578413,-0.5178259,-0.08045092,-0.54402024,-0.33381253,-0.22557487,-0.44034663,-0.5231108,-0.014040657],[-0.53353846,-0.49547645,-0.5018153,-0.3451814,-0.4162906,-0.11419333,0.14722995,-0.4278855,-0.30550334,-0.57627094,-0.48164564,-0.6556868],[-0.3350859,-0.53481793,0.17310745,0.041560747,-0.17386791,-0.36399472,-0.6959931,-0.07396456,0.06297616,0.041960794,-0.44298738,0.47928327],[0.37257755,0.056011233,0.121093154,0.13028839,0.112854324,-0.15124673,0.18506464,-0.25879407,0.010806852,-0.38031578,-0.30364817,0.40391642],[-0.7007721,-0.05058494,-0.37102678,0.0057000583,0.36505723,-0.0139328055,0.33886233,0.13501829,-0.7866263,-0.08625708,0.06882772,-0.7447073],[0.24382925,-0.7427297,-0.087578066,0.27406982,0.55775076,-0.9633511,0.8514653,0.5075772,-0.8725846,0.26276717,-0.49534693,-0.85888404],[0.2656534,0.19259208,0.40583682,0.31773284,0.034196496,-0.16609356,0.15637825,-0.6308068,0.47307655,0.19246396,-0.28782868,-0.031524025],[-0.33996844,0.35855332,-0.8875853,0.34016752,0.1107245,-0.4759234,0.05391628,-0.3273293,-0.60782087,0.21380496,-0.42787686,-0.67130834],[0.28692353,-0.27509448,0.04464982,-0.3738229,-0.16551112,0.030297015,-0.48875,-0.19420627,0.017036378,-0.16820177,0.10364311,-0.35664937],[0.10276442,0.07036441,-0.09596506,-0.26394823,-0.21366283,-0.145804,-0.33585423,-0.6869976,-0.15877219,-0.13249736,-0.7068687,0.04853754],[-0.063890144,-0.34752303,0.036439255,0.007083208,-0.12175009,-0.21223761,-0.3370601,-0.6512872,0.024522861,-0.12854238,-0.12914781,0.24186853],[0.26432735,-0.32675922,-0.7650313,-0.027757708,0.35079917,-0.76993525,0.14455345,0.25884274,-0.22133446,0.37703148,0.23170869,-1.0444877],[0.32937536,-0.13382863,0.48463398,-0.047336943,-0.27687612,0.23009335,-0.32501528,0.15273342,0.12341018,-0.33050254,-0.5033011,0.36793295],[0.019172277,-0.46311465,-0.47122756,0.3662296,-0.05598463,-0.45946774,0.11587991,0.16402873,0.065510325,-0.06082724,-0.52629966,-0.15041721],[0.13054866,-0.29858604,-0.38646755,-0.26892266,-0.3903054,0.10999007,-0.6066756,-0.27233317,-0.09195491,-0.39942724,-0.7569417,0.04020184]],"activation":"σ","dense_2_b":[[-0.024400406],[-0.012108642],[-0.2738606],[-0.06441908],[-0.035198342],[-0.17128238],[-0.2096501],[-0.047762156],[-0.16214791],[-0.025786025],[-0.21445137],[-0.25522697],[-0.14236587],[-0.06891089],[-0.11348295],[-0.27611488]]},{"dense_3_W":[[-0.045766644,0.39230958,0.35891584,-0.4291976,-0.04042154,-0.30131957,0.2852373,0.22184609,-0.26795706,-0.3909815,-0.0844706,0.004657081,-0.12571083,0.081972,0.22855265,0.14256158],[-0.0930191,0.18007645,-0.19445603,0.17205104,0.24538551,-0.04826821,-0.21634555,0.19088717,0.026500426,-0.15073289,0.2712199,-0.035126556,-0.12222757,0.20960063,-0.38159323,-0.14284025],[-0.441732,-0.15396653,0.03677415,0.3120023,0.011853378,-0.29715177,0.3207848,0.345577,0.13360831,-0.058848828,0.4174631,0.05521104,-0.1556204,0.2805419,-0.34175965,-0.33693245],[-0.4516799,-0.23317254,0.23108752,0.21102518,-0.030421874,-0.1663392,0.29930797,0.10362555,-0.08888556,0.30611843,-0.10012278,-0.13986777,0.23634678,-0.3123206,0.20500444,-0.192751],[-0.004745441,-0.43816042,-0.034584858,0.19766587,0.3116471,-0.03267742,-0.20999157,-0.20225246,-0.067765154,0.2848538,-0.16701016,-0.059503432,0.3308554,0.22440504,-0.3225443,0.05546478],[0.05413141,-0.3679634,-0.08688536,-0.07090988,-0.29120877,0.1316063,0.44080707,-0.16184773,0.20294042,0.20072685,-0.12445014,0.3804063,0.20178777,-0.13255891,-0.30791807,0.10261593],[0.38054186,-0.036883593,0.111167036,-0.15566286,-0.23951554,-0.059736684,0.5326792,-0.41414064,0.3691683,-0.09329605,0.22044435,-0.21697398,0.2869305,-0.39302784,-0.13643056,-0.27738827],[-0.14465772,-0.4031915,-0.17516668,0.13024601,-0.37880698,0.40701059,0.2547356,0.094646186,0.19080016,-0.40483093,-0.2865975,0.23534034,0.31190503,0.24550194,0.39888,-0.27389622],[0.36007127,-0.093776844,0.11617923,-0.02295303,-0.08457082,0.09956218,-0.013975839,-0.46377388,0.2146814,0.2755668,-0.09221034,0.035337944,0.20806664,0.042331383,0.2022907,-0.19461066],[0.39033055,-0.52232456,-0.25495735,-0.5319784,-0.31744576,0.6584618,0.81467754,0.12727821,0.33764753,-0.0022844106,-0.543308,-0.39109668,0.36655223,-0.5292826,0.4390524,-0.44351915],[-0.14593528,-0.040282447,-0.30888835,0.19295529,0.07064081,-0.39783165,0.039676864,-0.06879557,-0.39840496,0.19014457,0.04776782,0.38430482,-0.2741348,0.08051817,-0.14613572,-0.100173116],[0.17331427,-0.24296136,0.33474293,0.19222625,0.29851925,-0.30138525,-0.019168438,-0.2754576,-0.122989416,-0.0025447265,0.33477452,0.28567022,-0.3947916,-0.037584867,-0.15590495,0.3125137],[0.4101434,-0.3299672,0.28667036,-0.08923333,-0.16061012,0.0777971,0.38074505,-0.103880584,-0.117819495,-0.24564442,-0.4328198,-0.18800925,0.23287506,-0.29935506,-0.09091186,0.10900072],[-0.026216649,0.34356278,0.16383435,-0.20038186,-0.15712044,-0.15588541,-0.077189654,0.20966166,-0.1291972,0.14222729,-0.3434131,0.007533742,-0.06533606,0.09545395,-0.19654328,0.24315165],[0.43069547,0.045578357,-0.25710672,-0.111668326,-0.017155485,0.10505446,0.34679157,0.28005412,0.031709734,-0.30453283,-0.12727985,-0.057555404,0.06327874,-0.33901685,0.034049414,0.108673126],[0.016011784,0.0637642,-0.38568556,0.18072137,-0.3611924,0.30670312,0.05511325,-0.075690806,-0.39434642,0.079114,-0.19587561,0.1014485,0.40695387,0.0076808794,-0.15043128,0.121672675]],"activation":"identity","dense_3_b":[[0.01894022],[-0.0973606],[-0.005777353],[0.020744076],[-0.046186622],[0.00427233],[0.004350739],[-0.018349739],[-0.14396259],[-0.02958251],[0.038920324],[-0.017607786],[0.0048550465],[0.02556554],[-0.030977953],[0.034558125]]},{"dense_4_W":[[-0.006525211,-0.010181395,-0.1280271,-0.17862214,0.0013907425,0.17761578,0.55933243,0.20846461,0.03992837,0.16985804,-0.12210165,-0.014709531,0.4256174,-0.040674876,0.20955296,0.010441904]],"dense_4_b":[[-0.0021002437]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GENESIS G70 2018 b'xf1x00IK MDPS R 1.00 1.06 57700-G9420 4I4VL106'.json b/selfdrive/car/torque_data/lat_models/GENESIS G70 2018 b'xf1x00IK MDPS R 1.00 1.06 57700-G9420 4I4VL106'.json new file mode 100755 index 0000000000..8904b3bb61 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GENESIS G70 2018 b'xf1x00IK MDPS R 1.00 1.06 57700-G9420 4I4VL106'.json @@ -0,0 +1 @@ +{"input_std":[[6.67504],[0.83055073],[0.4504677],[0.031510424],[0.8270034],[0.8270758],[0.8283119],[0.82153946],[0.82032317],[0.8195808],[0.8197018],[0.03126837],[0.03131486],[0.031380102],[0.03158359],[0.03163829],[0.03178264],[0.031831454]],"model_test_loss":0.001804972067475319,"input_size":18,"current_date_and_time":"2023-08-05_16-18-44","input_mean":[[25.399244],[0.061304945],[-0.0003437192],[-0.017434629],[0.06381776],[0.06372736],[0.063848905],[0.063940406],[0.065443896],[0.06275638],[0.06494871],[-0.017370405],[-0.017361412],[-0.017346727],[-0.017236443],[-0.017156692],[-0.017259058],[-0.017420387]],"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.0690558],[-0.77586544],[-0.22050455],[-0.00765285],[-0.19674423],[-0.8347951],[-0.09352683]],"dense_1_W":[[0.020506917,-0.15335819,-0.0008360731,0.6498087,0.17344612,1.1971287,-0.2960149,-0.4612594,0.17628047,-0.22166184,0.34056312,0.75876623,-0.24494657,-0.78779393,-0.5285824,-0.06854418,0.110915035,0.108071424],[-0.5525338,-0.18559927,-0.8664502,-0.19414489,0.32285878,0.104777955,0.32996055,-0.5476456,0.2609833,-0.6216712,0.30093062,-0.44722554,0.10542638,0.3017626,0.10288904,0.38855773,0.19561474,-0.3270897],[-0.14589511,0.20689815,-0.0024478706,0.35753623,0.29983085,0.30490085,0.19881076,-0.5439725,-0.055093203,0.23563561,0.10342807,0.18627505,0.009484609,-0.5248601,-0.15741313,0.25914413,-0.06266835,-0.051203806],[0.011763201,-0.32582518,1.6164731,0.1839908,-1.0310354,-0.51407796,1.5570961,-0.35941225,-0.24897343,-0.20450619,1.1247143,0.07288912,-0.09742617,-0.011884875,-0.3086428,0.21652025,0.033836115,-0.14367257],[-0.00040854778,1.1504747,0.00023197546,-0.15424743,0.40093625,-0.89857256,0.12767099,-0.9129619,-0.77709115,0.5045758,0.12572749,0.08928875,-0.0022053611,0.0144833615,-0.18096298,0.17682968,0.198336,0.16687107],[-0.62956375,0.0370336,0.90060794,0.16559666,-0.26498243,-0.0035898676,-0.3527606,0.6536402,-0.15629528,0.18882553,-0.04355473,-0.0017563448,0.060951266,-0.07628207,-0.10434113,-0.33889666,0.12719911,0.032956228],[0.00914529,0.18054785,2.2880237,0.2819539,-0.25446033,-0.76159877,-1.333457,-0.0044576577,0.7970225,1.3939439,-0.08412827,-0.21678115,0.40472636,0.022984171,-0.405091,0.08374549,-0.27028057,0.09941351]],"activation":"σ"},{"dense_2_W":[[0.7266154,0.32628095,0.51000977,-0.4783954,0.086360686,-0.22168429,-0.2880397],[0.598752,-0.3016096,0.5087822,-0.5399995,-0.5202169,0.058336493,0.047094647],[-0.28886208,0.44084644,0.1333289,0.47497818,-0.28537926,0.033592604,0.07091276],[-0.21188565,0.3598567,-0.25231984,-0.32756943,0.39144737,0.048175387,-0.13305938],[0.03274561,-0.55677044,-0.11253939,-0.013972536,-0.06857901,0.28146827,-0.55059713],[0.5122463,0.43594432,0.17488275,-0.720984,-0.17414498,0.51594955,-0.16287713],[0.14888862,0.06988386,-0.29811302,0.23327418,-0.44284585,-0.313677,0.414895],[-0.7221291,-0.33080924,0.34764898,-0.15981244,0.09235077,0.24312954,-0.6309208],[0.31931618,-0.16977033,0.4973229,0.31941646,-0.33441898,-0.25843173,-0.33283034],[0.081630506,0.19055562,-0.32433864,0.38465676,-0.35722488,-0.5474165,-0.25410983],[-0.5063781,0.4390191,0.057292584,0.41282323,0.40151483,-0.69037515,-0.13255808],[-0.89217335,0.3417005,0.13010992,0.39993486,0.0745399,-0.006703715,-0.55569714],[0.46920383,0.00090861076,-0.34466454,-0.62741935,-0.54203355,0.26534078,0.31966165]],"activation":"σ","dense_2_b":[[-0.0036245622],[-0.013149616],[-0.11431158],[-0.068017736],[-0.21495658],[-0.016385378],[0.016726723],[-0.063780464],[-0.0170552],[-0.06312584],[-0.066713385],[-0.08563329],[-0.023486812]]},{"dense_3_W":[[0.05525152,0.3041412,-0.26633847,-0.4607755,-0.50169283,-0.13767284,0.525694,0.027187727,-0.54194945,0.00530328,-0.29629645,0.06593012,-0.13549523],[0.20180804,0.22567257,0.099739715,-0.5508954,0.5213892,0.6428468,0.41780272,-0.44941857,0.57049906,-0.5196749,-0.44776997,-0.3975976,0.3711528],[-0.104158744,-0.27345514,-0.4545859,0.40854144,-0.49072927,-0.49170205,-0.3166091,0.23397347,0.61358595,-0.037754327,-0.2841472,-0.10350736,0.2719038]],"activation":"identity","dense_3_b":[[0.052092277],[0.035965864],[0.066190146]]},{"dense_4_W":[[0.8467955,1.0950449,0.25318098]],"dense_4_b":[[0.043908965]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GENESIS G70 2018.json b/selfdrive/car/torque_data/lat_models/GENESIS G70 2018.json new file mode 100755 index 0000000000..3e3f833b7c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GENESIS G70 2018.json @@ -0,0 +1 @@ +{"input_std":[[6.6771574],[0.8306398],[0.44399694],[0.03148828],[0.82453376],[0.82558274],[0.8276523],[0.8249276],[0.82540375],[0.8268513],[0.8293405],[0.031258367],[0.031317297],[0.031381857],[0.031565305],[0.031729955],[0.031927522],[0.031937882]],"model_test_loss":0.0016914892476052046,"input_size":18,"current_date_and_time":"2023-08-05_15-54-16","input_mean":[[25.397608],[0.061366253],[-0.004759293],[-0.017377611],[0.063574664],[0.0629952],[0.06279838],[0.06257633],[0.0642723],[0.06428019],[0.06443743],[-0.017316736],[-0.01732337],[-0.017324336],[-0.017258912],[-0.017273892],[-0.01738509],[-0.017547127]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5071787],[-0.011610117],[-0.25543153],[-0.2288577],[0.3640026],[-0.20951404],[-0.018084347]],"dense_1_W":[[-0.32076025,0.5609776,0.06455551,0.4650965,-0.3128346,0.29808214,-0.068447836,-0.080615535,-0.1533624,0.086725675,0.0019198896,0.38526085,-0.33096933,-0.4344235,-0.24709408,-0.21656084,0.12910959,0.10089391],[-0.013731939,-0.37048897,1.5160967,1.216611,-0.026065614,-0.012039334,-1.7950301,-0.6103514,1.727483,2.0623763,-0.9575297,0.39149958,-0.218174,-0.51533777,-0.76304054,-0.3384101,-0.10145121,0.34581316],[0.014144666,0.22945884,-0.45639136,0.08440587,-0.19207898,-0.5290964,0.54655564,-0.07094287,-0.41206077,-0.23082434,0.77867293,-0.83082336,-0.31685916,0.3376802,0.18800995,0.28112486,0.5808552,0.0882255],[0.55997515,-0.45515752,-0.3620537,-0.21491247,-0.12751056,0.6437451,0.4513876,0.14484537,-0.012545343,-0.70398337,-0.03420965,0.5712778,-0.34471962,0.2639977,0.15245198,-0.09942475,-0.52654004,-0.39195266],[0.16048487,-2.0932982,0.060834095,-0.43821463,-0.12897933,0.8929607,0.08955616,1.5023427,0.47960326,-0.24697156,-0.2284945,0.3664966,0.36733755,-0.70950145,0.25744,0.16433853,-0.4799496,0.3186391],[0.0031760861,-0.32184288,-0.033980735,-0.4582301,-0.07663507,-0.7593102,0.50883085,0.22713356,-0.20064494,0.3521629,-0.22366937,-0.07778892,-0.2534047,0.56217426,0.41395634,-0.12142341,-0.0027042534,0.03405264],[-0.0017348339,-0.29796287,0.062474936,-0.11221718,-0.23059554,-0.626899,0.10690498,0.5434746,-0.05614545,-0.061325278,-0.2274304,0.29413497,-0.38511482,0.10846904,-0.15861528,0.35446325,-0.38156375,0.18584998]],"activation":"σ"},{"dense_2_W":[[0.08477807,-0.35302192,-0.40779448,-0.5867174,0.13918135,-0.6664157,-0.3491646],[0.3792094,-0.030590685,-0.21691003,0.13814875,-0.22226094,-0.66838443,0.11945859],[0.114434734,0.3219143,-0.65471864,-0.5160347,-0.10297699,-0.546052,0.23859331],[0.4386374,-0.13452144,-0.0146616185,0.408655,0.29078993,-0.45133266,-0.6718732],[0.04953622,-0.309141,-0.028895855,-0.081540965,-0.04211146,0.19563156,0.1549496],[-0.07437576,0.18886302,-0.11578516,-0.02629349,0.5117754,-0.8601534,-0.27231035],[0.07671942,0.0293902,-0.5813721,0.3454169,-0.053973634,0.046247624,-0.35544363],[0.22220099,-0.53176254,0.49601117,0.16283734,-0.41594207,0.14338993,-0.23063558],[0.50082463,0.3444267,-0.5869549,0.31520668,0.3332609,-0.5623406,0.0112578],[-0.05211133,-0.24212956,-0.37504154,-0.24755752,-0.61364114,0.61201805,0.5261763],[0.16144137,-0.5551527,-0.27000764,0.48719284,-0.20183928,0.4279106,0.5559925],[-0.38015607,-0.17513199,0.0054852753,0.49040842,-0.5847223,-0.315286,0.41083756],[0.027273893,0.37111732,-0.29921013,0.35153958,0.6107227,0.058014646,-0.48178723]],"activation":"σ","dense_2_b":[[-0.13192527],[-0.11472918],[-0.2398955],[-0.012978796],[-0.24606323],[-0.16946991],[-0.09656156],[-0.011122704],[-0.13971844],[0.025623204],[-0.01150639],[0.031865247],[-0.14259984]]},{"dense_3_W":[[-0.49097103,-0.38446474,0.19654791,-0.04500209,-0.353884,-0.59052265,-0.26697198,0.25850582,-0.4691939,-0.3658384,0.49351692,-0.21503085,0.43769556],[-0.49650973,-0.24257205,0.27875185,0.056984637,-0.084106766,0.21747197,-0.14523055,-0.062517725,-0.12865941,-0.4967132,-0.47404718,-0.39828455,0.20428851],[0.51754504,0.44354475,-0.12756172,0.60820955,-0.16570193,-0.24837321,0.3779718,-0.12072089,0.33560675,-0.29205063,0.42597872,-0.57351613,0.275068]],"activation":"identity","dense_3_b":[[0.03487869],[-0.013982357],[-0.02665594]]},{"dense_4_W":[[-0.40196383,0.97064435,0.88333386]],"dense_4_b":[[-0.019127952]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GENESIS G80 2017.json b/selfdrive/car/torque_data/lat_models/GENESIS G80 2017.json new file mode 100755 index 0000000000..84e07c5900 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GENESIS G80 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.38813],[1.0174526],[0.39554036],[0.046162203],[1.0090938],[1.0111505],[1.0117267],[1.0022837],[0.9907708],[0.9691922],[0.93781143],[0.045898493],[0.0458996],[0.045888968],[0.04573459],[0.045532204],[0.045233488],[0.044901755]],"model_test_loss":0.012157289311289787,"input_size":18,"current_date_and_time":"2023-08-05_16-43-40","input_mean":[[25.00623],[0.054802105],[0.011563125],[-0.012088739],[0.050388798],[0.05198936],[0.05343812],[0.056934483],[0.05857226],[0.05653321],[0.05339159],[-0.012127758],[-0.012105216],[-0.012089895],[-0.012095662],[-0.012160323],[-0.012418678],[-0.012670423]],"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.23510607],[0.017906608],[-0.09428025],[2.0587661],[2.4378984],[-0.2166746],[0.17629944]],"dense_1_W":[[-0.008606778,0.34109786,0.6875069,0.0028993126,0.8000613,0.546632,-0.9264688,0.03937569,0.13737564,-0.2733249,-0.96302414,0.339788,0.60886014,0.26368546,-0.23521979,-0.1668846,0.3196768,-0.15900844],[-0.0011819584,0.729729,2.0695696,0.20169054,-1.0443937,-0.5805483,-1.2778925,-1.3182445,0.7515108,1.8376803,0.88894564,0.9433448,0.60453916,-0.5198952,-0.27219102,-0.18214135,-0.32308298,-0.5258672],[-0.0007019058,-0.45617288,-0.058651116,-0.1715701,-0.1380315,-0.021959623,0.026901057,0.082620144,0.1911437,0.00152804,-0.042670403,-0.3032745,0.45580253,0.032131206,-0.2713613,0.3809063,-0.021339726,-0.046729088],[0.9848692,-2.0930884,0.05227474,0.14134067,-0.5008443,-0.51911664,-0.10874144,-0.11555108,0.059225876,-0.20209119,-0.5084024,0.119557716,-0.17086504,0.5155482,-0.2892066,-0.723269,0.19560312,0.18627037],[0.9442295,1.9961289,-0.05074522,-0.043404724,0.6943,0.59966326,-0.045782663,0.08436519,-0.1630318,0.05319531,0.67571694,-0.3004089,-0.12995596,-0.41098842,0.36848706,0.87160724,0.39175102,-0.7181419],[-0.0074142898,-0.04797374,0.64808965,0.55981237,0.49558824,0.63315,1.5447174,-0.5666181,-1.9028187,-1.1591543,0.67295575,-0.3617059,-0.2785844,0.52386093,0.78436995,0.022645274,0.30185598,-0.6463948],[-0.002286195,0.25007936,-0.027766582,-0.2213954,0.28290057,0.71661454,0.073331274,-0.017547475,-0.64222115,-0.2412949,0.5705157,0.31924602,-0.050814595,-0.45005983,-0.31452417,0.30082983,-0.56895506,0.3093173]],"activation":"σ"},{"dense_2_W":[[0.49283543,1.4813224,-1.1632105,1.1330808,1.6111002,-0.79484963,0.521326],[-0.45535,-0.27000293,0.20228699,-0.021973267,-0.20624182,-0.20179789,-0.0924967],[-0.6126425,0.12641166,0.12921864,0.18841244,0.22053215,-0.0732061,-0.6845349],[-0.44073936,-0.26221433,0.71035826,0.8264845,0.27127275,0.1522136,-0.40632126],[1.1533407,0.74939775,-0.74686474,-0.15980572,1.3828646,-0.47532186,-0.49893177],[-0.010718742,-0.49425468,0.57077384,0.52116805,-0.1557675,-0.2101485,0.1713434],[0.123579755,-0.003964546,0.37106356,0.31162402,-0.1109699,-0.013212317,-0.050931312],[0.46784705,0.20873305,-0.51459223,-0.12245424,-0.35924026,-0.6009022,0.7039142],[0.6885935,0.4780248,-0.95869493,-1.1940409,-0.37541804,-1.0116334,0.3657836],[-0.084950574,0.20079572,-0.6036541,-0.5749908,-0.4149406,-0.06347254,0.3201109],[0.6054816,-0.26072496,-0.6472537,-0.10404058,0.28988326,-0.7315275,0.71709865],[-0.46448785,0.027026115,0.68479264,-0.25374988,-0.82326454,0.63361776,-0.95420885],[0.4081272,0.4028123,-0.54246926,0.45891264,0.535415,-1.0074925,0.021217577]],"activation":"σ","dense_2_b":[[-0.31526598],[-0.04387461],[-0.012186167],[0.16261126],[-0.48067328],[0.021213803],[-0.06306296],[-0.18538073],[-0.3133758],[-0.33385947],[-0.30100945],[-0.1241097],[-0.03466007]]},{"dense_3_W":[[0.21734363,0.043079853,0.18524005,-0.2568567,0.15158817,-0.36534816,-0.34965506,-0.36512575,-0.06888381,-0.31225628,-0.10772074,-0.67586124,-0.20552121],[-0.5188872,-0.5363552,0.6651099,0.42919686,0.35317427,0.5209541,0.4917763,-0.62617296,0.0038265921,0.033600807,-0.36337307,0.619507,-0.45799708],[-0.20623821,0.2606718,0.049107946,0.78371567,-0.46874192,-0.036460795,-0.09059373,-0.622457,-0.82094365,-0.10458149,-0.10322752,0.7906474,-0.24749829]],"activation":"identity","dense_3_b":[[0.030028654],[0.035442725],[0.060197428]]},{"dense_4_W":[[0.047837973,-0.35243145,-1.0255531]],"dense_4_b":[[-0.05134228]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GENESIS GV60 ELECTRIC 1ST GEN b'xf1x00JW1 MDPS R 1.00 1.03 57700-CU100 1C02'.json b/selfdrive/car/torque_data/lat_models/GENESIS GV60 ELECTRIC 1ST GEN b'xf1x00JW1 MDPS R 1.00 1.03 57700-CU100 1C02'.json new file mode 100755 index 0000000000..1a2b1b864e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GENESIS GV60 ELECTRIC 1ST GEN b'xf1x00JW1 MDPS R 1.00 1.03 57700-CU100 1C02'.json @@ -0,0 +1 @@ +{"input_std":[[6.8666883],[1.3245112],[0.52562356],[0.052998435],[1.3207145],[1.3219501],[1.322223],[1.3074695],[1.2883352],[1.257932],[1.2234186],[0.0526958],[0.05277707],[0.052846666],[0.052899044],[0.052800883],[0.05247098],[0.05198219]],"model_test_loss":0.004962869919836521,"input_size":18,"current_date_and_time":"2023-08-05_17-34-41","input_mean":[[25.097816],[0.03033095],[0.009557012],[0.0017949705],[0.025300408],[0.02690665],[0.028368048],[0.032760378],[0.03126874],[0.0306388],[0.028780613],[0.0017470417],[0.001759046],[0.0017673858],[0.0017764169],[0.0017657065],[0.001777597],[0.0017051382]],"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.4459309],[-0.031835943],[-0.6412851],[1.5992996],[-1.8778602],[0.067136765],[-0.1248056]],"dense_1_W":[[0.23177835,0.5813533,-0.03405331,-0.5137932,0.4210262,0.27980956,-0.82241374,-0.19962446,0.11077991,-0.093077675,0.1452694,0.8414958,0.57338977,0.19254212,-0.737942,0.19993012,-0.20208997,-0.3420811],[-0.000672615,0.59404653,0.035378806,-0.02149494,-0.18110669,0.2673035,-0.31291944,0.18944205,0.16411953,-0.004739658,-0.18394397,0.08154405,-0.19406919,-0.35596544,-0.19057219,-0.75509447,0.12070875,0.52753425],[0.29864538,-0.47656062,0.03612531,-0.026517967,0.042197336,-0.7134168,0.7022738,0.3648459,-0.26705045,-0.120554686,0.0457595,-0.77211475,-0.1677129,-0.06930536,0.10366717,0.58520234,-0.1898025,0.50099725],[0.39080697,-0.61320007,-0.17329827,0.5142849,0.093346365,-0.8120696,0.27996528,0.053159885,-0.1457705,-0.18952872,0.0007353743,-0.23638912,-0.07647951,0.3922934,-0.42914188,-0.37108567,0.20613119,0.062412854],[-0.39423087,-0.40943775,-0.18895875,0.17182297,-0.6007384,-0.11699258,0.3204309,-0.2494266,-0.16516677,-0.13115573,-0.014376576,0.05930437,0.23952278,0.056292366,-0.34672272,-0.29824072,-0.15019956,0.32797214],[0.10670553,0.5959076,0.009395143,-0.41772658,0.22091666,0.25926113,-0.105012566,-0.24128042,-0.23561135,-0.16422139,0.39602,-0.030733602,0.1917602,-0.1896667,0.5195841,0.19198169,-0.09055647,-0.114016406],[0.004652841,-1.0700105,-4.301339,0.18097587,0.88896906,0.100279324,0.78191584,-0.1407951,-0.6152163,-0.36759338,0.3781233,-0.2559152,-0.22632733,0.0830458,0.30006638,0.070950896,-0.10994307,-0.077234626]],"activation":"σ"},{"dense_2_W":[[-0.59839344,-0.36497867,-0.02586302,-0.31546462,0.67249775,0.17433609,0.033796396],[0.7766115,0.40153167,-0.7150285,-0.80042535,-0.720546,0.31380758,0.4402431],[0.0970656,0.51849407,-0.65787846,-0.28156418,-0.7972932,0.52290595,0.16948703],[-0.16617168,-0.28093967,0.43271568,0.5635128,-0.15296243,0.05517985,0.5591824],[-0.07375612,0.9804654,-0.45864907,-0.011922217,-0.76456034,0.71113896,-0.17698406],[0.08965309,-0.3817331,0.56427354,0.22461765,0.36535984,-0.41643435,0.02309694],[-0.3194701,-0.9402775,0.035420515,1.0038631,-0.04493413,0.46595728,0.61562926],[0.3133922,0.54886144,0.20508583,-1.9232413,0.29925007,-0.15759094,-0.964843],[-0.07229484,-0.40885624,0.36455467,0.22989284,0.29330707,-0.23192556,-0.25334215],[-0.66204053,-0.6006576,0.46530548,0.8226111,-0.50858915,0.65410966,0.8907581],[0.062297866,-0.5300527,-0.24341863,-0.26440525,-1.0893056,0.6854048,-1.044881],[-0.3985859,-0.46718082,-0.12280806,0.5118322,0.58033365,-0.4268356,0.27308896],[0.66325355,1.5489223,-0.2619856,0.8496741,-1.5036632,0.18988253,-1.092742]],"activation":"σ","dense_2_b":[[-0.067070246],[-0.0031838221],[0.026247503],[0.016272478],[-0.05702159],[-0.06190444],[0.047330927],[-0.14584902],[-0.043730203],[0.10126568],[-0.23609862],[-0.107597634],[0.5373265]]},{"dense_3_W":[[-0.16748182,-0.4861085,-0.4175482,0.17064394,0.1626839,0.6020392,0.69299996,-0.7983646,-0.3389632,-0.22732152,0.15245983,0.19130903,-0.7817714],[0.16310972,-0.6437373,-0.5314633,0.23254934,-0.1725596,-0.4100144,0.43598408,-0.77505416,0.14245929,0.27584276,0.6299163,0.51607686,-0.5231239],[0.4058488,-0.5608606,-0.7491334,0.3631101,-0.32120687,0.37973177,-0.12449112,-0.1279431,0.57055753,0.59800303,-0.3972419,0.73630637,-0.36663607]],"activation":"identity","dense_3_b":[[0.12561505],[0.06481958],[0.04212058]]},{"dense_4_W":[[-0.47166833,-0.46609542,-0.5415291]],"dense_4_b":[[-0.052935593]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GENESIS GV60 ELECTRIC 1ST GEN.json b/selfdrive/car/torque_data/lat_models/GENESIS GV60 ELECTRIC 1ST GEN.json new file mode 100755 index 0000000000..8d39b0612d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GENESIS GV60 ELECTRIC 1ST GEN.json @@ -0,0 +1 @@ +{"input_std":[[6.8682947],[1.3247597],[0.52117354],[0.053211],[1.3196762],[1.321261],[1.3220409],[1.3065661],[1.2855599],[1.2555516],[1.221194],[0.05287544],[0.052969508],[0.053053025],[0.053157352],[0.05310392],[0.052811027],[0.052315235]],"model_test_loss":0.004652302712202072,"input_size":18,"current_date_and_time":"2023-08-05_17-08-23","input_mean":[[25.097141],[0.030100366],[0.008127931],[0.0017367124],[0.025092127],[0.026649075],[0.027925659],[0.031518627],[0.031421654],[0.03279364],[0.028935509],[0.0016365603],[0.0016674129],[0.0016875914],[0.001713633],[0.0017992958],[0.0018609823],[0.0017497891]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.01906636],[-0.026147846],[-0.06956214],[-0.12893584],[3.3396657],[-0.11347563],[3.4662268]],"dense_1_W":[[0.0016520686,0.43010652,-0.016737647,-0.5847046,0.42132026,0.6080183,-0.36023164,0.04929399,-0.05639926,0.055730373,0.07496767,0.40559384,0.5495037,-0.78057534,-0.3052922,-0.4512687,-0.15058433,0.049945023],[0.0036362763,0.904483,0.001981453,-0.33253717,0.25831643,0.7194124,-0.29999894,-0.4751608,-0.22190008,0.22535524,0.18900982,-0.04392861,0.30455038,-0.40629083,0.551194,0.3208965,0.2746982,-0.6420702],[-0.0013973061,-1.2801182,-4.660272,-0.2299565,0.5036499,1.121957,0.6687826,0.08227576,-0.87890655,-0.816766,0.5726014,-0.48010656,-0.7163965,0.08434925,0.26663804,0.6864054,0.38185596,-0.08777598],[-0.024978189,0.45179686,-0.43001783,-0.19626012,-0.145855,0.3520434,-0.9694731,0.11912776,-0.069412105,-0.65245837,0.3938456,0.88234675,0.2711265,-0.09912691,-0.12296636,0.14305602,-0.12646228,0.12271214],[0.6889864,-1.4383845,-0.5985031,0.43910387,-0.14574279,-0.5830182,0.28500378,-0.18694921,-0.5173389,-0.15667093,0.1595579,-0.3700834,0.11795122,0.28467125,-0.20037529,0.44890952,-0.43353197,0.15507948],[-0.016126553,-0.5084034,-0.3446227,0.13306846,0.16979276,-0.6851119,0.97122914,-0.11992911,-0.38304567,-0.3581892,0.4410937,-0.085785575,-0.17046288,0.43981537,0.31712607,0.29649833,0.20096925,-0.42831364],[0.70960057,1.176625,0.618315,-0.35273266,0.50546986,0.41693547,-0.30839127,0.19819334,0.5911515,0.2822198,-0.22344977,0.06145853,-0.052926417,0.008550686,-0.02682976,-0.34092346,0.41492197,-0.16889408]],"activation":"σ"},{"dense_2_W":[[0.3105403,-0.13943449,-0.5671977,0.7278831,-0.9538581,-0.53992945,0.2537109],[0.25039518,-0.19284537,-0.33849826,0.19139016,-0.13403177,-0.07362739,-0.71186584],[0.077256136,-0.6989092,-0.236067,-0.53454214,0.4003753,0.3068613,-0.50189966],[-0.3387507,0.08022835,-0.13841416,-0.21556431,-0.16097516,0.82565576,-1.0068827],[-0.5129783,-0.64633214,0.6501237,-0.31724972,-0.41725558,0.6616404,-0.8662519],[0.4270751,0.67877465,-0.30108768,-0.16842516,-0.82080853,-0.8198072,-0.14678568],[0.42951444,0.47302562,-0.59648263,0.50122297,-0.4004039,-0.8508191,-0.5640101],[0.31044075,0.4447596,-0.0133176055,0.39672032,-0.13207492,-0.1053544,0.3750294],[-0.49185774,-0.6246744,0.2108288,0.036430668,-0.19068871,-0.684725,-0.5135398],[0.6451895,0.15162985,0.35664967,0.539209,0.24193677,-0.0060984846,-0.38601643],[0.33735067,0.48711634,0.3457868,0.40235066,-0.5442683,-0.8894964,0.083602294],[0.6303491,0.47514284,-0.25302443,0.048399102,-0.6309426,0.071017355,-0.42443976],[-0.028995385,0.6780545,-0.48130322,-0.10078704,-0.35888222,-0.038346574,0.21966858]],"activation":"σ","dense_2_b":[[-0.16421281],[-0.0066147824],[0.2712916],[-0.037723377],[0.009121119],[-0.24584663],[-0.17050697],[-0.28670987],[-0.15715508],[-0.09428354],[-0.21343407],[-0.17752221],[-0.17326371]]},{"dense_3_W":[[0.39673528,0.5029898,-0.77688295,-0.20485383,-0.69867265,0.52573097,0.5760262,-0.057309195,0.38914645,0.11605935,0.3120174,0.22832489,0.5434368],[0.49983713,0.12314057,-0.23971559,-0.29951656,0.01370866,0.3070287,-0.101687245,0.34138146,-0.15633298,-0.5573778,0.6135126,-0.24733001,-0.3987656],[0.041431323,-0.5985834,-0.5442451,-0.052750558,-0.7950125,-0.18662111,0.56161785,0.04896858,-0.3108859,0.44375634,-0.21281773,0.40877533,0.062354703]],"activation":"identity","dense_3_b":[[-0.08339912],[-0.0697586],[-0.070846304]]},{"dense_4_W":[[0.82060516,0.39197603,1.0617381]],"dense_4_b":[[-0.07490547]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GENESIS GV70 1ST GEN.json b/selfdrive/car/torque_data/lat_models/GENESIS GV70 1ST GEN.json new file mode 100755 index 0000000000..66e4c7ddae --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GENESIS GV70 1ST GEN.json @@ -0,0 +1 @@ +{"input_std":[[10.192138],[1.2619681],[0.99538904],[0.03173082],[1.390097],[1.3528733],[1.3105861],[1.0981697],[0.9660985],[0.83304054],[0.73382217],[0.031833883],[0.031806096],[0.03176805],[0.031585068],[0.031403936],[0.031049846],[0.03052816]],"model_test_loss":0.08113811910152435,"input_size":18,"current_date_and_time":"2023-09-01_15-46-16","input_mean":[[17.870602],[0.06094058],[0.76994574],[-0.018258877],[0.07383096],[0.06954971],[0.06553388],[0.045131978],[0.034243006],[0.017750643],[0.0021489365],[-0.018112624],[-0.018160766],[-0.018217338],[-0.018421978],[-0.018636575],[-0.018845296],[-0.019152297]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.60173887],[-1.2184482],[-2.5489855],[-0.13953118],[0.6530774],[-1.9541978],[0.6348104]],"dense_1_W":[[0.9151844,-0.69396037,-0.0015744013,0.13417375,0.47273952,0.053828586,-0.2703337,-0.06767218,-0.06996197,0.33860308,0.6809081,0.062160317,0.20090835,-0.39224413,0.20620485,-0.011424855,0.16862637,-0.2757232],[0.28972548,-0.02519699,-0.0015914065,0.16588296,0.18867342,0.054137114,0.08766244,-0.10144043,-0.00023482303,0.035658572,0.3292638,0.025065169,0.02802059,0.040422786,-0.28468195,0.014785016,-0.040343814,0.020054903],[-0.88864183,0.81139094,0.005142466,0.07717855,-0.3736464,-0.48089615,-0.33839747,0.72515595,-0.20632601,0.2192427,0.6845602,0.045920767,-0.0058251703,-0.10204114,0.0328523,0.1720919,0.22784986,-0.39458126],[0.04597544,-0.5142907,-0.039751884,-0.1760501,-2.0647182,-2.079671,-1.7764702,2.893614,2.1160357,0.62820613,-0.58175343,0.13933943,-0.07837348,0.2579554,-0.21817936,0.058899857,0.0867017,-0.2388197],[1.008347,0.6241744,0.0006175654,0.24427246,0.3880548,-0.71216303,-0.08657326,0.43654963,-0.002103242,-0.35102853,-0.72472453,-0.14762312,0.058478996,-0.27061918,0.08358053,-0.05671504,-0.39794087,0.38000095],[-0.75398517,-0.31240758,-0.0035077638,0.042402916,0.03954997,0.38596287,0.3007671,-0.71371967,0.24568759,-0.18542135,-0.63920254,0.012125213,-0.13132948,0.1092853,-0.09679227,-0.19704841,-0.06888792,0.28378332],[-0.2624838,0.19304885,-0.0020451967,-0.42735267,0.5025606,0.020195944,-0.100870304,-0.38624248,-0.1858948,0.15579382,0.32803276,0.24784385,0.31001303,-0.23803873,0.1500903,-0.2607993,0.30487004,-0.11202888]],"activation":"σ"},{"dense_2_W":[[-1.2400194,0.17729802,1.6934681,0.7075426,-0.11226228,-0.83732116,0.33559176],[0.5745533,-0.80457217,-0.6967583,0.08430375,-0.5941207,0.6564719,-0.70027584],[0.013842665,-1.1106777,0.12004836,-0.7758639,-0.7202531,2.1383853,-0.26417783],[0.53778696,-0.9851601,-0.16901778,-0.63449734,-0.5228541,1.452694,-0.5041905],[-0.5252082,0.9113041,0.96822953,-0.2888941,0.19632195,-0.06139024,0.23265024],[0.8556627,-0.5657162,-0.92154366,-0.028895194,-0.5141267,0.72371626,-0.751295],[0.75094503,-0.17778125,-0.7352838,-0.43035126,-0.514307,0.9411462,-0.9285261],[-0.23282954,-0.20877087,-0.41192415,-0.89742875,-1.3174541,-0.15595351,-0.15537289],[-0.7422097,0.3961414,0.3959817,-0.16982703,0.80190444,-0.8246868,1.0364479],[0.84093606,-0.5901947,-0.6232177,-0.35342738,-0.49815804,1.1040002,-0.95394325],[-0.97321624,1.2088536,0.85022783,0.002327647,0.43647796,-0.4797704,0.095545724],[-0.75402004,0.8438213,0.258789,0.092278235,0.5893333,-1.1115283,0.98487294],[0.4652842,-1.1645225,-0.80774826,0.1144249,-0.14423822,0.46821204,-0.4388547]],"activation":"σ","dense_2_b":[[-0.29847553],[0.11241894],[-0.03942593],[-0.045420405],[-0.1453599],[-0.002497385],[0.035479035],[-0.20913747],[-0.13740407],[0.07032733],[-0.21931723],[-0.09019325],[-0.07747503]]},{"dense_3_W":[[-0.3440359,0.13350633,-0.2793149,0.06343626,0.46869245,0.35055122,-0.29592252,0.56705844,-0.35353094,-0.16574235,-0.4968441,0.23517826,0.2515689],[0.034386467,-0.9523351,-0.6150173,-0.43728954,0.3108096,-0.14083374,-0.5916635,-0.62779754,0.5980072,-0.72700554,0.7860504,0.84748363,-0.5247365],[0.67116046,-0.74161327,-0.18781546,-0.6720034,0.46030635,-0.91020125,-0.81438667,0.05195494,0.5849977,-0.87362975,0.42857662,0.74513984,-0.15408307]],"activation":"identity","dense_3_b":[[0.08475188],[0.005057218],[0.099355556]]},{"dense_4_W":[[-0.005187234,0.74306834,1.0122273]],"dense_4_b":[[0.092436805]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/GMC ACADIA DENALI 2018.json b/selfdrive/car/torque_data/lat_models/GMC ACADIA DENALI 2018.json new file mode 100755 index 0000000000..419f3b62e2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/GMC ACADIA DENALI 2018.json @@ -0,0 +1 @@ +{"input_std":[[9.589161],[1.6526152],[1.0296179],[0.04015747],[1.6503558],[1.6541231],[1.6558622],[1.6062601],[1.5521498],[1.4774255],[1.3901185],[0.04013376],[0.040141042],[0.040149838],[0.04013493],[0.040134083],[0.040017467],[0.03965995]],"model_test_loss":0.07666975259780884,"input_size":18,"current_date_and_time":"2023-09-01_17-07-09","input_mean":[[19.16097],[0.00023039858],[0.024997516],[0.0015251928],[-0.006199064],[-0.00511049],[-0.0036440035],[0.008816405],[0.013828324],[0.023007024],[0.03203006],[0.001499254],[0.0015097901],[0.0015188308],[0.0013762622],[0.0012122631],[0.000992458],[0.00083205965]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.8661245],[-1.5837955],[0.037068017],[0.004549992],[-0.0406839],[-3.848253],[-0.14788117]],"dense_1_W":[[1.2300965,2.5310688,-0.033882245,0.9913731,-1.4768931,-0.7604761,-0.016176367,1.7826718,0.97190374,-0.3524215,-0.12235129,0.7071725,0.08818652,-0.7926816,-1.0068728,-1.0829469,-0.41093853,0.41296145],[1.0410483,-2.4898872,0.031385656,-0.8418668,1.7300308,0.6604722,-0.22182828,-1.4516648,-0.7956896,-0.0052562924,0.3286437,-0.90743065,0.20010695,0.67364526,0.8678244,0.9458278,0.45917323,-0.4489016],[0.0042952006,-3.7682223,0.03752664,4.481959,-0.025753722,0.30079904,-0.80541074,-0.8990208,-2.967934,0.3142363,-2.034866,-0.29074013,-0.10882145,-1.6433034,-2.345314,0.3792549,0.5183762,-0.3828322],[0.0351331,0.4335407,-0.72822434,-1.1574517,0.33417597,-0.78198606,-1.2777231,0.73203385,0.5243073,0.3935317,1.6471862,-0.66806847,-1.2980176,-0.995225,0.578557,1.5086068,1.178342,0.093525246],[-0.034333024,0.2399623,0.7163214,0.4258642,0.051805,-0.27961543,0.13171966,-0.043525357,-0.11124441,0.7758175,-2.7231858,1.9812765,0.95424885,-0.516098,-0.3156276,-0.42034206,-0.43856654,-0.9159853],[-3.23608,0.62202907,-0.93510664,-0.31767273,-2.2818325,-0.97344154,-0.47527224,0.8959574,-0.07933676,-1.693229,0.29464307,1.5444574,0.3701407,-0.7764469,0.8500272,1.3425361,-1.7767322,-2.944946],[0.006447974,0.48928446,0.5253896,0.9540034,1.3740003,0.38989055,-0.19158112,-0.6142965,-1.4193783,-0.640289,2.1344078,-0.42348352,-0.5467218,0.13846552,-0.060432374,-0.4456313,0.39513004,-0.17451167]],"activation":"σ"},{"dense_2_W":[[0.75902075,1.1818918,0.018134926,-0.23670888,0.58994615,-0.3951398,1.2811865],[-0.08184867,0.43210924,0.42716455,-0.7389914,-0.42377943,0.07209329,0.11910895],[0.31956765,-0.7480974,-0.19422513,-0.552509,0.07628548,0.6062507,-0.7245184],[0.44447437,-0.041922443,0.13054374,0.43873626,0.6574541,-0.19836801,0.14220871],[-0.0037564328,-0.023460802,-0.6449217,0.5678689,0.5152597,-0.3669055,0.08844841],[0.409556,-0.89736575,0.58308125,-0.16765638,-0.2244067,-0.19765973,-0.13677762],[-2.7548218,3.2813652,1.3716445,-0.96946454,-0.47919014,0.23553993,-0.7080141],[-1.617764,-1.0463123,-0.82542264,0.027710665,0.9964338,-0.6431054,0.35499138],[0.742922,-0.4490962,-0.4472653,0.3055844,-0.051618654,0.53054106,0.6369738],[0.5263451,0.72935253,-1.4179851,-0.7053557,0.10821838,-1.4098617,0.006451496],[-0.32364398,0.039208733,0.77577096,-0.9521098,-1.4651095,-0.26427552,-0.2297292],[-0.5094321,-0.17350426,-0.05012927,-0.42607546,-0.0424127,-0.1761333,-0.87716746],[-0.07377011,-0.38419786,-0.05855057,-0.5455437,-0.9797012,-0.30153883,0.23297796]],"activation":"σ","dense_2_b":[[0.28105608],[0.062468283],[-0.008618305],[-0.010698113],[-0.022834778],[-0.19800517],[0.1661619],[-0.59834546],[0.022396281],[-0.39137623],[0.30498576],[-0.03527624],[0.02751272]]},{"dense_3_W":[[-0.0075695775,-0.27568746,0.09120304,-0.3263692,-0.4094352,-0.0785218,0.37749985,-0.3643959,0.5081887,-0.34113538,0.13756286,-0.17055227,0.43868554],[0.25493667,-0.3818253,-0.41074437,0.32864282,0.3402426,-0.13885908,-0.5030987,0.19186679,0.65157133,-0.14876194,-0.5428901,-0.08314285,-0.57639486],[0.57302797,-0.51000684,-0.18249922,-0.07923711,0.3147604,-0.16800596,-0.7434311,0.7116399,0.39529055,-0.40308496,0.15564886,-0.41269818,-0.55772877]],"activation":"identity","dense_3_b":[[0.033527393],[0.026104666],[0.027110972]]},{"dense_4_W":[[-0.087499,1.1460565,0.99249434]],"dense_4_b":[[0.025334533]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA,A150x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA,A150x00x00'.json new file mode 100755 index 0000000000..35fd803df5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA,A150x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.97151],[0.74501616],[0.33569595],[0.028122501],[0.7403551],[0.73829293],[0.7401743],[0.7252648],[0.7144178],[0.7009765],[0.6888075],[0.028033128],[0.028054733],[0.028070904],[0.027984012],[0.027977224],[0.027935864],[0.027860973]],"model_test_loss":0.007779959123581648,"input_size":18,"current_date_and_time":"2023-08-05_18-55-32","input_mean":[[24.977537],[0.008342045],[0.002733684],[-0.0039678486],[0.0046404926],[0.00584171],[0.006370007],[0.008761067],[0.010619238],[0.012941762],[0.014379741],[-0.0040723],[-0.0040712818],[-0.004070556],[-0.004221088],[-0.004329774],[-0.0044895913],[-0.0046329168]],"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.06255275],[-0.10187155],[0.7811029],[0.5233844],[-1.1382071],[-0.1777123],[-1.2519176]],"dense_1_W":[[0.11130547,-4.7213726,-0.47437814,0.11127721,-0.18916543,-1.6377331,0.9418644,-1.1306248,-2.1403713,-1.7070324,-0.64424783,-0.33537778,-0.09433337,-0.21594714,-0.18122146,0.16977471,0.10330264,0.19049811],[-0.0004276181,0.6357742,0.05217043,-0.20857349,-0.80013305,1.4368694,0.5090257,-1.1573409,-0.36113778,-0.1694356,0.4889256,0.09562526,0.070235886,-0.3155261,0.23921712,0.034688536,-0.078639016,-0.010847355],[0.7599186,2.121532,0.72905946,-0.14806178,0.5078854,-1.3953625,0.24837576,-0.44519806,-0.4571781,-0.11445646,-0.1446055,0.013272849,-0.096724935,0.31767842,0.0024148482,-0.38241157,0.518821,-0.24625751],[0.6820916,-1.5524395,-0.7604904,-0.09014856,0.14045534,-0.09164528,-0.043247532,0.71089435,0.00785311,0.5674591,-0.06433367,-0.0075882818,0.078265265,-0.1252983,0.23067287,-0.24010041,0.17806269,-0.0014166064],[-0.5627969,1.037751,-0.86133707,-0.49025095,-0.46149084,-0.9962395,0.5214078,-0.56174046,-0.39522848,0.08022861,0.518166,-0.3117448,0.23640868,0.2056402,0.45708388,-0.06492579,-0.064152785,0.03409542],[0.13577399,0.5898029,-0.45204794,-0.57214713,-1.5238308,-0.8625397,-1.3790354,-3.5523987,-1.6210394,-1.4617451,-0.67999744,-0.4513496,-0.03868263,0.0944409,0.544846,-0.21822882,0.50802565,-0.085099295],[-0.68000346,-0.7993309,0.8909783,0.27740914,0.51246107,1.4516846,-1.2700812,0.45289844,0.44953805,0.022532407,-0.5839419,0.20553645,0.1257213,0.067001835,-0.839108,-0.08893746,0.19246873,0.060739163]],"activation":"σ"},{"dense_2_W":[[0.085230306,-0.29360268,0.51161885,0.23618865,0.6497735,-0.26098794,-1.0364774],[-0.22014649,-0.24637136,-0.42513672,0.5623381,-0.12819354,0.14416225,-0.39033532],[0.7196067,-0.34021074,-0.5724672,-0.37321565,0.49308595,-0.9088214,-0.8430574],[0.19003648,-0.14491072,-0.39664307,0.27051845,0.005819935,0.22110407,-0.15665153],[-0.34837252,-0.96703774,-0.14450067,-0.3116821,0.3658192,0.21894221,-0.35829273],[0.11697895,-1.0484563,0.5595325,-0.5593309,0.18357657,-1.3186389,-0.31535873],[-0.3179443,0.6616187,-0.046228375,0.5932086,-0.54266274,0.59215814,0.18800579],[0.13047467,0.6949298,-0.24352126,0.11897494,0.0057367617,0.66297096,-0.010114408],[1.5367961,-1.7399038,-0.69597286,-1.7319793,1.36763,-0.45350328,-0.15131596],[-0.32002783,-0.03297229,-0.607617,-0.49017462,0.34876344,-0.28122258,0.258027],[0.36292878,-0.3491634,1.0256252,0.7740448,0.7382758,0.10291141,-0.99806124],[0.6031384,-1.1245648,0.40815106,0.7438041,0.6337614,0.10372877,-0.10575027],[-0.57705086,0.21220624,0.038151897,-0.33815548,0.2740102,0.01581186,0.541243]],"activation":"σ","dense_2_b":[[0.012299448],[-0.04102267],[-0.034108546],[-0.27925974],[-0.0057511167],[-0.22451408],[0.009193072],[0.0060836924],[-0.31634617],[-0.062315367],[0.12637672],[0.0059941616],[-0.06976539]]},{"dense_3_W":[[-0.20017228,-0.14052714,0.03923989,-0.60445774,-0.04527449,-0.12592994,-0.66201633,-0.54722226,0.1441803,-0.37791568,0.04386546,0.50280595,-0.020515436],[0.35166073,-0.20586215,0.5838703,0.58067,0.55858165,0.3304557,-0.64685065,0.090058595,0.35607472,-0.38356113,0.3500607,-0.088301666,-0.022835555],[0.54761213,0.07857258,-0.34005758,-0.28216037,0.5361241,0.3974213,-0.26704797,-0.3374281,0.6506741,0.3128651,0.540587,0.5345023,-0.60392904]],"activation":"identity","dense_3_b":[[-0.029276293],[-0.044624712],[-0.05815794]]},{"dense_4_W":[[-0.9044067,-1.1482185,-0.6116598]],"dense_4_b":[[0.036644172]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A140x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A140x00x00'.json new file mode 100755 index 0000000000..ab8badd20d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A140x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.992972],[0.761277],[0.33648303],[0.042408932],[0.76959854],[0.76725096],[0.7643645],[0.74037844],[0.7259183],[0.7094538],[0.6951536],[0.04228616],[0.042296555],[0.042313654],[0.042262528],[0.042218875],[0.04204096],[0.041743096]],"model_test_loss":0.02265222929418087,"input_size":18,"current_date_and_time":"2023-08-05_19-20-20","input_mean":[[24.21027],[-0.02817834],[0.013860759],[-0.0006401126],[-0.0324325],[-0.03152595],[-0.030524159],[-0.02442753],[-0.018565625],[-0.009745938],[-0.003067271],[-0.0006674106],[-0.0006681617],[-0.0006630953],[-0.0007476516],[-0.0006563686],[-0.0006758302],[-0.0007831018]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[3.7685766],[2.8427706],[-3.8559403],[-0.14407404],[-0.054108057],[-2.4449306],[-3.0141466]],"dense_1_W":[[1.8801908,1.4156594,-1.0323609,0.79236954,-0.80337536,0.58097416,-2.2510185,-0.1828844,0.15489013,0.27806175,0.015761895,0.25713542,-0.2735746,-0.14071672,-0.46098727,-0.13111337,-0.45133302,0.4580773],[1.8035195,1.6041955,0.8874118,-0.80396426,0.22453892,1.6733601,-2.4467292,-0.14284624,0.12720221,-0.07064604,-0.26454973,-0.114142805,0.27872777,-0.03267202,0.5485695,0.4108842,-0.18058304,-0.14545393],[-1.8154907,2.1600099,0.97071725,-0.58187705,0.003728732,2.3155384,-3.23783,-0.1090358,-0.13879994,0.10283042,-0.3239596,-0.13651542,0.10076348,0.14383954,0.36411935,0.49005857,-0.4234995,0.0010333508],[-0.013895141,-0.54229933,0.02395054,0.39421257,-0.9302867,3.529645,-1.1669548,-0.33310902,0.19925158,0.15934487,0.121357955,-0.34288648,0.6551107,-0.052651346,-1.2509402,-0.32869434,0.3425414,0.025959644],[0.038595013,1.9379244,3.9255502,-1.687313,0.69473827,1.657322,-2.1877844,1.0006453,-0.80904555,-1.0939405,-0.70684177,0.2738023,-0.4664105,-0.3705315,2.6731036,0.44496182,-0.3791093,-0.48865584],[-0.115257055,9.220496,-3.8134823,-4.2458467,9.2529545,9.778793,8.01551,7.5823874,4.997883,4.0989575,1.6614507,0.40712392,0.81142205,1.4502381,0.9823255,0.6349457,0.30227003,-0.36331397],[0.76528615,1.8912066,0.4003822,0.42052475,1.0807861,1.2272604,-0.09050154,0.26065364,0.34981024,0.48282778,-0.016957628,-0.016907506,0.46985832,-0.25855386,-1.092362,-0.57151246,-0.62681884,0.43833002]],"activation":"σ"},{"dense_2_W":[[-0.50458944,0.3265226,1.3503221,1.1455716,-0.24126105,0.30343592,-0.24365348],[-0.6311094,-0.504272,0.38552013,-1.1871966,-0.15529175,-0.5199216,-0.23288444],[-0.85456246,-1.0671792,-0.5235838,-0.058778144,-0.83717144,-0.25111958,0.6668136],[-0.18605676,-0.37535578,0.26066002,0.40830556,-0.26472908,-0.5714715,-0.4442903],[0.23003292,-1.1301463,-2.4274843,-0.6968535,-0.33779627,0.40726957,-0.7347456],[1.0467806,0.18329021,0.09319784,1.1631411,-0.15507531,0.493985,0.5579849],[-0.08045475,-0.05917078,-0.4645429,-0.6068606,-0.0685764,-0.17900154,-0.62299603],[-0.42154956,0.20449437,-0.698377,-1.0489599,-0.028300853,0.43246627,0.25651544],[-0.19329518,-0.8510341,1.2749082,1.3596451,0.8580042,0.60158896,-0.30835444],[1.9168442,2.0033686,-1.2564323,-0.30960408,1.3287855,2.8171167,0.6671751],[-1.4893216,-1.6534694,0.564758,0.19810775,-1.1537246,-2.037296,0.047834612],[-0.201097,-0.20977359,0.9980199,0.017591937,0.5220423,-0.32709578,-0.040991563],[-0.76144993,-0.66945726,-1.386429,-0.21879196,0.1684756,-0.07748325,-0.59191686]],"activation":"σ","dense_2_b":[[-0.7321166],[0.11477704],[0.19248009],[-0.20476317],[-0.01635628],[-0.306795],[0.14476658],[0.30890986],[-2.4419878],[-0.5385942],[0.10476772],[-0.5766014],[0.20005944]]},{"dense_3_W":[[-0.0791274,-0.7011603,-0.44377816,0.48128963,-0.21547104,0.16660322,-0.2547173,-0.44273084,0.101601996,-0.053882852,0.19060013,-0.3184192,-0.04856416],[0.54122835,-0.97574085,-0.4281066,0.53716606,-0.91660917,0.52668923,-0.25096038,-1.0447183,0.5229288,0.3251163,-0.78397036,0.10469802,-0.14347981],[0.17414881,-0.19212788,-0.57071036,-0.3887359,-0.38976607,0.53497523,-0.30920812,-0.97329575,0.73605007,0.53398937,-0.44441673,0.50344443,-0.57531935]],"activation":"identity","dense_3_b":[[-0.070742786],[-0.16557649],[-0.13552403]]},{"dense_4_W":[[0.26535642,0.6260712,1.0967736]],"dense_4_b":[[-0.12048781]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A150x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A150x00x00'.json new file mode 100755 index 0000000000..63d3b65564 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A150x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.9692955],[1.0462041],[0.34472412],[0.04641226],[1.0452274],[1.0453075],[1.0450946],[1.024636],[1.0050676],[0.97589207],[0.9462255],[0.046267003],[0.046294868],[0.046317346],[0.04618255],[0.045980483],[0.04564968],[0.045252338]],"model_test_loss":0.03223121911287308,"input_size":18,"current_date_and_time":"2023-08-05_19-47-05","input_mean":[[26.72697],[0.015196333],[0.008158946],[-0.0072922846],[0.016061665],[0.01694688],[0.017287692],[0.020473402],[0.024061868],[0.02608422],[0.026487894],[-0.0072585293],[-0.0072514866],[-0.0072510433],[-0.007187894],[-0.0071194707],[-0.007084319],[-0.007147751]],"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.0053709066],[-0.069100745],[-0.24173476],[0.018720765],[-2.658498],[0.08992927],[2.6063461]],"dense_1_W":[[-0.7797147,-0.24583623,-0.88254195,0.0173836,-0.50750786,0.37038887,-0.8329198,-0.342489,0.24630426,0.21707475,-0.047959063,0.47431317,-0.025067769,-0.41275406,-0.17909347,-0.19092616,0.17230788,0.10136766],[-0.0012605502,-0.5430936,1.951147e-5,-0.18644217,0.56073266,-1.5806167,0.08031272,0.4637494,0.53803164,0.043792747,-0.41318613,-0.3511995,0.12757961,0.05843077,0.29561853,0.32287258,0.29052848,-0.35279953],[-0.015627703,1.0913446,5.4548607,0.0019527893,0.9042406,1.312217,-0.92229325,0.8994472,0.37474668,-0.73789614,-2.0389037,0.49409056,0.22369379,-0.06340535,-0.74901664,-0.085118875,0.23661421,0.09581273],[-0.022811597,0.30691484,0.77790153,-0.02884179,0.04066356,1.4911604,-1.467617,0.43204272,0.48140588,0.09566626,-0.42150202,0.3869267,-0.04126597,-0.44423687,-0.16106682,0.30693826,0.23328182,-0.23946704],[-1.2928423,0.067281894,-0.6787146,0.3759086,0.24533954,-0.6795638,0.03710647,-0.2054399,-0.6824192,-0.3679239,0.65891474,-0.48138765,0.090168886,0.6424454,-0.5723904,-0.41047156,0.18585621,0.14156008],[0.68296534,-0.64913756,-0.82184064,0.2655869,-0.41704178,0.9174468,-1.6555954,0.287859,0.48787528,0.13453256,-0.17992531,0.38143292,-0.23726897,-0.35850066,-0.29180393,0.050075218,0.19315714,-0.028771134],[1.3216897,-0.29175788,-0.6859045,0.14724936,0.10884442,-0.5644274,0.24575797,-0.0428606,-0.6327769,-0.36707297,0.61235654,-0.16210133,-0.01487571,0.30677927,-0.28883606,-0.2559978,0.18417324,0.053345177]],"activation":"σ"},{"dense_2_W":[[-0.103882276,0.31470892,-1.8375779,-0.534572,1.2007096,-1.7940954,-0.37573653],[-0.63279027,0.9299332,-0.111214824,-0.7431275,0.8024956,-0.55281454,0.28450286],[-0.43225008,0.60088736,-0.26085025,-0.39814708,-0.08506316,0.01633656,0.33291754],[0.039310254,0.47769195,-0.5393823,-1.6670729,1.3035929,-1.0608637,0.5870348],[-0.1174263,-0.97375834,-0.027412066,0.6608341,-0.37277678,-0.4925518,0.28332362],[0.13831323,-1.0317672,4.1466556e-6,0.27205467,-0.22654021,0.6352973,-0.3061979],[0.68478835,-1.1200122,0.49105233,0.0025720224,0.11970721,-0.31467515,-1.128045],[0.11189791,0.6215034,-0.6437067,-0.7515869,0.058660362,-0.32508639,-0.108250536],[-0.5286013,-0.16399997,0.6210019,0.64366394,0.22958006,0.18419576,-0.4012846],[-0.70348305,1.2658945,0.02501988,-0.935665,0.26696518,-0.5101827,0.6538908],[-0.21789736,0.6723394,-0.08539437,-0.8460047,-0.17483915,-0.37412062,0.7993581],[-0.8686919,-0.66447544,-0.6087589,0.24117005,-0.79812706,-0.9840042,1.0074927],[0.6557862,-1.2507699,-0.37768507,1.1560878,-0.24072878,0.6311272,-0.6242684]],"activation":"σ","dense_2_b":[[-0.19177495],[-0.112480655],[-0.089774124],[-0.34718063],[-0.112820394],[0.057589203],[-0.093300395],[-0.1753979],[0.019089865],[-0.034315366],[-0.085869856],[-0.38535318],[0.14190724]]},{"dense_3_W":[[0.5097348,0.67754096,0.52962065,0.04817331,-0.6922436,-0.36220315,-0.4028201,-0.46196294,-0.2545076,0.557987,0.46720836,-0.22117886,-0.4909693],[-0.46042284,-0.23727898,-0.3391561,0.04250506,0.65917873,0.33226073,0.61423135,-0.32596922,0.18013869,-0.7446482,-0.4805382,0.3051152,0.55622435],[0.6239629,0.6955541,-0.18727995,0.826164,0.35150817,-0.6036857,-0.46225572,0.246462,-0.12272623,0.59749544,0.039747227,-0.07667652,-0.95489794]],"activation":"identity","dense_3_b":[[-0.0060902396],[0.04111355],[-0.06983808]]},{"dense_4_W":[[-0.19373165,0.73869556,-0.8776082]],"dense_4_b":[[0.047680747]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A160x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A160x00x00'.json new file mode 100755 index 0000000000..cb334ad936 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A160x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.49194],[1.0090374],[0.32741097],[0.04503255],[1.0046614],[1.0036002],[1.0027647],[0.9775086],[0.9545954],[0.92410934],[0.8945295],[0.04490622],[0.04489754],[0.044878017],[0.044477623],[0.044133097],[0.043632846],[0.043093666]],"model_test_loss":0.033570460975170135,"input_size":18,"current_date_and_time":"2023-08-05_20-15-32","input_mean":[[26.035246],[0.045233466],[0.010294131],[-0.0072865174],[0.044775],[0.04602094],[0.047530252],[0.051602263],[0.055537395],[0.058699816],[0.059884205],[-0.007372401],[-0.007366469],[-0.0073642046],[-0.0073072882],[-0.0073471284],[-0.007360663],[-0.007469154]],"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.09299513],[0.99559826],[2.2766173],[-3.9771109],[0.12520352],[2.4193058],[2.7656164]],"dense_1_W":[[0.008882242,-0.5422807,-0.0002336353,0.01617526,0.8583874,-2.4942827,1.4216851,0.1248724,-0.13589047,-0.066334665,0.02762919,-0.4940848,-0.12450009,0.18496531,0.49923882,0.27323833,0.054380663,-0.27277908],[-0.15047085,11.108585,8.433331,3.1956594,1.8067094,3.30043,2.734295,3.0606732,3.369255,1.1053773,0.6848547,-1.8516142,-1.1967942,-1.1085081,1.346842,2.6222417,-1.195061,-1.624805],[1.3133404,-0.12083638,0.0007961169,-0.23202601,0.6129334,-1.6041852,0.99454767,0.15254462,0.20371678,0.24268706,-0.3928021,0.049325507,-0.054227505,0.55261385,0.059264336,-0.5856581,-0.03817136,0.28743318],[-1.9012314,1.385867,-2.025853,-1.0055757,-0.64875823,-1.7402864,-0.42040223,-1.4739327,-0.64548254,-0.48058653,0.87804145,-0.050029688,0.5145021,1.2076339,-0.2322068,-0.68835676,0.28086215,0.25951275],[-0.038164284,-0.08451804,3.1345243,0.2487556,1.0404258,1.7846637,-1.8702495,1.0127681,1.2862203,-0.032533776,-1.9886582,0.072810635,0.18250643,-0.6539082,-0.2870161,0.005425706,0.010262065,0.17513292],[1.34946,0.29742,0.00049295614,-0.22644196,-0.42795974,0.8740508,-0.4660372,-0.6542262,0.14851026,-0.060079012,0.21750873,0.15181087,0.2850322,-0.53175086,0.41612315,-0.11555391,-0.049993888,0.019541081],[1.7984701,0.3795027,-1.8703946,0.18217215,-0.52728933,-1.2252984,-0.2807449,-0.83578867,-0.8151141,-0.3777622,0.8302332,-0.33189002,-0.012024458,0.4554754,-0.05377574,0.08181595,0.11449017,-0.13549945]],"activation":"σ"},{"dense_2_W":[[0.30057818,-0.5125399,0.08678791,0.5703662,-0.16577314,-0.51497936,-0.59201944],[-1.3349988,0.17055506,-0.40969828,0.1002354,-0.40812024,0.7593544,-0.021026442],[-1.3476006,-0.307753,-0.39836642,0.32035866,0.34645033,0.6541528,-0.11978619],[1.0706519,-0.11172953,0.13594998,-0.31495008,-0.17336859,-0.90303296,0.30903512],[0.11788255,-2.1570463,-1.473401,2.0036843,-0.18897057,-2.3958793,-0.489127],[-0.21737087,0.70327544,-2.0328362,-0.14981914,0.34608698,-0.9596065,-1.543088],[0.7181709,-0.18646976,0.84519434,-0.08900306,-0.12886512,-0.6509856,-0.035224058],[-1.3900654,-0.39416093,0.0057178154,-0.22539444,0.1284596,0.5915423,0.25858587],[0.40323433,-1.4929813,2.3567243,-0.35257843,-0.23848845,1.4922398,2.6448793],[-0.3958001,-0.25138742,0.13818374,0.0016877509,-0.07190418,-0.27509594,0.43224633],[-1.0602188,-0.05900237,-0.8719072,0.28974754,0.6910853,-0.03215386,-0.3785859],[0.6947681,-0.27714795,0.06559979,0.9486355,-1.0534314,-1.2011576,-0.5980476],[-0.08220092,-0.34411815,-1.0552499,-0.42018646,-0.3000449,0.052615464,-0.306543]],"activation":"σ","dense_2_b":[[-0.4391624],[0.23300678],[0.056632668],[-0.34913296],[-0.46800882],[-0.24273382],[-0.2016009],[0.15158728],[0.24031189],[-0.49144945],[0.21675928],[-0.42321655],[-0.055365965]]},{"dense_3_W":[[0.25063983,-0.8822437,-0.051102765,0.49928358,1.177921,-1.1238751,0.28403863,-0.6484505,0.8230714,-0.17540641,-0.6073617,0.35004044,0.10672483],[0.3259577,0.17100744,-0.71396255,-0.010511353,0.86950207,-0.7843216,0.55835444,-0.5223806,0.10780978,0.22867572,-0.6069358,0.73018676,-0.6146279],[-0.26045316,0.07879293,-0.5699643,-0.46051645,-0.0956609,0.3587972,0.029547071,-0.5279882,0.38736728,0.37889102,0.40453973,0.2636936,0.11244217]],"activation":"identity","dense_3_b":[[-0.107788354],[-0.055486],[-0.051283088]]},{"dense_4_W":[[-1.1602503,-0.75891525,-0.0110743595]],"dense_4_b":[[0.06482917]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A340x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A340x00x00'.json new file mode 100755 index 0000000000..7def5a2d03 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018 b'39990-TVA-A340x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.285257],[0.90969217],[0.3262842],[0.04224495],[0.90321463],[0.9048089],[0.90605587],[0.8943948],[0.880907],[0.86333126],[0.8418114],[0.04201932],[0.042064562],[0.042102545],[0.042084828],[0.041905332],[0.041611735],[0.041251395]],"model_test_loss":0.016588984057307243,"input_size":18,"current_date_and_time":"2023-08-05_20-42-14","input_mean":[[26.176859],[0.00011118907],[-0.004803623],[-0.0135722],[0.001126639],[0.00071867846],[0.00035347088],[-0.0023926632],[-0.0049975757],[-0.004179076],[-0.0032093525],[-0.01355709],[-0.013565135],[-0.013578342],[-0.01361649],[-0.013766948],[-0.013810823],[-0.01394108]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.5828786],[-0.42487454],[-0.5860775],[-0.3924228],[-4.156905],[-0.060464315],[1.6714457]],"dense_1_W":[[-1.2391292,-0.7255202,-0.7149997,0.16955006,0.43161064,-1.5196625,1.2468553,-0.071515016,-0.041017335,0.027320042,0.08827585,-0.62211466,0.2565574,0.14729472,0.09935687,-0.08157328,-0.15545787,0.21235037],[0.54294,-0.9017544,-0.0015285303,-0.2486782,-0.37458047,1.867659,0.01736451,-0.52015305,0.17510238,0.05885162,0.15736608,0.7702755,0.0045363996,-0.46379182,-0.20661989,-0.33729848,0.1395115,0.17314467],[0.6333146,-0.64309436,-0.0016357203,-0.30024365,0.29567558,-1.1414801,0.6359127,0.46182653,-0.16813087,0.29373816,-0.25674814,0.16211522,0.2612078,-0.11247607,-0.17053197,0.25727552,0.15015963,-0.07780689],[0.08204409,-5.296336,-0.19631286,-0.30446285,-0.9166598,-1.578382,-0.9072005,-1.8740348,0.8618472,-2.1606903,-2.506682,-0.087750815,0.7405412,-0.10877983,-0.024537828,-0.5145231,-0.0984921,0.3776963],[-1.5639482,0.6270082,0.92740273,0.1320447,-0.30681872,0.91045624,-0.56207407,-0.07224428,0.57218313,-0.25058916,-0.15184608,0.48521915,-0.37326074,-0.096426256,-0.2717795,0.17715892,0.36343423,-0.44790557],[-0.019131253,0.82311773,1.8916593,0.21888073,-0.06414682,1.3677776,-1.2980947,0.51103127,-0.04186381,0.18803987,-1.2860446,0.67675817,0.24575692,-0.7166477,-0.42896202,-0.12064442,0.21754202,0.05445969],[1.5609717,0.27270493,0.9630874,0.08518879,1.0404123,-0.8161039,0.7068876,-0.20095998,-0.16304882,-0.29293203,0.28063586,-0.076921694,0.19091095,0.4278214,-0.5607254,-0.02762551,-0.001111984,-0.07030928]],"activation":"σ"},{"dense_2_W":[[0.2804132,-0.13895643,-0.23771775,0.47444814,-0.51085377,0.21878356,0.58479327],[-0.08321861,0.14579421,0.2814126,0.52304,-0.293537,-0.47646093,0.5845127],[0.26914057,-0.34944284,0.74141604,0.1236916,-0.09920406,-0.060909335,-0.06005805],[-1.4356169,-0.5180524,-0.72453684,-2.6035,1.435797,0.60814214,-2.9555132],[0.64786196,-0.09151601,0.47274497,-0.39977676,0.17197065,0.18651703,-0.16694967],[-0.80667734,0.9907132,-0.91753274,-0.005180825,0.22297877,0.24063785,0.1417271],[0.20353276,0.099244505,-0.029554786,0.5615652,-0.33194682,-0.45568216,0.16432087],[-1.2388202,0.42652553,-0.1761103,0.36473453,-0.060970604,0.45147756,-0.7594475],[0.012322099,-0.51204675,0.38572678,0.2549631,-0.4418449,-0.29435337,-0.19872236],[0.077596396,-0.70494324,0.2179608,-0.23151939,-0.16577247,0.16438329,-0.37517852],[0.20178632,-0.62199104,0.48660368,-0.2870354,-0.6407446,0.41582656,-0.29254413],[-1.0518187,1.1063659,-0.7544956,0.10702813,0.74395657,0.15702203,-0.1864767],[-0.63775724,0.34627312,-0.8619933,0.04293425,0.6597697,0.645077,-0.7322161]],"activation":"σ","dense_2_b":[[-0.001978294],[-0.009128096],[-0.017481709],[-0.4458992],[-0.015151555],[0.05412811],[-0.004844698],[-0.04905217],[0.017835202],[-0.26468143],[0.030852908],[-0.028026102],[-0.08113619]]},{"dense_3_W":[[-0.10027717,-0.504976,-0.472057,-0.09842345,-0.41717574,-0.31354278,0.41566893,0.29177436,0.5562917,0.4179752,-0.17883797,0.6059956,0.37823814],[0.060615566,0.5161335,0.050068315,0.41364664,-0.19892827,0.60002375,-0.19573946,0.4755645,-0.5418251,0.06393862,0.15766098,0.7054907,-0.1107634],[-0.44845265,-0.60228455,-0.46412948,0.21494012,0.00026316356,0.37754428,-0.21720393,0.6286488,-0.5957711,-0.18741381,-0.5058221,0.7328814,0.5197948]],"activation":"identity","dense_3_b":[[-0.029418001],[-0.060718555],[-0.032819174]]},{"dense_4_W":[[0.072936475,0.9442555,1.3265595]],"dense_4_b":[[-0.036884606]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018.json new file mode 100755 index 0000000000..bb7963bab7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD 2018.json @@ -0,0 +1 @@ +{"input_std":[[9.558472],[1.1135993],[0.35501274],[0.045823593],[1.1077218],[1.1080649],[1.1080468],[1.0821772],[1.0575596],[1.0226434],[0.98659563],[0.045627955],[0.045635287],[0.04563911],[0.045467082],[0.045263745],[0.04491611],[0.044533264]],"model_test_loss":0.039052750915288925,"input_size":18,"current_date_and_time":"2023-08-05_18-06-12","input_mean":[[26.136148],[0.014033704],[0.008476357],[-0.007713262],[0.014445406],[0.015386044],[0.016355403],[0.020506991],[0.024135882],[0.026870549],[0.02935421],[-0.007780166],[-0.007770314],[-0.0077639683],[-0.0077210055],[-0.007739751],[-0.007798479],[-0.00789042]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.1487079],[4.2139845],[-0.5853092],[0.3086539],[0.032987785],[-4.7810106],[0.016952101]],"dense_1_W":[[0.033758555,1.0444518,3.6611536,-0.40075377,0.7095827,1.3611814,-2.1352289,0.96489286,1.8126475,-0.62583995,-1.966803,-0.1734821,0.15852115,-0.3967776,-0.14440706,0.8157315,0.17390618,-0.23260796],[2.1500878,-0.45053038,1.2581933,-0.05246604,0.5019536,1.7019817,-1.8193591,1.3068173,1.0780432,0.6126558,-1.1160796,0.19838658,-0.084695324,-1.2091074,0.5595109,0.74877197,0.30207658,-0.6453137],[0.458296,-0.21370786,0.0019734737,-0.30963984,0.8088786,-1.7420303,0.60466176,0.14915113,-0.12689793,0.052364115,-0.042618364,-0.5170238,0.26220888,0.18760274,0.37973043,0.15806,0.0022146539,-0.07045257],[-0.66763306,-0.4096175,-0.0016955894,0.04425929,0.21008201,-1.7331837,0.9467672,0.58569306,0.23827136,-0.2415081,-0.15301658,-0.28669143,-0.2599793,-0.11007419,0.6052918,0.17952923,0.24594603,-0.31397706],[1.0145541,-0.3317505,-1.4991609,0.013690285,-0.9575213,-1.383604,0.028956244,0.41788918,0.24457058,-0.094164655,-0.13030116,0.17948826,-0.03794582,0.01309437,0.35534826,-0.26917398,-0.29215142,0.27303904],[-2.7000756,0.31637338,1.4000112,0.08876083,0.6678543,0.9836755,-1.5750684,1.1129849,0.9943397,0.5684742,-1.1145275,0.5888766,-0.13174123,-0.9658693,-0.413828,0.7263344,0.11292254,-0.23350726],[-0.12401558,5.324601,7.171819,-0.19341947,2.5473533,3.2746146,3.0563648,3.367963,2.8771386,2.6749191,2.9917984,-0.14726077,-0.13394955,-0.76174796,1.426001,1.2234408,-0.7090158,-0.6628128]],"activation":"σ"},{"dense_2_W":[[0.5621434,0.992517,-0.6983796,-0.91716,-0.054338105,0.607339,0.45212823],[0.22474639,0.22895367,0.6111215,0.046989255,-0.030409865,-0.61481434,0.10029722],[0.16454774,-0.29756203,1.1110828,0.59235257,-0.18411039,-0.6023632,-0.23720202],[-0.3528499,-0.6570399,0.49941105,0.47395417,0.27583507,0.08116056,0.20804141],[0.07139761,-0.070093624,0.5590774,0.7634218,-0.49971566,0.5975401,0.7334796],[0.44444433,1.8885437,0.35532534,-0.82639766,1.279296,-0.86160696,2.6706583],[0.44448185,-0.24610248,-2.495731,-0.89490926,0.11747124,0.62402964,0.5182057],[0.23551048,0.42742857,-0.5775537,-0.6272091,-0.27731383,-0.09396491,-0.51651603],[0.42865852,0.32447976,-0.29923168,0.340756,0.013832209,0.41082326,0.21667421],[-0.32736444,0.4769656,0.977129,0.5856738,0.10249221,-0.54967755,-0.2428743],[0.25369433,-0.2204579,-1.0649059,-0.2733619,-0.049029216,0.4437149,-0.11450898],[-0.24868779,0.44613084,-0.27166238,0.5614397,0.5230158,-0.24676293,0.17946567],[-0.2634003,-0.48613355,-0.04385666,-0.65893304,-0.30746424,0.15454659,-0.53632504]],"activation":"σ","dense_2_b":[[0.19822486],[0.017528722],[-0.010497578],[-0.06445187],[-0.039755665],[0.17356244],[0.025937805],[0.023149397],[0.002431535],[0.006409766],[0.0033689209],[-0.057484128],[-0.2775116]]},{"dense_3_W":[[-0.647888,0.20968881,0.6033078,0.67215437,0.20472567,-0.14839841,0.13453817,-0.14604588,0.00843544,0.2830037,-0.54673946,0.60688186,-0.4934583],[-0.18505706,0.2708935,-0.37541804,-0.3327015,-0.14934263,-0.59043384,-0.5975454,-0.34455526,0.34356502,-0.1237087,0.032155972,-0.11825379,0.032004077],[-0.12307207,-0.14105205,-0.69863325,-0.65025413,-0.45728275,0.5245935,0.46122637,0.372422,0.2177389,-0.6267706,0.32869118,0.34049797,-0.5515101]],"activation":"identity","dense_3_b":[[0.028380467],[0.04344171],[-0.028022127]]},{"dense_4_W":[[-1.151408,-1.0946046,0.9045305]],"dense_4_b":[[-0.033447456]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A150x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A150x00x00'.json new file mode 100755 index 0000000000..041149b412 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A150x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.3568473],[0.6368644],[0.3621445],[0.028429369],[0.62337],[0.62633],[0.63082033],[0.62320864],[0.6176417],[0.609843],[0.602721],[0.028280454],[0.028343052],[0.02838899],[0.028202886],[0.028042728],[0.027971348],[0.027896484]],"model_test_loss":0.02074519358575344,"input_size":18,"current_date_and_time":"2023-08-05_21-36-06","input_mean":[[26.268566],[0.014088257],[-0.00889927],[0.0067222156],[0.017173024],[0.01741099],[0.016948618],[0.01863091],[0.019397574],[0.02196835],[0.023213096],[0.00668622],[0.0066892426],[0.0066930084],[0.0068618897],[0.0069062025],[0.006895933],[0.0069377027]],"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.1995587],[-0.47429535],[0.19334412],[-0.21672982],[-0.27716032],[5.8877892],[-6.008035]],"dense_1_W":[[0.0005194978,-0.65315354,-0.057737853,-0.39396256,0.30802312,-0.3239047,-0.3970071,0.88091785,0.6602338,-0.077789664,-0.5863329,-0.12479964,-0.2263099,-0.25829545,0.61697304,-0.15929471,0.24446645,0.021373697],[0.5315006,-0.45457247,-1.5373756,-0.22400512,-0.48288196,-0.21536522,0.08653377,-0.15771005,0.08480614,-0.34505862,0.6252429,0.2198124,-0.3875561,0.6826408,-0.26497376,-0.31600574,0.32690576,0.039243232],[-0.011016559,-0.22290792,0.047274135,0.31294435,0.36215684,-1.1929703,0.9624354,0.27155292,-0.23349008,0.23899989,0.012858517,-0.025381617,0.097487696,0.21736427,-0.060409587,-0.03895033,-0.039632954,-0.16827586],[0.007530679,0.6272331,-5.9082806e-5,-0.50064355,0.1890715,-1.4997022,0.2494477,0.34411368,-0.11911669,-0.1729306,-0.111411996,-0.31751806,0.31902125,0.4071708,0.19330676,0.046474922,-0.055167746,0.06530873],[0.06477413,-0.4143308,-1.1347487,0.49881503,0.3372273,-1.0338107,1.5387237,-1.2813011,-0.96986556,-0.06861591,1.1139094,-0.5686622,-0.1382266,0.59405875,-0.5119853,0.44440156,-0.27856424,0.061716564],[2.6618116,-2.6944232,-1.6849242,0.2943839,-1.2206858,-1.6760917,3.2621088,-1.346089,0.12785757,0.65797406,0.23447312,-0.2641723,-0.09202524,1.2026188,-0.35406348,-0.22568066,-0.22311862,0.33460006],[-2.524092,-1.1037054,-1.5745661,0.34811226,-1.0722256,-1.469448,1.1310738,-0.79519266,0.23566909,0.520147,0.04779183,0.06821212,-0.044598527,0.48379797,-0.09668029,-0.31965488,-0.022990584,0.22089563]],"activation":"σ"},{"dense_2_W":[[0.1452953,0.44373477,-0.37055212,-1.237667,-0.33072272,0.5906958,-0.72541124],[0.6050153,0.18081863,0.3219009,0.53810394,-0.27058914,0.5653902,0.39473966],[0.0072378046,0.33330625,-0.50146735,0.26918072,0.094004184,-1.0713059,-1.8176602],[-0.7740321,0.14885269,-0.049412318,-0.6021773,-0.15935902,-0.29204068,-0.23126967],[0.75276387,0.49135745,0.13820073,0.2738786,0.5364459,-0.13695998,0.109765306],[-0.495929,-0.5069509,-0.6110922,0.14872241,-0.74613875,-0.9538579,-0.4567764],[-1.0281471,0.62180805,-0.96085227,-1.6853067,0.018576303,-0.8588159,0.68361557],[0.42588946,-0.26907757,0.23912542,-0.06811771,-0.74220026,-0.27280283,-1.2218596],[-1.1149594,0.066279486,-0.9029124,-0.71226245,-0.06838502,-0.7946668,0.5717353],[0.45661336,-0.17646663,0.58106536,0.08798294,0.60043395,-0.07761284,0.7525004],[0.30987135,0.21097131,-0.16904172,-0.14777327,-0.11339709,-0.52481216,-0.03865954],[-0.060135614,0.019844456,-0.67346084,-0.35991776,-0.121882424,-0.61238956,-0.2918601],[-0.02398618,0.007916715,-0.40608528,-1.0254555,-0.35098127,0.23078367,-0.19067071]],"activation":"σ","dense_2_b":[[0.23936874],[-0.3634644],[-0.44582018],[0.06315371],[-0.2324115],[0.027791763],[0.3565209],[0.23263572],[0.25501364],[-0.33273873],[-0.29837456],[-0.15084697],[0.25726482]]},{"dense_3_W":[[0.046232812,-0.440931,-0.15037328,0.43493935,-0.51912284,0.045042932,0.88925415,0.14369765,0.78630996,-0.7177186,-0.17527293,0.22752169,0.6153992],[-0.54912806,0.433324,-0.35273063,-0.044021495,0.6402973,-0.35384876,-0.6985052,-0.6068913,-0.81778973,0.5319122,-0.07269251,0.13063483,-0.69683],[0.5169438,-0.35359862,-0.10132895,0.11897226,-0.085469395,-0.16861942,-0.08650058,0.37113622,0.70226514,-0.23939428,-0.13833824,0.02503397,0.38701722]],"activation":"identity","dense_3_b":[[0.04381452],[-0.016084831],[-0.0028816245]]},{"dense_4_W":[[0.72029024,-1.1095761,0.230978]],"dense_4_b":[[0.024953682]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A160x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A160x00x00'.json new file mode 100755 index 0000000000..0583af9d50 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A160x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.052148],[0.99393505],[0.34106338],[0.043077335],[0.9844239],[0.98582995],[0.9884839],[0.9738173],[0.9590651],[0.93786967],[0.91432065],[0.042897582],[0.042924967],[0.0429479],[0.042887576],[0.042719226],[0.042463634],[0.042128034]],"model_test_loss":0.02400932088494301,"input_size":18,"current_date_and_time":"2023-08-05_22-02-42","input_mean":[[26.74306],[0.04475667],[0.0005680814],[0.005798226],[0.042986136],[0.042365443],[0.042118706],[0.042853605],[0.043510012],[0.047170512],[0.0480464],[0.005632593],[0.00564793],[0.0056592273],[0.0056284214],[0.0056102416],[0.00559482],[0.0054539493]],"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.14669883],[2.0542202],[3.5631552],[-2.4476655],[-1.6368238],[-0.08192704],[-0.12643908]],"dense_1_W":[[-0.002688858,0.903495,-0.0039008197,0.536614,-1.0010473,2.6391416,-1.4351965,-0.39022684,0.040289626,0.0038532107,0.1117465,-0.15723981,0.1849457,-0.3804201,-0.23395342,-0.027777348,-0.09085117,0.051439773],[1.4187059,-0.71839726,-1.4857477,-0.35429287,-0.29257032,-2.1014547,0.87460905,-0.5020713,-0.10428327,-0.08505193,1.1532818,0.29176822,0.12277781,0.4743827,0.03149446,0.2719759,-0.03777604,0.085584775],[1.8566557,-0.24062611,-0.0011948039,-0.101594344,0.04939513,0.19952813,-0.5482559,0.44138482,0.08667071,0.23756696,-0.270445,0.122838944,0.38297632,-0.2767516,-0.02534552,-0.11921599,-0.26003793,0.28193194],[-0.0047300863,-6.341346,0.008009274,4.7131796,-6.4125834,-6.832203,-4.170335,-4.4403443,-2.5265903,-2.792916,-0.96007043,-1.32485,-1.5275828,-2.0901973,0.05010127,0.5274726,-2.8127787,2.2884195],[-1.0541825,-1.1389667,-1.393989,0.049987935,-0.75335485,-1.2349916,0.44251662,0.024381286,0.071242295,0.017732512,0.83954465,0.23342346,0.104376666,0.39074865,-0.07692479,0.06292374,-0.20384182,0.2776107],[0.004347823,-2.0705073,-5.136332,1.5171243,-0.83530605,-0.83658594,0.6289342,-0.030435214,-0.09875959,1.0472045,0.6507859,-0.7110026,-0.61495453,-0.09955488,0.4563318,-0.39846316,-0.25004956,0.01138379],[0.028734487,-2.2628179,0.006837875,-0.67525387,-0.19999692,2.3506331,-0.6480495,0.32595164,0.22536819,0.17169411,-0.05625255,0.47865602,0.5283645,-0.26655892,-0.1795276,-0.25767052,0.1652347,0.17300352]],"activation":"σ"},{"dense_2_W":[[-1.7424338,-0.51204246,0.36681414,-0.43318233,0.26413685,-0.24067368,-0.4046541],[1.6531072,-0.47434783,0.02790722,-0.27149042,0.1917067,0.12952308,0.33537757],[1.2889733,-1.1361824,-0.624928,0.42658234,-0.23174223,0.11642459,0.93661875],[0.030492313,-1.5744985,0.3470011,-0.67208254,-0.35061973,-0.7376617,-0.118316226],[0.8261336,-0.8387976,-1.5988837,-0.8216873,-1.0717056,-0.3048729,0.8943968],[-2.0692046,0.5661956,-0.6376975,0.22744314,0.0028517665,0.22136337,-0.797771],[-0.2306479,-1.9774442,-3.616496,-4.481281,1.9556458,-0.058455996,1.4602649],[-1.3596288,-0.67229724,-2.6969142,0.41598597,1.6690115,1.0873245,-1.388754],[1.200881,-1.2607982,-2.0214107,-0.56441516,-0.6533298,-1.6340346,1.1757377],[-1.5519762,0.5947591,1.1866498,0.121581264,0.16602829,0.52355,-0.65718275],[1.1053609,0.028224928,0.8389564,-0.036384143,-0.54692584,-0.015354119,0.9502837],[-1.2469714,-0.28302318,-0.9857567,-0.46757036,0.2623652,0.31925344,-0.7774453],[1.5188146,0.4473179,1.9020143,-0.43271357,-0.99845284,-0.8403063,1.144983]],"activation":"σ","dense_2_b":[[0.071747996],[-0.24544376],[-0.40959486],[-0.14752373],[-0.56056744],[-0.035408586],[-0.76051474],[-0.42436004],[-0.28535128],[0.28020537],[-0.13632238],[-0.005974313],[0.43866658]]},{"dense_3_W":[[-0.6859634,-0.23211952,0.55380285,-0.090849504,-0.20580705,-0.28912854,-0.020036949,0.46019077,0.004479716,0.4496421,-0.14756668,0.32039902,-0.050126474],[-0.7476754,-0.19232515,0.4732885,-0.7891429,0.37273914,0.03617925,1.9029447,-1.6632549,0.3088266,-0.24991319,-0.35748976,0.24193496,0.3710967],[0.40051168,-0.4676041,-0.25612128,0.11686202,-0.45049718,0.7905412,-1.0448263,1.1216654,-0.95308435,0.618275,-0.58974785,0.43219963,-0.43541226]],"activation":"identity","dense_3_b":[[-0.07793948],[-0.0012238226],[0.19977793]]},{"dense_4_W":[[-0.0024938032,0.3952009,-1.017814]],"dense_4_b":[[-0.16230789]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A340x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A340x00x00'.json new file mode 100755 index 0000000000..9b40cd1e3d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018 b'39990-TVA-A340x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.621885],[1.0284406],[0.37194255],[0.046268534],[1.0293045],[1.0279852],[1.0266788],[0.99801177],[0.9776714],[0.9462372],[0.91703874],[0.04612887],[0.046153124],[0.046166956],[0.045992836],[0.04568058],[0.045171134],[0.04459945]],"model_test_loss":0.03329197317361832,"input_size":18,"current_date_and_time":"2023-08-05_22-29-17","input_mean":[[23.719963],[0.018466847],[0.009788129],[-0.01490712],[0.015184435],[0.015390393],[0.016122056],[0.019774657],[0.02080643],[0.020894347],[0.021406556],[-0.014832959],[-0.014840206],[-0.014854504],[-0.01494558],[-0.014958628],[-0.015116547],[-0.015349785]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.073725],[0.06636997],[0.45188215],[4.3373733],[0.61344504],[-0.05576782],[-0.029394656]],"dense_1_W":[[1.899682,-1.0220546,1.6209704,1.1128091,0.11807787,2.1193304,-0.84074396,0.9205597,0.6422064,-0.16473949,-0.2929423,0.015562142,-0.5113624,-0.5597578,-0.2079032,0.14909668,0.0016590576,-0.078255],[0.00257754,0.7842404,0.008843346,0.151356,-0.10317699,1.593811,-0.6585409,-0.792097,-0.18440624,0.21284863,0.18914178,0.038071778,0.59510386,-0.53487957,-0.26356593,-0.1510972,-0.23310432,0.2344722],[1.4983231,-0.18011008,-0.33435732,0.29978395,-0.644463,0.8832816,-0.6403558,-0.09016495,0.5140635,0.03930244,-0.2350084,0.14089371,0.071680106,-0.43234694,-0.25356972,-0.052213926,0.2982631,-0.12704615],[2.136221,0.94127697,-2.0502431,-1.0999187,-0.5389837,-1.0795466,0.15500735,-1.1946503,-0.7447494,-0.08565692,0.62933886,-0.3306759,0.72309256,0.5842993,0.4425341,-0.24024099,0.040228825,0.0051129814],[1.6822681,0.30469584,0.36311707,0.054079443,0.47980347,-0.75729567,0.9435193,-0.6902986,0.12720026,-0.32843223,0.32795638,-0.44525057,-0.07920844,0.27367336,0.5342503,-0.061932556,-0.1713259,-0.036089286],[-0.011671145,0.5296286,3.192862,-0.2014884,0.2564892,1.1807487,-1.3911327,1.1489043,0.83134156,-0.14983152,-1.5866762,0.5376133,0.41090357,-0.8031455,0.02215685,-0.24331515,0.30741853,0.0040395837],[0.015617138,-0.15004326,-0.1066052,0.05774972,0.84747916,-1.7410339,0.65046513,0.34189066,-0.1092925,0.13014615,-0.12986074,0.012468467,-0.46450385,0.55993074,-0.24884948,0.071061395,0.025357306,-0.017320933]],"activation":"σ"},{"dense_2_W":[[-0.30674583,0.06968486,-0.65429723,0.019582884,0.42960247,0.08177306,-0.7079286],[-0.4900685,-0.04209327,-0.5845738,-0.5474764,-0.44426113,-1.0495229,-0.31141305],[0.25227436,0.8856029,0.30998233,-0.6853428,0.13426903,-0.08633423,-0.7613986],[-0.61833984,-1.1719488,0.24792127,-0.19045483,0.45563322,0.42715865,0.69238126],[-0.27654642,0.30347988,0.21834162,0.23924747,0.15591425,-0.3061046,-0.93160504],[-0.2864238,1.0342413,0.3272169,-0.90983087,0.24268456,0.5175742,-0.8516676],[-0.05429682,0.61511075,0.27329326,-0.5729799,0.007327092,0.29609978,-0.8520901],[-1.074,-0.47218233,-0.90919787,0.18335287,-0.48629844,-0.7468036,-0.007822784],[0.58963263,-0.08803438,0.15459517,0.20894565,0.22934368,-0.25880885,0.24365251],[-3.1923928,-0.9013152,-1.5476278,0.92910975,2.0374515,-1.3871164,3.1174033],[-0.25149995,-1.1271017,0.45119533,-0.55721474,0.37220192,0.25739494,0.6835184],[0.24823236,-0.08169282,-0.8473349,1.7971821,1.7446034,-0.27146766,0.53165376],[0.13963719,0.48935938,0.39636797,0.09254681,-0.31144914,-0.44353837,-0.8852852]],"activation":"σ","dense_2_b":[[-0.11470798],[-0.23226368],[0.05471394],[-0.38724783],[-0.14420551],[-0.0023474924],[-0.08733412],[-0.23541285],[0.04872051],[0.6622674],[-0.29157898],[-0.08680658],[-0.08127291]]},{"dense_3_W":[[-0.5358264,-0.03906741,-0.3538137,0.05883006,-0.13302572,0.20354034,-0.41887388,0.3213541,0.6214788,1.0040325,-0.053876217,-0.32266176,-0.5326619],[-0.45899904,0.40331557,0.5624095,0.29449025,0.32427883,0.6714431,-0.09542968,0.43741795,-0.6450682,-0.22411184,-0.58734274,-0.05180798,0.32618254],[0.47514984,-0.60623705,-0.043168258,-0.61707187,0.05064353,0.51197284,0.24825503,-0.36806884,0.365072,-0.021128317,0.21732265,-0.58820313,0.2991621]],"activation":"identity","dense_3_b":[[0.06643589],[-0.06561],[-0.06563976]]},{"dense_4_W":[[-0.97301435,1.0852075,0.9260317]],"dense_4_b":[[-0.06335182]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018.json b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018.json new file mode 100755 index 0000000000..9076cc416e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ACCORD HYBRID 2018.json @@ -0,0 +1 @@ +{"input_std":[[9.381411],[1.0896009],[0.36953825],[0.047667623],[1.0861374],[1.0860499],[1.0858915],[1.059937],[1.0386494],[1.0071863],[0.9757613],[0.04749054],[0.047521003],[0.0475409],[0.047391217],[0.047076195],[0.04665814],[0.046108272]],"model_test_loss":0.034288953989744186,"input_size":18,"current_date_and_time":"2023-08-05_21-11-37","input_mean":[[25.474146],[0.03260382],[0.0059239552],[-0.003850426],[0.03166146],[0.031421233],[0.031903807],[0.03409185],[0.035556797],[0.036786668],[0.03876473],[-0.0039243186],[-0.0039191637],[-0.00391803],[-0.0038912839],[-0.0038927502],[-0.0039427923],[-0.0040721553]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.576026],[0.014205613],[0.023928426],[2.2423766],[5.1118927],[0.009245147],[-0.09884353]],"dense_1_W":[[2.4283671,-2.5114954,1.7636794,-1.1276282,-0.29702592,2.3460658,0.2110311,1.8921894,1.6966429,0.5912078,-1.7593364,0.1788557,0.30617765,-0.06459494,0.68998104,-0.04987163,0.25082457,-0.20820954],[-0.06577886,-1.3371822,-3.9895184,0.49147522,-0.6437115,-1.0457126,1.5372813,-1.0199159,-0.90439004,1.17174,1.0530282,-0.68119884,0.18246703,0.1336504,0.1513831,-0.24112555,-0.038728017,-0.0071232794],[0.0033733498,0.7199784,0.0044814195,-0.20844589,0.021990225,1.5578223,-0.86644346,-0.26690495,-0.3389482,0.19740379,0.1897156,0.42373288,0.11811549,-0.42115727,-0.18958901,-0.43254307,0.3219206,-0.043830786],[1.1540352,0.3651104,-1.2646542,0.12534688,-1.3592131,0.22650717,-1.2461386,0.33907446,0.30825207,0.041745562,-0.04699643,0.31513706,-0.53145754,-0.13887237,0.339121,0.03572653,-0.09926298,-0.031500425],[2.4470172,1.1391506,-1.6994115,0.6633088,-0.24181224,-1.3209784,-0.38846213,-1.2859731,-0.6845487,-0.27900544,1.0526913,-0.490945,-0.31496993,0.42710644,0.018268349,-0.34324366,0.14006558,-0.0737592],[0.048280872,-0.036711592,0.12419936,0.09806018,0.073621884,2.3262064,-0.7835345,-0.45401052,0.17831485,-0.057094287,-0.038377315,0.23754936,-0.03390427,-0.3424702,-0.39207128,0.3649582,-0.36824515,0.22671352],[-0.044838708,0.36282212,-0.12990756,0.5413003,-2.0524702,1.6110876,-0.7925812,-0.55331826,-0.12824701,0.14961694,0.17928742,0.3061131,-0.040306978,-0.5500592,0.22041802,-0.30549437,-0.029204259,0.083384514]],"activation":"σ"},{"dense_2_W":[[-0.27619088,-0.30106953,0.8406808,-0.3034487,-0.8182391,0.12433698,0.20802778],[-0.4154569,0.19215287,-0.5395798,-1.0011816,-0.3622965,-0.053402603,-0.61655515],[-0.9554062,0.9567613,-0.43412912,-0.8109775,0.11694456,-0.73263913,-0.9729235],[0.21786267,-0.43021828,0.32044673,0.17683136,-0.7033162,1.1777877,0.46853],[-1.4941593,0.53598636,-0.34361255,-0.8429453,-0.17071423,0.41571486,-0.76921165],[-0.94654614,0.7506226,0.57346565,-0.65036005,0.049414758,1.046369,0.621918],[-0.54215634,0.72266793,0.45845777,0.16018274,0.18923126,0.6181075,0.9243036],[1.2958286,-0.67843175,1.2844336,-0.98265636,-1.9873784,1.3621792,1.0309747],[-2.4644299,1.0382956,0.7543066,-2.2521183,0.15328787,0.34243378,-0.6569763],[-0.71319073,0.64474607,0.020551767,-0.35136765,0.58472896,-1.4593328,-0.6378294],[0.3122531,0.11463693,-0.34882697,0.10761847,0.24621284,-0.8933121,-0.8421242],[0.26174104,0.20181425,0.6962465,0.12650499,-0.685376,0.65012974,-0.25467616],[0.6355601,-0.26024923,-0.6393189,0.25180802,0.62417173,-1.4139053,-0.9215187]],"activation":"σ","dense_2_b":[[-0.053085864],[-0.03349851],[0.33215925],[-0.13303766],[-0.07017026],[-0.11995311],[-0.18605317],[0.10708742],[0.5208379],[0.11261442],[0.09599934],[-0.22087996],[0.25543278]]},{"dense_3_W":[[-0.5387559,0.5180723,0.18928285,-0.017278178,-0.1654849,0.2684458,0.0049315374,-0.70783985,0.79352444,0.13864544,0.43856966,-0.26839373,0.76968014],[-0.34399128,0.6650704,0.4771153,-0.555316,0.5630293,-0.60538894,-0.22792831,-0.3027566,0.20719895,0.5640226,0.6806705,-0.09628916,0.2438542],[0.004954449,-0.27236447,0.5799102,-0.50637424,0.124922864,-0.16860567,0.1477868,-0.27912074,-0.11646297,0.59069705,-0.5256959,0.2693647,-0.42514357]],"activation":"identity","dense_3_b":[[0.03715595],[0.044411514],[0.045904953]]},{"dense_4_W":[[-0.7679762,-1.1008085,0.064006686]],"dense_4_b":[[-0.03675505]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA,C120x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA,C120x00x00'.json new file mode 100755 index 0000000000..fcc323b691 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA,C120x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.5199685],[1.0041546],[0.38786623],[0.036677998],[0.9962397],[0.9980732],[0.9996651],[0.99639624],[0.9926015],[0.98370975],[0.97062755],[0.03642298],[0.036467228],[0.0365202],[0.03664619],[0.03662207],[0.03652128],[0.036423597]],"model_test_loss":0.01514572836458683,"input_size":18,"current_date_and_time":"2023-08-05_23-47-27","input_mean":[[24.48734],[0.0031791632],[-0.0077214316],[-0.012247895],[0.006253456],[0.0050531863],[0.0044050324],[0.0013900376],[0.0022928454],[0.0046939156],[0.0059022754],[-0.012277604],[-0.012273932],[-0.012272934],[-0.012301066],[-0.012308702],[-0.012408637],[-0.012596107]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.603401],[-0.16526419],[-1.8255664],[-1.6662012],[0.93965286],[0.79468465],[-0.15217474]],"dense_1_W":[[0.8369962,-0.030552765,0.5335952,0.43184772,0.23580156,1.2673365,-1.1400558,0.318804,-0.187539,-0.14375025,0.12492712,0.13123405,0.26685792,-0.9589225,-0.06946809,0.3054905,0.048283525,-0.14636886],[0.0075710495,0.34496903,3.662821,-0.1975815,-1.0349215,1.1001909,-0.22282363,0.5475843,0.55354905,-0.0045275143,-1.056081,0.844821,0.39349076,-0.296638,-0.6005872,-0.4671467,-0.6291099,0.90066314],[-0.9008946,-0.24484369,0.57615465,-0.15220997,0.2609631,1.0398844,-0.4644058,0.016499873,-0.018956503,-0.17380044,0.14669017,0.10224152,0.07262521,-0.36812365,0.23994175,0.08805341,0.32293737,-0.29662415],[-0.7426475,0.32210937,0.50062597,0.035566118,-0.29872537,1.0625906,-0.50212467,-0.24334303,-0.21319605,0.0060904995,0.06582723,0.41223416,0.33519742,-0.7705234,-0.060677625,-0.087017514,0.059937757,0.08177721],[1.350326,-0.9069702,-0.8710248,-0.032668646,-0.22678213,0.8018885,-1.0114281,0.4558404,-0.04972723,0.14267842,0.011223235,0.11178159,-0.08149843,-0.11696354,0.25129175,-0.022107668,-0.3123493,0.18239275],[1.4265958,0.7363564,0.9003141,0.5874882,0.36590812,-0.58121115,0.8468888,-0.6961116,0.19182444,-0.04914105,-0.041381188,-0.053005338,-0.37206975,0.0049440977,-0.06299007,-0.22749563,0.3903245,-0.22555515],[-0.0026155524,-1.6855055,-0.023907602,-0.020194484,0.9718681,-0.72989947,-0.072883844,0.6755627,-0.40358946,-0.36142477,0.24014348,-0.06568305,-0.18836774,0.24938382,0.26712775,0.26481214,-0.32187027,0.17701942]],"activation":"σ"},{"dense_2_W":[[0.055921525,0.79568124,0.622393,0.6891148,-0.41505626,-1.0494971,-1.1746889],[0.9990047,0.79401237,0.458197,0.044893876,0.7398994,0.1380711,-0.5833474],[0.49300948,0.40176773,0.69490945,0.017886199,-0.43334186,-0.42760152,-0.81184334],[-0.88839275,-0.39359003,-0.3923254,0.34303936,-0.4980547,0.3823284,0.31585476],[-1.0028759,-0.80133754,-0.038923886,-0.24988107,-0.6692906,-0.59269744,0.10528791],[0.95424086,0.5241753,0.69329005,-0.043293044,0.12808672,-0.54708153,-1.6431684],[-0.42091933,0.30759153,-0.8659509,-0.50176823,-0.4401355,-0.1235168,0.37031946],[0.9405245,-0.26903427,0.54586095,0.6150369,0.38332707,-0.45095354,-1.0229797],[-0.16152474,0.29404435,-0.4458113,-0.37584528,-0.45882532,0.44415447,0.28708586],[0.1605365,-0.54369676,-0.6820084,0.26447654,0.044480074,-0.1798705,0.29587266],[-0.88492364,0.28911477,-0.75960296,-0.038635474,-0.20156361,0.48187855,0.37745267],[-0.15852904,0.26374456,-0.1987117,0.15489428,-0.13169791,-0.14686994,0.23826097],[-0.27699766,-0.46768573,0.0784821,-0.71520346,-0.43777713,0.3317684,0.44976833]],"activation":"σ","dense_2_b":[[-0.4873253],[-0.31497946],[-0.33876145],[0.057083856],[0.15119348],[-0.19719751],[0.06655213],[-0.18075633],[0.0077841002],[0.047988962],[-0.013275895],[0.01678699],[0.054340936]]},{"dense_3_W":[[0.039507,-0.65482193,0.24057858,0.49380097,0.095387414,-0.71386194,0.54591215,-0.5667636,-0.471354,0.27266452,0.42956528,0.5700684,-0.14070532],[0.70610636,-0.21885805,-0.20008874,-0.03001694,-0.6918378,-0.18722558,-0.28595456,-0.13420972,-0.3792731,0.26539686,-0.73036075,0.41510108,0.3419122],[-0.47617888,-0.49639332,-0.47731593,0.37749213,0.8312911,-0.6428844,0.16035818,-0.5646238,0.49566412,0.44224903,-0.18195282,0.13512439,0.69913447]],"activation":"identity","dense_3_b":[[0.06694408],[-0.04941525],[0.065208524]]},{"dense_4_W":[[-0.57436824,0.5449645,-1.0910698]],"dense_4_b":[[-0.06264942]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA-C020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA-C020x00x00'.json new file mode 100755 index 0000000000..19d4e59be2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA-C020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.576799],[0.91867346],[0.36527267],[0.042645145],[0.91787136],[0.91783434],[0.916926],[0.8943326],[0.87538767],[0.8462922],[0.8175801],[0.042509034],[0.0425443],[0.04257122],[0.04245028],[0.042234104],[0.041799206],[0.041292917]],"model_test_loss":0.02719402126967907,"input_size":18,"current_date_and_time":"2023-08-06_00-12-47","input_mean":[[25.356604],[-0.040762104],[0.015186845],[-0.010929545],[-0.03763134],[-0.036849402],[-0.03564124],[-0.030817972],[-0.029279217],[-0.026289875],[-0.024418497],[-0.010802534],[-0.010760807],[-0.010724829],[-0.010715251],[-0.010753985],[-0.010909137],[-0.011096374]],"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.7099435],[-4.4820223],[-3.7053332],[-0.15313303],[1.0490966],[0.08996243],[-0.3402487]],"dense_1_W":[[0.45726943,0.2803945,0.4495259,0.49884623,0.39872238,-0.36475766,0.26503468,-0.10885596,0.12820537,-0.06644224,-0.022389729,-0.3476893,-0.23661518,0.20323817,-0.1134223,-0.30204472,0.100813694,-0.06834288],[-2.3185985,1.2631202,-1.458182,0.048201833,0.24334751,-1.6046109,-0.30837595,-0.76168555,-1.0279249,-0.4423357,0.7814656,0.023939118,-0.3526689,0.34330973,-0.30489683,0.11396334,0.4730625,-0.1433239],[-1.9229746,-0.23190774,1.2471163,-0.34702885,0.12792219,0.39012522,0.5828723,0.19460873,0.9788912,-0.005666579,-0.41922984,0.19924892,-0.028308399,0.009771974,0.30980968,-0.25503463,-0.05167787,-0.03963391],[-0.00017526199,1.2134194,0.08365528,0.931635,-0.8134952,1.2126458,-0.3847136,-0.85404164,-0.029047096,0.057293534,0.099689804,-0.14430292,0.07266458,-0.035892077,-0.8494992,-0.16429287,-0.16963851,0.28444648],[0.66932124,-0.38224223,-0.48026696,-0.4556043,-0.16880098,0.11090016,-0.20848279,-0.0031408698,0.01483041,-0.057521474,0.0781242,0.3797575,0.15699562,-0.16381691,0.083613425,0.029958013,0.25532284,-0.049085815],[0.09758302,-1.5125183,0.51068544,-0.8873621,-0.039125204,1.2438344,-0.35688224,1.0463076,0.44335338,0.043060914,-0.3624858,0.18927102,-0.06789407,-0.11586316,0.5108622,0.23109579,-0.022569554,-0.22217596],[-0.022621945,-0.38620147,-5.9938316,0.57457525,-0.034727138,-0.31493336,-0.0024856962,-1.0160756,-0.4097327,0.31027526,1.5442436,-0.1086705,-0.06946156,-0.20705701,-0.29661253,0.24825081,-0.28626466,0.086528964]],"activation":"σ"},{"dense_2_W":[[0.053173117,-0.9156596,1.0074764,0.07819087,0.06604967,0.9604824,-0.46700448],[0.67615795,-0.6646975,0.40410203,1.1270711,0.51432085,0.36799482,-0.58051807],[-0.3406286,0.633063,-0.10993261,-1.4732538,-0.96888214,-0.10222697,0.36921522],[-0.22857061,0.048582908,0.106903225,0.39300185,-0.15854754,-0.00396511,0.5772822],[0.61022013,0.28100282,0.32486463,-1.4011261,-0.6755233,-0.6537198,-0.099644266],[-0.58349746,0.18500583,0.1230866,1.2761316,-0.29147163,0.23169333,0.03729417],[-0.9677123,0.12448332,1.4926296,0.14635411,-1.0473512,-0.392972,-1.2231176],[0.3896849,0.07481266,0.14770286,-0.88864774,-0.39602855,-0.64242584,-0.51282495],[-0.46045932,-0.6738887,0.017901536,0.6665944,-0.36764455,0.83067524,0.18793342],[0.057541758,0.5166745,0.49835142,-1.8220221,-1.4198332,0.05825049,0.30070993],[-0.021827364,1.1368597,-0.37343314,-1.2435678,-1.3651601,-0.8234563,0.6481897],[0.59054244,-1.6380736,-0.5568102,-0.24568368,0.028800676,-1.0597489,-0.9525837],[1.2516085,-0.38927004,-1.0174257,-0.60735077,0.85879636,-0.1796094,1.3270812]],"activation":"σ","dense_2_b":[[-0.12381021],[0.014428079],[-0.07002476],[-0.23227106],[0.076019384],[-0.18954094],[-0.39796123],[-0.023646781],[-0.20775545],[-0.18200971],[0.09294506],[0.04337285],[0.461896]]},{"dense_3_W":[[-0.26331434,0.46046373,-0.52959347,0.2898921,-0.5544527,0.12640098,0.053101886,-0.055325672,0.27165207,0.23696445,-0.9369918,-0.51779336,0.47617438],[-0.343167,-0.48102528,0.5826724,0.04648191,0.778018,-0.79673433,-0.6825545,0.36792636,-0.3386519,0.6587451,0.59682995,0.4857488,0.6149705],[0.7029585,-0.25926727,-0.274154,0.64148325,-0.07228898,0.21374674,0.65440977,-0.63847566,-0.2272515,0.42236963,0.25460508,-0.70692426,-0.6473448]],"activation":"identity","dense_3_b":[[0.016272327],[-0.07080089],[0.05776005]]},{"dense_4_W":[[0.27981392,-1.6592484,0.18638746]],"dense_4_b":[[0.06507368]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA-C120x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA-C120x00x00'.json new file mode 100755 index 0000000000..8d0a5fe248 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TBA-C120x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.5490465],[0.91654193],[0.30993494],[0.04199027],[0.9220449],[0.91940266],[0.91617274],[0.88627845],[0.86233324],[0.8315542],[0.8018313],[0.041735847],[0.041725885],[0.041704368],[0.041467432],[0.04125315],[0.04087492],[0.040402256]],"model_test_loss":0.03576897457242012,"input_size":18,"current_date_and_time":"2023-08-06_00-38-31","input_mean":[[25.217424],[0.025067292],[-0.005204237],[-0.007812521],[0.026058447],[0.02579975],[0.025364147],[0.022783877],[0.022563396],[0.023355754],[0.023063915],[-0.007938141],[-0.007910316],[-0.00788824],[-0.007943815],[-0.00795849],[-0.008054328],[-0.008234501]],"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.56764346],[-0.2503772],[-3.2322495],[-1.2317773],[0.867053],[4.308423],[-0.07558963]],"dense_1_W":[[0.61443913,1.1731157,0.009846442,-1.1333587,-1.0492755,0.835613,-0.68129694,0.3589496,0.5659384,0.08182793,-0.46320507,1.2664362,0.3659727,0.043432895,-0.78966564,-0.2789253,-0.13537817,0.58561194],[-0.05032384,2.7911828,-3.7081556,-0.22916593,-0.360789,-0.8509512,0.3955322,-2.2810001,-1.5297779,-0.37920654,1.2837292,-1.0756621,0.05912324,0.79691005,0.09919885,0.5648314,0.12931578,-0.2828693],[-1.3801426,0.8747989,2.6738997,0.97103757,0.64060503,1.3203064,0.78513944,0.21045975,0.27105168,0.008706952,0.47002545,0.17457546,-0.019201785,0.022376636,-0.8146881,-0.56253856,-0.40608642,0.1788786],[-0.969806,0.27810913,-0.019731548,0.20302768,-0.9765407,1.7610842,-0.3367136,-1.2561709,-1.1086024,-0.23725067,0.82246333,0.4905772,-0.39064184,-0.62869024,0.1729788,0.09018552,0.26754,-0.16145436],[0.77530533,-0.44069135,-0.016620232,0.91353315,0.7982677,0.18398845,-0.06542974,-0.99103695,-1.0689898,-0.41018635,1.0071982,-1.0062531,-0.37093124,-0.11219994,0.9221856,0.06667381,0.102350205,-0.44873643],[1.837604,0.17821689,2.7829952,0.15930298,-0.18984689,1.3086654,1.0448655,1.2770351,0.9262832,0.571854,-0.44966817,0.9585924,0.4791195,-0.7341206,-1.1710364,-0.137599,-0.054511473,0.0011886378],[-0.13465121,0.42229307,0.01184741,1.9792279,-1.3213581,2.0345612,-0.38451922,-0.08214897,-0.052292295,-0.003056054,0.016048811,0.14917925,-0.21642695,-1.6820744,-0.51334184,0.4513876,-0.0945018,-0.17454582]],"activation":"σ"},{"dense_2_W":[[0.462196,-0.695528,0.16549478,0.2736693,-0.56030834,0.19088152,0.89675313],[-1.4432595,0.9668788,-0.052712087,0.48390535,-1.6715928,-1.1171504,-0.93195546],[-0.7672027,0.73007417,-0.41485545,-0.41052285,0.17164469,0.41768378,-0.6074929],[0.42105144,-0.07561751,-0.071338296,0.5440764,-0.23689774,0.29708165,0.5137933],[-0.9067054,0.2790484,-0.27540752,-0.10838713,0.2654337,0.43244293,-0.84643334],[1.1417533,-1.143838,-0.8191056,-0.42449018,1.7451103,1.1444204,1.5084718],[-0.3675419,0.17639667,-0.024025898,-0.2504475,-1.080494,-0.48680314,-0.49096605],[-0.3961711,-1.3744208,0.4152261,-1.47457,1.1814389,1.061417,-0.9474496],[-1.0131743,-3.5613608,2.3236957,2.097592,-2.561644,-1.4451259,1.6597106],[-0.49788824,-0.18982293,0.17864513,-0.37159964,-1.355421,-0.842698,-0.01138827],[0.5584375,-0.6589816,-0.14198032,0.27809986,-0.29245555,0.2221168,0.70997316],[-0.18313819,-0.16005597,0.18829824,-0.80455697,-0.7474139,-0.46905053,-0.532434],[-0.8919243,-0.26659176,0.03377461,-0.0041140113,-0.96533835,-0.18453701,-0.29215154]],"activation":"σ","dense_2_b":[[-0.72258896],[-0.015371009],[0.37933466],[-0.29024404],[0.16602242],[-0.036112666],[0.019811722],[0.13048169],[-1.32474],[-0.21386966],[-0.14519048],[-0.037656378],[-0.10292112]]},{"dense_3_W":[[0.085076064,0.3378735,0.17556626,0.20053186,-0.4336372,0.27722207,0.04970122,-0.20942238,0.20168552,-0.27926138,-0.1960737,0.020075899,-0.6230306],[-0.27460775,1.1687195,0.616611,-0.21896681,0.06441218,-0.4682532,0.5580457,0.36150676,-0.68175566,0.2615018,-0.27429396,0.32094082,0.47348568],[0.07691053,-0.9330427,-0.46400392,0.28614432,-0.67953914,0.32567665,0.023056043,-0.5036641,0.92684317,-0.21211706,0.6364576,-0.33836454,0.13877176]],"activation":"identity","dense_3_b":[[-0.035371166],[-0.039440315],[0.032718766]]},{"dense_4_W":[[0.043920163,-1.2300794,0.6862739]],"dense_4_b":[[0.038186513]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG,A020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG,A020x00x00'.json new file mode 100755 index 0000000000..8488bf11f6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG,A020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.428436],[0.8747422],[0.348336],[0.032838576],[0.8674841],[0.8698202],[0.872086],[0.8741188],[0.8746484],[0.8732703],[0.87034994],[0.03268689],[0.032726675],[0.032762397],[0.032804232],[0.032797463],[0.032751366],[0.032637663]],"model_test_loss":0.012720033526420593,"input_size":18,"current_date_and_time":"2023-08-06_01-03-18","input_mean":[[23.87719],[-0.09830344],[0.00987912],[-0.024293454],[-0.10104403],[-0.101183325],[-0.100655936],[-0.09613443],[-0.09292035],[-0.09032173],[-0.08915678],[-0.024517087],[-0.024474092],[-0.024432585],[-0.024249792],[-0.0241554],[-0.0241027],[-0.02419038]],"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.24818847],[-0.3569515],[-3.8611186],[0.052523665],[-0.061705776],[3.9736814],[-0.51413184]],"dense_1_W":[[-0.023707427,-1.1511034,-3.6214488,-0.88728464,0.7192584,-1.1216406,0.45078358,0.019147111,-0.16734436,0.21107747,1.2753613,-0.18621182,0.0021676207,0.64575016,0.555723,0.22198512,-0.105586044,-0.15878774],[-1.5766635,0.11333443,0.51480776,-0.36963126,0.10475719,-0.49697906,0.68160355,0.2969201,0.19487274,-0.030125976,-0.25609782,-0.630222,0.006213502,0.21161628,0.58924896,0.6157995,0.23309676,-0.61899596],[-1.8898737,0.33577567,-0.97434026,-0.037966143,-0.48877138,-1.5976278,1.1424898,0.56372863,-0.60689634,0.071804985,-0.0496236,-0.34190592,-0.014153756,0.52909875,-0.24744025,0.29303122,-0.23210055,0.05141031],[-0.024221305,0.44990522,-0.028304478,-0.0656701,0.17381778,-1.9562191,0.8350715,0.35282776,0.17968453,-0.019806169,-0.24479271,-0.81009316,-0.3293401,0.4533207,1.2084676,0.015344962,-0.15701972,-0.30990687],[0.011324843,-0.59531343,0.5854086,0.089412585,-0.9452245,1.9720498,0.19747502,0.20461471,1.2405642,0.14468583,-1.165413,0.27390787,-0.3910681,-0.16858988,0.39210764,-0.16402015,-0.12277656,0.07982532],[1.9530678,-0.08342983,-0.9890411,-0.32505137,-0.856526,-0.8791079,0.93317574,0.6200249,-0.06489498,-0.14845468,-0.1365828,-0.39299142,0.10178991,0.26328257,0.49346048,0.0047012162,0.015337047,-0.15793596],[0.0994865,0.37539056,-0.098761536,-0.13319957,0.8647312,-2.085531,0.26294917,0.35073626,0.08432079,0.027274208,-0.13727656,-0.21488512,0.3379102,0.3641513,-0.21915336,-0.2852004,-0.12663482,0.27321863]],"activation":"σ"},{"dense_2_W":[[-0.16425237,0.3091328,0.29525888,0.11240746,-0.74184674,0.43020418,0.70645195],[0.49677476,-0.43110228,0.21888019,0.20753606,-0.7800873,0.7741635,0.03567749],[-0.6097133,0.45192087,-0.781976,-0.23472853,0.57883346,0.05555812,0.20443378],[-0.46759868,0.36920962,-0.31299806,-0.34370378,-0.09269494,-0.4917414,-0.37711906],[0.23382114,0.43119097,0.12654792,-0.4602898,0.13595147,-0.6564136,0.19074993],[0.0017450978,0.44209385,0.52378607,0.5839574,-0.0767268,-0.28383034,0.26752976],[-0.4171056,0.3210464,0.27096882,-0.5315671,-0.12448658,-0.13850246,-0.24946442],[-0.15794876,0.45271224,-0.35790992,-0.13619353,0.45923787,-0.6412923,-0.6191985],[0.016369851,0.27200398,0.6724704,0.7589611,-0.1148256,-0.3482276,0.040378712],[-0.50706065,0.34294152,0.054178692,-0.34360346,-0.14778374,-0.58891815,-0.4531453],[0.3940274,-0.6713925,0.051861253,-0.898765,0.31961933,-0.59337765,0.05139436],[-0.11673336,-0.5929527,-0.15008944,-0.2537059,-0.0013014909,0.31044847,-0.12393371],[-0.19167545,-0.28842226,-0.11017555,-0.3114551,-0.035935447,0.29415083,-0.56570745]],"activation":"σ","dense_2_b":[[-0.13478862],[-0.23486298],[0.13705392],[0.15494871],[-0.020777982],[-0.13753998],[0.016483061],[0.121896364],[-0.123885065],[0.09847333],[0.03438525],[-0.03845259],[0.011853518]]},{"dense_3_W":[[-0.54575056,-0.47849953,0.5990695,0.42073256,0.5419929,0.043547045,0.54512763,0.3283325,-0.2048869,-0.31806502,0.5119246,0.4535623,-0.05827584],[-0.3388336,-0.28757206,-0.29846734,0.38009873,-0.24882287,-0.4701529,0.0076963897,0.17254484,-0.60017455,0.7332266,0.44687817,-0.0715153,0.6319616],[-0.032579347,0.5607797,-0.5665692,-0.39868695,-0.007274041,0.3449716,-0.072209254,-0.49229744,0.6039037,0.024303837,-0.4079465,0.11291028,0.18834813]],"activation":"identity","dense_3_b":[[0.03005079],[0.041132923],[-0.03719341]]},{"dense_4_W":[[0.74240994,1.0283083,-0.91570294]],"dense_4_b":[[0.038777113]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG,A120x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG,A120x00x00'.json new file mode 100755 index 0000000000..06eea5a5c7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG,A120x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.237355],[0.87519014],[0.44057557],[0.03548801],[0.87787986],[0.8774264],[0.8760763],[0.8587142],[0.8437336],[0.82851934],[0.8162014],[0.035328448],[0.035375077],[0.035424557],[0.03544107],[0.035294056],[0.03506294],[0.034851927]],"model_test_loss":0.022225305438041687,"input_size":18,"current_date_and_time":"2023-08-06_01-29-22","input_mean":[[22.534292],[0.058919504],[-0.0069944696],[-0.006594112],[0.057512816],[0.057811707],[0.057591096],[0.056336958],[0.057281986],[0.051038712],[0.04328098],[-0.006509515],[-0.006505374],[-0.0065190606],[-0.006622567],[-0.006714965],[-0.0068818894],[-0.0070974007]],"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.5739499],[3.878269],[0.45385617],[-0.20725146],[-0.079795115],[-4.091677],[0.36011276]],"dense_1_W":[[-0.22821122,-2.8194423,1.6595688,-0.4830238,2.3802936,1.9161788,-0.6213912,0.7039542,-0.6125425,-0.4726092,-0.23838855,0.67865574,-0.09634735,-0.7351034,0.53436965,0.28926876,-0.1594619,-0.037523255],[2.5516446,-1.2378905,0.00072916696,0.6147921,1.4464301,-0.31585398,-0.30207664,1.2950996,-0.16590804,-0.7658588,0.15745218,0.18785125,-0.21452165,-0.55619836,0.059614744,-0.24405465,0.18975312,-0.036489666],[0.00046311753,5.2895155,-0.0064032064,2.3568318,-3.7788632,-0.6730425,0.94534135,1.7328202,1.210308,1.5939676,2.7725132,-0.5959545,-0.2708361,-0.4567112,-0.26398024,-0.2822813,-0.13274622,0.08366669],[0.00060495536,-1.8627077,0.0016775115,0.011831294,2.4184442,-2.741676,0.9209026,0.2837613,-0.23187289,-0.9453196,0.7903965,-0.18015528,-0.081913516,0.082411945,0.48140436,0.35204688,0.08898967,-0.32223535],[-0.04008556,-1.1614711,-5.304956,-0.06615373,0.4991292,-0.93462783,1.6848874,-0.72819597,-1.0155044,0.67655045,0.24754661,0.25713775,0.25633144,0.46113673,-0.5089996,-1.4017544,0.52801764,0.53018683],[-2.6250875,-0.8428706,-0.0068993093,0.6359419,1.5150832,-0.8593881,-0.123320185,1.1137877,0.16923575,-1.062661,0.20523195,0.13212685,-0.509759,-0.021390263,-0.16270931,-0.41007507,0.4482517,-0.11212839],[0.121950485,-3.06296,1.6239958,-0.33307838,2.5052757,3.2169566,-1.3293189,-0.22467609,-0.37574983,-0.5922604,0.09215065,0.62051153,0.5787191,-0.8557021,-0.56089085,0.5316071,-0.062818,0.082696125]],"activation":"σ"},{"dense_2_W":[[-0.35287166,0.5735374,-0.33316278,1.2891138,-0.3599736,0.12537672,-0.66336924],[-1.423288,0.8357749,-1.3781912,-1.1710855,0.51321846,-1.5293682,-0.21053772],[-0.32105762,0.28671432,-0.5801889,0.35754833,-0.7569594,0.03212915,-0.5317869],[0.091680296,-0.7365891,-0.07562274,-0.25502372,-0.3725359,-0.041279055,0.18312061],[1.1346624,1.4142879,1.076152,0.8530887,-0.36640313,-1.5642645,0.8622971],[0.25187486,-0.8454855,0.24975924,-0.6653769,0.17570826,-0.1467031,0.52752095],[-0.52542835,1.0067426,-0.3432608,0.6156269,0.4721524,0.13591726,-0.41583073],[-1.4627284,-0.97950006,-1.8288456,0.23860978,1.5214525,2.4171803,-1.1142124],[0.762936,0.5988445,0.6786874,-0.67899644,-0.82305706,-1.1394529,0.61851394],[0.28733522,-0.8497635,-0.41946363,-0.0458478,-0.43066698,-0.29245007,-0.5107658],[-0.44353834,0.6743515,-0.37099394,0.461348,0.5619282,-0.27031732,0.15943629],[-0.30596974,-1.1035383,-0.51829547,0.14438403,0.09970497,-0.40294972,0.31800285],[1.0255032,-2.2046218,0.77438307,-0.21968207,-1.4422927,0.9943756,0.4114353]],"activation":"σ","dense_2_b":[[-0.18944573],[0.12252371],[-0.30214006],[-0.10644982],[0.2681959],[-0.09597638],[-0.06898104],[-0.60539126],[0.21081245],[-0.2496423],[-0.07610517],[-0.13910647],[-0.78967816]]},{"dense_3_W":[[0.22095068,-0.51939535,-0.36592597,-0.48365295,-0.41380858,-0.56315166,0.6327542,0.22628462,-0.16801901,-0.24263306,0.40058422,0.13298513,0.28335148],[0.113773875,0.5613844,0.37089002,0.57024395,0.4068071,-0.06056436,-0.65681094,-0.31930733,0.39740247,0.6750699,0.4575854,0.20065524,0.2139887],[0.7378495,-0.4070432,0.5941009,0.4365137,-0.33317804,0.1605702,0.64352435,0.26713678,-0.26348892,0.22799617,0.41001305,-0.50239944,-0.97245806]],"activation":"identity","dense_3_b":[[-0.03496299],[-0.0028519286],[-0.052557867]]},{"dense_4_W":[[-1.090145,0.25029793,-0.99950933]],"dense_4_b":[[0.038892392]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-A020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-A020x00x00'.json new file mode 100755 index 0000000000..38c0af829e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-A020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.9397926],[0.58847904],[0.2768134],[0.03328077],[0.5956492],[0.59220606],[0.5897729],[0.5776224],[0.56892926],[0.56445587],[0.56639653],[0.033096638],[0.033156663],[0.033203375],[0.03332432],[0.033254243],[0.033312503],[0.033484638]],"model_test_loss":0.028057441115379333,"input_size":18,"current_date_and_time":"2023-08-06_01-53-50","input_mean":[[21.049675],[0.18402193],[-0.003428923],[-0.007548354],[0.18359452],[0.1835885],[0.18393785],[0.18181257],[0.17725796],[0.17158064],[0.164546],[-0.0077345166],[-0.007683261],[-0.007645073],[-0.0075830934],[-0.0077846153],[-0.008191],[-0.008583602]],"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.8156507],[-2.4066193],[0.028636524],[-0.31134236],[-0.28471118],[0.08179851],[1.679371]],"dense_1_W":[[1.844903,0.027804963,0.5669119,-0.778688,0.8034288,-0.78931105,1.2116214,0.19344883,-0.6704197,0.016172517,0.20178398,-0.3408561,-0.25060442,0.1655656,0.71878904,0.5432098,0.24100736,-0.5256183],[-2.200448,0.405909,0.6434607,0.26235482,-0.18575469,1.2817595,-0.7119806,0.38927037,0.39060992,-0.49538943,0.016932135,-0.14391725,-0.0885561,-0.6673529,0.36674196,0.29924622,-0.29776922,0.022200285],[0.0029789726,0.6943829,-0.00041380787,-1.1453172,-0.50027996,0.85155296,-0.13035522,-0.7368721,0.06147018,0.18088032,0.012485195,0.4306581,0.5157353,0.28600702,-0.6693201,-0.008134162,0.35026318,0.11398255],[0.1142896,0.00468294,-2.5078979,1.377898,-0.73678875,-1.4563999,0.8267823,0.16948342,-0.14088418,-0.5553062,-0.21878052,-1.5041614,-1.117198,-0.30893826,0.59749913,0.702367,0.1315873,-0.670245],[0.0009085219,1.0001184,4.3506665,-2.042315,-0.15742837,1.0259328,-0.17750828,0.54632634,-0.46832186,-0.42449352,-1.556151,0.57148683,0.68085456,0.1495435,-0.39299193,0.8861771,0.7166561,-0.54555255],[0.100348786,0.014175879,-0.012427769,-0.5041687,-0.5826174,0.5256853,-0.52756214,0.07132036,0.34683812,0.07438995,-0.26059008,-0.13695654,-0.67984086,0.38298985,0.9229481,0.80970156,-0.29075277,-0.43736833],[2.0044293,-0.20208758,0.54538536,1.1377499,0.3106265,1.0160546,-0.32974172,-0.089798145,0.2855685,-0.03635302,-0.041824948,-0.18219398,-0.25772902,-1.0644519,0.43982273,-0.08722686,-0.2421627,0.051588144]],"activation":"σ"},{"dense_2_W":[[0.30571613,-0.18013296,0.5926545,0.14476953,0.16642626,-0.11212167,0.3821252],[0.94783115,2.5033114,-3.1206958,-0.15871608,-1.994079,-1.3640877,-1.5263621],[0.47148222,0.104184546,-0.37317687,-0.8472351,0.08160871,-0.6943246,-0.40566835],[-0.64335907,0.78053916,-0.20363255,-0.016910687,0.40413967,-0.23705012,-0.060175724],[-0.31357315,0.1102892,0.34789997,0.24466582,0.2282046,0.27680242,0.41566148],[-0.2819869,-0.49597213,-0.29658175,0.20754631,-0.1396202,-0.3569357,-0.3499282],[0.016052477,0.72212625,0.5342962,-0.58273345,-0.40965185,0.0081045525,0.16813238],[1.3594749,-1.0821377,-0.9876373,0.14710972,-0.7891241,0.990827,0.35404012],[0.10145038,0.27034414,0.099734664,-0.21233094,0.46582258,0.14897184,0.31720132],[-0.6530252,-0.9807932,0.80537784,-0.11495904,-0.7238929,-0.2512353,-0.7177895],[0.4390709,-0.23511182,-0.49958336,-0.14200853,0.25195497,0.6376854,-0.29144466],[0.24465889,-0.7938168,0.060746156,0.095193386,0.07138605,0.036473136,-0.7767482],[-0.36048752,0.43844214,-1.3429878,-0.18445532,0.037344575,0.018166453,-1.3115227]],"activation":"σ","dense_2_b":[[-0.08002864],[-0.27753568],[-0.33821508],[-0.06898969],[-0.07934998],[-0.022124004],[-0.014806774],[0.5396857],[0.04967859],[-0.20298636],[-0.017854981],[-0.3076046],[-0.053490125]]},{"dense_3_W":[[-0.4066065,0.97251016,0.033346247,-0.10809236,0.085812196,0.42724374,-0.22504164,0.30916232,-0.58347124,0.72406,0.47510427,0.4123366,0.73240745],[0.2478319,0.008268835,0.5303551,0.5601437,0.47338668,-0.5492546,0.47054175,0.45232275,-0.37064263,0.22936313,-0.08599906,-0.2583833,0.33278263],[0.12888186,-0.061529376,0.41770902,-0.6266616,-0.5737836,0.13413434,-0.46319184,0.70543456,0.042693373,-0.25845766,0.24550076,-0.44863605,0.488171]],"activation":"identity","dense_3_b":[[-0.039126486],[0.006651634],[-0.018630983]]},{"dense_4_W":[[-1.4650652,0.3291624,-0.77633846]],"dense_4_b":[[0.022054376]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-A120x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-A120x00x00'.json new file mode 100755 index 0000000000..7e478a115c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-A120x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.382928],[0.831745],[0.30223858],[0.03895733],[0.84030503],[0.837596],[0.8347243],[0.81036496],[0.7911638],[0.7661664],[0.741643],[0.0389547],[0.038950026],[0.03893477],[0.03872475],[0.038503967],[0.038221505],[0.03784756]],"model_test_loss":0.04651949554681778,"input_size":18,"current_date_and_time":"2023-08-06_02-19-12","input_mean":[[25.801882],[0.013322295],[0.00012067948],[-0.014118517],[0.012097556],[0.012325566],[0.012585732],[0.012787061],[0.012398119],[0.011666994],[0.01200301],[-0.014120493],[-0.014129876],[-0.014137334],[-0.01423779],[-0.014323668],[-0.014383154],[-0.014402781]],"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.68441534],[-0.13293418],[-2.3703692],[1.0513278],[-0.049006693],[0.4361167],[-1.6526378]],"dense_1_W":[[-0.3009049,-1.3486567,-4.1750894,0.1664098,1.4217969,0.1054205,0.59044117,-1.1253078,-0.6447645,-0.2502474,0.96328413,-0.28410953,-0.31804475,-0.1947907,0.38729358,0.4187392,0.4089219,-0.61806595],[0.010645178,-1.0883038,-2.5133154,-0.25236014,0.5784265,-0.51083916,0.4832404,-0.4849606,-1.0525901,-0.13375925,1.4631903,-0.4047331,0.0050009037,0.6095067,-0.09834975,0.2519382,-0.038879942,-0.069640845],[-0.8899254,-1.0230187,-1.439176,1.1679554,1.0210379,-1.1627477,0.8465841,-0.39189994,-0.7394402,-0.02806761,0.5266214,-0.40435284,-0.35882106,0.068795145,-0.2524109,-0.17227925,-0.18992348,0.12400747],[1.1131828,-0.5260197,-1.7403282,-0.33493716,-0.5395197,0.6774204,-0.8929776,0.60346586,-0.0066875615,0.0138423955,-0.11350326,0.6344896,0.1835288,-0.34619817,-0.4588385,-0.015822446,0.22261441,0.07688962],[8.6207525e-5,-0.70675,-0.0007860533,0.20384522,0.1318535,-1.014616,-0.009205295,0.9519155,0.46291843,0.028296059,-0.4624722,-0.6242399,0.016376816,0.6099459,-0.1398835,0.015813632,0.13008049,-0.14142884],[1.0258418,0.436164,1.851793,0.42419407,0.42999953,-0.19701813,0.41379267,-0.11730983,-0.3859213,-0.2814823,0.33615586,-0.5434531,-0.08128047,0.37816283,0.19217548,-0.36968186,0.09063848,-0.046774127],[-0.7571031,0.4970347,1.3990597,0.11719525,-0.56139064,0.7697264,-0.3542842,0.37262577,0.3073247,0.16176817,-0.36358887,0.43785885,-0.3470084,-0.07056978,-0.31751567,0.34110883,-0.28786156,0.15170412]],"activation":"σ"},{"dense_2_W":[[-0.30184454,0.3802063,0.4967091,-0.35028198,0.51986647,0.4000042,-0.21709704],[0.09750685,0.06357492,-0.7158158,0.2812576,-0.2995527,-0.7086002,-0.5355136],[0.08785149,0.3272583,0.47600603,-0.8402297,0.52597255,-0.45987862,-0.76386476],[0.08306526,-0.16242865,-0.6435881,0.53329647,-0.6757787,-0.37396497,0.7116671],[-0.22419164,-0.022920314,-0.04075283,0.8179769,-1.016423,0.34336585,0.5386958],[-0.15732218,0.33430022,0.11486374,-0.78740937,0.99910235,0.39482287,-0.5267216],[-0.77424455,-0.14682956,-0.55741477,-0.38432997,-0.28245547,-0.4974875,0.24210082],[-0.96440476,-0.7743205,0.13630813,-0.74980104,-0.007871434,-0.38619104,-0.035752743],[0.0011592604,0.10274233,-0.8914161,0.9206268,-0.62343633,-0.23734997,0.6717641],[-1.9650924,-0.90385705,0.55099785,-0.39466116,0.12528175,-1.7182279,0.89252603],[0.012258381,0.19495833,-0.08824382,-0.22507101,-0.15942216,-0.2785897,-0.22172463],[-0.1748081,0.17200747,0.4328849,-0.24547942,0.43270597,0.3054646,0.18000092],[-0.2559985,0.36312464,0.11709605,0.09233141,0.9310238,-0.029632417,-0.25157112]],"activation":"σ","dense_2_b":[[-0.1474299],[-0.3277726],[-0.21582118],[0.036078904],[-0.05503096],[-0.005676639],[-0.055123266],[-0.17541403],[0.0015975577],[-0.104181305],[-0.20293538],[-0.10939717],[-0.07661626]]},{"dense_3_W":[[-0.21298198,0.110187896,-0.60958046,0.45805818,0.54682696,-0.7046855,0.6269348,0.21081105,0.42615926,0.8367855,-0.1845897,0.06679362,-0.09966726],[0.15750672,0.1327235,-0.2181211,-0.36494306,-0.52508456,0.68815714,-0.5968023,0.026029408,-0.29523292,-0.05900207,0.06698885,0.25658783,0.51479304],[0.09501332,0.0035566674,-0.19596317,0.68399763,0.2697313,-0.61212915,0.09689588,0.17770325,-0.19476512,0.5935955,0.3390856,-0.20666745,-0.5220273]],"activation":"identity","dense_3_b":[[-0.030582575],[0.022597056],[-0.022908542]]},{"dense_4_W":[[1.1999085,-0.6172392,0.81952834]],"dense_4_b":[[-0.02394666]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-J510x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-J510x00x00'.json new file mode 100755 index 0000000000..d33eb1eac2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGG-J510x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.9383917],[0.8355506],[0.3390312],[0.03119497],[0.82312363],[0.82553184],[0.828844],[0.81786305],[0.8089189],[0.7983574],[0.78663474],[0.031027893],[0.031051435],[0.031081835],[0.031122375],[0.031173797],[0.031170428],[0.031091694]],"model_test_loss":0.012541690841317177,"input_size":18,"current_date_and_time":"2023-08-06_02-44-08","input_mean":[[29.07186],[-0.06912211],[0.013657895],[-0.002133514],[-0.072693],[-0.072877966],[-0.072644964],[-0.06586901],[-0.06460334],[-0.0633031],[-0.06268608],[-0.0021806108],[-0.0022094164],[-0.0022406473],[-0.0022201212],[-0.0022082466],[-0.0021234895],[-0.0020255505]],"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.026404249],[0.13105589],[0.16516872],[-0.06090279],[-0.14405267],[-2.502384],[2.218792]],"dense_1_W":[[-0.0021143458,0.4845371,-1.1704693,0.95396703,-0.45841944,-0.29033682,0.53932166,-0.37416738,-0.41057795,-0.23133592,0.54513544,0.26240727,-0.17659351,0.054697156,-1.1045226,-0.40194085,0.27317593,0.23824252],[-1.7758781,0.48786885,-0.00477917,-0.22493805,-0.515321,1.3253579,-0.6839125,-0.6387143,-0.17747526,-0.1419738,0.30965427,0.1709874,0.23986466,0.087099396,-0.62111133,-0.1853607,0.43471354,-0.028164243],[-1.7272408,0.3076149,0.00765919,-0.3540082,0.38353494,-1.060162,-0.1053273,0.6142481,0.07908985,0.1091809,-0.28727072,0.12411787,-0.030564038,-0.13592651,0.42188758,0.2681106,-0.008810187,-0.16449693],[-0.044815022,-0.29972354,-0.71397084,0.24435022,-0.6555711,0.1949695,-0.53771883,0.91733986,0.5420983,-0.06943186,-0.35568416,-0.44354844,0.33030087,-0.29652244,-0.008032364,0.36644423,0.20427188,-0.3417492],[-0.003277743,0.84705424,0.019459587,0.33182937,-0.32682094,1.042309,-0.6059422,-0.4592401,-0.14659667,-0.02649014,0.19585942,-0.29718736,0.60278606,0.13007255,-0.9305752,-0.15275106,-0.0688484,0.28789634],[-0.8902708,0.15024209,1.0265517,-0.25550342,-0.17248401,1.1255769,-0.5883171,0.15187076,0.15472615,-0.036912397,-0.12170663,0.2438034,-0.19690259,-0.06634575,0.02245947,0.3350466,0.1365908,-0.21177408],[0.8790335,0.08951593,1.0052422,-0.36786625,0.26908866,0.5844786,-0.5167404,0.17875771,0.15087639,0.004691414,-0.13105698,-0.304317,-0.16428755,0.42695817,0.6963123,-0.10174697,-0.08647683,-0.09663916]],"activation":"σ"},{"dense_2_W":[[-0.5507626,0.7375308,-0.49619263,0.64276683,0.31423688,-0.047046438,0.14320022],[0.06431445,-0.91829306,0.61997795,-0.87665886,-1.1699272,-0.266563,0.2754743],[-0.23304823,-0.80016303,-0.62006134,-0.050004035,-0.19096582,-0.0061811367,-0.35022056],[-0.6022076,0.24352926,0.3797693,-0.4641736,0.58151716,0.086308055,-0.024125725],[0.42020667,-0.43386108,0.78020096,-0.07576871,-0.96067387,-0.7232814,-0.35634282],[-0.5178249,-0.06836039,-0.37178206,-0.50464267,-0.0235822,0.026802443,0.30778465],[0.6183374,-0.23700354,0.6740862,-0.8557632,-0.63150823,-0.45882928,-0.59726715],[-0.015967928,0.26693594,0.08684808,-0.3305254,-0.21529642,-0.9623077,-0.7667298],[-0.40488502,0.08908774,0.11001882,-0.48002744,-0.38036668,-0.5579617,-0.8118769],[-0.6996953,-0.08383944,0.14571202,-0.2791817,0.19681555,0.61584616,0.5265486],[0.33932468,0.4615041,-0.46465427,0.030247016,0.33767444,0.4764484,0.49228984],[0.739168,-0.5647498,0.87683797,-0.41238332,-0.6725376,-0.31792146,-0.80818856],[-0.29039443,-0.15418902,0.16983575,0.404602,0.8631,-0.08719541,0.4968237]],"activation":"σ","dense_2_b":[[-0.03965108],[0.28927684],[-0.18241821],[-0.108551204],[0.6023028],[-0.031586934],[0.09187851],[-0.025837803],[-0.2092672],[-0.095620565],[-0.14529799],[0.21532695],[-0.038257282]]},{"dense_3_W":[[0.69658524,0.13405359,-0.5135836,0.039699517,0.4089305,0.015523863,-0.37848678,-0.5778005,-0.39460537,-0.08848027,-0.47406712,-0.5140029,0.4353925],[0.36546764,-0.85153615,-0.26655787,0.3066136,-0.7395783,-0.21865855,-0.5632104,0.11118248,0.04402694,-0.31351718,0.64110416,-0.21988907,0.48327655],[-0.48011708,-0.64806235,0.50163656,0.42039683,-0.5115424,0.22310808,-0.30667087,-0.23503205,0.08582519,0.6786953,0.5058911,0.013384847,-0.13791536]],"activation":"identity","dense_3_b":[[0.017121604],[0.016458558],[0.014057028]]},{"dense_4_W":[[0.9904114,0.8519098,1.0665607]],"dense_4_b":[[0.015847046]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGL-E130x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGL-E130x00x00'.json new file mode 100755 index 0000000000..782a71a292 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019 b'39990-TGL-E130x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.29796],[0.6869096],[0.3043955],[0.053746838],[0.69718754],[0.6945284],[0.6902723],[0.6647322],[0.648803],[0.6250414],[0.6004392],[0.05371038],[0.053712133],[0.053708736],[0.053587437],[0.053468417],[0.053344723],[0.05339542]],"model_test_loss":0.059682220220565796,"input_size":18,"current_date_and_time":"2023-08-06_03-09-39","input_mean":[[20.848803],[0.09077284],[0.0004920535],[-0.013807639],[0.08834558],[0.0896692],[0.090346344],[0.09061075],[0.08792884],[0.085393175],[0.07933361],[-0.013748395],[-0.013738229],[-0.013735628],[-0.01376535],[-0.013799873],[-0.0139192855],[-0.013997918]],"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.12927625],[0.039042104],[0.06305568],[0.5509221],[-1.2879711],[6.2787247],[-6.190384]],"dense_1_W":[[0.0027083303,-0.10112696,0.00021239324,-0.25530028,0.19750968,-1.0146434,0.19078395,0.17337662,-0.13830121,-0.34922576,0.18369395,-0.41599622,0.31424782,0.36015517,-0.025049085,-0.16560718,0.32461762,-0.14546283],[0.0011184415,0.34731707,0.000591945,0.020096293,-0.40281445,0.9857871,-0.54341626,-0.2996433,-0.0023747282,-0.11858881,0.16937213,0.40306735,-0.17791511,0.015529411,-0.32821342,-0.2275615,0.12587199,-0.13679199],[-0.01001298,-0.43627232,3.8718,-0.020895703,1.6419108,1.1942697,-1.3671072,0.8677243,0.6161768,0.25344366,-2.1509552,0.3635223,0.14490978,-0.93930185,0.51710093,0.37570456,-0.20570871,-0.06064528],[8.5005406e-5,1.5534368,0.0050369557,0.76705796,0.096726,-1.0784471,0.21296425,0.047997892,-0.504228,0.21246566,0.077220924,-0.5910409,-0.39798212,0.40880397,0.21635057,0.2121605,-0.57481694,-1.6995429],[0.0016134434,0.048475664,0.25585577,0.23253338,-0.4305987,0.23644239,-1.0944809,-0.41095805,-0.1506762,-0.39978436,-0.4151889,0.9040056,0.29542196,0.5904203,0.2782569,0.23929867,0.42858773,1.7019073],[4.025802,2.5585697,-2.4830704,-1.6901246,-0.3633653,-0.89175445,-0.29274487,-1.4318734,-2.3919513,-0.24146257,1.3682926,0.39687443,0.4862581,0.75898904,0.14836557,-0.61106664,-0.041406788,0.43938866],[-3.6613293,3.431119,-2.267677,1.7728403,-0.28788745,-1.4352858,-0.6164974,-1.5066901,-1.9746417,-0.3478911,1.202695,-0.8438115,0.29883432,0.07818771,-0.89911157,-0.89166856,-0.061227016,0.44411016]],"activation":"σ"},{"dense_2_W":[[0.24542594,-2.2395196,-0.14947067,0.041994963,-0.2406378,0.5588424,-0.41520935],[-0.8674741,1.2369518,0.48354208,-0.019096198,0.03493316,0.061816297,-0.6701676],[-0.34608337,0.24626403,-0.51114035,-0.7236035,-1.0586612,-0.8953887,1.0207646],[-0.6603612,1.3253964,0.6621064,-0.3136026,0.07262768,-0.73918,-0.087288626],[0.77753216,-1.2590296,-0.6827706,0.5964797,-0.081819944,0.025609335,0.23794611],[-0.027843717,1.0459992,0.16385391,-0.42424512,-0.60500985,-0.20268683,0.20546572],[-0.43445817,1.1618135,-0.25778547,0.38488075,0.3197356,-0.3485739,-0.6816144],[-0.7163731,0.474339,-0.11365654,0.0881506,0.23063587,0.097380914,0.07446911],[-0.9666889,0.9888771,-0.19698231,0.023333492,0.20297973,-0.0487526,-0.10499752],[-0.02302885,-2.0536203,-0.17813562,0.27943268,-0.45622507,0.46923488,1.5073433],[0.11166716,0.5468084,-0.059901386,0.17259055,-0.3219094,-0.50135636,0.19411519],[-0.51580197,0.98296887,0.12504756,-0.04137333,-0.5060232,0.20122856,0.0911331],[-0.39491713,1.1337756,0.17506048,-0.4171312,-0.10811109,-0.689537,-0.4207489]],"activation":"σ","dense_2_b":[[0.15749712],[-0.32822123],[-0.16269855],[-0.23587422],[0.1348652],[-0.16819751],[-0.13819136],[-0.1933703],[-0.16497153],[0.26468632],[-0.1549707],[-0.18713947],[-0.11378069]]},{"dense_3_W":[[0.36997053,-0.2313704,-0.4401421,0.026918795,0.8393843,-0.58421713,-0.44875944,-0.10873468,0.16037284,0.7108794,-0.46192494,0.07450364,-0.07943991],[-0.69230264,0.2847919,-0.2528415,0.40409324,-0.8334492,-0.019472836,0.005906335,0.3058701,0.62732667,-0.43410972,0.1603031,0.39690167,0.3522643],[-0.1730077,0.37127316,0.6238479,0.14937235,-0.54297125,0.56943595,0.46046963,-0.21287519,-0.046794858,-0.6515185,-0.625884,0.6049786,0.33925623]],"activation":"identity","dense_3_b":[[0.09230293],[-0.10100416],[-0.14628187]]},{"dense_4_W":[[-0.96249396,1.0031632,0.1955458]],"dense_4_b":[[-0.09062254]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019.json new file mode 100755 index 0000000000..2d65f4400f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC (BOSCH) 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.261368],[1.1474106],[0.37148234],[0.044279538],[1.1430647],[1.1446478],[1.1447154],[1.1187278],[1.0942419],[1.0602791],[1.0217831],[0.04425829],[0.044268712],[0.04427185],[0.044111896],[0.04397081],[0.04367603],[0.043223266]],"model_test_loss":0.041262850165367126,"input_size":18,"current_date_and_time":"2023-08-05_23-22-02","input_mean":[[24.15998],[-0.008219966],[0.004739006],[-0.013221193],[-0.008523361],[-0.008609849],[-0.007986069],[-0.006765848],[-0.006281763],[-0.008096367],[-0.011848589],[-0.013220585],[-0.013206273],[-0.013198256],[-0.013279306],[-0.0133954],[-0.01351665],[-0.013652078]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.011715764],[-0.16971639],[0.44084886],[1.8919995],[-0.57473946],[0.3265129],[0.665929]],"dense_1_W":[[-0.035294082,0.58739567,0.0068268306,0.5267725,-1.3068384,2.0108788,-0.8904008,-0.86464506,0.8847079,0.49210623,-0.27763724,0.6851789,-0.11328691,-0.61491024,-0.7021547,0.0578637,0.082666315,0.0749281],[-0.08059325,-0.77528465,0.93356776,-1.1226226,0.030571632,1.2159668,-0.3739228,2.0636218,1.051139,0.24026142,-0.8241013,0.51684606,0.45198372,-0.85868824,0.9150932,0.14920434,0.0996434,-0.23813146],[1.05331,0.6632812,0.586634,0.10609487,-0.16541673,1.0143963,-0.6739981,0.43193975,0.5483419,0.020105261,-0.2659555,0.27416015,0.3780343,-0.38164294,-0.04144785,-0.49568477,-0.6130558,0.6570192],[1.4749159,0.076626115,-0.88682747,0.046201207,-0.23487571,-1.1125354,0.055821165,-0.57242775,-1.03109,0.059293248,0.2898471,-0.65886724,0.19274879,0.39950013,-0.10046821,0.34578046,0.20585975,-0.28454834],[-1.0492898,0.8025768,-0.019681327,0.11809792,-0.3740394,1.1517578,-0.6477998,-0.59586203,-1.4050065,-0.8667816,0.755093,-0.04370645,0.32285377,-0.16848978,-0.21646905,-0.34349748,-0.28047857,0.49415973],[0.056685824,0.9262534,-5.3872395,0.7328496,-1.2155392,-1.1581563,-0.12605561,-1.2297785,-0.95465136,1.0993868,1.4996752,-1.0285505,-0.33488074,0.33622772,0.34516957,-0.14087252,0.36723128,-0.2868416],[0.9570638,0.24864312,-0.017469333,0.54736155,-0.49265823,1.0806886,-0.30185512,0.02353294,-1.477074,-0.70588714,0.615638,-0.07056425,0.046274792,-0.32864115,-0.3693316,0.0012585309,-0.105926886,0.20974532]],"activation":"σ"},{"dense_2_W":[[0.79805297,0.07995367,0.33311036,-0.1088086,-0.28585342,-0.11676164,0.3217794],[-0.6564382,-0.650472,-0.32395652,0.48536372,-0.39954782,-0.9293625,-0.3131151],[0.065390795,-0.36014688,0.035044394,-0.47919765,-0.21676321,-0.68095744,-0.58225524],[-1.4269842,-0.22010052,0.762021,1.5709931,-0.39910436,1.7860814,1.1529905],[0.81025195,-0.19804797,0.2811143,-0.13832566,0.21581413,-0.2242298,0.10002656],[-2.4172528,-2.9861536,-2.1297307,-2.3552132,2.0055087,3.841171,-1.6320437],[-0.15224119,-0.008424982,-0.7476414,-0.7229817,0.34834322,-0.62080944,-0.6412587],[-0.32463408,0.056613863,-0.013071884,-0.057739817,0.5155227,0.12653896,0.14592259],[-0.5659917,-0.43365908,-0.31137735,-0.3897718,-0.26343766,0.8946887,-0.6234644],[-1.2267396,0.0675833,-0.036197066,-0.0106164375,-0.65109164,0.3789509,-0.7397455],[-0.47206897,-0.3735633,-0.4683122,0.17489713,-0.69122815,-0.68286866,-0.23052849],[0.92053163,0.41530177,0.23816848,-0.3726253,0.27367908,0.71565676,0.19845398],[0.22949272,0.53540593,0.100375816,0.39428094,0.19491827,-0.0047999,-0.036115997]],"activation":"σ","dense_2_b":[[-0.080741115],[-0.098717436],[-0.04195425],[0.57887644],[-0.0376275],[-0.7313109],[-0.15826389],[-0.03734272],[-0.17071353],[0.06530881],[-0.16700919],[-0.10229606],[-0.0077384445]]},{"dense_3_W":[[0.6059949,0.4993691,-0.0014475341,0.40003,-0.44542313,-0.71407944,0.2787467,0.16292632,-0.4138824,0.27650607,-0.27067518,-0.14248835,0.17812036],[0.13085166,0.48013842,0.34201995,0.64287025,-0.600294,0.86557233,-0.14552544,-0.08809264,0.41238344,0.7531989,0.587104,-0.4580716,-0.6428474],[0.61981463,-0.5255673,0.47925967,-0.6429044,0.02112309,0.09041386,0.27671653,-0.054121528,-0.24291937,-0.610705,0.07889088,0.042044822,0.39591196]],"activation":"identity","dense_3_b":[[0.007450639],[-0.024559],[0.020729255]]},{"dense_4_W":[[0.2550702,-1.0187347,1.2050446]],"dense_4_b":[[0.021735787]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBA,A030x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBA,A030x00x00'.json new file mode 100755 index 0000000000..d3a1bb6bc2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBA,A030x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.828868],[1.3588611],[0.41877922],[0.042109862],[1.341616],[1.3486344],[1.3538228],[1.3478316],[1.328037],[1.2895682],[1.2430215],[0.04203343],[0.042057183],[0.042080052],[0.04202502],[0.0419028],[0.041697],[0.04135808]],"model_test_loss":0.01706458441913128,"input_size":18,"current_date_and_time":"2023-08-06_04-07-16","input_mean":[[23.807858],[0.03894964],[-0.009764001],[-0.011655796],[0.041675754],[0.04040426],[0.038979076],[0.034793235],[0.032237094],[0.03182612],[0.0351043],[-0.011650053],[-0.011667487],[-0.011685415],[-0.011778335],[-0.011861333],[-0.012015583],[-0.012147856]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.5615673],[0.7718801],[-3.7769625],[0.4954386],[-1.2168337],[0.3834438],[-1.4409952]],"dense_1_W":[[1.6587557,-0.03201305,-0.4806989,0.36387846,-0.48278156,-0.3905921,-0.0388727,-0.14381675,-0.24559438,-0.24794875,0.020391222,-0.36554426,-0.045786988,0.37558827,-0.5150567,0.011279025,0.37533346,-0.15497313],[1.856302,0.3850902,0.3822126,0.35716665,-0.5155237,0.07582075,0.8278192,0.35297492,-0.5057421,-0.09577705,0.27150053,0.065463945,0.034616094,0.029208321,-0.22792868,0.005505799,-0.15835825,0.12173401],[-1.966878,0.09221255,-0.5907079,0.43561482,-0.8552626,-0.6498669,0.31348014,-0.25722724,-0.3638425,-0.01811314,-0.1542113,-0.05421908,0.22119746,-0.052404914,-0.6179151,-0.010884692,-0.09178448,0.26305836],[-0.14198878,-0.7116039,-0.08581363,-0.13187033,0.4916839,-0.7834652,0.32754624,0.055074025,0.17711979,-0.013773762,-0.08651409,-0.12673153,-0.14753248,0.2293844,0.40847418,-0.14559479,-0.11703128,0.04356386],[-1.872429,-0.15238704,0.40203246,-0.02868895,0.14101167,-0.40041912,1.2534008,-0.09318469,-0.03764272,-0.087983645,0.26885307,-0.67364323,0.31495255,0.37216207,0.24445911,0.17665292,0.012208228,-0.2388997],[0.11508778,0.6316238,3.0819817,-0.16016749,-0.2190627,-0.06308648,-0.9233147,0.6661318,1.2984458,0.091404624,-1.5613545,0.18205322,-0.15544152,0.17819074,-0.051608723,0.10189869,0.014511001,-0.011415061],[0.18752714,-0.78931046,-0.10892214,0.19746861,0.58102345,-0.6981444,0.18360513,0.14009249,-0.062272664,-0.18457152,0.10788008,-0.5033553,-0.35309345,0.4638519,0.12721097,0.21150345,0.28216785,-0.38438264]],"activation":"σ"},{"dense_2_W":[[-0.41296047,0.009994055,-0.56219316,-0.5554611,-0.26297602,0.18101925,-0.16817299],[-0.37041304,-0.7107613,-0.7427994,0.114892006,-0.34880233,-0.22947483,-0.6385373],[-0.49729323,-0.07977957,0.66374093,-0.017636025,0.4205715,-0.9580843,0.43858218],[0.38907713,-0.76856196,-0.4815348,-0.21716839,-0.3260819,-0.5470339,-0.92810947],[-0.31227747,0.2155603,-0.36565685,-0.55944705,0.021143533,-0.49740636,-1.0799714],[-1.6338145,-0.4843085,0.12082096,-0.9157364,-0.15951772,1.3216581,0.5687549],[0.058031183,0.1682733,0.74648166,0.3186676,-0.21778281,-0.7438653,0.29449734],[-0.24235114,-0.33672345,-0.046596766,0.9317643,0.45289803,0.5095793,1.5327915],[1.3766825,0.38467634,-0.38601008,0.906059,-0.043449163,-1.0596842,0.4888961],[-0.19836484,0.14401913,0.7339981,-0.35825434,-0.07396672,-0.8178357,0.06628493],[-0.7688364,-0.24399456,0.09368414,-0.77106285,-0.61470944,0.2647412,-0.3470581],[-0.37717023,0.5652293,-0.7643337,-0.8346215,-0.42952943,-0.7881854,-0.66797024],[-0.17988431,0.41044593,1.0204062,0.23822533,-0.5833684,-0.18772323,0.49101728]],"activation":"σ","dense_2_b":[[0.08490299],[0.019760115],[-0.34167358],[-0.048392903],[0.03218207],[-0.070515014],[-0.24773756],[-0.22226538],[0.0024391487],[-0.28946945],[0.11847323],[0.16301791],[-0.264623]]},{"dense_3_W":[[-0.6551264,0.20192637,0.17543362,-0.37154144,-0.4004771,-0.19728865,0.23193756,0.45298353,0.5133015,0.15628278,-0.747469,-0.79281825,-0.11067879],[-0.1810723,-0.41811052,0.42333624,-0.39242148,-0.33600914,-0.8151715,-0.07931125,0.42133102,0.40676335,-0.2168068,-0.7562931,-0.3301234,0.52793944],[0.21940233,-0.54502714,0.58356434,-0.5688791,-0.43637988,-0.79480255,0.5184784,-0.16852017,0.013635831,0.11912652,-0.33910868,-0.32096627,0.2924903]],"activation":"identity","dense_3_b":[[0.012673786],[0.01128344],[0.022662073]]},{"dense_4_W":[[-0.85258716,-0.6859794,-0.7441323]],"dense_4_b":[[-0.010446228]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBA-A030x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBA-A030x00x00'.json new file mode 100755 index 0000000000..ef1e50fb4b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBA-A030x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.321424],[1.0282952],[0.3231149],[0.050224524],[1.0217996],[1.0223825],[1.0230912],[1.0082365],[0.9936996],[0.9721316],[0.94674724],[0.050032564],[0.050057508],[0.050079145],[0.04995292],[0.049778342],[0.049467754],[0.04904953]],"model_test_loss":0.04801265150308609,"input_size":18,"current_date_and_time":"2023-08-06_04-34-24","input_mean":[[24.640993],[0.0068147755],[-0.00017586962],[-0.007561566],[0.0058099264],[0.005813637],[0.0063611735],[0.005459741],[0.0055605527],[0.004139945],[0.0030338452],[-0.007694561],[-0.007676937],[-0.007659136],[-0.007666928],[-0.00773279],[-0.007866388],[-0.007996489]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.7891235],[-1.3479378],[3.686604],[-0.041683935],[0.44453996],[0.89426214],[-0.07687369]],"dense_1_W":[[-2.6697454,-0.03765943,1.0202249,-0.52507985,-0.13629472,0.6595523,-0.13299626,-0.048831288,-0.13964303,-0.62626183,0.16865243,0.25943044,-0.5501048,-1.1343125,0.94113344,0.9836929,-0.003212936,-0.70527804],[-0.41116533,1.0958958,0.012986355,-0.32682467,-2.421896,2.745534,0.9753023,0.13926715,0.91335714,0.52315897,-0.7597256,2.3798738,-0.07218695,-1.5000907,-1.3250524,-0.9156551,0.118389815,0.88640165],[2.4582686,-0.72908694,0.94068986,-0.34913862,-0.041044798,1.2958984,-0.024698433,-0.24287732,-0.42381126,-0.74013126,0.52158904,0.19182011,-0.514857,-1.3592434,0.94803435,1.2861104,-0.039313756,-0.8227899],[0.033646453,-3.5824103,-6.09218,0.43962353,1.8247055,-1.3911265,1.4840937,-0.15692972,-0.5501356,-0.7384373,2.226222,-1.9952009,-0.8098372,2.1930652,-0.10924932,1.0031217,-0.57847834,0.072315976],[0.10464661,-3.4566085,-0.04553826,-3.0969014,-1.1141416,-1.5840448,-2.459453,-1.2589267,-1.7775773,0.013487749,0.36193714,0.9506872,0.2682508,0.8656542,-0.36186987,-0.22262314,-0.09480439,0.49781433],[0.23307775,1.1548069,-0.005890356,-0.36526188,-1.7491344,1.6553907,0.7824479,0.28973,1.0826069,0.27719763,-0.7125912,1.6590072,0.50719297,-1.3509704,-1.0290717,-1.1256452,0.31335434,0.72853845],[-0.047236566,-3.5460665,-3.2294989,-0.019556083,0.1316267,-2.8824382,0.1793949,-0.37179092,-1.2276187,0.8579884,2.932915,-0.8372722,0.085465014,1.8520348,0.1647215,-0.5610902,-0.38116512,0.21042979]],"activation":"σ"},{"dense_2_W":[[0.35697874,0.13488762,0.17423156,0.051741544,-0.4516404,0.37111923,-0.3326717],[-0.020012485,0.20876743,-0.470396,-0.48033553,0.032553833,-0.055029735,-0.5415699],[0.53745645,0.11958758,-0.59997284,-0.3589176,-0.1754238,-0.013715318,-0.19413082],[-1.2985301,-0.89441663,3.2249649,-1.9904556,-3.8377733,4.1878753,0.033228528],[0.30518278,-0.14937647,0.55065024,0.44417018,-0.07627243,0.16218498,-0.53365713],[-0.26422963,-0.05829067,-0.22699557,-0.35607624,-0.5975787,0.2094802,0.34373868],[0.42617777,1.194375,0.6779001,-0.27449745,0.8595841,0.21543206,-0.30614635],[0.56020504,0.1932858,0.28161722,0.5497468,-0.44715992,-1.0248823,0.45490965],[1.1460264,0.17489141,0.008437298,0.5179868,1.538886,-0.15028878,0.65506715],[0.19077669,-0.359682,-0.07988683,0.13030027,-0.07886453,-0.09370026,-0.39061382],[1.2301579,0.48008695,1.26726,-0.61532944,-1.0548761,0.45611963,-1.2783793],[-1.6239753,-1.8029108,1.2390069,1.7501497,2.0948563,-0.19781892,0.31619692],[-0.13156338,0.56530046,0.7108869,-0.15966755,0.09949921,0.847682,-0.5426604]],"activation":"σ","dense_2_b":[[-0.2809068],[0.071166106],[0.09345343],[1.8773439],[0.18102801],[0.0072933524],[0.044778902],[0.17261441],[-0.022777654],[0.12632732],[-0.19065998],[0.2023951],[-0.08659856]]},{"dense_3_W":[[-0.44438112,-0.027584514,-0.0035520266,-0.29944763,0.38794,0.4122213,-0.48664984,-0.16656086,0.25323913,0.23457485,0.40909493,0.062813886,-0.46914828],[-0.33397192,0.19350144,-0.6312562,0.4614687,0.3287365,-0.6280831,-0.16421531,-0.1758853,0.10033424,0.08385237,0.19110605,0.21503538,-0.5893766],[0.41958082,-0.17782119,-0.13674387,0.51600313,-0.31165692,-0.15396564,0.23499595,-0.47514582,0.51199234,-0.48403975,0.541148,-0.8224857,0.2995478]],"activation":"identity","dense_3_b":[[0.065908685],[-0.027226413],[-0.075099945]]},{"dense_4_W":[[0.023863196,0.109854415,1.0994612]],"dense_4_b":[[-0.07588644]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBG-A030x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBG-A030x00x00'.json new file mode 100755 index 0000000000..c40b267684 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TBG-A030x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.345774],[0.6516757],[0.2946899],[0.036000013],[0.6570742],[0.65476614],[0.65189326],[0.6298937],[0.61620677],[0.5998042],[0.585703],[0.035867088],[0.035853058],[0.03583253],[0.035650827],[0.035447672],[0.03509526],[0.034743294]],"model_test_loss":0.04811468347907066,"input_size":18,"current_date_and_time":"2023-08-06_04-58-52","input_mean":[[23.215597],[-0.0051006116],[-0.0055196565],[-0.01567796],[-0.005811626],[-0.006771491],[-0.0076306327],[-0.0097848335],[-0.012780408],[-0.015299056],[-0.014718147],[-0.0158138],[-0.01582171],[-0.015839318],[-0.01598839],[-0.016109424],[-0.016302101],[-0.016615149]],"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.5351528],[-0.08217364],[0.7499818],[-0.9374063],[-2.8954298],[0.5392535],[-3.6015053]],"dense_1_W":[[-0.3087897,0.36021253,0.001141582,-0.5416911,-0.37556788,1.0140606,-0.10794389,0.041419383,0.09076369,0.22191924,-0.13948734,0.77267516,-0.42759845,0.05381029,0.18476713,-0.004047777,-0.30918673,0.26700374],[0.0053725103,2.3370762,2.1885164,-0.6068641,-1.8911628,-0.1114463,-1.1982107,1.506414,1.4532031,-1.4538794,-0.44084385,0.23688209,0.25542602,-0.57141525,-0.3206077,0.6730285,-0.21775477,0.139656],[1.3912241,0.5980732,0.007555601,-0.3157546,1.0649415,-1.0759517,0.38208148,0.39749306,0.4723742,0.079457946,-0.22618146,-0.52275753,0.36008105,0.15328345,0.31112024,0.47836456,-0.34323418,-0.06713888],[-0.5376176,-0.8203641,-0.0054783067,0.18999593,0.8493549,-1.6256207,0.5286132,0.17178455,-0.12867084,-0.57045287,0.380642,-0.21426243,0.012443455,0.08020425,0.04434846,-0.2713304,0.26582962,-0.11160915],[-1.6407828,1.6409405,2.1913364,0.022263499,0.09162234,0.83557415,-0.5309621,0.024207013,-0.07581847,-0.014490255,-0.81525505,-0.0492574,0.24616976,0.15028022,-0.59524703,-0.0825454,0.4095187,-0.094127044],[1.3961402,-0.08105169,-0.008954976,-0.07117163,-0.8383657,0.87360406,-0.6657976,-0.87985647,-0.5403045,0.18084845,0.17272979,0.52761483,-0.10129359,0.052255798,-0.6804288,-0.19871165,0.32997298,0.08579106],[-2.1104581,-0.24356179,-2.845604,0.654625,-0.96994275,-1.8767366,0.09136246,-0.1956461,0.53588957,1.3931365,-0.2444548,-0.15516165,0.21176384,0.14917651,-0.5694106,-0.70854956,0.0043206294,0.400021]],"activation":"σ"},{"dense_2_W":[[1.0278689,0.4348165,-0.7295973,-0.17747834,-0.10278106,0.8901122,0.17545664],[0.13757691,-0.1752453,0.14579734,-1.0508666,-0.22797246,0.38786298,0.19690785],[1.1957673,0.0039350316,-0.40309194,-0.2067109,-0.49688277,0.046528805,0.34363425],[0.9798856,0.49028137,-0.85653776,-1.1984895,-0.36523688,0.46900073,-0.32531098],[-1.2176576,-0.14628303,1.6475934,1.303342,-1.3007184,1.0287305,1.0352072],[-1.4576483,0.32830203,0.16497982,0.9603124,0.10295537,-0.26579857,0.044457998],[-1.0095707,-0.47438616,-0.8685609,1.2697761,-1.1946431,-1.4605931,1.2599539],[0.81197304,-0.09208761,0.40551397,-0.056155458,-0.58765817,-0.23485978,-0.2638987],[-1.5602592,0.087970994,0.52796125,0.39796272,0.12936676,-0.81510574,0.2554148],[-0.37163022,-1.1731296,-0.14651866,0.54896307,-0.6345117,-0.76398563,-0.594298],[0.55459255,-0.11434374,-0.7491592,-1.2193239,0.03146761,-0.27160767,0.13656238],[-0.41351238,-1.394458,0.32861343,-0.5550233,-0.06432965,-0.26546374,-1.3905721],[-0.07234112,0.12938619,-0.5258625,0.20187783,-0.11095027,-0.5983514,0.17259556]],"activation":"σ","dense_2_b":[[0.07223941],[-0.18307218],[-0.011371265],[-0.030353792],[0.399116],[-0.2056006],[-0.18057384],[-0.034727614],[-0.1045567],[-0.02377866],[-0.08901428],[-0.19908707],[-0.12886626]]},{"dense_3_W":[[0.6559019,0.16872415,0.47964025,0.6487196,-0.8777068,-0.23541385,-0.89913565,0.15309054,-0.58269215,-0.7279551,0.29873818,-0.32794726,0.08947766],[0.26739633,-0.18432048,0.59314704,-0.2931499,-0.4403377,-0.13366148,-0.7476601,0.040935304,0.4834687,-0.46328762,0.38387424,0.24528371,-0.11175901],[0.35347906,-0.0840438,0.3375809,0.18057397,-0.5231106,-0.3020804,0.014876371,0.24072316,-0.3709018,0.04671709,0.20817442,-0.017570972,-0.4402727]],"activation":"identity","dense_3_b":[[0.10084228],[0.0669727],[0.031454615]]},{"dense_4_W":[[1.4559509,0.20071371,0.08563809]],"dense_4_b":[[0.09271952]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TEA-T020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TEA-T020x00x00'.json new file mode 100755 index 0000000000..691c3d8257 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TEA-T020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[5.3856297],[0.59803385],[0.26888487],[0.03426154],[0.6021013],[0.60129803],[0.600173],[0.58730155],[0.5795345],[0.56942075],[0.56083477],[0.034230746],[0.034222513],[0.0342368],[0.034183532],[0.034086205],[0.03391226],[0.03362311]],"model_test_loss":0.04541628807783127,"input_size":18,"current_date_and_time":"2023-08-06_05-23-15","input_mean":[[19.52228],[0.079693735],[-0.0040563247],[-0.016650539],[0.080978006],[0.08070611],[0.080451526],[0.07918187],[0.07886801],[0.077705875],[0.07789241],[-0.016722582],[-0.016714904],[-0.01669564],[-0.0163877],[-0.016280727],[-0.016055403],[-0.015882453]],"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.08104281],[3.8909714],[0.057941712],[3.2389338],[-0.10055978],[-4.1230493],[0.006579657]],"dense_1_W":[[0.0019672236,1.7124008,5.2847867,0.31392902,0.54002285,1.149604,-0.40869483,-1.4113252,0.25494707,-0.3660509,-0.9714891,0.9837418,0.9273289,-0.36905542,-0.59060776,-1.2861198,-0.14369972,0.1715609],[2.0075417,-1.0534788,-2.5004108,0.10716736,0.4385972,-0.6827907,0.45479578,-1.0585693,-1.0196034,0.4777303,0.98654383,0.1564951,-0.558304,0.5957592,-0.12573951,-0.28325465,0.012213282,0.11858977],[0.093256205,-0.27820048,-1.1696479,-0.46487743,-0.5531493,0.66647863,-1.3765898,0.36791116,0.12435645,0.5120396,-0.24957871,0.12178344,0.8057537,-0.54323083,0.07556655,-0.0014235709,-0.056690272,0.15405625],[-0.024608504,0.010786505,-0.037946787,-0.32397965,-0.4846185,1.032738,-0.6093787,-1.2915424,-0.03675826,-0.21950667,0.44720176,-0.44202822,-0.5876285,-0.5605793,-1.8322814,-1.6573476,-1.3555098,-0.7895331],[-5.2810225e-5,-1.4757657,-0.0046121287,0.4629083,1.1526763,-1.8665615,0.6062522,0.7366192,0.40736353,-0.106786564,-0.2220295,-0.98978,-0.2532476,0.9250863,0.1220093,0.0031458773,-0.19573754,-0.063445985],[-1.8668225,-1.0928262,-2.4432688,0.76242334,1.1889721,-0.9581941,0.0032050284,-0.8823583,-1.2202708,0.3004889,1.2086878,-0.53652066,-0.28588182,1.1637923,-1.0296966,-0.27406633,-0.034686062,0.2627352],[-0.09106887,-0.31075913,1.17905,-0.74274266,-0.20221533,1.2496672,-0.28414592,0.021432078,1.0067991,-0.25608063,-0.43758723,0.52320695,0.09239755,-0.6291368,0.6016738,0.16577406,0.10509334,-0.21720383]],"activation":"σ"},{"dense_2_W":[[-0.085414894,-0.20918435,0.17373109,0.10737947,-0.82685804,0.20342289,0.212457],[-0.20115225,0.29464254,-0.44532576,-0.014358113,0.691581,-0.33132514,-0.13227542],[-0.09087903,0.5010818,0.5607322,0.03217964,-0.5053537,-0.39688778,0.47023636],[-0.30364254,0.49323803,0.055883832,0.05977077,-0.7746708,-0.17011528,-0.2880824],[0.18880495,-0.5190757,0.31874385,0.29983982,-0.3985195,0.035492044,-0.44292748],[-0.9273464,-0.13842295,-0.036056563,-1.1684054,0.9577527,0.66510856,-0.027885118],[0.099401176,-0.5396238,-0.6235069,-1.3781581,0.79803157,0.43778622,-0.40184033],[-0.9619544,2.0476668,-0.8396164,-0.12754412,1.6685368,0.44752124,-1.353382],[-0.5558298,0.5099584,0.110654734,-0.37428614,0.7436413,0.6881325,-0.9043214],[-0.06558644,0.24584974,0.6592815,-0.19850211,-0.9235771,0.078365356,0.45574242],[-0.57793844,-0.91109204,0.60808426,0.3936904,-1.3562016,0.5863055,0.008310561],[-0.8589996,-0.53710437,-1.2663639,0.18269065,2.293696,1.254948,-0.7799597],[0.6527474,-0.3124623,-0.34758097,0.27498147,0.002866847,-0.77761084,0.6969836]],"activation":"σ","dense_2_b":[[-0.0076770815],[-0.0019400008],[0.023349117],[-0.008292667],[-0.011734453],[-0.4216689],[-0.20562689],[-0.08058182],[-0.12332897],[-0.007057092],[-0.27095175],[-0.28152117],[-0.0048717586]]},{"dense_3_W":[[-0.54598933,0.30111024,-0.31070733,-0.30095556,-0.28257152,-0.30806056,0.61478865,0.639757,0.48092464,-0.31418368,-0.6392647,0.82360584,-0.12001248],[-0.4009894,0.28335997,0.059711292,-0.19983076,0.3395215,-0.6511789,0.46926227,0.012918541,-0.4768196,0.34748575,-0.33296925,0.40980956,0.29510143],[-0.32422495,-0.28320903,0.22919968,-0.18012339,0.25318158,0.44350082,-0.51897806,0.51467586,0.14846486,-0.5721817,-0.20305538,0.67044383,0.2138928]],"activation":"identity","dense_3_b":[[-0.043942094],[0.03467515],[-0.047385007]]},{"dense_4_W":[[-1.329141,0.5136682,-0.26201633]],"dense_4_b":[[0.043247793]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TEG,A010x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TEG,A010x00x00'.json new file mode 100755 index 0000000000..1d04ec1f69 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016 b'39990-TEG,A010x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.414752],[0.809778],[0.32968998],[0.038563218],[0.81399393],[0.8130152],[0.8116411],[0.8044098],[0.7990659],[0.7908311],[0.7781809],[0.03845621],[0.038476728],[0.038496315],[0.038509805],[0.038388517],[0.03807538],[0.037689537]],"model_test_loss":0.007678080350160599,"input_size":18,"current_date_and_time":"2023-08-06_05-48-54","input_mean":[[21.623014],[-0.06315314],[0.028330239],[-0.0069412887],[-0.07000519],[-0.06754908],[-0.06473992],[-0.055388335],[-0.04912587],[-0.041271344],[-0.032815684],[-0.006859833],[-0.0068624676],[-0.006869615],[-0.0069527323],[-0.0069756005],[-0.0070287744],[-0.0070639635]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.7605686],[3.5044053],[2.0832198],[-0.25828874],[0.3039091],[-0.089539275],[0.118453376]],"dense_1_W":[[-1.7583797,0.589543,-1.0319984,0.110393494,-0.21674192,-1.7155991,0.8325825,-0.16004571,-0.913345,-0.0812225,0.67669153,-0.80105156,0.25075755,0.916074,-0.095394626,-0.020104544,-0.005883078,-0.080861904],[1.8151304,0.19393112,-1.090924,0.33811733,0.05085238,-1.1737207,0.32235587,-0.44897,-0.5966143,-0.14382847,0.75931793,-0.14169198,-0.35926667,0.5962395,-0.093506224,0.16791871,-0.18208155,-0.02677418],[1.5013692,0.84768164,0.9670481,-0.18950337,0.05811444,0.036552854,0.6984422,0.047381528,-0.19678752,-0.6145364,0.11384745,-0.26299715,0.15431781,0.42217052,-0.61956424,0.076191664,0.17176628,-0.015458679],[0.010009106,-0.08474945,-0.11727848,-0.5954893,0.21653149,-0.83162314,-0.12228016,-0.006441115,-0.48080042,0.007156214,0.22622024,-0.6214733,0.30532193,0.7250713,-0.22122426,-0.3155122,0.31625217,0.4177061],[-0.0022816912,0.36319026,2.6736248,-0.23002017,-0.6987022,-0.0061110156,-0.36389568,0.5511679,0.08328913,0.5146548,-0.5392843,0.7437445,-0.046624888,-0.21139482,-0.35767952,-0.3415711,0.3786916,0.07167081],[0.0050385734,-0.43462712,-0.05308,0.025633823,0.29115447,-1.6235275,0.13262115,0.3036328,0.48786274,0.30519634,-0.50269544,-0.89282864,0.34320372,0.69487166,0.34770367,0.17281933,0.122459196,-0.2835277],[-0.16018158,-2.6079166,0.051285002,-0.8959181,-2.6147542,-2.7455857,-3.0082538,-2.166046,-1.4802098,-0.9145916,0.4948057,-3.1999378,-1.971094,-1.618746,-0.6039725,0.5491652,1.9303606,5.316056]],"activation":"σ"},{"dense_2_W":[[-0.8494065,-0.94668996,-0.25524712,-0.49821833,0.10248175,0.16570607,0.08037025],[0.407395,1.2177871,0.6595171,0.51689386,-0.5024803,-0.112236835,0.55882525],[0.38773674,-0.94255173,-0.21581627,0.40207997,-0.7363527,0.35848704,0.21115805],[0.6955828,-0.40022588,0.18614924,-0.1998243,-0.5945706,0.63007945,0.121129975],[0.6693154,-0.42887792,-0.43107304,-0.12879528,0.096946076,0.4243904,-0.1448268],[-0.45311376,-0.06397047,-0.475693,-0.18040454,0.19093697,-0.36706218,-0.008771336],[-0.84971607,-0.5401956,0.28763822,-0.50512564,-0.279698,-0.8399409,0.5433065],[-1.0076836,-0.49472776,0.20072678,-0.19309734,-0.29518792,-0.08193111,0.2831805],[-1.0347741,0.15746295,0.09370998,-0.25177705,-0.017589109,-0.40057716,0.45802802],[-0.32091177,0.17798328,-0.49051303,-0.12601621,0.10984774,-0.7267025,0.09803074],[0.39275715,0.24044967,-0.058441114,-0.15604238,-0.051029686,-0.18873541,0.061358593],[-0.1873293,-1.9225551,-0.067686126,-0.5021896,-0.051216066,0.24865563,-1.235181],[1.4839585,-1.365924,-1.2432988,-0.8610499,-0.119583905,-0.20667724,-2.5413523]],"activation":"σ","dense_2_b":[[-0.090611175],[0.13049172],[-0.2995885],[-0.18042783],[-0.18258452],[0.03439863],[0.038779728],[-0.0974849],[0.2627597],[-0.09157007],[0.0042730095],[-0.022836503],[0.07373033]]},{"dense_3_W":[[-0.09544235,0.07383687,0.57643867,0.51306605,0.5831484,-0.39026436,0.4894308,-0.30050197,-0.3482933,0.16585375,-0.013200446,-0.538111,0.012991255],[-0.23729068,0.22367261,-0.22196151,0.670639,0.15204789,-0.5559103,-0.42776123,0.12732859,0.0007805089,-0.40029454,-0.12749611,0.1569053,-0.42127144],[-0.5697941,0.6104953,0.22483532,0.38580984,0.058564458,-0.20807105,-0.41168946,-0.49617398,-0.67103213,-0.032330584,0.30103138,-0.6870759,-0.7820781]],"activation":"identity","dense_3_b":[[0.0017381236],[0.0156807],[0.015327422]]},{"dense_4_W":[[-0.36441112,-0.7462365,-1.0239874]],"dense_4_b":[[-0.012290128]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016.json new file mode 100755 index 0000000000..debdaaf7d9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2016.json @@ -0,0 +1 @@ +{"input_std":[[8.880729],[1.3764424],[0.4036752],[0.044919465],[1.357929],[1.3648189],[1.3701559],[1.3636794],[1.3427843],[1.3031353],[1.2558507],[0.044844456],[0.04486737],[0.044886783],[0.044833656],[0.044710048],[0.04439941],[0.044009637]],"model_test_loss":0.03750712797045708,"input_size":18,"current_date_and_time":"2023-08-06_03-39-56","input_mean":[[23.76268],[0.025191484],[-0.0054714084],[-0.010682941],[0.027966013],[0.026647689],[0.025542766],[0.022714077],[0.020973299],[0.023003811],[0.02802845],[-0.010661417],[-0.010671549],[-0.010681824],[-0.0107730925],[-0.010828986],[-0.010959005],[-0.011070088]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.5776205],[-0.23610623],[0.105955176],[0.07035416],[-0.44049412],[-4.875287],[0.95284677]],"dense_1_W":[[2.6162603,0.96552926,-1.1709021,0.68316555,-0.83422256,-1.2780359,0.2215925,-0.363209,0.3182224,0.050232545,-0.16977811,0.15275992,0.01305875,-0.24862735,-0.3824611,-0.32907623,-0.08854755,0.29336992],[-0.033986192,-0.4997676,-3.4389174,0.7424149,0.664207,0.14749247,0.5930936,-0.7861187,-1.5643623,-0.66575646,1.7639327,-0.63187826,-0.30908775,0.22797343,0.36383292,-0.43728524,-0.08584815,0.0859059],[-0.399227,0.95630413,-0.00024232137,-0.15680003,-0.657746,0.88117325,-0.28739563,-0.40365663,0.13200954,0.17651056,-0.119062886,0.5858267,-0.21834603,-0.06490571,-0.011869801,-0.46006832,0.055071417,0.16692579],[-0.5654201,-0.9509558,0.00096591073,-0.043163724,0.4077403,-1.0859221,0.6999001,0.40714318,-0.08873732,-0.07508248,-0.009093482,-0.46344966,-0.19199978,0.4810677,0.48018777,-0.28993973,0.41181335,-0.27362508],[-0.027356783,-4.2967224,-0.03678484,-0.32151344,-0.73972255,-2.5777402,-3.2287362,-2.5549042,-1.4497441,-0.43103775,0.6453438,-0.17506233,-0.31516784,0.5563384,0.85075074,-0.57829696,-0.19835036,-0.024371902],[-2.47195,1.7926816,-1.1769953,0.16563822,-0.82507175,-1.0493809,-0.32214803,-1.1703736,0.2470295,0.2510944,-0.11734796,0.13303131,0.030326199,-0.00082738034,0.023316598,-0.33300236,-0.31752133,0.38321474],[2.1512134,1.7400922,-1.7055479,-0.3629506,-1.7764045,-0.28031406,-1.3791944,-0.80302006,-0.122044094,0.8002589,-0.3441996,-0.07645867,0.23166081,-0.38216463,0.64409703,0.11736102,0.22685654,-0.30116174]],"activation":"σ"},{"dense_2_W":[[-0.52089065,-0.064282656,0.9368965,-0.78820074,0.18612167,0.050849117,0.27317494],[0.71986425,0.006931284,-0.083075926,-1.1616415,0.027728708,-0.928848,0.83347905],[0.8144789,0.20632064,-0.71373665,-0.06819771,0.9545801,-0.4286985,0.42867258],[0.71121395,0.06992666,-0.8302117,0.07830932,0.25297147,0.0047203694,-0.0066684796],[-0.5690574,-0.14917742,-0.3785819,0.9758459,0.28018865,0.41372767,-0.21782406],[0.13315567,-0.4577933,-0.1426717,0.19464079,0.008886417,-0.116589725,0.08225403],[-0.9950312,-1.3679215,0.091107205,0.9272021,1.1016536,-1.3227009,-1.2095336],[-0.3986191,-0.9487305,0.38871515,-0.08156303,0.95174986,-0.6304789,0.13525334],[0.2225127,-0.2169731,0.9058736,-0.5802039,-0.24850035,-0.28582534,0.3907818],[-0.5881804,-0.044960845,-0.90182215,0.8056298,0.5574692,1.0463717,-0.5374416],[-1.2164664,-0.40320966,0.53783023,0.27278855,-0.49228838,-0.14903766,-0.8090045],[-1.2831542,0.4933893,0.021853147,0.071227364,-1.4159098,0.76011354,-0.8172033],[0.078262046,-0.5118518,0.22079428,-0.02778036,-0.222457,0.23040481,-0.66731334]],"activation":"σ","dense_2_b":[[0.05072228],[-0.1091474],[0.1004324],[0.021801215],[0.03440032],[-0.07559257],[0.18204498],[-0.008477362],[0.033497173],[-0.15622234],[-0.088286996],[-0.1264465],[-0.09580737]]},{"dense_3_W":[[-0.49234378,-0.12957415,0.5802615,0.4467619,0.590399,0.24340731,-0.5555279,-0.66425663,-0.4981453,0.60517937,-0.56258386,-0.26889455,-0.35886267],[-0.60045487,-0.55883497,-0.3071459,0.07875048,0.5536381,-0.32903612,0.14948905,0.46808386,0.28372547,0.3629737,0.22399715,-0.5433762,-0.15223768],[-0.46732837,0.03954109,0.09032384,-0.38590652,0.39412647,-0.153768,0.03560084,-0.11765058,0.35194537,0.3046047,-0.094702706,0.3176626,-0.32317603]],"activation":"identity","dense_3_b":[[0.051931284],[0.06253407],[0.04909886]]},{"dense_4_W":[[-1.265387,-0.37792373,-0.20574242]],"dense_4_b":[[-0.04775983]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022 b'39990-T39-A130x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022 b'39990-T39-A130x00x00'.json new file mode 100755 index 0000000000..f6b6dc3973 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022 b'39990-T39-A130x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.9030814],[1.0453333],[0.3170026],[0.04460543],[1.0398759],[1.0416826],[1.0431112],[1.0299109],[1.0157675],[0.99077934],[0.96246296],[0.044478334],[0.044504065],[0.04452782],[0.044476468],[0.044363912],[0.04419919],[0.043906868]],"model_test_loss":0.028506241738796234,"input_size":18,"current_date_and_time":"2023-08-06_07-28-34","input_mean":[[25.499252],[0.028501904],[-0.0028704705],[-0.006133777],[0.028923629],[0.028642828],[0.028525524],[0.027212968],[0.02708821],[0.025971029],[0.025491338],[-0.0061524976],[-0.0061464473],[-0.0061450717],[-0.006191866],[-0.006216849],[-0.006269715],[-0.0064120986]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.1612873],[1.1304555],[-0.045539603],[0.18508305],[-0.056664106],[2.359981],[-0.003104607]],"dense_1_W":[[-1.0261196,1.6714283,-4.9839725,-0.25472918,-0.5927435,-2.1332676,0.41972587,-1.4847857,-0.5297093,-0.5873834,0.4926704,0.35519528,0.5963999,0.29114577,-0.44986778,0.24840392,-0.19448282,0.29746208],[1.5984797,1.2807095,-2.855458,-0.28417665,-0.6741327,0.14131893,-0.8411344,-0.48792252,0.20918193,-0.12904613,-0.06057345,0.27155536,0.5005968,0.12182206,-0.4972699,-0.26681903,-0.13244413,0.41992095],[-0.01631524,-0.11127795,0.62778777,0.14360946,-0.19943185,1.6136284,-0.74262536,0.17609622,0.47054547,-0.66130835,-0.34703505,0.30890283,-0.011658758,-0.9054101,-0.07164689,0.6967732,-0.07093875,-0.29011974],[0.24211173,-0.12465638,-2.2150717,0.5197125,0.5969984,-0.9115877,1.2352886,-0.61733866,-0.70987016,-0.34082124,0.6792926,-0.14224347,-0.39383444,0.29159838,-0.6175597,0.5266842,0.09999084,-0.22068383],[0.0020527053,-0.124916494,-0.0072491574,-0.32790923,0.6288478,-1.2486193,-0.077829614,0.290347,0.27691,-0.38082907,0.04554726,-0.42446274,-0.11070265,0.38662457,0.4693785,0.28157672,0.053745594,-0.1984251],[2.0714083,-0.45528322,2.190492,-0.2294528,0.80421203,-0.24660808,0.631071,-0.50690234,-0.35972506,-0.05297636,0.38328585,-0.41214883,0.13557836,0.58240587,-0.12109465,-0.19043957,0.1687669,-0.041427426],[-0.007373681,-0.24503441,-0.766152,0.19888358,-1.297256,0.97417396,-0.7913301,0.32273322,0.63816434,0.11862124,0.2828841,0.32503918,0.26446965,-0.75070786,0.17617404,-0.102831915,0.12236231,0.072185144]],"activation":"σ"},{"dense_2_W":[[0.84075487,-0.9698966,-1.1863552,0.39111534,0.61300087,-1.074546,-0.6429345],[-0.16599394,-0.34588924,-0.34965044,-0.070526905,-0.5569146,-0.33049506,-0.07336439],[0.5915367,-0.5171752,-0.13241306,-0.46928012,0.92575246,-0.72971493,-0.722351],[1.5593696,1.5437826,-0.8387062,1.0409446,0.35062063,1.3033848,-0.048639357],[-0.030403387,0.44161096,0.46425432,-0.1915973,-0.7348229,-0.3039007,0.29630142],[0.5050197,0.5076173,0.4501814,-0.48338422,-1.1334643,-0.32370403,-0.065987155],[-0.53219205,0.38907552,-0.56034696,-0.21546341,0.62926334,-0.26963118,-0.11765221],[-0.13998857,-0.41180918,-0.68951356,0.5040533,0.43773162,-0.37432873,-0.3054661],[0.060598448,-0.052345384,-0.05926513,-0.79581696,-0.536353,-0.58540416,-0.5439933],[-0.1929987,-0.074298754,0.2989631,0.09550092,-0.7899365,-0.4491801,0.20246264],[0.1728909,-1.0256978,-0.30253175,0.36276552,-0.5255227,-0.3984827,-0.042940307],[-0.37483662,-0.5567497,0.24257487,-0.9368595,-0.71663094,-0.7617147,0.5222287],[0.3595344,0.31717294,0.641732,-0.1949688,-1.1738145,0.16135724,0.059228286]],"activation":"σ","dense_2_b":[[-0.2908681],[-0.11676679],[-0.20927037],[-0.022777379],[-0.056520674],[-0.1025079],[-0.010873501],[-0.08840967],[-0.20289198],[-0.08710838],[-0.3852181],[-0.09839834],[-0.18181786]]},{"dense_3_W":[[-0.45135853,-0.43684617,0.16072902,-0.3907492,0.5050306,0.5548873,-0.0016576584,0.30690256,0.43964118,0.4280059,-0.029079122,0.6312158,-0.16514885],[0.8751171,-0.41735888,0.5142745,0.41110802,-0.5030071,-0.30468556,0.5376879,0.45157358,0.087431885,-0.2522119,0.017974667,-0.5217977,-0.5559542],[0.10950831,0.45705712,-0.2692873,-0.15272701,0.5711136,-0.009069097,-0.36759618,-0.6967481,-0.29732275,-0.16078,0.037027664,0.5842399,0.46625558]],"activation":"identity","dense_3_b":[[-0.048144232],[0.038749587],[-0.04579552]]},{"dense_4_W":[[1.0830055,-1.3294458,0.5527587]],"dense_4_b":[[-0.04092441]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022 b'39990-T43-J020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022 b'39990-T43-J020x00x00'.json new file mode 100755 index 0000000000..a96719aa6f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022 b'39990-T43-J020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.9427967],[0.87432146],[0.3449518],[0.041372716],[0.88073754],[0.8794919],[0.8774352],[0.85170704],[0.8311592],[0.80134684],[0.7728664],[0.041213993],[0.041262195],[0.041307535],[0.04130587],[0.041196827],[0.04102109],[0.040738378]],"model_test_loss":0.032795943319797516,"input_size":18,"current_date_and_time":"2023-08-06_07-53-24","input_mean":[[23.424137],[-0.12035412],[0.0040231682],[-0.0048080194],[-0.118285224],[-0.11840886],[-0.118516885],[-0.116480246],[-0.11301401],[-0.107189395],[-0.09997545],[-0.0046797423],[-0.0047175437],[-0.0047546746],[-0.004927507],[-0.005063428],[-0.005227956],[-0.005348952]],"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.9417369],[-0.24273592],[1.4223384],[1.0486506],[1.447565],[-0.6927629],[1.0804037]],"dense_1_W":[[-0.4058283,-0.81563294,0.00033183617,-0.27639547,3.1342106,-1.7313385,-0.228073,0.9913803,-2.3060467,-0.96959984,0.75029725,-0.22633775,-0.21490769,0.52506644,0.95701593,-0.8487675,-0.19613568,0.23440045],[0.034500286,1.0905547,7.9065676,0.10637991,0.026667506,0.49172896,-0.59656775,0.9809094,0.0049328264,-0.4872245,-1.1707573,1.2050977,-0.18107356,-0.5157706,-0.38871238,-0.47595924,-0.17320715,0.5229742],[0.5588498,-0.6570481,0.0021321403,-0.2896172,1.1236126,-0.575634,0.56214845,-0.016197847,-1.0184777,-0.7082013,0.07940224,0.23188433,0.004668281,-0.2397409,0.34752426,-0.22746754,0.22416848,-0.100688644],[1.541966,0.42912173,-7.156812e-5,-0.5115884,-0.25799006,1.4016091,-0.72769475,-0.40935022,-0.5667163,-0.3968267,0.61420083,0.06877578,0.041468274,0.2682816,0.1332453,-0.3914694,-0.0010588124,0.10998447],[0.19860983,0.18228313,1.4962244,-0.24713515,0.309561,1.1720607,-0.4798918,0.60050476,0.5141609,0.010664739,-1.9016608,0.06223622,0.4967279,-0.18392076,-0.484281,-0.18898958,0.4617198,-0.01832523],[-0.051042855,0.36178812,1.3606699,-0.20764841,0.10236579,1.031499,-0.72788227,0.9447528,0.38027644,0.2683604,-1.9967669,0.91526955,-0.15156461,-0.5247163,-0.6771034,-0.011823598,0.7620024,-0.19407678],[1.524111,-0.18364623,-7.7449076e-5,-0.026552787,0.15087162,-1.7394279,0.66268677,0.75670546,0.7576604,0.20102891,-0.6852404,-0.28242418,0.23329456,0.32087836,-0.26189858,0.14684094,0.30590108,-0.1579458]],"activation":"σ"},{"dense_2_W":[[0.21370113,-0.5469511,0.38994473,-0.87885034,0.22193275,-0.2623318,0.9725592],[-0.39974675,-0.2669233,-0.7280023,0.0744481,0.31313443,0.68184376,-0.8690639],[-1.1618038,1.040867,0.07579963,1.2550652,0.9444778,0.6170199,1.5694822],[-0.55496246,-0.6109581,0.047377832,-0.6034833,-0.563908,-0.29172823,-0.1873672],[-0.47154403,-0.15439837,-0.33464748,-0.32102966,-0.43370283,-0.30466565,-0.50861603],[0.94471455,0.15859249,-0.49109864,-0.82194316,-0.28949282,-0.26072252,0.6200601],[-0.17757672,0.42580798,0.5348059,-0.86694545,-0.5312405,-0.20982458,1.0570047],[-0.9717297,0.6032017,-1.4936788,-1.3035914,-0.5127796,1.341816,-1.5745448],[-0.21112834,-0.380845,-0.2000692,-0.14918523,0.37498268,0.49246258,-0.07759563],[0.5571681,-0.37033182,-0.45625687,-1.1621255,0.45340016,-0.14524722,0.8753156],[-1.644583,1.9391878,0.6463959,1.3763337,0.7492759,-0.33528683,1.2163771],[0.20058957,-0.5563082,0.08262119,-0.48758602,0.08011511,0.15911381,0.589174],[1.0828615,0.3445846,0.008124553,-1.3508773,-0.7360904,-0.6484338,-0.007040125]],"activation":"σ","dense_2_b":[[-0.09792841],[-0.12135925],[0.28469688],[-0.3146848],[-0.030983448],[-0.22707085],[-0.07664623],[-0.28448796],[-0.03253531],[-0.19589026],[0.38351893],[-0.13162117],[-0.24342652]]},{"dense_3_W":[[0.6724217,-0.3455274,0.048990987,-0.08371895,-0.28143087,-0.019941397,0.6274694,-0.5836906,-0.40752873,0.17574412,-0.40815762,0.5177674,0.6628741],[0.71871656,-0.67533195,-0.5226403,0.0062096105,-0.03194264,0.2772788,0.45594773,-0.80367815,0.25479558,0.28959462,-0.7620481,-0.055599444,0.32025474],[0.49274486,0.089585,-0.58489066,-0.15075734,0.35932115,0.16879536,0.18689315,-0.38381797,0.37573037,0.19162786,0.30417326,0.35219628,0.20757556]],"activation":"identity","dense_3_b":[[-0.029657809],[-0.0076349713],[-0.10236976]]},{"dense_4_W":[[-1.0305482,-0.9352994,-0.15167141]],"dense_4_b":[[0.019799424]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022.json b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022.json new file mode 100755 index 0000000000..4a5872bce7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CIVIC 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.358706],[1.0686424],[0.34114116],[0.044889364],[1.068699],[1.068358],[1.0675814],[1.045456],[1.0242518],[0.99177456],[0.9590156],[0.04477875],[0.04480059],[0.04482342],[0.04474932],[0.04458978],[0.044322193],[0.043946933]],"model_test_loss":0.035726360976696014,"input_size":18,"current_date_and_time":"2023-08-06_06-15-03","input_mean":[[24.615007],[-0.03660665],[0.0016246386],[-0.006489807],[-0.0361033],[-0.035993658],[-0.036171526],[-0.03401853],[-0.031212736],[-0.02772113],[-0.025683384],[-0.0064613656],[-0.0064720884],[-0.006487653],[-0.0065700756],[-0.0065773614],[-0.0066702664],[-0.0067906133]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.9387486],[1.7947302],[-2.419479],[-0.046714567],[-0.07710784],[-0.011005453],[2.2013001]],"dense_1_W":[[1.5500982,-0.562216,0.82173073,1.1276568,-1.1044303,2.0344303,-0.5962017,0.43611562,0.6137577,0.54552734,-0.40140414,0.13477002,-0.33703992,-0.995159,-0.5198411,0.6988811,0.23579559,-0.43389362],[1.9096831,0.4647536,-1.062686,-0.18994598,-0.7350096,1.1260368,-1.2783738,-0.017420385,-0.32890928,-0.6363917,0.1548712,0.10676455,0.18015237,-0.0953862,-0.13519493,0.2339727,0.07321837,-0.04309801],[-1.3224562,0.034447707,0.7349111,0.15789251,-0.54802585,0.91166073,-0.5362905,0.5046039,0.30484954,0.5900371,-0.38941008,0.33457753,-0.27889228,-0.6909375,-0.14148402,0.97603106,-0.13406259,-0.30469695],[-0.0017459231,-0.09968895,-0.014508084,0.23403876,0.836069,-1.5712544,0.19792208,0.34136322,0.15050764,-0.2420643,-0.05131571,-0.09686847,-0.47325152,0.21186271,0.033762608,0.17737845,0.0014673215,-0.12473483],[0.00029148505,-0.6372151,-0.0053334557,-0.05010357,0.99977154,-1.0182008,-0.14067085,0.3974594,-0.2723742,0.04584643,0.073329695,-0.34156838,-0.11684916,0.11896246,0.34009737,0.6478362,0.13086675,-0.43019354],[-0.0077469624,-0.1509263,-3.2484512,0.16014525,-0.5749223,-0.9640095,0.9543776,-0.7414716,-0.7872326,0.2741354,1.5463,-0.3455074,0.08961764,0.027934242,0.045294646,0.23221987,-0.1519019,8.7261986e-5],[2.0402718,-0.72642046,1.1085396,0.08754884,0.35070625,-0.522105,1.2273571,-0.049034014,0.7027618,0.56165534,-0.22607273,0.21941654,0.19681507,0.25899538,-1.0231488,-0.19570431,-0.065851234,0.37131593]],"activation":"σ"},{"dense_2_W":[[-0.60671103,-0.10295715,-0.2275175,0.703453,0.5107893,-0.019612279,0.060930736],[0.32735822,0.09359731,1.1961514,-0.5468047,-0.6979488,-0.8116451,-0.8816686],[0.28230911,0.26441634,0.32522315,-0.2709414,-0.97729933,-0.1853032,-0.6816012],[0.85672635,0.40473634,0.06306575,0.043324664,-0.09925389,-0.6707503,0.48766825],[0.3574693,0.24644808,0.8436976,-0.73305976,-0.87197644,-0.17207824,-0.34952453],[1.2755688,1.0824895,0.84866655,-0.5946056,-0.93967986,-0.64516634,0.18630773],[0.2624753,-0.12604286,-0.24697196,-0.36811814,0.14403982,0.43120542,0.1445742],[0.44066232,0.1534366,0.25932267,-0.65874845,-0.26324567,-0.31705675,-0.831388],[-0.030025106,-0.31389698,0.17181242,0.3696615,0.008856971,-0.5338608,-0.019544462],[0.053924862,0.46772835,0.94262034,-0.71287125,-1.2770078,0.48717985,0.09874367],[-0.5596553,0.1355415,-0.6685472,0.5694037,0.5835357,-0.050862506,-0.30772945],[0.26585215,0.15441975,-0.27715218,0.17482373,0.30534902,0.13441981,0.24543025],[-0.700537,-0.30525044,-0.40211698,0.23966432,-0.07130374,0.3517828,-0.30104256]],"activation":"σ","dense_2_b":[[0.0006462817],[-0.045901865],[-0.08447791],[0.018081808],[0.028199553],[0.15011074],[0.024169737],[-0.07767265],[0.003401174],[-0.09530233],[0.026245346],[-0.019555494],[0.029535577]]},{"dense_3_W":[[-0.4269903,0.38330346,0.3818396,-0.104428,-0.010993002,0.25576162,-0.14891353,0.5712297,0.43450522,-0.18818101,-0.40029064,0.113605164,-0.41539222],[-0.4444491,0.6585591,0.5286078,0.014278995,0.3499434,0.3896106,-0.37057588,0.058567323,-0.5987489,0.35249916,-0.5103405,-0.0007771231,-0.20807561],[-0.5559521,0.25394833,-0.35546854,0.4645985,0.3801913,0.20466149,-0.20871717,0.37793857,-0.093845844,0.5868493,0.12606087,-0.4579316,-0.5141172]],"activation":"identity","dense_3_b":[[-0.039426688],[-0.038285036],[-0.0388908]]},{"dense_4_W":[[0.98477775,0.89640814,0.94241107]],"dense_4_b":[[-0.040733967]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA,A040x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA,A040x00x00'.json new file mode 100755 index 0000000000..c6e920b660 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA,A040x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.540721],[0.97576207],[0.3313625],[0.037843365],[0.9687592],[0.97072476],[0.97218126],[0.97131544],[0.9684263],[0.9628179],[0.9533884],[0.037710436],[0.03772708],[0.037749223],[0.03774041],[0.03766764],[0.037492532],[0.037175607]],"model_test_loss":0.008188891224563122,"input_size":18,"current_date_and_time":"2023-08-06_09-11-21","input_mean":[[25.743162],[-0.03419077],[1.694457e-5],[-0.0058412226],[-0.032445744],[-0.031978246],[-0.032078236],[-0.03277639],[-0.033087995],[-0.03541121],[-0.03758282],[-0.0058416994],[-0.005846817],[-0.005852368],[-0.0059208623],[-0.005982407],[-0.0061672865],[-0.0062656854]],"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.00080405985],[0.7854822],[-0.12339557],[4.3081584],[-0.7866419],[-4.1709423],[-0.8409999]],"dense_1_W":[[-0.011464089,-0.21720867,1.7038208,-0.8018396,-0.31464818,0.6335713,-0.37999704,0.64242667,0.94747055,-0.08193086,-1.2666425,0.025586708,0.432876,-0.09704421,0.07735149,0.66563797,-0.055053703,-0.16396695],[-0.92180765,0.47178316,0.037608773,0.25415114,-0.49117133,0.68139184,0.12054695,-0.040742125,-0.32435754,-0.20692724,0.31272388,0.33671296,0.19074297,-0.5344022,-0.32216358,-0.16691925,0.12728797,0.038775913],[-0.103043444,-0.30544865,-0.25746647,-0.17237106,0.052905187,0.4400764,-0.67536193,-0.06703455,0.24000691,0.061700933,-0.38188213,0.31053326,-0.18271814,-0.37914285,0.009493447,0.29651824,0.05323582,-0.039326254],[1.0605786,-0.060056392,-0.5810357,0.22576235,-0.13578887,0.011457395,0.030639524,-0.40217978,-0.83826524,-0.6082418,0.15762202,-0.23657623,-0.46672913,-0.047515202,0.35081884,0.13669041,0.22352155,-0.080405615],[1.6374902,1.1410245,0.59359837,-0.27866,-0.13386817,0.13762549,-0.16988072,0.41271707,0.14994158,0.27289742,-0.16715708,0.40429235,0.005580401,-0.69167936,-1.1274492,-0.71839035,-0.8099919,-1.0824188],[-1.0478101,0.0044337907,-0.5723063,0.11623494,-0.034284834,-0.650081,0.5400228,-0.29708397,-1.1310123,-0.20287414,-0.046815645,-0.61760116,-0.08759878,0.072666995,0.19055136,0.5814996,-0.16782755,0.014659258],[0.86524445,0.49477735,0.035929088,-0.13251677,-0.36860162,0.9281964,-0.471796,-0.18288918,-0.0002611768,0.058924783,0.05732142,0.45911258,0.06966288,0.0044731353,-0.40496862,-0.22457011,-0.16845165,0.31822684]],"activation":"σ"},{"dense_2_W":[[-0.15426435,-0.046661343,-0.43946412,0.624533,-0.09205635,-0.47168306,-0.8016902],[-0.53101015,-0.3685878,-0.5863992,0.4510693,-0.16216898,0.9400012,-0.21748114],[0.22712189,0.16995162,-0.29991642,-0.7336719,0.3751938,-0.53952307,0.26768756],[0.27349526,-0.6804414,0.07234837,0.6874648,0.106653705,0.12508605,-0.65603495],[0.07313242,-0.97843266,-0.5148208,-0.14121139,0.07274063,0.79724526,-0.4383511],[-1.1264609,-1.1770498,0.52797097,-0.36545604,0.5212269,1.5757213,-0.085593045],[-0.097091556,0.369785,0.14884436,-0.67693,0.5140766,-0.8676453,-0.016739987],[0.085827775,-0.100521185,-0.6224066,-0.30192837,0.35849503,0.041973434,0.35816756],[-0.42120174,-0.3240992,-0.4097286,0.18434778,-0.20248985,1.2600665,-0.68534833],[0.124515295,0.049313035,0.2003641,-1.1119213,-0.04333023,-0.38769117,0.48661488],[0.48089156,-0.05526323,0.25297868,-0.92118233,-0.34588912,-0.34006065,0.5504206],[0.50554097,0.048244223,-0.13434097,-0.4654796,-0.175737,-0.5890811,0.5968848],[0.2714133,-0.76585513,-0.4710219,0.72425234,-0.08094333,0.45696303,-0.24324968]],"activation":"σ","dense_2_b":[[-0.30605197],[-0.0722725],[-0.061257467],[-0.0143502485],[-0.055046625],[-0.11999873],[0.0056539187],[-0.047943417],[-0.031266216],[-0.028862225],[-0.044943057],[-0.006668254],[0.009506268]]},{"dense_3_W":[[-0.18731649,-0.08790928,0.05439343,0.08261642,-0.18359958,-0.42045295,-0.49756563,0.55669594,0.42419568,-0.36434284,0.29313055,0.55965924,-0.20341128],[0.17575984,0.11026421,0.10531715,0.39341643,0.4011678,0.34916008,-0.45358273,-0.12599039,0.6143738,-0.71328527,-0.583732,-0.4881176,0.5818727],[-0.1525316,0.094295666,-0.708604,0.46496,0.4017641,-0.020599859,-0.03952808,-0.17086326,0.27307847,0.0376419,-0.5269954,-0.020001007,0.52539593]],"activation":"identity","dense_3_b":[[0.0076207337],[-0.07809654],[-0.07344336]]},{"dense_4_W":[[0.03995432,-0.7892518,-0.67607296]],"dense_4_b":[[0.07132181]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A040x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A040x00x00'.json new file mode 100755 index 0000000000..b14894015b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A040x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.041878],[1.0629945],[0.33361882],[0.04470225],[1.0674024],[1.0653876],[1.0623872],[1.0305605],[1.0037603],[0.9659078],[0.9315669],[0.044532184],[0.044523124],[0.044505402],[0.04425743],[0.04400374],[0.043602895],[0.043178014]],"model_test_loss":0.050424300134181976,"input_size":18,"current_date_and_time":"2023-08-06_09-38-42","input_mean":[[25.06497],[0.074133344],[-0.003671015],[-0.0061551738],[0.07510349],[0.07509486],[0.074765146],[0.07192954],[0.06950652],[0.06514102],[0.06143682],[-0.0061509674],[-0.006146431],[-0.006140578],[-0.0061463905],[-0.006205736],[-0.006276082],[-0.0062960368]],"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.045673113],[0.7692602],[3.6866767],[-3.3985317],[1.3993363],[0.0016273671],[0.036870282]],"dense_1_W":[[-0.052982505,0.06573528,0.5580607,-0.032680344,0.20608537,0.6934426,-1.0580161,0.66156256,0.06940833,0.55721414,-0.5868014,0.7408258,0.25445056,-1.0855104,-0.049797036,-0.38484633,0.13387734,0.20955376],[0.82260245,-0.01934001,-0.8111281,-0.418187,-0.78638,0.022366054,-0.8557658,0.23719062,0.43918282,0.55011797,-0.5533236,0.73082197,0.39111775,-0.66629314,0.08269158,0.29669186,-0.49751994,0.30054808],[2.0007224,-0.31018302,-1.8883644,-0.46103692,-0.182084,-1.1692013,0.18340528,-0.45994648,-0.63908005,-0.38715318,0.80325556,0.21984062,0.25636217,0.26680768,-0.064179085,0.06973789,0.029908044,-0.051753674],[-1.7532426,-0.44865423,-1.6179291,-0.5686573,0.20539987,-1.3053204,0.3192343,-0.39442357,-0.7004488,-0.24894904,0.73180014,0.023328634,0.32073107,0.6846023,-0.30778062,-0.08105825,0.2476391,-0.07462059],[1.0470898,0.13631506,0.9359457,0.7269999,0.48282263,-0.5516526,0.9416267,0.5219997,-0.12951173,-0.4016694,0.07761096,-0.9994486,0.00889868,0.37176034,0.17872189,-0.6502687,0.14589402,0.009702152],[-0.0022762392,0.54675275,-0.00070867874,0.030965228,-0.4284072,1.4484926,0.120421134,-0.8816781,-0.12615833,-0.3113866,0.5081008,0.26918358,0.42232123,-0.35750753,-0.4280094,-0.102303475,-0.05531494,0.061394636],[-0.0032405164,-1.2942008,-5.5235214,-0.3269165,0.6261494,-0.23602912,0.20249991,-0.63172483,-0.9731877,-0.5860727,2.2520695,-1.5046892,-0.71375567,0.421119,1.3741344,0.75040346,-0.39606163,0.1400608]],"activation":"σ"},{"dense_2_W":[[0.8646755,0.6376676,-0.26202708,-0.85868895,-0.07354249,0.69815946,-0.30686975],[-0.79679435,-0.32395786,0.058006734,0.82902014,1.1024014,-1.2736039,-0.13299379],[0.009736041,-0.35343233,-0.33363932,-0.5966722,0.2299318,-1.2228652,0.09423904],[-0.62453824,-0.16437167,0.10942579,-0.060125638,0.45838273,-0.27015314,-0.092518486],[-0.63952684,-0.032483563,0.028590042,0.8343624,-0.30501577,-0.4676638,0.4329707],[0.79951334,-0.10701151,-0.478834,0.11537501,-0.4790387,0.29373074,-0.45883498],[-0.38821566,-0.29865965,0.2401885,0.10201916,0.42648098,-0.95061827,-0.565707],[-0.33430934,-0.2328123,-0.4937564,-0.82547146,-0.38432762,0.33364365,-0.056874156],[-0.1879909,0.3929959,-0.035755124,0.042920403,0.099859655,0.34126663,-0.06774957],[-0.51760626,-0.7163332,0.46123,0.80046433,0.774819,-1.2809892,-0.071995825],[-0.2212481,-0.03539259,0.15500164,0.21800677,0.43387356,-0.9091443,-0.23553239],[0.0588365,-0.41657263,0.07661814,-0.45269957,-0.31246582,0.02730263,-0.52968377],[0.13910463,0.18369111,-0.8858626,0.21748419,0.09809011,0.5938796,-0.64197445]],"activation":"σ","dense_2_b":[[0.008012182],[-0.23325977],[-0.2646487],[-0.097698614],[-0.12920478],[-0.017523877],[-0.22028513],[-0.23008367],[-0.05471147],[-0.037543405],[-0.12661214],[-0.33879024],[-0.008564516]]},{"dense_3_W":[[-0.551337,0.31575167,-0.024517886,0.18234162,0.46279272,-0.56980455,-0.39026403,-0.40458184,0.12136029,0.77060765,0.5890807,-0.3826594,-0.66982037],[-0.5236327,0.1744381,0.2181645,0.23067036,0.3604599,-0.076701306,0.59198534,0.33430535,-0.3067706,0.40997064,-0.025134366,0.43618867,-0.18496975],[0.05840421,-0.04895308,0.13395454,0.1376814,0.007172281,-0.2367984,0.11277437,-0.39632714,0.30861083,-0.18120328,0.32123065,-0.3300665,-0.18326597]],"activation":"identity","dense_3_b":[[-0.044578213],[-0.053736046],[-0.039986763]]},{"dense_4_W":[[-1.1892661,-1.1514404,-0.23770276]],"dense_4_b":[[0.04846745]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A110x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A110x00x00'.json new file mode 100755 index 0000000000..cd654f158c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A110x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.1835976],[0.50364196],[0.2896164],[0.03164149],[0.50323784],[0.5006565],[0.4974164],[0.47733185],[0.4672212],[0.4542667],[0.44199622],[0.03166166],[0.031591646],[0.03152813],[0.031085894],[0.030772492],[0.03049355],[0.030188115]],"model_test_loss":0.019862331449985504,"input_size":18,"current_date_and_time":"2023-08-06_10-03-07","input_mean":[[28.85244],[0.04425216],[-0.0041957223],[0.00189616],[0.043761343],[0.044177886],[0.044471547],[0.042200115],[0.042693224],[0.04143423],[0.039585713],[0.0020322406],[0.0019822456],[0.0019134535],[0.0018024064],[0.0017335061],[0.0015339962],[0.0013252598]],"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.0658591],[0.1936436],[0.4518953],[-0.11609417],[-0.1570751],[0.048095826],[-0.046569347]],"dense_1_W":[[-0.004707457,0.4473956,0.13764602,-0.22395788,0.24242325,0.63776755,-0.08127542,-0.42399785,0.29475614,0.2582357,0.109188624,0.09910998,0.37004673,-0.2302277,-0.70400834,-0.546052,0.023547564,0.4741781],[0.0381955,0.18421915,0.04350661,0.21583354,0.5884542,-0.2158797,0.07718011,-0.5616537,0.9083394,0.28627363,-0.1894099,-0.2100446,0.2202206,-0.1370028,-1.1312602,-0.47487968,0.24832286,0.4408434],[0.7762898,1.0442834,0.11404148,-0.34878308,-0.69273955,0.19884741,-0.1626407,0.13349383,-0.10278405,0.23388162,-0.089451395,0.46177745,0.37723348,0.121763706,-0.13678956,0.17649323,-0.07549353,-0.3959775],[-0.783192,1.122855,0.11342515,-0.24931048,-0.2821019,-0.35657248,0.02068258,-0.05386639,0.06588212,0.02498524,0.044847738,0.4069754,0.47117302,-0.19849198,0.20845832,-0.0699782,0.33122358,-0.6795351],[0.00011326268,1.4474508,-0.098368526,1.2762718,0.11316425,-1.4516851,0.64065456,-0.46301305,-0.8283665,0.27508196,0.18671927,-0.077629045,-0.18879989,-0.3955652,-0.48879743,-0.4056032,0.56802994,-0.11471572],[-0.0065793786,-2.1783507,-4.4956875,0.762094,0.012346029,-0.15102327,0.2524295,-0.28421104,-0.21410158,0.61175346,1.7392899,-0.90156704,-0.70463955,-0.2968591,0.38830018,0.14128718,0.2747739,0.35311458],[0.02353997,0.5450724,-0.0693562,-1.2107227,0.037023995,-0.7917878,-0.85124665,-0.15312323,1.1409906,-0.098705195,-0.6119329,0.6510644,0.5715456,0.6724691,0.14829972,-0.040057376,-0.23069982,0.20904635]],"activation":"σ"},{"dense_2_W":[[-0.36790708,-0.18296367,0.087080166,-0.39760453,0.3830243,0.62241393,0.6919145],[-0.7202243,-0.5884722,-0.15091783,0.2659929,0.25983915,0.5449759,-0.28087506],[-0.21222237,-0.06622563,-1.3436327,0.88072056,-0.46033114,-0.9914056,-1.2281073],[-0.46628833,-0.6112388,-0.7006136,0.045268953,-0.23548295,0.7181559,0.20354599],[1.2175599,0.12018807,1.7073644,1.8852,-2.6759875,-0.3933904,-1.1572093],[1.3216994,0.41956323,0.8226303,0.4240975,-1.5096661,0.27466688,-0.9298248],[0.58509827,0.1648558,-0.6233443,-0.4295914,-0.07741821,-0.24388136,-0.73506886],[-0.04536918,-0.118758574,-0.3014637,0.047318716,0.64757127,0.14709125,0.39016318],[-0.6148649,-0.044658426,0.047632687,0.16062225,0.12757532,-0.034659315,0.21982273],[1.2609576,0.5800496,1.1579013,1.0035592,-1.7974799,0.22080913,-1.1055709],[0.13451947,0.16517463,-0.29923442,-0.058697946,-0.5875903,-0.06878949,-0.14853679],[0.89515847,-0.05425017,-0.032778192,1.0362097,-0.7897799,-0.25606072,-1.7008675],[-0.9417327,-0.41135532,-0.17152491,0.24920806,0.12018676,-0.27114066,0.35788602]],"activation":"σ","dense_2_b":[[0.035452064],[-0.061806444],[-0.30320156],[-0.12731765],[-0.6156671],[-0.28060502],[-0.23378925],[-0.117936365],[-0.048415676],[-0.6017655],[-0.06631394],[-0.66439056],[-0.23023686]]},{"dense_3_W":[[-0.11672003,0.29795578,-0.12456141,0.5381993,-0.53840685,-0.40247312,0.20989291,0.49159276,-0.22878003,-0.042824574,-0.33531192,0.28073245,0.41946027],[-0.32805252,0.475642,0.3573824,-0.49994805,-0.39569223,-0.047109567,0.37351373,-0.48844007,-0.24302717,-0.09685829,0.50959045,-0.5235462,-0.4820086],[-0.39068025,-0.54056823,-0.01175546,-0.18405816,0.17738347,-0.23445752,0.3221799,0.3147654,-0.12418336,0.099429056,0.4175861,0.476971,0.4542602]],"activation":"identity","dense_3_b":[[0.0010864699],[0.0154576665],[-0.007836798]]},{"dense_4_W":[[-0.5562848,0.1392212,0.80414385]],"dense_4_b":[[0.013946899]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A220x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A220x00x00'.json new file mode 100755 index 0000000000..a87088b951 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017 b'39990-TLA-A220x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.9001546],[0.8910148],[0.3274157],[0.040540826],[0.8834622],[0.88589716],[0.8873834],[0.8764539],[0.8639384],[0.8453592],[0.82689476],[0.040332053],[0.040367138],[0.040403977],[0.040435143],[0.040342487],[0.04024493],[0.04013887]],"model_test_loss":0.020078090950846672,"input_size":18,"current_date_and_time":"2023-08-06_10-28-39","input_mean":[[25.522003],[0.08582278],[0.008883545],[-0.0002037975],[0.08510361],[0.08551095],[0.0860396],[0.08883015],[0.08862984],[0.0864298],[0.085077845],[-0.0002148503],[-0.00018821703],[-0.00016339964],[-6.241602e-5],[-6.687763e-5],[-0.00015304367],[-0.00029702246]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.915253],[2.939623],[-2.4185839],[-0.39643773],[-2.1530814],[0.4893658],[-0.13724159]],"dense_1_W":[[0.9216667,0.97025573,1.421669,-0.1396882,0.010332967,0.18803304,-0.9332185,0.2703217,0.00060562004,-0.12600191,-0.46021286,-0.2240383,0.20271374,-0.51589763,0.6207215,0.44742525,-0.39367884,-0.09291592],[1.6715853,0.7785398,0.005850832,-1.0173491,0.4553079,0.8458037,0.15688483,0.2634571,0.17708033,0.5423796,-0.055217728,0.9168812,-0.05433235,-0.024376664,-0.11111259,0.07965978,-0.23499657,0.3001446],[-0.7692335,0.45367107,1.3062898,0.12114362,-0.17871203,1.0367825,-1.3598495,0.32659042,0.01519312,0.08482268,-0.53881526,0.24113093,-0.12762344,-0.99958193,0.72357845,0.28504324,-0.07869418,-0.2410385],[-0.074967586,-0.8932838,-4.0057364,0.23615836,0.00941108,-0.7341468,0.49867523,-0.9044516,0.017188888,0.23537557,1.3382684,-0.77924585,-0.360125,1.0818274,0.53180915,-0.3764401,0.011514799,-0.08477046],[-1.5886045,1.2000962,0.004453795,-1.3671204,0.4819133,0.9824152,-0.5023873,0.28243682,0.40704778,0.07260184,0.1365017,0.86467725,0.03233452,-0.00952661,0.41033107,0.08297209,-0.46377563,0.34948194],[0.0075910687,2.266687,-0.0016384237,-3.0903444,-0.12066506,1.5151056,-0.63468546,0.5725647,0.6257293,0.4341759,0.15218543,0.8532952,0.8546602,0.40895426,0.53916293,1.0854417,-0.201866,-0.102309674],[-0.0011239403,-0.4433194,0.00013618177,0.07685914,0.44627297,-1.6901579,1.0461199,0.4270096,-0.19944872,-0.11602348,-0.023843208,-0.30021128,-0.7937927,0.82419336,0.41979665,0.24550915,0.12163588,-0.3639143]],"activation":"σ"},{"dense_2_W":[[0.08416271,-0.5661969,-0.094601616,-0.3356624,-0.43013197,0.29852423,-0.8936265],[-0.5426509,-0.31218562,0.1849797,0.92220074,-0.5298976,-0.28005078,0.958257],[-2.0036426,-2.5069656,-0.067196965,0.6672491,2.1173136,-1.5086235,1.268983],[0.8646879,0.21513842,0.4661601,-0.37882644,0.43791708,-0.2726415,-1.1590294],[-0.1635753,0.0068531507,-0.23812433,-0.30881009,0.19607985,-0.5296054,1.3078867],[0.65519524,-0.06720645,0.5960915,-0.5721334,-0.028427409,0.57693595,1.4606386],[-0.8911282,-0.3865244,-0.21443066,0.3449886,0.2604962,-0.21623199,1.1859549],[-0.031681005,-0.001625172,-0.53140074,0.5074547,0.17773396,0.117535636,0.6632053],[-0.0011490636,-0.36523163,0.0739205,-0.64264727,-0.18925111,0.30340505,-0.96839094],[-1.436539,-1.8282489,0.36490238,0.29383078,1.4719483,-1.199148,0.6856162],[-0.19116129,-0.55093837,0.68717355,0.5201886,0.015916765,0.39059064,-1.8648827],[-0.5506419,0.028565405,-0.78308797,-0.22101557,0.26896167,0.5421017,0.4748071],[-0.94420785,-2.5275416,2.1711938,-1.8177447,3.1286716,1.4996614,-2.2908063]],"activation":"σ","dense_2_b":[[-0.00038391305],[-0.11835421],[-0.47617963],[-0.19209594],[-0.3635465],[-0.25211266],[-0.3669457],[-0.18456477],[-0.10934913],[-0.38656622],[0.10978525],[-0.44773534],[-1.3670834]]},{"dense_3_W":[[0.047170885,0.4870071,0.71617556,0.12684053,0.6240494,-0.06735785,0.43605405,0.48105004,0.24143027,0.47041366,-0.81402504,-0.6457708,-0.80621207],[0.6236853,-0.39605463,-1.0041298,0.6159786,0.21967448,-0.37449515,-0.12439844,-0.47799566,0.8507706,-0.0146902865,0.67411196,-0.43745592,0.7313358],[-0.07477755,0.34393924,-0.19138569,0.24039291,0.40378293,0.16958828,0.10585917,-0.04923932,-0.29897973,0.25619817,-0.65909696,0.15387979,-0.470382]],"activation":"identity","dense_3_b":[[-0.12447261],[0.07334185],[-0.15171815]]},{"dense_4_W":[[-0.44094202,0.9386458,-0.12973748]],"dense_4_b":[[0.09239494]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017.json new file mode 100755 index 0000000000..56b5e6782c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V 2017.json @@ -0,0 +1 @@ +{"input_std":[[9.079519],[1.117335],[0.32821873],[0.04513038],[1.1160785],[1.1158687],[1.1147403],[1.0893666],[1.0659956],[1.0314285],[0.99783367],[0.04497426],[0.044967793],[0.044959538],[0.04481279],[0.044600893],[0.044237226],[0.043830905]],"model_test_loss":0.05013991519808769,"input_size":18,"current_date_and_time":"2023-08-06_08-46-45","input_mean":[[24.945726],[0.056781527],[-0.006332743],[-0.0054867254],[0.057909872],[0.057552766],[0.05728289],[0.054190118],[0.05235296],[0.048357345],[0.0448629],[-0.005489833],[-0.005468405],[-0.005448704],[-0.005441959],[-0.0055107307],[-0.0055533946],[-0.005588048]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3742944],[2.0560386],[0.070786394],[0.08766052],[-7.2637663],[4.9462605],[0.020425294]],"dense_1_W":[[-0.88963157,0.47497272,1.1810282,0.6939777,-0.36621186,1.347931,-0.7933228,0.85621536,0.66951233,-0.11786804,-0.6730566,0.112765215,-0.28919625,-0.33895963,-0.62124485,0.25326887,0.21473351,-0.12489331],[1.223516,-0.036567718,-1.247157,0.09799731,-0.97558075,0.16902182,-1.0449882,-0.046705905,0.29223862,0.30116007,-0.09839103,0.46722287,-0.0449582,-0.39868206,0.07668579,-0.11536017,-0.0691049,0.10267897],[0.018545184,0.81794965,3.4399781,0.052234847,-0.4958513,0.38696352,-0.638153,0.87363166,0.86702484,0.7031613,-1.9006683,0.85754114,0.8998447,-0.52486235,-1.0076646,-0.66781485,0.2555468,0.17366274],[0.0037442108,1.4584165,0.0061913775,0.24082592,-0.7234466,1.0945269,-0.21835686,-0.038823094,-0.20537247,-0.4526858,0.3522938,0.7368147,-0.4907756,-0.72209734,-0.3003073,0.24139397,-0.27028123,0.28593597],[-3.720445,0.5471661,-2.9256604,-0.84999114,-0.35371152,-1.650107,-0.30913082,-1.5157434,-1.4253404,-0.5012027,1.8229349,-0.22352915,0.07850824,1.2852895,-0.17709053,0.0015369024,0.4303836,-0.3013633],[2.7063103,0.4795686,-2.1412866,-0.37747622,-0.52522975,-1.1443468,-0.3860132,-0.81000876,-0.8656079,-0.38408586,1.1732165,-0.33476815,0.35176495,0.67967117,-0.24029131,-0.15793729,0.59702957,-0.33229384],[0.003850781,1.0522044,0.0023779364,1.4077666,-0.2233461,-1.323892,0.2490657,0.9962225,-0.21043883,-0.48657963,0.0066762604,-0.8950598,-0.65639627,-0.10381974,-0.033756495,0.3061354,-0.09620744,0.075370125]],"activation":"σ"},{"dense_2_W":[[0.01117936,0.6720228,0.39750826,0.30468678,-0.34063298,0.11394216,-1.026796],[-0.07938874,-0.29046267,-0.15366286,-0.94418544,0.72881997,-0.072467156,1.1634737],[-0.7841681,-0.38053507,-0.48102236,-0.7339148,-0.94196475,-0.09320883,0.17724545],[-0.11575878,0.41173506,0.7931331,0.7659729,0.45459372,-0.4762705,0.04162107],[-0.54039043,-0.6239058,0.12097131,-1.0940313,0.6270558,0.8035503,0.8422599],[-0.006883268,0.1846561,0.4628913,0.89182067,-0.281233,-0.5460564,-0.49594778],[-0.37237987,-0.50528663,-0.34381047,-0.9888458,0.66827786,0.75729847,0.9049922],[-0.6351278,-0.39599782,-1.7942646,0.2172901,1.2180948,-1.0186263,-0.29467586],[0.098499954,-0.7321613,-0.4204465,-0.5589947,-0.49682683,0.02701407,-0.56642413],[-0.055568255,-1.0158917,-0.13512869,-0.75265217,0.32634935,-0.10900366,1.1009233],[0.9196104,-0.29001886,0.27778128,0.40752462,-0.71603805,-0.78771234,-0.2509219],[-0.27494332,-0.27294615,-0.87608117,-0.5456548,0.23442413,0.46402624,0.4014235],[-0.0657572,0.39627385,-0.032163464,0.37446278,0.30043706,-0.3939967,-0.17288771]],"activation":"σ","dense_2_b":[[-0.12896457],[-0.06757774],[-0.29207176],[0.057776056],[0.03819644],[-0.0075618257],[0.022483658],[-0.30520216],[-0.30780953],[-0.22291888],[0.073764615],[-0.11618854],[-0.0932309]]},{"dense_3_W":[[-0.20723751,0.46280366,0.37977389,-0.28764504,0.56071246,-0.42746708,0.743715,-0.41921702,0.39859435,0.35315046,-0.18542276,0.28128248,-0.18067148],[-0.6656129,-0.15142722,-0.022595402,-0.48696524,0.37018472,-0.6183299,0.50862163,0.035134673,-0.46468532,0.35520592,-0.6777795,0.2590716,0.46181098],[-0.32565305,0.33916017,-0.4280441,-0.21963115,0.6359937,-0.44887698,0.2442765,0.13551079,-0.47778323,-0.4541174,-0.59640217,0.13698937,-0.27695638]],"activation":"identity","dense_3_b":[[-0.07102677],[-0.02868969],[-0.030784609]]},{"dense_4_W":[[-1.024929,-0.3087716,-0.3174253]],"dense_4_b":[[0.053275082]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019 b'39990-TPA-G030x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019 b'39990-TPA-G030x00x00'.json new file mode 100755 index 0000000000..b394c71309 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019 b'39990-TPA-G030x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.034213],[0.75561374],[0.4482074],[0.029542489],[0.7461425],[0.7492127],[0.7519972],[0.75616795],[0.7586054],[0.76215684],[0.7658316],[0.029329019],[0.029394325],[0.029459374],[0.029631147],[0.029686036],[0.02966829],[0.029647704]],"model_test_loss":0.013146449811756611,"input_size":18,"current_date_and_time":"2023-08-06_11-45-32","input_mean":[[22.384304],[-0.09092718],[0.0023652136],[-0.01865998],[-0.0913438],[-0.0915985],[-0.0908737],[-0.090024576],[-0.087187625],[-0.08577747],[-0.08269682],[-0.01866263],[-0.018653778],[-0.01863699],[-0.018579295],[-0.018651243],[-0.018765053],[-0.018734809]],"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.047012586],[0.92324436],[1.1744541],[0.22243287],[-0.3944335],[-0.34763417],[1.5356755]],"dense_1_W":[[-0.00047711062,0.4344246,-0.003556974,-0.05324533,-0.104414105,1.1889359,-0.56735265,-0.37708575,-0.06931248,0.64209265,-0.22444351,0.38017142,0.09980623,-0.07572917,-0.9272979,-0.089443296,0.0127646355,0.3978492],[1.076277,0.7404641,0.068134926,0.1926029,-0.35190815,1.1527709,-0.7064761,-0.8153627,-0.5065293,0.47775775,0.02251806,0.14456208,-0.043609474,-0.26085764,0.00093237846,0.36519462,0.028837174,-0.4271338],[1.263567,0.35015926,-0.14665723,0.43871006,-0.10830087,0.7354503,-0.9999807,-0.022604555,0.034673784,-0.35979328,0.35240602,-0.18725228,-0.24774587,-0.41631046,0.20720515,-0.0032023392,0.047886286,0.17100596],[-0.00094677473,0.19828819,-1.8369352,0.30248693,-0.54879934,-1.1427166,1.008834,0.21161656,-0.41065678,0.8713622,-0.10214338,-0.40863365,-0.24902351,0.20304148,-0.12075667,0.458101,0.2590354,-0.43551084],[0.6667485,0.91926587,-0.22846676,0.33097208,0.73958164,-1.4895654,1.0193743,-0.5367387,-1.5389364,-0.11664559,0.9663045,-0.51155037,-0.23083033,0.06350666,0.1535683,-0.0091331415,0.19499558,0.03682613],[-0.04119794,0.9239906,2.6969457,-0.25119433,-0.041676786,1.493704,-0.05057316,0.7667589,0.37086174,0.17998935,-0.830209,0.039195158,0.3242035,-0.39648166,-0.05009495,0.03618407,-0.030978123,0.1289426],[1.3126956,-0.55459666,-0.08771991,-0.20699926,-0.049515888,-1.0882213,1.0564349,0.6318207,0.0051460112,0.37931073,-0.39057365,-0.09507244,0.09743938,0.3942499,-0.33766025,-0.32643616,-0.18655044,0.65716547]],"activation":"σ"},{"dense_2_W":[[-0.42937973,-0.1671434,-0.43484113,0.6091573,-0.40485424,-0.54429215,-0.23403765],[0.44798595,0.19865125,-0.28430828,-0.4019087,-0.35975724,-0.1540725,-0.5593976],[0.38287392,0.458221,0.15593868,-0.14855632,0.14968492,0.031657934,-0.36288145],[-1.0350971,-0.5071168,-0.6141563,-0.088436134,0.52254784,-0.8051361,0.45060462],[0.45581025,-0.32779318,-0.7036135,-0.8545516,0.12893179,0.24949677,-1.2301726],[-0.037454057,1.2664734,1.068089,1.4344928,0.36088267,-1.0365765,1.7306651],[-0.122854166,0.12376001,0.48009405,0.109703854,-0.56688136,-0.14703372,-0.024793213],[-1.0537682,-0.46469265,-0.12660673,0.6073404,-0.2877888,0.15866885,-0.14931393],[0.17649716,-3.0929239,-2.3515308,2.8477354,1.1622903,-0.68750924,-0.45515713],[-0.73418194,-1.0775651,-0.7719372,0.16897969,0.3085781,-0.16281687,1.0447707],[0.46595046,-0.3949184,0.18229371,-0.12530676,-0.26597655,-0.0012733624,-0.114680044],[-0.124461986,0.5196014,-0.34539875,0.10735016,-0.06331189,0.4852887,-0.5834995],[0.39723673,-0.09609674,-0.1471512,-0.51641434,-0.2519636,-0.34744382,-0.43439695]],"activation":"σ","dense_2_b":[[-0.11312245],[0.027094306],[0.017765665],[0.044731423],[-0.18022782],[0.09928121],[-0.09837057],[-0.1548419],[-1.0962769],[-0.053587534],[-0.0071940883],[-0.014310544],[-0.03562835]]},{"dense_3_W":[[0.18594098,-0.6818517,-0.12188004,0.65018547,-0.37953106,0.40454167,0.16297354,0.59620595,0.025523338,0.44727668,0.1114748,-0.48999,-0.062479552],[0.29692125,-0.21146217,-0.5138796,0.6005236,-0.7997973,0.20368089,-0.22437662,-0.2668092,0.8479786,0.28527832,-0.6137382,0.43294674,-0.24874023],[-0.27988523,0.5345244,0.52841073,0.26012418,0.5051741,-0.47729176,0.04220592,-0.024942419,-0.9326824,-0.69562954,-0.09658818,0.2498976,-0.07045708]],"activation":"identity","dense_3_b":[[-0.060025424],[-0.049905777],[0.058896556]]},{"dense_4_W":[[-0.78769284,-0.9394558,0.4579486]],"dense_4_b":[[0.05315631]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019 b'39990-TPG-A020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019 b'39990-TPG-A020x00x00'.json new file mode 100755 index 0000000000..19fe18efd7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019 b'39990-TPG-A020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.299596],[0.7368779],[0.3343281],[0.038595177],[0.74043566],[0.73867756],[0.7369786],[0.7199797],[0.7073316],[0.692301],[0.6776942],[0.038740512],[0.038692366],[0.038640175],[0.038314454],[0.038039386],[0.037639543],[0.03721186]],"model_test_loss":0.0196799598634243,"input_size":18,"current_date_and_time":"2023-08-06_12-10-34","input_mean":[[25.72662],[0.05758428],[0.0074817957],[0.00042151322],[0.054403115],[0.054942675],[0.055003498],[0.05778212],[0.058146343],[0.055029176],[0.052427325],[0.00031705483],[0.00029397535],[0.00027291433],[0.00026472707],[0.00016882192],[-7.878055e-5],[-0.00038947008]],"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.24635658],[-2.3609567],[0.8278294],[1.8481108],[-0.0009179342],[-5.722017],[-0.38498595]],"dense_1_W":[[-0.3599328,-0.22590983,-1.5835724,-0.45297816,-0.39821658,-0.84838223,1.0513067,-0.6676435,-0.3157859,0.36385095,0.60838795,-0.36815816,0.40623605,1.0187281,-0.8164682,0.725533,-0.109838545,-0.119914874],[-1.4658633,0.8083861,1.0365679,0.96016145,0.032342948,0.61396354,-0.7277645,0.117941886,0.31804556,0.06370998,-0.3070831,0.049492776,-0.5002591,-0.41411608,0.03904327,-0.024719765,0.01514654,-0.15549083],[1.6183398,1.3368306,-0.1774287,0.22880824,0.05070626,-0.26586214,0.6101463,0.20884643,0.13692065,0.27627236,-0.06529142,-0.047958486,0.45105627,0.6535041,-0.70374006,0.008929227,-0.6404756,-0.76474065],[2.0271378,-0.26031396,-1.3868793,1.0859234,-0.20835875,0.2494928,-0.80513215,-0.44871587,-0.146529,0.26627505,0.12287333,0.31685492,-0.6343925,-1.0001003,0.31669822,0.13197689,-0.18177116,0.01344866],[-0.004777084,0.52823824,-0.004140687,1.4137487,0.4144139,-1.1794671,-0.8262742,0.68985987,0.17687458,0.017687704,-0.3234715,-0.41124478,-0.74011046,-0.7056069,0.7699347,-0.18429211,0.079565994,-0.069221176],[-2.434899,1.0662471,-1.7045196,0.9491714,-0.4924587,-1.0995914,-0.13104963,-0.5397869,-0.56282854,-0.28371578,0.5355493,0.1188877,-0.3160381,-0.19142266,-0.8446787,0.21822764,-0.13194595,0.25231192],[-0.63578004,0.10998647,-1.5226461,0.2984399,-0.49102226,0.18339495,-0.71859634,-0.36171985,0.19367056,0.30713537,0.3568834,0.034046147,-0.028167615,-0.20357361,-0.037238467,0.22969781,0.55273587,-0.56385]],"activation":"σ"},{"dense_2_W":[[-1.1939403,0.627583,-0.29303935,0.31645858,-0.28299263,-0.20175016,0.27266392],[-0.35470998,0.5116036,-0.21302372,-0.2682391,-0.6379024,0.19036521,0.16326782],[-1.0515031,0.0016675633,-0.328475,0.5562253,-0.21258254,-0.58660126,0.28343913],[0.30803204,-1.06867,-0.17983183,-0.25306872,1.4627538,0.0038065887,-0.014348506],[0.6233269,-1.2878839,-0.005203554,-0.70451117,1.1213775,0.103565186,0.059290078],[-0.22157122,1.0198585,0.11228626,0.16640806,-1.4210382,-0.23331583,0.19227381],[-0.51894325,0.7483681,0.3329935,0.4065807,-1.060425,-0.07506867,0.37457123],[-0.10200199,-0.080105394,0.19919048,-0.5509593,0.11211719,-0.5586402,-1.0667413],[-1.0931015,-0.064168,-0.80489373,-0.41687313,-0.41320696,-0.33071667,0.742609],[-0.039056696,-0.54934025,0.22863005,-1.4414634,0.55120647,-0.38611275,-0.7619764],[1.028561,-0.8452004,0.035485722,-0.2982418,0.9679217,0.684532,-1.0359311],[0.372593,-1.0716276,-0.57134145,-1.3408467,1.7297199,1.9872373,-0.7560159],[1.0906591,-1.6118517,0.19121306,-0.9672179,0.58213896,0.7299898,0.15404381]],"activation":"σ","dense_2_b":[[-0.090343356],[-0.08339459],[-0.0072327256],[-0.13952537],[-0.3003466],[-0.035847075],[-0.20601946],[-0.23709813],[-0.14278656],[-0.34552336],[0.06587117],[-0.3463747],[-0.2306921]]},{"dense_3_W":[[-0.2524472,-0.27034226,0.6634469,-0.746348,0.25183922,0.6880417,0.85341954,-0.31553096,-0.12491534,0.45396265,-0.4605119,-0.58887863,0.27989408],[0.2640799,0.35472974,0.70435447,-0.70013833,0.13855529,0.36433235,0.056772206,-0.40470412,0.18910164,-0.14314908,-0.7391794,-0.8970169,-0.25722122],[0.53352684,0.34132504,-0.5049692,0.14928706,-0.51827705,0.7143463,0.5245271,0.32858804,0.5338223,-0.07519559,0.05255393,0.14157031,-0.27464214]],"activation":"identity","dense_3_b":[[0.073314704],[-0.005890205],[-0.042565797]]},{"dense_4_W":[[0.18600833,0.98189795,0.93567103]],"dense_4_b":[[-0.032305032]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019.json b/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019.json new file mode 100755 index 0000000000..afdbdefee7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA CR-V HYBRID 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.167076],[0.8396103],[0.39224938],[0.038149882],[0.83500266],[0.8364939],[0.83795094],[0.8280286],[0.82101065],[0.80936265],[0.79514086],[0.03816296],[0.03813872],[0.0381162],[0.037860528],[0.037643477],[0.03726596],[0.036896862]],"model_test_loss":0.019166288897395134,"input_size":18,"current_date_and_time":"2023-08-06_11-19-09","input_mean":[[24.623522],[0.012142224],[-0.0077460455],[-0.0040752436],[0.01259905],[0.011912992],[0.011499013],[0.008575823],[0.006231978],[0.001843956],[-0.0011071449],[-0.0041566766],[-0.004162808],[-0.0041667568],[-0.0041206917],[-0.004187086],[-0.004389174],[-0.0045910473]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.10681055],[-0.05877009],[-5.810432],[0.108804524],[5.817238],[-1.4135033],[-0.04275369]],"dense_1_W":[[-0.010944928,0.298581,-0.0004137291,0.46320775,-0.68514436,1.5652411,-0.62197584,-0.70986384,-0.07209713,0.14426921,0.09893353,0.2957121,0.24033338,-0.63492715,-0.24635397,0.21067435,0.16446242,-0.4790833],[-0.002262276,-0.7669907,0.0011565682,0.2969979,0.11738408,-1.199179,0.32905388,0.35275638,-0.34200913,0.22103965,-0.188085,-0.00050096336,-0.36091766,0.18886286,0.356193,0.50661796,-0.18447432,-0.3530909],[-2.7729337,-0.046491493,-2.223908,0.51880556,-1.5391709,-1.8928696,1.8811203,0.22442053,-0.20638244,0.44581792,-0.10464485,-0.11026335,-0.41476744,0.71887964,-0.6184063,0.07461815,-0.70264786,0.5291843],[0.088751696,-0.7015499,-2.262332,0.07993792,-0.5452428,0.36403584,-0.888494,0.26214746,0.52286375,0.47499555,0.12439757,0.32842526,-0.22486946,-0.2082452,0.2083624,0.20134373,-0.26366135,0.040187743],[2.7838297,0.36513317,-2.2177417,0.17293313,-1.3490273,-1.395796,0.7361196,0.024529908,0.0147317415,0.50988925,-0.16947655,-0.14311421,-0.13544203,0.6211999,-0.28396562,-0.19654925,-0.4721205,0.44046035],[-1.0456268,0.006558085,0.029179003,-0.24681818,0.33209732,-0.31439346,1.0280732,1.6322477,0.33988294,-1.1288414,-0.7784953,-1.3079332,-0.922044,-0.7579679,-0.7932985,0.090359144,2.2930832,3.7051785],[-0.032393374,0.15797108,2.6865292,-0.022740832,0.7215196,0.9335919,-0.9160322,0.63953984,-0.10847628,-0.41109005,-0.58336747,0.8728414,0.2319681,-0.77523047,-0.6650054,-0.19625007,-0.0422657,0.4323157]],"activation":"σ"},{"dense_2_W":[[-1.0469242,2.310652,2.5330374,-1.1560289,0.87019974,-0.24008566,-2.4145112],[-1.5431111,1.6602669,1.4227277,0.44263628,2.124669,-0.881401,-1.636305],[-0.7812676,0.3887846,0.046831988,-0.0021416398,0.0068075457,0.26359168,-0.40856928],[0.5853211,-0.020535953,0.1977803,0.11166494,-0.7388882,-0.6265164,0.19296904],[-1.4384844,-0.07708128,-0.62513274,0.1822617,-0.83729374,-0.20433801,0.08106154],[0.79002935,-0.51513207,-0.17725268,0.70090765,-0.37455943,-0.00461776,0.6140211],[0.38233972,0.11824663,-0.048423085,-0.22234191,0.071728714,0.09328836,0.5405535],[1.0066482,0.12065403,-0.67822254,0.91310203,0.3381496,-0.46563134,0.6765602],[-0.058819644,0.04884941,0.44360304,-0.16011114,-0.493316,-0.18134312,0.31395072],[-1.1391008,1.2845155,0.65725374,-0.75513005,1.1359249,-0.5923027,-0.46509168],[-0.28455976,0.122011006,0.19924502,-0.016063396,-0.19426562,-0.7366286,-0.30496517],[-1.1961275,-0.44696903,0.2981926,-0.6047452,0.60021174,0.7954056,0.67303944],[0.66179645,-0.35565352,0.4263759,-0.23354627,-0.5218455,-0.14847569,-0.45979464]],"activation":"σ","dense_2_b":[[-0.70381194],[-0.41715994],[-0.18704335],[-0.20373428],[-0.23588026],[-0.022451308],[0.010537296],[0.10221664],[0.014627381],[0.060474735],[-0.033638965],[-0.051280532],[-0.20772089]]},{"dense_3_W":[[0.15796849,0.6079072,0.5830924,-0.5528727,-0.1478945,-0.27996355,-0.30358565,-0.6117205,0.22281085,0.6154891,0.0165758,0.616245,-0.5880501],[-0.1846488,-0.46482992,-0.33469623,-0.15623315,-0.20466302,0.642436,0.34555972,0.60815287,0.43956748,-0.5986671,0.3041771,-0.26802206,0.03272353],[-0.88071394,-0.01339668,-0.4710771,-0.08369313,-0.47736472,-0.29117015,0.5252153,0.36675686,0.37659007,-0.38053805,0.07111416,-0.030936832,-0.3208197]],"activation":"identity","dense_3_b":[[-0.04642651],[0.037014484],[0.055794742]]},{"dense_4_W":[[-0.5493109,0.48931855,0.5176042]],"dense_4_b":[[0.04616592]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA HRV 2019 b'39990-THX-A020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA HRV 2019 b'39990-THX-A020x00x00'.json new file mode 100755 index 0000000000..5b0e745ae2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA HRV 2019 b'39990-THX-A020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.196055],[0.87593496],[0.33765027],[0.04197189],[0.886328],[0.8834333],[0.87928975],[0.85071605],[0.8310174],[0.8089368],[0.7878991],[0.041903123],[0.041929454],[0.04194031],[0.04174096],[0.041557845],[0.041190308],[0.040708046]],"model_test_loss":0.01768307387828827,"input_size":18,"current_date_and_time":"2023-08-06_14-17-31","input_mean":[[27.28112],[0.05775289],[0.0292109],[0.0014245252],[0.04902593],[0.05110525],[0.053358402],[0.06730357],[0.07672258],[0.086834796],[0.09349608],[0.0012768332],[0.001302666],[0.0013326345],[0.0014557338],[0.0014853236],[0.0014835508],[0.001441598]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.4649247],[0.16453019],[-0.28886992],[-0.3648863],[-0.42144147],[1.2591343],[0.26168013]],"dense_1_W":[[0.65970325,0.3643967,-0.0078023723,-0.3371772,0.44859505,0.13993022,-0.59133023,0.06776411,0.40852416,0.2055092,-0.22950652,1.1044699,-0.061070323,0.018156692,-0.92917067,-0.29989886,-0.24349432,-0.2445954],[0.0043564676,0.14943714,1.5694466,0.54570717,0.23205929,0.23940374,-0.8834056,0.29886281,0.13640915,-0.07918449,0.06823687,0.4230718,-0.20778643,-0.80100656,0.067888916,0.013294644,-0.17124765,0.11134056],[-0.004692583,0.8932629,-3.326059,-0.13999403,0.71647453,0.7221725,-0.42850545,-0.27863225,-0.17863697,-0.19051133,-1.0301774,0.54785955,0.09839519,-0.52338004,-0.028131597,0.10106243,-0.26319197,0.2228086],[-0.13291039,-0.4817582,0.0022403449,-1.604327,-0.1416615,0.6045698,0.6883181,-0.09455803,-0.119714886,-0.031930104,0.16707899,1.219931,-0.027221087,0.2683029,-0.017352045,0.0354093,0.08798443,-0.011031896],[-0.0001811604,-0.55647755,-4.251647,0.10555062,1.2620865,0.87399095,1.7948182,0.5045302,-2.1733336,-1.323175,-0.20426413,-0.8539617,-0.42787957,0.87268126,0.50717103,0.21002649,-0.043627627,-0.31594208],[-0.7002713,0.0439368,-0.007873659,-0.15335229,-0.08326318,0.8655352,-0.4760854,-0.06738273,0.33060014,0.61478436,-0.43724525,0.8940125,0.14382815,-0.5073753,-0.16832146,-0.39969006,-0.77300745,-0.07796513],[0.18735953,0.5023311,-0.00044152042,0.6289259,-0.7044324,0.8138658,0.3475159,-0.48989236,0.070642374,-0.012694965,0.0680297,0.7051084,-0.33375153,-0.81817293,0.061156776,-0.22678623,0.075785585,-0.11933581]],"activation":"σ"},{"dense_2_W":[[0.44918334,-0.44261467,-0.37257126,0.06871936,-0.76875246,-0.02301384,-0.45431],[-0.028300185,0.74804,0.16640806,0.42070544,-0.45251933,-0.21348317,0.6122552],[-0.75886244,-0.4412132,-0.88113075,-0.5994053,0.81894237,0.0319869,0.07787325],[0.016850863,-0.46549502,-0.84523696,-0.4440643,-0.08756868,0.010443555,-0.11621737],[-0.11881556,0.04645116,0.035857048,0.5879231,0.10456129,0.2670699,0.30576423],[0.18244462,-0.18358052,0.63081473,0.678613,-0.065976664,0.5200684,0.0114103705],[0.17458354,-0.758713,-1.1933472,-1.2458708,2.0880768,-0.35880476,0.043243304],[0.6276925,0.3325886,0.42858002,-0.19699302,0.26399422,-0.5362572,-0.32001755],[0.019581828,-0.7625633,-0.43383184,-0.56120574,0.28209898,0.18763974,-0.48512912],[-0.72589034,-0.39149624,-0.69566345,0.25285095,0.9949407,-0.6764689,-0.86815906],[-0.229745,-0.04891058,-0.23069735,0.05986481,0.24995661,0.65987855,0.42597428],[0.21872666,-0.2117571,0.25106636,0.69597656,-0.34293714,0.08462207,0.626666],[-0.28573155,-0.4643647,-0.40302104,-0.41738722,0.75807416,0.047476795,-0.82152224]],"activation":"σ","dense_2_b":[[-0.040295057],[-0.038580682],[0.41026086],[0.13927889],[-0.051729757],[-0.19358195],[1.3526292],[-0.060473673],[0.15599808],[0.31490785],[-0.026681194],[-0.103706256],[0.075545505]]},{"dense_3_W":[[-0.19065312,-0.68438256,-0.1597246,0.23868644,0.2844928,0.24808933,-0.33611223,-0.09016653,0.7001218,0.3639498,0.2646331,-0.4721014,0.4990256],[-0.31301543,-0.42533165,-0.35976458,-0.23861757,0.4356561,0.6322021,-0.6240161,-0.16950898,-0.17745121,-0.17519787,0.5549622,0.65472394,0.46188885],[-0.048509836,0.6186861,-0.56957906,-0.63238627,0.35587925,0.47782204,-0.622644,0.1277044,-0.32014754,-0.24985255,0.19653115,-0.11492239,-0.59642744]],"activation":"identity","dense_3_b":[[-0.0043907734],[0.0006517651],[0.0069493363]]},{"dense_4_W":[[-0.6007436,0.5252799,1.091879]],"dense_4_b":[[0.0049111033]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA HRV 2019.json b/selfdrive/car/torque_data/lat_models/HONDA HRV 2019.json new file mode 100755 index 0000000000..87a91229aa --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA HRV 2019.json @@ -0,0 +1 @@ +{"input_std":[[7.1964235],[0.87585396],[0.34334365],[0.04189015],[0.88570154],[0.8828632],[0.8788816],[0.85152715],[0.8326557],[0.8105437],[0.790872],[0.041831378],[0.04184441],[0.041850727],[0.041653063],[0.041487437],[0.041109927],[0.0406368]],"model_test_loss":0.016751321032643318,"input_size":18,"current_date_and_time":"2023-08-06_13-52-18","input_mean":[[27.281948],[0.057562165],[0.025426663],[0.001435362],[0.049740613],[0.051872276],[0.053928934],[0.06504589],[0.07349952],[0.08201744],[0.088106535],[0.0013536362],[0.0013746973],[0.001394585],[0.0014019185],[0.001435841],[0.0014179434],[0.0013371226]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.0041493755],[0.21777502],[0.7115575],[-2.2624984],[0.10148076],[-1.9139864],[-2.6148589]],"dense_1_W":[[0.0027682746,-0.5923534,-0.0008324875,-0.96639884,-0.43687794,1.0992304,0.44394565,-0.15681875,-0.19448969,0.23627451,0.027064066,1.0438472,0.38998574,-0.3910353,0.07241692,-0.3872127,0.24487913,-0.00981091],[-0.0063605076,0.41579154,4.60037,0.15178576,-0.41990525,-0.9291791,-1.8990772,-1.2513685,1.3644165,1.6527833,0.822613,0.6267062,0.3986885,-0.65917814,-0.68864816,0.038168486,-0.43694118,0.5313064],[0.1826715,0.21753219,2.6482086,0.49831605,0.04197241,0.48248503,-0.85676134,-0.088123225,0.5933527,-0.101084374,-0.07996661,0.39820936,-0.25201222,-0.5013944,-0.18441774,0.085484736,-0.20741902,0.15278186],[0.20413034,0.7558973,0.0039974884,0.09515875,0.023952896,0.12318843,-0.24863702,0.28330338,0.598279,-0.0031794424,0.12692909,0.26882735,0.002343814,-0.20356114,-0.4958486,-0.2599618,-0.3243958,-0.15502147],[0.0008160921,-0.75155866,3.2958338,0.18005188,-0.48001406,-0.37221822,-0.014907395,0.34556574,-0.36695525,0.5220802,0.9252095,-0.6326275,0.31536806,0.40089336,-0.24786693,-0.16599582,0.26964852,-0.11618827],[-0.6374511,0.50671804,3.4275095,0.45084175,0.014429362,0.16759996,-0.40217194,-0.1596027,0.27413476,-0.020348325,0.03291187,0.29519597,0.0606238,-0.77494323,-0.04082934,-0.019097991,0.021767832,0.017387142],[0.24087234,-0.5286611,-0.0010711186,0.50206137,-0.37612498,-0.065321624,0.3152248,-0.3156515,-0.31909347,-0.5960725,0.07865838,-0.57626325,-0.28874642,0.36706463,0.55150944,0.021375967,0.53079313,0.0685934]],"activation":"σ"},{"dense_2_W":[[-0.61061996,-0.3219788,-0.61355484,-0.41679764,0.9514292,0.089833274,-0.08153515],[0.5216678,0.35865775,0.14493388,0.75064963,-0.9559691,-0.11178071,-0.26124665],[-0.07039463,-0.54774076,-0.7926992,-0.28961974,0.25917596,0.06013633,0.6089615],[-0.29096878,-0.55007404,-0.6435847,0.022112146,0.31680974,-0.22504552,0.35249886],[-0.6804567,-0.94920105,-0.8136485,0.3378733,0.597489,0.46872833,0.28344125],[-0.8909486,0.17668937,-0.50494355,-0.51266,0.76238817,-0.08368523,0.21360965],[-0.08500846,-1.3190831,-0.40328535,0.17221951,0.9102355,-0.42406878,-0.14185876],[0.41169032,0.12483639,-0.43139625,1.0178162,-0.7741975,0.49720922,-0.0029358894],[-0.11413294,0.35335183,0.5509884,0.60089856,-0.07613763,-0.18951175,-0.5859379],[-0.30574977,0.66385657,0.29187888,0.15835138,-0.13989422,0.93255055,0.16954228],[0.9125405,0.33926046,-0.45827863,0.20637102,-1.3337029,0.99624145,-0.6220122],[1.0066077,0.5247419,0.3793085,0.006325064,-0.7290911,-0.32310325,0.17187376],[-0.6349526,-0.62067527,-0.291574,0.05529339,0.7121756,-0.08375974,0.22644123]],"activation":"σ","dense_2_b":[[0.04084762],[-0.06363596],[0.024858473],[0.10673008],[0.13199006],[0.10104594],[-0.008044478],[-0.10162189],[-0.15080203],[-0.11178794],[-0.24866438],[-0.17219713],[-0.008406249]]},{"dense_3_W":[[0.40549794,-0.4494019,0.2861901,0.37104332,0.5890352,0.58301944,0.40222168,-0.49054152,-0.31034032,-0.07984426,-0.5973653,-0.20854333,0.5224267],[-0.6481895,0.81970197,-0.5651685,-0.54807013,-0.5982727,-0.21111657,-0.7437358,-0.18910314,-0.22034706,0.69472176,0.7825804,0.5047144,0.30723065],[-0.2815957,-0.25135168,-0.03530872,-0.47208393,-0.14322938,0.72277945,0.027914466,-0.113597095,-0.31811848,0.057283014,0.22687551,0.074457414,0.35829133]],"activation":"identity","dense_3_b":[[-0.064762406],[0.042542093],[0.06525171]]},{"dense_4_W":[[-1.0957879,0.49216008,-0.0023324802]],"dense_4_b":[[0.054476205]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA INSIGHT 2019 b'39990-TXM-A040x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA INSIGHT 2019 b'39990-TXM-A040x00x00'.json new file mode 100755 index 0000000000..4957b7620b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA INSIGHT 2019 b'39990-TXM-A040x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.561399],[0.9560459],[0.31967336],[0.04428853],[0.96082354],[0.95901185],[0.9568036],[0.9313539],[0.9091667],[0.8810181],[0.8528346],[0.04422074],[0.04421771],[0.04421117],[0.043970585],[0.043718267],[0.04335803],[0.04287711]],"model_test_loss":0.043126773089170456,"input_size":18,"current_date_and_time":"2023-08-06_15-33-56","input_mean":[[26.94165],[0.021270154],[0.0046278955],[-0.009065303],[0.021303134],[0.021765355],[0.021796774],[0.022019608],[0.023005532],[0.02868764],[0.03272592],[-0.009263705],[-0.00921664],[-0.009177719],[-0.009201262],[-0.009262942],[-0.009267896],[-0.009328963]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.8717046],[1.401547],[-3.6374924],[0.011636128],[-0.010584985],[-0.1608906],[-3.4310641]],"dense_1_W":[[1.1484131,0.2360844,-1.2279263,0.6593642,-0.706906,0.57722515,-1.5107461,0.148039,0.48555797,0.14457138,-0.4081769,0.12444598,-0.5787572,-0.6569945,-0.012713922,0.6449968,-0.18181801,0.03532019],[0.83998966,-0.7946136,-1.1200137,0.31668094,0.31830063,-0.95925987,0.99205875,-0.60420567,-0.1273,-0.11898313,0.2820395,-0.71049374,-0.48740363,0.55304694,0.13322441,0.119103864,0.31011325,-0.21130522],[-1.4661362,0.23715574,-1.2752273,-0.041717865,0.2500426,-0.56513333,1.121119,-1.1740829,-1.4563355,-0.31711218,1.0432303,-0.606916,-0.4165662,0.40286353,0.2652817,0.29227725,0.57232744,-0.4241923],[-0.014610312,2.4209461,-0.0010322147,-0.48897117,-1.4935441,1.4336565,0.21062562,-1.205451,-0.3245356,0.69025,-0.1866847,0.47154546,-0.33315396,0.31453168,-0.23816307,0.23188154,0.21139425,-0.31219307],[0.0049821893,-1.9138168,0.0008263949,-0.6567317,-0.6164778,2.2373643,0.1648842,0.29560664,-0.15978582,0.13433349,0.09199213,0.7548104,0.8661949,-0.5156456,-0.84439373,-0.769481,-0.13660415,0.8850856],[-0.04535164,-1.3319466,-5.446676,0.7491545,1.40338,-0.27946347,0.58855826,-1.6417941,-1.3516777,-0.061358944,1.9686421,-2.0562751,-0.9776005,0.5102906,0.71488136,0.8446566,0.029088987,-0.0021240264],[-1.6955886,1.0932087,1.2057613,1.2197119,0.26736736,0.40396026,-1.1926581,-0.027528899,0.41201085,0.04445834,-0.17239684,-0.047891464,-0.2615087,-0.34971696,-0.186749,-0.07132908,-0.2368726,-0.10784222]],"activation":"σ"},{"dense_2_W":[[-1.013594,0.5034582,-0.95556456,-0.08708601,-0.8562468,0.16710468,0.07527283],[0.6687172,-0.7619872,-0.53848594,0.6010305,0.9034991,0.014348103,-0.593205],[-0.860986,0.6847677,0.3897247,-0.18235233,-0.56724346,0.42058796,-0.9473925],[-0.57470554,0.049254473,-0.3956524,-0.27702963,-0.1518893,-0.22931539,0.0917812],[-0.7363305,0.19133672,-0.47538042,-0.037515156,-1.0081038,0.37126565,-0.02480417],[0.058126763,-0.3683029,-0.31503877,-0.33700588,0.28384364,-0.41182697,0.21078625],[-1.699499,0.43488288,3.1312578,-2.43165,-0.23042913,1.4457437,-0.23582318],[1.1079293,0.21069455,-0.10997463,0.67785615,-0.1292696,-0.19016528,0.23199928],[-0.18085922,0.26667058,-0.11703674,-0.13090491,-0.98974144,0.2998666,-0.34656715],[0.56333655,-0.9618346,0.17298692,0.49641728,0.3144268,-0.17813024,0.25162554],[-0.18821634,0.47741577,-0.53012407,0.021764161,-0.90728444,-0.15855366,-0.4862484],[-1.1602566,0.254095,-1.2540381,-0.8706271,0.036233105,-0.36567953,0.12120533],[-0.3278052,-2.3773234,0.59865904,0.86674654,0.14178967,-1.3721049,1.4259635]],"activation":"σ","dense_2_b":[[-0.013262277],[-0.22405964],[0.09981698],[-0.04231693],[-0.027923957],[-0.10180608],[-0.8146485],[0.0004782006],[0.038938325],[-0.23186892],[-0.031742647],[-0.032234117],[-0.57888836]]},{"dense_3_W":[[0.58763653,-0.32315147,0.1878662,-0.2600824,-0.02019101,-0.4588076,1.4286964,-0.16221656,0.019991938,0.1896809,0.17505044,-0.06803269,-0.3277477],[0.31274745,0.08359626,-0.48973972,0.19148718,-0.022602405,-0.10987586,-1.4325415,-0.11361555,-0.1394098,0.47897077,-0.15372795,-0.7521875,0.5662985],[-0.41849798,0.636405,-0.480077,-0.29047763,-0.3423191,-0.06704497,-0.5570328,0.70148677,-0.62109405,0.680771,-0.6235916,-0.40535742,0.8969159]],"activation":"identity","dense_3_b":[[0.11709517],[0.070712626],[-0.017060732]]},{"dense_4_W":[[-0.14990221,0.26407397,0.9163793]],"dense_4_b":[[-0.008794706]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA INSIGHT 2019.json b/selfdrive/car/torque_data/lat_models/HONDA INSIGHT 2019.json new file mode 100755 index 0000000000..7125acea96 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA INSIGHT 2019.json @@ -0,0 +1 @@ +{"input_std":[[8.603165],[0.968196],[0.31648555],[0.043116625],[0.97207046],[0.97122186],[0.9696193],[0.9440986],[0.9209154],[0.89170784],[0.8635297],[0.0430813],[0.043076806],[0.043065626],[0.04281562],[0.042584687],[0.0422511],[0.041811552]],"model_test_loss":0.0409439355134964,"input_size":18,"current_date_and_time":"2023-07-18_02-56-25","input_mean":[[26.58399],[0.02317232],[0.002863659],[-0.0103310775],[0.023948237],[0.024388459],[0.024497893],[0.02269405],[0.02217117],[0.02469916],[0.02554692],[-0.01046288],[-0.010425196],[-0.010389729],[-0.0103868665],[-0.010423806],[-0.010380345],[-0.010442573]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.7315183],[-2.0931118],[-0.08195505],[-0.07830412],[0.17271917],[-4.8443527],[1.3409065]],"dense_1_W":[[1.3492318,0.050542787,-2.0778215,0.23633496,-0.18946455,0.08569419,-1.1538246,-0.56782997,-1.1068271,-0.28026178,0.6351039,-0.5325991,-0.16680008,-0.6554269,0.7481424,0.39339453,-0.037751142,0.12015114],[-0.8597578,1.2366588,1.7126143,-0.63454264,-0.43808976,0.8164015,-0.69233084,0.61550444,0.9666506,0.42250025,-0.7908081,0.5167161,0.30983937,0.048737403,-0.14529826,0.22033516,-0.09019369,-0.3203758],[0.051401302,1.1819376,5.170329,-0.33289638,-1.3051468,0.29249665,-0.37950587,0.86728233,1.2912674,0.83467674,-2.1016138,1.439997,0.83915204,0.022718783,-1.1455536,-0.6881879,-0.294737,0.1764151],[0.13776821,-0.616747,-0.0515103,0.09284325,0.5059833,-2.2745788,0.8794392,0.23675422,0.050319634,-0.16485108,0.022945715,-0.55973744,-0.19152954,0.5871755,0.48204577,0.43679258,0.084300846,-0.48278216],[0.32304537,-0.17996605,-0.050503615,0.057818476,-1.1874164,0.93133926,-1.135065,-0.2207176,0.5842914,0.26639673,-0.4034041,0.74324435,-0.26271045,0.25194508,-0.33687708,-0.11164587,-0.21532725,0.31314066],[-2.675871,0.18930794,0.004894184,0.36429468,-0.28649125,1.037061,-0.8956486,-0.2692209,0.13867386,0.14524221,-0.07555664,0.13616084,-0.29872495,0.0028986863,-0.50115776,0.32039323,0.062777095,-0.08310216],[0.82229155,0.4732484,1.5131059,0.062322427,-0.036212314,0.24138685,-0.46806708,0.7292275,1.3152804,0.55548984,-1.013016,0.65633196,0.2736623,-0.5331334,-0.49591142,0.22494234,0.028473936,-0.29246685]],"activation":"σ"},{"dense_2_W":[[-0.07206964,-0.69786,-0.3486531,0.48960513,-0.0696577,-0.49357864,0.2556807],[-0.2884806,-0.41657805,-0.3665416,0.15454409,-0.028397316,-0.2936546,-0.16180961],[0.803782,-0.27441671,0.8961105,-0.4721216,0.7000408,0.5584937,0.4574221],[0.2588418,0.21096861,-0.08602997,-0.7243836,0.6489519,1.1368387,-0.47698346],[0.5214179,-0.4379109,-0.10204686,0.5734521,-0.5929383,-0.35884753,0.059597526],[0.7346847,-0.71839786,-0.044602457,-1.2187109,-0.13774236,-2.6510515,-0.51899457],[-1.7133079,-4.6997886,-0.25009632,0.4603738,-0.87082464,3.0611444,-3.0963175],[-0.048846636,0.91797,-0.31641433,-0.20087503,0.10279341,0.38753894,-0.038774494],[0.15197727,-0.81371284,-0.12212125,0.7514405,0.32369855,-0.2520269,-0.50490427],[0.25197092,0.8954266,0.3530475,-0.9002343,-0.6774651,0.55687094,-0.2753792],[0.9715217,0.11435808,0.7430187,-0.18673508,0.24399346,0.75376093,0.18281539],[0.07828533,0.40924087,-0.0052447147,-0.87007385,-0.16614385,0.75889,-0.09113192],[-0.42538083,-0.6130854,-0.18442006,0.81436867,-0.4363763,-0.4421119,-0.20321086]],"activation":"σ","dense_2_b":[[0.21890728],[-0.08548715],[-0.08091435],[-0.101685315],[0.10115151],[-0.14451991],[0.54433477],[-0.21013816],[-0.0104931025],[-0.4982431],[-0.1676464],[-0.31867242],[0.17811179]]},{"dense_3_W":[[0.7400645,-0.16807431,-0.12028546,-0.58515614,0.34891638,-0.5609874,0.7747953,-0.06871472,-0.044812664,-0.26168486,-0.2864116,-0.4026426,0.7852125],[0.13187477,0.58926487,-0.62580276,-0.043964617,0.5385393,0.07869039,0.43877578,-0.6161494,0.4016125,-0.06597045,-0.4159714,0.23538205,0.7423825],[0.11068092,0.26080158,0.051800307,0.3499296,-0.56061244,0.5514093,-1.840586,-0.14135396,-0.050766982,0.4223278,0.39574477,0.30749676,-0.8040509]],"activation":"identity","dense_3_b":[[0.034426726],[0.022138074],[-0.039126255]]},{"dense_4_W":[[-0.8798318,-0.64988774,0.49071792]],"dense_4_b":[[-0.03172631]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ODYSSEY 2018 b'39990-THR-A020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA ODYSSEY 2018 b'39990-THR-A020x00x00'.json new file mode 100755 index 0000000000..690b647429 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ODYSSEY 2018 b'39990-THR-A020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.624078],[1.0587155],[0.30083516],[0.047404915],[1.0569501],[1.0572157],[1.0565227],[1.0357862],[1.0151423],[0.9855047],[0.9551931],[0.04727608],[0.047284212],[0.047292266],[0.047139347],[0.046923578],[0.046476692],[0.045933507]],"model_test_loss":0.03084651380777359,"input_size":18,"current_date_and_time":"2023-08-06_16-32-16","input_mean":[[24.835194],[0.0007982536],[-0.006176701],[-0.0052586584],[0.00027294309],[-0.0003220067],[-0.0009233009],[-0.0011664837],[-5.9159433e-6],[0.00031557973],[0.0022665297],[-0.005350762],[-0.005354779],[-0.005356321],[-0.0052974457],[-0.0052572815],[-0.0053089443],[-0.005361436]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.3534836],[-0.029432654],[1.8868316],[-0.09822117],[-2.4564312],[-0.062489524],[4.9500136]],"dense_1_W":[[1.3379444,-0.023224303,0.92547566,0.23139125,0.49582657,-0.19798304,0.17489886,0.19757572,0.4532939,0.05501206,0.44625548,-0.37186652,0.23857181,0.08223163,-0.40953666,-0.31662405,0.36565343,-0.02073929],[0.0018158369,-0.46781677,0.014307537,0.7127616,-0.183635,-0.75742817,0.6894066,0.24744697,-0.17661563,-0.27236703,0.15312704,-0.57848364,-0.5893935,0.2702419,0.44554567,0.22370823,-0.226104,-0.09203226],[1.799059,-0.198707,-1.016055,-0.011727806,-0.029179385,0.14295676,-0.29293978,0.17230937,-0.47932827,-0.69661826,-0.093703836,0.18523113,-0.10232647,0.03687105,0.44274545,-0.19036789,-0.29666153,0.107951805],[-0.003098032,-0.24532981,-0.017002787,-0.5023018,0.39906764,-1.200529,0.4519783,0.4683689,-0.14362553,0.06751771,-0.17091979,0.3470844,-0.1885182,0.16463032,-0.009498001,-0.10712965,0.6976556,-0.33137426],[-1.357193,0.119205914,0.77373636,0.08123809,-0.53554714,0.04073674,0.14673577,0.47008705,0.36763436,0.7785362,-0.2854519,0.033120852,-0.38505244,-0.0073482324,-0.027826203,-0.18191494,0.7202002,-0.36105922],[0.011540895,0.42653874,3.4537587,-0.14331447,0.17654268,-0.25341675,-0.9539831,0.67298365,0.9465182,0.5915356,-1.033552,0.40142527,0.23822671,-0.1597271,-0.6579629,-0.23393449,-0.18252316,0.27954388],[2.213533,1.03911,1.1523687,-0.7107895,-1.6353345,0.7368801,-0.029617624,0.59569466,-0.3488169,1.8759083,-0.59652627,-0.33486545,-0.16461614,0.23255706,0.38946012,0.0076609664,1.2241695,-0.82663125]],"activation":"σ"},{"dense_2_W":[[-0.38179168,-0.03762462,-0.16407442,0.22533777,0.21200526,-0.75755686,-0.70566297],[0.23745127,0.79392534,-0.13295732,0.2560252,-0.525396,-0.3199242,-0.37806568],[-0.07160659,-0.8020838,0.9527979,-0.8270174,0.4712437,0.30625376,0.11045921],[-0.760045,-0.27719706,-0.10346,-1.3937811,0.93653303,0.7137455,-0.27598134],[-0.47952121,-0.6838305,0.20842296,-0.347254,0.57235146,0.32606634,-0.29145405],[-0.75135994,0.47685748,-0.6925233,0.6067481,-0.47287223,-0.6708088,-0.5606238],[-0.1407047,-0.042412486,0.19884428,0.6875437,-0.051208068,0.089406244,-0.25268498],[0.15601759,-0.5533243,0.65179765,-0.9195583,0.54043883,-0.31588987,0.042402852],[0.016135221,0.43866783,0.14963633,0.45334944,-0.13526076,-0.47658014,-0.27877006],[-0.6760022,-0.99107736,-0.0065089352,-0.7310922,1.198063,0.26301616,0.15857588],[-0.53217345,0.08108589,-0.42232883,0.2585569,-0.6059891,-0.16030814,-0.38680902],[0.20514117,-0.7086649,0.30526543,-1.014871,0.70494556,-0.1754464,0.6393286],[-0.44732463,0.7236195,-0.20577241,0.6082023,0.08172972,-0.12622307,-0.26760522]],"activation":"σ","dense_2_b":[[-0.23157027],[0.10348182],[0.103248015],[-0.25145143],[-0.16215345],[0.05333198],[-0.007814407],[-0.12305106],[0.015793381],[-0.11626731],[-0.21887426],[-0.013616658],[-0.045431573]]},{"dense_3_W":[[0.11133691,-0.7149343,0.6122002,0.5992357,0.48934844,-0.8058861,-0.61579424,-0.20425087,0.0400084,0.7586056,0.21969084,0.73337686,-0.5684788],[-0.32940114,0.5844858,0.33521906,-0.1380717,-0.15706351,0.44334856,-0.03572488,-0.44520766,0.33684713,-0.0387427,0.3344798,0.22412832,-0.34584302],[0.41397762,0.5771128,-0.17538065,-0.2331263,0.2025833,0.167861,-0.30182636,-0.55495805,0.4524257,-0.08304705,0.5681975,-0.48104328,-0.034903586]],"activation":"identity","dense_3_b":[[-0.029943425],[-0.01140329],[0.025632406]]},{"dense_4_W":[[1.1838417,-0.092230946,-0.76815987]],"dense_4_b":[[-0.028896004]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA ODYSSEY 2018.json b/selfdrive/car/torque_data/lat_models/HONDA ODYSSEY 2018.json new file mode 100755 index 0000000000..760d358b61 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA ODYSSEY 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.67131],[1.0606116],[0.3141555],[0.047306955],[1.0598024],[1.059542],[1.058586],[1.0353245],[1.0132898],[0.98134106],[0.9488499],[0.0472228],[0.047223553],[0.04722212],[0.047007233],[0.04672726],[0.046201415],[0.045611456]],"model_test_loss":0.030893046408891678,"input_size":18,"current_date_and_time":"2023-08-06_16-03-17","input_mean":[[24.826109],[-0.0015730427],[-0.0024845933],[-0.006542893],[-0.0021615939],[-0.0027822834],[-0.0034116579],[-0.002972936],[-0.0019527061],[-0.0018800201],[-0.00055315095],[-0.0066206236],[-0.0066137947],[-0.0066051884],[-0.0065096957],[-0.00645474],[-0.0064896797],[-0.0065450436]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.0666385],[-2.1265264],[-0.009373159],[2.1585333],[0.037653618],[-0.017867725],[3.2116225]],"dense_1_W":[[1.1914837,-0.5645276,6.58303e-5,-0.11589882,0.37734768,-0.27381,-0.19863185,0.824706,0.4373293,-0.20449224,-0.15180561,0.35472932,0.3237236,-0.10154249,-0.578405,-0.2772973,0.10017485,0.25640446],[-1.0303509,0.29729548,1.9708672,-0.5768468,-0.028354015,0.42035812,0.3361436,0.3343814,0.37328744,0.8638404,-0.2677837,-0.15447378,0.49736965,-0.08687722,-0.66492444,-0.032154877,1.1899335,-0.48110774],[0.01983638,-0.24834296,-3.3855686,0.6749708,0.07187869,-0.024789268,0.37607005,-0.47755113,-1.0089839,-0.81658024,1.3305435,-0.97285813,-0.6226301,0.6422294,0.9579225,0.49827808,-0.48402268,-0.29993263],[1.2045997,0.62863886,0.0019727307,0.17700921,-0.8630537,0.98878884,-0.16361095,-0.29803157,-0.7254775,-0.15229262,0.3722205,-0.22486125,-0.06222317,-0.37571073,0.4424153,0.06388154,0.5859267,-0.56900877],[-0.013524671,0.31598365,0.0006406281,-0.25858632,-0.27701482,0.7357323,-0.35521507,-0.4483451,0.44878978,0.2829642,-0.2362616,0.62810344,-0.121423006,-0.38609955,0.0749125,-0.17727378,-0.38110465,0.35318217],[-0.0052065155,-0.5593012,0.002159691,-0.08422028,0.23008162,-1.022624,0.32955936,0.431307,-0.1006895,-0.030441636,-0.08401783,-0.3437167,-0.22863047,0.7158902,-0.17199361,0.09197799,0.19186375,-0.1833609],[1.4867296,-0.15920977,2.3333318,-0.23857078,-0.0040042745,1.2148064,0.10699171,0.22722282,0.5444096,1.349413,-0.47866884,0.40205494,-0.11314535,-0.5150614,-0.4630753,0.030254288,0.7952247,-0.2603006]],"activation":"σ"},{"dense_2_W":[[-0.17723514,-0.23341042,0.57393736,-0.4927488,-0.927548,0.58540887,-0.5868284],[0.66296387,0.29695207,0.20052847,-0.62608564,-1.0550549,1.0728254,0.0891513],[-0.16829221,-0.0679403,-0.36510104,0.23858383,1.1178643,-0.6089432,-0.31060657],[-1.8900537,-0.27381107,-0.5241167,-0.7089269,-1.1469728,-0.0641088,-0.41346708],[-0.51642907,-0.43836012,-0.31121448,0.47541407,1.169322,-0.2952497,-0.37012473],[0.8616518,0.12941492,-1.1983941,1.7177894,1.0778812,-1.3677566,1.5917606],[-0.407816,0.042307053,-0.53986156,0.5610484,0.7355027,-0.8320296,0.05677452],[1.4589415,-1.2519528,0.8708634,0.6212387,-0.9204132,1.7146589,0.13543351],[-0.055101812,-0.19029272,0.013408977,-0.46497017,-0.92594385,0.9864242,0.13991055],[0.5894197,-0.28149623,0.41216704,0.216877,-0.51424307,0.83235174,0.14314461],[-2.6734824,2.668342,-1.7240498,-1.0608208,0.54306996,-1.3263385,-0.19313851],[-0.82157856,-0.23220612,1.0158018,-2.0316136,0.06581752,0.7996686,-1.5219475],[0.5740489,0.18412288,-0.14555724,-0.5847231,-1.1873335,1.0647899,0.008006016]],"activation":"σ","dense_2_b":[[-0.29801813],[-0.25020108],[-0.022192547],[0.026752593],[-0.027117254],[0.30578387],[0.053404447],[0.23486306],[-0.07118241],[-0.09914868],[-0.18535325],[-0.32233533],[-0.04571355]]},{"dense_3_W":[[0.43566743,0.43129563,-0.6076586,-0.46461692,-0.40563574,-0.60545087,0.47773033,0.15361485,0.54101425,-0.14459106,-1.1077414,0.30648795,0.5856095],[0.07340811,-0.49523342,0.6213182,0.19087262,0.06972069,0.8834424,0.5443848,-0.50467765,-0.38180703,-0.4638601,0.65264165,-0.8575672,-0.5819035],[0.33573294,0.619451,-0.046216093,-0.66367626,-0.64414126,-0.084879674,-0.60994107,0.5997581,-0.2552046,0.10798684,-0.29609105,0.45087123,-0.3904423]],"activation":"identity","dense_3_b":[[0.064981125],[0.043677732],[-0.029785963]]},{"dense_4_W":[[-0.35612056,0.9586297,-0.2525408]],"dense_4_b":[[0.03888263]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A040x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A040x00x00'.json new file mode 100755 index 0000000000..9f7945bc6c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A040x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.3870325],[0.88046026],[0.31456453],[0.045971613],[0.8823275],[0.88133013],[0.8802286],[0.85606366],[0.83917105],[0.81649935],[0.7949408],[0.045805056],[0.045844175],[0.045870136],[0.045709606],[0.045540884],[0.04515765],[0.044633806]],"model_test_loss":0.03413263335824013,"input_size":18,"current_date_and_time":"2023-08-06_18-19-42","input_mean":[[23.715818],[-0.030671604],[-0.0010694538],[-0.002801656],[-0.03120858],[-0.03159417],[-0.032069772],[-0.028450362],[-0.02625614],[-0.023662683],[-0.020763114],[-0.002952926],[-0.002957236],[-0.0029530823],[-0.002849485],[-0.0027969833],[-0.0027900888],[-0.002775541]],"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.030706996],[-0.037872314],[-0.05548866],[3.9280896],[0.7474149],[0.90278316],[3.6281414]],"dense_1_W":[[0.024131007,1.1437668,5.7560873,0.15635465,-0.29974687,0.29323357,-1.209728,-0.08944458,0.8328114,0.55170995,-0.49652693,1.7797251,0.356449,-0.22379819,-0.6863433,-0.7702987,-0.084863424,-0.71548474],[0.039950125,-0.1556448,0.90247494,-0.21784821,0.081626974,0.20843558,1.5873073,-0.3335005,-0.6408446,-0.004191309,-0.01373474,-0.3732137,0.0840519,0.481374,0.0065601915,-0.0018563746,-0.11723978,-0.15687008],[-0.041693777,0.8153725,-0.93551993,0.8342616,-0.9125522,-1.0517205,0.80132794,-0.33272502,-0.5316489,-0.020130547,0.51738137,-1.1073763,-0.06170218,0.75484115,-0.099664174,0.078711264,-0.3155204,0.23027797],[1.347042,0.35269168,2.0550568,-0.19498034,0.82868904,0.7170074,-0.6723933,0.46272853,0.51815087,0.19424136,-0.32263738,0.5095938,0.105270185,-0.3356029,-0.6227554,0.18846878,0.35004437,-0.55869645],[-0.68249965,-0.7106739,-0.00091033557,-0.1215673,0.15705624,-0.83085936,0.22485417,0.6567156,0.13330625,-0.08166536,-0.17778291,-0.45113075,-0.04207592,0.35418072,0.21138912,0.44137782,0.0059437924,-0.133213],[-0.6332932,0.5227072,-0.0001976942,0.34365958,0.32673892,0.2907148,-0.113340415,-0.39088866,-0.26699466,-0.05758928,0.29842612,0.024981031,0.13643564,-0.099530175,-0.41440305,-0.029128596,-0.51134044,0.29531562],[1.258255,-0.44770962,-1.8778437,-0.04598984,-0.900177,-0.19406404,0.4236334,-0.42944542,-0.32314876,-0.38610578,0.3892241,-0.43024847,0.047275137,0.42269197,0.073702455,0.19503468,-0.13383509,0.37180188]],"activation":"σ"},{"dense_2_W":[[-0.6328002,-0.2733073,-0.91156006,0.084900156,0.24577273,0.21559577,-0.45250878],[0.31812322,-1.1152663,-0.6027436,0.2201572,-0.53793555,1.0482581,-0.9947389],[0.15643081,-1.0215927,-0.24996142,-0.19163433,-1.1767645,0.20719749,0.052449297],[-0.64238095,0.6003157,0.50265914,-1.0465411,0.7531211,-0.8987147,-0.47903138],[-0.045131184,-0.89249134,-0.2586124,-0.3946543,-0.66559446,0.7098345,-0.35624668],[0.01925909,0.70794433,0.6441276,0.05606592,0.5759388,-0.44503638,-0.16193989],[0.106712155,0.49243534,0.91235846,-0.508013,-0.17323163,-0.39521646,0.27420443],[0.14106807,-0.38276723,-0.74229676,-0.17772292,-0.2867895,0.07301143,-0.5713336],[-0.3910647,-0.331973,-0.71291363,0.44479296,-0.372079,0.43584257,0.23784764],[0.6200412,-0.46858776,-1.0548015,-0.37598544,-0.95491964,0.7775705,-0.32049537],[-0.5429174,-0.33909863,-0.51903373,-0.53528494,-0.9287474,-0.050585847,-0.24405093],[0.08782715,-0.5397067,-0.39007556,-0.11375101,-0.4224178,0.72133744,-0.851765],[0.23905222,-0.28642985,-0.86665606,0.44080213,-0.5833951,0.714745,-0.7849159]],"activation":"σ","dense_2_b":[[-0.28084794],[0.035663433],[-0.17919558],[-0.14884101],[-0.19750093],[-0.05943652],[-0.010351563],[-0.13942906],[-0.26031336],[-0.12523566],[-0.32246646],[-0.19670182],[0.03445928]]},{"dense_3_W":[[-0.54237396,-0.12057569,-0.33454332,-0.22615993,-0.5465151,-0.14707579,0.05022189,0.56217587,-0.17346314,-0.24858905,0.34007478,-0.00070786034,0.52975553],[0.5001979,0.41751292,0.6217282,-0.7284195,0.47918427,-0.6284354,-0.34686244,0.010521516,0.46527955,0.300923,0.1515217,0.24209905,0.6725099],[-0.36316845,0.706709,-0.09291999,-0.8208684,0.164437,0.1152729,-0.014193419,-0.3382088,-0.5153448,0.64160955,-0.4063204,-0.023448244,-0.27234897]],"activation":"identity","dense_3_b":[[-0.04338367],[-0.095272206],[-0.045654554]]},{"dense_4_W":[[0.4292374,1.7759846,0.5118597]],"dense_4_b":[[-0.059387]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A060x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A060x00x00'.json new file mode 100755 index 0000000000..52fbc920a8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A060x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.0581903],[0.92126673],[0.29617915],[0.04191473],[0.9171323],[0.9183279],[0.9188417],[0.9060646],[0.89225584],[0.87377656],[0.85549104],[0.04186598],[0.041867044],[0.041861024],[0.041707642],[0.041504312],[0.04113141],[0.040689647]],"model_test_loss":0.024623241275548935,"input_size":18,"current_date_and_time":"2023-08-06_18-45-10","input_mean":[[26.12887],[-0.018342948],[0.0023950052],[-0.00060018164],[-0.020283561],[-0.020622766],[-0.020715354],[-0.020511365],[-0.020389233],[-0.020154186],[-0.019204807],[-0.0007310425],[-0.0007260691],[-0.0007204341],[-0.0006898669],[-0.00067769137],[-0.0007068316],[-0.0007057846]],"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.34347212],[-0.04366823],[3.8996286],[-3.2322345],[0.0011430938],[0.31775263],[0.02871207]],"dense_1_W":[[-1.2845949,0.13241255,-0.00054695434,0.30559602,-0.457657,-0.50316894,0.41611654,0.76597494,-0.020354524,-0.1652268,-0.1537093,-0.95382077,-0.4738125,0.2229064,0.497753,0.5096397,0.2834458,-0.39443842],[-0.01576654,1.0631088,-0.0001952519,0.2668259,0.5884113,0.42140722,-1.0702667,0.06912717,0.29095903,-0.16439292,0.07887146,0.29752833,-0.5947841,-0.45468485,-0.29552692,0.02692619,0.34921086,-0.04025514],[0.918351,-0.39751226,-2.0331492,0.636789,-0.6820441,-0.2611252,0.43445766,-1.2055922,-0.8403307,-0.123105325,0.5316267,-0.883859,0.15459336,0.32164282,0.28913066,0.20976447,0.02999975,0.067868724],[-0.8948686,0.07852778,-1.858944,0.25246492,-0.72072095,-0.721946,0.2008207,-0.6164795,-0.620322,0.054701116,0.13644697,-1.0398991,0.23678952,0.9060979,0.24625729,0.06296468,-0.09471517,0.18253052],[-0.039542284,0.14739217,-1.8839234,-0.05269514,0.22938618,0.1295076,-1.715298,1.3541347,0.60284644,0.07251003,-0.58243793,0.369853,0.17180686,-0.93567884,0.41123584,0.22822875,-0.015471544,-0.1450907],[-1.309309,-0.0065789986,-0.0009026052,-0.43786958,0.66638273,0.6100126,-0.80755997,-0.44549793,-0.33233902,-0.14217907,0.4560685,1.0638386,-0.23771513,0.031021614,-0.31280205,0.110058166,-0.23958574,0.024892198],[0.021762278,1.2449024,2.3610842,0.10449084,0.035584703,-0.20509337,-2.1041403,1.2424486,0.5425319,0.13568977,-0.68708223,0.6785129,0.2722758,-0.94338864,-0.11912091,-0.061731618,-0.21562424,0.265597]],"activation":"σ"},{"dense_2_W":[[0.8672452,-1.6432475,-0.089617,3.4410927,-1.8457493,-1.653231,-1.1289697],[-0.8830999,0.42412817,0.3355593,0.30391192,0.37201688,0.70189875,0.76556355],[-1.0386908,0.7344996,-0.46029314,-0.045133006,0.41179648,0.23103125,0.06681513],[0.97836345,-0.851959,0.74249834,-0.25212237,-0.082773805,-0.61097443,-0.47594827],[-0.489878,0.80100036,-0.38931137,0.06700653,-0.20617403,0.2470712,0.9071803],[-0.9829343,0.34199762,-0.5856996,0.21864368,0.9632561,-0.06746073,0.14236969],[-0.22686507,0.0058632977,-0.67398316,0.106053695,0.06964084,0.42800158,0.84875035],[0.8461344,0.14065352,0.077666566,0.5249845,-0.3699625,-1.0579052,-1.0444427],[-0.6473488,0.069085024,0.1963253,0.106187075,0.045327008,0.5108394,0.20862271],[-0.18507846,0.81007284,0.59458715,-0.20684378,0.41903466,1.124245,-0.0002866817],[1.8409206,-1.6266977,1.558487,-0.14739716,-0.71901566,-0.9584196,-0.24527057],[0.061728116,-0.75477535,-0.22849028,-0.3439474,-0.65592027,-0.9196831,-0.34239137],[-0.24715817,0.27214324,-0.46822995,-0.11250425,0.4140462,0.5036997,0.808618]],"activation":"σ","dense_2_b":[[0.3682189],[-0.3061952],[-0.2186805],[0.26665255],[-0.20908445],[-0.25180277],[-0.16508935],[0.37200344],[-0.132723],[-0.0748416],[0.77447575],[0.07100879],[-0.28392908]]},{"dense_3_W":[[-0.7492231,0.6381115,0.22848813,-0.6114985,0.4652135,0.43796808,0.15224089,-0.86344284,0.23925477,0.66866344,-0.874919,-0.37883374,0.47491515],[-0.23657976,-0.20048968,0.14517088,0.0775067,-0.15648171,0.5634285,-0.51960784,-0.31498674,-0.14429168,-0.22901323,0.0648477,0.0648267,0.5823677],[-0.010220655,0.21547753,-0.08935665,0.67853194,0.40634638,0.30693397,-0.31160212,0.8876798,0.2663386,-0.41578376,-0.043752998,0.05976479,-0.30815133]],"activation":"identity","dense_3_b":[[-0.03995597],[0.043906566],[-0.009552566]]},{"dense_4_W":[[0.96169305,-0.013711991,-0.33541062]],"dense_4_b":[[-0.032807786]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A070x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A070x00x00'.json new file mode 100755 index 0000000000..d9ddfeb90d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TG7-A070x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.899371],[0.91326123],[0.34754744],[0.047207538],[0.921164],[0.9188041],[0.9149523],[0.8824703],[0.86114454],[0.8327107],[0.80909157],[0.04698797],[0.04704211],[0.04708921],[0.0469777],[0.04675353],[0.04638313],[0.045919105]],"model_test_loss":0.029772095382213593,"input_size":18,"current_date_and_time":"2023-08-06_19-12-45","input_mean":[[23.732822],[0.017107664],[-0.0011733986],[-0.0058285887],[0.017914131],[0.017934287],[0.018237941],[0.017002761],[0.015237825],[0.013338944],[0.011673382],[-0.005840362],[-0.005826218],[-0.0058171875],[-0.005817545],[-0.0058693774],[-0.0060108923],[-0.00612493]],"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.20021264],[3.4939082],[-0.06716851],[0.058503635],[-0.010445441],[-0.16600388],[4.0031]],"dense_1_W":[[0.67624974,0.5699806,1.7589446,0.38397965,0.04085462,-0.35647398,0.94661707,-0.042084765,-0.36401713,0.15266082,-0.11755991,-0.42012995,-0.390879,0.27095684,-0.3359402,0.44403496,-0.50348926,0.20556912],[1.2939718,-1.0459632,-1.4953133,0.24710384,-0.07565443,-0.4741599,0.8066539,-0.5519822,-0.8259321,0.08815797,0.5646691,-0.22644426,0.6596317,0.49577862,-0.5832377,-0.30473575,-0.07392759,0.22181918],[-0.0067671034,-0.56580436,-1.5979874,0.72282726,0.14223135,-0.70996284,1.6942539,-1.0655241,-0.59319955,-0.13150467,0.68681896,-0.33786333,-0.6004301,0.93967056,-0.18882798,-0.21886076,-0.018479563,-0.026317876],[0.73770875,-0.35808742,-1.7224159,-0.11537585,0.23505013,0.3487726,-1.6180664,0.44352862,0.087284215,0.14080617,-0.049784306,0.67705816,-0.18708247,-0.038130477,-0.0593233,0.15170136,-0.2373075,0.12623678],[-0.00046603545,0.062258437,-0.00017648668,0.5743302,-0.14112268,0.7994641,-0.5734729,-0.1330987,0.122790836,-0.05908033,0.053587526,0.40562433,0.48647818,0.07770536,-0.8969449,-0.569001,-0.15433595,0.106549785],[-0.00043468282,-0.44794786,-0.0009173404,-0.15259606,-0.423234,-0.7315594,0.2841295,0.7197476,0.27196157,-0.043154158,-0.35170138,-0.3242454,0.4141323,0.15176967,0.3337161,-0.022378944,-0.016765838,-0.13956091],[1.370725,0.92907214,1.5363995,-0.07274529,0.06922402,0.47750995,-1.1804242,1.0793897,0.87313735,0.03309975,-0.787432,0.1583054,-0.06471896,-1.6379938,1.0917811,0.2863863,0.16701585,-0.370107]],"activation":"σ"},{"dense_2_W":[[-1.1142431,-0.98553467,-1.7528756,-0.7601161,0.023125764,0.29621416,0.057998575],[-0.57707655,-0.035297927,0.7552565,0.40910327,-0.045871045,0.7647045,-0.17583843],[0.54533637,0.37994358,0.48098484,-0.60859483,-0.679812,1.1466373,-0.7521221],[-0.766621,0.29065615,-0.96372104,0.4400032,1.691393,-1.3640326,1.5831442],[-0.03152584,-0.0041346215,-0.59791905,0.0149094295,0.5149197,-0.568262,0.5052371],[-0.62852687,-0.5016056,-0.88126785,0.6810648,0.76567554,-0.68329334,0.26362616],[0.09154294,-0.23193486,0.9080769,0.06993361,-0.50866467,0.6603812,-0.6362647],[-0.7537723,-0.8049923,-0.8947776,0.73191917,0.7269287,-0.6561125,-0.15393494],[-0.45121416,0.21887077,0.8701729,0.49937823,0.093833074,0.6793174,-0.26953593],[-0.21209432,-0.52174926,-0.84514666,0.044568583,0.4728377,-0.45035967,0.13409898],[0.5650158,-0.6122694,-0.23879126,0.88060015,-0.02077808,-1.9465554,-0.37588525],[0.19426925,0.5452357,0.12054777,-0.40416533,-0.81852937,0.9164135,0.20086637],[-1.2047343,-0.5585611,-1.8479179,-0.6856552,0.07956908,0.2805922,0.37198797]],"activation":"σ","dense_2_b":[[0.060228728],[-0.04707918],[-0.14618197],[0.106457904],[-0.03570688],[-0.08961752],[-0.05534363],[-0.121585414],[-0.109557174],[-0.067889966],[-0.14876497],[-0.058959074],[-0.12490072]]},{"dense_3_W":[[0.38950223,0.3090716,-0.4296155,-0.33159044,-0.105799004,-0.119462036,0.53925854,0.22593993,-0.034717377,-0.23057248,0.3610593,-0.022898644,-0.06612316],[0.7082383,-0.2031159,-0.35994145,0.57508343,0.49524105,0.3460956,-0.74825346,0.7125477,-0.066172495,0.29165456,0.6697642,-0.56427914,0.5089701],[-0.21685903,-0.047797453,-0.24373047,-0.06741093,0.49110416,0.062480558,-0.5235519,-0.48258132,-0.27274242,0.333045,0.41328818,-0.4939122,-0.037244707]],"activation":"identity","dense_3_b":[[0.018447949],[-0.053515278],[-0.02512046]]},{"dense_4_W":[[-0.07239497,1.4876865,0.61020267]],"dense_4_b":[[-0.03861425]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TGS-A230x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TGS-A230x00x00'.json new file mode 100755 index 0000000000..bb87addba0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017 b'39990-TGS-A230x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.844337],[0.5474532],[0.2851794],[0.027097791],[0.54364073],[0.5449447],[0.54493386],[0.5406305],[0.53676015],[0.5303491],[0.52479345],[0.02704525],[0.027049432],[0.027056439],[0.027171213],[0.027275724],[0.027305145],[0.027313853]],"model_test_loss":0.011909760534763336,"input_size":18,"current_date_and_time":"2023-08-06_19-37-10","input_mean":[[22.95614],[0.03637806],[0.0046443446],[-0.009752038],[0.035477746],[0.03569809],[0.03587167],[0.038072705],[0.041633505],[0.043689143],[0.044423867],[-0.009905221],[-0.009882373],[-0.009861099],[-0.009661706],[-0.009565372],[-0.009564497],[-0.009780675]],"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.017572576],[-4.3160543],[0.0974798],[0.036516342],[-0.109429516],[-0.09818942],[4.911552]],"dense_1_W":[[-0.0024906907,-0.16255474,0.0021684417,0.15618499,0.51274085,-1.5496616,0.80450743,-0.17654379,0.029981567,0.29689407,-0.22370933,-0.40722302,-0.47401586,0.088543475,0.39740565,0.16661157,-0.21702406,0.18496276],[-1.7687228,0.7045914,1.427233,-0.52335125,0.59448713,0.15286753,-1.2777213,0.61541426,0.16629013,0.4778544,-0.32696342,-0.17506757,0.095090166,-0.1734923,0.12915663,0.4323549,-0.13984495,0.013180874],[-0.0005372349,0.14655821,0.00052846695,-0.1672421,-0.10420727,1.4758636,-1.3471918,-0.3041868,0.0994203,0.18412685,-0.011641346,0.20525645,0.029496245,0.26476464,-0.43268526,-0.11217049,-0.21945795,0.25870478],[-0.032725878,-0.5761932,-3.2336373,0.5103813,-0.077060595,-0.80228996,1.8519014,0.14672789,-0.111017115,0.24072622,-0.12112954,-0.3908596,0.10182307,-0.07298533,-0.080630735,0.008331639,-0.120116994,0.006328887],[0.03457588,-0.49316353,2.6339474,0.19689563,0.17444913,-0.8295214,1.600949,-0.595955,-0.69125766,-0.7232554,0.86711705,-0.012927358,-0.16348226,0.26314303,-0.0088081835,-0.46151197,-0.063149415,0.23691247],[-0.0007938469,-0.26171395,-1.7098687,0.26605788,-1.0185215,-1.438486,1.65897,0.34761468,-0.032835998,0.5944291,0.07509286,-0.3272494,-0.19096224,0.46081677,-0.099406004,0.1578144,0.2245294,-0.33107895],[1.8251307,-0.31498715,1.4632752,-0.25625032,0.15879938,1.4816606,-1.8760675,1.3390347,0.31716788,0.5548306,-0.5275588,0.24619943,0.06173876,-0.8373367,-0.09087632,0.6366511,-0.082824394,-0.030000336]],"activation":"σ"},{"dense_2_W":[[0.7515066,-0.5105429,-0.5129767,0.17204086,0.4370165,0.21994908,-0.6377811],[-0.8214936,-0.19322807,0.41158032,0.1989778,-0.14067653,-0.64911515,0.5294647],[0.51943374,-0.06608904,-0.29252574,-0.024339033,0.43838638,0.051782995,-0.806854],[-0.20359917,-0.32902804,0.337066,-0.61808026,-0.07043727,-0.34022537,0.30081543],[-0.24775623,0.51326185,0.5934297,-0.98377573,-0.11107068,-0.32810766,0.3160865],[0.5520875,-0.010964958,-0.69238853,0.44000012,0.18294834,0.55245346,-0.085966766],[0.266246,0.22741622,-1.3200338,0.31004852,0.4994686,0.6832114,-1.012235],[0.6528813,-0.3028174,-0.9139022,0.44758174,0.6425402,0.010288926,-0.20716433],[-0.5859752,0.29565674,0.641747,-0.30805898,-0.56379014,-0.216961,0.75915325],[-0.7312802,1.830524,1.2278521,-0.80010766,-0.8330499,-0.69043976,-0.28447995],[0.5335052,-0.064827405,0.027745938,-0.46684337,0.44196686,-0.48609126,-0.21828449],[0.14514819,0.4311585,-0.54999,0.5635193,-0.4327273,-0.14394662,0.111346856],[-1.0599593,1.1263603,0.78328055,-0.37957004,-1.5480173,0.1396851,-0.2799352]],"activation":"σ","dense_2_b":[[-0.23358788],[0.1585287],[-0.13420668],[-0.07403241],[0.010910343],[-0.18071596],[-0.14818127],[-0.12828562],[0.14517418],[-0.07583147],[-0.09213995],[-0.09467464],[-0.08490435]]},{"dense_3_W":[[0.34530333,-0.25396794,0.3704989,-0.45187533,-0.6564372,0.28631496,0.28807354,0.6734085,-0.5048169,-0.14331086,0.3927886,0.21402659,-0.19487047],[0.5606163,-0.28793406,-0.03255529,-0.27054605,-0.64770496,0.5929222,0.71289337,0.023057688,-0.31981897,-1.0039912,-0.42174533,-0.2053406,-0.33733523],[-0.05791618,-0.55499506,0.4860968,0.516192,0.107287996,0.33412755,0.3361389,0.28090212,0.30633086,-0.5674268,0.15556479,-0.100490406,-0.6992101]],"activation":"identity","dense_3_b":[[0.05391226],[0.12384217],[-0.0018761213]]},{"dense_4_W":[[-0.80719674,-0.53903717,-0.10743938]],"dense_4_b":[[-0.060299486]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017.json b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017.json new file mode 100755 index 0000000000..713bb4a0c5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA PILOT 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.118591],[1.012343],[0.30252126],[0.04747358],[1.0110137],[1.0105052],[1.0093575],[0.98329234],[0.96060896],[0.93123335],[0.90310067],[0.04717917],[0.047231637],[0.047265887],[0.047122534],[0.046797972],[0.046346754],[0.045773227]],"model_test_loss":0.03557046875357628,"input_size":18,"current_date_and_time":"2023-08-06_17-27-23","input_mean":[[24.204573],[-0.024622405],[0.0015252293],[-0.0032674451],[-0.023904368],[-0.02417538],[-0.024461435],[-0.023585865],[-0.021832237],[-0.020321053],[-0.019801456],[-0.0032891335],[-0.0032849729],[-0.0032711467],[-0.0032068372],[-0.0030881383],[-0.0030222118],[-0.0030280964]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.7401334],[-4.296874],[0.051964045],[-1.5580355],[0.59131175],[0.9876563],[-0.059906512]],"dense_1_W":[[0.39198807,0.14618506,-0.0005603469,0.5384161,0.583554,0.90904,-0.9356289,-0.347572,0.054832783,-0.01266942,0.20926124,0.40405145,0.26462293,-0.5968776,-0.4170079,-0.24383324,-0.36820978,0.23693004],[-1.4237757,0.44019157,1.7405101,0.107415356,0.73406404,0.38215244,-0.6587738,0.6303781,0.9956125,0.3772358,-0.60114783,0.28546256,-0.21894793,-0.5291562,0.028785085,-0.0466827,-0.02260468,-0.14874777],[-0.011811628,0.5467675,3.1406043,-0.5367604,0.16197537,0.72486085,-1.0583096,0.6693704,0.23038347,0.16671906,-0.6996211,0.9920219,0.24508859,-0.8121351,-0.11340726,-0.124802016,0.0040163123,-0.03318359],[-0.89146703,-0.43514004,-1.1770084,-0.113605686,-0.2791039,-0.6336671,0.52206266,-0.37517008,-0.583943,0.13963065,0.10783694,-0.019744247,0.09936149,0.34897432,0.077529624,-0.12277383,-0.21316914,0.31482303],[-0.5459662,0.6174858,-1.5395053e-5,0.23975974,0.1680196,0.6688479,-0.5717515,-0.2257085,-0.37668842,0.37691414,0.016556103,0.5753194,0.43969232,-0.63690066,-0.79015404,0.094646364,-0.26196766,0.13351451],[1.219549,0.6434229,1.5366393,0.29663944,-0.1569686,0.1139518,1.0193243,0.13182868,0.1257156,0.4684622,-0.33492422,-0.1404477,-0.20704125,0.21394883,-0.60481495,0.20762968,-0.2884613,0.04056693],[0.0022561958,-0.10740119,-2.973164,-0.24940717,-0.11246171,-0.017514866,-1.2795074,-0.021132804,0.8575916,0.07600141,-0.029272523,0.5688567,0.09931985,-0.10324848,-0.2901189,-0.37775588,0.39807785,0.3334187]],"activation":"σ"},{"dense_2_W":[[0.5666278,0.1050696,0.5731484,-0.6657482,0.57242334,-0.6813752,0.650503],[-0.3233396,-0.44350263,-0.16690572,0.123169236,-0.8172176,0.5242723,-0.45013273],[-0.1649446,0.012782408,-0.80965835,0.28827253,-0.6245722,0.2006493,-1.087686],[0.96152276,0.35989368,0.22035821,-0.80648047,0.4686015,-0.6329297,-0.0023717843],[-0.11855806,-0.91366136,-0.90975124,0.47533065,0.41179633,0.05490874,0.1064329],[-0.73532724,-0.6584749,-0.5160826,0.34969312,0.062357668,0.13114415,-0.32903922],[-0.72250515,1.2826318,-1.2006475,0.9427826,-1.371755,0.20815341,-1.0248761],[-0.4109795,-0.64342046,-0.22680378,0.12261962,-0.15706545,0.4520076,-0.09530116],[0.5485182,0.3166386,0.60656774,-1.0352023,0.35866728,-0.37757927,-0.37554651],[-0.7688577,-0.31978396,-0.42268845,0.59393954,-0.4435929,0.47090167,-0.31540674],[-1.0920306,-1.0558451,0.11860894,0.49140632,-0.10677766,0.47734076,-0.398253],[-0.030640373,0.41173688,-0.98270494,0.5081087,-0.5071277,-0.3028872,-0.8938836],[0.4381069,0.943475,0.6218088,-0.742083,-0.38795125,-0.054727156,0.31301942]],"activation":"σ","dense_2_b":[[-0.09199342],[0.03208081],[-0.04846608],[-0.1532128],[-0.012221367],[-0.15162058],[0.14393868],[-0.17525378],[-0.38610223],[0.03283754],[0.02243522],[-0.046554077],[-0.10267613]]},{"dense_3_W":[[0.76260686,-0.14955303,-0.07697563,0.795136,-0.5793355,-0.39125565,-0.850312,0.054931063,0.53414947,-0.3139965,-0.5467518,-0.38860124,-0.034747276],[0.26200438,-0.37439495,-0.4377097,0.17163786,-0.30471745,0.30637982,0.06850715,-0.34865668,-0.35463956,-0.1303642,-0.39582416,-0.5477129,0.69954056],[-0.38012898,0.3671737,0.4092681,0.1147916,-0.33737427,0.28946012,-0.2992325,-0.067024715,0.4072253,-0.31171417,0.33009604,0.12577192,-0.27651602]],"activation":"identity","dense_3_b":[[0.05052462],[0.061525963],[0.01540329]]},{"dense_4_W":[[1.5063055,0.714805,0.00043001983]],"dense_4_b":[[0.047914207]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A020x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A020x00x00'.json new file mode 100755 index 0000000000..4fc4f99db6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A020x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.526597],[0.8048686],[0.30508777],[0.03864828],[0.80819684],[0.80695915],[0.8048399],[0.78234345],[0.76694405],[0.7469485],[0.7296534],[0.038567755],[0.038570154],[0.038559318],[0.03835149],[0.03808803],[0.03767571],[0.037237816]],"model_test_loss":0.03462047502398491,"input_size":18,"current_date_and_time":"2023-08-06_20-57-06","input_mean":[[26.62668],[0.036549807],[-0.011428904],[0.0053228196],[0.03878817],[0.038509928],[0.03783984],[0.032552782],[0.02958787],[0.025563305],[0.02255467],[0.005326508],[0.0053158393],[0.0053043445],[0.0053029354],[0.005256346],[0.005181934],[0.0050085713]],"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.14232375],[1.8012465],[-0.09831748],[0.5650695],[-1.1499583],[-0.073488325],[1.0894103]],"dense_1_W":[[0.056877207,0.6916827,5.06491,-0.66757196,-0.064828135,0.602485,-0.75314325,-0.17327878,0.6848782,0.34329203,-0.5423522,1.1682849,0.17310293,-0.36728725,-0.4643529,-0.31240857,0.02507186,0.3971787],[0.8599211,0.040786155,1.3326324,-0.47951195,0.44746584,0.6010731,-0.21368843,0.12426477,-0.04983132,0.23454875,-0.15349868,0.19200465,0.3104551,-0.3557172,-0.13984811,0.4962251,0.053631846,-0.1638603],[-1.8845662e-5,-0.96039295,-0.008062018,-0.4011542,0.38096327,-0.589807,0.55235106,0.41631168,0.11027108,0.09306343,-0.19353023,-0.60363764,-0.12267431,0.49039286,0.5191193,0.55169106,0.30454066,-0.5621538],[1.0135822,-0.75806355,-1.6029091,-0.3095834,-0.22254121,-0.09464273,-1.3611665,0.771017,0.79057467,0.24156936,-0.58263016,0.49122322,-0.08950236,-0.12695374,-0.22518735,0.39627716,-0.10022992,0.050749615],[-1.2416042,-0.17200327,-1.6770357,-0.3177143,-0.34086037,-0.027091691,-1.5113678,0.49007565,0.66320384,-0.0010659369,-0.34323072,0.5169337,-0.15815243,-0.034780547,0.1575047,-0.0329744,-0.3683034,0.32797682],[-0.0022168742,-0.66831297,0.010362603,-0.41855475,-0.009861155,-0.94385296,0.1030419,0.45698124,0.26305547,-0.21666865,-0.11719163,-0.22144005,-0.04730197,0.7822476,0.046567436,-0.084721416,-0.086411186,0.39097503],[0.5916624,-0.35777295,-1.1239158,0.20729716,-0.6318845,-0.7276167,1.2016071,-0.27480146,-0.15381776,-0.08857165,0.15498745,-0.845312,0.26758724,0.7284694,-0.2389467,-0.1021588,0.118127644,-0.060775146]],"activation":"σ"},{"dense_2_W":[[-0.22620663,0.41269052,-0.24866156,0.6366785,0.7235434,-0.927365,-1.0595255],[-0.36320922,-0.8501176,0.7743313,-0.2655733,-0.20027223,0.3987106,0.16717343],[0.04363351,-0.39013597,-0.14777897,0.050077282,0.23006651,0.32082573,0.6458379],[-0.10794271,0.6917472,-1.081361,0.42123145,0.6480493,-0.3713631,-0.89706177],[-0.78707266,0.32178167,1.1140773,0.19835484,-0.92583483,0.54546994,1.2142284],[-0.4685015,-1.2930269,0.8641388,-1.1940204,-0.26867914,0.68155724,0.5093967],[-0.1882023,0.36285752,-0.6288009,0.08845282,0.53267115,-0.48252743,-0.72988355],[0.42914814,-0.29254675,-0.78575516,0.43952206,0.26590148,-0.6462319,-0.8898721],[-1.1129463,-1.0545493,0.41503805,-0.4397955,0.37739003,0.2824943,-0.12243744],[0.5261344,-0.49560457,-0.19782127,-0.63711095,0.24736477,0.4398861,0.6398021],[0.05428658,-0.59174234,0.26730546,-0.12481052,-0.08528374,0.07640281,0.28411782],[0.78370523,1.1058642,-0.23422256,0.77695924,-0.41036674,-0.23147115,-0.84960663],[0.22395311,-0.522629,-0.0788354,-0.15769184,-0.3324099,0.5808104,0.924355]],"activation":"σ","dense_2_b":[[-0.039920773],[-0.052275084],[-0.0664735],[-0.018644892],[0.00933328],[-0.054911967],[-0.00089501834],[-0.023597311],[-0.3882073],[-0.091632456],[-0.4284712],[-0.028570231],[-0.12698737]]},{"dense_3_W":[[-0.30708212,-0.07836911,-0.51141727,-0.12163258,-0.34234747,-0.13424605,0.5527976,0.338374,-0.08043284,-0.53650296,-0.08814839,-0.09911217,0.26711917],[-0.5153229,0.610062,-0.3431148,-0.43862098,0.6182512,0.8723251,0.027186068,-0.46111137,0.6949713,-0.20838192,-0.17872754,-0.25688672,-0.2768381],[0.5712013,-0.50477827,-0.41985807,0.6996244,-0.04315098,-0.090902686,0.57373744,0.65513474,0.2195478,-0.17768551,-0.16094655,0.4999511,-0.60238904]],"activation":"identity","dense_3_b":[[-0.019368384],[0.06465865],[-0.06263113]]},{"dense_4_W":[[0.30276972,-0.77930284,1.3356577]],"dense_4_b":[[-0.057673924]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A030x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A030x00x00'.json new file mode 100755 index 0000000000..072cb370f2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A030x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.718611],[0.8000405],[0.316423],[0.04299987],[0.8036066],[0.80211085],[0.80001944],[0.7775613],[0.75944704],[0.7362369],[0.7155587],[0.042815663],[0.042829156],[0.042837203],[0.042570762],[0.042158205],[0.041655492],[0.04112391]],"model_test_loss":0.022167924791574478,"input_size":18,"current_date_and_time":"2023-08-06_21-24-15","input_mean":[[24.369797],[-0.025400253],[0.017546965],[-0.00700374],[-0.02907116],[-0.0272434],[-0.026022244],[-0.018144533],[-0.013257402],[-0.008418786],[-0.005300719],[-0.0070171817],[-0.006979727],[-0.0069393516],[-0.0067121363],[-0.006487458],[-0.0063709775],[-0.006421042]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.7274725],[0.025503755],[0.3050141],[-5.3191023],[-0.03876078],[0.005245881],[-5.0506983]],"dense_1_W":[[-0.2822948,-0.722028,3.7289326,0.10887399,0.23870549,0.50487334,-0.123285055,0.6266674,-0.16613187,-0.31120768,0.21549895,0.8222215,0.093914084,-0.508679,-0.32368693,-0.5741282,-0.12807958,0.4776648],[0.055145074,-0.08890773,2.0090845,-0.22150633,0.07060641,-0.22094366,1.112321,-0.9160675,-0.5255298,-0.2628351,0.6098551,-0.54194224,0.21753678,0.80302423,-0.20514414,-0.26842067,0.14056496,0.033558667],[0.07740017,0.015846146,2.7256997,-0.40292552,0.21246663,0.70980185,-1.5323384,0.36885697,0.4570335,0.031200917,-0.2520181,0.7061896,0.4765367,-0.40083462,-0.020111812,-0.83463514,-0.2164461,0.6454257],[-1.7542838,0.968146,-2.7611947,1.1451197,-1.0110191,-0.8876714,0.20558445,-0.9517466,-0.4182316,-0.12540092,0.31168443,-0.33938956,0.24651282,0.0059528793,-0.85313106,0.4553901,-0.33676484,0.039334722],[0.0048947604,0.28315127,-0.00082401093,0.1642722,-0.026302634,0.5552507,-0.4484803,-0.77365834,0.3072703,0.20140412,-0.07074192,1.1858759,-0.019229556,0.54098135,-0.6814733,-0.69271094,-0.06874056,-0.38412106],[0.0007334778,0.7766232,0.00028844643,-0.21648946,0.092252165,0.67591894,-0.27549696,-0.24640717,-0.29265153,-0.3485241,0.46819794,0.36771885,0.1777801,-0.9394743,-0.5500784,0.5453998,0.23175853,-0.06195575],[-1.6910515,-0.50021756,2.6513228,-1.0415213,0.7283371,1.1932234,-0.42946246,0.6699792,0.35031915,0.056402538,-0.2107231,0.35974085,0.18628371,-0.5288515,0.4471923,-0.037989102,0.38440272,-0.13335472]],"activation":"σ"},{"dense_2_W":[[0.32577014,0.79221934,-0.328502,0.93716705,-0.48035973,-1.1603907,-0.2849361],[-0.018025871,1.2269095,-0.17799911,0.3586097,-0.5202041,-0.9837849,-0.52449334],[0.4882362,0.007634269,-0.8909171,-0.3146946,0.22157149,-1.2225018,0.20821871],[0.80880105,0.06718037,1.1132499,0.29183453,0.04864204,-0.16105369,0.35970175],[-0.37581718,-0.5779451,0.3496446,-0.47957718,0.56743324,0.7492507,0.09928946],[-0.4170784,0.6871286,-1.0214018,0.49072498,0.097653925,-0.34628057,-0.669162],[0.07657919,0.3276044,0.025352756,0.4546719,-0.42029864,-0.9768511,-0.06424113],[-0.034272887,0.27446097,-0.026066864,-0.23361085,0.50696295,0.26659736,0.061146133],[0.20783767,-0.38495246,0.64545757,-0.5973285,0.28495064,0.6255407,-0.27093932],[-0.18777645,-0.10720107,-1.0076562,-0.91708684,0.035999604,-0.3695375,-0.40669018],[0.097274005,-0.0091937585,0.77790815,0.5603293,-0.007872101,0.16779582,0.57061195],[-0.27653685,0.8055118,-0.16641589,0.67337465,-0.68099606,-0.7176573,-0.09002476],[0.50360245,-0.814891,-0.0020142735,0.34887952,0.38281712,0.5023187,0.52313113]],"activation":"σ","dense_2_b":[[0.2157577],[0.2698682],[-0.019235173],[-0.10241727],[-0.100874275],[0.06276079],[0.035551473],[-0.12188733],[-0.1428853],[-0.20376948],[-0.16719232],[0.18453568],[-0.34984714]]},{"dense_3_W":[[-0.15546247,0.4479613,0.29678583,-0.07754084,-0.34736145,0.23861347,0.62535715,-0.21091194,-0.4652678,0.41793606,-0.08758342,-0.032690294,0.18323281],[0.70506346,0.4563717,0.3900941,-0.7799406,-0.11504136,0.42975253,-0.052854165,-0.2509722,-0.19303511,0.4449753,-0.030831125,0.6785045,-0.16403332],[-0.6801335,-0.18466944,-0.18921193,0.6546068,0.3580845,-0.63010234,-0.6467311,-0.13526618,0.15568815,0.35201934,0.61143976,-0.62779784,0.7224356]],"activation":"identity","dense_3_b":[[-0.05987917],[-0.07057249],[0.046607416]]},{"dense_4_W":[[-0.41022143,-1.0402968,0.69203836]],"dense_4_b":[[0.06063404]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A050x00x00'.json b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A050x00x00'.json new file mode 100755 index 0000000000..e2f4fae4a9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017 b'39990-T6Z-A050x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.436153],[1.0504706],[0.3418279],[0.044102445],[1.0572962],[1.055557],[1.0525179],[1.0187471],[0.9908011],[0.95748615],[0.92414606],[0.043971427],[0.044015896],[0.044045128],[0.04389467],[0.04364494],[0.043296155],[0.042847775]],"model_test_loss":0.038220494985580444,"input_size":18,"current_date_and_time":"2023-08-06_21-51-36","input_mean":[[23.848715],[0.018280305],[0.012880258],[0.00016874999],[0.015305563],[0.01623863],[0.01724972],[0.02289785],[0.026459597],[0.03181198],[0.03424346],[0.00015466582],[0.00016650796],[0.00017154339],[0.00011696259],[5.7035195e-6],[-6.984356e-5],[-0.00021620118]],"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.03454988],[-4.80883],[-0.0003980326],[0.045162812],[2.7693284],[-0.12798071],[-5.1148744]],"dense_1_W":[[-0.021953972,-0.6909956,0.0017137715,0.075967655,0.19107713,-0.6735136,0.5936085,-0.059220172,-0.3937673,-0.08009787,0.19657694,-0.92206305,-0.40902787,0.80064285,0.36957166,0.41741195,-0.09949758,0.0328572],[-0.41551954,0.34888965,4.58918,-0.58479553,1.2140695,1.0730668,-0.80987257,1.7057942,1.8264681,0.5418806,-1.5800008,0.90441865,0.40738422,-0.9309175,-0.5846453,-1.1779749,-0.21697095,1.2636313],[-1.3167963,0.22196263,0.00087620446,0.11951662,0.23572233,0.98367923,-1.184788,-0.15921544,-0.17442104,-0.03715148,0.20377636,0.7771119,-0.31182548,-0.39967468,-0.30966496,0.10307021,-0.1549598,0.16605021],[0.016689815,0.62469226,5.6109867,0.25332543,0.017362839,0.066708766,-0.90982044,0.4760742,1.3472136,0.47811866,-1.0950692,0.7803302,0.23873158,-0.12769687,-1.0736917,-0.9507369,-0.3849879,0.9753211],[1.010975,0.48392332,2.3908904,-0.09404196,0.29996136,0.6191447,-0.33926985,0.94034505,0.6360225,0.15894395,-0.681273,0.48581445,-0.14646457,-0.5143217,-0.61096245,0.016869107,0.16057582,0.25225523],[1.2771941,-0.12252131,-0.0015340669,-0.18589194,-0.108365774,0.8503448,-0.28897393,-0.25453618,-0.109775856,-0.07973199,0.20226198,0.16910028,-0.13213143,-0.004498944,-0.079716355,0.31004015,0.1381526,-0.22449149],[-1.9269731,0.68068326,2.6605928,0.31519896,0.73409057,0.86063737,-1.4537466,1.1653538,0.65197283,0.33013284,-0.82076246,0.5808779,-0.16310015,-1.1616337,-0.56682473,-0.24635708,0.90833735,-0.1679019]],"activation":"σ"},{"dense_2_W":[[-0.19316064,0.20220636,0.1543245,0.56923085,-0.5256424,0.6484845,0.5277906],[0.58739203,0.02642884,-0.5941336,-0.06645716,-0.47577676,-0.6182639,0.22779459],[0.47835082,-0.13229278,-0.5625976,1.091255,1.0804834,1.1058354,0.12684019],[-1.1107054,-0.5791231,1.0741233,0.6597225,0.1555275,0.37428802,-0.07498665],[0.71273017,-0.030820772,-1.1579764,0.3962723,0.1522951,-0.62006533,-0.22865336],[-0.43192923,-1.3364362,0.49843183,1.4019581,1.2106336,0.93200284,-0.84781635],[0.33329925,-0.50564456,-0.025362682,0.08924529,-0.44918236,-0.18738124,-0.9237199],[0.74970734,0.2891013,-0.88326615,-0.37782103,-0.12960875,-0.46564922,0.253634],[-0.38317993,-0.049594685,0.62969357,-0.4982168,-0.8223472,-1.1548349,-0.9691452],[-0.509654,1.1230011,-0.095659316,-0.08150701,0.13044642,0.76143026,1.9938471],[-1.733176,0.57158726,0.43324548,-0.34991685,-0.22035135,0.76057756,-0.052056145],[0.975577,-0.4635662,-0.9864897,-0.0116866175,0.28406203,-0.43784142,0.101669684],[1.0218577,-0.020748869,-0.8567677,-0.03760161,-0.33631977,-0.11666814,-0.17231067]],"activation":"σ","dense_2_b":[[-0.34342867],[0.0511681],[0.14040104],[-0.18537521],[-0.013827617],[-0.11964682],[-0.0019164886],[0.05570073],[-0.22459657],[-0.46932775],[-0.59917027],[0.19691558],[0.12876545]]},{"dense_3_W":[[-0.20874692,-0.03773357,-0.22803174,0.17655598,-0.21538508,-0.22147778,-0.36320722,0.2394826,0.309721,-0.50003666,0.18370363,0.965146,0.6532681],[-0.68880624,0.089210816,-0.13193853,-0.09678856,0.26519805,0.21867493,0.03511478,0.21086489,0.13713072,-0.3630258,0.02014443,0.5465172,0.19587718],[0.2179609,-0.33041763,0.349815,0.50508064,-0.6743199,0.49183506,-0.36830014,-0.34079608,-0.62299275,0.13984378,0.3973101,-0.7238013,-0.31278804]],"activation":"identity","dense_3_b":[[0.019930799],[-0.07322117],[0.0665013]]},{"dense_4_W":[[-0.13234596,-0.36558858,1.5018625]],"dense_4_b":[[0.064201705]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017.json b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017.json new file mode 100755 index 0000000000..3e53360cd6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HONDA RIDGELINE 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.957924],[1.0602055],[0.3483377],[0.044007655],[1.0696881],[1.0669217],[1.0629013],[1.022558],[0.99117285],[0.95355713],[0.91828537],[0.043950602],[0.043960184],[0.043955244],[0.04370865],[0.043465454],[0.04305762],[0.042518806]],"model_test_loss":0.03983215242624283,"input_size":18,"current_date_and_time":"2023-08-06_20-30-54","input_mean":[[24.622238],[0.017521156],[0.00757826],[0.0011451022],[0.016594924],[0.017204277],[0.018039215],[0.021406805],[0.02439622],[0.026556514],[0.028528417],[0.001193815],[0.0011970581],[0.0011935198],[0.0011202878],[0.001060377],[0.00095698517],[0.0008617843]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.07002942],[-0.16705358],[-2.9611764],[0.34919006],[0.515888],[-3.0217357],[-0.3703743]],"dense_1_W":[[-0.001037722,-0.23034889,0.00070932484,0.19091949,-0.35902733,-0.8921682,0.30972338,0.3144616,0.13060336,-0.1961081,-0.1309547,-0.729507,-0.079179555,0.49697357,0.02997426,0.37342516,-0.24386461,0.3236473],[0.9159012,-0.010550688,-2.401509,0.30691516,0.05056717,0.5097978,-1.1722806,0.17247927,0.34559217,-0.24330676,0.04055541,0.46409106,0.20967084,-0.82562864,-0.4943086,0.2081027,0.2530364,-0.0926206],[-0.93078494,0.5642841,2.5035574,-0.35270843,0.18849362,0.87544584,-0.2044937,0.73466784,0.47539774,0.07997192,-0.76057374,0.3159093,0.40554965,-0.5378864,-0.09868344,-0.3483285,0.16861473,0.19001411],[-0.8801367,-0.10308599,-2.2299495,0.04202499,-0.05023124,0.13920471,-0.78326404,0.39430746,0.23543742,0.14010431,-0.23845911,0.2567459,0.059797786,-0.57988393,0.113685064,0.14517607,0.16730362,-0.17216507],[0.14910753,-0.31030202,-2.4019601,0.1968272,-0.40163112,-0.23238596,0.6703164,0.07859055,-0.14317967,0.07362763,-0.04258365,-0.509903,-0.38269565,0.7657585,0.030617407,-0.11210979,0.30991936,-0.27056235],[-0.9013445,-0.74709606,-2.4476326,0.38786903,-0.3051019,-0.585037,0.06283271,-0.3787836,-0.61694026,-0.032208323,0.70738953,-0.2658627,-0.35824144,0.5567474,-0.033071913,0.1493693,-0.014829384,-0.16828252],[0.06442954,-0.869912,-2.9056792,0.1365006,0.16463475,-0.5906101,1.1546344,-0.06482889,-0.37295368,-0.1456135,0.2937723,-0.5213806,-0.57213086,0.38927227,0.49697468,0.21409509,0.63319594,-0.7391959]],"activation":"σ"},{"dense_2_W":[[-0.17591965,-0.07106175,-0.40103337,0.56516284,-0.6760929,-0.15387549,-0.89492965],[-0.45764968,-1.0195202,-0.41464484,-0.2810938,-0.028325718,0.09300495,0.35360244],[0.8125133,-0.54840755,-0.6930447,-0.89210993,0.56695956,0.44670337,0.5310144],[-1.0358114,0.33042994,0.11012975,0.23487902,0.24800783,-0.4299027,-0.46129325],[1.2276291,-0.5162977,0.22191486,0.16638434,0.23429595,-0.22487517,0.28309682],[1.0107075,-1.0881076,-1.008768,-0.5629702,-0.05878989,0.7923787,0.7309502],[0.49559563,-0.35230458,-0.7740999,0.02204071,0.24508348,0.075914145,0.75374156],[-0.21838671,0.42116773,0.5945599,0.30151197,-0.24432571,-0.46020442,-0.33258623],[-0.021219064,-0.25157404,-0.35190338,0.0668151,-0.6102883,0.1603531,-0.79725957],[0.0735072,0.5327899,-0.13316682,0.18007801,-0.7896261,0.08766711,-0.64606833],[0.6770077,-0.8900657,-0.26981142,-0.38599125,0.09799069,0.5758287,0.66643196],[-0.82503897,0.3003343,0.15965503,0.37416932,-0.644764,0.043236665,0.19912353],[-0.9234739,0.57710344,-0.4265305,0.3661275,-0.030128404,-0.4210636,-0.7627061]],"activation":"σ","dense_2_b":[[0.07509254],[-0.45370674],[-0.08009313],[-0.21234833],[-0.08377176],[-0.056009393],[-0.10460085],[-0.003972127],[-0.21230274],[-0.0108628925],[-0.14868702],[0.04881384],[0.053917274]]},{"dense_3_W":[[-0.43450725,0.28928438,0.63958466,0.26900065,0.59471947,0.045950003,-0.08964677,0.14317968,-0.1560713,0.4362775,0.6118739,-0.48017085,-0.17556131],[0.7623459,-0.3990245,-0.53529125,0.28715876,-0.25771093,0.25057483,-0.4946012,0.14644647,-0.02983568,-0.065986775,-0.55813897,0.34047204,0.29583102],[-0.093450435,-0.42808297,0.068437345,-0.1521326,0.11618435,0.6433002,0.44079673,-0.6619756,-0.2237737,-0.65349114,-0.118622996,-0.61334574,-0.14610668]],"activation":"identity","dense_3_b":[[-0.06914952],[0.05192733],[-0.03913266]]},{"dense_4_W":[[-0.4807093,1.1989409,-1.1321285]],"dense_4_b":[[0.044341844]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA050 4CNDC106'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA050 4CNDC106'.json new file mode 100755 index 0000000000..810d5b1684 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA050 4CNDC106'.json @@ -0,0 +1 @@ +{"input_std":[[7.83634],[1.3114692],[0.61259305],[0.04069087],[1.3149719],[1.3138335],[1.3109658],[1.2883614],[1.2688274],[1.2462783],[1.2217312],[0.040413603],[0.040479485],[0.040545307],[0.040706556],[0.040736057],[0.04062868],[0.040408727]],"model_test_loss":0.004580862820148468,"input_size":18,"current_date_and_time":"2023-08-06_22-45-30","input_mean":[[20.29631],[-0.20027053],[0.014035869],[0.0016505374],[-0.20306659],[-0.20239536],[-0.20110086],[-0.1928657],[-0.18353474],[-0.171302],[-0.16113067],[0.0016583024],[0.0016512063],[0.0016456466],[0.001655548],[0.0016689815],[0.0017368481],[0.0018190349]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-4.326124],[0.2025785],[-0.098271556],[-3.9150567],[-0.034150004],[0.15999922],[0.15790012]],"dense_1_W":[[-1.299842,0.7154461,0.50361294,0.707755,-0.32854462,0.5378334,-0.2463958,0.55273217,-0.11124414,0.0818784,0.12354188,-0.2839917,-0.0078714555,-0.43367207,-0.06824078,-0.11825003,0.009444434,-0.050293162],[0.012949336,-0.29667792,0.020020511,0.20652233,0.07910441,-0.9396354,-0.07545959,0.2788547,-0.13547169,0.24944903,-0.3807775,-0.20812687,0.6074481,0.8033544,0.63277185,0.624231,0.2708898,-0.12817378],[0.007405703,0.3899947,0.011966838,-0.28451037,-0.41553152,0.5924629,-0.3221766,0.27565926,0.12245936,0.07997573,-0.18988231,0.25652406,0.0025251263,0.024572864,-0.1805577,-0.041730937,-0.09416745,0.114651345],[-1.314923,-0.8099221,-0.5021875,-0.65911645,0.3549381,-0.34351438,-0.018062847,-0.33712468,-0.083063975,0.118071266,-0.21253352,0.42918342,0.22217433,-0.006059381,0.07905543,0.071201935,0.08123039,0.03532524],[0.0059883036,0.633405,3.1777372,-0.35775912,-0.48683342,0.45391664,-0.12081466,-0.10396013,-0.058201157,0.02189144,-0.2272636,0.3546558,0.3708983,-0.53645164,0.015508216,0.0337646,-0.060697123,0.12773308],[0.016417185,-0.08919656,0.0043452727,1.0047843,-0.27470052,0.3708835,-0.5663267,-0.29918858,-0.1055758,-0.048055023,-0.0047955806,0.3848289,0.09456668,-0.1911486,0.38866982,0.40791333,0.34307832,-0.107040025],[0.012326768,-0.35066816,0.023062164,0.11834323,-0.49445873,-0.40111482,0.67107445,-0.17822216,0.012243669,-0.015511885,-0.075803205,-0.20342149,-0.04872656,0.1803967,0.067403704,-0.13901299,-0.016193623,0.10545096]],"activation":"σ"},{"dense_2_W":[[0.68674135,-0.6659134,0.5956395,0.12655623,-0.062817745,-0.12547888,-0.25941992],[-0.61886525,0.17155291,-0.22070692,0.7328443,-0.5755818,-0.34458303,-0.08562272],[0.20490937,0.091596,0.17527196,-0.46830234,0.45194998,0.086104736,0.026383685],[0.41048616,-0.27680868,0.8749343,-0.3792618,0.015523265,0.13319112,-0.39641076],[-0.21381493,0.5849179,-0.9504806,0.21972664,0.120829634,-0.519766,0.78654087],[-0.07081899,0.30812186,-0.042367518,0.22959028,-0.8620051,-0.47999159,-0.10604032],[0.48751,0.14033422,0.3791711,-0.9662732,0.42280945,0.42151052,-1.1193146],[-0.42666185,0.0900884,-0.7094497,0.8601399,-0.023163248,-0.6888624,0.7585005],[0.7715003,-0.54247683,0.024090352,0.24359225,0.11092992,-0.21225674,-0.42073125],[-0.74185073,-0.08530311,-0.13807726,-0.13045816,-0.23199996,-0.5793514,0.31687632],[-0.29189909,0.6799488,-0.71430886,0.044500347,0.031233395,-0.36464205,0.23336875],[0.0026518344,-0.35539848,-0.24951808,-0.15187661,0.06614357,-0.51367974,-0.53242975],[-0.083562754,-0.36494836,-0.62077016,-0.5867332,0.061696846,-0.87958634,0.12203935]],"activation":"σ","dense_2_b":[[-0.11182095],[0.019549185],[-0.06678602],[-0.016046902],[-0.09487844],[-0.09783255],[-0.21236032],[0.04908964],[-0.26582202],[-0.059639674],[-0.094594166],[-0.29934412],[-0.23795456]]},{"dense_3_W":[[-0.6317685,0.5268228,-0.15907462,-0.7917317,0.5163576,0.30266294,-0.2348481,0.6155206,-0.027430234,0.17797364,0.41818848,-0.036049694,-0.5178868],[-0.26872328,-0.39003056,-0.09896492,0.12855911,-0.55909926,-0.5083438,0.2223784,0.64059246,0.22532892,0.23159789,0.27662674,0.23292752,-0.30605522],[0.15627481,0.2843338,-0.08109648,-0.6148113,0.47045776,0.15507717,-0.22756813,0.17076828,-0.17303488,0.011014704,0.2036813,-0.018549033,0.5282868]],"activation":"identity","dense_3_b":[[-0.08994592],[0.018008003],[-0.09251441]]},{"dense_4_W":[[-0.9093955,0.009164481,-1.0056945]],"dense_4_b":[[0.08682442]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA050x00 4CNDC106'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA050x00 4CNDC106'.json new file mode 100755 index 0000000000..e975ca93ad --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA050x00 4CNDC106'.json @@ -0,0 +1 @@ +{"input_std":[[8.59357],[1.477006],[0.56332403],[0.0488563],[1.4668952],[1.4705441],[1.4723984],[1.4532107],[1.4244952],[1.3764879],[1.322398],[0.048695624],[0.048735626],[0.048768714],[0.048758227],[0.048573222],[0.048228193],[0.04771695]],"model_test_loss":0.006445982027798891,"input_size":18,"current_date_and_time":"2023-08-06_23-11-36","input_mean":[[22.237236],[6.9949005e-5],[-0.011986303],[-0.00972222],[0.0063137817],[0.0058564004],[0.0051534283],[0.004587619],[0.0048142886],[0.005183529],[0.008339459],[-0.009665056],[-0.0096769305],[-0.009684455],[-0.009677782],[-0.009679327],[-0.009684613],[-0.0095741255]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.855301],[0.052071594],[-0.9259835],[-0.39606982],[-0.28288805],[2.4262483],[-0.34318432]],"dense_1_W":[[-0.43493858,-0.70013213,-0.31350356,-0.43949002,-0.598497,-0.5485545,0.4025656,-0.5401992,-0.018980056,-0.061278734,0.1137699,-0.25585833,0.4615678,0.1875789,0.30483955,-0.031047022,0.28664255,-0.0021283238],[0.16496778,0.69868094,2.0469344,-0.17368059,-1.1800704,-0.13566142,-0.42462012,0.23021017,0.65531075,0.49585822,-0.36106113,0.7175682,0.0027661566,-0.519457,-0.08598626,-0.26602933,0.166157,0.115440816],[0.7728235,-0.4924479,2.2911828,0.36538774,0.028460652,-0.89249814,0.8510172,0.028672855,0.31544507,-0.12564549,0.436127,-0.38716024,-0.22180186,0.23269372,0.10323456,0.09477643,-0.39314544,0.08314657],[1.5947833,0.21068165,-1.9855356,-0.33621395,-0.21167557,0.5248549,0.27686295,-0.20009576,-0.08829141,-0.38474026,-0.2801312,0.15994297,-0.16367479,0.23527442,0.0995661,0.087180234,0.0139048565,-0.01788154],[-0.1763247,-0.7516114,0.018385636,0.02481674,-0.13665949,-1.128679,0.63042605,0.19469936,0.008045146,0.17501755,-0.26599288,-0.36662114,0.17498758,-0.06488771,0.494955,-0.1309667,0.06411596,-0.025877746],[0.41982695,-0.89662635,-0.3100757,-0.18364146,-0.72511435,-0.31305894,0.42398736,-0.40684158,-0.09220529,-0.14246567,0.17467463,-0.16741924,0.34426558,0.06386407,0.064436376,0.07904302,0.37082943,-0.05846411],[-1.2621454,-0.40426448,0.008373463,-0.5806397,-0.37494826,0.25897807,-0.87750936,-0.34095204,-0.12761776,-0.22150302,0.18955815,0.19867262,0.21504422,0.07421347,0.14425631,-0.102518186,0.16319299,0.14805317]],"activation":"σ"},{"dense_2_W":[[-0.3315551,0.6894821,-0.077518575,-0.22825818,-0.15571377,-0.9379825,0.15222666],[-0.40593046,-0.07850631,0.2123167,-0.6120017,-0.32046098,0.25036517,-0.5017452],[1.6233888,-0.81733793,0.32388014,-0.49089634,0.5228173,0.27702752,-0.019065294],[-0.81814194,0.2933751,-0.43884784,0.24256489,-0.89946127,0.005718796,0.1616723],[-0.646881,0.11765002,0.020421116,-0.06024994,-0.7751037,-0.69670886,0.40203825],[-0.4584075,-0.29050452,-0.53295654,0.4170185,-0.4519702,-0.2822419,-0.35187477],[-0.6656979,-0.33147767,0.07978853,0.13856018,-0.66579354,-0.27202693,-0.45372754],[0.45943737,-0.61478317,0.09913581,-0.2357037,0.39553985,0.45948792,-0.12240596],[0.043193635,-0.08017425,0.03667257,-0.087842114,-0.8149818,-0.1100522,-0.41438082],[-0.37532488,0.7357754,0.1027241,-0.89521164,-0.2897733,-1.1208502,0.6037124],[-0.39368445,0.0629941,0.02851393,-0.046042874,-0.1590253,-0.016730668,-0.53213465],[0.31148022,-0.68707335,-0.06828221,-0.11472954,0.2530224,0.66532046,-0.10488325],[1.1789107,0.08234099,0.20439823,-0.51836455,0.7248978,0.5591445,-0.13914037]],"activation":"σ","dense_2_b":[[-0.11449777],[-0.1390032],[-0.37206075],[-0.01236088],[-0.04907102],[-0.05842376],[-0.15911177],[-0.19211829],[-0.11261235],[-0.15294583],[-0.13028015],[0.081644855],[-0.13006176]]},{"dense_3_W":[[-0.115885824,-0.47170904,0.5831736,-0.082577854,-0.31832224,-0.33083022,-0.11571216,0.19875251,-0.476999,0.02469458,-0.26611003,0.35896003,0.20480263],[0.2875189,-0.26662576,-0.2587217,0.49244243,-0.21378644,0.59825927,-0.085313775,-0.8429834,-0.09471229,0.7827554,0.05744314,0.1804075,-0.5764435],[-0.6480157,-0.07066631,0.13443626,-0.6231428,-0.4225046,-0.06471173,-0.16550478,-0.12601337,-0.10136987,-0.46307796,-0.026577879,0.6142914,0.4441342]],"activation":"identity","dense_3_b":[[0.06527926],[-0.009909654],[0.06479232]]},{"dense_4_W":[[-0.2580477,0.33718058,-1.1184793]],"dense_4_b":[[-0.062109288]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA070 4CNDC106'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA070 4CNDC106'.json new file mode 100755 index 0000000000..e992f30792 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.06 56310AA070 4CNDC106'.json @@ -0,0 +1 @@ +{"input_std":[[7.869463],[0.5858021],[0.32688117],[0.02582744],[0.58848983],[0.58583117],[0.584275],[0.58906364],[0.59349614],[0.59887445],[0.610877],[0.025786323],[0.025794433],[0.025818141],[0.025857087],[0.02581527],[0.025688644],[0.025606968]],"model_test_loss":0.0014639738947153091,"input_size":18,"current_date_and_time":"2023-08-06_23-37-00","input_mean":[[26.716673],[-0.074982375],[0.043144263],[-0.0048145084],[-0.09424786],[-0.086935855],[-0.080987304],[-0.06796313],[-0.063149996],[-0.056549143],[-0.056314655],[-0.0047811475],[-0.0048097097],[-0.0048591294],[-0.0050809965],[-0.0051085255],[-0.005041358],[-0.0050054914]],"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.078991316],[0.3026068],[-0.25273243],[0.013439778],[0.37009302],[0.13664821],[-0.16456622]],"dense_1_W":[[-0.0030744555,-1.0954541,-0.03142538,-1.6753882,-0.12300866,0.79268783,-0.56524116,0.06749773,0.08401616,0.6239685,0.59483725,0.9908935,0.2398722,0.2553315,0.21238373,0.056749463,-0.23877978,0.30825418],[-0.8543499,0.46904665,0.6405476,0.6127007,0.2573736,0.18805248,0.36992317,-0.25051284,-0.08710556,-0.09765011,-0.5353191,0.2860888,-0.31374735,0.2946619,-0.7910126,-0.3691096,-0.79668784,-0.8112845],[0.004426532,-0.38074616,-2.8285646,0.8732835,0.24752633,-0.13101755,0.24333438,-0.19012967,-0.750537,0.4089185,0.44140428,-0.6625775,-0.22507015,-0.15794866,0.21373549,0.1863199,-0.16652858,-0.13657795],[-0.00061952876,0.20687495,-0.031221379,0.15000737,0.057221938,-0.414117,0.08427917,0.028406061,-0.3196398,-0.16508502,0.2385029,0.21718143,0.20419118,-0.23100859,-0.07353892,-0.30362707,-0.14411929,0.2562531],[0.75676596,0.7595603,0.5913131,1.2620265,0.06014515,-0.35853025,0.65820545,-0.26407003,0.24967487,-0.14225705,-0.6774673,-0.34284183,0.23795949,-0.122109324,-0.8345771,-0.65687364,-0.34826776,-0.9373063],[0.015336452,0.8013101,0.25717196,-0.2589111,-0.070080526,-0.015039927,-0.18020448,0.43581685,-0.23000908,-0.49613452,-0.006530597,0.5405513,0.14728923,0.15658382,-0.35035008,-0.57975715,-0.4771852,0.07149061],[-0.0016935252,0.004342065,0.007302239,0.34465888,-0.025569389,0.35721523,0.01775156,-0.2676134,0.13569762,0.04341658,0.00885,-0.121513374,-0.008711255,-0.3805635,0.1356443,0.13222197,-0.06938037,-0.13515687]],"activation":"σ"},{"dense_2_W":[[-0.35044748,0.75662565,0.15265507,0.7413438,-0.4943425,-0.7841103,-0.4461334],[0.5878455,-0.53052,0.46835116,-0.15082686,0.21561971,-0.30972666,0.28406903],[0.20365499,0.4938969,-0.37405172,0.36490002,0.35413012,-0.9276364,-1.271868],[0.15956812,-0.38227826,-0.34810027,-0.014073657,-0.17678988,-0.24762544,-0.8106593],[0.22776775,0.13553928,-0.2668433,-0.55416316,0.092818014,-0.066418946,0.45135185],[-0.379788,0.040577516,-0.18843734,0.21656789,0.1811508,-0.56766593,-0.465205],[-0.23584001,0.24342734,-0.08911726,0.93044406,0.47716722,-0.79287815,-0.7560821],[-0.08083705,0.20666538,0.38358647,0.16494158,0.17152569,-0.5743303,-0.84767425],[0.024201993,0.40508404,-0.452589,-0.14900035,-0.33940226,0.47047055,0.12949952],[0.0010686722,0.10515713,0.31118774,0.42902952,-0.27714232,-0.8179147,-0.23361693],[-0.20535007,-0.012914676,-0.24386998,-0.32201836,0.07650227,0.40637252,0.18290128],[0.46828738,0.15236787,-0.09334366,0.13351235,-0.347683,-0.4621099,0.34972924],[0.11132558,-0.08493177,0.22236344,-0.5575323,-0.43925527,0.57304513,0.71222407]],"activation":"σ","dense_2_b":[[-0.033294365],[-0.02055917],[-0.012818121],[-0.15711962],[-0.008688181],[0.054913495],[0.07755708],[-0.019581897],[-0.043765243],[-0.053016193],[-0.26712343],[-0.07999009],[-0.05613337]]},{"dense_3_W":[[0.696178,-0.5648311,0.6407045,0.19891022,-0.50313693,0.40486115,0.22351098,0.5828681,-0.601358,0.35544997,0.2282452,-0.27341864,-0.26009113],[-0.3853707,0.18478364,-0.5145561,0.32450193,0.5612143,-0.056345817,-0.28207055,-0.359446,0.550403,-0.423757,-0.0041745333,0.059421163,0.12554394],[-0.25317714,0.23387927,-0.35460812,0.067600355,-0.37119082,0.52048504,0.7020422,0.29556522,-0.58882946,0.039621986,-0.4467602,0.32936186,-0.4934978]],"activation":"identity","dense_3_b":[[-0.03463644],[0.016086485],[-0.025971314]]},{"dense_4_W":[[-0.73397875,0.10442852,-0.5272976]],"dense_4_b":[[0.033531036]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.07 56310AA050x00 4CNDC107'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.07 56310AA050x00 4CNDC107'.json new file mode 100755 index 0000000000..2124ae9ec3 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.07 56310AA050x00 4CNDC107'.json @@ -0,0 +1 @@ +{"input_std":[[6.8824434],[0.71507746],[0.40526694],[0.027533442],[0.70021],[0.70435107],[0.70917654],[0.72280884],[0.7279133],[0.72587556],[0.71601045],[0.027381662],[0.027431164],[0.027479855],[0.027565915],[0.027533367],[0.027572744],[0.027474292]],"model_test_loss":0.0026778955943882465,"input_size":18,"current_date_and_time":"2023-08-07_00-25-13","input_mean":[[23.297268],[-0.03233586],[0.0028342474],[-0.0057605663],[-0.032880228],[-0.032776646],[-0.032454334],[-0.032823607],[-0.034516074],[-0.031360645],[-0.0298374],[-0.0057719713],[-0.0057596182],[-0.005749741],[-0.005749389],[-0.005687085],[-0.005583106],[-0.005525541]],"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.5215416],[-0.57060343],[-0.10824382],[0.24978213],[1.0079527],[0.3802316],[0.889446]],"dense_1_W":[[-0.26616007,0.32819784,0.00067071285,-0.17974856,-0.27740893,0.317025,-0.06948472,-0.059453495,0.011850398,0.09067377,-0.06956775,-0.018317414,0.17877837,-0.18234687,0.09975633,-0.06088335,0.67421824,-0.501803],[-0.2902224,0.03435688,-0.0007335937,0.096210994,0.12977274,-0.5014846,0.12585396,0.19064707,-0.33947954,0.09289936,0.0021525132,-0.5650862,0.1586393,0.24856442,5.5656827e-5,-0.16046683,0.47567898,-0.26273644],[0.004148071,-0.20369966,0.0006762518,-0.12915482,0.31135672,-0.40276182,-0.023599507,-0.048985712,0.14804183,-0.27225778,0.13084674,-0.2682165,0.079972215,0.3869157,0.16938664,-0.06664921,0.18059294,-0.10463955],[-0.042720374,-0.44797078,0.106441885,-0.23366769,0.3137181,0.46343398,0.44943058,0.6756963,0.63177943,0.18888515,0.6256494,-0.64797264,-0.7504678,-0.021724926,-1.2981596,-0.49731153,-0.041930113,-0.5024712],[0.93396103,0.0685933,-2.0326483,-0.108520836,-0.112476364,-0.18603157,0.4607162,0.0659317,-0.21982923,0.030069323,-0.005501312,-0.19012018,0.0807506,-0.08516471,0.017757716,0.59362125,0.06101577,-0.30881],[-0.039777555,0.6639411,0.10703323,-0.17111959,0.74993485,0.4655031,-0.24367447,-0.091623016,0.21031639,0.5017018,0.9008939,-0.2138174,-1.124537,-0.841201,-0.6622513,-0.45340645,-0.6225992,-0.35385105],[0.652006,0.12817843,1.9792969,0.122777954,-0.5505552,0.32176024,-0.59021205,0.6974296,0.23109314,-0.08562345,-0.243364,0.04599025,0.48566473,-0.2583534,-0.23012485,-0.47488052,-0.08368516,0.34066808]],"activation":"σ"},{"dense_2_W":[[1.3105916,-0.9507534,0.12762353,-0.48912024,-0.82522184,-0.28377983,0.09846663],[0.6104658,-0.36417446,-1.0213474,-0.0030217022,-0.5582867,0.26822597,0.1030378],[-0.2444796,0.6386674,0.64500415,-0.32919264,-0.2632627,-0.2914869,-0.41501835],[-0.17211501,0.72615033,0.8057921,-0.3012537,-0.06894025,-0.6685643,0.12407082],[1.0545709,-0.7296641,-0.7836252,-0.5428908,0.31110647,0.5414368,0.78908324],[-1.0883812,0.45824885,0.30062124,0.6135413,-0.5220157,-0.2808084,-0.65922874],[-0.45479217,0.72624725,0.80973893,0.16011865,0.14399557,-0.057426546,0.4549376],[0.26526257,-0.9891332,-0.5146369,0.21206275,-0.1548442,-0.29759446,-0.63057125],[-0.89195234,0.7344573,0.13697046,0.1335858,-0.3111978,-0.10358053,-0.5817338],[0.35159203,-0.53573203,-0.37090668,-0.07636804,-0.7223272,0.34780052,0.25976828],[1.4417952,-0.9369937,-0.5165861,-0.5886849,0.27827945,-0.17774494,0.33352372],[-0.83197176,0.056716688,0.3176061,-0.0045141433,0.40866536,-0.42308146,0.32042512],[0.21989709,-0.18666251,-0.56908923,-0.5630903,-0.44349894,0.4591227,0.2543278]],"activation":"σ","dense_2_b":[[0.13017428],[-0.26941714],[-0.088276364],[-0.046999395],[0.4457564],[-0.06871929],[-0.10337065],[-0.22012532],[-0.08198058],[-0.033206128],[0.10756691],[-0.02121439],[-0.059810642]]},{"dense_3_W":[[-0.10640557,0.06776593,0.32191923,-0.28953195,0.026864873,0.2731794,0.16903114,0.44673413,0.48168063,-0.3712548,0.23447442,0.29575455,-0.1468495],[0.66085047,-0.27319327,0.2644553,-0.5318593,0.7203917,-0.34130642,-0.5875807,-0.46950552,-0.6058821,0.41351122,-0.006779633,-0.31155804,0.5298571],[-0.29553437,-0.58076066,0.52323264,0.45213857,-0.16277957,0.25945267,0.4144006,-0.66534394,0.22506356,-0.63662976,-0.7497482,0.07323068,0.024176065]],"activation":"identity","dense_3_b":[[-0.034318473],[-0.04050105],[0.079460956]]},{"dense_4_W":[[-0.04219099,0.38754243,-0.83605766]],"dense_4_b":[[-0.053366307]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.07 x00x00x00x00x00x00x00x00x00x00x00 4CNDC107'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.07 x00x00x00x00x00x00x00x00x00x00x00 4CNDC107'.json new file mode 100755 index 0000000000..2dbdb89f2e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021 b'xf1x00CN7 MDPS C 1.00 1.07 x00x00x00x00x00x00x00x00x00x00x00 4CNDC107'.json @@ -0,0 +1 @@ +{"input_std":[[7.3239555],[1.2216686],[0.56163263],[0.040356442],[1.2047082],[1.2095532],[1.2141893],[1.2243134],[1.227764],[1.2343445],[1.2368515],[0.040138606],[0.04019667],[0.040256687],[0.040477395],[0.040625844],[0.040658556],[0.04046674]],"model_test_loss":0.003521745325997472,"input_size":18,"current_date_and_time":"2023-08-07_00-49-58","input_mean":[[24.67693],[-0.04921823],[0.0012857419],[0.0007996762],[-0.04480579],[-0.04406795],[-0.043653794],[-0.043152645],[-0.0432289],[-0.046706084],[-0.050676387],[0.0009143127],[0.0009410887],[0.00097576616],[0.0010559426],[0.0011112413],[0.0010468352],[0.0010160342]],"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.49570504],[1.3210211],[2.6898615],[-0.02208882],[-0.09377371],[-2.7531927],[0.006006821]],"dense_1_W":[[0.15420651,0.23067516,0.11304303,0.013207053,-0.28895557,0.4683098,-0.20896511,0.015550693,0.122526914,-0.109381676,0.07471001,-0.13962431,0.2163086,0.028139457,-0.44415337,0.0053714034,0.042319868,0.042410903],[0.50394976,-0.23329197,-0.15899694,-0.12280355,0.14703913,-0.48161858,0.69567484,-0.34582955,-0.36040807,-0.004507536,0.14408033,0.1836344,0.11809705,0.32179466,-0.16438203,-0.31062344,0.1120704,0.18364586],[0.49820933,-0.26314422,-0.26272264,-0.22503936,-0.12580016,-0.47477996,0.33671036,-0.34708446,-0.31003487,0.25983158,-0.15030581,0.091946304,0.03323872,0.34110484,0.39555183,-0.2991158,-0.2320138,0.28421888],[0.01583395,1.1208205,3.865706,-0.44494992,-0.5262589,0.31796062,-0.81724226,0.43527883,0.4510549,-0.08255983,-0.6121285,0.9358581,-0.0058640586,-0.34025922,-0.21380498,-0.23998466,0.11081464,-0.20770882],[-0.0034587705,0.21727203,-0.007030041,0.011187133,0.24777392,0.7926248,-0.55883515,-0.28467444,-0.32108763,0.23630463,0.122614495,0.5811709,0.06195977,-0.31027994,-0.46347076,0.063689135,-0.34609768,0.3360888],[-0.5817377,-0.59925795,-0.2828089,0.12346245,-0.023504892,-0.43106267,0.37201306,-0.25494003,-0.04706249,-0.23423873,0.07503895,-0.08940586,-0.017763922,0.51661766,0.123237476,-0.40396547,-0.06934791,0.2436692],[-0.00840452,0.30712155,-0.2591553,-0.13306698,-0.66947764,0.38101527,-0.18025695,0.18304327,0.42003196,-0.19946226,-0.31748682,0.37292734,0.12961847,-0.26775375,0.4295266,-0.30892614,0.2832681,-0.0377284]],"activation":"σ"},{"dense_2_W":[[-0.7306887,-0.3954964,0.39146426,-0.29959947,-0.47128507,0.3531377,-0.334773],[-0.20252958,0.19992398,-0.33168688,-0.44316828,-0.403189,0.8955503,0.049495354],[-0.5052344,0.2230648,0.7528356,-0.11088759,-0.22496831,0.6596836,-0.5600461],[0.7656071,-0.48874223,-0.57206357,-0.23170787,-0.06306857,-0.43644294,0.34748504],[0.1213388,0.25739238,-0.41398072,0.06884506,0.82274115,-0.41439316,-0.13129346],[-0.66222745,-0.39265332,0.34125367,-0.5192327,-0.01774378,0.07983937,-0.5983968],[0.05495612,0.7774879,0.5478655,-0.4151472,-0.3105426,0.10111106,-0.31487244],[0.20206158,-0.57719696,-0.76630634,-0.8810195,-0.77503985,0.31274256,-0.30636895],[0.6253499,0.25690252,-0.74118155,0.46701622,0.42273006,-0.3957298,-0.3012005],[-0.020889444,0.19570331,0.09289772,0.13839301,-0.5962096,0.24448077,-0.4408785],[0.38479564,-0.4298671,-0.22112085,0.36361158,-0.18309206,-0.19321738,0.38277677],[0.6633294,-0.20508423,0.10870525,-0.35996673,0.8237321,-0.77270275,0.51027477],[-0.03977624,0.15964952,0.7697739,0.24770993,-0.8757424,0.37308407,-0.7050307]],"activation":"σ","dense_2_b":[[-0.092581324],[-0.1461753],[-0.054165266],[0.06442791],[-0.00013360326],[-0.11788689],[0.06482655],[-0.25213814],[-0.059510298],[-0.23111191],[-0.030306052],[-0.00994865],[-0.10923587]]},{"dense_3_W":[[0.26818967,-0.13706638,-0.016091619,0.60452354,0.23608918,-0.5172543,-0.46327448,0.18274918,0.674987,0.38215277,-0.19895244,0.44653496,-0.5346905],[-0.592465,-0.39396238,-0.6349639,0.1223753,0.6926395,-0.30194458,-0.54252756,-0.0013925297,0.51748616,-0.26460662,0.20391932,0.058503315,0.03102843],[0.5844198,0.15142864,0.5510742,-0.54181045,-0.11530869,-0.38452375,0.34452912,0.33701643,0.21574911,0.43324685,-0.42422894,-0.22249535,0.19921371]],"activation":"identity","dense_3_b":[[0.043458235],[0.064931095],[-0.06555825]]},{"dense_4_W":[[0.75090593,0.62048215,-0.7586382]],"dense_4_b":[[0.054481287]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021.json new file mode 100755 index 0000000000..bee1e8d939 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA 2021.json @@ -0,0 +1 @@ +{"input_std":[[8.738584],[1.5957829],[0.58238095],[0.048208784],[1.5838295],[1.5881729],[1.5908173],[1.5664002],[1.5340934],[1.4806168],[1.4221525],[0.047998115],[0.04803774],[0.048071872],[0.048102442],[0.04803064],[0.047811132],[0.04743304]],"model_test_loss":0.007402807008475065,"input_size":18,"current_date_and_time":"2023-08-06_22-19-42","input_mean":[[21.779322],[-0.078570016],[-0.0073580677],[-0.0065681813],[-0.07246284],[-0.0734754],[-0.07447408],[-0.07268334],[-0.069738925],[-0.06446174],[-0.057134904],[-0.0064781737],[-0.006475137],[-0.006476324],[-0.006474212],[-0.006491243],[-0.00650736],[-0.00642134]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.1603358],[-0.419876],[0.084331356],[-0.07068766],[2.0145605],[-0.63310754],[1.434537]],"dense_1_W":[[-0.31878927,-0.47954968,-0.260915,-0.23391017,-0.14123324,-0.16656223,0.34148905,-0.55040246,0.048909064,-0.084660634,-0.05452977,-0.14122179,0.19401318,0.18124454,0.29322624,-0.11721254,0.058719337,0.049679324],[1.2746987,0.53341556,-0.5038306,-0.3943573,-0.3552817,0.6985798,-0.7583908,-0.071790285,0.10988926,-0.1613498,-0.43469277,0.20283195,0.37326258,-0.2713744,0.053292856,0.12493837,0.112449214,0.071374826],[-0.005748887,0.4395075,-0.023206176,-0.00010381389,0.10724853,0.79803634,-0.10418732,-0.17200217,0.07352905,-0.04382284,0.12897137,0.27188876,-0.2986032,0.1732639,-0.43260622,-0.13877538,0.108885035,0.037624177],[-0.009819267,0.7978249,3.3524475,0.21963945,-1.1893661,0.12886666,-0.12307468,-0.0057551884,0.89947134,0.2433565,-0.7049134,0.41656977,0.5013669,-0.4488184,-0.19362147,-0.21371745,-0.12667105,-0.11616998],[0.5350432,-0.6518214,-0.29382524,-0.186406,-0.17762733,-0.1445377,0.13506992,-0.35136354,0.24111918,-0.36675584,0.021335155,-0.05516007,-0.15420103,0.4554361,0.4533603,-0.34406003,0.006251238,0.1428859],[1.1166015,-0.29759768,0.48270738,0.43025842,0.0056440467,-0.4213741,0.4217568,0.15726581,0.074272975,0.1225627,0.32488325,-0.059570342,-0.34078333,0.076991476,-0.26384223,-0.06351244,0.1692961,-0.21616662],[0.098687425,-0.3278237,-0.21179028,0.0031954458,-0.20943744,-0.13822405,0.548112,-0.34726304,-0.3400807,0.25883827,-0.17620128,-0.36422935,0.52832425,-0.1289231,-0.026027037,0.18089916,0.1012807,-0.07116273]],"activation":"σ"},{"dense_2_W":[[1.3021795,-0.4139669,-0.7120532,-0.74666166,-0.18984732,0.048739053,-0.25614926],[-0.45348325,-0.5127636,-0.35794353,0.021264847,-0.73585445,0.02490475,-0.37029886],[-1.0356512,0.21161588,0.15873429,0.17991234,-0.3031208,0.07505193,-0.33505473],[1.5017016,-0.31481206,-1.1198424,-0.40624765,-0.09357655,0.51827437,-0.055450503],[-0.6468184,0.053211562,-0.6933904,-0.13317326,-0.24886934,-0.3967814,-0.6371098],[-0.41236708,0.3045984,0.51569694,0.026683038,-0.66206634,0.038440548,-0.3386708],[-0.58338356,-0.09002029,-0.13582824,0.008655593,-0.69411683,-0.21923552,-0.3192624],[-0.6897999,0.12905283,0.67996913,0.1456075,0.25029323,-0.34134966,-0.6459057],[-0.252227,0.043475367,-0.9427369,-0.14302255,-0.10663869,0.31176025,-0.35857844],[0.22877508,-0.5189181,-0.41833526,0.20187113,-0.1781152,-0.16428699,-0.2800521],[-0.65191513,0.44252837,0.6581859,0.25468537,-0.9424999,-0.32678768,-0.8593621],[0.43401113,-0.24967693,-0.281952,-0.284015,0.7110927,0.27138582,0.9720163],[-1.1512148,-0.18058608,0.45996955,-0.5937282,0.31828657,0.15207982,-0.22012103]],"activation":"σ","dense_2_b":[[0.0048766164],[-0.056708604],[-0.123050824],[-0.07202907],[-0.25869218],[-0.20529492],[-0.091088444],[-0.091022156],[-0.32449347],[-0.17546864],[-0.0612454],[0.04344016],[-0.074389376]]},{"dense_3_W":[[0.25576973,-0.575117,-0.6076316,0.36512917,-0.41574427,-0.40301278,-0.4620185,-0.5097215,0.122016355,0.3936914,-0.041409556,-0.059126735,0.07365807],[0.29514056,-0.25677466,-0.18109803,-0.030853858,-0.029449929,-0.28013232,-0.025037538,-0.4706025,0.02876151,-0.48724273,-0.6757201,0.6601352,-0.20265144],[-0.7641006,0.21497111,-0.28698337,-0.379376,-0.31239873,-0.26711258,0.02512146,-0.31214246,0.077003516,-0.18367848,0.6396449,-0.61027414,0.5836878]],"activation":"identity","dense_3_b":[[0.047669664],[0.041923303],[-0.020977087]]},{"dense_4_W":[[-0.6845342,-1.0030532,0.7527504]],"dense_4_b":[[-0.03611581]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.02 56310BY050 4CNHC102'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.02 56310BY050 4CNHC102'.json new file mode 100755 index 0000000000..ca102af60e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.02 56310BY050 4CNHC102'.json @@ -0,0 +1 @@ +{"input_std":[[8.952709],[1.1003942],[0.47154436],[0.03557234],[1.0985221],[1.100109],[1.1007283],[1.0919963],[1.0812235],[1.0604604],[1.0346675],[0.035514425],[0.035544988],[0.035569686],[0.03549034],[0.035385482],[0.035147294],[0.034815073]],"model_test_loss":0.004957424011081457,"input_size":18,"current_date_and_time":"2023-08-07_01-40-53","input_mean":[[24.884089],[-0.016909879],[0.012826358],[-0.026510358],[-0.019373143],[-0.018562341],[-0.01784492],[-0.013357136],[-0.008858641],[-0.0046453234],[-0.0011935525],[-0.026596593],[-0.026568031],[-0.026541922],[-0.026392153],[-0.026309952],[-0.02631445],[-0.02632764]],"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.4760303],[-0.18308954],[-2.167727],[-0.417148],[-0.013595293],[2.8997235],[0.019984849]],"dense_1_W":[[2.096428,0.04293517,-0.055048794,-0.46484697,-0.35501856,0.42526284,-0.45293817,0.22161071,-0.635065,0.12139629,0.0034814414,0.5435328,0.020969981,-0.072267376,-0.08442676,-0.28275377,0.42481178,-0.0931807],[0.03543624,-0.6877385,-3.3156288,-0.10774069,0.90167654,-0.23635304,0.26507783,0.22863936,-0.51606226,-0.7042943,1.0019395,-0.19395043,0.54403013,-0.22361496,-0.0723612,0.024753883,0.21771601,-0.058525223],[-0.2608231,0.1017871,0.077472344,0.2912071,0.06507552,0.55804306,0.16650774,-0.20267099,0.31049293,0.34334332,-0.22618186,0.56663543,-0.40060464,-0.41012672,-0.46737882,0.41070658,-0.19341056,0.07924895],[-2.1272566,-0.26860842,-0.056874078,0.028759755,-0.117427334,0.6830661,-0.49746,-0.15804365,-0.597628,0.20925169,0.075665824,0.06611037,0.1801026,-0.04828015,-0.060966395,-0.237039,-0.07277843,0.1432378],[-0.012815778,-0.123973764,-0.14136693,0.3905719,0.11651388,0.14950705,0.09933541,-0.7976692,-0.060879573,0.2617282,0.19549161,-0.40608075,-0.12369088,0.50207996,-0.102547385,-0.44343522,0.08439864,0.0862764],[0.31134474,0.71243083,0.095208526,0.27090108,0.3364311,0.3387401,-0.6072888,0.26359472,0.51003397,-0.03195535,-0.1718143,0.122315615,0.08455601,-0.29650295,-0.45320752,0.15260614,-0.14674625,0.12800558],[-0.013968377,-0.26977414,0.052489035,-0.20114611,-0.16536346,-0.5467719,0.34399673,0.33305255,-0.11911299,-0.012991744,-0.2281494,-0.38340676,0.2801909,0.06072155,0.11670941,0.27231306,0.056253888,-0.20349257]],"activation":"σ"},{"dense_2_W":[[0.25041997,0.10206583,0.715677,0.18107271,-0.95661914,-0.17999575,-1.1160771],[0.18456584,0.117620505,0.6509535,0.23106942,-0.979118,0.9328957,-0.4987036],[1.0633037,-0.7188896,0.55112547,0.08787729,-0.6966662,1.2828107,-0.46829444],[0.26642972,-1.0333931,2.0355246,1.8633006,-1.7384061,-0.27828768,-1.8381956],[0.22363526,-0.08106195,0.26395926,-0.62673736,-0.12962806,-0.7491592,0.7798321],[-0.09318676,-0.4941464,-0.38996404,0.26097637,0.17723922,-0.5002643,0.8469415],[-0.32657585,0.23485117,-0.6398364,-0.10261886,0.57225746,-0.9840285,0.23459736],[-0.6653256,0.20312071,-0.052869216,-0.010713486,-0.021094337,-0.53480285,0.46862552],[0.19337021,0.5902509,-0.45771724,-0.40887538,0.65314317,0.2744537,0.36075133],[-0.09122067,-0.13116741,-0.72494227,-0.5763938,0.48517498,-0.15608339,0.7322048],[1.1417534,-0.78113425,0.78245425,0.040167056,-0.5890334,1.335385,-0.67876405],[-0.39274675,0.036710966,-0.059761982,-0.35286152,-0.02719329,-0.27672735,-0.50070906],[0.02223952,-0.45935592,0.25860146,-0.30429536,-0.16111197,-0.3231146,0.62293917]],"activation":"σ","dense_2_b":[[-0.04028944],[-0.028142564],[0.078946814],[-0.46476564],[-0.0035999476],[0.030332983],[-0.25515258],[-0.018076524],[-0.026729377],[0.031496003],[0.08078611],[-0.27224502],[-0.045907073]]},{"dense_3_W":[[0.4620854,-0.02418078,0.7011184,0.020806301,-0.27951247,-0.5371555,0.116979554,-0.30603725,-0.18933018,-0.40903252,0.6753726,0.568753,-0.4310432],[-0.54020286,-0.041412946,-0.24306548,-0.61936015,-0.05605574,0.15100999,-0.07693919,0.16520485,-0.05813703,0.47304806,-0.64346826,0.19271328,-0.038352612],[-0.33212858,-0.55580896,-0.67064255,-0.3418983,0.586469,0.21342045,0.7920437,0.2883454,0.4300167,0.6901999,0.34964025,0.1846654,0.04058318]],"activation":"identity","dense_3_b":[[-0.059763335],[0.079902194],[0.035987742]]},{"dense_4_W":[[0.39221895,-0.7381316,-0.6760117]],"dense_4_b":[[-0.046233788]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.03 56310BY050 4CNHC103'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.03 56310BY050 4CNHC103'.json new file mode 100755 index 0000000000..6494d76e93 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.03 56310BY050 4CNHC103'.json @@ -0,0 +1 @@ +{"input_std":[[6.5466146],[0.80981266],[0.4014232],[0.035715338],[0.808276],[0.80946004],[0.8099587],[0.8003049],[0.79292077],[0.7788614],[0.7569955],[0.035431836],[0.03552915],[0.035616748],[0.035825603],[0.035789166],[0.035539445],[0.035157643]],"model_test_loss":0.0024959088768810034,"input_size":18,"current_date_and_time":"2023-08-07_02-05-51","input_mean":[[20.843248],[-0.067527235],[0.00015006482],[-0.012940521],[-0.06860682],[-0.06791663],[-0.06730508],[-0.06773257],[-0.066599436],[-0.0642261],[-0.06246489],[-0.012981559],[-0.012971355],[-0.012961813],[-0.013026318],[-0.013139244],[-0.013358213],[-0.013696734]],"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.36959708],[-0.3927159],[0.015337716],[-2.6280007],[0.013323148],[-2.6784072],[0.012876663]],"dense_1_W":[[0.00441593,-0.28445426,0.12868425,-0.06594001,0.643517,-0.26863223,0.23516199,0.0933076,-0.54322356,-0.13129324,0.22534953,0.15129176,-0.13127483,0.19987836,-0.39554223,-0.0589629,-0.49924454,-0.28881076],[0.39027417,0.15401302,-0.056920696,-0.47890553,-0.3300009,-0.48306167,0.5828366,-0.065358765,0.11067453,-0.19332197,0.08158799,-0.13183025,0.08212273,0.34178394,0.30528525,-0.046424016,0.45213524,0.049064413],[-0.0018742161,1.0021389,3.8293767,-0.20225114,-0.7356092,0.38675764,-0.6186065,0.1530118,-0.19326465,-0.16745023,-0.09147689,0.3500271,0.28329384,-0.3719793,-0.11645031,0.012525024,-0.15232189,0.16442363],[-0.37709048,-0.18989839,-0.39395905,0.45258853,-0.27445865,-1.0695606,0.52972853,-0.24389778,0.18883058,-0.3289555,0.026898181,-0.4512817,-0.012726739,0.24032715,0.039549112,-0.15741278,0.23836505,-0.22582999],[0.0026869208,0.5816565,0.0047081015,0.33716485,-0.43749458,-0.90179884,0.090872325,-0.18876752,0.28434423,0.30354127,-0.45683673,-0.0043129507,-0.15474738,-0.12864216,0.33334208,-0.37975344,-0.17868224,0.17245947],[-0.37269658,0.056210883,0.39117196,-0.20178121,0.48395464,0.6668031,-0.19134971,0.05924893,0.20031299,-0.051123295,0.11479842,0.3327035,0.406696,-0.60037625,-0.55025846,0.3823001,0.067088164,0.03777696],[0.28842884,0.27748382,0.055223227,0.24982269,-0.25035748,0.6999531,-0.5086199,-0.16066559,0.18782836,-0.009960592,-0.09571262,0.5652131,-0.20471764,-0.25930697,-0.46783432,-0.36040586,-0.04924343,-0.036189865]],"activation":"σ"},{"dense_2_W":[[0.4325747,0.05352207,-0.019636882,0.23707733,0.51061547,-0.4637862,-0.40100852],[0.20493814,-0.20983218,-0.4001346,-0.008143373,0.2476857,-0.037123583,-0.67152816],[-0.38300198,-0.5133637,0.054119077,-0.6279624,-0.49244288,0.6256476,0.7907053],[0.19233866,0.08520638,0.08706983,-1.0209559,-0.61933124,0.5403933,0.96377575],[-0.5673173,-0.8495875,0.35421842,-0.16951926,-0.36651966,0.16976853,0.0146132065],[-0.11585242,0.6740597,-0.41580456,-0.12795658,-0.036778353,-0.3175067,0.04743779],[-0.07734896,-0.36116868,-0.13891894,0.13353403,-0.17158407,0.18492623,0.215829],[-0.079607025,-0.0628624,-0.40307927,-0.6614631,0.25177357,0.37012863,-0.057130966],[-0.39253744,-0.11905358,-0.0998102,0.14498588,0.031866945,0.4783852,-0.27589342],[-0.46258968,-0.5466553,0.5868711,-0.5633951,-0.14532568,0.22600377,1.0318995],[0.11289376,-0.40194705,0.4572626,0.7012955,-0.27434063,-0.30249357,0.39138433],[0.0068481546,0.33485183,-0.21508186,-0.07030695,-0.10074153,-0.07031553,0.2075642],[0.19613013,0.27113703,-0.25391266,-0.21612066,0.19921905,-0.14536792,-0.3427696]],"activation":"σ","dense_2_b":[[-0.012001398],[-0.02212474],[0.14096059],[0.041697618],[-0.008908936],[0.047332846],[-0.009194286],[-0.039932724],[-0.043813754],[0.036821954],[-0.0014258353],[0.00875199],[0.015467969]]},{"dense_3_W":[[0.32098088,-0.32571092,-0.6606648,-0.15589207,-0.29422677,-0.11235969,0.27968746,-0.4088068,0.46579373,-0.32524452,-0.25602353,-0.074144796,0.4581445],[0.2711465,0.4530056,0.31585717,0.165996,0.09512367,0.54065865,-0.5712976,0.093997784,0.22095615,-0.3393496,0.04974402,0.16312775,0.20385568],[0.6250006,0.51413673,-0.7039048,-0.40498862,-0.30975106,0.5319801,-0.030333402,-0.34835565,-0.48519892,-0.087083556,0.5168309,0.3949118,0.14679015]],"activation":"identity","dense_3_b":[[0.029179294],[2.9370978e-5],[0.024199445]]},{"dense_4_W":[[-0.8672829,-0.09036683,-0.9275841]],"dense_4_b":[[-0.027475327]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.03 56310BY050x00 4CNHC103'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.03 56310BY050x00 4CNHC103'.json new file mode 100755 index 0000000000..d347614e8c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.03 56310BY050x00 4CNHC103'.json @@ -0,0 +1 @@ +{"input_std":[[10.490675],[1.1291032],[0.58252037],[0.039405],[1.1280589],[1.1279522],[1.1269643],[1.1124369],[1.1045281],[1.0925866],[1.0763438],[0.039314747],[0.039330542],[0.039342582],[0.039305937],[0.039206024],[0.038994968],[0.03869199]],"model_test_loss":0.005967735778540373,"input_size":18,"current_date_and_time":"2023-08-07_02-32-21","input_mean":[[22.534412],[-0.032263618],[-0.0037575949],[-0.0020172608],[-0.032352883],[-0.032752782],[-0.032883693],[-0.034339994],[-0.03540198],[-0.038307104],[-0.037811134],[-0.0020329459],[-0.0019997917],[-0.0019778514],[-0.0019503924],[-0.001969454],[-0.0020386311],[-0.0020115753]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.476557],[-0.68177766],[-1.4334949],[0.9746544],[-1.3537669],[-0.16913444],[1.5312378]],"dense_1_W":[[-1.4674118,-0.24609241,-0.017173812,-0.1921773,-0.33003026,-0.7032546,0.8222835,0.45996,0.033816524,0.1080052,-0.2516134,0.101496324,0.052959982,0.008949171,0.2056011,-0.13730909,-0.070785694,0.091235936],[-0.15725255,-1.8879077,-3.1574435,-0.026291944,0.91971624,0.7033072,0.87052536,0.5834137,-1.1149441,-1.1206936,0.80906874,-0.29204804,-0.66741747,0.41703406,0.6053606,-0.0012035158,0.24638794,-0.3302526],[-0.6278058,-0.38527206,-0.31773865,-0.08035399,0.022208743,-1.0113361,0.106477626,-0.0055144937,-0.11381203,0.112506695,-0.0055704513,0.38441408,-0.06360585,-0.008369453,0.008495975,-0.45555764,0.25611266,0.114160754],[1.2448323,0.124219336,0.3851474,0.1306329,0.17512998,0.5563543,0.33161706,0.5850413,-0.12428443,-0.16596517,0.01010055,-0.5043342,0.37030837,0.16615497,-0.36301187,0.0164275,0.034172643,-0.044182498],[-1.5838906,0.20879757,-0.015540314,-0.18438894,-0.05623706,-0.16800252,0.08689027,-0.24974507,0.009985618,-0.004396259,0.034236554,0.11091792,0.11175782,-0.080768205,-0.24925712,0.37246683,-0.022103941,-0.048722908],[0.056122262,0.2864052,-0.05922396,-0.15394859,0.2536335,-0.6977994,0.12732469,-0.56870854,0.11164165,-0.16432123,0.20823452,-0.35387105,0.1299614,0.02070388,0.43777424,0.29617321,-0.0202072,-0.2295211],[0.29040423,-0.44746503,-0.37836528,-0.5874443,-0.40612307,-0.81674665,0.2653388,-0.074799396,-0.13337858,0.16270955,-0.046827342,0.16102041,-0.042110663,0.68649536,0.16037555,-0.6455673,0.2862756,0.15030107]],"activation":"σ"},{"dense_2_W":[[0.88346493,-0.88215524,-0.714372,-1.4153144,1.6741431,-0.96062607,-2.4220207],[-1.0811888,0.7783481,-0.61303014,0.08742927,-0.32858953,-1.0313102,-0.14017701],[-0.83909744,-0.51418436,-0.34867173,-0.40438738,0.38744128,-0.9341407,0.5689156],[1.2234789,0.4505039,0.883525,-0.9082529,-0.45139286,-0.037596144,-0.4650941],[0.28187194,-0.01952515,0.6481759,0.5426486,-0.35617682,0.15431538,0.9969678],[0.9743034,-0.5146453,0.46463448,0.4160945,0.36689076,1.08357,0.15814787],[0.98991585,-2.347642,0.09153862,-1.1622584,0.11513134,-0.03356802,-0.5818536],[0.22896764,0.23242263,0.2844799,0.4641689,-0.3848538,0.4694864,0.82048494],[0.5654004,-0.40305212,0.9788426,-0.47530088,0.11026323,0.9248025,-0.09487986],[-0.66444695,0.07370127,-0.9244193,0.23670202,0.02346553,-0.8573719,0.1414936],[-1.7262199,0.06688502,-0.24180819,-0.55838716,-0.031299785,-1.0274018,0.274008],[0.29235423,-0.4138396,-0.8648773,-1.1904085,1.2492888,-0.97297734,-1.8818952],[-0.6758243,0.089520454,-1.1900347,-1.3192135,0.22304952,-0.4525044,-0.4759342]],"activation":"σ","dense_2_b":[[-0.028017305],[-0.061963774],[0.20414406],[-0.6334071],[-0.03253269],[-0.25242165],[-0.16586097],[-0.124249145],[-0.3108962],[0.24476607],[0.23445076],[-0.09690479],[0.23614454]]},{"dense_3_W":[[0.012833234,-0.3479158,-0.5259433,0.17710736,0.40674126,0.61857796,-0.07993461,0.4996034,0.12137744,-0.7061775,-0.7857778,-0.22047266,-0.6328669],[1.1566063,0.04082107,0.8082871,-0.7832778,-0.23352258,-0.6495986,0.6835129,-0.091181114,-0.3048599,0.7264398,0.43395072,0.89236176,0.31225243],[-0.80061877,-0.6287943,-0.4909107,0.12166274,0.54646,0.12600482,-0.28478548,0.48107162,0.044651717,-0.007296607,-0.81748486,-0.8812352,-0.6868977]],"activation":"identity","dense_3_b":[[-0.050449766],[-0.01878802],[0.12566388]]},{"dense_4_W":[[-0.20012462,0.9402982,-0.45523268]],"dense_4_b":[[-0.0072831307]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.04 56310BY050x00 4CNHC104'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.04 56310BY050x00 4CNHC104'.json new file mode 100755 index 0000000000..118eb1cf3e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021 b'xf1x00CN7 MDPS C 1.00 1.04 56310BY050x00 4CNHC104'.json @@ -0,0 +1 @@ +{"input_std":[[7.336879],[1.3154227],[0.59994406],[0.036185816],[1.3162037],[1.3162056],[1.3148344],[1.2966222],[1.275338],[1.2474067],[1.2149154],[0.036175884],[0.036184948],[0.036186848],[0.03609507],[0.03606698],[0.03593411],[0.03568829]],"model_test_loss":0.004663573112338781,"input_size":18,"current_date_and_time":"2023-08-07_02-57-17","input_mean":[[20.966389],[-0.1988315],[0.007915254],[-0.0028921724],[-0.19796984],[-0.19835053],[-0.19851768],[-0.19411317],[-0.18918088],[-0.1827134],[-0.17358756],[-0.0029098932],[-0.0029171635],[-0.0029238905],[-0.0029175677],[-0.0029673595],[-0.0030402362],[-0.0030292866]],"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.50860286],[-1.1555929],[0.23071012],[-0.1957657],[-1.2921786],[-0.5563927],[0.019920422]],"dense_1_W":[[0.39047584,-0.47947386,-0.005918953,0.2007276,0.044099685,0.15533815,-0.040589128,-0.2630327,0.0071245213,0.061105832,0.04366077,0.1350462,-0.1124703,0.12785473,-0.04178164,-0.44747785,0.0028341468,0.23350663],[-0.34462857,-0.5556194,0.0146421995,0.0050324253,0.1526045,-0.52050006,0.40116233,-0.29075962,0.1761436,-0.34321496,0.18081273,-0.052150007,-0.34601086,0.51632524,0.06400605,0.0061850185,-0.32717043,0.20724139],[0.029175306,0.7315644,4.721232,0.08325713,-0.48493296,-0.24665754,-0.1523269,-0.005119804,0.22956513,0.3020592,-0.4038248,0.6253751,0.25363073,-0.5005454,-0.31425786,0.23239496,-0.31191078,0.047809538],[-0.010508659,0.15341635,0.43864673,-0.1464096,0.18380292,-0.08827558,-0.6522776,0.029167967,0.5192565,0.123401366,-0.32648972,0.15496483,0.31653887,-0.5059119,0.057938904,-0.04915116,0.21404971,-0.12505578],[-0.3848665,0.5562081,-0.031109845,-0.091075,0.122943915,0.46815628,-0.37999207,-0.12903124,0.1892725,0.27956063,-0.132565,0.096547544,-0.34272483,0.12283442,0.06688585,0.3923325,-0.27006665,-0.034028348],[0.08722563,-0.2605648,-0.0077059204,0.053181015,0.0549966,-0.57108873,0.17384295,0.23858054,-0.06958964,0.34006983,-0.2719506,-0.047910836,-0.11265416,-0.12560493,0.27393594,0.2091702,-0.055573467,-0.10821209],[-0.06763393,-0.37754446,-0.009697453,0.08860953,0.28071558,-0.67214215,0.34979525,0.117161624,0.16652317,0.029180126,-0.10343166,-0.21206415,-0.08761407,0.08291694,-0.07274916,0.22889741,0.40336818,-0.373356]],"activation":"σ"},{"dense_2_W":[[0.055040672,0.5993177,-0.22644603,-0.8265452,-0.0038502845,0.44068658,-0.03040217],[-0.70651376,-0.3338041,0.42435834,-0.18500227,0.81759316,-0.5486541,-1.110574],[-0.5266372,-0.7444737,-0.3628261,0.5852146,0.95713323,-0.26699162,-0.8405533],[-0.28034517,-0.2479486,0.64379674,0.7883626,-0.12794921,-0.8036546,-0.1523485],[-1.3158185,0.12383007,0.49551678,0.13944684,0.43195948,-0.86401516,-1.1620226],[-0.077836744,0.46037325,-0.11932971,-0.4114782,-0.32642493,0.08826335,0.3426612],[-0.869882,0.32593668,-0.9218525,-0.37414593,-0.120396055,0.61139256,-0.12451638],[0.018881803,-0.6284976,-0.21616842,-0.26261458,0.17759265,-0.4875057,-0.7788972],[0.23179096,0.5346621,0.14235991,-0.16656797,-0.6345287,0.6345263,0.6490954],[0.42456567,0.16523154,0.15447061,-0.33069327,-0.7372917,0.64228994,0.3790743],[0.3378659,0.57663065,-0.011852186,-0.34422934,-0.8071215,0.16176973,0.9347968],[0.8090811,-1.1519405,1.155839,0.8935971,-0.04736475,-0.6883236,-0.16425224],[0.5435343,-1.5603184,-1.8775592,0.040111613,-1.4295818,-0.6792629,-0.17226006]],"activation":"σ","dense_2_b":[[-0.16689628],[-0.2849929],[0.050556302],[0.0045983535],[-0.21896972],[-0.038251407],[-0.4631888],[-0.45150843],[-0.2340387],[-0.040570892],[0.017508559],[0.33123934],[0.029258676]]},{"dense_3_W":[[-0.48214975,0.61397964,-0.3610514,0.635723,0.8418613,-0.08425857,-0.6093145,0.36558312,0.05758606,-0.27470613,-0.981727,0.8191294,0.86783963],[0.6742536,-0.09863488,-0.8090672,-0.087475404,-0.34558988,0.46608582,0.0860837,-0.19014728,0.6121176,0.5906499,0.030970646,-0.84944576,-0.10872761],[0.34069678,0.72464764,0.53571326,0.3477245,0.24464273,-0.55484986,0.52443147,-0.5883181,-0.4959677,-0.40765953,-0.7288586,0.7889583,0.81876206]],"activation":"identity","dense_3_b":[[-0.13179861],[0.03719345],[-0.098335996]]},{"dense_4_W":[[0.6273808,-0.39738363,0.47976896]],"dense_4_b":[[-0.057788193]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021.json b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021.json new file mode 100755 index 0000000000..10e66ce042 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI ELANTRA HYBRID 2021.json @@ -0,0 +1 @@ +{"input_std":[[9.910586],[1.4123459],[0.59487087],[0.03911551],[1.409979],[1.4115622],[1.411603],[1.3893355],[1.3640546],[1.3232217],[1.276401],[0.0390601],[0.039079115],[0.03908953],[0.039015334],[0.038927097],[0.038650174],[0.03832818]],"model_test_loss":0.007736066821962595,"input_size":18,"current_date_and_time":"2023-08-07_01-15-55","input_mean":[[22.795855],[-0.08798489],[0.01143446],[-0.009032234],[-0.09088829],[-0.090495676],[-0.09043885],[-0.08431701],[-0.0800931],[-0.07318552],[-0.065705255],[-0.009123672],[-0.009095005],[-0.009068311],[-0.008966204],[-0.008944961],[-0.008930321],[-0.008916563]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.1817923],[-3.718042],[-0.17253013],[1.0498631],[-2.7819123],[-0.40877423],[-0.1835958]],"dense_1_W":[[-0.051857583,1.3051457,3.4929137,-0.65374345,-1.1122645,-0.24794711,-0.3011514,-0.08444903,0.8605938,0.7186169,-0.99715984,0.579954,0.45131174,-0.5857832,-0.25104427,0.36404672,0.08432625,-0.118304946],[-1.1977811,-0.475098,-0.32292378,-0.4435726,-0.21691985,-0.45479798,0.93214303,-0.6325391,-0.057171293,-0.48693532,-0.058870036,0.043592565,0.29524007,0.19475447,-0.16399422,0.17714727,0.02705515,0.09614742],[0.0504194,0.37990266,0.039530136,0.04288842,0.036023762,0.50610423,-0.04245624,-0.08900527,-0.18667571,-0.136124,0.24658443,0.4461418,-0.21306992,-0.1905496,-0.24427558,0.019992698,-0.0458097,0.082212],[1.8970265,0.3291775,-0.45923525,-0.42205855,-0.4413092,0.022868842,-0.3697922,-0.2818066,-0.4076601,-0.3907717,-0.20571287,0.6031218,-0.23714252,-0.16817166,0.07743641,0.021997932,0.611759,-0.23154868],[-0.9974602,0.15397596,0.22610018,0.036102634,0.06823634,0.6489421,-0.41508022,0.35325828,-0.10202731,0.1711457,0.28493625,0.035079315,-0.4149946,0.08604628,0.117554076,0.10761524,0.08686444,-0.2359245],[-0.28764305,0.34052572,0.18389913,-0.017938213,-0.2068081,0.2519639,-0.7214537,0.29472184,0.27933893,0.27484724,-0.15843095,-0.037846185,0.316401,-0.09005458,-0.14835708,-0.19075473,-0.03951283,0.114958726],[-0.052516285,-0.16471781,0.17191207,-0.23444073,-0.022119049,-0.24730825,0.75023305,-0.40318617,-0.34178376,0.12554757,0.39539844,0.059354424,-0.44725272,0.4979164,0.060783666,-0.0009443115,0.11399086,-0.14107631]],"activation":"σ"},{"dense_2_W":[[0.15574715,0.106084,0.6234715,0.48498833,0.24288625,0.6844518,-0.61408937],[0.5661129,-0.5984536,0.79835355,0.3082054,-0.060715023,0.26763362,-0.016118767],[0.14648265,0.21900931,-1.1337527,0.16373587,-0.9757596,0.041679647,0.65339375],[-0.11193495,0.15425135,-0.22649455,0.4248423,-0.7341563,-0.15863545,0.44211566],[0.19026476,0.5881703,-1.0570571,0.34021673,-1.0282404,-0.26504597,0.28280511],[-0.8895008,0.8121495,-0.5693253,-0.77341056,0.33465576,-0.49232218,-0.11758821],[0.9326459,-0.36728933,0.24325472,1.0141891,0.16826893,0.2829455,-0.06759766],[-0.16648382,-0.44048628,0.39915726,0.06806857,1.0963099,-0.03239437,-0.6205627],[0.2911811,0.57449996,-0.9605739,0.043008372,-0.73384374,-0.6097065,0.45541903],[0.31353498,-0.08516989,0.8531249,0.013826798,0.6559815,0.18347614,-0.7929507],[-0.016170498,-0.18118915,-0.86683124,-0.34802145,-0.47758147,0.13393015,-0.17496912],[0.091279745,0.35503078,-1.1297911,0.2600009,-0.10615289,-0.7520532,0.5357286],[-1.2284657,0.86050045,-0.034789667,-1.018808,-0.06296706,-0.028193004,-0.4022851]],"activation":"σ","dense_2_b":[[-0.05504892],[0.01253799],[-0.062120188],[-0.051010966],[-0.08326587],[-0.2394042],[0.028907817],[-0.080568254],[0.03604939],[-0.12410697],[-0.01955361],[-0.051553864],[-0.18583551]]},{"dense_3_W":[[0.63645065,0.63501835,-0.66807485,-0.52668273,-0.28929064,-0.23005038,0.43932953,0.121157095,-0.7683699,0.4412728,-0.32547268,-0.71282554,-0.4370708],[-0.30129626,0.3909303,0.29454166,-0.1705362,0.48066851,0.06491059,-0.090611994,-0.08033778,0.3795498,-0.5508733,-0.32967407,0.38930234,0.2549319],[0.005347131,-0.5191341,-0.26486373,0.12736864,0.5334262,0.5237369,0.38844875,0.003590752,-0.26281914,0.01214623,-0.24618849,-0.056392476,-0.0030399126]],"activation":"identity","dense_3_b":[[0.015747098],[-0.13919984],[-0.0075076534]]},{"dense_4_W":[[1.3023344,-0.041308355,-0.00318671]],"dense_4_b":[[0.015396652]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI GENESIS 2015-2016.json b/selfdrive/car/torque_data/lat_models/HYUNDAI GENESIS 2015-2016.json new file mode 100755 index 0000000000..25ea1b538b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI GENESIS 2015-2016.json @@ -0,0 +1 @@ +{"input_std":[[6.5459266],[1.3150389],[0.55143183],[0.0433077],[1.3103489],[1.3122923],[1.3130105],[1.2928256],[1.2722898],[1.2458807],[1.2160609],[0.043061666],[0.04310888],[0.043158278],[0.04318699],[0.043118294],[0.042912837],[0.042521223]],"model_test_loss":0.008513328619301319,"input_size":18,"current_date_and_time":"2023-08-07_03-22-20","input_mean":[[28.507357],[0.10861685],[-0.013601736],[-0.0064216373],[0.110937536],[0.10975514],[0.10922218],[0.10294279],[0.09506291],[0.08270148],[0.068715945],[-0.006518178],[-0.006483864],[-0.0064613186],[-0.0065263556],[-0.0066083767],[-0.0067466046],[-0.006989514]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.09213746],[0.07837435],[-0.127023],[-3.701971],[0.02127427],[-1.6431203],[2.2172556]],"dense_1_W":[[-0.015300604,0.5825342,-0.05051114,-0.18122214,0.07876552,0.9315104,-0.6162402,0.016129851,0.010469424,-0.020838048,0.1523773,0.15082102,0.090840556,-0.28110996,-0.1849562,0.15245719,0.22167133,-0.14279774],[0.02588672,0.32077435,-0.006722575,-0.011324345,-0.5431526,0.77720726,-0.32035637,-0.036528517,0.21234833,0.12834615,-0.15494944,0.5575763,-0.31280997,0.0010270807,0.14701857,-0.5796583,-0.3692745,0.5129307],[-0.0071143424,0.15858999,0.05704565,0.18143037,0.10665202,0.79463303,-1.0030777,0.2742014,0.20928839,-0.016834116,-0.14212018,0.18155766,0.4066399,-0.36911637,-0.50523275,-0.22205615,0.03395741,0.21754928],[-0.91471785,-0.0921693,-0.48348656,-0.14060836,0.024012497,-0.018223943,-0.12564234,-0.15323682,-0.3923083,-0.38660574,-0.31491503,0.011104942,-0.050269924,-0.032277748,-0.20858657,-0.018367982,0.19149122,0.10155454],[0.002645861,-0.8126742,-2.6549594,0.3429386,-0.20882957,-0.07800046,1.2651403,0.20753327,-0.7863295,-0.38006702,0.40243247,-0.76908433,-0.23738272,0.14581157,-0.38623288,0.39540884,0.04323188,0.56106085],[-0.9343576,-0.3586926,0.48885745,-0.13841353,0.17987157,0.061989535,0.46451867,0.29794976,-0.008585158,0.35067263,0.529655,0.51325566,-0.010691093,0.24579975,-0.5215634,0.0016024356,0.093200974,-0.031658597],[0.8293412,-0.20795242,-0.4017055,-0.533866,0.06481363,-0.26879504,0.3793856,-0.471539,0.023038805,-0.48921797,-0.22237803,-0.25630578,-0.039906733,0.666029,-0.0033022463,-0.31751958,0.26048532,0.09580422]],"activation":"σ"},{"dense_2_W":[[-1.0194138,-0.4770013,-1.6248175,1.692745,0.9337828,0.8437085,-0.54136294],[-0.52307904,-0.3975833,-0.6281236,0.08257637,0.27855587,0.43421826,0.45445123],[-0.20069543,-0.41561922,-0.44643855,0.07080084,-0.5047794,0.030606043,0.30134434],[-0.47260144,-0.7754414,-0.77397937,0.25201085,-0.07254463,0.658033,0.5073921],[0.3583858,0.10549722,0.5157753,-0.14047585,-0.617101,0.01266099,-0.6511524],[-0.9189057,-1.0387809,-0.5919117,0.46444207,0.1477566,0.459492,-0.2141334],[0.6823633,0.32230988,-0.13244073,0.2521329,-0.5877716,0.24724948,-0.416414],[-1.1259369,-1.071255,-0.25267237,-0.15611424,-0.36670506,0.8724834,0.70592606],[-0.3924353,-0.48566842,-0.89685357,-0.118145935,0.5531914,-0.012460924,0.78037065],[0.22028138,0.3253433,0.69419026,-0.08042979,-0.053916857,-0.2591152,-0.7299852],[0.37642446,0.15646371,0.73757994,-0.17530896,0.03673549,-0.35259926,-0.61480165],[0.6373535,-0.17438105,0.09731847,-0.37075844,-0.66817486,0.2684939,-0.48366025],[-0.8707067,-0.44384053,-0.44201162,0.51280767,-0.21291855,0.090648316,0.46247554]],"activation":"σ","dense_2_b":[[-0.3433028],[-0.031133696],[-0.06321145],[-0.19336915],[0.029136015],[-0.03043773],[-0.08612019],[0.05573746],[0.27088183],[-0.027076768],[-0.045460623],[-0.23163527],[0.058642514]]},{"dense_3_W":[[0.25786313,0.56292504,0.20988815,-0.11078339,-0.77840126,0.58619094,0.01413026,0.5725057,0.1304814,-0.74678564,-0.2714909,0.0549931,0.36715108],[-0.81611776,-0.17429464,-0.21161298,-0.10920066,0.2845192,0.3519452,0.42357373,0.09085552,0.41325328,0.05708694,-0.14555562,0.13213179,-0.20445172],[0.19899562,0.10822825,-0.4272676,0.613673,0.33998376,-0.17425252,-0.64963627,-0.19976379,0.64160216,-0.4531084,-0.40512505,-0.49072832,0.52435446]],"activation":"identity","dense_3_b":[[-0.05059222],[-0.15303764],[-0.035763595]]},{"dense_4_W":[[-0.9634106,0.023092944,-0.42669016]],"dense_4_b":[[0.04803448]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.06 57700GI000 4NEDR106'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.06 57700GI000 4NEDR106'.json new file mode 100755 index 0000000000..332a128784 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.06 57700GI000 4NEDR106'.json @@ -0,0 +1 @@ +{"input_std":[[9.042358],[1.4254401],[0.56163555],[0.046136778],[1.4076314],[1.4138519],[1.4181747],[1.4050233],[1.3790605],[1.3384784],[1.2876749],[0.045835752],[0.045892626],[0.045947872],[0.04606048],[0.04602913],[0.045808274],[0.0454029]],"model_test_loss":0.010334409773349762,"input_size":18,"current_date_and_time":"2023-08-07_04-17-44","input_mean":[[22.024511],[-0.043522414],[-0.002961347],[-0.0065920064],[-0.04150471],[-0.042428624],[-0.043336894],[-0.04086171],[-0.034525074],[-0.028886782],[-0.018756818],[-0.0065919408],[-0.0066040247],[-0.006626225],[-0.0068288157],[-0.0070200725],[-0.0073607014],[-0.0076632937]],"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.473138],[2.221549],[-1.0823368],[-2.8256664],[0.085434295],[0.028407706],[-0.061113566]],"dense_1_W":[[-0.0089028245,-0.9912872,0.009611258,0.25393942,-0.41998756,-0.32313955,0.8952989,0.029626163,0.11626525,-0.054468796,-0.1326496,-0.4476868,-0.2042107,0.46837947,0.069956504,-0.21724562,0.23439048,-0.047289353],[1.2613285,-0.96326435,-0.17513342,-0.000854132,-0.47149596,-0.018597946,-0.21429752,-0.21073529,0.1354099,-0.07295649,0.030318158,-0.12007737,0.12014077,-0.2163875,0.072022185,0.03959235,0.396182,-0.062489647],[0.012516819,-0.8584632,0.007924718,-0.30343324,-0.42617807,-0.7755947,1.0091652,0.1223127,0.3468889,-0.40062675,-0.07905825,-0.24530481,0.03633433,0.47560924,0.037581664,-0.13015322,0.22054312,0.031255197],[-1.5378897,-1.4828793,-0.18857823,0.16092972,-0.42702663,-0.34182322,0.41900903,-0.18607922,-0.13843817,0.24557483,-0.076981656,-0.4961918,-0.3452876,0.64607316,0.0009507385,0.08998216,0.14214522,0.046318714],[-0.0011267369,0.27540267,0.016030233,-0.20225953,0.013771044,0.6201634,-0.556872,-0.13545676,0.35052666,-0.124900356,0.002072807,0.4798739,-0.08431086,-0.10877774,0.04850312,-0.35767382,0.02486711,0.12758201],[0.024379028,-0.24700065,-2.853376,-0.32122508,0.8939814,0.82656956,1.4070201,0.09498728,-1.3611526,-1.5815003,0.30544436,-0.27033755,0.11556027,-0.054265734,0.20834558,0.13427551,-0.37772593,0.4640547],[-0.030686565,0.84678096,1.770179,-0.36134493,0.24199459,0.28295025,-0.47493774,0.23200317,0.70101535,-0.14119998,-1.0417818,0.40630406,0.13111247,-0.6430103,-0.2674837,0.017178508,-0.29887456,0.38562188]],"activation":"σ"},{"dense_2_W":[[-1.1036853,-1.3721989,-0.51504,1.2015524,0.09316521,-0.96497333,0.4021814],[-0.8097407,-0.7509286,-1.1158744,0.42325807,-0.20259377,0.0626439,0.31110045],[-1.2145201,-1.2441981,0.19279541,0.18892047,0.29747686,-0.25250465,0.6102425],[0.2313029,0.118307896,0.113481075,-0.15884186,-1.111768,0.13841225,0.20408762],[-0.71204215,-0.12088688,-1.1419623,-0.6261491,1.1400135,0.7190926,-0.7439571],[-0.25191402,-0.37898734,-0.28048715,-1.4491202,-0.3656834,-0.7907398,-0.641557],[-0.011884956,-0.5971226,0.335598,1.460086,-1.3101952,0.24946465,-0.7721908],[-0.291724,-1.2193375,0.9255212,1.4103785,-1.3861861,1.1069193,-0.9564451],[-0.005167844,-0.5868809,-0.04781744,-0.4605364,-0.5491854,-0.12518165,0.4831307],[-0.8599904,0.355135,0.13032773,0.4898609,0.9977364,-0.20243338,-0.3729824],[-0.8057951,-1.4712548,0.041369762,0.38580742,0.17479813,-0.5943229,0.58907944],[0.4630881,-0.67586523,0.7142299,-0.026821358,-0.4351039,0.16494957,-0.6159792],[0.47451556,-0.24695386,0.12806706,-0.45427,-0.49645072,0.16154642,0.051802393]],"activation":"σ","dense_2_b":[[-0.10206211],[-0.18115936],[-0.18227798],[-0.24110062],[0.019271357],[-0.057440575],[-0.268234],[-0.5252925],[-0.2866936],[0.05449511],[-0.24483305],[-0.18191986],[-0.07886301]]},{"dense_3_W":[[-0.5275586,0.21438916,0.42354757,-0.080388896,-0.22814655,0.08274758,0.58728325,0.23497643,-0.34910187,-0.65987664,-0.5979741,0.47347566,0.29530162],[0.2212618,-0.04398215,0.08195705,0.55958235,-0.2671096,-0.41001236,-0.07496751,-0.09160523,-0.40878737,0.17242602,-0.28486353,0.67506176,-0.4861643],[0.74257594,0.3091425,0.6776007,-0.5314211,0.5221815,-0.245857,-0.82829714,-0.7256044,-0.20003343,0.63602597,0.68443066,-0.60656106,-0.33084148]],"activation":"identity","dense_3_b":[[-0.08715922],[-0.015241552],[-0.020386416]]},{"dense_4_W":[[-0.18016826,0.060740642,0.8485467]],"dense_4_b":[[-0.027167765]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.06 57700GI090 4NEER106'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.06 57700GI090 4NEER106'.json new file mode 100755 index 0000000000..326f775d56 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.06 57700GI090 4NEER106'.json @@ -0,0 +1 @@ +{"input_std":[[6.3275805],[1.0196048],[0.52010816],[0.0352276],[1.02782],[1.0252671],[1.0222956],[0.9997506],[0.985749],[0.96506876],[0.9418997],[0.035265286],[0.035257738],[0.035243317],[0.035129223],[0.034967538],[0.034930766],[0.034761045]],"model_test_loss":0.005986420903354883,"input_size":18,"current_date_and_time":"2023-08-07_04-42-18","input_mean":[[16.81989],[-0.0023870994],[0.016375398],[0.007987486],[-0.0038331433],[-0.0028706586],[-0.002052483],[0.0037261376],[0.0077264695],[0.015267296],[0.022873675],[0.007976887],[0.008012079],[0.0080480315],[0.0083447285],[0.008644844],[0.008951735],[0.009266214]],"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.081543066],[-0.056712516],[1.020892],[1.2038189],[0.8294046],[-1.550392],[0.14646924]],"dense_1_W":[[0.007095242,-0.3357324,-0.020644788,0.15498674,0.3233852,0.681572,-0.58889717,0.10339724,-0.101055495,0.14906228,0.10875192,0.6335114,-0.055108294,-0.29020736,-0.20417833,-0.15015094,-0.17299037,0.08851465],[0.004572572,-0.031241285,-0.13219641,-0.32799125,-0.15282044,0.3018361,-0.04475915,-0.1852419,0.29663882,0.11407058,-0.28158987,0.15243189,-0.138962,-0.818821,-0.21749938,0.16543967,0.674217,0.5435629],[0.6141752,-0.15518521,-1.046077,-0.2757983,0.08250556,-0.15337233,0.7715917,0.11102678,-0.09630107,-0.5728525,-0.09002878,-0.034704853,0.036534615,-0.08534044,0.17554262,0.59318084,0.4653607,-0.6824117],[0.36545298,1.5887244,0.07696325,1.0003874,-0.86354816,0.23606206,-0.5116619,0.38954034,0.11738926,-0.06503386,-0.26383808,-0.15202644,0.03476461,-1.241754,0.06332426,0.76582646,0.33149716,-0.796532],[0.65361756,0.13396756,1.0613457,0.26300004,-0.40400812,-0.013307764,-0.75999826,0.49663877,0.22844444,0.55961716,-0.1376457,0.37311572,-0.24733792,0.14654122,-0.5692375,-0.5544628,-0.27533975,0.66560614],[-0.34781328,1.6558565,0.07238359,0.20479903,-0.8403306,-0.32243812,-0.16335258,0.52112013,0.17627572,-0.04307547,-0.3611007,0.30237716,-0.6051238,-0.386868,0.38447434,0.46520847,0.3120966,-0.6709089],[0.0036248034,0.23074862,0.020143876,0.5349166,-0.40822935,-0.41078866,0.2051622,0.49179015,-0.1525134,-0.59394807,0.23505864,-0.066738114,-0.7911307,0.33049953,0.6046334,-0.020162396,0.5588138,-0.7296629]],"activation":"σ"},{"dense_2_W":[[-0.543734,-0.11568991,0.46326157,-0.3440383,-0.19483161,-0.22621068,0.3506779],[0.5665691,0.39223912,-0.3114283,-0.24454129,0.20308813,0.26517904,-0.55094284],[-0.37307048,-0.3695241,-0.5802875,-0.67846954,-0.4361852,-0.6546891,0.347107],[0.20529634,0.20746405,-0.6926493,0.35652137,-0.09917265,0.36297628,-0.30438402],[-0.13266158,-0.105559945,0.48330346,0.05460201,-0.7987386,-0.11119831,-0.1520496],[0.12158869,-0.16989066,-0.21201673,-0.8567653,-0.80356854,-0.6502743,-0.6812023],[-0.67351097,-0.4814339,0.0066772657,-0.36529928,-0.32967392,-0.014957418,0.56022096],[0.65586,0.5302613,-0.53480864,-0.1837586,-0.37755764,0.5224716,-0.65894675],[0.632538,-0.12352366,-0.17432757,0.053469837,-0.23578659,0.8563387,0.010090043],[0.755902,-0.33837405,0.06354072,-0.0023081547,0.24040125,0.19006617,-0.6459784],[-0.84905565,0.34682384,-0.74062455,-0.36064273,0.06456776,-1.0320303,-0.1568676],[0.11871192,-0.45685586,-0.43699044,0.6423253,-0.41473007,0.8033967,-0.24556923],[-0.7037791,0.28321943,0.3725407,-1.0338148,-0.7480845,0.16597597,-0.18685772]],"activation":"σ","dense_2_b":[[0.0362523],[-0.15209907],[0.06911948],[-0.098613776],[-0.05953099],[-0.11117059],[0.0083315335],[-0.14510527],[-0.099141985],[-0.024182098],[-0.008950716],[-0.078234635],[0.007288485]]},{"dense_3_W":[[-0.28421518,0.64839506,-0.67347926,0.24251053,-0.5610912,-0.08075926,-0.6807234,0.032682177,0.022037055,0.37259215,-0.27325115,0.662137,-0.691926],[0.526823,0.050769817,0.35217327,-0.046594553,0.26780704,0.11182747,0.11998007,0.086257815,0.3501235,-0.32662,-0.34344003,0.25669885,0.21290292],[-0.52280086,-0.16297898,-0.19620705,0.5186644,-0.12866393,-0.18155573,-0.6449941,0.5744024,0.6484104,0.11549675,-0.62331545,0.06612739,-0.012873929]],"activation":"identity","dense_3_b":[[0.031896967],[-0.058957797],[0.028432038]]},{"dense_4_W":[[0.7332587,-0.31298956,1.0786972]],"dense_4_b":[[0.029880757]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.07 57700GI000 4NEDR107'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.07 57700GI000 4NEDR107'.json new file mode 100755 index 0000000000..75fdb3425f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022 b'xf1x00NE MDPS R 1.00 1.07 57700GI000 4NEDR107'.json @@ -0,0 +1 @@ +{"input_std":[[9.16771],[1.2480878],[0.50373644],[0.0415057],[1.240927],[1.243768],[1.2455409],[1.2407454],[1.2340634],[1.2248088],[1.211883],[0.041283466],[0.041348],[0.0414103],[0.041489914],[0.04143776],[0.041264478],[0.0409134]],"model_test_loss":0.007933193817734718,"input_size":18,"current_date_and_time":"2023-08-07_05-08-25","input_mean":[[24.345285],[-0.096162066],[-0.014125192],[-0.0055604912],[-0.09105816],[-0.09206972],[-0.09341297],[-0.10010282],[-0.10234851],[-0.10274896],[-0.10063276],[-0.0054888204],[-0.0055110557],[-0.0055406075],[-0.005718475],[-0.0058116997],[-0.0059951427],[-0.0062671383]],"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.23237821],[0.018722376],[-1.3757128],[-0.01460865],[0.02967189],[0.08705265],[-1.2340055]],"dense_1_W":[[0.06750661,-0.3542061,0.2432691,0.14180695,-0.5219781,-0.0007836083,0.42668152,-0.0022440958,0.10387852,-0.041751936,0.068489484,-0.14231609,-0.17892262,0.13729224,0.04235856,-0.1593134,0.008738201,0.012944615],[-0.0105973855,-0.33196992,-2.107344,-0.2111076,0.67654485,-0.085388966,0.36568716,-0.049111266,-0.44938025,-0.010503432,0.12672867,-0.15217097,-0.22909231,0.3746955,0.3520743,-0.3600366,-0.08118863,0.04671434],[-0.4432249,-0.2638647,-0.15509327,-0.22285405,0.39585304,-0.07322643,0.20026541,-0.19971582,-0.2071554,0.11940002,-0.09321449,-0.13317838,-0.06569787,0.48338866,0.2730768,-0.22072834,0.17696315,-0.09108241],[0.0020572126,-0.12674253,0.022357568,-0.1565539,0.045776367,0.47296986,-0.17684759,0.25313404,0.09111438,-0.07021955,-0.0518055,-0.12567686,0.21444373,-0.33187112,0.19476555,0.06619808,-0.21118708,0.023201488],[-0.00025779597,-0.35387865,0.012450542,0.14741261,-0.269924,-0.45123708,0.7130625,0.1300766,0.10266559,-0.19306725,-0.058982134,-0.36948946,0.1953737,-0.29075292,0.22910224,0.15611844,-0.11712315,0.058328316],[0.051375203,0.31793782,-0.14423588,-0.0068918834,-0.18315102,0.5918731,-0.28164175,-0.20071678,0.069824845,-0.020674566,-0.11778088,0.17801747,0.2703763,-0.2515284,0.2291236,0.0033097556,-0.43070522,0.29516613],[-0.4140676,0.39011925,0.14862205,-0.13030078,-0.52621514,0.5111128,-0.45828196,-0.27297536,0.23763113,0.3718947,-0.14322172,-0.21290484,0.089274585,0.020155977,0.22360091,-0.28303128,0.13209493,-0.042907283]],"activation":"σ"},{"dense_2_W":[[-0.31453168,0.033921305,0.70444196,-0.58351177,1.0959978,-0.66988647,-0.85257435],[-0.5903374,-0.44103688,-0.70230186,-0.0026794649,-0.34333006,0.5302745,0.918816],[-0.42183512,0.05530731,-0.5427745,0.69254327,-0.8815986,0.44960234,0.30365023],[0.122158416,0.16294368,0.63959545,-0.7836469,0.68446577,-0.47389457,-0.62848955],[0.901804,0.7217306,0.10951365,-0.3829389,0.87658155,0.29891163,-1.3996044],[0.031781312,-0.5354891,-0.7041477,0.31751466,-0.53644896,-0.15998416,-0.16574423],[-0.27697673,-0.28073364,-0.78330237,0.573196,-0.13137478,0.6830283,0.03175229],[-0.045285385,-0.5539421,-0.31835833,0.24435757,-0.6752784,0.5702699,0.70634973],[-0.20699495,-0.047943812,-0.558686,-0.11867195,-0.74516237,0.6060502,0.89396],[0.0669213,0.109555185,0.32660756,-0.73635364,1.029282,-0.38516814,-0.6496012],[-0.41036522,-0.10196122,-0.14805846,0.57442135,-0.6432521,-0.083222605,0.0065267035],[-0.006969785,0.23751916,0.84181625,-1.1058564,0.46725896,-0.6190618,-0.36652294],[0.21793355,0.290169,-0.93023765,0.36604545,-0.7807498,-0.17316261,0.07708634]],"activation":"σ","dense_2_b":[[-0.05177098],[0.037132636],[-0.06423338],[-0.10677436],[0.0036231237],[-0.19121082],[0.053780135],[0.007149082],[-0.021132331],[-0.06560636],[-0.013925233],[-0.20192423],[-0.011626902]]},{"dense_3_W":[[0.14344205,-0.07113653,-0.17046611,-0.59838146,-0.6294641,0.12431688,0.82706773,-0.054024965,0.0036742366,-0.16770674,-0.1288102,0.16114827,-0.18475987],[-0.47564578,0.31864712,-0.14267874,-0.3570462,-0.20744337,0.4933738,0.0050251503,0.44604447,0.3714721,-0.20655935,0.15740293,-0.67137367,0.5913701],[-0.7149089,0.7454441,0.5369203,-0.662988,-0.48257586,-0.2050814,0.18968539,0.2163754,0.17718616,-0.6017345,0.3639053,-0.034539547,0.3536264]],"activation":"identity","dense_3_b":[[0.16334216],[0.029995969],[0.03828924]]},{"dense_4_W":[[0.055147056,0.6825625,0.9658336]],"dense_4_b":[[0.03797484]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022.json new file mode 100755 index 0000000000..109e316755 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ 5 2022.json @@ -0,0 +1 @@ +{"input_std":[[9.469145],[1.4993936],[0.57071626],[0.04533063],[1.4846802],[1.4910924],[1.4950643],[1.4770368],[1.450109],[1.4059838],[1.3534893],[0.0450725],[0.04513867],[0.04519552],[0.04527874],[0.045279715],[0.045107212],[0.044762082]],"model_test_loss":0.011814278550446033,"input_size":18,"current_date_and_time":"2023-08-07_03-50-24","input_mean":[[22.163363],[-0.072142825],[-0.0025159488],[-0.006112024],[-0.069063514],[-0.06971331],[-0.0704586],[-0.0690143],[-0.06599702],[-0.060672827],[-0.053519193],[-0.006028869],[-0.0060502393],[-0.0060780053],[-0.006223877],[-0.0063924924],[-0.0066624186],[-0.006921035]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.1967828],[1.3245456],[0.103971295],[-1.2520714],[-0.16602024],[-2.0981002],[-0.14066501]],"dense_1_W":[[-0.4214301,0.103772216,0.8929513,-0.18447745,-0.2701103,0.30181846,-0.36284757,0.21057971,-0.018612964,0.0593094,-0.16024835,0.1416867,-0.15246183,-0.3907173,-0.08361737,0.2765874,-0.1042719,0.12791668],[0.2745816,0.9077304,-0.011180789,-0.113791615,0.3160003,0.6698024,-0.6092146,-0.40735677,-0.053869486,0.12563229,0.2932765,0.4824642,0.22824322,-0.60383517,0.30220488,-0.049962338,-0.10605018,-0.088415876],[0.057883058,-0.04662177,0.68351626,-0.26972455,-0.43764362,-0.3083863,0.90403295,-0.09680003,-0.1232865,-0.18376413,0.0876113,-0.32598537,0.17061934,-0.039507188,0.030940559,0.22072437,-0.15162866,0.08447131],[-0.4781647,-0.22644347,-0.89709544,0.010036355,0.10885899,-0.12831874,0.32772595,0.41050613,-0.5090009,-0.107521385,0.26115948,-0.30580103,0.59975356,0.21102095,0.12877508,-0.07514449,-0.22881992,0.021187356],[0.011980259,0.655078,0.042019397,-0.39598337,-0.041903555,0.066606015,-0.36221957,0.049460504,0.3256252,0.043578107,-0.21974392,0.42173225,-0.007631104,-0.024107013,0.045484435,-0.3227939,-0.42450958,0.39688012],[-0.3749303,1.2016063,-0.0067011383,-0.14846599,0.07785109,0.20617402,0.023736777,-0.21452771,-0.34367922,0.24584025,0.24662304,0.051978063,0.2859072,-0.12438496,0.35116002,-0.25033846,0.10243457,-0.23285078],[0.010329517,-0.67234844,-3.8885512,0.32423398,0.45072496,0.7296973,0.38731125,-0.056170475,-0.81186455,-0.70703673,0.57100385,-0.9289139,0.09747156,-0.16550198,0.57601154,0.15654263,0.26841167,-0.023330638]],"activation":"σ"},{"dense_2_W":[[0.12735078,0.7578463,-0.8394619,-0.16871296,0.67499816,0.50618064,-0.036082815],[-0.9349809,0.49174136,0.64577276,0.8777052,-0.27532703,-1.3241053,0.92440283],[-0.88465834,-1.2536055,0.3215816,0.9998298,-0.78880596,0.3562564,0.29056188],[0.38568902,0.47334033,-0.39721346,-0.4981637,0.029624036,0.738565,-0.1316896],[-0.054050677,-0.34113935,0.34908327,0.3195855,-0.82633394,-0.4289165,-0.2309725],[-0.6001114,-0.48455656,0.088143736,0.6083232,-0.19328989,-0.6810937,0.45793325],[-0.04838382,-0.6484051,-0.373168,-0.47354728,-0.71413493,-0.10174487,0.009353199],[0.8382851,0.78388906,-0.7335581,-0.45394737,0.45634454,0.032309055,-0.18919362],[0.29141206,0.25385764,-0.36612022,-0.35426342,0.6002645,0.6095089,-0.22014005],[-0.29009074,-0.96834266,0.6976368,0.3486304,-0.2684134,-0.94937044,-0.25426298],[0.11204245,-1.096992,0.3850058,0.012738441,0.02725583,-0.9902537,0.24397202],[-0.33665514,-0.9425791,-0.08292521,0.23680806,-0.41410118,-0.24981315,0.34143913],[0.014888026,-0.03633883,0.665913,0.18707138,-0.85576785,-0.8612555,-0.39374956]],"activation":"σ","dense_2_b":[[-0.017777005],[0.23545785],[-0.15226115],[-0.047002222],[-0.08956424],[-0.059980016],[-0.13794045],[0.0060922517],[-0.3427262],[-0.07332524],[-0.21932544],[-0.22186531],[-0.076186255]]},{"dense_3_W":[[-0.7212533,0.5909567,0.60852754,0.30440143,0.5012994,-0.24762858,-0.66177696,0.15439416,-0.22291721,0.4902901,-0.34424105,-0.119624294,0.09342594],[0.44096592,-0.49161512,-0.6518094,0.6872087,-0.59066635,0.55458814,-0.36470622,0.4769713,-0.045274016,0.15205328,-0.5337833,-0.3563202,-0.15947717],[-0.7922449,0.5979252,0.5463646,-0.42703834,-0.019785186,0.51403254,0.4312795,-0.45969784,-0.33491063,0.21159784,0.3650792,0.1885672,0.5103654]],"activation":"identity","dense_3_b":[[-0.11362524],[0.06490415],[-0.09258138]]},{"dense_4_W":[[-0.34753174,0.23976417,-0.86662257]],"dense_4_b":[[0.07719801]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ ELECTRIC LIMITED 2019 b'xf1x00AE MDPS C 1.00 1.04 56310G7301 4AEEC104'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ ELECTRIC LIMITED 2019 b'xf1x00AE MDPS C 1.00 1.04 56310G7301 4AEEC104'.json new file mode 100755 index 0000000000..a14217fff8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ ELECTRIC LIMITED 2019 b'xf1x00AE MDPS C 1.00 1.04 56310G7301 4AEEC104'.json @@ -0,0 +1 @@ +{"input_std":[[4.365931],[1.0053464],[0.48621035],[0.040902473],[0.9949335],[0.999163],[1.0026134],[0.99977523],[0.9919684],[0.97725195],[0.96077615],[0.04045883],[0.04060025],[0.040737074],[0.041246798],[0.04151738],[0.041603032],[0.041438416]],"model_test_loss":0.007651639170944691,"input_size":18,"current_date_and_time":"2023-08-07_05-59-00","input_mean":[[21.148514],[0.04878841],[-0.0029595776],[-0.042372182],[0.047377028],[0.048310757],[0.04831951],[0.046471857],[0.041722726],[0.038647328],[0.0400284],[-0.04253156],[-0.042471983],[-0.042429984],[-0.0424216],[-0.042509023],[-0.042691946],[-0.04297347]],"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.121761754],[-0.005262723],[-0.42553833],[-1.4800751],[0.39852682],[1.5660636],[-0.2885766]],"dense_1_W":[[-0.0071449946,-0.22166711,0.040895086,0.074089214,-0.24226914,-0.60404766,0.008154148,0.5209098,-0.03358146,0.32940406,-0.45302716,-0.26397997,0.026462026,0.3500697,0.13830581,-0.30527312,0.16121124,-0.07390656],[0.0022779773,0.00796991,2.0393221,0.3221699,-1.7534194,-0.89475006,-1.0659475,0.77743155,2.5998273,1.7403948,-1.4950538,1.2407383,0.099073306,-0.1965835,-0.6947619,-0.5265118,-0.42691574,0.052154247],[0.051531065,0.33934996,0.028932936,0.09824733,-0.27226272,0.6414971,-0.57750374,0.04495341,0.12243749,0.48152295,-0.4014161,0.2573053,0.36582318,-0.2320656,-0.45263124,-0.529971,0.06477085,0.36134705],[-0.69859356,0.37024122,0.18599005,-0.6343367,0.048961602,0.64901793,-0.014536332,-0.35943583,0.07028741,-0.49705738,0.3390023,-0.11667915,0.26095447,-0.13361779,0.18741582,0.45414707,0.04516702,-0.18339908],[-0.0724652,-0.03210611,0.0017774315,-0.021023385,-0.18996063,1.0227648,-0.6022702,0.09638655,0.004159916,0.11472787,-0.03836134,0.4005762,-0.29560152,-0.45276555,0.22651882,0.16092128,0.03422194,-0.106695466],[0.6899316,0.14993052,0.1758256,-0.60796994,-0.1518822,0.5145441,-0.05431888,0.17881271,0.05299809,0.14818904,-0.22618657,0.4235098,0.05817998,0.14069048,-0.5904664,0.058542084,0.4009274,-0.00811349],[-0.0029274654,-1.2603375,0.9620041,-0.3834267,0.5099088,1.114527,-0.28767705,0.72205675,-0.21023215,-0.49849328,-0.1329101,0.0074135163,0.32214153,0.15615329,0.093625374,0.092150904,-0.024664165,-0.09238503]],"activation":"σ"},{"dense_2_W":[[0.12002893,-0.17805395,-0.2880083,-0.38067022,0.12869482,-0.6071237,0.12071723],[-0.12379059,0.2787932,-0.35626152,0.121466,0.32586035,0.1355638,-0.45241648],[-1.130496,0.7352465,0.6112711,0.10642678,-0.08899688,0.04508099,-0.030892976],[0.67437845,0.13706607,-0.7985538,-0.17117155,-0.3313495,-0.3713848,-0.027845394],[-0.517497,-0.46660402,0.1784289,0.50726193,0.36130485,0.43994057,0.3730332],[-0.85701996,-0.3851742,0.50393444,0.33921102,0.42251298,0.54051745,0.14791974],[0.593431,-0.48125875,-0.015125809,-0.37809905,-0.25327942,0.48657876,-0.480061],[0.5388885,-0.7307186,-0.41774607,0.06747027,-0.86199886,0.08562353,0.24053545],[-0.09548584,0.04586038,-0.3076278,0.21206705,-0.670656,-0.5026032,-0.52725095],[-1.2665727,0.18871929,1.1413674,0.5228994,0.10997097,-0.34521362,0.120387435],[0.0748604,0.4996035,-0.0855786,-0.05275676,0.6006561,0.07183944,0.36708173],[-0.48888278,-0.7535756,0.3745485,0.6277024,-0.430217,-0.75581187,-0.6709151],[0.7400373,-0.59288275,-0.7235487,-0.15054081,-0.12360353,0.0075691734,0.16587299]],"activation":"σ","dense_2_b":[[-0.1345922],[-0.2812786],[-0.22687326],[-0.013213066],[-0.11886535],[-0.26479134],[0.110779524],[-0.022709124],[0.013283567],[-0.5753985],[-0.20628732],[-0.069668956],[-0.010791435]]},{"dense_3_W":[[-0.055820215,0.18302114,0.47397888,-0.44688433,0.5031685,0.2437073,-0.5109226,-0.6158206,-0.6161359,0.35794947,0.30956054,-0.39124405,-0.5219915],[-0.09907215,-0.4441128,-0.24953865,-0.61175,0.30950993,0.41822892,-0.2842331,0.23637499,-0.57602996,0.2360482,0.17507787,0.15714398,-0.16979274],[-0.4119329,-0.2348606,0.44085753,-0.46800396,0.37048897,0.27227882,-0.48144114,0.5093462,-0.5514392,0.020650176,-0.1336957,0.27199176,-0.15389821]],"activation":"identity","dense_3_b":[[0.08689549],[0.099912],[0.10019605]]},{"dense_4_W":[[1.2855291,0.25690037,0.18219778]],"dense_4_b":[[0.083643846]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ ELECTRIC LIMITED 2019.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ ELECTRIC LIMITED 2019.json new file mode 100755 index 0000000000..0bb8fb0fe2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ ELECTRIC LIMITED 2019.json @@ -0,0 +1 @@ +{"input_std":[[4.3663363],[1.0055081],[0.48724762],[0.041052617],[0.9967611],[1.000683],[1.0039185],[1.0006562],[0.9922954],[0.9760051],[0.96259797],[0.040620644],[0.040736996],[0.040861562],[0.041329786],[0.041552614],[0.04158318],[0.041458495]],"model_test_loss":0.007739691529422998,"input_size":18,"current_date_and_time":"2023-08-07_05-33-00","input_mean":[[21.149132],[0.04869401],[0.010550776],[-0.042260047],[0.04392769],[0.045757443],[0.04700402],[0.05030857],[0.046020832],[0.043477297],[0.04459311],[-0.042488344],[-0.042413425],[-0.042349935],[-0.0422564],[-0.042364012],[-0.04258541],[-0.042924497]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.2678127],[0.08612767],[-0.9489097],[0.706986],[-0.30796576],[-0.32985103],[0.080427095]],"dense_1_W":[[0.0036277466,0.51429325,1.0403895,-0.21717447,-0.43794936,-0.19047353,-0.64920795,-0.048046228,0.69371104,0.53239745,-0.7118019,0.6192604,0.5279617,-0.30141866,-0.19268416,-0.3834617,-0.04798644,0.15677519],[0.030118963,-0.13764045,-0.07282364,0.08246006,0.2705789,1.1211811,-0.57014453,-0.16758528,-0.2744678,0.09098098,0.30342337,-0.20622616,0.0074658724,0.117365144,-0.2300956,0.17353779,0.0072367247,-0.05224067],[-0.46240714,-0.814998,-0.15898485,0.23570561,0.2619672,-0.6533978,0.53975147,0.42714936,-0.15445922,-0.27475175,0.2855774,-0.6121087,-0.085973136,0.56669056,-0.24448115,0.47533005,-0.0016848596,-0.2630539],[0.48946816,-0.17746238,-0.16460344,-0.3096607,0.21007513,-0.51034343,0.029157858,-0.13090727,-0.09923416,0.38133857,-0.08658899,-0.37016922,-0.20602193,0.81421083,0.47483093,-0.30339777,0.043880396,-0.07612349],[0.010865774,-0.24699818,1.7088879,0.025180334,0.0171949,-0.8591754,0.41037732,-0.19206196,0.020423349,-0.07455425,0.17094779,-0.25438294,0.11110474,0.32507765,0.43417934,-0.011772227,0.14530338,-0.59843206],[0.027194558,0.63995826,-0.010129754,0.44069192,-0.1763659,-0.9194824,0.02155618,-0.12091762,-0.05442227,0.43881658,-0.3719806,-0.23903327,-0.20877454,0.41533244,-0.13582179,-0.14811464,-0.20708357,0.15655594],[-0.0028607307,0.34870997,2.821092,0.2508811,-1.035149,-0.465783,-1.5769824,0.18240027,1.7161161,1.8064464,-1.3023019,0.52437043,-0.00077510276,0.16097444,0.040497832,-0.045791112,-0.8714639,-0.1387739]],"activation":"σ"},{"dense_2_W":[[-0.4802455,-0.5064868,-0.2886249,-0.0686329,-0.27806887,-0.3524303,-0.80409414],[0.34504583,0.3495648,-0.7631179,-0.38251773,0.29856616,-0.26794648,-0.18538539],[0.6198588,-0.22676483,-0.35512465,0.12881657,-0.40367082,-0.9252802,-0.0002468375],[0.35880542,0.46389118,-0.8148363,-0.59149826,-0.5300025,0.20585157,-0.07116474],[-0.23429085,-0.62216985,0.59508204,0.4193159,-0.15182957,0.5141024,-0.41728604],[0.66723776,0.073733844,-0.070885584,-0.48375297,-0.45241132,-0.84997284,-0.031634018],[-0.5627967,-0.4777591,0.868787,0.17813006,0.21961252,0.14355378,-0.57126164],[-0.14685419,0.03656165,-0.7900763,-0.08400198,0.24159017,-0.85876423,-0.26216614],[-0.71358204,-0.689546,0.051773578,-0.0848018,0.18454298,0.22894992,-0.1594909],[-0.018925406,-0.706924,0.090921454,0.70733404,-0.1029515,0.4853316,-0.19676127],[0.3700011,0.58441055,0.019160673,-0.4851522,-0.5654224,-0.81087536,0.48571846],[-0.6824983,-0.010707942,-0.03845548,-0.24932735,0.10926147,-0.65549374,-0.13580413],[0.044423133,0.24843681,0.10453449,-0.5270328,-0.0071183904,-0.805887,0.016872479]],"activation":"σ","dense_2_b":[[-0.32894507],[-0.1402385],[-0.08289674],[0.058721446],[-0.08779582],[-0.08003288],[-0.0015345884],[-0.02523492],[0.00043462456],[-0.033334095],[-0.036279026],[-0.33189464],[-0.07644796]]},{"dense_3_W":[[0.13798034,-0.55931157,-0.057955276,-0.049440853,0.51565015,-0.01682391,0.30927873,-0.11561556,0.6672029,-0.07284992,-0.4854766,-0.14209567,-0.34877455],[-0.031582475,0.050488807,-0.24109462,-0.54226226,-0.22244236,-0.3798091,0.5201355,0.11588744,0.013117147,0.33739212,-0.23309216,-0.14616711,-0.5281888],[-0.076868005,-0.03763952,-0.29681742,-0.12974247,0.4806066,-0.04267054,0.51561165,-0.50798887,-0.13377365,0.61627406,-0.48184386,0.3136061,0.23230153]],"activation":"identity","dense_3_b":[[0.062304508],[0.06676691],[0.045753885]]},{"dense_4_W":[[-0.7684763,-1.1087472,-0.815416]],"dense_4_b":[[-0.05879514]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020 b'xf1x00AE MDPS C 1.00 1.01 56310G2310 4APHC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020 b'xf1x00AE MDPS C 1.00 1.01 56310G2310 4APHC101'.json new file mode 100755 index 0000000000..c7fc30d6f5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020 b'xf1x00AE MDPS C 1.00 1.01 56310G2310 4APHC101'.json @@ -0,0 +1 @@ +{"input_std":[[6.9939313],[1.0528377],[0.5315027],[0.029189091],[1.0448871],[1.0467738],[1.0488317],[1.039207],[1.0235921],[0.9892058],[0.946193],[0.028987626],[0.029057996],[0.029122358],[0.029161116],[0.029061846],[0.028845914],[0.028680017]],"model_test_loss":0.005588449537754059,"input_size":18,"current_date_and_time":"2023-08-07_06-50-32","input_mean":[[18.301882],[0.08731057],[0.0127743315],[-0.015221847],[0.083781615],[0.084988184],[0.086485535],[0.08923056],[0.08884011],[0.083579615],[0.07677084],[-0.015187935],[-0.015199815],[-0.015214948],[-0.015418597],[-0.015619739],[-0.01592285],[-0.016167268]],"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.10865636],[2.3342428],[1.9012878],[-1.0550975],[0.42597178],[-0.072197296],[0.13246399]],"dense_1_W":[[0.014873456,-0.6716018,0.030190289,0.05807356,0.1659468,-1.2892563,0.7523864,0.17761192,-0.1367714,-0.25312293,0.10743949,-0.86903024,0.38059515,0.36618868,-0.17938752,0.4116222,-0.04126272,-0.16534285],[0.5307081,0.70384896,0.17447057,-0.5299634,-0.1137985,0.66921306,-0.4550779,0.4195087,0.022407524,-0.011906744,0.01779598,0.31284544,0.12419175,-0.37242392,0.29023978,0.29320818,-0.03838816,-0.1365707],[0.49472126,-0.9217689,-0.16751769,0.2551346,0.4287786,-0.7115711,0.13987176,0.081955396,-0.10713988,-0.14384302,0.056155935,-0.41739097,0.31321964,0.18086141,0.07986471,-0.59072965,0.019683728,0.2156733],[-0.21605797,-0.0773706,1.8579228,-0.054307144,0.09962813,0.459771,-0.43688956,0.4817178,-0.11751329,0.24354506,0.048119925,0.15544271,0.5567847,-0.44885188,-0.071555234,-0.21245098,-0.12196474,0.1607481],[1.1639537,0.22229235,-0.0055136923,0.18512912,-0.31992313,0.6914639,-0.441095,-0.47246328,-0.17016385,0.31878585,-0.050539054,0.5196653,-0.45885605,-0.06979618,-0.6328351,-0.1972874,0.34543124,-0.029788537],[-1.2173545,0.1734982,-0.006638391,0.31715307,-0.49786195,0.5964912,-0.46224737,0.428369,-0.27108857,-0.47364435,0.28244984,-0.38170126,0.3462351,-0.040848292,-0.57324094,0.092280604,-0.33654806,0.22344877],[-0.023229493,0.6459344,3.563477,-0.027724274,-0.50558513,0.3390488,-0.7422579,-0.26814136,0.10699902,0.7712946,-0.27946892,0.16129833,0.41574493,-0.38143778,-0.21668792,0.08835417,-0.18336411,0.06490999]],"activation":"σ"},{"dense_2_W":[[-0.7401138,-0.33438444,-0.30976433,0.15630613,0.13618709,0.44008145,0.43946928],[0.3344595,-0.32618588,0.32839847,0.15315771,-1.035439,-0.41636187,0.18828368],[-1.6167084,-0.46759644,-1.9622544,1.1570694,-0.06380261,0.70214266,0.045398716],[0.7825211,-0.885754,0.5565485,0.076575294,-0.52415085,-0.30411518,-0.025386691],[0.8624213,-1.7385436,-0.08763568,-0.8164249,-0.70833945,0.5085741,-0.4101307],[-0.5877383,0.8294365,-0.3091808,-0.512284,0.39336714,0.38540366,0.5915022],[0.34969604,-0.36038882,0.58447695,-0.14356469,-0.0804361,-0.3685647,-0.3614559],[0.72681546,-1.4046979,0.05443059,-0.16271566,-0.34866697,-0.22142158,-0.74306345],[0.5620642,-0.3955179,0.833503,-0.054495268,-0.54243296,-0.229325,-0.19776875],[-0.4541713,0.9203334,-0.70482004,-0.301528,0.21780983,0.25789845,-0.045716804],[-1.002443,-0.6559031,0.046121206,0.037933722,0.035592597,-0.0741523,-0.62133527],[0.9827719,-1.4614758,-0.3133424,-0.52563715,-0.24086906,-0.17160659,-0.6464693],[0.83488077,0.028223112,0.78030294,0.04748862,-0.31935772,-0.51587915,-0.18742341]],"activation":"σ","dense_2_b":[[-0.13555096],[-0.32605985],[-0.35664767],[-0.10862631],[-0.2544254],[-0.043318216],[0.000725854],[-0.23828812],[0.10916386],[0.00066704256],[-0.21592386],[-0.24546382],[0.03496515]]},{"dense_3_W":[[-0.48865333,0.012070441,-1.1093414,0.37793216,0.106044106,-0.37514287,0.2380262,0.6363306,0.13366772,-0.5155996,0.35994524,0.29682592,0.7856256],[0.07205148,0.53575456,0.73853123,0.31763637,0.29280093,0.4034669,-0.43210915,0.1826047,-0.6585059,0.087924495,0.4158608,0.10441277,-0.53451645],[-0.5815711,0.5280911,-0.4214647,0.73003256,0.8056002,-0.8074712,0.11868743,0.352855,0.50734097,-0.23951167,-0.20682806,0.3864585,-0.0063988008]],"activation":"identity","dense_3_b":[[-0.0008838433],[0.05478047],[-0.09860168]]},{"dense_4_W":[[-0.43285844,0.1527011,-0.5464815]],"dense_4_b":[[0.096321255]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020 b'xf1x00AE MDPS C 1.00 1.01 56310G2510 4APHC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020 b'xf1x00AE MDPS C 1.00 1.01 56310G2510 4APHC101'.json new file mode 100755 index 0000000000..946d3622da --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020 b'xf1x00AE MDPS C 1.00 1.01 56310G2510 4APHC101'.json @@ -0,0 +1 @@ +{"input_std":[[7.562192],[1.1790692],[0.4002067],[0.04594392],[1.1686502],[1.1728791],[1.1756221],[1.1729841],[1.156941],[1.1271893],[1.0963595],[0.045839865],[0.045870736],[0.045898065],[0.045978826],[0.04594467],[0.045800198],[0.045554243]],"model_test_loss":0.004118586890399456,"input_size":18,"current_date_and_time":"2023-08-07_07-15-40","input_mean":[[23.066132],[0.057099603],[-0.01063407],[0.004261095],[0.062055044],[0.060667243],[0.058939908],[0.05526614],[0.05360945],[0.051924873],[0.05241744],[0.00427781],[0.0042802687],[0.00428003],[0.004243646],[0.0041739033],[0.0040482194],[0.0038935656]],"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.10965323],[-0.052080173],[-0.1538397],[-2.384923],[-0.09352556],[0.0018890598],[2.3688684]],"dense_1_W":[[0.7755966,-0.2301085,0.06612401,-0.35135305,-0.36526012,0.6195271,-0.17558895,0.33820674,0.29887065,-0.27747476,-0.13994163,0.43222815,0.16581486,-0.0976609,-0.25181568,-0.47843766,-0.32353792,0.45968184],[0.7839898,-0.45771372,-0.06646608,0.0075052464,0.48982865,-0.43683746,0.25553277,0.032161202,-0.55129576,0.59574753,0.017138774,-0.6380152,0.14585742,0.4083551,0.21304548,0.6200874,-0.086530834,-0.21368058],[0.08205719,0.03429464,0.016315881,-0.12871714,0.07213858,-0.45993748,0.095523514,-0.11810924,0.06553878,-0.5675574,0.2978788,-0.1445707,-0.33768746,0.50254714,0.22325698,-0.1333724,-0.06763935,0.09734261],[-0.35377377,-0.43953004,-0.19076808,0.15645324,-0.23917644,-0.0014493754,0.17704272,-0.25057337,-0.78162295,-0.06046742,0.096349254,0.027729603,-0.36563933,0.80371153,-0.027431296,-0.2516018,-0.13851781,0.04337426],[0.00498448,0.8467486,3.7462854,0.1478785,-1.0097741,0.0915918,-0.5104059,0.09881933,-0.0863164,0.48782897,-0.091693185,0.5003006,0.5728494,0.21510558,-0.710957,-0.29564264,-0.25217718,-0.17932595],[0.037292775,0.549042,-0.020767516,0.042928286,-0.015053085,0.80091596,-0.5040608,-0.20316118,-0.30876288,0.18842556,0.16377552,0.7935661,0.03645923,-0.8193547,-0.08692827,0.11217417,0.064909056,-0.06385711],[0.35312757,-0.118093394,-0.19476774,0.5554578,0.1930753,-0.48555315,0.057567388,-0.7159381,-0.27626652,-0.37647247,0.20957941,-0.44620857,0.0002755669,0.58868754,0.10452296,-0.66695416,0.27288365,-0.14926693]],"activation":"σ"},{"dense_2_W":[[-0.19584657,-0.56228656,0.049819242,0.3356435,-0.8650626,-0.22927399,-0.7001092],[-0.08733842,-0.654029,-0.8732687,0.31039196,0.65217227,0.6601506,-0.9831877],[-0.28144318,-0.5611539,0.32681772,0.31215787,-0.44330865,0.008832871,0.37263072],[-0.09786935,-0.48769787,-0.69821197,-0.38688582,0.5728046,0.18644942,-0.7118146],[-0.8619828,0.0027679028,0.43955415,1.0463487,-0.69266444,-1.0750707,-0.07059785],[0.31811947,-0.2366228,-0.72350734,0.1262254,0.25636208,0.46176276,-0.34769687],[-0.69273907,1.5178095,0.8711242,-0.07443719,-0.69538844,-0.69129455,0.7530523],[0.3147337,-0.11657144,-0.8414669,-0.09644994,0.08891191,0.1703831,-0.6425643],[-0.3112073,0.35414124,0.11913388,0.3313928,0.11848869,-0.853674,0.47229782],[-0.60429984,0.27235946,0.7851893,0.31956023,0.6252034,-1.6533685,0.58046734],[0.41311583,-0.19508654,-0.0685557,-0.17002022,0.1134038,0.4991351,-0.3182844],[-0.8717183,0.66564476,0.12376991,1.2741002,-0.5322097,-1.1083273,-0.37658596],[0.67320377,-0.41162866,-0.042097807,-0.6380872,-0.46145105,0.875035,-0.52515566]],"activation":"σ","dense_2_b":[[-0.36951348],[-0.20310313],[-0.1163803],[-0.058099788],[-0.27018055],[-0.12597482],[0.15152946],[-0.2217294],[0.014968804],[-0.19001697],[-0.042399503],[-0.189941],[0.096105725]]},{"dense_3_W":[[-0.12309125,0.77507085,-0.3702677,0.4653985,-0.7352844,0.17442249,-0.20582232,0.52809495,-0.38240287,-0.38384795,0.35505968,-0.7694335,0.81513363],[0.49237758,-0.24538146,-0.54058105,-0.29702288,0.7292889,0.23451614,0.2204175,0.16993591,-0.58852774,0.5432413,0.13110612,0.1945469,-0.18632029],[0.40756968,0.5396459,-0.06640867,0.52895707,-0.22500473,0.5870712,-0.55817175,0.10517919,-0.51188445,-0.37411118,0.49139977,-0.56567246,0.21133785]],"activation":"identity","dense_3_b":[[0.039045013],[-0.05285484],[0.031891406]]},{"dense_4_W":[[0.4020106,-0.34673893,0.3534026]],"dense_4_b":[[0.032409564]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020.json b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020.json new file mode 100755 index 0000000000..81deb9f472 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI IONIQ PHEV 2020.json @@ -0,0 +1 @@ +{"input_std":[[7.896002],[1.2703207],[0.4862841],[0.043405883],[1.2591066],[1.2634319],[1.2668407],[1.2588236],[1.2390842],[1.196458],[1.1518458],[0.04327276],[0.043316394],[0.043354623],[0.043371588],[0.043337632],[0.043194752],[0.04294343]],"model_test_loss":0.0052194190211594105,"input_size":18,"current_date_and_time":"2023-08-07_06-24-33","input_mean":[[21.445068],[0.09960828],[0.007299674],[-0.0005310989],[0.09852017],[0.09864108],[0.09867044],[0.10080879],[0.10140148],[0.09866842],[0.095603466],[-0.00043161964],[-0.0004366571],[-0.00044840755],[-0.00056364527],[-0.0007040198],[-0.0009044244],[-0.0011604802]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.09470449],[3.0432646],[0.03450416],[-0.46021092],[1.1594877],[0.029558277],[1.8363751]],"dense_1_W":[[0.005493746,-0.3358011,0.0037607898,0.29596448,0.3943874,-1.0717398,0.5701757,0.016112054,-0.3643242,0.23849818,-0.075061426,-0.56350166,0.061684538,0.23258829,0.3412455,-0.086815886,0.09234655,-0.08318382],[0.5553914,1.0832955,0.025380384,-0.42384112,0.25218967,0.2652197,-0.08185232,0.14480954,-0.08236447,0.41922125,0.03566944,0.47901392,0.27303162,0.23061423,-0.48810846,-0.049590047,0.055590317,-0.0777213],[0.020737711,-1.0003403,-4.471138,0.18066612,0.8972061,0.281358,0.63211244,0.037308935,-0.27867937,-0.5369628,0.02718618,-0.8628528,-0.5999772,0.41523072,0.23050354,0.6017408,0.07975743,-0.02996209],[0.13376372,-2.1679244,0.024798622,-0.6729938,-0.54384416,-1.0513178,0.8737397,-0.41420826,0.114922546,-0.99975115,-0.08032563,-0.5233528,-0.047853615,0.95928097,-0.67657197,-0.6571614,0.3954971,0.7528502],[1.0411915,0.2750806,-0.017673122,-0.287801,-0.5224428,-0.17964116,-0.7069524,-0.38134468,-0.040215928,-0.100667715,-0.22424145,-0.011132579,0.045741584,0.25371146,-0.41912347,-0.07781668,0.072858974,0.3702856],[0.006503676,0.31328365,0.7664561,-0.6728464,0.3802759,0.44000676,-0.5781886,0.107931,-0.15678358,0.1777509,-0.48083207,0.49993676,-0.26356068,-0.6739486,0.0690044,0.28473458,-0.08100241,0.2141241],[0.6557612,-1.1317073,-0.01985534,0.2997433,-0.3100224,-0.5334095,0.59377813,-0.11130485,0.11088933,-0.23197712,-0.15815854,-0.38820937,0.05915133,-0.4817993,0.3789274,0.16070421,-0.20570633,0.1632214]],"activation":"σ"},{"dense_2_W":[[0.4679878,0.2634842,-0.028860494,-0.21427041,0.14012837,-0.5288975,-0.42545995],[-0.6775605,-0.4815579,-0.454403,-0.07230136,0.009694609,0.59333,-0.62719697],[-0.6382057,0.6997013,0.36473322,0.2414489,0.13382578,-0.18536665,-0.90939593],[-0.8748301,2.3719103,-1.56188,-1.8237168,2.1302335,1.2548504,-0.031323623],[0.503896,-0.679211,-0.6008442,0.60013664,0.17343543,0.17834695,0.24348144],[-0.13778792,0.15866904,-0.76191425,-0.5750008,-0.69259375,0.40918577,-1.4637057],[-0.52587533,-0.25144148,-0.31243584,-0.1940254,-0.25742918,0.22230358,-0.21316433],[-0.29734585,-0.21217649,-0.4547587,-0.4792317,0.52856797,0.5213185,0.07181257],[-0.007364429,0.007793841,-0.71918666,-0.005362996,0.23980153,-0.49275202,-0.6564195],[0.27902287,0.11022579,0.09352632,0.18805945,0.30498815,0.03035562,0.31641266],[0.65705526,-0.5266016,-0.022429584,0.18331312,-0.32305643,-0.007786143,-0.26408496],[-0.4082327,-0.25355664,-0.5861339,0.31163412,0.25877875,-0.75417554,-0.30994046],[0.5602024,-0.5399794,0.34386253,-0.40272358,-0.48508552,-0.18899718,0.17928903]],"activation":"σ","dense_2_b":[[-0.010232577],[-0.00023857807],[-0.034300473],[0.46175855],[-0.028856292],[-0.191977],[-0.23886801],[-0.003576378],[-0.22439884],[-0.009154732],[-0.014472028],[-0.22065732],[0.0036408578]]},{"dense_3_W":[[-0.30743915,-0.5722211,-0.48067984,-0.108277574,0.29175866,-0.51613647,-0.52692574,-0.06551988,-0.0476114,0.3618537,0.05102852,-0.27722335,0.5223134],[0.30818227,0.17767535,0.5113013,-0.25676715,-0.058021083,0.4884727,-0.23518495,0.43626583,-0.42181972,-0.047644824,-0.1406492,0.23160899,-0.44818217],[0.45361012,-0.51555586,-0.5169346,-0.2632498,0.44542933,-0.15754463,0.30686757,-0.56882674,0.065441564,0.3283218,0.18038327,0.1817784,0.5348782]],"activation":"identity","dense_3_b":[[0.012215524],[0.0026582293],[0.008550247]]},{"dense_4_W":[[-0.97812647,-0.12224905,-1.2473096]],"dense_4_b":[[-0.009789151]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019 b'xf1x00OS MDPS C 1.00 1.04 56310K4000x00 4OEDC104'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019 b'xf1x00OS MDPS C 1.00 1.04 56310K4000x00 4OEDC104'.json new file mode 100755 index 0000000000..62ea60b001 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019 b'xf1x00OS MDPS C 1.00 1.04 56310K4000x00 4OEDC104'.json @@ -0,0 +1 @@ +{"input_std":[[7.9823537],[1.4029322],[0.5391447],[0.04887051],[1.3963706],[1.3995055],[1.4009825],[1.3885417],[1.3692048],[1.3372831],[1.2967274],[0.04857869],[0.048658866],[0.048733797],[0.04879035],[0.048757277],[0.04862833],[0.048260294]],"model_test_loss":0.00437383446842432,"input_size":18,"current_date_and_time":"2023-08-07_08-07-32","input_mean":[[21.874346],[-0.0005797015],[0.010789347],[-0.012909609],[-0.003366453],[-0.002296705],[-0.0016360051],[0.0021639771],[0.005118338],[0.0068367384],[0.008824422],[-0.012872645],[-0.012881624],[-0.012900158],[-0.013073698],[-0.013239728],[-0.0134497825],[-0.013658659]],"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.66749334],[-2.3284407],[-2.552216],[-0.51326174],[-0.16542026],[-0.78371996],[0.58516866]],"dense_1_W":[[-0.20467584,0.3742327,-2.1127253,0.4140109,0.20715296,-0.40205246,0.7444451,-0.40750897,-0.32128036,-0.10457273,0.029910121,-0.114483304,-0.17820649,0.09675455,0.15047672,-0.07704191,-0.08496522,-0.05037796],[-0.75994927,1.0465562,0.074481115,0.45544595,-0.099778585,-0.30777687,0.45363194,-0.26308686,0.34833267,-0.061779257,0.19875576,0.0100148255,0.026750173,-0.087523125,-0.44454777,-0.16642322,0.22628598,-0.020208687],[-0.79274124,-1.5697699,-0.0782978,-0.27417132,0.8103041,-0.113830596,-0.45296183,0.41277897,-0.14532241,-0.25087643,-0.024198774,-0.08969185,0.0901834,-0.2042583,0.41698653,0.31030753,-0.13242747,-0.111738786],[0.72596943,0.70769554,-0.0069162454,-0.1704995,0.033077016,-0.14304133,-0.018031847,-0.013690503,0.2569981,-0.08117829,-0.07157592,0.62022674,0.22071594,-0.22532593,-0.5013286,-0.37610313,0.016311774,0.18602486],[0.07123103,-0.7177917,2.071481,0.12931369,-0.08568253,0.006763331,0.5998342,-0.65402156,0.13034452,-0.1689963,0.48351094,-0.1429906,-0.4140654,0.6116886,-0.28543368,-0.3805712,0.27751157,0.042374272],[0.7390709,-0.30262133,0.007570949,-0.09976768,0.11671621,-0.57199293,0.060994264,0.17037009,-0.23032549,0.08530586,-0.033951357,-0.04542262,-0.36450365,0.41992882,0.061726227,0.15781905,0.02539049,0.070994005],[0.27319646,0.6453565,-1.9857005,0.5767287,0.21463604,-0.2138314,0.2007721,-0.25790113,-0.2563649,-0.000869855,-0.091922425,-0.72040427,0.13880335,0.62027377,-0.44047758,-0.050440025,0.25620586,-0.2074692]],"activation":"σ"},{"dense_2_W":[[-0.22115013,0.055372495,-0.6996138,0.5370589,-0.47052458,-0.651092,0.3839152],[0.42745695,-0.38167813,0.14885446,-0.37276337,-0.05345867,-0.013708567,-0.3856122],[0.12907071,-0.54699695,0.39133784,0.2088913,-0.28036752,-0.3084716,0.032560136],[-0.5054007,0.7835044,-0.44982964,-0.23468708,0.12779902,-0.1858994,-0.6199746],[0.045793723,0.039428864,-1.0686759,0.91881555,-0.108995505,-0.029487936,-0.21528293],[0.19056086,0.6597351,-0.8134895,0.018328965,-0.45527688,0.03831411,0.214237],[0.31016105,-0.1720769,0.6232735,-0.0155809345,0.04817505,0.15304431,0.10533786],[-0.42903107,-0.13552563,-0.09239265,0.4200264,-0.4343141,-0.47912154,-0.39496207],[0.20956168,-0.2317832,0.21835831,-0.16000728,0.49696466,0.14894594,0.57515436],[-1.595405,0.8692183,1.0247264,-0.9062122,0.17050256,-0.7897474,-0.94245416],[0.51542455,0.5987507,-0.84974045,0.5130476,-0.10149645,-0.5025105,-0.49863508],[0.604559,-0.26422802,-0.07353111,-0.7784861,0.42281657,0.66297257,-0.4316652],[0.08229692,0.19338071,0.0894164,-0.5593924,0.03616016,0.012567026,-0.30123827]],"activation":"σ","dense_2_b":[[-0.056233797],[-0.0057250382],[-0.21214126],[-0.011911729],[0.085418984],[-0.15823714],[-0.06585213],[0.00472772],[-0.017725466],[-0.118805535],[0.026983896],[0.005067724],[-0.005340161]]},{"dense_3_W":[[0.22465749,-0.015047881,-0.32157594,0.1449359,-0.06417016,0.21772367,-0.12643653,0.51667756,-0.28002724,-0.052840073,-0.21226676,-0.3199402,-0.088716716],[0.38327125,-0.26344195,-0.22620219,-0.37501743,-0.12782073,-0.17671679,-0.0013878844,-0.39273772,0.29493284,-0.15408261,-0.6016259,0.6571256,0.38118032],[0.5750975,-0.63398695,0.040233657,0.29500204,0.55213654,0.23952343,-0.20580381,0.39102614,-0.5990083,0.6517685,0.48111153,-0.4062521,0.022178443]],"activation":"identity","dense_3_b":[[-0.025877675],[0.030203432],[-0.03420004]]},{"dense_4_W":[[0.7982145,-0.41420195,1.1245165]],"dense_4_b":[[-0.03153333]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019 b'xf1x00OS MDPS C 1.00 1.04 56310K4050x00 4OEDC104'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019 b'xf1x00OS MDPS C 1.00 1.04 56310K4050x00 4OEDC104'.json new file mode 100755 index 0000000000..bb7fd89979 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019 b'xf1x00OS MDPS C 1.00 1.04 56310K4050x00 4OEDC104'.json @@ -0,0 +1 @@ +{"input_std":[[7.2050185],[0.9195626],[0.5246053],[0.026908562],[0.9114053],[0.91469693],[0.9157698],[0.9051642],[0.89098597],[0.8697803],[0.84026057],[0.02667492],[0.026759142],[0.026839804],[0.02711494],[0.027168302],[0.027056737],[0.02683038]],"model_test_loss":0.012174735777080059,"input_size":18,"current_date_and_time":"2023-08-07_08-31-57","input_mean":[[17.967325],[0.011739178],[0.026453309],[-0.011081186],[0.0075463396],[0.009542315],[0.011502368],[0.022000773],[0.02539335],[0.027365072],[0.028902],[-0.011176858],[-0.011109888],[-0.0110546965],[-0.010866341],[-0.010897031],[-0.011053293],[-0.011188322]],"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.07830097],[-0.106249824],[0.012656421],[-0.7821596],[-4.5630274],[4.243537],[-0.025950456]],"dense_1_W":[[-0.0061698896,0.9194918,-0.00018699981,-0.34165612,-0.23813021,0.5475082,-0.3704561,-0.42950627,-0.13424502,0.21240903,-0.011586605,1.1467392,0.22920804,-0.97056633,-0.19121549,-0.14086221,0.1938753,0.06405196],[-0.017454816,0.94919956,-1.7687415,0.4144439,0.8393141,-0.34053108,0.591435,-1.1978676,-0.8482392,-0.29364696,0.25886354,-0.35653427,-0.13556425,0.47442123,-0.4813972,-0.018155526,0.33277246,-0.18364869],[-0.040766764,0.3978997,-1.3777528,0.16677733,-0.3166893,0.5034032,-0.571129,0.6231584,0.10250656,-0.090288945,-0.61956155,0.77258164,-0.37414613,-0.29708913,-0.17747499,0.037844185,-0.56138355,0.47048673],[0.008608961,0.64667994,0.023636322,0.044800144,-0.5491374,0.11336454,0.20036654,0.08956678,-0.33463073,0.093234874,-0.018535366,0.532879,-0.23179846,-0.06182031,-0.34088808,0.03265121,-0.2914414,0.30612496],[-1.8624474,-0.19170734,-1.0794584,0.2858776,-0.1582014,-0.25510505,-0.03886111,-0.35928875,-0.14603446,-0.5926313,0.2556083,-0.33798292,0.021711705,0.8842171,-0.400223,-0.5245886,0.14859252,0.14324439],[1.9104458,-0.11458521,-1.0961788,0.19383249,-0.31420794,-0.17993532,0.25383317,-0.7584393,-0.2644037,-0.38957348,0.24189566,-0.5495086,0.5854412,0.56651443,-0.59044236,-0.0595582,-0.07797032,0.15840146],[0.0036954198,0.69409066,-0.012849071,0.46628892,-0.17679054,0.4750851,0.1464102,-0.27525088,0.07638812,-0.2049708,0.18918438,-0.12693706,0.07179836,-0.335187,-0.066388905,-0.20065263,0.34333003,-0.1499994]],"activation":"σ"},{"dense_2_W":[[-0.13210453,0.08910437,0.112129636,-0.6724287,0.32233343,-0.38829568,-0.6956729],[-1.2644566,1.0245068,-0.37191963,-0.15572028,0.32260516,-0.31606585,-0.22227848],[-0.03247183,-0.47341025,0.4291947,0.39933267,0.13988854,-0.39599544,0.55437887],[-0.90225273,0.96759653,-0.16322282,-0.085484885,0.7531134,-0.113716386,-0.94529647],[0.48373836,-0.3832921,0.46859494,-0.18692574,-0.41694966,-0.53875446,0.5226155],[-0.67205244,0.7038471,0.22241417,-0.48700184,0.42653432,0.7408016,-0.48191002],[-0.45786425,-0.30025077,0.2096484,-0.34739977,-0.48270205,0.44449425,-0.16691647],[-0.7252935,0.30027175,-0.36952794,-0.33110753,0.74412864,0.31916663,-0.48723075],[-0.24956082,0.15855722,0.11829418,-0.35178453,0.20442583,0.10315542,-0.5577277],[0.60572875,0.15592562,0.2794675,0.13093506,-0.44617447,-0.35550103,-0.050321754],[-0.3681325,-0.061035957,-0.2969062,-0.47592452,0.4287097,0.3534037,-0.18543088],[-1.0721568,0.7378009,-0.9598528,-0.12334156,0.38073373,-0.10097934,-0.232853],[0.04294625,-0.63974065,0.42062205,-0.42591855,-0.27762684,0.15938188,-0.47567785]],"activation":"σ","dense_2_b":[[-0.30254075],[-0.22242764],[-0.022691285],[-0.24312088],[-0.06020819],[0.030239394],[-0.026921261],[0.007865209],[-0.22096242],[-0.037584588],[-0.26260158],[-0.1736811],[-0.039475847]]},{"dense_3_W":[[0.25513327,0.070872426,-0.110507585,0.3759061,0.35881704,0.3910026,-0.6006786,-0.03306147,0.493357,-0.46323946,0.03671056,-0.21105683,-0.39182687],[-0.43874225,-0.18637833,0.6820224,-0.62881595,0.27813682,-0.48058766,-0.5119805,-0.54016674,0.04924179,-0.08472005,0.53560334,-0.2701661,0.002975206],[-0.32438537,0.13052621,-0.6701673,-0.32776773,-0.35359666,0.3229217,-0.29717216,0.11487679,-0.066415556,-0.12536126,0.4941659,0.1786442,0.120943174]],"activation":"identity","dense_3_b":[[-0.036048852],[0.051064212],[-0.037224863]]},{"dense_4_W":[[-0.5492757,1.0810244,-1.2183135]],"dense_4_b":[[0.040853735]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019.json b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019.json new file mode 100755 index 0000000000..bb76193085 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2019.json @@ -0,0 +1 @@ +{"input_std":[[8.222069],[1.4015005],[0.5433659],[0.046245173],[1.3907557],[1.3952589],[1.3979354],[1.3851876],[1.3639251],[1.3265828],[1.2794514],[0.04593869],[0.04602148],[0.04609722],[0.046142124],[0.04606174],[0.04579012],[0.045302678]],"model_test_loss":0.009272297844290733,"input_size":18,"current_date_and_time":"2023-08-07_07-41-26","input_mean":[[21.305267],[0.004457678],[0.0094668595],[-0.012420628],[0.004529341],[0.005278159],[0.005986334],[0.00870795],[0.010163208],[0.009530685],[0.008663278],[-0.012377954],[-0.01237566],[-0.012378746],[-0.012456359],[-0.012550046],[-0.012720126],[-0.012910544]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.047097],[1.9158853],[0.17434227],[-0.97165537],[-0.10269022],[-0.9169131],[0.0008914754]],"dense_1_W":[[-0.88408405,1.235049,0.0426836,0.013424199,-0.08920125,-0.013397676,0.586178,-0.04885077,0.3810674,0.36573988,-0.3742023,-0.11406285,0.04956962,0.03306387,-0.10079546,-0.18288964,-0.018636217,0.16385865],[0.88075936,1.297032,0.032537315,-0.17033583,-0.09099818,0.4118023,0.12728553,0.14429076,0.1508224,0.15520132,-0.16594887,0.11192377,0.23395588,-0.301161,-0.2021957,-0.0027576552,0.08704741,0.086546],[0.7485217,0.44026893,-1.9140397,-0.17217009,0.059100352,-0.047859672,-0.5856153,0.44894385,0.22710915,-0.21913743,-0.29625463,0.322819,0.07943353,-0.022421572,-0.090653695,-0.444467,0.1394176,0.18164952],[0.4358342,-0.32757956,2.063401,0.20161365,-0.24610913,-0.3428621,0.6505693,0.016287383,-0.07427287,0.03351724,0.22633989,-0.3643204,-0.26658386,0.20206529,0.12288221,0.2783347,0.19327204,-0.36068434],[-0.0035009065,-0.72611684,-0.0082449615,-0.22654101,0.46806103,-0.34762052,-0.40569013,0.40099728,0.11805809,-0.16216965,-0.042650726,-0.89064217,0.21002078,0.642215,0.20523302,0.31924605,0.101329714,-0.13541093],[-0.41431567,0.11045769,2.0121331,-0.2800082,-0.054261006,0.11609053,-0.5194348,0.0039073634,0.18652305,-0.21063456,0.3278946,0.18608095,-0.043919813,0.063306555,-0.30901843,0.42117286,0.14100657,-0.16917707],[0.1144374,0.0647928,1.4224553,-0.33906898,-0.090644486,-0.5943667,-0.7509755,0.8212074,0.73758525,0.21148895,-0.4533185,0.18891388,0.058078196,-0.32458195,0.36525872,0.30673453,-0.21418211,-0.02886248]],"activation":"σ"},{"dense_2_W":[[-0.09611834,0.018518968,0.3276854,-0.29474196,0.07749839,-0.18393336,-0.108452864],[0.8463591,0.2765366,0.26273692,-0.542793,-1.3948811,0.38413918,0.13216402],[0.6448755,-0.9121937,-0.4041889,-0.44714126,-0.6450281,0.62885827,0.6442234],[-0.6492855,-0.59167993,-0.2413325,0.6629408,0.8960554,-0.16874227,-0.23902991],[0.25179657,-0.0052280165,-0.787087,-0.52129155,-0.7962139,0.5745307,0.5154668],[0.1658994,-0.14782484,-0.34189487,-0.24388146,0.26166263,-0.10471854,-0.98238224],[0.3014624,-0.11165519,0.1926479,-0.0071346364,0.12017147,-0.5179131,-0.42826292],[-1.3958447,1.0750867,0.51260227,0.5384232,-0.34655526,1.0435345,1.5503204],[0.40272388,0.12323784,0.24391593,-0.66794497,-0.92917013,0.24938683,0.35117647],[-0.37655634,-0.79549915,-0.7874939,0.049076214,0.16099943,-0.46943882,-0.46139815],[0.101291455,0.14885388,-0.42190292,0.31973553,0.7213091,-0.43006414,-0.27885658],[-0.32128662,-0.3569677,-0.5827871,-0.44924423,0.16653252,-0.70502335,-0.009819985],[-0.1346414,0.065946266,0.22599967,-0.71018034,-0.8050497,0.21156272,0.017037582]],"activation":"σ","dense_2_b":[[-0.15589215],[-0.28170976],[-0.38979664],[0.083457045],[-0.43890372],[-0.010706772],[-0.07441867],[-0.20225793],[-0.14819947],[-0.0007909137],[-0.0439504],[0.00047137964],[-0.0815142]]},{"dense_3_W":[[0.04960481,0.7185168,0.55996764,-1.1893424,0.63903844,-0.7087734,0.2795772,0.5947179,-0.12752935,-0.9978769,-0.25698617,-0.06704499,-0.04695985],[0.301456,-0.21193206,0.22014925,0.07238018,-0.24935168,-0.38614914,-0.53463185,0.41344443,0.122541234,0.4214228,0.2293029,0.506032,-0.25195587],[0.30665806,0.26296693,0.6493592,-0.4486736,-0.020275978,-0.3785944,-0.39404252,0.43909723,0.5369053,-0.4844059,-0.36188412,-0.6198387,0.2678705]],"activation":"identity","dense_3_b":[[-0.104795374],[-0.0101343505],[-0.022516306]]},{"dense_4_W":[[0.6437274,-0.14137705,0.8526488]],"dense_4_b":[[-0.020337932]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2022.json b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2022.json new file mode 100755 index 0000000000..4e71fbb643 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA ELECTRIC 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.980772],[1.3223853],[0.9268239],[0.024433661],[1.4122427],[1.3833307],[1.3508096],[1.2307118],[1.1849836],[1.1415477],[1.0909376],[0.024418019],[0.024408164],[0.024402233],[0.024252728],[0.024191827],[0.024145853],[0.023861935]],"model_test_loss":0.010252699255943298,"input_size":18,"current_date_and_time":"2023-09-01_20-45-00","input_mean":[[16.563862],[0.1111928],[0.6683766],[0.015079002],[0.0854696],[0.09152668],[0.09758363],[0.121493205],[0.14106716],[0.15788953],[0.16946313],[0.015242839],[0.01523548],[0.015225873],[0.015277851],[0.015472722],[0.015790224],[0.015869608]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.9736897],[-0.14363614],[0.085171],[-0.55840254],[0.055252872],[2.0375261],[-0.18923905]],"dense_1_W":[[1.5419508,0.4347514,0.022342844,-0.13883114,0.2409088,-0.12417678,-0.53509873,0.20153597,0.17858733,-0.19925015,0.06234279,0.24006103,-0.19976556,-0.18627135,0.45923752,-0.15200825,-0.08930177,-0.0050552515],[-0.030591678,0.13387124,0.17806397,-0.13424215,3.5386305,1.7213475,0.84962314,-2.7109919,-1.8677185,-0.9485388,0.11587285,-0.52675563,0.16423121,0.09590165,-0.005669875,0.12117092,-0.3104153,0.34291723],[-0.040051196,-0.90900606,0.033305887,0.48924676,-0.05219214,0.16458692,0.23944448,-0.65811116,-0.14248033,-0.040640995,0.23316579,-0.11273267,0.26166895,-0.3892416,0.20361155,-0.32397175,-0.04944256,0.12745105],[-1.8584498,0.5795085,0.0001561481,-0.3926851,-0.62748444,0.32592124,0.26113057,-0.18676938,0.15465672,-0.039395984,-0.11589895,0.3461765,-0.16687828,0.007636779,0.34468338,-0.24718969,-0.08537343,0.095972665],[0.008184925,0.29720604,0.12834367,0.24606115,-0.050453648,-0.14317429,0.01469496,0.10121035,-0.15977393,-0.071321785,0.14336964,0.1700991,0.15197535,-0.16201954,-0.27186736,-0.18587373,-0.29943192,0.31800416],[1.3913352,0.09059665,-0.06279646,0.282595,-0.5809931,0.06669835,0.31247872,0.33775496,-0.5383088,0.59837353,-0.45551175,0.69241804,-0.26237598,-0.25280276,-0.23810647,-0.60125524,0.035016667,0.40757436],[-0.020792918,0.8449914,-0.31495875,-0.18665223,0.2601113,0.23361494,-0.20227535,0.23019418,-0.36623937,-0.52237487,0.2838479,-0.23221277,0.23532006,-0.1258153,-0.1928124,0.17601454,0.39783114,-0.15201832]],"activation":"σ"},{"dense_2_W":[[0.47221714,0.016886314,-0.33116162,-0.06792718,0.35775667,-0.52708566,0.5025349],[0.9420784,-0.7130284,0.091753036,0.014161378,0.35075215,0.23026218,0.2984281],[0.1440958,-0.022310976,-0.63004696,0.21640168,0.8508171,-0.16760021,0.13965653],[-0.051360242,0.4106794,-0.88011396,0.61412853,0.7515858,-0.2784069,0.19800848],[0.5194753,0.046521883,-0.864117,-0.34576842,-0.21068099,-0.09319121,0.52076554],[-1.8818634,0.99190366,-0.5483396,0.07163825,-0.53633076,0.30430192,-0.43019328],[-1.7481059,1.364397,-0.05183877,0.26558736,-1.0966011,-0.21229754,-0.33233747],[-0.30067447,-0.19872609,0.59686613,-0.5647894,-1.0501944,0.8325608,-0.43664268],[0.59113705,1.348725,0.6290724,-0.6959389,-0.8086151,0.6735704,-0.24954763],[-0.4161925,-0.09258512,0.60084736,0.50538963,-0.20283572,-0.10547142,0.25737134],[0.26642272,0.27427554,-0.86675686,0.3761756,0.13520287,-0.49277586,0.023729336],[-0.057346545,0.40247637,-0.96133965,-0.24963704,0.4294661,-0.0321745,0.3121117],[-1.1896358,0.47296816,0.2525738,-0.41773388,-0.91891223,0.53242177,0.026586607]],"activation":"σ","dense_2_b":[[-0.06391301],[0.10446307],[-0.07552547],[-0.03267669],[-0.08992916],[-0.3635667],[-0.4151249],[0.16962343],[0.17003855],[-0.014166557],[-0.009087415],[-0.12204086],[-0.021121267]]},{"dense_3_W":[[0.11135484,-0.110632345,0.19104497,0.45092243,-0.58294576,-0.22749306,0.0548284,-0.20707788,-0.07605733,-0.5409419,0.18328355,0.36243346,0.48439535],[-0.4690379,-0.19305366,-0.2964049,-0.77543974,-0.26955664,0.62021655,0.51425976,0.6449075,0.6932653,0.29448414,-0.5598454,-0.47247913,0.639388],[-0.086130135,0.0662881,-0.39795497,-0.05040378,0.051303852,-0.38565347,0.81593895,0.65294117,0.45629048,-0.2787272,0.3136061,-0.34606743,0.6333548]],"activation":"identity","dense_3_b":[[-0.0200204],[-0.028796887],[-0.06285456]]},{"dense_4_W":[[-0.10954055,-0.93173796,-0.32423872]],"dense_4_b":[[0.031629298]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI KONA HYBRID 2020 b'xf1x00OS MDPS C 1.00 1.00 56310CM030x00 4OHDC100'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA HYBRID 2020 b'xf1x00OS MDPS C 1.00 1.00 56310CM030x00 4OHDC100'.json new file mode 100755 index 0000000000..89f76fc1e7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA HYBRID 2020 b'xf1x00OS MDPS C 1.00 1.00 56310CM030x00 4OHDC100'.json @@ -0,0 +1 @@ +{"input_std":[[6.320636],[1.4672288],[0.555081],[0.033456076],[1.4485593],[1.454114],[1.4598106],[1.4775645],[1.4885659],[1.5030168],[1.5086156],[0.033279758],[0.033330515],[0.03337976],[0.03357182],[0.03373127],[0.033942096],[0.034174994]],"model_test_loss":0.0034313653595745564,"input_size":18,"current_date_and_time":"2023-08-07_09-47-01","input_mean":[[16.719969],[-0.34553456],[-0.025382733],[-0.0116697345],[-0.3357296],[-0.33838782],[-0.34124425],[-0.34988672],[-0.35434204],[-0.36063692],[-0.36771125],[-0.01169898],[-0.011674334],[-0.01165932],[-0.011694122],[-0.011704462],[-0.011737361],[-0.011825235]],"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.12625436],[-0.030992975],[1.7781299],[0.1869105],[-1.89145],[0.008262398],[0.07576191]],"dense_1_W":[[0.009522326,-0.5508854,-0.03136063,0.029506687,-0.05980197,-0.63274986,0.97521657,-0.13758267,-0.011687601,0.08580122,-0.079591334,-0.6555507,0.22438921,0.28736886,-0.12301472,0.2645947,0.49559113,-0.4847965],[-0.018401735,0.37491256,0.0038027354,-0.07964615,0.38655296,0.3701792,-0.5896364,0.00059126964,0.04474745,0.26934335,-0.16293159,0.21059878,0.50954914,-0.18871093,-0.7607577,-0.2164596,0.43915057,-0.026766567],[0.9350977,-0.71919394,-0.3546374,0.20745265,-0.13460818,0.039738543,0.40334892,-0.07613035,0.030847827,0.008619683,0.08559006,0.15181334,0.12347329,-0.15474145,-0.24624701,-0.25018868,-0.195366,0.33170772],[-0.012065977,-0.27186581,0.051803753,0.2872634,0.20535347,-0.2876118,-0.20237778,0.08967258,-0.22776744,-0.11768601,0.09860908,-0.26557824,-0.34911528,0.6094111,0.072002344,-0.28330874,-0.15977615,0.20908129],[-0.94839776,-0.4837727,-0.37379816,-0.36139977,0.24034177,-0.30601895,0.071798995,-0.08959876,0.05900306,0.09905,0.025198964,0.03703683,0.15677285,0.38272214,-0.23764542,-0.28992912,0.1327766,0.1434804],[0.008056818,0.38128582,2.9280443,0.1751433,-0.3785394,-0.18362774,-0.77038676,0.3448695,0.30613825,0.60532063,-0.16727439,-0.08651086,-0.08615892,0.21958824,0.027262067,-0.003296754,-0.5401621,0.18965037],[1.0339775,0.45337832,-0.015582236,-0.0063054073,0.056368716,-0.30668864,-0.02802569,-0.19660905,0.43840367,-0.17627239,-0.030975454,-0.057090487,0.306885,-0.24460675,-0.060861766,0.19225666,-0.3149098,0.15006702]],"activation":"σ"},{"dense_2_W":[[0.6902859,-0.6393492,-0.44761193,-0.3838106,0.4084184,-0.509032,0.4051396],[-0.22254738,-0.08053956,-0.18914244,0.13284113,-0.6440283,-0.17699161,0.3351629],[-0.67853475,-0.18324746,-0.8725586,0.063068196,-0.50468117,0.4416853,-0.718201],[-0.21037722,0.026921168,-0.9217467,-0.5199083,-0.1263664,-0.42184907,0.10097415],[-0.4352312,0.13832696,-0.9440917,-0.61247665,0.11328457,0.5671792,-0.52296823],[0.39174297,-0.09831927,0.28159302,0.31369746,0.10481584,0.09035183,0.13667637],[-0.24003993,0.57464117,0.012518535,-0.31918442,-0.2873576,-0.105834864,0.13482167],[-0.1323263,-0.07528578,0.03620373,0.1001147,-0.34535193,0.2595585,-0.05328041],[-0.6540329,0.5568342,-0.3725302,-0.6058455,-0.09868532,-0.8560664,0.4088728],[-0.072663926,0.43851793,0.17612897,-0.22449215,-0.7815626,-0.23553626,0.42175516],[0.036100484,-0.17945322,0.7347332,0.62554735,-0.22215228,-0.49261123,-0.0353556],[0.4271888,-0.74014676,-0.46194273,0.3661966,0.7197653,-0.4986745,-0.6228453],[0.36488712,-0.13825116,-0.48768026,0.5608169,0.323051,-0.027168993,0.07831102]],"activation":"σ","dense_2_b":[[-0.027757965],[-0.016351482],[-0.024558742],[-0.085644595],[-0.046783354],[-0.07285203],[-0.0006671193],[-0.05067625],[-0.016443914],[-0.020814378],[0.03668154],[-0.20516597],[-0.048601683]]},{"dense_3_W":[[0.32911223,-0.26069397,-0.043751866,-0.48354477,-0.07570592,-0.33116663,-0.4901479,-0.13365264,-0.6457748,-0.36664736,0.58490235,0.1868273,-0.45664176],[-0.34076023,0.24871762,0.6651098,-0.2161779,0.12477483,0.10071758,0.59505385,-0.081202336,-0.16617194,0.083364025,-0.6090697,-0.2990762,0.18049675],[0.35747406,-0.3925092,-0.20388703,-0.22220151,-0.6932658,0.40903154,-0.59456044,0.10416559,-0.23720811,-0.17813742,0.5602839,0.33316627,0.6221551]],"activation":"identity","dense_3_b":[[0.03296679],[-0.010274947],[0.0053764265]]},{"dense_4_W":[[-0.38123104,0.6776871,-1.0605929]],"dense_4_b":[[-0.008991764]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI KONA HYBRID 2020.json b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA HYBRID 2020.json new file mode 100755 index 0000000000..efc9e3a294 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI KONA HYBRID 2020.json @@ -0,0 +1 @@ +{"input_std":[[6.320446],[1.4674793],[0.55242187],[0.033747878],[1.4499153],[1.4551026],[1.4600143],[1.4764196],[1.4860643],[1.4978211],[1.5023137],[0.033594012],[0.033627346],[0.03367146],[0.033806257],[0.033919122],[0.03404663],[0.03421485]],"model_test_loss":0.0031593828462064266,"input_size":18,"current_date_and_time":"2023-08-07_09-20-56","input_mean":[[16.720589],[-0.3453631],[-0.01988461],[-0.011758546],[-0.33604637],[-0.33879158],[-0.34137574],[-0.34826595],[-0.34946606],[-0.35428008],[-0.36132792],[-0.011764421],[-0.011732091],[-0.0117199095],[-0.011728072],[-0.011719623],[-0.011750716],[-0.011823986]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.50939155],[0.3405257],[1.6462622],[-0.10843948],[0.285203],[0.037651468],[1.8082677]],"dense_1_W":[[0.024142604,-0.21203998,0.026902797,-0.026592031,-0.5052848,0.08084745,0.060381155,0.07824176,0.1476794,-0.31446207,-0.05622627,-0.24280141,-0.013746504,0.012400391,0.17171621,0.29621166,-0.28375784,0.05738833],[0.1768927,-0.29521623,-0.025311217,-0.092430666,0.28460526,-0.617111,0.49956995,-0.3885511,-0.2726708,0.20527962,0.14372464,0.26093155,0.14992015,-0.31772944,0.08945775,-0.09835619,0.31046915,-0.10769861],[0.97614205,0.4236573,0.38003942,0.49241897,0.51790404,0.053766027,-0.80027264,0.26498482,0.05449548,-0.26899186,0.087867126,0.12839077,-0.05710694,-0.66316336,-0.0033742453,0.2792481,-0.11627638,-0.041489422],[-0.0015497641,0.8673382,3.263093,-0.1707162,-0.6192832,-0.67156154,-0.04999914,0.14607337,-0.06100974,0.58493054,0.15063228,-0.05193594,-0.29414734,0.3289635,0.39314392,0.074083135,-0.25906774,-0.1849865],[0.047487535,0.6483187,-0.012538455,-0.38905606,-0.18153276,0.44709945,-0.5075622,0.21219371,0.068916075,0.25938293,-0.17245348,0.1482799,0.40387914,-0.40022132,0.06770608,0.36847785,-0.026828244,-0.16214016],[0.037951373,0.24962443,0.020283377,-0.0035552767,0.30666018,0.1413196,-0.38893646,0.35808158,-0.032923326,-0.071178645,-0.048781518,0.5162438,0.4610186,-0.7228655,-0.49375764,-0.21811645,-0.19861159,0.40984872],[0.9250359,-0.70112437,-0.36471853,0.0054842713,-0.09402759,0.082544014,0.30093822,0.16678151,-0.2748682,0.18376616,0.04107111,-0.25604424,0.42679307,-0.053103805,0.16130999,-0.40664944,-0.032497868,0.13323294]],"activation":"σ"},{"dense_2_W":[[-0.90112615,-0.4810132,-0.08950426,0.36772704,0.4500673,0.052173443,-0.77481836],[-0.3288408,-0.36183703,0.39837834,-0.19830135,-0.0052449205,-0.4256783,-0.3807343],[0.15238899,-0.52871466,-0.98836666,-0.46207833,-0.9737017,-0.7437858,0.3818713],[-1.0859724,-0.48526433,0.24535194,0.05596006,0.093554944,0.21621844,-0.53195745],[-0.7163611,-0.30886292,0.12716919,-0.4154194,0.37423986,0.9259443,-0.379039],[0.19235164,-0.15816337,-0.017028,0.31888407,-0.28815588,-0.8377302,0.39304262],[0.47231472,-0.08212948,-0.7769114,-0.7738407,-0.48245203,-0.7427551,-0.27572083],[0.2869671,-0.016490303,-0.70185846,-0.34122148,-0.2529159,-0.1406588,-0.40547752],[0.20577213,0.14548963,-0.52808815,-0.30710357,-0.35618016,0.13128263,0.33525097],[-0.17195134,0.3418375,0.095633924,-0.17584541,0.12383485,-0.8438437,-0.021029431],[-1.5742979,-1.0980865,0.13949709,1.2328507,0.30790532,-0.25942948,-1.8909296],[-0.11482437,-0.42623624,-0.34017542,0.49576285,-0.00045646817,0.61140454,-0.84245527],[0.03065336,-0.3165987,0.31627032,0.23499563,-0.5419005,-0.6005879,-0.44092956]],"activation":"σ","dense_2_b":[[-0.06588],[-0.24751721],[-0.036043685],[-0.08081857],[0.042379994],[-0.12687257],[-0.1196205],[-0.103857085],[-0.11169459],[-0.13132711],[-0.12644218],[-0.14405167],[-0.09716702]]},{"dense_3_W":[[-0.25552472,0.4888721,0.66748166,-0.059414074,-0.47127432,0.0070313723,0.562616,0.4663864,-0.12562452,0.27339113,0.011626089,-0.3627435,-0.31609577],[0.31728745,-0.048127633,0.3010577,-0.029504294,-0.633934,0.2603854,0.015562987,0.09305088,0.3503609,-0.30416068,-0.382153,-0.5815462,0.3423376],[0.512647,0.6342511,-0.7857153,0.26010734,-0.111801334,-0.24562247,0.19410154,-0.17319192,-0.4143214,-0.04857833,0.5264786,-0.41035476,-0.4759939]],"activation":"identity","dense_3_b":[[-0.053302422],[-0.044913977],[0.05779919]]},{"dense_4_W":[[-1.0770125,-0.37417558,0.8556539]],"dense_4_b":[[0.050846685]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.03 56310-S8020 4LXDC103'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.03 56310-S8020 4LXDC103'.json new file mode 100755 index 0000000000..bc74f44fbe --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.03 56310-S8020 4LXDC103'.json @@ -0,0 +1 @@ +{"input_std":[[8.175346],[1.2147926],[0.40956834],[0.043589003],[1.2094305],[1.2120428],[1.213341],[1.1980789],[1.1770303],[1.1413853],[1.096605],[0.043463618],[0.043503705],[0.043532778],[0.043430444],[0.043218896],[0.04280715],[0.04230417]],"model_test_loss":0.007078256458044052,"input_size":18,"current_date_and_time":"2023-08-07_10-44-09","input_mean":[[23.77826],[0.042549085],[0.0008366095],[-0.004325034],[0.041777823],[0.04188725],[0.04202964],[0.04286655],[0.041103654],[0.037775554],[0.035643935],[-0.0043570427],[-0.0043655117],[-0.0043805246],[-0.004415017],[-0.004466785],[-0.004567743],[-0.0046552946]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.965341],[-1.3328798],[2.873564],[0.35027432],[0.6997454],[-0.21583362],[-0.27257147]],"dense_1_W":[[-0.47184834,-0.69497913,-0.2730397,-0.13578247,-0.41297266,-0.36849588,0.45024145,-0.2319935,-0.30260193,-0.15122801,-0.51926386,-0.45438546,0.07730465,0.5861091,-0.020928165,0.48080453,0.056900945,0.042121172],[0.59712833,-0.7607585,0.026460258,0.32494903,-0.122338474,-0.1373476,0.071163654,0.1314587,-0.12158134,-0.2506838,0.13905102,-0.7858368,-0.19018257,0.18298808,0.830341,0.3877357,0.040660307,-0.34048963],[0.4699344,-1.0309892,-0.29336283,-0.13386539,-0.38560688,0.13875784,0.310352,-0.46929145,-0.19158518,-0.39478084,-0.32203192,-0.44451842,-0.03810472,0.13355829,1.0309442,0.12171281,0.06862913,-0.056783624],[-0.31507948,0.88658756,3.0891764,-0.016361725,-0.46861553,0.06094547,-0.7714304,-0.1749589,0.7333911,0.28544956,-0.52014995,0.7543131,-0.18914306,-0.438352,-0.09483591,-0.10935197,0.06640237,0.10865169],[-0.6810932,-0.62288636,3.2094796,0.23221104,-0.025693255,-0.024708634,0.39303362,0.26580834,0.01109397,-0.008134186,-0.011310946,-0.16316406,-0.22316264,0.030972356,0.5338975,-0.17917001,0.2126686,-0.2364076],[0.11154792,0.45386994,-0.0020048814,-0.13927853,0.20206624,0.26231214,-0.5960362,0.5244008,0.074492626,-0.26563543,0.07578456,0.25490692,0.20137514,-0.46869782,-0.06294161,0.13251714,-0.106802404,-0.038976945],[0.04923776,-0.56570596,-0.023485426,0.31115237,-0.015669545,-0.54184866,0.43453303,-0.05844923,-0.059031844,-0.3202865,0.20897299,-0.4897307,-0.5586684,0.590096,0.2163083,0.06288182,-0.15607044,0.043854684]],"activation":"σ"},{"dense_2_W":[[0.6042513,-0.41607365,-0.15501793,-0.9058375,0.494895,-0.5677933,-0.19259822],[0.24214138,0.89813733,1.3278699,-1.0037,-0.27477452,0.15186948,0.82211167],[-0.4369761,-0.27131867,-0.46790847,0.4080189,0.12101331,0.57774526,-0.6197042],[-0.3105224,0.19357671,-0.5197163,-0.1386291,-0.3751452,0.76656866,-0.42951363],[0.4263876,-0.19077252,-0.45208168,-0.2320784,0.2086758,-0.11445575,-0.5586836],[0.1574424,-0.08930149,-0.025565622,0.11400002,0.07183162,0.33150333,-0.67951137],[-0.00696618,0.02959456,-0.30796584,0.09413716,-0.016803082,-0.2540206,-0.64932644],[-0.478996,-0.22900066,0.17936084,0.51007396,-0.27805895,-0.19075584,0.362384],[0.011149391,0.36451602,0.42717254,-0.2344727,0.6348016,-0.77200013,-0.15786803],[0.43334863,-0.38772285,-0.4590563,0.33910498,-0.32742906,0.5451967,-0.672129],[1.9660255,0.25045738,-0.2614816,-1.1789049,0.25753427,-1.7329595,0.075383596],[0.80854565,0.44739807,0.09770806,-0.48315546,-0.13119374,-0.7300847,0.13286975],[0.11956496,-0.28744987,0.3014693,-0.28274173,0.52113587,-0.47521448,0.35999197]],"activation":"σ","dense_2_b":[[-0.1408794],[-0.06288287],[-0.012260787],[0.08074568],[0.02582188],[0.002878733],[-0.238239],[0.022335405],[-0.08137566],[0.048318516],[-0.48222473],[-0.11309628],[-0.17126083]]},{"dense_3_W":[[0.5729494,0.443129,-0.5894581,-0.52491343,-0.10086044,-0.36603114,0.09061523,-0.0777708,0.45014396,-0.44782442,0.61933756,0.6175609,0.5284045],[0.60463345,0.24479416,-0.64297765,-0.64166015,0.07398127,-0.23124957,0.013111015,-0.58013326,0.60139996,-0.5977943,-0.31441298,-0.034418926,0.5766632],[-0.41230297,0.0819272,0.021512562,0.40312076,0.5106018,-0.0969059,0.306975,0.06700377,-0.34809703,0.48136255,-0.21470276,0.09597008,0.49942]],"activation":"identity","dense_3_b":[[-0.04435611],[-0.025747824],[0.027492581]]},{"dense_4_W":[[-0.851287,-0.29851007,0.48474476]],"dense_4_b":[[0.038550936]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.04 56310-S8020 4LXDC104'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.04 56310-S8020 4LXDC104'.json new file mode 100755 index 0000000000..4e0dfca188 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.04 56310-S8020 4LXDC104'.json @@ -0,0 +1 @@ +{"input_std":[[8.056006],[1.4101361],[0.41225532],[0.045771565],[1.4047778],[1.4076663],[1.4089199],[1.3933164],[1.3716278],[1.3344857],[1.2923727],[0.04557442],[0.045628536],[0.045675997],[0.045730982],[0.04567293],[0.04542135],[0.045018636]],"model_test_loss":0.00867381040006876,"input_size":18,"current_date_and_time":"2023-08-07_11-10-56","input_mean":[[25.56377],[-0.052645843],[-0.0035276904],[-0.013127003],[-0.051226523],[-0.05180752],[-0.052373447],[-0.05199156],[-0.051400427],[-0.052954886],[-0.052905556],[-0.013169344],[-0.013158662],[-0.0131510245],[-0.013154536],[-0.013176389],[-0.013252023],[-0.013282005]],"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.68120617],[-1.2007718],[-0.50614536],[0.7864571],[1.8299532],[0.14825825],[-0.015340148]],"dense_1_W":[[1.1199652,-0.078471795,-0.02101174,0.3584074,0.17968981,-0.19903003,0.12223812,0.18867153,-0.1669939,0.012081453,-0.10156123,-0.16801898,0.13951854,-0.04682727,0.040429268,-0.04173933,0.19039303,-0.07381891],[-0.18552107,-0.63688856,-0.02137382,0.20457703,-0.29974234,-0.55259144,0.45336398,-0.021133235,0.01901811,-0.37169448,0.13456118,-0.3071185,-0.22914943,0.61524135,-0.27383205,-0.1330443,0.14043514,0.08927942],[0.1926113,-0.27000305,-0.008649953,-0.21855511,-0.030888382,-0.16513677,0.39715445,-0.30844018,-0.017153203,0.093351975,-0.012528175,-0.35072303,-0.10748886,0.113659255,0.49542776,0.28211826,0.23563762,-0.4190026],[0.9724377,0.5390427,0.01619258,-0.3782754,-0.13919044,-0.18610589,-0.25080666,0.039643906,-0.23925631,0.45390597,-0.16189374,-0.15735695,0.32372928,-0.49280795,0.13093178,0.40426654,0.30928588,-0.4606705],[0.31533858,-0.32204363,-0.031351704,0.25225377,-0.6184541,0.012579387,-0.013788457,-0.2484758,-0.38601685,-0.37180173,0.30587637,-0.41104367,-0.06381989,0.28475899,-0.11201605,0.15005648,-0.02408876,0.070196375],[-0.05559003,-0.57731414,0.0009183374,-0.15830034,0.32752046,-0.47376716,0.32692105,-0.028732348,-0.3711419,0.3037169,0.026518416,-0.16056052,-0.086504,0.080008745,0.2828945,-0.017448967,-0.06945115,-0.020946816],[-0.01733753,0.7237506,3.472701,0.27271795,-0.40486532,0.056092504,-0.24601175,-0.052139923,0.16743213,-0.068572104,-0.00896937,0.2883757,0.5440398,-0.29913893,-0.3024588,-0.5673238,-0.2726739,0.35933533]],"activation":"σ"},{"dense_2_W":[[-0.5932156,-0.17436917,-0.86359346,0.32812464,-0.7771405,-0.2133228,0.42944756],[-0.21486568,0.017540466,-0.3076961,-0.040222447,0.12777315,0.01670594,-0.72814006],[0.037832227,-0.3021096,-0.43493658,0.2691959,0.002386393,-0.90290415,-0.8527598],[-0.05667615,0.4105785,0.43791267,-0.66102684,0.19379678,0.0034966974,-0.63614714],[-0.24539289,-0.2868011,-0.971667,0.74372065,0.0054125004,-0.70493174,-0.27502376],[0.22307737,1.1438144,0.48204678,-1.34653,-0.48455057,0.64900017,-0.72665155],[0.47112092,1.0107919,0.5427512,-1.2793072,-0.42651054,0.5067852,-0.5551137],[-0.7673742,-0.6745484,-0.99198294,-0.41266263,-0.4100962,-0.174795,0.5818804],[0.0852762,0.18207242,0.8183619,-0.5843856,1.0058954,0.18574238,0.08424301],[-0.08769919,0.5601262,0.5962264,-0.0019132155,0.8132487,0.6793232,0.17075731],[-0.7578988,-0.79018444,-0.47751963,0.36069503,-0.040583238,0.050442085,0.2954631],[-0.4815163,-0.32178232,-0.15335134,0.6915401,-0.60536283,-0.56515604,-0.20786098],[0.2656557,0.9920723,0.4726771,-1.0218889,-0.14299747,0.23651631,-0.15890613]],"activation":"σ","dense_2_b":[[0.026248137],[-0.44299766],[0.043020185],[-0.44655073],[0.21503547],[-0.51649547],[-0.52930456],[0.09336591],[-0.2554213],[-0.28878778],[0.1169097],[0.3210494],[-0.4154725]]},{"dense_3_W":[[0.41299453,-0.066272356,0.33743006,-0.20297222,0.3149677,-0.66625124,-0.47435388,0.87357444,-0.46995607,-0.6577897,0.6913372,0.8391053,-0.41768512],[0.21756826,-0.04198229,-0.34622204,-0.077409394,0.36491418,0.34946445,-0.16554481,0.25513986,-0.21913688,-0.49385577,-0.107037865,0.13471128,0.3483314],[-0.65252286,-0.4097913,0.49876347,-0.57664716,-0.16723605,-0.40482098,-0.10828655,-0.3436007,0.1842379,0.20728882,-0.73673856,0.11894116,0.22566953]],"activation":"identity","dense_3_b":[[0.09075453],[0.16417536],[-0.034160458]]},{"dense_4_W":[[1.3366597,0.032031875,-0.25315842]],"dense_4_b":[[0.08058132]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.04 56310-S8420 4LXDC104'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.04 56310-S8420 4LXDC104'.json new file mode 100755 index 0000000000..f115f5f8a5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00LX2 MDPS C 1.00 1.04 56310-S8420 4LXDC104'.json @@ -0,0 +1 @@ +{"input_std":[[9.973073],[0.95391583],[0.41054899],[0.04000471],[0.948944],[0.9501768],[0.9511314],[0.94470316],[0.9386586],[0.9273338],[0.9128515],[0.039655894],[0.039748702],[0.039835606],[0.040048752],[0.040042162],[0.039870463],[0.039569415]],"model_test_loss":0.006820903159677982,"input_size":18,"current_date_and_time":"2023-08-07_11-35-32","input_mean":[[25.87563],[0.03444932],[-0.005718268],[-0.0067776064],[0.035757456],[0.034977943],[0.03397304],[0.032574583],[0.033818536],[0.035891917],[0.03648409],[-0.0067452686],[-0.0067759207],[-0.0068118596],[-0.0069498047],[-0.0070627993],[-0.0072338316],[-0.0074106893]],"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.29337177],[0.66558135],[1.4415557],[-0.5266783],[0.16447654],[-0.10947574],[-0.06639086]],"dense_1_W":[[0.005461846,0.3028855,-0.9854084,-0.36890888,-0.53238684,0.52668965,-0.25776407,0.22581728,0.46904722,-0.04119145,-0.3861126,0.05695158,0.46752244,-0.22415254,0.03926628,-0.30610013,0.33170545,-0.08449963],[0.22456734,0.3669208,-0.0028302418,0.03447742,0.23297563,0.29559872,-0.5093176,0.085083686,-0.2612917,0.48527485,-0.1594518,-0.00450076,-0.21800643,0.43129826,-0.35478443,0.33027887,-0.5035417,0.14951973],[0.49297655,0.15207167,-1.0634992,0.11992674,-0.119991384,-0.032969154,0.3350461,-0.05330331,0.2389221,-0.31744695,-0.019832905,-0.011234121,-0.19565247,0.27552214,-0.02907322,-0.20475934,-0.27375516,0.22658962],[-0.2927863,-0.25061154,-0.86077774,0.38277695,0.46133354,-0.24130213,0.49445266,-0.30399632,-0.16158967,0.27781072,-0.081007525,-0.2356671,-0.027503187,-0.046890937,-0.062831424,0.13332452,-0.20753789,0.0064896126],[0.14027123,-0.31178385,0.00042652222,0.046416104,-0.06375891,-0.7625973,0.49403247,0.08477962,0.19782965,0.06535667,-0.2237524,0.00016943947,-0.4144055,0.47161788,0.22153234,-0.3320155,-0.17704901,0.29443938],[0.038497016,-0.37529072,-0.0028597962,0.108154766,0.060559765,-0.06721315,0.19045271,0.049022302,-0.2868929,-0.24597946,0.20001437,-0.54507667,0.13740665,-0.09072125,0.15628168,0.4834033,0.5418541,-0.52194417],[-0.084147945,0.7816322,3.3733516,-0.17901123,-0.5475804,0.13706692,-0.5615205,0.06558603,-0.15445961,-0.041518424,0.07307288,0.54342633,-0.091437295,-0.04500106,-0.18742481,-0.11182337,-0.32038802,0.37347284]],"activation":"σ"},{"dense_2_W":[[-0.33089092,-0.22617778,-0.2098423,0.464438,0.4536977,0.6569846,-0.11208219],[0.42292553,0.72667843,-0.3986618,-0.48419535,-0.89743257,-0.45015466,-0.03912514],[0.15107515,0.95479184,0.40600297,-0.19311583,-1.0210984,-0.8584778,0.5974732],[0.0047267857,0.15918939,0.07144057,-0.35448834,0.637432,0.184555,0.18535456],[-0.12454911,0.29654753,-0.34574932,0.34942415,-0.26024386,0.44442993,0.14613877],[-0.37099168,-0.5386991,-0.3271315,0.54532915,0.6926416,-0.17912938,-0.6608735],[-0.63072056,-0.3643776,0.64305526,-0.29544187,0.7246565,0.56209284,-0.16261125],[-0.04684182,0.7014187,0.08467743,-0.5152171,-0.0669242,-0.09466255,0.2614267],[1.1972748,0.91310155,-0.61666393,-0.3711597,-1.1699697,-0.8451692,-0.5264526],[-0.17695586,-0.7369236,0.15112078,0.4462285,0.8489584,-0.19433662,-0.18448965],[-0.53724587,0.017794129,0.4338191,0.24491285,0.36948907,0.70015615,-0.30459952],[0.757806,-0.034863185,-0.77135277,-0.2933871,-0.27939826,-0.9393837,0.2961518],[0.43675852,0.053857032,0.498965,0.37739882,0.4588103,-0.37056544,0.14442298]],"activation":"σ","dense_2_b":[[-0.06206714],[0.07846223],[0.107750826],[-0.046243668],[-0.033654705],[-0.035633843],[0.015834749],[0.017618928],[0.04875132],[-0.032331567],[-0.041599613],[-0.009607665],[-0.095047034]]},{"dense_3_W":[[-0.27053934,-0.5599827,-0.5261372,0.5703626,0.2743929,0.6257322,0.3774779,-0.20829831,-0.4448903,0.6131186,0.29582694,-0.49130827,-0.046639528],[0.2578624,-0.83337194,-0.027313164,-0.29705286,-0.3806988,-0.019476013,0.53997874,-0.44911963,-0.4572695,0.39203748,0.4073216,-0.5038811,0.19435048],[0.5505637,-0.52018625,-0.22615957,-0.042771284,0.30023396,0.07614445,-0.36263672,-0.5696729,-0.15394297,0.29655027,0.5070545,-0.16651826,0.013556858]],"activation":"identity","dense_3_b":[[0.004786969],[0.017816467],[0.008341951]]},{"dense_4_W":[[-0.70178753,-0.6261923,-0.58992994]],"dense_4_b":[[-0.009440654]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00ON MDPS C 1.00 1.00 56340-S9000 8B13'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00ON MDPS C 1.00 1.00 56340-S9000 8B13'.json new file mode 100755 index 0000000000..3583885a42 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00ON MDPS C 1.00 1.00 56340-S9000 8B13'.json @@ -0,0 +1 @@ +{"input_std":[[7.6636677],[1.0415155],[0.4405441],[0.03810654],[1.0415744],[1.0396914],[1.0376655],[1.0191053],[1.0017574],[0.9810815],[0.9587672],[0.03804814],[0.038069014],[0.0380983],[0.038099322],[0.037983626],[0.037768982],[0.037503105]],"model_test_loss":0.0070123192854225636,"input_size":18,"current_date_and_time":"2023-08-07_12-25-32","input_mean":[[24.58516],[-0.053356342],[0.0018561187],[-0.028318454],[-0.052350596],[-0.05162282],[-0.050804704],[-0.052188896],[-0.050713386],[-0.048506834],[-0.04722293],[-0.028366687],[-0.028323544],[-0.028278554],[-0.028274836],[-0.028321512],[-0.028377615],[-0.028479535]],"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.40149847],[-0.036968376],[2.9324126],[-0.050440587],[-1.6624343],[-3.111909],[-0.08347813]],"dense_1_W":[[-0.2231008,0.43419427,-0.008418177,-0.25645596,-0.27315116,0.3730735,-0.56420225,0.531981,0.050561436,0.049857076,0.01984278,0.15615726,0.14532468,-0.1341266,-0.14356773,0.022001041,-0.47281718,0.04480727],[-0.3699377,-0.8539471,-0.011191063,-0.03840326,0.5528697,-0.5095522,0.79292774,0.53987986,0.3397071,0.09874697,0.16869819,-0.20077275,-0.38679546,0.18692482,0.27885512,-0.3531348,-0.11918749,-0.47793227],[0.44518143,-0.8884128,-0.12010096,0.2840199,-0.01654247,-0.37926447,0.6241959,-0.3588111,-0.18594895,-0.37540522,-0.1184817,-0.28526396,0.09523298,-0.08844218,0.28927204,-0.030794572,-0.22434682,0.02950121],[0.051157415,-1.5702069,-3.6776006,0.07019505,0.37266773,0.20280795,0.16947661,0.08074228,-0.93735164,0.26037607,1.2727387,-0.5875368,0.118953235,-0.052235976,0.5290898,0.0075836885,0.2145108,-0.341396],[0.8406824,-0.6357117,-0.012508759,-0.114874125,0.22464035,0.6901549,0.30033943,0.15118437,0.42181274,0.32857767,0.35121942,0.5021367,-0.826353,-0.3353306,-0.15846261,0.104648225,-0.16137573,-0.854983],[-0.48347813,-0.9890036,-0.12638868,0.4244501,0.22061923,-0.6496192,0.73929363,-0.2879861,-0.27470425,-0.47338513,-0.026745116,-0.7317621,0.03403621,0.31189573,0.43235132,-0.16640383,-0.20338999,-0.027866011],[-0.0053826473,-0.8913341,0.00012506823,0.27318633,-0.0037789296,-0.86155355,0.40793747,0.27253038,-0.080729984,-0.031735364,-0.02203216,-0.15663473,-0.13908623,-0.0398157,0.14052938,0.24337272,-0.40471002,0.18925937]],"activation":"σ"},{"dense_2_W":[[0.30025923,-0.26395065,-0.6900893,0.12076107,-0.27104673,-0.4204864,-0.12814534],[-0.59520245,-0.31921673,0.12515253,-0.10728783,0.30437303,-0.44225642,-0.7510248],[-0.97030437,0.091399565,1.041651,0.5298835,0.12482943,-0.39294013,0.3376671],[-0.35264635,0.030865038,-0.043722976,-0.25330108,-0.47328326,-0.044327017,0.23717652],[0.45056573,0.22202963,-0.79909515,-0.29515973,-0.34452644,-0.12819465,0.28630367],[-0.1962231,-0.06441422,-0.3860033,-0.45442382,0.5523658,-0.37580812,0.17132744],[0.15821941,-0.65717125,-0.29991794,-0.23657624,0.30773747,-0.4825543,0.3368553],[0.44671333,-0.23616415,0.060102407,-0.4938546,0.5823045,0.030239027,-0.5907059],[-0.7725862,0.65374887,0.99496603,-0.52427566,-0.74721336,1.1665807,0.485246],[0.5747518,-0.54922277,-0.4279965,-0.32235864,-0.39549112,-0.63029706,0.08336972],[-0.6286281,0.53232676,0.09173603,-0.3197821,-0.58844185,0.6930728,0.89978975],[-0.8540552,0.23237345,0.01174916,0.02329381,-0.21082848,0.4638076,0.61707777],[-0.38213924,0.12289726,0.02848087,-0.2358143,-0.09083596,0.68827146,0.39511114]],"activation":"σ","dense_2_b":[[0.007899074],[-0.24461511],[-0.17740962],[-0.0007998822],[-0.01197454],[0.04764368],[-0.017339833],[0.072300844],[-0.23241436],[0.096137755],[-0.14189208],[-0.18733168],[-0.09664416]]},{"dense_3_W":[[0.49906957,0.43125764,-0.0050584874,0.29804975,0.15355866,-0.29560578,0.35590634,0.5839829,-0.59895027,0.1900103,0.30921668,-0.6190028,0.016287152],[-0.09681585,-0.42354482,-0.550485,-0.07733479,0.41151676,0.5945164,-0.04800964,0.37133008,0.010906173,0.52148324,-0.5151786,-0.2838045,-0.49523494],[-0.25222576,-0.27630806,0.11442517,-0.29334897,-0.17029618,-0.20770106,-0.042667136,0.15740934,0.22484288,-0.6796396,0.36673924,0.31320038,0.2187441]],"activation":"identity","dense_3_b":[[0.041152943],[0.050569043],[-0.04529463]]},{"dense_4_W":[[0.6610413,0.93398947,-0.9665046]],"dense_4_b":[[0.04895585]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00ON MDPS C 1.00 1.01 56340-S9000 9201'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00ON MDPS C 1.00 1.01 56340-S9000 9201'.json new file mode 100755 index 0000000000..17e7de42ee --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020 b'xf1x00ON MDPS C 1.00 1.01 56340-S9000 9201'.json @@ -0,0 +1 @@ +{"input_std":[[8.31745],[1.1132171],[0.47852853],[0.042235937],[1.1178341],[1.1160868],[1.1140894],[1.0932467],[1.0700195],[1.0378196],[1.0042937],[0.042053793],[0.042099174],[0.042147044],[0.04229224],[0.042290386],[0.04213167],[0.04170115]],"model_test_loss":0.007971670478582382,"input_size":18,"current_date_and_time":"2023-08-07_12-50-19","input_mean":[[22.745663],[-0.02314496],[0.006329487],[-0.007906635],[-0.024401885],[-0.024847621],[-0.024651228],[-0.020919092],[-0.019033547],[-0.014008034],[-0.00841008],[-0.007998144],[-0.007991008],[-0.007984672],[-0.007925103],[-0.007978865],[-0.008057719],[-0.008112883]],"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.10009004],[-2.4347603],[-0.45647046],[-0.26168102],[0.4559833],[-2.3471363],[-0.024856634]],"dense_1_W":[[0.00685374,0.29781812,-0.0045040743,-0.2483261,0.36356887,0.7941921,0.115958326,-0.303391,-0.31066865,-0.4133796,0.5499007,0.6501906,-0.06862256,-0.59767103,0.10247653,0.22389303,-0.0670222,0.012925103],[-0.43374088,0.95874643,0.010345864,0.029017475,-0.63670444,0.31695086,0.07258637,0.13453023,0.47587368,0.46790752,-0.30345193,0.46282083,-0.093325965,-0.0597011,-0.52926123,-0.23205075,0.21186207,0.15266287],[-0.010350411,0.40709472,0.0041358415,0.5390394,-1.0806609,0.64311004,-0.09017517,-0.18798684,-0.12183539,0.010223074,-0.05575936,0.11231753,-0.13522181,0.09871264,0.1674028,0.2260443,0.92522573,0.22312124],[0.20998508,-0.7601628,0.0044564125,0.0017229705,0.8512942,-0.2566007,-0.22104141,-0.06553982,-0.23601292,-0.25825587,0.37305197,-0.1024032,-0.36825082,0.21398295,0.9294358,0.4860802,0.548133,-0.0834842],[0.37757793,0.6797055,-0.004590874,-0.56208813,-0.2976163,0.6580122,-0.56625277,-0.09451766,0.17261557,0.19591618,-0.17517307,0.20502836,-0.16963857,-0.29324597,-0.00045291794,0.17973329,-0.5582203,-0.4135608],[-0.43611768,-1.3107734,-0.009830083,0.20460518,0.74073887,-0.54199576,0.2283278,-0.0015428674,-0.17581679,-0.8339866,0.4044754,-0.4352709,-0.3658589,0.2867904,0.8084769,-0.29901847,0.13045451,-0.26202014],[-0.00031012832,-0.38003787,-2.2669997,0.3342903,0.09606713,-0.04249713,0.8710125,-0.60461634,-0.725245,0.3113496,0.45141265,-0.7288661,-0.29998294,0.6268596,0.084224634,-0.021362655,0.14650373,-0.14192608]],"activation":"σ"},{"dense_2_W":[[0.6022557,0.12733772,0.5688971,-0.47040647,-0.19734168,-0.25412557,-0.64506894],[-0.87848234,-0.2927233,-0.38882446,0.01753978,-0.66094726,-0.009080832,-0.046852414],[-0.6812371,-0.12201253,-0.17657526,-0.14278913,0.10146227,-0.33213505,-0.42730355],[0.5288182,-0.1530913,0.2752494,0.21740611,0.08138198,-0.79552627,-0.09336282],[-0.67439306,-0.7681033,-0.25968102,0.10087962,-0.073134035,0.74803954,0.5110043],[-0.26234108,-0.5890924,-0.90448207,-0.34318918,-0.14372866,0.06295756,-0.5832333],[0.56269956,0.31309462,-0.22407316,-0.74141455,0.3451219,0.16766134,-0.038615566],[-0.42197526,-0.6832733,-0.11012318,0.81781024,-0.49532312,0.5044022,0.6058622],[-0.22078349,-0.49892014,-0.6127092,0.39234552,-0.9247115,0.024139864,-0.1763933],[0.4427586,0.6229294,0.29448354,-0.64260805,-0.12868074,-0.14595105,-0.4953741],[-0.8060251,-0.57394534,-0.24703805,0.22687304,-0.019541593,0.08022944,-0.17855246],[-0.1300446,0.48822337,0.5738244,-0.4108309,0.12754422,-0.551131,-0.15526813],[-0.9597397,0.17972887,-0.75652325,0.14697702,-0.6045928,0.7029836,0.5235034]],"activation":"σ","dense_2_b":[[-0.047481403],[-0.06560398],[-0.27885428],[0.0077811894],[0.058150165],[-0.25603768],[-0.049105696],[-0.031028127],[-0.19086929],[-0.09221374],[-0.01903645],[-0.00713192],[-0.066267215]]},{"dense_3_W":[[0.04823237,-0.536979,0.27751818,0.1655786,-0.38873705,-0.2579097,0.089698836,-0.45589212,-0.138498,0.4641493,-0.38723156,0.27027082,-0.26783973],[0.61633486,-0.5096373,-0.36629617,-0.20646454,-0.7141381,-0.18465841,0.49784765,-0.26393116,0.26770627,0.6908027,0.36391553,-0.4442028,-0.09214944],[0.5473221,0.5475575,-0.34196937,0.420392,-0.2992392,0.3096095,0.6112058,-0.34745613,-0.20254803,-0.1975557,-0.50081915,0.5198232,-0.6212465]],"activation":"identity","dense_3_b":[[0.056188975],[0.049475864],[0.041392375]]},{"dense_4_W":[[1.0715346,0.3261359,0.63600165]],"dense_4_b":[[0.051208194]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020.json b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020.json new file mode 100755 index 0000000000..9b5b6ebd42 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI PALISADE 2020.json @@ -0,0 +1 @@ +{"input_std":[[9.083802],[1.4611669],[0.43209597],[0.045783427],[1.4580129],[1.4600974],[1.4606811],[1.4370847],[1.4046228],[1.3548353],[1.301345],[0.045653045],[0.045695912],[0.04572814],[0.0456723],[0.04552948],[0.045236606],[0.044802427]],"model_test_loss":0.010045606642961502,"input_size":18,"current_date_and_time":"2023-08-07_10-17-58","input_mean":[[24.140347],[-0.040326927],[-0.00495007],[-0.01144458],[-0.037586022],[-0.039033934],[-0.04007914],[-0.040745206],[-0.039911933],[-0.037505746],[-0.035948202],[-0.011471909],[-0.011470749],[-0.011468973],[-0.011477571],[-0.011519244],[-0.0115342615],[-0.011574338]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.0585553],[-0.8787027],[0.06662454],[2.4645643],[0.2145419],[0.14631574],[-0.0031928595]],"dense_1_W":[[0.01278659,-0.639175,-3.9059505,-0.26950234,0.48975742,0.053148586,0.06006899,-0.15871193,-0.35619113,-0.3069537,0.6460098,-0.3795686,-0.14707989,0.10753279,0.589496,0.054787833,0.26607925,-0.27329552],[-0.31426805,0.29352117,0.30446848,0.17738476,0.021804355,0.49185294,0.05479423,0.1745057,-0.0944745,0.35397518,0.3583849,0.06355244,0.3294988,-0.7301665,-0.1879947,-0.0022402736,0.104507774,-0.21638979],[-0.010307992,0.7934238,-0.0006794772,-0.1334464,0.02091189,0.47137254,-0.6551125,0.066525705,0.3651862,-0.07319468,-0.10373536,0.33364198,-0.039477788,-0.1740325,-0.17714831,-0.15961868,-0.0405952,0.074915186],[0.5847928,0.619816,0.4203029,-0.21235059,0.4265746,-0.1263166,0.009960476,0.11006678,0.6733238,0.42611405,0.19867067,0.45256436,-0.13085747,-0.36200306,-0.3105818,0.34042296,-0.31901485,-0.08410049],[-0.024490528,-0.65694225,4.6159083e-5,0.59398013,-0.025485305,-0.018133782,0.0042006616,0.10598254,-0.33271274,0.27812153,-0.08935339,-0.0016619482,-0.54040617,-0.14387926,0.5431834,-0.19388175,-0.13796277,0.058109537],[0.41040012,0.4720514,-0.542709,0.27897146,-0.21233134,-0.26147744,-0.7639464,-0.7849991,-0.8057104,-0.53855383,-0.26171803,-0.01974412,0.539449,-0.3167468,-0.058017753,0.100660756,-0.02376293,0.39652997],[0.0073618917,-0.6812269,0.00047164486,0.19503322,0.21642539,-0.3812711,0.54097396,-0.4161706,-0.13814282,-0.42284945,0.37063465,-0.22952643,-0.52888757,0.5929762,-0.282835,0.19850107,0.20221026,-0.1419231]],"activation":"σ"},{"dense_2_W":[[-0.34819424,0.13951385,1.2464662,0.28751788,-0.5187095,0.6976768,-0.62041533],[-0.41341007,0.2805276,0.6287094,0.6696396,-0.54532576,0.7615568,-0.6390846],[0.17430355,-0.57738274,-0.6883198,-0.18806155,0.3362078,-0.27881357,0.2574153],[0.34108973,0.22211717,0.459976,0.35180148,-0.33524066,-0.2489619,-0.8272582],[0.23007147,0.0818965,-0.6714039,-0.55786407,0.43846977,-0.3866686,-0.31287605],[-0.21214552,-0.6325544,0.042784553,-0.73854697,-0.072142266,-0.20286769,-0.17739548],[0.12742646,0.17059988,-0.30783626,-0.62666696,-0.36179522,-0.23354167,0.48441237],[0.070377834,-0.16169746,-0.01426584,-0.12767823,-0.36949772,-0.79047674,-0.5630477],[-0.3562291,0.82187784,0.6215501,0.7167505,-0.062617205,0.5100963,-0.31727344],[0.53031796,-0.74287415,-0.583841,0.35455438,0.5706749,0.34090075,0.40166008],[-0.041094325,-0.7450218,-0.34826657,-0.27569434,0.28963897,-0.6791988,0.4819029],[-0.45388228,0.8081112,0.19463012,-0.20301336,-0.8971776,0.51671964,-0.79728514],[-0.19061111,-0.41954494,-0.61557233,0.033694874,-0.4513763,-0.046573047,0.36615795]],"activation":"σ","dense_2_b":[[-0.05189404],[0.11612667],[0.03374365],[-0.09175077],[-0.118053235],[-0.009669963],[-0.24390511],[-0.42936447],[-0.13871671],[0.105076954],[0.060429294],[-0.08152692],[-0.32616025]]},{"dense_3_W":[[-0.5707046,0.15472998,0.32784146,-0.52660066,0.3508428,0.2326405,-0.12091264,-0.36666492,-0.16838528,0.60772735,0.5778285,-0.024338374,-0.4535548],[-0.18583268,0.4316364,-0.614212,0.296555,0.21492256,0.09027471,-0.22776076,-0.28093025,0.4677053,-0.2794905,-0.16121306,0.5220755,-0.49487323],[0.6430829,0.38659704,-0.25451958,0.014723727,0.23223996,-0.39363125,-0.48956293,-0.40315047,0.6391995,-0.611482,-0.321689,-0.52045226,-0.2960742]],"activation":"identity","dense_3_b":[[0.030546237],[-0.03303123],[-0.0085044755]]},{"dense_4_W":[[-1.0266056,1.0412261,0.11489299]],"dense_4_b":[[-0.03331707]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.00 56340-S2000 8409'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.00 56340-S2000 8409'.json new file mode 100755 index 0000000000..4cc4de130e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.00 56340-S2000 8409'.json @@ -0,0 +1 @@ +{"input_std":[[8.896653],[1.2753624],[0.5317558],[0.04692811],[1.2610264],[1.2643604],[1.2686262],[1.2531861],[1.2319366],[1.202845],[1.1703773],[0.046726346],[0.046764154],[0.04680635],[0.046880126],[0.04682511],[0.046679065],[0.046382528]],"model_test_loss":0.007070815656334162,"input_size":18,"current_date_and_time":"2023-08-07_13-44-54","input_mean":[[22.618917],[-0.12753934],[0.0057965177],[-0.0060813604],[-0.1289674],[-0.12929432],[-0.13033809],[-0.12293899],[-0.12034268],[-0.11245273],[-0.10651569],[-0.0061726016],[-0.006176799],[-0.0061910134],[-0.0061672167],[-0.006181863],[-0.0062086484],[-0.0062240455]],"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.20530139],[-0.33197266],[-2.1811483],[3.7774518],[1.2599417],[-3.9418454],[-0.18807785]],"dense_1_W":[[-0.03620619,0.19689178,0.09866175,-0.09322594,-0.078725435,1.1390496,-0.7356808,-0.012869471,0.15444094,0.07297737,-0.14101654,0.03384644,0.15915924,-0.4428113,0.22565778,-0.04034416,0.19587907,-0.20443197],[-0.06502236,-1.4234812,-6.6071515,-0.25332624,0.78716946,1.0407856,1.018014,-0.38713723,-1.3469931,-0.75132585,0.98401487,-0.26469627,-0.3915288,0.12644795,0.454595,-0.08865953,0.17730202,0.021167783],[-1.5585331,-0.5798272,0.22335605,0.03818846,0.6245181,-0.47028995,0.5918746,-0.054077096,0.54335994,0.034108605,0.047890723,-0.41479602,0.2831795,0.124537066,0.255331,-0.33859366,0.039150972,-0.07043993],[1.394775,-0.23261723,-0.28053886,-0.22738497,0.10594227,-0.6431526,0.0015595681,0.1450129,0.015581782,-0.0155119905,-0.31749186,-0.25720045,0.47923756,0.052539762,-0.22887582,0.12794253,0.039806157,0.09652687],[1.740706,0.11734064,0.3073235,0.26312536,0.08612904,-0.15223877,0.44893447,-0.15653725,0.32468832,0.13602708,0.0652706,-0.584739,0.15232132,0.11354476,0.053987373,0.033912808,0.3362455,-0.4482535],[-1.4522748,-0.30714616,-0.29713413,-0.21153042,0.35632578,-1.3907708,0.5317352,0.12741564,-0.0064160936,0.12887736,-0.41460907,0.34433788,-0.2432804,0.09331247,-0.24749541,0.36895674,-0.23798321,0.21776763],[8.573988e-6,0.27198073,0.0034219692,-0.06563512,-0.29250515,1.0881044,-0.64386135,0.1843868,0.031134987,0.025746144,-0.008881639,0.6693814,-0.17966537,-0.19181062,-0.4711859,0.06456762,-0.24241222,0.27226776]],"activation":"σ"},{"dense_2_W":[[-1.4079269,0.36448163,0.54817736,0.5838273,0.023329774,0.6411659,-1.3597034],[-0.51554555,-0.4119896,-0.0757938,-0.52624255,-0.32881626,-0.09241929,-0.6173628],[0.17114219,-0.5917404,0.52103335,-0.91308004,-0.64996517,-0.45323023,-0.27036774],[-0.7816448,-0.34142476,0.27209246,0.83823246,0.25578618,0.78207064,-0.5922945],[-0.63912165,0.056242548,0.40855795,-0.16621237,0.15351564,0.39832217,-1.1449009],[0.4102927,0.34681398,-0.034716405,-0.62436956,0.011792132,-0.74056876,0.11482153],[0.24064858,0.38059077,-0.389402,-0.75450635,-0.05456221,-0.24500677,0.71137184],[-0.047961276,0.31060773,-0.3119071,-0.08383901,-0.21034946,-0.39693183,0.71529126],[0.8864901,-0.13776888,-0.40138802,-0.5242289,0.3239953,-0.2595277,0.62388825],[0.47216353,-0.35241503,-0.41698897,-0.24461508,0.41777575,-0.14391029,0.903978],[-0.8213227,1.2268875,-0.76732516,1.3276708,0.9519929,0.39465946,-0.77069944],[-0.72467273,0.39069507,-0.303594,0.23257187,-0.3579329,0.6990695,-0.30224627],[-0.8027119,0.16713265,0.5837898,-0.078509,0.07100372,0.7838912,-1.001968]],"activation":"σ","dense_2_b":[[-0.25387064],[-0.30531904],[-0.02434373],[-0.18550278],[-0.324516],[-0.007148533],[0.015090404],[-0.005064251],[0.035354376],[0.17334807],[-0.047236674],[-0.22442318],[-0.2525012]]},{"dense_3_W":[[-0.5563823,0.087780975,0.18698041,-0.3394262,0.008317095,0.66230845,0.58490086,-0.0028694326,0.66133267,0.11329112,-0.48986503,-0.11975826,-0.68024075],[-0.54618734,-0.104708515,0.64458096,-0.55121964,-0.24448135,-0.28165248,0.36517873,0.50535154,-0.17659181,0.5379147,-0.3447484,-0.52534163,-0.031908248],[0.3347168,-0.2290193,0.5621586,0.30639598,-0.36269528,0.5464596,-0.4033829,0.14275603,-0.34687775,-0.47407392,-0.01195648,0.4732098,-0.3589579]],"activation":"identity","dense_3_b":[[0.059350483],[0.070591144],[0.03717587]]},{"dense_4_W":[[1.0896041,0.62514883,0.03852297]],"dense_4_b":[[0.06460823]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.00 56340-S2000 8A12'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.00 56340-S2000 8A12'.json new file mode 100755 index 0000000000..17e2a43814 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.00 56340-S2000 8A12'.json @@ -0,0 +1 @@ +{"input_std":[[9.358906],[1.038606],[0.52003336],[0.03449092],[1.025025],[1.0285342],[1.033122],[1.0280541],[1.0189449],[1.0088568],[0.9928373],[0.034335066],[0.03436934],[0.03440254],[0.03445266],[0.034416895],[0.0341578],[0.033791963]],"model_test_loss":0.005529345478862524,"input_size":18,"current_date_and_time":"2023-08-07_14-09-26","input_mean":[[22.959547],[-0.052741483],[-0.004481133],[-0.0017092802],[-0.050769974],[-0.051488187],[-0.05162069],[-0.051915728],[-0.050174993],[-0.052261814],[-0.05214494],[-0.0018301547],[-0.0017879381],[-0.0017471444],[-0.0015715543],[-0.0013785135],[-0.0013404073],[-0.0012749063]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-4.502992],[-4.356874],[-0.0042948504],[-0.5028367],[0.051018726],[-0.15338463],[-0.1509676]],"dense_1_W":[[-1.6411753,-0.32697722,0.3120288,-0.39750454,-0.13167776,0.86057496,-0.6939451,0.6071072,0.14159355,-0.0063595567,0.25375837,0.44821614,-0.29423907,-0.028513383,0.3023456,0.1316031,0.036363505,-0.14323804],[-1.6328104,0.5942663,-0.30570295,-0.123248264,-0.034441516,-0.87338793,0.69189394,-0.6236746,-0.052855786,-0.13514496,-0.221532,0.0011332782,-0.20347112,0.4917645,-0.20858406,-0.14016572,-0.089411296,0.21504334],[-0.21007055,0.41557994,0.037863724,0.4959517,-0.45360732,0.7074271,-0.28405392,-0.111691974,0.18850206,0.015849397,-0.12006921,0.25533158,0.07951575,-0.8312149,0.03035362,-0.21261916,-0.1735698,0.18428572],[0.3310752,-1.6132231,0.045440618,-0.7522596,0.412424,0.76531404,0.04731471,0.6839483,-0.027021188,0.28972885,-0.1742223,0.42704728,0.58289766,-0.2732268,-0.12959486,-0.24415614,-0.101852916,0.3081016],[-0.011170702,-1.5589105,-3.495791,0.33255365,0.94771427,0.5074355,1.0023425,-0.1316612,-1.802023,-0.406795,1.0740488,-0.35055503,-0.06440544,0.37088916,0.3481748,-0.535885,0.018674394,0.108048186],[-0.03412157,0.6122013,0.07255059,0.06107659,-0.46524987,1.2860525,-0.8113254,0.04586139,0.033707816,-0.16047795,-0.015120353,0.37895563,0.42033595,-0.6925642,-0.38245085,-0.044110574,0.058740735,0.07787144],[-0.005288463,0.5904715,-0.10395662,0.34950814,0.29257905,1.0213965,-0.35862765,-0.72644925,0.097196706,-0.19612406,0.52340215,-0.017568931,0.2601534,-0.986547,0.5020255,0.2743259,0.23409082,-0.5168832]],"activation":"σ"},{"dense_2_W":[[-0.47496098,0.5138251,-0.7892653,-0.75560045,0.48735014,-0.53306115,0.16811597],[-0.3102205,1.9871738,-0.4366547,-0.41493884,0.11469561,-0.6691428,-0.44414428],[0.19802967,0.3727984,0.39753315,0.42768952,0.41358182,0.6435363,0.24335779],[-0.66378856,0.5819373,-0.051759593,-0.89287,0.096190274,-0.6734764,0.11215895],[0.3314184,-0.13227205,0.21310683,-0.12126428,-0.16501734,0.4487741,0.72218174],[-0.8345799,-0.4282664,-0.47909757,-0.4936077,-0.46425676,-0.7605428,0.2990966],[0.066827886,-0.5356042,0.10570844,0.5161373,0.062971145,-0.31447783,0.17028944],[-0.7473447,0.56870705,-0.67485994,-0.19401033,0.22181664,-0.14370336,-0.010975309],[0.24166872,-0.4976755,0.6000056,0.3400344,-0.38725704,-0.06810995,0.5731925],[-0.35525835,1.1168011,-0.22931977,0.10211827,0.0522062,-0.82619613,-0.69551224],[-0.9838338,1.1467155,-0.25217372,-0.08675337,0.07187647,-0.39047343,-0.51041925],[0.5434614,0.47051767,0.7331644,0.36079296,0.21453767,0.2669549,-0.24738385],[-1.5833589,0.7161828,-0.08223795,-0.0792626,0.7528849,-0.024336126,-0.06581944]],"activation":"σ","dense_2_b":[[0.22666334],[0.53868324],[-0.1864018],[0.20797202],[-0.102829635],[0.17410047],[-0.059639398],[0.046856824],[-0.15465018],[0.37563977],[0.42138037],[-0.040794667],[0.15081088]]},{"dense_3_W":[[0.059286855,-0.6201953,0.66562283,0.22414349,0.51240027,-0.13008,0.6259135,-0.5094883,0.33165294,-0.08362942,0.012212406,0.27687398,0.4015779],[-0.49880126,0.070532426,-0.43096852,0.37746346,0.10856794,0.5118211,0.2279282,0.27002206,-0.3318831,0.39096662,-0.351321,-0.09415256,0.6066714],[-0.62661433,-0.4761153,0.30911666,-0.43303257,0.7428668,-0.21072751,0.14316693,-0.31729576,0.503867,-0.40831396,-0.5834226,0.30889633,-0.3942228]],"activation":"identity","dense_3_b":[[0.008437807],[-0.045322042],[0.051086687]]},{"dense_4_W":[[0.20634736,-0.37115717,0.97134864]],"dense_4_b":[[0.040139616]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.01 56340-S2000 9129'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.01 56340-S2000 9129'.json new file mode 100755 index 0000000000..3c127b3ecc --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019 b'xf1x00TM MDPS C 1.00 1.01 56340-S2000 9129'.json @@ -0,0 +1 @@ +{"input_std":[[8.282052],[1.4976072],[0.5488163],[0.04954058],[1.4906036],[1.492054],[1.4935261],[1.4723681],[1.4461412],[1.4036433],[1.3585291],[0.049254097],[0.049325753],[0.049396638],[0.049512744],[0.04941646],[0.049044546],[0.04844633]],"model_test_loss":0.00627125846222043,"input_size":18,"current_date_and_time":"2023-08-07_14-36-50","input_mean":[[25.058535],[-0.022251762],[-0.0062643415],[-0.006741323],[-0.019891106],[-0.02031645],[-0.020919193],[-0.022687394],[-0.024389008],[-0.02746425],[-0.027944699],[-0.006677959],[-0.0066979136],[-0.006710192],[-0.0067440853],[-0.0067666965],[-0.006773558],[-0.006752982]],"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.17761493],[0.065649986],[-0.76249593],[-2.9280584],[2.8058326],[1.0595294],[0.66408336]],"dense_1_W":[[0.009145467,0.4170902,0.034774374,-0.0138638485,-0.39550337,1.045921,-0.68865854,0.19794099,-0.033008657,-0.044810697,0.031777132,0.11889747,-0.09361271,-0.012631721,-0.17615353,0.20466472,0.15644592,-0.16351333],[-0.0061399164,-1.4166915,-5.645784,0.073381424,0.5393407,0.32291308,0.31408218,0.2008273,-0.35585976,-0.43743655,0.7283993,-0.46206388,0.11366365,-0.11259773,0.06420009,0.11462869,0.35199496,-0.32473722],[0.75156087,-0.054094438,0.056640625,0.14823626,-0.48060635,-0.6280021,0.5193494,0.21376126,-0.3183618,0.16855966,-0.12529948,-0.49619958,-0.31324717,0.3645703,0.082277454,0.36189565,0.5037089,-0.29449514],[-0.7632688,-0.27169684,-0.23086967,-0.15549572,-0.079988874,-0.84466547,0.5305665,-0.14300905,-0.6319775,-0.18426856,0.20290938,-0.075952776,-0.1215382,0.9547558,-0.08411024,-0.18286705,0.14476883,-0.06562494],[0.7433322,-0.45799735,-0.22533219,-0.16057462,-0.43227366,-0.50694495,0.7030353,-0.27264476,-0.36092183,-0.18616752,0.113610044,-0.19430344,0.013998261,0.79424304,0.10917846,-0.07473551,-0.054330464,-0.032398082],[-0.0100051705,0.2767743,0.012484329,0.14437622,-0.21558216,0.60862535,-0.45100874,0.0608264,-0.20519726,0.11275251,0.0047225803,0.16176194,0.4537485,-0.5460852,-0.45898968,0.17339261,-0.0010471605,0.0726244],[-0.7537442,-0.23575833,0.058653012,-0.1419492,0.1560171,-0.88010234,0.43974218,-0.1777623,0.07786165,-0.18940662,0.11003291,-0.7475638,-0.46154422,0.7977223,0.62764406,0.48734587,-0.122180894,-0.07988648]],"activation":"σ"},{"dense_2_W":[[-0.44969195,-0.47718954,0.44621757,-0.10789645,0.611765,-0.18588941,0.012329608],[0.13036671,-0.5190893,-0.45879737,-0.15106045,-0.3414679,0.8747279,-0.12338378],[0.382678,0.49006438,-0.55374706,-0.7979588,-0.66582894,0.49023482,-0.22071177],[-0.82273644,0.6556447,0.6050713,-0.14068466,1.266661,-0.21573777,-0.105440065],[1.0855136,-0.30474165,-0.08955326,-0.34984973,-0.12816525,0.5724931,-0.68358016],[-1.020146,-0.46681815,0.47050923,0.23170453,0.49748507,-0.21584909,0.50045234],[-0.51235473,-0.16342548,-0.10362162,0.7775686,0.25859034,-0.5426786,0.15350342],[-0.7412454,-0.19349915,0.51770556,0.89931875,0.44185257,-1.0582427,-0.053990576],[1.1346184,-0.40109345,-0.22971821,-0.6369844,-0.07736686,0.45002407,-0.34542826],[0.8599848,-0.50594753,-0.01019188,-0.6136041,-0.44588706,0.10080783,0.19961627],[-0.74791193,0.3330768,-0.34094897,1.0123053,-0.008348638,-0.9700476,0.23540768],[-0.2771327,-0.008559937,0.33475313,0.34185767,0.7079121,-0.68679994,0.523643],[0.55554783,-0.041663673,-0.45565832,-0.08963832,-1.0109894,0.22129427,-0.42119744]],"activation":"σ","dense_2_b":[[-0.2371153],[0.11922548],[-0.030385548],[-0.0757551],[0.15123996],[-0.11702709],[-0.081945956],[-0.14611888],[0.25165284],[-0.0024621708],[-0.15761453],[-0.23728251],[-0.10741819]]},{"dense_3_W":[[-0.22576405,-0.19548972,-0.60756344,0.12658192,0.19608,-0.4017061,0.35516047,0.015072161,0.42969325,0.09205027,0.6273664,-0.4431949,-0.40578642],[0.035641454,-0.60118145,-0.11233975,0.5058922,-0.47696126,0.49505487,0.44402495,0.28497314,-0.49870777,-0.109422185,0.32074592,0.6422087,-0.25553414],[0.5741452,0.13303332,-0.6632543,-0.23719987,-0.19621162,-0.22117068,0.102075905,0.15589632,-0.5905995,-0.64983845,0.25684682,0.6521155,0.109088175]],"activation":"identity","dense_3_b":[[-0.019887898],[-0.09508023],[-0.051447187]]},{"dense_4_W":[[-0.08363187,-1.1579778,-0.26778743]],"dense_4_b":[[0.08655493]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019.json new file mode 100755 index 0000000000..f24dc4e6d1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.17877],[1.560403],[0.55696404],[0.04819407],[1.5485493],[1.551602],[1.5542839],[1.5297074],[1.4964435],[1.447148],[1.3966106],[0.047890175],[0.04795589],[0.04801992],[0.048169263],[0.04813858],[0.04792505],[0.047557294]],"model_test_loss":0.008605924434959888,"input_size":18,"current_date_and_time":"2023-08-07_13-18-55","input_mean":[[23.527355],[-0.09660584],[0.002421769],[-0.007888363],[-0.09495723],[-0.09453526],[-0.09517964],[-0.092055276],[-0.089080565],[-0.08710217],[-0.08428994],[-0.0079021575],[-0.007904708],[-0.007907821],[-0.007890973],[-0.007831142],[-0.007820599],[-0.0077761114]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.4574037],[-0.31610072],[0.06254806],[0.1658765],[-0.04939922],[-0.04379439],[-2.3606904]],"dense_1_W":[[0.4884821,0.4447991,0.27062133,0.29461905,-0.15870245,1.0499299,-0.67113316,0.14727078,0.46701437,-0.11520939,0.27191386,0.25705224,0.20442817,-0.5996387,-0.11848767,-0.22629784,0.10268118,-0.05196918],[-0.94526833,-0.06731887,0.36105722,-0.06478468,0.7274551,-0.787373,1.067588,-0.11700762,-0.18113732,-0.009122022,0.6951359,0.121739894,-0.31221318,0.43686992,0.19358343,-0.60511017,0.31918147,-0.16998838],[-0.0064108563,-1.0363407,-0.3657711,-0.03648839,0.25623804,-1.0107207,0.5950102,0.13701187,-0.03058584,-0.09836868,-0.47335115,-0.19476067,-0.25847888,0.24020503,0.27251944,-0.16899313,-0.10614574,0.20120943],[0.99380904,-0.13568194,0.37884694,0.2061394,0.25694898,-0.39774755,1.0660007,0.098927006,-0.11071541,-0.06035235,0.6582728,-0.1862874,-0.36728743,0.686768,-0.007125964,-0.43512365,0.21848302,-0.19364962],[-0.013903772,1.6984495,6.334462,-0.24601908,-0.88126016,-0.07609073,-0.6559659,0.5171736,1.2477276,0.13804865,-1.6805384,0.5297336,0.50917196,-0.35361633,-0.43783256,-0.16315787,0.09916458,0.19899222],[0.0027724826,-0.266893,0.009900119,0.1370816,-0.14222518,-0.7747496,0.40045345,-0.1508628,0.31491798,-0.11310718,-0.10476674,-0.5071864,0.27966213,0.071040496,0.17133062,0.3316448,-0.09659847,-0.028956251],[-0.46976677,0.2529768,0.2631776,0.29406658,-0.014786802,0.54289156,-0.2263323,0.34719956,0.24145603,-0.02186343,0.2373878,-0.0400574,0.016907027,0.0852952,-0.45880318,0.07774477,-0.08953317,-0.009223345]],"activation":"σ"},{"dense_2_W":[[0.06098307,-0.40966874,-0.17987315,-0.40513036,0.27261987,0.08310855,-0.5536096],[-0.691275,0.35682058,0.36383852,0.5730693,-0.25348198,0.5048341,-0.5584882],[-0.62200207,0.34269363,-0.37620154,0.39508444,-0.18625513,0.5273465,0.15910348],[-0.66713977,0.52275723,0.2329843,-0.39003682,-0.68911934,0.54985297,-0.1009992],[-0.6867374,-0.17710596,0.25754964,0.4175933,0.13662146,0.6200632,-0.7861373],[-0.09777525,-0.32259175,-0.6726679,-0.5632263,0.38548172,-0.78029376,0.8176162],[-0.7648048,0.50501686,0.48810425,-0.30770826,-0.13032949,-0.21508694,-0.5890472],[-0.21938957,-0.20063238,0.5301691,0.3849949,-0.2938749,0.58915985,-0.40684512],[0.09535999,-0.3482573,-0.028670665,-0.2520647,-0.18944943,-0.30540437,0.45314667],[-0.2825183,-0.18183878,0.43335834,-0.44332805,-0.14940064,0.075128734,-0.1811318],[0.29664114,-0.030906495,-0.37812403,-0.046466183,0.101335004,-0.53401035,0.79996306],[0.9250361,-0.67517155,-0.52387106,-0.2634134,-0.20555083,-0.812342,0.7927995],[0.22187099,-0.4586634,0.14067167,0.16797097,-0.51517123,-0.25366476,-0.0075834477]],"activation":"σ","dense_2_b":[[-0.16339622],[-0.06992213],[-0.14530285],[-0.21909085],[-0.18955792],[-0.123597145],[-0.114407286],[-0.06403072],[0.07467113],[-0.11460133],[-0.014573581],[0.15221187],[-0.2008074]]},{"dense_3_W":[[0.079248965,0.63441527,-0.037408806,0.5250491,0.1454134,0.033214454,-0.07036471,0.56555814,-0.26066884,-0.18814188,-0.19420856,-0.33199486,-0.17070732],[0.48755273,0.5925755,-0.089609005,0.2881994,0.09301222,-0.36505923,0.11187905,-0.18813112,-0.4484195,0.45447895,-0.46645686,-0.48254833,-0.48081368],[0.28768483,-0.50610393,-0.3329078,0.1855142,-0.32382408,0.25712836,-0.3997252,-0.4541148,0.69257694,-0.36352545,0.36789265,0.8448238,-0.36968893]],"activation":"identity","dense_3_b":[[-0.099045075],[-0.08617516],[0.0972388]]},{"dense_4_W":[[-0.9874007,-0.54182595,0.95884216]],"dense_4_b":[[0.09515336]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2022 b'xf1x00TM MDPS C 1.00 1.02 56370-S2AA0 0B19'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2022 b'xf1x00TM MDPS C 1.00 1.02 56370-S2AA0 0B19'.json new file mode 100755 index 0000000000..616274010e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2022 b'xf1x00TM MDPS C 1.00 1.02 56370-S2AA0 0B19'.json @@ -0,0 +1 @@ +{"input_std":[[8.993529],[1.324396],[0.5305161],[0.04294904],[1.3205608],[1.3210983],[1.3210579],[1.2954506],[1.2668177],[1.222909],[1.1779213],[0.04279379],[0.04282814],[0.04286333],[0.042902395],[0.042827405],[0.042586636],[0.042191453]],"model_test_loss":0.006565318908542395,"input_size":18,"current_date_and_time":"2023-08-07_15-28-26","input_mean":[[22.832775],[-0.040264394],[-0.02767458],[-0.003989959],[-0.03488428],[-0.03718118],[-0.03951456],[-0.05100156],[-0.06057131],[-0.07277594],[-0.083841816],[-0.0039337794],[-0.003943521],[-0.00395225],[-0.004023454],[-0.0040841275],[-0.0041823583],[-0.0042870827]],"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.18876944],[1.3463621],[-1.908932],[0.94169223],[-2.0187588],[0.0035511698],[0.0053254846]],"dense_1_W":[[0.005867352,1.2254535,3.4375358,0.068283305,0.16577429,-0.009294751,-0.5739759,0.19231455,0.27828252,-0.1432012,-0.838622,0.21616323,-0.06911776,-0.2046535,-0.27959976,0.06780521,0.39013436,-0.15592383],[1.3789212,-0.19859079,0.14766572,0.47943616,0.29903832,-0.6807818,1.1864055,-0.063221924,0.0021910756,0.15888207,0.3227435,-0.102154195,0.05816301,0.067887574,-0.14981405,-0.23042272,0.024423974,-0.20121309],[-0.6294663,0.81912273,0.117754824,0.045635737,-0.30043265,0.41747543,-0.72729063,0.30596933,0.083178654,-0.009687303,0.18535374,0.15427576,0.048291914,-0.27375552,-0.06383911,0.36632884,0.025411423,-0.36048925],[1.5819824,-0.44059455,-0.19170646,-0.11758157,-0.6440937,0.96508884,-0.54323167,-0.35875118,0.20947236,-0.018358774,-0.49196693,-0.30316466,0.13093069,-0.11939344,0.26340368,0.10947761,-0.3237495,0.4436966],[-0.8038508,-0.9236595,-0.12660962,0.053774275,0.24433418,-0.726227,1.2170812,-0.3135991,-0.23039672,0.09241596,-0.22223517,-0.362112,0.26941076,0.17195722,-0.3402102,-0.08320549,0.06449958,0.28475815],[-0.0011107235,-0.038697846,0.0022872635,-0.28063372,-0.14913365,1.2446141,-0.6184191,0.11545028,-0.017611,0.13889763,-0.023370638,0.33740774,0.31302363,-0.35052314,-0.42641684,-0.2141415,-0.34904203,0.42076],[-0.005175982,-0.7099676,0.00016399156,0.03889922,-0.30047348,-0.9106055,0.5045013,0.35966375,-0.023503177,-0.0043678866,-0.19590726,-0.6871834,0.24169926,0.17034449,0.21276642,0.10462949,-0.37484288,0.20454486]],"activation":"σ"},{"dense_2_W":[[0.104682855,-0.50470614,0.35854033,-0.035443306,-0.37905973,-0.27697846,-0.9634923],[0.112081155,-0.7351773,0.41254714,0.7830785,-0.38910425,0.9948105,-0.3034996],[-0.3261952,0.676342,-0.8663035,0.049848557,0.327171,-0.3208539,0.79908615],[-0.15818742,0.07726966,0.43970603,0.24589102,-0.50519943,-0.37369853,-0.4947362],[0.06886326,-0.4172607,0.28755546,-0.41808438,-0.52109635,-0.42815572,-0.263946],[0.051430058,-0.28650117,-0.009554365,-0.07774851,0.7187316,-1.0449941,0.017990898],[-0.08103111,0.17932983,-0.5922217,-0.5895948,0.3433449,-0.3952535,0.07908759],[-0.30518368,0.87019897,-0.8338993,0.51584834,0.7291329,-0.6600101,0.73442346],[0.46777672,0.60007197,0.4286051,0.8649935,-1.1103383,0.74301636,-0.80451095],[0.08020403,-0.6593858,0.086899064,0.23602426,-0.012647624,0.6520031,-0.9400746],[-0.35595152,0.041667316,0.3093184,0.03735144,-0.7210566,0.5299639,-0.15386833],[0.09228896,-0.71585226,0.30710077,0.2406018,-0.47016156,-0.11183533,-0.27596667],[-0.612182,-0.2192639,-0.19045848,-0.06639905,0.1694014,-0.33918324,-0.1311936]],"activation":"σ","dense_2_b":[[-0.21769845],[-0.07666798],[0.1883953],[-0.15336362],[-0.39611495],[-0.028968781],[-0.30332094],[0.133016],[0.062327497],[-0.11558597],[-0.038368657],[-0.13163656],[-0.23315099]]},{"dense_3_W":[[-0.20311363,-0.5751432,-0.09544995,0.40782174,-0.3749152,0.42719337,-0.27624348,0.23038137,-0.10259029,0.42679816,0.14456484,-0.28356594,0.40488628],[0.101418085,-0.10259608,0.37198663,0.20094174,-0.16163434,0.11256627,0.0009847895,0.36355582,-0.68457043,0.038573015,-0.30619755,-0.40124977,0.18100727],[-0.26906586,-0.5600097,0.5290126,-0.36010587,0.13541447,0.42952237,0.15362886,0.7573779,-0.41288292,-0.43268642,-0.23467787,0.1252901,-0.15268406]],"activation":"identity","dense_3_b":[[-0.04268578],[0.0621331],[0.05889129]]},{"dense_4_W":[[-0.026682906,-1.0218076,-1.0972601]],"dense_4_b":[[-0.0560793]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2022.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2022.json new file mode 100755 index 0000000000..b80f8eb8d1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.994212],[1.3245196],[0.5245797],[0.042956702],[1.3203417],[1.3217984],[1.3220408],[1.2944245],[1.2665168],[1.2200946],[1.1748925],[0.0428153],[0.042849746],[0.042877868],[0.04289658],[0.042825807],[0.042584144],[0.042231884]],"model_test_loss":0.006699905265122652,"input_size":18,"current_date_and_time":"2023-08-07_15-02-41","input_mean":[[22.833767],[-0.0403752],[-0.023062065],[-0.003915003],[-0.03835354],[-0.039629113],[-0.04148385],[-0.050812945],[-0.058392923],[-0.07008045],[-0.08093289],[-0.0039168606],[-0.0039327657],[-0.0039458815],[-0.0040258327],[-0.0041203275],[-0.00426424],[-0.00439325]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.21267962],[-0.02729046],[-3.876878],[3.758936],[-0.094889574],[0.84803456],[1.0655135]],"dense_1_W":[[-0.01582406,1.491969,3.253744,-0.10518171,-0.19385417,0.78610295,-0.92538196,-0.33224037,0.3013307,-0.6688703,-0.19887793,0.114433184,0.15138905,-0.37872663,-0.26882437,0.53041375,0.5000704,-0.46208212],[0.0022284745,-0.44302207,0.0046756687,0.4405551,0.3678904,-1.3237227,0.94849795,-0.21979533,-0.354195,0.04168792,0.10481886,-0.14313328,0.09221937,0.62079024,-0.31655258,0.08006394,0.224768,-0.34386438],[-1.6695492,1.084495,0.12782213,-0.2916347,0.4173779,-0.012464437,-1.415515,0.46309748,0.14367689,-0.09085289,0.21108763,0.52149534,0.0030927972,-0.7394647,0.32236108,0.4132776,-0.08725703,-0.32379115],[1.7204846,0.99877,0.12921184,-0.5962452,0.11488813,0.7996907,-1.9083629,0.73996365,0.0138976555,-0.3083528,0.36691102,0.6522089,-0.30455202,-0.33463576,0.26659817,0.8397864,-0.53790885,-0.17022859],[0.01408686,0.30261004,0.021707801,-0.11919521,-0.11240657,1.2420307,-0.90936786,-0.13186933,-0.0830583,0.39522758,-0.15010051,0.67393625,0.37087741,-0.2007352,-0.70529145,-0.46263382,0.12367665,0.1901094],[0.22501494,1.2126215,-0.04891412,0.11348339,0.10659557,1.1126171,-0.6577273,0.0517829,0.034891758,0.16096263,0.016899597,0.53799254,0.19248869,-0.099386215,-0.24717341,0.1219544,0.1654292,-0.6051804],[0.29689962,-1.252187,0.051804602,0.028222922,-0.63980806,-0.693479,0.9105569,-0.05222635,-0.4362798,0.45733297,-0.29413572,-0.5301683,-0.6064637,0.42068645,-0.02681922,-0.020214137,0.22010683,0.34188196]],"activation":"σ"},{"dense_2_W":[[-0.6086301,0.2085108,0.37262338,-0.9238916,-0.39440706,-0.531614,-0.13330653],[0.3900694,0.25841695,-0.506336,-0.87635046,-0.23827943,-0.22281836,0.14377734],[0.39564994,-0.52945167,0.4045585,-0.22950102,0.66113174,-0.55567765,-0.7538522],[0.1472609,0.4034027,-0.39680183,-0.01948131,-0.06318282,-0.40607718,0.54647887],[0.40735146,-0.76506615,0.15106998,-0.04639545,0.2356493,0.34029764,0.58116305],[0.17658016,-0.48829883,0.8479261,0.103093006,-0.085700735,-0.05685383,0.12873933],[-0.58091015,-0.36427772,-0.119214594,-0.15918592,-0.77523655,-0.78004694,0.03406656],[0.42519712,-0.15369514,0.0024256515,0.7537345,0.12914199,-0.19718027,0.2781377],[0.38494098,-0.8098266,1.6810417,-0.4136923,-0.33961916,0.15786585,-1.5184373],[0.19256154,0.4130768,-0.31395087,-0.5005648,-0.51987,-0.34723067,-0.081991576],[-0.49874434,-0.6762422,-0.09994346,0.09899775,0.06528094,-0.75826293,-0.5126717],[-0.35837945,0.36765984,0.8528636,-0.3219268,0.03151658,0.19896397,0.34016657],[-0.20404705,0.35541695,0.0011049275,-0.0022879532,-0.64204615,-0.5036561,-0.035362314]],"activation":"σ","dense_2_b":[[0.036364183],[-0.00221331],[-0.117371835],[-0.097624525],[0.009239539],[-0.091520816],[-0.23231187],[-0.016982464],[-0.54738104],[0.04596814],[-0.24534227],[-0.005133318],[-0.022278212]]},{"dense_3_W":[[-0.6959402,0.31169927,0.53220147,0.19400354,-0.31628206,0.26289627,0.32454082,0.41816694,-0.31043547,-0.67317456,0.65171415,-0.30771238,0.09026865],[0.38488102,0.31554824,-0.70509696,0.3893292,-0.10749988,-0.40098265,0.18507135,-0.11758874,-0.0043080114,0.6012859,0.25160068,-0.42651844,0.48249626],[0.7162551,0.64301497,-0.36417845,-0.037450142,-0.45597866,0.15023938,-0.0077365125,0.0701791,-0.71762145,0.18638995,0.018750757,0.14510971,0.41565806]],"activation":"identity","dense_3_b":[[0.030530091],[-0.0479702],[-0.053273804]]},{"dense_4_W":[[0.5025325,-1.0537963,-0.85901815]],"dense_4_b":[[0.04645968]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-CLAC0 4TSHC102'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-CLAC0 4TSHC102'.json new file mode 100755 index 0000000000..2c61a6ddc0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-CLAC0 4TSHC102'.json @@ -0,0 +1 @@ +{"input_std":[[8.194418],[0.9826876],[0.43571737],[0.03203097],[0.98284227],[0.9834058],[0.9829836],[0.9639176],[0.94775534],[0.92251784],[0.8937146],[0.03200366],[0.03202884],[0.032050643],[0.032007705],[0.031979978],[0.031913992],[0.031803887]],"model_test_loss":0.004605790600180626,"input_size":18,"current_date_and_time":"2023-08-07_16-17-55","input_mean":[[21.787415],[-0.073023595],[0.006111772],[-0.0030836551],[-0.07544397],[-0.07518822],[-0.074919075],[-0.072652444],[-0.07070591],[-0.06814254],[-0.06605076],[-0.0029780078],[-0.0030136248],[-0.0030446842],[-0.0032140582],[-0.0032444522],[-0.0033729817],[-0.0034472218]],"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.021883458],[-0.013235099],[-0.121804215],[-0.25270373],[0.013701096],[1.7847886],[1.8580865]],"dense_1_W":[[0.015979825,0.025676368,0.82048047,-0.20396332,-0.06994716,-0.19865473,0.85325474,-0.46978325,-0.24091806,0.10684887,0.10043876,-0.08637539,0.26329783,0.46833506,-0.48420766,-0.046872795,-0.19976763,0.2933011],[-0.010659484,-0.5590501,-1.8482552,0.18219163,-0.29451025,-0.039495107,0.69195104,0.3583238,-0.246975,-0.3466151,0.39438456,-0.101077646,-0.20400386,0.21190208,-0.20427756,0.02704431,0.14872628,-0.09532689],[0.28008336,-0.19451748,0.002395767,0.07651338,-0.013720813,-0.7281727,0.46541923,0.05587276,-0.076292664,0.27889255,-0.22249366,-0.20972478,-0.32013837,0.35491177,0.019567257,-0.05948678,0.061387423,0.12222018],[0.38760716,0.28468573,-0.0046121255,-0.503213,0.15541966,0.010528314,-0.08428991,0.20208262,-0.106319115,-0.12040755,0.10501226,0.4507385,0.60220087,-0.4585774,-0.02489347,0.114339024,-0.33559904,0.10983539],[0.0009784829,0.35729215,-0.003829106,-0.0028381112,-0.48749572,0.8682397,-0.29993644,-0.08423156,0.010641775,0.07446828,-0.037331752,0.27161676,-0.1789018,-0.30909738,-0.3551168,-0.248932,0.2984701,0.13843094],[0.44399467,-0.5334002,-0.23803857,-0.21615528,-0.016919455,-0.5706182,0.545457,0.27349538,-0.114982955,-0.39205012,0.124447465,-0.10823347,0.1663843,0.2260901,-0.15672842,0.13161573,-0.02115449,0.0032338887],[0.5019759,0.68048036,0.25314942,0.13284066,-0.33117083,0.582654,-0.24854451,-0.47353426,0.40295416,0.24269429,-0.14332053,0.23747285,-0.33417442,-0.106693946,0.0037535615,0.04599831,0.037733346,-0.04265533]],"activation":"σ"},{"dense_2_W":[[0.08401161,-0.2599535,-0.609856,0.7646542,0.67341596,-0.26291236,0.76118547],[-0.3651008,-0.20817277,0.31787935,-0.43461692,-0.29770243,0.018088236,-0.46393844],[0.2615463,0.48856091,-0.40368366,-0.18834044,-0.08188224,0.2784943,-1.0847317],[-0.52402174,-0.20936744,-0.77195823,-0.22592704,0.69131356,-0.7199108,-0.06898959],[0.080265164,-0.16496317,-0.8305106,0.6760351,0.37774935,-0.30932015,0.4807624],[0.37443948,-0.778584,-0.66466296,-0.3686006,-0.43090945,-0.57971597,-0.24787214],[0.07640942,0.3376665,0.6566895,0.113762006,-0.49356726,0.7215417,-0.42951873],[0.50611526,-0.21789505,0.79877114,-0.11904481,-0.68082315,0.22485676,-0.97027636],[-0.26019892,-0.22099318,-0.19246079,0.57908934,0.6265812,-0.54631793,0.5911588],[0.117363736,-0.5874855,-0.49562076,0.7931459,0.28048941,-0.39128372,0.27204272],[-0.45832366,0.06207395,-0.73029464,0.796244,0.60792464,-0.3163733,0.099765696],[0.120567635,-0.30641696,-0.59669787,-0.55059415,0.08865131,-0.259314,-0.06436874],[0.6329438,0.59759134,0.57218724,-0.645048,-0.735474,0.9010533,0.20121096]],"activation":"σ","dense_2_b":[[0.030452332],[-0.09173468],[-0.22073863],[-0.046627972],[-0.05838497],[-0.0528763],[-0.09991468],[-0.034997243],[-0.055857778],[0.04780818],[-0.05873308],[-0.317891],[-0.035200205]]},{"dense_3_W":[[0.3929027,-0.3861305,-0.49493206,-0.0818116,0.027093373,-0.31794766,-0.57132995,-0.5508263,0.24935243,0.44998237,0.27979627,-0.02445104,-0.590858],[0.5505083,0.5507326,0.19556087,0.2572581,0.4237801,0.65517,0.028538687,-0.09970234,0.18431105,-0.009243993,-0.021522932,0.17175677,-0.37279418],[0.00045096828,-0.19784781,0.35283023,0.6747326,-0.057934422,0.43838486,-0.45512754,-0.47786975,-0.2604245,0.16420609,0.05705802,-0.25166398,-0.37800297]],"activation":"identity","dense_3_b":[[0.058641378],[0.038829286],[0.08638757]]},{"dense_4_W":[[1.2422407,0.79126894,0.21478729]],"dense_4_b":[[0.05097585]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-GA000 4TSHA100'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-GA000 4TSHA100'.json new file mode 100755 index 0000000000..7096b57212 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-GA000 4TSHA100'.json @@ -0,0 +1 @@ +{"input_std":[[8.052273],[0.9509479],[0.50553817],[0.038164727],[0.9445496],[0.94397974],[0.94506735],[0.93094087],[0.91978514],[0.90017253],[0.8804518],[0.037949175],[0.037987206],[0.038005527],[0.037829578],[0.03761687],[0.037189245],[0.036789745]],"model_test_loss":0.004591483157128096,"input_size":18,"current_date_and_time":"2023-08-07_16-42-35","input_mean":[[23.199976],[0.06977518],[0.010112249],[0.011418438],[0.06521592],[0.06679082],[0.06787061],[0.07323156],[0.07372562],[0.07214795],[0.07004894],[0.011164797],[0.011199542],[0.011221814],[0.011139646],[0.011041907],[0.010719572],[0.010505906]],"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.014942537],[-4.3474574],[-0.08941054],[-4.3885407],[-0.014533082],[-0.040196232],[0.061592374]],"dense_1_W":[[-0.012185595,0.2322522,0.7511205,0.02690325,0.5641042,0.42065173,-0.8066829,0.18944919,0.39064535,-0.5669989,-0.14261945,0.34274545,-0.20055962,-0.6011869,-0.12676005,0.13741869,0.45624214,-0.2540088],[-1.3546237,0.8447106,0.35209763,0.076260105,-1.0732373,0.3980371,-0.39189407,1.4404069,0.225998,0.47837642,-0.25626668,0.47501436,-0.20985436,-0.2627164,-0.21115017,-0.010310166,-0.54525554,0.4810268],[0.002832261,-1.1939845,-3.5876055,0.5727716,0.8229184,0.06148804,0.54211617,0.0322967,-0.6423043,-0.55174315,0.664836,-0.16645195,-0.5878055,-0.32204002,0.13268834,0.2666557,0.5713847,-0.38673636],[-1.3233963,-0.87649137,-0.3446561,0.14505188,0.6079438,-0.34363598,0.624898,-0.82965463,-0.60310423,-0.3681155,0.16082169,0.0010988517,-0.4206278,0.33600268,0.02962365,0.1367739,0.277682,-0.30213332],[0.013596902,-0.13552241,-0.70311356,-0.13047394,-0.32529,0.5773636,-1.1701663,0.24257344,0.43782198,0.043168012,0.08643236,0.48032,0.23322079,-0.021323098,-0.31740412,-0.11516121,-0.24237125,0.31669086],[0.001166192,-0.40128833,0.0049709324,0.111636855,0.27789602,-0.79010975,0.42289734,0.16445734,0.12562138,-0.34984663,0.12859115,-0.35596535,-0.0395504,-0.019919783,-0.21450609,-0.14650743,0.23265977,0.41473433],[0.0023671926,-0.6460285,-0.0019327962,0.14094958,0.38341612,-0.9574827,-0.101965494,0.004554995,0.46401522,-0.12909779,-0.1426274,-0.29289252,0.08252197,0.46871328,0.22656342,0.13870023,-0.055463392,-0.2501583]],"activation":"σ"},{"dense_2_W":[[-0.62714016,-0.42675447,0.39623365,0.09701159,-0.5383957,0.45013547,0.6001207],[-0.35508782,-0.57408017,-0.12564163,0.28653708,-0.08157015,0.20559573,0.46634027],[0.5093158,0.36876306,-0.4645391,-0.65979177,0.57504994,-0.35079157,-0.17476],[-0.31621355,-0.29714108,-0.34154972,-0.78180116,-0.008518251,-0.4106797,-0.19771425],[-0.43568668,-0.17445277,0.23282811,-0.3699338,0.16136363,0.05052372,-0.09912311],[-0.46512806,-0.5448078,-0.08042258,0.6210385,-0.16905335,0.28547442,0.5111774],[-0.034349065,0.5364692,-0.51728934,-0.16454658,-0.22226335,-0.42052928,-0.20821048],[0.33714008,-0.4330567,0.37451595,0.2814601,-0.47018304,-0.39796677,-0.55231714],[0.57910985,-0.024047505,0.30089426,-0.6221561,0.50119555,-0.50120574,-0.7213545],[-0.40165135,0.20899656,-0.2954376,-0.14917205,-0.59254116,0.37713796,0.22864541],[0.6255446,-0.06200693,-0.4204777,-0.036136795,0.446564,-0.2950839,-0.64832413],[-0.26900464,0.49159622,0.3034731,-0.13085237,0.56453574,-0.8307436,-0.28495753],[-0.47413096,-0.7120706,-0.035541266,0.24300101,-0.6801091,0.27434683,-0.107843675]],"activation":"σ","dense_2_b":[[-0.09530544],[-0.091849595],[0.10365482],[-0.28563413],[-0.27218583],[-0.11129274],[0.004807437],[-0.06996],[0.050393272],[-0.10061962],[0.04376929],[-0.04139788],[-0.13395813]]},{"dense_3_W":[[-0.66973096,-0.48279104,0.7676326,-0.5096833,0.2064793,-0.38637576,0.35450128,0.07051719,0.5298366,-0.20001142,0.28865328,-0.04322722,-0.4298923],[0.3608688,-0.3860877,0.34115362,0.10120958,-0.30185267,0.09988014,-0.46597403,0.5618963,-0.13389808,-0.2762836,0.5472369,0.30736694,-0.16745393],[-0.459392,0.11412182,-0.040371146,0.6745572,-0.27183312,-0.536198,-0.15377107,-0.07133568,0.04935285,-0.06970548,0.27231002,0.4255971,0.2895038]],"activation":"identity","dense_3_b":[[0.044112355],[-0.017487336],[0.043834195]]},{"dense_4_W":[[1.0927324,0.054080144,0.7976937]],"dense_4_b":[[0.042528085]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022.json new file mode 100755 index 0000000000..d119379782 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE HYBRID 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.261341],[1.0799276],[0.47439072],[0.035921823],[1.0769413],[1.0782329],[1.078946],[1.0603385],[1.0393461],[1.0079743],[0.97282183],[0.03575561],[0.03581589],[0.03587639],[0.035916228],[0.03587763],[0.03574848],[0.03554262]],"model_test_loss":0.00492028146982193,"input_size":18,"current_date_and_time":"2023-08-07_15-53-19","input_mean":[[21.97073],[-0.029600525],[0.0032512692],[0.0019785082],[-0.031247197],[-0.030642778],[-0.030970285],[-0.027264683],[-0.02531458],[-0.023465578],[-0.022579186],[0.001951127],[0.0019527602],[0.0019488906],[0.001962819],[0.001987138],[0.0018675312],[0.0017249424]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.245048],[3.3935277],[-0.15662995],[-0.014851185],[-0.09243428],[-0.004402729],[0.0380219]],"dense_1_W":[[-0.5481877,-1.1734215,-0.45120606,0.034027565,-0.12534843,-0.4320663,0.08604743,0.20808327,-0.46957174,-0.24812324,0.19450486,-0.2840027,-0.29063642,0.8850254,0.1337479,0.12512524,-0.11077451,-0.10846867],[0.55359775,-0.78132075,-0.45535302,0.04589877,-0.23332703,-0.6900583,0.27111268,-0.2906912,-0.26810634,-0.0014484213,0.012803484,-0.4214593,0.14392284,0.39275578,0.4591555,0.20790677,-0.47720864,0.03637555],[-0.001160366,0.07135902,0.020283442,-0.11026379,-0.3300407,1.1425788,-0.8465417,-0.14491843,0.10389491,-0.094203144,0.08786806,0.58249265,-0.31260887,-0.24686775,0.25243184,-0.12136195,-0.14665185,0.10891337],[0.00075157254,0.018735576,-0.015033022,0.2552897,-0.07354839,0.36636823,-0.5266892,0.12183493,0.06295568,0.08566852,-0.0952725,0.33919626,0.36296552,-0.376174,-0.39300168,0.07231392,-0.20756865,-0.050174374],[-0.000663185,0.6687934,-0.021183483,-0.20696321,0.28176227,0.8060634,-0.5820421,-0.17129976,-0.0828522,0.009332605,0.15914959,0.06899979,-0.071527235,-0.21463287,0.2533481,0.31726366,-0.07277975,-0.18115173],[0.0028130943,-1.0741395,-3.5949726,-0.08878999,0.21987598,0.103467554,0.6372202,0.32599628,-0.5349482,-0.4875307,0.49166214,-0.50000715,0.108137466,0.38457507,0.040603124,0.52961135,-0.122126095,-0.14863239],[0.0012397681,-0.8501431,0.004625623,0.39065698,0.3043851,-0.7930684,0.51580155,-0.047317076,-0.22162919,0.1124854,0.017583156,-0.33733293,-0.13366492,0.6077388,0.29493827,0.16720308,-0.41922003,-0.117570505]],"activation":"σ"},{"dense_2_W":[[-0.05502436,-0.66888684,0.065067135,0.53669417,-0.01893934,0.36197692,0.01791807],[0.59498864,0.6528727,-0.38318837,-0.45497322,-0.08562961,-0.31445232,0.69590557],[-0.41835263,0.04931508,0.0073655155,0.6559025,0.22435378,-0.42106333,0.13407917],[0.29046017,-0.09791975,-0.41265818,-0.49019828,-0.6872615,-0.26517653,-0.3567036],[0.13606516,0.44112694,-0.57032704,-0.13413966,0.0034367347,0.24891582,0.16898009],[0.011530882,-0.15070426,-0.46052173,0.5160092,-0.38340572,0.1328647,-0.18670098],[0.3382954,-0.22624794,0.028343266,-0.62450606,-0.059560556,-0.16521035,0.595776],[-0.5985326,-0.5175321,0.53653544,0.20450565,-0.12380274,-0.101402126,0.21046633],[-0.10918766,0.7896873,-0.6037477,-0.021383286,-0.36211497,0.5407418,0.30803818],[-0.38357767,0.13743253,0.5462274,0.33449608,0.58031,-0.44345102,-0.26854265],[0.5908161,-0.21907422,0.20983866,-0.4897011,-0.59968626,-0.065551214,0.5250327],[0.3375154,0.43778437,-0.31592417,-0.13451315,-1.0115412,-0.32253185,0.66413474],[0.09797849,-0.3698204,0.04279515,0.25717175,0.30788177,-0.25584602,0.19880241]],"activation":"σ","dense_2_b":[[0.003746753],[-0.08357698],[0.006304543],[-0.24605891],[-0.07121214],[-0.015032947],[-0.09400678],[-0.0024056516],[-0.010130554],[0.014799146],[-0.060003918],[-0.07540407],[-0.03000076]]},{"dense_3_W":[[0.017942075,-0.6212448,-0.12496728,0.14162916,-0.2248813,0.49471742,0.18174668,0.67305565,-0.181309,0.61732584,-0.27006516,-0.049796086,0.12735644],[0.3594483,-0.31422514,0.66338825,-0.41523233,-0.47088245,-0.28914762,-0.116269276,0.29540908,-0.6357099,0.3832997,-0.06724131,-0.5605163,0.09249603],[0.21089882,-0.26488605,0.433047,0.35239476,0.3053993,0.25026608,-0.4875768,-0.38531804,-0.30042005,0.68175066,-0.5961486,0.07390234,0.31267327]],"activation":"identity","dense_3_b":[[0.02659904],[0.034767646],[0.024563152]]},{"dense_4_W":[[0.6525578,1.0061679,0.50279385]],"dense_4_b":[[0.032301653]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE PlUG-IN HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-CLEC0 4TSHC102'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE PlUG-IN HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-CLEC0 4TSHC102'.json new file mode 100755 index 0000000000..039dbb74b4 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE PlUG-IN HYBRID 2022 b'xf1x00TM MDPS C 1.00 1.02 56310-CLEC0 4TSHC102'.json @@ -0,0 +1 @@ +{"input_std":[[7.9339604],[1.088105],[0.44446564],[0.040635813],[1.0915902],[1.0908207],[1.0892842],[1.0640342],[1.0442107],[1.0169972],[0.9836625],[0.040394578],[0.04044262],[0.040480178],[0.040640704],[0.040678967],[0.040454783],[0.040132876]],"model_test_loss":0.012677030637860298,"input_size":18,"current_date_and_time":"2023-08-07_17-34-14","input_mean":[[22.346836],[-0.1010392],[0.011439833],[-0.024613421],[-0.104070425],[-0.103574194],[-0.10293765],[-0.095743805],[-0.08788937],[-0.07853373],[-0.06978028],[-0.024727972],[-0.02470151],[-0.02467759],[-0.024601528],[-0.024534974],[-0.024629418],[-0.024778875]],"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.15558718],[-2.6034374],[-0.04039103],[0.65522605],[1.2802107],[-0.27219942],[-2.634381]],"dense_1_W":[[-0.24201536,0.7082375,0.0028008588,-0.027780006,-0.17135863,0.8042699,-0.29119372,-0.007927601,0.47618863,-0.03486508,-0.16500926,0.45117432,0.007103674,-0.5084788,0.060515866,-0.011655033,-0.18416026,0.17665891],[-0.4738057,-1.3893577,-0.26687565,0.5591557,0.19673826,-1.0583004,0.4100114,0.08631018,-0.27167842,-0.36606842,0.17948642,-0.91138256,0.396046,0.4691029,0.03294264,-0.1527472,-0.1440006,-0.040798534],[-0.062322266,0.8630222,3.1276238,0.31263065,-1.0991832,-0.350469,-0.7729707,0.5405366,1.1623893,0.3297452,-0.467351,0.8092153,0.47536352,-0.62649566,-0.13063848,0.078494415,-0.9319446,-0.035552464],[2.002557,-0.40489927,-0.013253979,0.0036408182,-0.96465665,0.19661005,-0.953392,-0.20606351,-0.26921293,0.00091835565,0.024142867,0.30179256,-0.05378692,-0.3731178,0.29126972,0.056546733,-0.13077201,0.019902507],[0.016891545,-0.07916437,0.11697357,-0.5920895,0.8242633,-0.11014468,0.3030195,0.35970256,0.08895364,-0.30832535,0.84346753,-0.8849758,-0.47036183,0.11911124,-0.22588879,0.065679416,0.021028057,-0.427552],[9.724902e-5,-0.38385,-0.020528087,0.05751557,-0.14688933,-0.86524874,0.8712383,0.03841566,0.18008858,0.11291066,-0.35409862,-0.13303213,-0.1636967,0.5216691,0.06455103,0.35800162,-0.08108982,-0.05743626],[-0.4588684,0.83262295,0.25882557,-0.19348866,-0.21520121,0.85895246,0.24441022,0.04129096,0.09734719,0.33709678,-0.10813452,0.626401,-0.23454317,-0.4344429,-0.44665545,0.30053115,0.17539406,0.007217913]],"activation":"σ"},{"dense_2_W":[[-0.651883,-0.28622374,0.12934318,-0.29924047,0.45619386,0.49076936,-0.5204953],[0.19332084,-0.8814819,0.12185404,0.1112917,0.09789456,-0.32125413,0.5419122],[-0.0070752506,0.30487537,0.22090623,0.374676,0.5418867,0.1608909,0.16253495],[1.6104504,-0.8317929,-0.48558232,0.23532712,-0.2672344,-1.3590785,1.5980096],[0.1554723,-0.67611736,-0.075388476,0.024493428,-0.4251306,-0.6432536,0.05229573],[-0.44482633,-0.36988914,-0.8266434,-0.77991384,-0.020200279,0.08657742,0.4415185],[0.37289235,-1.3610709,1.2108856,1.1463528,-0.08294851,-0.36348182,0.015509408],[-0.26891112,-0.4422061,0.04140005,-0.25809646,-0.45758307,0.12543325,-0.11151142],[0.6491537,-0.6115983,0.12226665,-0.022036532,0.25215194,-0.39254242,-0.08420935],[0.41343462,0.040416438,0.5110888,-0.30294675,-0.24655536,-0.94380873,0.4448432],[-0.21065868,0.49556023,-0.3594535,-0.1782758,-0.1000126,0.6914605,-0.44446382],[0.50264686,-0.51379687,0.38724154,0.19442251,0.023962934,-0.3308979,0.17989966],[-0.08920153,0.04748019,-0.23014763,0.21383081,-0.33842874,-0.65826106,-0.1681412]],"activation":"σ","dense_2_b":[[0.011876502],[-0.36479667],[0.017360244],[-0.07617602],[-0.23157506],[-0.28419593],[0.06942652],[0.011033443],[-0.086510606],[-0.045363814],[0.03267394],[-0.13571551],[-0.264156]]},{"dense_3_W":[[-0.6548141,-0.13956049,-0.48768273,0.120333016,-0.28902444,0.21501225,0.307953,-0.107009396,0.440212,0.4713256,-0.055264547,-0.3514998,-0.5159563],[-0.096859366,0.5156044,-0.23406532,0.55331874,-0.026274543,-0.5353379,0.25472736,-0.5028626,0.25127223,0.3485652,-0.64658546,0.40520468,0.34961805],[0.60555744,0.38062447,0.51950586,-0.049985483,-0.54793733,-0.44031206,-0.013909685,-0.4211523,-0.22971645,-0.38632122,0.6218737,-0.41705465,-0.09672569]],"activation":"identity","dense_3_b":[[-0.02192258],[-0.031370267],[0.023667987]]},{"dense_4_W":[[0.74219704,1.1328688,-0.6478822]],"dense_4_b":[[-0.026964737]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE PlUG-IN HYBRID 2022.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE PlUG-IN HYBRID 2022.json new file mode 100755 index 0000000000..7e4f989f03 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SANTA FE PlUG-IN HYBRID 2022.json @@ -0,0 +1 @@ +{"input_std":[[7.9325304],[1.0882362],[0.43774286],[0.04055885],[1.0919278],[1.0913655],[1.0900016],[1.0642537],[1.0437973],[1.014913],[0.9828307],[0.040379256],[0.04041959],[0.040456932],[0.04061512],[0.040622164],[0.040395677],[0.040053483]],"model_test_loss":0.012668303214013577,"input_size":18,"current_date_and_time":"2023-08-07_17-09-24","input_mean":[[22.347511],[-0.10092363],[0.011539685],[-0.024840366],[-0.10495763],[-0.104191564],[-0.103371926],[-0.0960919],[-0.088538796],[-0.081120916],[-0.073905],[-0.024927486],[-0.024909802],[-0.024889572],[-0.024763657],[-0.024654102],[-0.024695622],[-0.02485533]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.777723],[-0.21736239],[0.06858174],[0.028778331],[-0.1341363],[-3.286173],[0.05866324]],"dense_1_W":[[0.9532825,-0.57736486,-0.3511588,0.6824505,-0.024612838,-0.4149641,-0.2517366,-0.38986352,-0.041095104,-0.23648082,-0.22857088,-0.52361864,0.59133035,-0.016187055,-0.30439842,-0.008700108,0.37054965,-0.3851146],[-1.2131011,-0.040348757,-0.030648885,0.07944047,-0.5089448,-0.17325257,-0.35811424,-0.39610377,-0.3414392,0.13268204,0.036754124,0.244627,-0.18363807,-0.29357588,0.14597428,-0.07848809,0.117397904,-0.0066551454],[-0.33372527,-0.8653413,-0.0204796,0.15082183,0.21337464,-1.1272148,0.6884098,0.10593993,-0.21011119,-0.019475536,0.060115736,-0.7099037,-0.3675179,0.98888445,-0.0021350337,-0.0023339558,0.034033813,-0.08632464],[-0.0087699555,0.47234085,-0.003936672,-0.08932229,-0.15217909,0.76968,-0.6072722,0.19957112,-0.1826489,0.28319913,-0.11377978,0.5678719,0.0690483,-0.4572559,-0.256832,-0.19453537,-0.1292364,0.26785675],[-0.20146403,-0.6867957,-0.021399295,-0.09085224,-0.13374451,-0.95356876,0.7412253,-0.0020842238,-0.32998958,0.29012066,-0.12927385,-0.17273527,0.046919394,0.31265458,-0.0067970203,0.049638614,-0.1646258,0.1021922],[-1.0781149,-1.9831505,-0.39170006,0.6552042,0.2507927,-0.7482493,0.69903153,0.11317306,-0.44421217,-0.17660317,-0.19381957,-0.40258512,0.057917267,0.6132898,0.2122239,-0.68616545,-0.016808815,0.009621946],[0.07036603,0.6711271,3.090535,0.5774168,-1.0394694,0.01879839,-0.89210445,0.5525633,1.0586205,0.27921924,-0.4908341,0.3026311,0.51791734,-0.2981133,-0.38711485,-0.3440137,-0.20040374,-0.14860815]],"activation":"σ"},{"dense_2_W":[[0.053376287,-0.27212048,-0.592167,-0.66140467,0.123351865,-0.45312202,-0.5552815],[-0.15174036,0.3456475,-0.72808313,-0.16873683,-0.87532926,-0.19756816,0.010091597],[0.32735926,0.2430751,-0.49615663,0.71439725,-0.11260843,-0.43778282,0.48608312],[0.5652805,-0.25033778,0.47545195,-0.27911112,0.3687969,0.25403744,-0.3056421],[0.4027308,0.06937314,-0.008849847,-0.09499983,0.50666314,-0.021115543,-0.31085667],[0.15451042,0.16761723,0.14800774,0.6163942,-0.77986425,-0.58117247,0.40439337],[-0.52235144,0.37827665,-0.83033717,0.8296531,0.2544118,-0.37235376,-0.1002346],[0.09825943,-0.60037464,0.65948284,-1.2040564,0.6021252,0.091694914,0.21354105],[-0.31508094,0.2741653,-0.7038115,0.279092,-0.13322929,0.11963509,-0.14818548],[0.20600095,-0.076976694,0.21097696,-0.76661587,0.3835434,-0.05707485,0.10319275],[0.62171084,-0.24905708,0.5991603,-0.52393246,0.49378031,-0.1764447,-0.21842895],[-0.20955467,0.22948128,0.26585734,-0.95675725,-0.113945276,0.6225702,-0.500622],[0.16029201,0.49023697,-0.6596639,0.25944898,-0.21170011,-0.20044534,-0.0025964344]],"activation":"σ","dense_2_b":[[-0.2663133],[-0.10525206],[-0.011656664],[-0.15913439],[-0.09004699],[0.038266346],[0.051478483],[-0.2926297],[-0.24159859],[-0.120620705],[-0.11021781],[-0.33539078],[0.00798126]]},{"dense_3_W":[[0.16740364,-0.068965144,-0.3025593,0.50858945,0.5449389,-0.24625476,-0.49794698,0.29956707,-0.30424193,-0.008103076,0.58150756,0.0818273,0.01633671],[0.4533966,-0.42790514,-0.31081665,0.5545747,0.38430354,-0.67824066,-0.5380451,0.05798864,0.105315335,0.27879745,0.52759033,-0.06383929,-0.3282453],[-0.5254706,0.061006207,-0.26732418,-0.028615523,0.17779939,-0.3987639,-0.033597037,0.12323639,0.024477432,0.33606854,0.38722304,0.18485908,-0.4257627]],"activation":"identity","dense_3_b":[[-0.057745293],[-0.045989405],[-0.043302864]]},{"dense_4_W":[[-0.6202967,-0.6532501,-1.0174378]],"dense_4_b":[[0.047135167]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2019.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2019.json new file mode 100755 index 0000000000..971897d6f7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2019.json @@ -0,0 +1 @@ +{"input_std":[[7.697617],[1.0609225],[0.4379445],[0.037631202],[1.0623844],[1.0616655],[1.0594143],[1.0256116],[0.99824595],[0.9636123],[0.927896],[0.037490875],[0.037519626],[0.03754297],[0.03749497],[0.037434172],[0.03738278],[0.03713714]],"model_test_loss":0.015784617513418198,"input_size":18,"current_date_and_time":"2023-08-07_17-59-15","input_mean":[[22.772198],[-0.015615957],[-0.00096197607],[-0.0010119482],[-0.010546596],[-0.010836963],[-0.011236375],[-0.011094289],[-0.012648121],[-0.013635343],[-0.017397134],[-0.0010358563],[-0.0010145861],[-0.0010011211],[-0.0010085123],[-0.0010529933],[-0.00111335],[-0.001285189]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.7229438],[-3.3683147],[-0.1282507],[-0.31550232],[-0.058664136],[-0.95240706],[-1.0986025]],"dense_1_W":[[-0.7789607,1.9123646,0.39085448,-0.76762176,0.14567389,0.8066052,-0.43277985,0.2297818,0.42394215,0.33902678,0.07674288,0.46162274,-0.30707216,-0.25233504,0.19915079,-0.3460779,-0.054854672,0.1426618],[-0.7302568,-1.7004513,-0.37651184,0.7811046,-0.6319955,-0.51594245,0.55498344,-0.18935819,-0.5285875,-0.24025975,-0.1379504,-0.2577349,0.15419608,0.12393667,-0.11645755,0.28632703,0.012518243,-0.093591586],[0.6120753,-0.042914443,-0.0007887555,-0.42378148,-0.44867167,-0.70841163,0.7576831,-0.0939431,0.27074918,0.111739814,-0.2615336,-0.97394973,-0.07050334,0.9536129,0.39760146,0.11356349,0.23691247,0.0036621983],[-0.012153974,2.5360656,3.6491127,-0.46920162,-1.7772331,-0.7169024,-1.3301034,-1.1953633,2.5687883,1.1499572,-0.9038787,0.6629773,0.34683412,-0.42444223,-0.25739744,-0.3469017,0.056961935,0.29270503],[0.017274002,0.5840407,-0.0023877379,-1.808923,0.3084969,1.3571715,-0.58538103,-0.2375718,0.09313133,0.6554645,-0.18251002,0.42035452,0.1955895,0.31606016,0.75343394,-0.13268644,0.11386261,-0.08166157],[-0.6063996,-0.5005416,-0.00912951,0.44437352,0.36323333,0.11949726,1.0753121,-0.31381848,-0.58282745,-0.09158226,0.44612095,-0.02124081,0.3982341,0.28105518,-0.5664151,-0.72633684,-0.068839945,-0.013206231],[0.8306485,0.08912472,-0.0052987277,0.64255923,0.7617923,0.7024269,-0.8749369,-0.058627207,-0.20296139,-0.30535534,0.43017447,0.85471725,-0.12971222,-0.4191892,-0.5445941,-0.6685368,0.036711175,-0.07217302]],"activation":"σ"},{"dense_2_W":[[-1.0357116,0.9065824,0.31460804,0.10403336,-0.74875206,0.45047748,-0.85107225],[-0.31625268,-0.4494891,-0.6104021,-1.392215,0.4076329,0.14704718,-1.4530859],[-0.42341897,-0.4814765,0.14645709,-0.46671197,-0.3856185,-0.13905132,-0.04437501],[-0.39645517,0.2137238,-0.42819747,-0.36393335,-0.40245435,-0.34181696,-0.02817246],[0.53853995,-0.4282784,0.22716291,-0.40256846,0.638609,0.15241797,0.37022516],[1.1081164,1.7182009,-0.90255654,-2.231287,-0.1349012,1.1165563,-1.5446924],[-0.5763982,-0.065446824,0.4192874,0.2743847,-0.90122163,0.02639325,-0.13482374],[-0.7385771,0.08592593,0.8796296,-0.23078102,-0.24460639,0.50752836,-0.08413138],[-0.10253753,-0.17410895,-0.73427474,0.27838975,0.50574356,0.08523981,0.3418018],[0.0016925063,-0.5907013,-0.85067403,0.30883756,0.4896555,0.11207346,-0.16476792],[-0.15516539,0.26878807,0.57642984,-0.83853066,-0.33322036,0.4774422,-0.9348281],[0.4693064,0.1862027,-0.6251714,0.25223947,0.41830084,-0.44884276,0.2828574],[0.10416213,-0.36627316,-0.822629,0.20704469,0.16795447,0.081779845,-0.4003506]],"activation":"σ","dense_2_b":[[0.20383972],[-0.31411672],[-0.22941822],[-0.028190762],[-0.031698458],[-0.6003632],[-0.15707792],[0.10450507],[-0.06457617],[-0.12753844],[-0.05697597],[-0.10512635],[-0.03311049]]},{"dense_3_W":[[0.6161703,-0.20014547,0.51343465,0.32414958,-0.4191405,-0.094090216,0.6916015,0.68653065,-0.46503648,-0.32374275,0.20278896,0.0272236,-0.40860736],[0.016187323,0.4218443,-0.39871958,-0.49440855,-0.20302232,0.7119994,-0.19964194,0.4442079,0.3104815,-0.5141474,-0.18292132,-0.009729394,-0.43212843],[-0.02621932,0.42008805,-0.41170013,-0.36279938,0.49049714,0.13969359,-0.38049182,0.22852893,-0.5885065,0.420613,0.49065357,-0.67078143,-0.24520677]],"activation":"identity","dense_3_b":[[-0.04161267],[-0.03253271],[-0.033194877]]},{"dense_4_W":[[-1.1191984,-0.70736027,-0.7379151]],"dense_4_b":[[0.038523376]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0000 4DNAC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0000 4DNAC101'.json new file mode 100755 index 0000000000..49384985ac --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0000 4DNAC101'.json @@ -0,0 +1 @@ +{"input_std":[[5.0880184],[0.927232],[0.38201457],[0.029326165],[0.9297298],[0.9282585],[0.926674],[0.9185298],[0.9110499],[0.9009496],[0.8885786],[0.02925959],[0.029274147],[0.029276866],[0.029164143],[0.028929831],[0.028371913],[0.027726393]],"model_test_loss":0.002121754689142108,"input_size":18,"current_date_and_time":"2023-08-07_18-58-26","input_mean":[[22.443861],[-0.06408811],[0.0033772418],[-0.0077469447],[-0.063098],[-0.0624671],[-0.061826434],[-0.05872468],[-0.052127004],[-0.04868136],[-0.043194663],[-0.007867037],[-0.0077954014],[-0.0077240258],[-0.0075072567],[-0.0073709814],[-0.007499314],[-0.0075947903]],"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.4392896],[0.11256368],[-0.009349937],[0.017267969],[0.07836847],[-0.49510518],[-0.36707103]],"dense_1_W":[[-0.0035144198,-0.07837074,-0.10444379,-0.21379957,-0.055707484,-0.43247733,0.12956916,-0.16459478,-0.026531655,-0.41787723,0.11838695,-0.36631712,0.29493195,0.8054866,0.48842925,0.3487459,0.29926014,0.33285514],[-0.00566682,0.0685797,-0.0070852637,-0.1262075,-0.117236935,0.11295796,-0.070642754,0.23535657,-0.13772064,0.20243229,-0.08022183,-0.3007161,-0.27897793,-0.74277157,-0.1217799,0.18944399,0.512346,0.80977684],[-0.00033654989,-0.31247973,-1.0609967,-0.4622876,0.098224156,0.07347569,0.4536589,0.16399379,-0.21179616,-0.25765136,0.28651273,0.2288293,0.3252808,-0.009037016,0.08319518,-0.38650706,-0.22199428,0.3495078],[8.025195e-5,0.117466316,-0.0020013717,0.25343972,0.21027248,-0.3314746,-0.24337924,0.21665736,-0.124749966,-0.16508707,0.118159376,-0.6589648,-0.38464743,0.24033323,0.11305636,0.06770096,0.3398314,0.020196075],[-0.123161614,0.23502746,-1.6969047e-5,-0.08013821,-0.13597044,0.68115455,-0.29792637,-0.023697855,-0.14486383,-0.10938473,0.1794991,0.07350343,0.15798949,0.06415683,-0.18382339,-0.21429943,-0.013510968,0.160445],[-0.0044880393,0.19351251,-0.1222242,0.38997644,-0.82055694,0.039774433,-0.34056687,0.69073474,-0.21781223,-0.43224278,-0.09824878,0.6865208,-0.13685298,0.07766766,-0.13825902,0.3761925,0.53175914,0.50025547],[0.19364405,-0.07879009,-0.0004976161,-0.16666786,0.40081018,0.60932076,-0.4746135,-0.16062911,0.00033986976,-0.12215615,0.24129596,-0.051383093,-0.29511973,0.03366455,0.4457546,0.17353448,0.10611054,-0.27080864]],"activation":"σ"},{"dense_2_W":[[-0.21429534,-0.2805947,0.33813262,-0.55704015,0.19794577,-0.41809848,0.5465813],[0.05483169,-0.48598504,0.2133983,0.4682273,0.08959408,-0.68643206,0.14104469],[0.5768833,0.2345835,0.23833336,0.88208973,-0.7001157,-0.87939644,-0.5970078],[-0.50687236,0.34342203,-0.60396534,-0.39049196,0.1544499,0.37261438,0.6712155],[-0.2097123,-0.5347513,-0.26231483,-0.16484694,-0.0996075,0.47142714,0.6025729],[0.14433241,-0.26973325,-0.40456578,-0.22319494,-0.16914153,0.34973475,0.41994274],[-0.39278847,-0.26437518,0.014975275,-0.3900699,0.20229916,-0.47895268,0.3397611],[0.018268416,0.19815785,-0.16354918,-0.6932698,0.82313913,0.33753312,-0.23361456],[0.84115773,-0.4972589,0.04639677,0.57515514,-1.2003638,-0.4645931,-0.35091218],[0.2870165,0.29187405,0.13971819,0.32765952,-0.43575177,-0.54234403,-0.47328368],[-0.534798,0.1346562,-0.35825455,-0.4411009,0.7369132,-0.24896927,0.43602455],[0.60806775,-0.6560042,0.121712156,0.8236341,-1.3794309,-0.54273456,-0.23115636],[-0.36894193,0.43866634,-0.4424108,-0.3495697,0.2603339,-0.26079863,0.54851836]],"activation":"σ","dense_2_b":[[-0.17165633],[-0.1849741],[0.04078258],[-0.08273829],[-0.16197646],[-0.22186738],[-0.10296965],[-0.15492782],[0.10536137],[-0.21006389],[-0.0909507],[0.008903828],[-0.12633856]]},{"dense_3_W":[[0.12136265,-0.18142237,0.20568378,0.43467548,-0.3135675,-0.30494106,0.32837293,0.43891245,-0.10172039,-0.6920788,0.3248927,-0.36158195,-0.36961478],[0.20634529,0.016585633,0.615192,0.3980539,0.31894875,-0.22123288,-0.44111037,0.21111517,0.5416054,0.48227146,0.4775837,0.023265895,0.086540245],[0.097952254,0.069732554,-0.85863006,0.5982017,0.4785997,0.2211003,-0.16872703,0.26387373,-0.45675164,0.3492257,0.14213935,-0.22985671,0.5829968]],"activation":"identity","dense_3_b":[[-0.089413054],[0.038146988],[-0.09979728]]},{"dense_4_W":[[0.7397742,-0.18844637,1.2101274]],"dense_4_b":[[-0.09552154]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0010 4DNAC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0010 4DNAC101'.json new file mode 100755 index 0000000000..75ef8f9f84 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0010 4DNAC101'.json @@ -0,0 +1 @@ +{"input_std":[[9.206886],[1.4504983],[0.49971998],[0.04266468],[1.4383729],[1.442444],[1.4449018],[1.4304984],[1.408558],[1.374435],[1.3352983],[0.042570964],[0.04259354],[0.042611882],[0.04251703],[0.04239174],[0.042183105],[0.041899502]],"model_test_loss":0.010444642044603825,"input_size":18,"current_date_and_time":"2023-08-07_19-25-56","input_mean":[[22.475485],[0.031372134],[0.0032399746],[-0.008984418],[0.032596383],[0.032747533],[0.033002835],[0.034930702],[0.03454325],[0.032979634],[0.030567244],[-0.009006616],[-0.008997529],[-0.008991521],[-0.008974956],[-0.008960746],[-0.008996439],[-0.0090720635]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.4730613],[-1.0220556],[2.2321498],[-0.24373206],[-0.12732792],[-0.5460787],[0.106436335]],"dense_1_W":[[-0.41534066,-0.9714392,-0.31006238,0.09352594,0.055552863,-0.83239764,0.31457546,0.21544012,-0.02930472,-0.10614339,-0.15644209,-0.32349718,-0.2776175,0.4681082,-0.023063358,0.07786211,0.2524736,-0.23179433],[-0.95453423,-0.26022857,-0.8862801,0.13255504,-0.07940164,-0.13633952,0.97671944,-0.32103124,0.13677597,-0.54467875,0.006754226,-0.5190258,0.22493096,-0.069508426,0.35693893,0.23997544,-0.24516748,-8.168083e-5],[0.4379902,-0.5599902,-0.32294285,-0.11438441,-0.28119034,-0.41465545,-0.007964375,-0.23656115,0.24708937,-0.0064412868,-0.27999642,-0.06364177,-0.022107648,-0.14844713,0.67481005,-0.39441112,0.21968858,-0.11588854],[0.0060809795,-1.1198676,0.0067951665,0.40737534,-0.17178549,-0.29760578,0.22654669,-0.15745667,0.113858625,0.35876435,-0.29039302,-0.09667714,-0.28005886,0.4659065,-0.2083599,-0.044308778,0.10261238,-0.015207596],[1.192366,-0.13911475,-0.7602778,0.061394785,-0.33700565,0.43223011,-0.383315,0.21897188,0.0576574,-0.06383468,-0.40268126,0.25918442,-0.083131015,-0.057717066,-0.16279124,0.056148607,-0.22752735,0.26602584],[-0.70031285,0.80340934,0.86016697,-0.10652274,-0.49268568,-0.25453496,-0.77597094,0.038994193,0.80372953,0.4799013,-0.42903787,0.16632754,-0.05639839,0.06240709,0.04071726,-0.36329105,0.119140625,0.0075790263],[1.2511556,0.18218865,0.8153701,-0.17519355,0.03620571,0.020730898,0.62968934,-0.6549357,0.038980555,-0.24152188,0.6776999,-0.15306287,-0.034662757,0.29590893,-0.04357369,0.18099506,-0.09237122,-0.09097706]],"activation":"σ"},{"dense_2_W":[[-0.3733046,-0.63211983,-0.2867291,-0.62118083,-0.010183722,-0.8466765,0.16133504],[0.0067310715,0.09728172,-0.6812141,-0.9659649,0.40198094,0.19644472,-0.74384815],[0.9709826,0.20648259,0.1305725,0.3045001,-0.48293394,0.117387146,0.25224584],[1.4520717,0.2679463,-0.0059825173,0.42838717,-0.34279865,-1.3324488,-0.41395462],[-0.14703725,0.24708863,0.47823694,0.2118483,0.19143926,-0.33324513,-0.41627753],[0.63378096,0.0006939869,-0.2391469,1.0002756,-0.46094698,-0.0097055435,0.49494484],[0.1101795,0.34717083,0.48524472,0.53889567,-0.20231925,-0.6760102,0.3543506],[-0.61280346,-0.46988106,-0.82949644,-0.14417309,0.5123994,0.38542563,-0.31748974],[-0.14198948,-0.46256673,-0.24424392,-0.5878419,-0.6047017,-0.9315717,-0.25987655],[-0.20438918,-0.2538593,-1.2795161,-0.36110374,-0.18944141,0.4315354,-0.09864795],[0.35757583,0.24092562,-0.48579407,-0.2887947,-0.2939099,-0.08969654,-0.53155077],[-1.1322478,-0.42064786,0.14613308,-0.4441744,0.60612696,-0.1682891,-0.77085215],[-0.9423813,-0.71970075,-0.32939398,-0.046559554,0.1559522,0.72302336,-0.31480452]],"activation":"σ","dense_2_b":[[-0.0395953],[0.10148138],[-0.08946762],[-0.5085817],[-0.16269651],[-0.09828724],[-0.14257945],[0.028001558],[-0.25607547],[0.19008303],[-0.15752983],[-0.08156744],[0.2400192]]},{"dense_3_W":[[-0.6305707,-0.7183922,0.61189455,-0.12082674,0.584848,0.7042283,0.2124863,-0.44369617,0.06019076,-0.84690446,-0.1584007,-0.1594603,-0.6551266],[-0.46845788,-0.041823298,0.21797846,-0.23213589,-0.018164458,0.39548802,0.30017138,-0.03640287,-0.08625531,-0.6911282,0.25928518,-0.51322585,0.30503047],[-0.070132144,0.36179328,-0.12638825,-0.6702514,0.2901435,-0.48632953,-0.3823228,0.6769935,0.23988372,0.72708833,-0.030890048,-0.0013352007,0.744018]],"activation":"identity","dense_3_b":[[0.030665295],[0.012413447],[-0.042725306]]},{"dense_4_W":[[-0.6892979,-0.21168873,0.8236525]],"dense_4_b":[[-0.033550464]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC101'.json new file mode 100755 index 0000000000..889660b7e2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC101'.json @@ -0,0 +1 @@ +{"input_std":[[8.9665575],[1.5094953],[0.52320474],[0.049412034],[1.494938],[1.5003909],[1.5036423],[1.4904568],[1.4657476],[1.4215478],[1.3661709],[0.049073346],[0.04916127],[0.049235035],[0.049330566],[0.049299713],[0.049100358],[0.048681706]],"model_test_loss":0.006334397010505199,"input_size":18,"current_date_and_time":"2023-08-07_20-16-55","input_mean":[[23.208042],[0.017637342],[0.0033097109],[-0.0011208885],[0.016748862],[0.016963536],[0.017422808],[0.018023973],[0.019261051],[0.018516017],[0.017028408],[-0.0012430567],[-0.00119908],[-0.001152659],[-0.0010296609],[-0.0009178911],[-0.00079258456],[-0.00066169875]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.9270706],[0.34167355],[-0.01630501],[3.9094112],[-0.043808307],[0.15332954],[0.118518315]],"dense_1_W":[[-1.5419726,0.58544344,0.56862235,-0.06356117,0.07506152,0.28493872,-0.35853422,0.20940292,0.24808577,0.45340854,-0.049729943,-0.34037575,0.31803313,0.018770482,-0.05861212,0.21162248,-0.21842924,0.08095126],[-0.07264593,-0.5357274,-0.024528537,0.15763216,0.3570794,-0.42941192,0.094519556,-0.16744949,0.18548526,0.052800182,-0.063974306,-0.5917518,0.29506087,0.2680911,-0.042359374,-0.037600614,-0.09749487,0.073244646],[-0.0029357334,0.72618747,-0.015540882,-0.093255214,0.22835523,0.555266,-0.62294084,-0.17355366,0.3260155,0.08499513,-0.09322718,0.27955085,-0.20150794,-0.20985933,-0.066402666,-0.24783993,-0.23513341,0.08126326],[1.5574979,0.559662,0.567851,0.1754574,0.23001745,0.08429833,-0.1186271,0.104694836,-0.034708384,0.5989565,0.003940667,0.0305492,-0.13524628,-0.33834115,0.23645407,-0.13648601,0.36581174,-0.23015225],[0.01866292,0.70351815,2.7991784,0.10008903,0.32329226,0.06749305,-0.7636863,-0.22283834,0.55308366,0.393383,-0.91913027,0.05840779,0.3406047,-0.19909629,-0.42205387,-0.11921279,0.065681584,0.23244768],[-0.11102194,0.20182216,0.020422867,-0.07504458,-0.041374493,0.92653614,-0.7219375,0.13102369,0.15029763,-0.3139946,0.18343666,0.3855709,0.13207433,-0.15633012,-0.43713525,0.017802745,0.13749008,0.023212397],[-0.12214576,0.27012697,-0.20684451,0.30103195,0.1707631,-0.061825205,-0.5469716,0.43340564,-0.0114306,-0.054020558,-0.16695587,0.03798708,-0.08483028,-0.18931572,0.10700518,-0.017429946,-0.3692487,0.19230193]],"activation":"σ"},{"dense_2_W":[[-0.28481036,0.4442005,-0.49662253,-0.30369344,0.28666368,-0.5901366,-0.19034614],[-0.39463997,0.82266545,-0.47083145,0.26275617,-0.55930537,0.09152094,0.12053862],[-0.065527946,0.7516073,-0.38549796,-0.4017811,-0.5203226,-0.34265035,0.35704702],[0.49352384,-0.07352777,0.31377402,-0.31515568,0.24645923,-0.40181553,0.16380012],[-0.44656533,0.9368167,0.067596,-0.3864591,-0.21814522,-0.50566894,-0.037946723],[-0.11529442,-0.77994573,0.49268404,0.60564643,0.42883676,0.14445429,0.1348402],[0.2191809,-0.33139595,0.16480243,0.16290003,-0.0043159393,0.6970341,-0.041437156],[-0.46837336,-0.39128634,-0.3864894,-0.42419514,0.5158304,0.16268568,0.089716256],[0.33990654,-0.64127713,0.6676083,-0.027778113,-0.36237058,0.54869413,0.3664469],[0.56407857,0.14337154,-0.07523904,-0.20489646,0.29481626,0.22405949,-0.68056136],[-0.039734222,0.16601059,-0.36197644,-0.5222118,-0.7296214,0.16421038,-0.07977159],[-0.1643846,0.2016056,0.0016275152,-0.34612948,-0.37732452,-0.4296534,0.097400256],[-0.32195345,0.8429351,-0.26391914,-0.64564407,0.23150569,-0.26123956,-0.60648614]],"activation":"σ","dense_2_b":[[0.10372978],[0.12321004],[0.13260162],[-0.16394557],[0.07401815],[-0.18640429],[-0.14209749],[-0.15091346],[-0.1005035],[-0.18927059],[-0.04283729],[-0.29649624],[0.123969376]]},{"dense_3_W":[[0.19306692,0.2528086,-0.3471299,0.34726095,-0.6172253,0.20776936,0.25171283,-0.26050565,0.62590677,-0.57339996,0.2380261,-0.6438946,-0.26486552],[0.6904486,0.42464823,-0.35924688,0.54782605,0.543181,-0.4043161,0.009881902,-0.16082425,-0.42172116,-0.22864279,0.05615898,-0.28659266,-0.4109365],[-0.29332277,-0.5604171,-0.74596137,0.29303262,-0.14240001,0.4824831,0.46960396,0.37756348,0.60751295,0.49847186,-0.4308299,0.2783596,-0.70612234]],"activation":"identity","dense_3_b":[[-0.056833137],[0.060321722],[-0.06470401]]},{"dense_4_W":[[0.8418126,-0.58512366,1.0991992]],"dense_4_b":[[-0.059645038]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC102'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC102'.json new file mode 100755 index 0000000000..e5e8da5f6b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310-L0210 4DNAC102'.json @@ -0,0 +1 @@ +{"input_std":[[8.209062],[1.0191541],[0.56490785],[0.03716055],[1.0188767],[1.0189412],[1.0184771],[1.020577],[1.0258486],[1.0280116],[1.0317844],[0.037011214],[0.037051532],[0.03710102],[0.03726322],[0.03710542],[0.036862206],[0.036776513]],"model_test_loss":0.002482755808159709,"input_size":18,"current_date_and_time":"2023-08-07_20-41-25","input_mean":[[26.846655],[-0.005333997],[-0.006017142],[-0.010085426],[-0.0068516037],[-0.006621865],[-0.007106698],[-0.0063117202],[-0.001445884],[0.0037559327],[0.00702609],[-0.010317291],[-0.010258594],[-0.010206334],[-0.010051272],[-0.009953821],[-0.01002816],[-0.010258082]],"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.04493686],[1.2359415],[-0.16813134],[0.30498078],[-0.004396829],[-0.11936104],[-0.10290137]],"dense_1_W":[[0.028586365,0.6713196,0.037628382,0.4525395,-0.4088543,-0.52644724,0.25289974,-0.106175065,-0.05286671,-0.105505764,-0.06060507,-0.066001944,-0.16948535,-0.14447865,0.15240416,-0.12086707,-0.22067334,0.29359263],[-0.25259453,0.72662085,-0.019954639,-0.37567586,-0.14041515,-0.110880576,0.028293425,-0.111130856,0.09566052,-0.21661228,0.100265615,-0.12622023,0.32393003,0.1720742,0.23493229,-0.2314176,-0.29668775,0.054298155],[0.0075020846,-1.0379118,0.058415513,-0.6336649,0.1777533,0.3996224,-0.14824356,0.53841037,0.20370372,0.06709238,-0.20242065,0.16530342,0.005269978,0.07914464,0.18396617,0.3359595,0.11940208,0.41780698],[-0.26971325,-0.29349837,0.016340017,-0.28127313,0.19968756,-0.35273314,-0.12725332,0.16223203,0.31847185,-0.08272004,-0.13002057,-0.23478554,-0.21000664,0.18946603,0.4066612,0.3821535,0.22385387,-0.25274214],[-0.011883075,0.35591817,1.8070056,-0.06357242,-0.49122602,-0.32094464,-0.035770092,0.23602432,0.17338297,0.42658088,-0.5602121,0.20542847,0.16731963,-0.7897803,0.1867783,0.29209885,0.06069555,-0.044831645],[-0.1184021,0.49316457,-0.011386314,0.28487483,-0.52669007,0.39699084,-0.15737064,0.023462037,0.13752255,0.11296199,-0.18964504,0.13462819,0.020783164,-0.37708953,-0.05232704,-0.2913591,0.2881553,-0.29922846],[-0.00057304814,-0.1185001,-0.13426046,-0.5729028,-0.01707388,-0.430987,0.17981416,0.108656205,-0.09637776,0.20971496,-0.047136426,0.10920909,0.16905956,0.19190785,0.0035438074,-0.025583372,0.28871274,-0.07032088]],"activation":"σ"},{"dense_2_W":[[-0.49437255,-0.3074483,0.12577564,-0.80536854,0.3818203,-0.2508327,-0.77941257],[-0.590948,0.057729438,0.5775266,-0.82149684,-0.16385625,0.26468316,-0.1986721],[-0.8693337,0.20204362,0.1808782,-0.6436834,0.3982201,0.04757887,-0.7291577],[0.48308417,-0.22587106,-0.62049073,0.30455,0.25944746,-0.08833746,0.29077286],[-0.050321363,0.29200885,0.25033513,-0.55846786,0.1142234,0.7839083,-0.91171724],[0.52267236,0.182393,-0.44948658,0.33957008,-0.57718825,-0.3744284,0.7962124],[-0.5793259,-0.39043754,0.56887144,-0.95162636,-0.04339133,0.38223684,-0.22251375],[0.29715785,-0.73829925,-0.6508201,0.26157615,-0.04009715,-0.3925987,0.42690706],[-0.5547783,-0.23581004,-0.20441227,-0.7084414,-0.7474019,0.15549515,-0.3855206],[0.74185896,-0.4140863,-0.5546949,0.042983074,0.33081874,-0.43315694,0.48314857],[-0.94190675,-0.1646355,-0.072953984,0.065710135,0.06073757,0.06576593,-0.103899956],[0.016691964,-0.77896374,-0.30583504,0.5844499,-0.4492795,-0.8628446,0.3806826],[-0.8750809,0.30358797,0.28483135,-0.42145577,0.469206,0.36288846,-0.21708845]],"activation":"σ","dense_2_b":[[-0.16136013],[-0.147815],[-0.048753243],[-0.020298453],[-0.06278913],[-0.051829122],[-0.26132149],[0.015052996],[-0.2423293],[-0.06199252],[-0.122265354],[0.0028793006],[-0.06900899]]},{"dense_3_W":[[0.35378894,0.46196505,0.25659692,0.03284285,0.061739363,-0.08112019,0.21352358,-0.7698974,0.073869765,-0.54001474,0.1673904,-0.12502979,0.46009788],[-0.058786314,0.07694819,0.7003563,-0.64618176,0.6994461,-0.4292753,-0.09363771,-0.04728599,0.1309421,0.060272142,0.29588172,-0.62102175,0.56741786],[0.3380847,0.40602964,0.22502236,0.46803278,-0.7782516,0.16471472,-0.37719798,0.038931362,0.22495954,0.6876152,0.021589195,0.5572496,-0.62703234]],"activation":"identity","dense_3_b":[[-0.045253523],[-0.04910254],[-0.007204871]]},{"dense_4_W":[[1.0239853,0.8379715,-0.19809574]],"dense_4_b":[[-0.042378113]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0000x00 4DNAC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0000x00 4DNAC101'.json new file mode 100755 index 0000000000..d9e967aaa0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0000x00 4DNAC101'.json @@ -0,0 +1 @@ +{"input_std":[[7.9410305],[1.0135205],[0.43755898],[0.035255913],[1.0150132],[1.0147188],[1.0138017],[1.0047818],[0.99736667],[0.9853777],[0.97017664],[0.035170607],[0.03518756],[0.035202954],[0.03514626],[0.03504212],[0.03485243],[0.034570012]],"model_test_loss":0.003483835142105818,"input_size":18,"current_date_and_time":"2023-08-07_21-07-13","input_mean":[[24.285349],[-0.05928403],[-0.01614233],[-0.009645592],[-0.053309042],[-0.05531696],[-0.056520157],[-0.062387902],[-0.06518509],[-0.06607999],[-0.06631701],[-0.009559443],[-0.009565792],[-0.009585358],[-0.009782268],[-0.009886353],[-0.010085134],[-0.010364845]],"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.32126558],[0.036132913],[0.14653946],[-0.16673681],[0.011947655],[0.8634933],[-0.8429776]],"dense_1_W":[[0.4527837,-0.36523563,-0.00895103,0.0708803,-0.37383398,-0.15341127,0.58478814,-0.08056343,0.17823605,-0.26987255,0.11071506,-0.03524059,-0.19979352,0.007495296,0.41383117,0.05486684,0.34592432,-0.36494422],[-0.005359442,-0.2667065,0.013745064,-0.084581405,0.24264771,-0.15815671,-0.086041525,-0.26656815,0.012661911,-0.2871439,0.47772396,-0.571899,0.061434507,-0.15776612,-0.11044384,0.37591726,0.2713445,-0.026513515],[0.004771754,-0.26444337,-3.0509355,0.42927757,-0.16592573,-0.5067485,0.500884,0.20909443,0.04189764,-0.027662966,0.37295133,-0.43910545,-0.21445197,0.1298138,-0.10558352,0.2703849,0.1670119,-0.43948233],[0.39938697,0.29979974,0.008373226,0.16164267,-0.26766345,0.43186393,-0.039016787,0.019693874,0.1261662,-0.37198588,0.1659897,0.1892901,0.117931575,-0.6488737,-0.16253956,0.0455478,-0.0022032904,0.025826642],[-0.011956519,0.021317355,0.021973232,0.3160384,-0.28960922,-0.29251087,0.60586154,-0.41510195,0.128146,0.22726218,-0.32743308,-0.2132152,-0.10418378,0.035125237,0.119344465,-0.1968828,0.0840623,-0.04892973],[0.4348723,0.22955361,0.015684376,-0.16318707,-0.31230125,0.19132592,-0.2461668,0.23461606,0.09528534,0.4775696,-0.3119358,0.0008261773,-0.13662255,-0.09776182,0.34027192,0.13092493,0.0071137655,-0.14361662],[-0.32389423,0.38325608,0.0145612145,-0.11149766,0.051686168,-0.008923491,-0.25343153,-0.36856908,0.40953627,0.27845463,-0.15776885,0.014580425,0.035484746,-0.1405985,0.008262141,0.0750361,0.22170645,-0.17522527]],"activation":"σ"},{"dense_2_W":[[-0.6714466,-0.34783113,-0.12780505,0.91295844,-0.19930731,0.36767703,0.5786663],[-0.6771721,-0.11134032,-0.033869732,0.45200992,-0.19539332,-0.059520427,0.39429346],[0.43033612,0.83407825,-0.5783082,-0.9366921,0.93509126,-0.028040314,-0.72735274],[0.15360972,0.077082366,0.35429364,-1.051215,0.7068334,-0.85113597,-0.18565065],[-1.3485137,0.31199598,-0.9909041,0.35103118,-0.8839503,-0.51250356,1.0146881],[-1.1571593,-0.21886723,0.22874051,0.36782742,-0.33092886,0.5572583,0.21506594],[-0.86161023,-0.9853974,-0.45453233,0.28777933,-0.9925813,-0.37540138,0.96739244],[-0.5824667,-0.54830873,-0.7745198,-0.02694336,-0.8390693,-0.05262828,0.9321934],[0.90932316,0.36091605,-0.29672763,-0.4059818,0.5786526,-0.32232416,-0.83604115],[-0.0006442681,0.18862467,-0.693046,1.0736086,-0.44083816,0.92259085,0.4656397],[-0.1815308,0.3588715,0.97227794,-1.3006788,0.060749445,-1.4515802,-0.3403856],[0.13273185,0.4301123,0.09077474,-0.66371524,0.5008187,-0.8510345,-0.8018143],[-0.32866758,0.45398203,0.11124515,-0.40842384,0.4973462,-0.7254867,-0.8856933]],"activation":"σ","dense_2_b":[[0.0012725799],[-0.11492474],[-0.017718269],[-0.3617725],[-0.1245201],[-0.038838513],[-0.22801119],[-0.1657449],[-0.04381892],[0.11536696],[-0.42785484],[-0.074301556],[-0.3165186]]},{"dense_3_W":[[0.7072188,0.32837203,-0.8357544,-0.07334732,0.36024168,0.6057319,0.73583984,-0.059062883,-0.6172043,-0.002954617,-0.55209947,-0.6971218,0.38010213],[-0.69038504,-0.23186448,0.36981446,-0.3447812,0.38637486,-0.032711018,-0.046227716,0.39877996,0.38114014,-0.111415684,-0.082114026,0.21984167,0.5183156],[-0.51899433,-0.12916048,0.5884876,0.71727073,-0.6060962,-0.33618042,-0.24320374,-0.5715705,0.822553,-0.59673494,0.3488014,0.63506675,0.38828656]],"activation":"identity","dense_3_b":[[-0.0030867092],[-0.08421286],[-0.05693552]]},{"dense_4_W":[[0.26367742,-0.0008218267,-0.6682586]],"dense_4_b":[[0.034324795]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0010x00 4DNAC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0010x00 4DNAC101'.json new file mode 100755 index 0000000000..5988f76d32 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0010x00 4DNAC101'.json @@ -0,0 +1 @@ +{"input_std":[[8.724716],[1.4959972],[0.5397873],[0.048951324],[1.4975377],[1.4972339],[1.4954233],[1.4662817],[1.4340023],[1.3873618],[1.3405958],[0.048942763],[0.048936542],[0.048920844],[0.04871155],[0.04843174],[0.047928806],[0.047302604]],"model_test_loss":0.008742202073335648,"input_size":18,"current_date_and_time":"2023-08-07_21-34-23","input_mean":[[22.895647],[-0.05509051],[-0.0009339962],[-0.0024197318],[-0.05186684],[-0.05237507],[-0.052418586],[-0.051652323],[-0.04790127],[-0.043305434],[-0.039102893],[-0.0023933721],[-0.0023879136],[-0.0023819967],[-0.0023226556],[-0.0023347258],[-0.0023805785],[-0.002389813]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1189297],[0.028616758],[-0.120110326],[-1.3364003],[-1.155689],[4.545205],[4.6856055]],"dense_1_W":[[1.6764991,-0.2165616,0.02171967,0.16306138,-0.33178213,-0.51356286,-0.92342836,0.073167734,-0.3029504,-0.49412876,0.22411734,-0.050114613,0.45258516,-0.39424014,-0.27986053,0.68608093,0.5258633,-0.16820106],[-0.052571695,0.91275,-0.014465118,0.043426633,-0.025098825,0.6740059,-0.13264339,-0.07667199,-0.09834313,0.036156673,0.09688627,-0.3393718,0.2594245,-0.45005876,0.22202903,0.16855074,-0.18687673,-0.25429112],[0.035393406,0.03501877,2.4415658,-0.43501148,-0.05228597,0.2040651,-0.20346655,0.38124704,0.24086578,0.21851066,-0.5910301,0.24155477,0.3626571,-0.36362377,-0.028416263,-0.33286482,0.31952125,0.0679023],[1.2067224,0.446494,0.0043112906,-0.16087066,0.18499684,0.39496493,-0.5509506,-0.075064704,0.13784459,-0.0049934876,0.006677537,0.26749933,0.39251417,-0.03499381,-0.6604564,-0.17244674,0.16260312,0.11549027],[1.0689722,-0.8116208,-0.006096875,0.34023157,0.47210988,-0.4384605,0.5331227,-0.41759884,-0.069540545,0.19452903,0.044704154,-0.47479782,-0.5569904,0.34265992,0.62784165,-0.021865688,-0.0069787498,-0.18864322],[1.831592,0.787637,0.15575852,0.030726168,0.3170631,-0.2733012,-0.09314743,-0.054926086,0.25987238,0.3793867,0.17776896,0.3717297,0.16224486,-0.16089486,-0.75732154,0.07296396,0.22855438,0.05832146],[1.7819636,-1.194306,-0.15287273,0.1887876,0.27201483,0.029433675,0.21670823,-0.35105628,-0.034238473,-0.11963524,-0.24842486,-0.26960924,-0.4148937,0.21680552,0.606679,-0.034082934,-0.29762813,-0.009257641]],"activation":"σ"},{"dense_2_W":[[-0.4629005,-0.4974006,-0.2904858,-0.6057455,0.7039836,-0.41832525,1.0372955],[0.28977782,0.80422324,-0.13876091,0.116478674,-0.019442132,0.9098352,-0.26412618],[0.26888716,-0.03308781,-0.11852592,0.05119105,0.31046206,-0.46183512,-0.50962996],[-1.0175097,-0.2795209,-0.91239053,-0.49764445,0.46378636,-0.72158617,-0.30564114],[-0.13860786,-0.5658692,-0.37510815,-0.2453204,-0.09008834,-0.40480798,-0.38012755],[-0.44616798,0.29338104,-0.093062796,0.35459974,0.14732593,0.3038334,-0.11383935],[0.22607525,-0.17798835,0.35510284,0.40880376,-0.8194073,-0.17143391,-0.46821502],[0.4565513,-0.55615324,-0.13392484,-0.49555677,0.7522913,-0.8161395,1.1037465],[-0.12025648,-1.121007,-0.07142694,-0.48535815,0.806789,-0.2798449,0.904912],[-0.6080642,-0.3117671,-0.7829517,-0.8494238,-0.41115513,-0.7792509,-0.17217514],[-0.3106535,0.37121254,0.16562602,0.6343219,-0.45030606,0.21602832,-1.0619884],[-0.48947912,-0.78191125,0.010906762,-0.2521157,0.61846507,-1.1840519,0.18846932],[-0.2804687,-0.8394935,-0.39661968,-0.5188922,0.90818566,-0.8677206,-0.12709521]],"activation":"σ","dense_2_b":[[-0.0071314005],[-0.017422963],[-0.04535261],[-0.2071086],[-0.061347343],[0.0069322526],[-0.026729736],[0.07267423],[-0.18793571],[-0.049161524],[-0.05531663],[-0.099349104],[0.08250706]]},{"dense_3_W":[[-0.25297967,0.50810736,-0.46908683,-0.03641949,0.038947254,0.34386054,0.5226972,-0.039223388,0.1741124,-0.5845979,0.7130592,0.2419447,-0.4491347],[0.5216683,-0.018714925,-0.06133189,0.31551158,0.32538223,-0.11293018,-0.16491419,0.6735836,0.35999843,0.32989758,-0.6725572,0.58409536,0.079916805],[0.038063955,0.29448617,0.57898533,-0.0692794,0.28799778,0.13160062,-0.37904146,-0.67243326,-0.32990336,0.2804782,-0.2603852,-0.19796656,-0.3136028]],"activation":"identity","dense_3_b":[[0.06003448],[-0.08627991],[0.07051213]]},{"dense_4_W":[[0.9887464,-1.0906954,0.7141598]],"dense_4_b":[[0.06921589]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0210x00 4DNAC101'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0210x00 4DNAC101'.json new file mode 100755 index 0000000000..c9966e62df --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0210x00 4DNAC101'.json @@ -0,0 +1 @@ +{"input_std":[[7.973185],[1.2308006],[0.47124374],[0.039767727],[1.2234948],[1.2267562],[1.228702],[1.2206274],[1.2050939],[1.1789762],[1.1437212],[0.0397065],[0.039725386],[0.039734013],[0.039686594],[0.039645616],[0.039555065],[0.039334625]],"model_test_loss":0.005078984424471855,"input_size":18,"current_date_and_time":"2023-08-07_22-00-26","input_mean":[[22.121334],[-0.010464258],[-0.004889951],[0.003433857],[-0.00816012],[-0.008416927],[-0.008662932],[-0.008998272],[-0.008217049],[-0.0068580806],[-0.006010885],[0.003438706],[0.0034568459],[0.0034763422],[0.0035396859],[0.0035731636],[0.0036217745],[0.0036836462]],"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.10654221],[-0.2905768],[-2.871999],[-0.1245177],[0.16143306],[0.082655065],[2.428078]],"dense_1_W":[[-0.009274342,0.5175485,-0.040819537,-0.2658763,0.66790605,0.5001351,-0.3282055,-0.21050686,0.13056423,-0.19473574,0.27589467,0.500145,0.09231609,-0.6249076,0.07356131,-0.2784489,0.2743887,-0.14142068],[0.045650993,-0.7187672,-3.9221926,0.25971168,0.0050335308,0.815766,0.9371128,-0.28306046,-0.60010844,-0.4402398,0.334732,-0.3486068,-0.43578961,0.25923377,-0.06565995,-0.33657274,0.63861084,-0.118178956],[-0.21374783,0.42282847,0.266799,0.05025237,0.0064825355,0.820618,0.2315524,0.26671964,-0.082816996,0.4062073,-0.17926975,0.1487991,0.139769,-0.3999773,-0.13033853,-0.06021389,0.13246544,-0.12687539],[2.2001243,-0.46080446,0.021041024,-0.025847267,-0.0166095,-0.59955376,0.71440715,0.577141,0.040229637,0.1345268,-0.21883093,-0.07305829,0.07283621,-0.030786302,0.3648521,-0.32475784,0.45030454,-0.24509932],[0.0038562298,-0.60293394,-0.020617504,0.019694017,0.3763915,-0.5692821,0.9114758,-0.21734723,-0.1944635,-0.018555427,0.17110226,-0.13353539,-0.5393221,0.6298117,0.1664842,-0.04548269,0.03591765,-0.080464125],[2.0805016,0.294753,-0.015689991,-0.55368453,0.109172165,0.39725655,-0.34113577,-0.54655766,-0.3882753,0.09528684,0.21858771,-0.055341844,0.22205897,-0.2005731,0.5021007,0.059200656,-0.046633355,-0.09212842],[0.21265858,0.5654287,0.24386185,0.10141437,0.066008195,0.45167878,0.1299337,0.4275724,0.05719904,0.15785104,-0.13811876,0.19489175,-0.2531665,0.06650904,-0.31723106,-0.05296288,0.14543928,-0.10396655]],"activation":"σ"},{"dense_2_W":[[0.7208203,-0.5637391,0.59667504,-0.24075457,-0.9961346,-0.13531135,-0.12724179],[0.08353179,-2.235628,0.29917157,-1.315324,-0.22382064,-1.8709669,-0.44139647],[0.5387289,0.32765672,0.35890356,-0.52188003,-0.70411855,0.3507985,0.5237647],[-0.25249085,0.050148275,0.6831794,-0.27731276,-0.10181721,0.8868131,0.51331794],[-0.061348394,0.0007661709,-0.43009564,-0.5424198,0.14139919,-0.5450331,-0.039015777],[-0.18883842,0.14738812,-0.23603185,-0.3689771,0.36367714,0.12600073,-0.4179159],[-0.4459407,0.36866704,0.113049746,0.29777262,0.1801355,-0.38669178,-0.7965472],[-0.017579421,0.05280841,-0.38046154,0.4176994,0.14375417,0.10180892,-0.53780746],[-0.13019691,0.32150963,-0.7783258,0.4411255,0.9020806,0.30856878,-0.24670088],[-0.71212524,-0.3333824,-0.10890434,-0.05027984,0.58339226,-0.3812356,0.18127146],[0.4350403,0.11608274,0.16477108,-0.072991945,-0.6695063,-0.11097746,0.06759265],[-0.7526205,0.5938332,0.34072697,-0.696911,0.17783667,-0.74074334,-0.9378376],[0.804114,-0.12623003,0.16351596,-0.31503728,-0.7229197,0.40303767,0.2082207]],"activation":"σ","dense_2_b":[[-0.31468102],[-0.17055899],[-0.2285355],[-0.097128555],[-0.010586535],[-0.015096155],[-0.0655667],[0.019932993],[0.071114086],[0.026876245],[-0.35583144],[-0.100859694],[-0.06898828]]},{"dense_3_W":[[0.2983101,-0.7078514,-0.65568393,-0.36758986,0.13057497,0.6307905,0.36659017,-0.25304082,0.42478424,-0.14673297,-0.34746668,-0.24960928,-0.6091494],[-0.3587975,0.03995377,-0.4216834,-0.5777477,0.10252213,-0.20580202,0.28845647,0.40347326,0.67879415,0.48831588,0.15095003,0.6822594,-0.04936859],[0.22906187,0.17523333,0.50960416,0.23045082,-0.21069351,0.058853656,0.3477555,-0.40553525,-0.54917115,0.047501687,-0.12622266,-0.13184138,0.646118]],"activation":"identity","dense_3_b":[[0.042785127],[0.029713841],[-0.12879385]]},{"dense_4_W":[[-1.0081478,-1.2892519,0.112720646]],"dense_4_b":[[-0.032802135]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0210x00 4DNAC102'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0210x00 4DNAC102'.json new file mode 100755 index 0000000000..988cca6227 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS C 1.00 1.01 56310L0210x00 4DNAC102'.json @@ -0,0 +1 @@ +{"input_std":[[6.848481],[0.8862211],[0.48629978],[0.033282995],[0.8825565],[0.8842056],[0.88548553],[0.8823946],[0.8792348],[0.8754788],[0.869421],[0.03292297],[0.03304511],[0.033158313],[0.03340195],[0.033433877],[0.033367477],[0.03335788]],"model_test_loss":0.004575948230922222,"input_size":18,"current_date_and_time":"2023-08-07_22-26-28","input_mean":[[18.430927],[-0.07129647],[0.018491521],[-0.026260056],[-0.07448064],[-0.073375314],[-0.07258443],[-0.065266214],[-0.063046746],[-0.059541434],[-0.054584157],[-0.02657762],[-0.02647423],[-0.026383044],[-0.02612497],[-0.026040455],[-0.026031366],[-0.026007706]],"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.001867291],[2.5971534],[0.22938758],[-0.22608748],[-2.7614555],[-0.07245665],[0.011351448]],"dense_1_W":[[0.0048964336,0.32368863,0.0071244487,-0.06219253,-0.69971055,0.66141987,-0.1635048,-0.32375827,0.06625927,-0.06529672,0.21220222,0.6800635,-0.10624061,-0.30102918,-0.25439295,-0.24798034,-0.30751342,0.45424858],[0.8717096,0.27175072,0.008614075,-0.39488295,-0.5048402,-0.07688018,0.21375221,0.25862306,0.3802419,0.780373,-0.34666312,0.07282488,0.2847437,-0.38848653,0.20993155,0.44143435,-0.11863596,-0.10396724],[-0.0052353255,-0.31822816,0.004281337,-0.30333275,0.034296587,-1.0526781,0.15911727,0.13257483,0.3769281,0.06922915,-0.31705686,-0.13642934,0.15893984,0.35623473,-0.2221777,-0.53985226,0.31177884,0.1331077],[-0.0026488309,-0.46307364,0.0040305443,0.21302664,0.10572383,-0.33876655,0.11481708,0.06491223,0.22308613,0.20670146,-0.18406537,0.18875864,0.001323788,-0.15270492,-0.009875742,0.10065525,-0.10484487,0.07724725],[-0.8517313,1.2480507,0.009313202,-0.59048694,-1.1145165,0.34028202,-0.09743023,-0.15318984,0.5041415,0.41274792,-0.16457404,0.8264525,-0.21307376,-0.43806297,0.17587166,0.0247668,0.416932,-0.20631395],[-0.0018124692,1.0170236,-2.7477639,0.19892676,-0.17666285,-0.57476693,0.5719481,-0.52562296,-0.88914037,-0.8647134,1.5394452,-0.3119364,0.088813215,0.07492086,-0.11926867,-0.3707679,0.21501637,0.24960175],[-0.023958094,0.095316805,-0.016534787,0.16063792,0.04441202,0.39860037,0.024935467,0.1530449,-0.15884824,-0.40695116,-0.09302091,0.56395507,-0.28016278,0.13766079,-0.5281072,-0.44597715,0.28976548,0.1696837]],"activation":"σ"},{"dense_2_W":[[0.15154204,-0.78675294,0.22928046,-0.033503618,-0.15833412,0.45278502,-0.4705822],[-0.5834908,-0.14377658,0.38843614,-0.029937692,-0.35921872,0.36018422,-0.058587343],[0.053825956,-0.6018707,0.35535994,0.5998146,-0.44884253,-0.37599027,-0.13201852],[0.073090784,0.5060707,0.09179472,-0.24177255,0.38017172,-0.23855892,0.20076287],[0.06758576,0.10149547,-0.86642444,-0.6211972,0.19965667,0.40455145,-0.032479934],[0.5254006,0.2655984,-0.13189656,-0.57774425,0.29848206,-0.013868569,-0.47990555],[0.5851224,0.48843405,-0.07289669,-0.42773506,0.3975408,-0.44622093,0.1360654],[-0.015633296,-0.62110466,-0.38382724,0.0018601576,0.1371097,0.0743509,-0.3674576],[-0.6463754,-0.70364404,0.25133833,0.18379001,-0.28124034,0.38435185,0.32847217],[-0.61743426,0.28012255,0.51616675,0.08034732,-0.3428058,0.39314508,-0.211209],[-0.4220699,-0.4960329,0.33365622,0.41486493,-0.45122844,-0.29246688,-0.30248302],[0.09507034,-0.3089235,-0.5273463,-0.7179823,0.86094236,-0.2863892,0.14491831],[0.24167342,-0.19868858,0.18480074,-0.42431474,0.15458284,0.12002474,0.038593136]],"activation":"σ","dense_2_b":[[-0.053941116],[-0.019561898],[0.053443328],[-0.07374648],[-0.30186814],[-0.10220643],[-0.006079856],[0.005632312],[-0.06199264],[0.0008034756],[0.06794324],[-0.13134351],[-0.025431834]]},{"dense_3_W":[[0.6019684,0.08368994,0.11931014,-0.5326191,-0.5951374,0.17335932,-0.6391729,0.5901674,-0.44038236,-0.26132423,-0.13372217,0.4315051,0.07855694],[-0.38172075,-0.4879406,0.26037207,-0.19332667,-0.50175065,0.5571594,0.3143821,0.21798374,-0.5415063,-0.11827112,-0.7028584,0.52945256,0.61205876],[-0.27886352,-0.20352115,0.5313796,-0.33827436,-0.23451158,-0.11697601,-0.4642654,0.21843909,0.17134716,0.55283946,0.53888303,-0.64016294,0.59808445]],"activation":"identity","dense_3_b":[[0.028694455],[-0.02157225],[0.021652581]]},{"dense_4_W":[[-0.88839185,1.1335969,-1.251347]],"dense_4_b":[[-0.02365967]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP100'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP100'.json new file mode 100755 index 0000000000..982d9a2e7a --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020 b'xf1x00DN8 MDPS R 1.00 1.00 57700-L0000 4DNAP100'.json @@ -0,0 +1 @@ +{"input_std":[[7.8251824],[0.97374165],[0.39678615],[0.039650038],[0.9675714],[0.96974653],[0.971445],[0.96010584],[0.9482498],[0.93838036],[0.9262751],[0.039522577],[0.039549936],[0.039577607],[0.03943945],[0.039266065],[0.03906478],[0.038730167]],"model_test_loss":0.005850189831107855,"input_size":18,"current_date_and_time":"2023-08-07_22-51-04","input_mean":[[23.948711],[-0.11042184],[0.0008513909],[-0.004719362],[-0.10913178],[-0.109804966],[-0.11005321],[-0.10579765],[-0.10312579],[-0.10175711],[-0.098089136],[-0.0047842367],[-0.004759096],[-0.0047326833],[-0.0044965143],[-0.0043862625],[-0.0043439874],[-0.004256917]],"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.19536564],[-0.0041716034],[-1.7697656],[0.034405522],[-0.9804138],[1.5592381],[-4.038623]],"dense_1_W":[[-0.96289176,-0.16844435,-0.33135042,0.04781623,-0.0905433,0.31838787,-0.7973821,-0.6977461,-0.22462271,-0.15944098,0.05584555,0.032361288,-0.017556911,-0.4097252,0.08451744,0.47493675,0.24613103,-0.13016479],[0.0025252467,0.36295822,0.0051952563,-0.061572302,-0.35887212,0.22229104,-0.22204724,0.034594852,0.14076412,-0.17208177,0.011452716,0.090597436,0.29632482,-0.23263389,-0.075431645,0.027754778,-0.26631972,0.22669151],[0.98580307,0.1460111,-0.006533776,0.25585753,-0.2031787,0.75645447,-0.19832224,0.22909965,-0.22415143,0.056795266,0.034398753,0.4630238,-0.19674145,-0.13854524,-0.4064176,-0.12922981,-0.060546197,0.065589026],[0.045029007,0.50269336,2.7796633,-0.0076377117,-0.63786316,-0.06653349,-0.55045384,0.08327676,0.27944806,0.5322522,-0.36390388,0.3737667,-0.20071353,-0.21758012,-0.16247746,0.31800562,-0.12797713,0.037218444],[-0.55134237,-0.18539825,-0.19819416,0.27468693,-0.15253156,-0.55906934,0.24991404,-0.03944831,-0.2475911,-0.038619418,-0.102022864,-0.13440825,-0.39271066,0.31743523,-0.016324805,0.19443971,-0.21604395,0.17059657],[-1.036423,-0.37088332,-0.0090809995,0.4914565,-0.09154215,0.25218782,0.24309473,0.30631322,0.35170037,0.23679022,-0.34137195,0.12669902,0.0069693094,0.13518511,-0.4373841,-0.6247206,-0.14910895,0.30531472],[-1.0771234,0.76018256,0.35249147,-0.31738096,0.097953156,0.07492969,-0.1556959,0.533758,0.14374508,0.8647132,-0.44715706,0.62586576,0.11443575,-0.3779071,-0.2320536,0.10263231,-0.2999651,0.04361549]],"activation":"σ"},{"dense_2_W":[[-0.10324592,0.11039738,0.51771843,0.09347721,-0.87196016,0.6635172,0.24947388],[0.024585094,0.59421515,0.068763964,0.5486269,-1.4608854,0.88192827,-0.39993966],[0.4413766,0.7881249,0.39034104,0.18230437,-0.9140034,0.05566271,0.09512442],[-0.47279245,-0.3493564,0.14005436,-0.5340587,0.5966407,-0.46430302,0.22444999],[-0.45392346,-0.04614412,-0.35355964,-0.18547632,0.3873904,-0.7008455,0.12206877],[-0.36739802,0.20268749,-0.12268851,-0.106193095,0.5999196,-0.37765756,-0.44922847],[-0.54880965,-0.7290866,-0.28915912,0.17727232,0.38667715,-0.6511501,-0.1383285],[0.52068883,0.50054383,0.6252861,-0.23605038,-1.4634428,0.41514036,0.9438054],[-0.648459,0.2471083,-0.65482795,-0.119111195,-0.30439776,-0.04859132,-0.6602194],[-0.5173293,0.11870849,-0.33469254,-0.796215,-0.45731404,-0.4510818,-0.40196368],[-0.45839694,-0.41415405,-0.6876088,0.11170082,-0.13311273,-0.35558105,-0.49632224],[0.39769867,-0.35987017,-0.20037495,-0.5226243,0.72143537,-0.20635548,-0.46655688],[-0.37865394,0.016113892,-0.520626,-0.25705534,0.94881725,0.11235735,-0.83941835]],"activation":"σ","dense_2_b":[[-0.4009523],[-0.35328817],[-0.17279775],[0.024035925],[-0.0030043991],[-0.0042769755],[0.08547396],[-0.49828207],[0.03243174],[-0.38892063],[0.16030122],[0.15409443],[0.15423937]]},{"dense_3_W":[[-0.35692686,0.11431418,-0.20940931,-0.16842283,0.5645013,-0.037901483,-0.5341042,0.054549012,0.54704887,0.54749495,-0.27935258,-0.17022972,-0.36970934],[-0.4523077,-0.20165743,-0.606432,-0.17038603,-0.01184516,0.4348867,0.696362,-0.133869,0.5862017,0.3475741,0.57729375,0.45561698,0.055455644],[0.17490287,-0.49273917,-0.6702675,0.52635163,0.24822022,-0.15901737,0.50198627,-0.7415996,-0.32407025,-0.50210077,0.2912399,-0.02596676,0.75527865]],"activation":"identity","dense_3_b":[[-0.030630419],[0.020200811],[0.036532093]]},{"dense_4_W":[[-0.01753921,-1.0593574,-0.9545534]],"dense_4_b":[[-0.026306424]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020.json new file mode 100755 index 0000000000..52798259ad --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA 2020.json @@ -0,0 +1 @@ +{"input_std":[[9.547813],[1.7179168],[0.5423653],[0.04857022],[1.7059441],[1.7113246],[1.7139751],[1.6844511],[1.6431999],[1.577594],[1.5055375],[0.048473638],[0.048486643],[0.04849009],[0.048347536],[0.04814972],[0.047786575],[0.04731983]],"model_test_loss":0.011126813478767872,"input_size":18,"current_date_and_time":"2023-08-07_18-34-15","input_mean":[[22.614845],[-0.00978362],[0.007860732],[-0.004099437],[-0.010468512],[-0.010098754],[-0.009594586],[-0.0049946643],[-0.0015134194],[-0.0018012848],[-0.0024288695],[-0.0041544754],[-0.004141275],[-0.004129192],[-0.004074],[-0.004025116],[-0.0040029683],[-0.003983455]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.4171004],[-0.62944967],[-0.08636822],[-0.30957282],[3.1894078],[-0.18340014],[-4.048277]],"dense_1_W":[[0.7830174,0.40423092,-1.7773811,-0.25229105,0.0003897955,0.2650078,-0.94045377,0.057573486,0.43040198,-0.061492153,-0.42369962,0.2493666,0.35435918,-0.24786355,0.123617865,-0.15768188,-0.4915791,0.41757017],[0.619815,-0.15506315,1.7720731,-0.05022525,0.12061407,-0.23410659,0.26306555,0.18054493,-0.10822319,-0.23154925,0.4427835,-0.40612897,0.44821352,-0.035341486,-0.09733925,0.11400062,0.13623556,-0.1278016],[0.0040937522,0.5835935,1.5735953,0.27356768,-0.47593257,-0.19718215,-0.6375235,0.3991756,0.6010651,0.19663113,-0.2724361,0.35223562,-0.28804272,-0.37892044,0.06845918,0.056847498,-0.23999622,0.14147788],[-0.006181427,-0.23720662,-0.030143317,0.27507725,-0.11148783,-0.670752,0.1579785,0.26442546,0.11085281,0.24239433,-0.30806103,-0.5314182,-0.1411616,0.34547827,-0.0067492607,0.2582582,-0.13836917,-0.059036173],[1.3838778,-0.8232643,-0.65903485,-0.20286232,0.07595782,-0.2975871,-0.2668319,-0.03744175,0.113510124,-0.17166083,-0.08313555,-0.19053335,0.22615202,0.099687,0.11709183,-0.06939885,-0.0069061257,0.02360228],[-0.00030964141,-0.59983134,0.0024205807,0.29467705,0.14591737,-0.8452132,0.028352631,-0.06797188,0.13422364,-0.06122122,-0.033911128,-0.19677748,0.21639399,-0.129354,0.3151945,0.010129442,-0.27215233,0.23129506],[-1.5945044,-1.5621332,-0.7602714,-0.025857054,0.28057814,-0.49442625,0.22269996,0.06870841,-0.066471085,-0.1829744,-0.0109900115,-0.2925939,0.13089584,0.2586905,0.021742465,0.0035556427,-0.2523545,0.15750822]],"activation":"σ"},{"dense_2_W":[[0.38898003,0.28459147,-0.022235557,-0.05588795,-0.4079201,0.78092706,0.0055714543],[0.5199289,0.07141404,0.5414507,-0.5915534,-0.39409125,-1.0397701,0.052241296],[0.32463577,-0.49717766,0.90691876,-0.9024069,-0.0049516293,-0.23521297,-0.2842837],[0.06779803,-0.5377125,0.3489072,-0.6589233,0.59720504,-0.8664128,-0.46240392],[1.0705944,0.28698796,0.16739848,-1.4102764,-0.45103022,-1.1245655,0.02443754],[0.20335038,-0.35550895,-0.22385399,0.29430118,0.056962594,-0.32889187,0.2766028],[0.37825814,0.045224834,0.40632764,-0.71752423,-0.84244126,-0.29024214,-0.3171733],[-0.056005202,-0.73517215,-0.0016302611,-0.08258613,0.13173106,-0.25985387,-0.45403552],[0.31348822,0.22809805,-1.1925565,0.73849887,-0.015525387,0.27415907,-0.16705036],[-0.16721253,-0.42491084,-0.8744839,0.090021685,-0.09710444,0.04399626,0.08195919],[-0.4590442,-0.86837125,0.76154727,-0.09060192,-0.8167061,0.3736612,-0.8130611],[-0.59112096,0.09216977,-0.76166147,0.9278373,0.43625265,0.93052894,-0.07700069],[0.3458094,0.1986897,-0.7627924,0.16227825,0.63287425,0.23208074,0.6148371]],"activation":"σ","dense_2_b":[[-0.0482577],[-0.09234584],[-0.016399158],[0.12226299],[-0.018181449],[-0.35545182],[0.050414644],[-0.07713505],[-0.27168283],[-0.026214477],[-0.14412741],[-0.08454545],[-0.15548146]]},{"dense_3_W":[[-0.24532248,0.086403646,0.0035677804,-0.446846,0.3286197,-0.5002942,-0.36754543,-0.36412755,-0.3422447,0.5864908,-0.3555824,0.17768645,-0.16735056],[0.49285188,-0.5364999,-0.5982645,-0.60457116,-0.70168245,0.33897352,-0.5752503,-0.2724616,0.47930852,0.15553074,-0.31801456,0.7717742,0.6475729],[-0.54743356,-0.096405074,0.30723238,-0.14468278,0.25325117,-0.2991242,-0.32472578,-0.60785806,0.34220627,0.09930043,0.24098735,0.21893239,0.34784108]],"activation":"identity","dense_3_b":[[0.06423375],[0.04319534],[0.0022975653]]},{"dense_4_W":[[-0.5658915,-1.2441922,0.0075046057]],"dense_4_b":[[-0.047028013]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.02 56310-L5450 4DNHC102'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.02 56310-L5450 4DNHC102'.json new file mode 100755 index 0000000000..7e8479916d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.02 56310-L5450 4DNHC102'.json @@ -0,0 +1 @@ +{"input_std":[[7.689964],[1.1172562],[0.47065306],[0.039288677],[1.1148199],[1.1146759],[1.1138787],[1.0997579],[1.0863613],[1.0626523],[1.0341643],[0.039109986],[0.039163604],[0.03921246],[0.039282],[0.0392662],[0.03901584],[0.03859772]],"model_test_loss":0.006890684831887484,"input_size":18,"current_date_and_time":"2023-08-08_00-34-17","input_mean":[[22.360703],[0.03464188],[0.0027785136],[1.2959163e-5],[0.037677385],[0.03741321],[0.03715227],[0.03595462],[0.03641664],[0.032926656],[0.026464323],[-2.0994983e-5],[-8.1254e-6],[-7.6023986e-7],[-6.278352e-5],[-8.228038e-5],[-0.0002560112],[-0.00051422045]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.4041638],[-0.009381184],[-1.2474654],[-0.32208985],[4.033501],[-0.6852106],[-3.9728174]],"dense_1_W":[[-0.687249,1.1542901,2.1917975,-0.54792583,0.11244576,0.16998574,-0.49382955,-0.13925558,0.09835213,-0.15130454,-0.9653543,0.16384646,0.027884314,-0.14891884,-0.48109746,0.091843285,0.5578272,-0.05534039],[-0.0014183326,0.726647,-0.0035275402,-0.11533925,-0.4059522,0.7295035,-0.47751862,-0.2416707,-0.02734288,0.06507004,-0.0064442307,0.6041324,0.67849165,-0.55099046,-0.23613937,-0.032516804,-0.16318728,-0.08419399],[-0.5954915,-0.76488334,-2.0431242,0.15687804,0.23584543,-0.42583415,0.10554652,0.11953392,-0.15156066,0.21460378,0.87915903,-0.35293782,0.25323242,0.39901143,0.25572163,0.08249874,-0.38727182,-0.047129497],[0.14069723,-0.3919022,-0.0008744924,-0.059669092,-0.09359133,-0.6368598,0.5902478,0.20133625,-0.121440604,-0.065659136,-0.0057477783,-0.30779642,0.24014011,0.40626147,-0.12158061,-0.14876814,0.16586542,-0.033642642],[1.5318011,1.1091315,0.0042629745,-0.28907332,-0.062063456,-0.10614539,-0.03415317,-0.004241847,0.26679656,0.012595347,0.6646693,0.22112225,0.17988127,0.090471245,-0.17571782,0.19749698,-0.393442,0.21523812],[0.310905,0.29187796,-0.0007723808,-0.363841,-0.6149396,0.70793575,0.0772483,0.04830643,0.29118708,-0.17558831,-0.028698755,0.21452032,0.6498187,-0.6480603,0.19537422,-0.61544496,0.34354338,0.06310341],[-1.525909,1.1347268,0.006725862,0.065649055,-0.52072847,0.30013448,0.3943772,-0.4068202,-0.0063213394,0.3581553,0.6199145,0.49079955,0.060594473,-0.46649554,-0.118231915,0.08833182,-0.1837789,0.1082475]],"activation":"σ"},{"dense_2_W":[[-0.41003475,-0.5941811,0.35549054,0.70805454,0.06241565,0.24009907,-0.2571945],[-0.17879263,-0.5668489,0.078311555,0.26954442,-0.46130812,-0.2986236,0.026367432],[-0.032109488,0.4100262,-0.53486085,0.4058389,0.044560365,0.16679758,-0.3034037],[0.73847044,-0.20993896,-0.5642298,-0.3659582,0.20961727,0.43580025,0.0177744],[-0.4672462,-0.61421245,-0.44849893,-0.17692474,0.22861485,-0.3238457,0.15435395],[0.22824611,0.28959498,-0.2854186,-1.4559703,0.9620582,0.74461776,-0.108179726],[-0.02588813,-0.3127553,-0.71865684,-0.44503638,-0.27046338,0.14424235,-0.038083725],[0.32513967,-0.3561943,0.24827418,-0.32704267,-0.38088554,0.2438981,-0.1064644],[-0.17885895,0.42748332,-0.74465275,-0.8093966,-0.11033694,0.3553823,0.62148225],[0.131998,0.100577846,-0.17490678,0.6352548,-0.47178045,-0.57052344,-0.17243351],[-0.6209595,0.369551,0.19621795,-1.3971734,0.64587736,0.51646644,0.4175135],[0.0005163468,-0.24055383,-0.20226417,0.67244124,-0.23466797,-0.48380762,-0.53093874],[-0.22020346,0.3996716,0.2970228,-0.7995752,0.09480631,-0.08127671,0.62530756]],"activation":"σ","dense_2_b":[[0.031364277],[0.07349004],[-0.05814894],[-0.024128156],[-0.0155091975],[-0.29374],[-0.26029426],[-0.021580614],[-0.16836035],[0.012105176],[-0.36115757],[0.10476691],[-0.13135944]]},{"dense_3_W":[[-0.5763429,-0.56471676,0.12633902,0.5479549,-0.6422557,0.27148914,-0.23865283,0.15508497,0.5120569,-0.18321085,-0.20305811,-0.3290402,0.043243363],[-0.02372374,0.39314762,0.15481226,-0.5593528,-0.5013217,-0.16603263,-0.23262566,0.25007325,-0.20149072,0.21564138,-0.6830406,0.700577,-0.50517535],[-0.5742908,-0.04224201,-0.06110482,-0.050169945,-0.53291845,-0.1360594,0.564487,-0.24321367,-0.24506827,-0.27379003,0.5516074,-0.5063531,0.4253847]],"activation":"identity","dense_3_b":[[-0.02731678],[0.03552884],[-0.0069239554]]},{"dense_4_W":[[1.098094,-0.99127156,0.16504136]],"dense_4_b":[[-0.030831616]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.02 56310-L5500 4DNHC102'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.02 56310-L5500 4DNHC102'.json new file mode 100755 index 0000000000..157ce56e6c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.02 56310-L5500 4DNHC102'.json @@ -0,0 +1 @@ +{"input_std":[[8.806735],[1.2785676],[0.5104689],[0.044312194],[1.2728615],[1.2750368],[1.2765797],[1.2632731],[1.244448],[1.2167825],[1.1834176],[0.044200357],[0.044231147],[0.044254437],[0.04425257],[0.04418865],[0.044067442],[0.043792143]],"model_test_loss":0.01218547485768795,"input_size":18,"current_date_and_time":"2023-08-08_00-59-43","input_mean":[[23.11654],[-0.032949522],[0.009155593],[-0.029586772],[-0.034678016],[-0.034348194],[-0.033619005],[-0.028988048],[-0.025731714],[-0.019963661],[-0.016452389],[-0.029611032],[-0.02960542],[-0.029594153],[-0.029447835],[-0.029455785],[-0.029506048],[-0.029566707]],"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.8828355],[0.40646476],[2.090121],[0.8059917],[2.205458],[0.9334858],[-0.33200896]],"dense_1_W":[[-0.53053826,0.27904403,1.8534683,-0.2955934,-0.3956192,0.78547305,-0.38176653,-0.35697734,0.3331119,0.34091163,-0.686063,0.7608489,-0.5477775,-0.041410368,-0.1755996,0.27248794,-0.08716658,0.06782427],[-0.0023688215,0.28428173,0.0065304525,-0.08413256,-0.49787298,1.0713955,-0.62245727,0.101583414,-0.008971785,-0.22987749,0.13199726,0.29666874,0.24260923,-0.649986,0.11152149,-0.28588438,-0.0071382457,-0.29161188],[0.3604459,0.8241495,0.008147093,0.061904266,0.021917332,0.83537346,0.071819894,0.21101502,0.039214145,0.07105925,0.017073013,0.5363549,-0.0137413,-0.37729445,-0.37352064,0.1549617,-0.30158794,0.29164574],[0.50972414,0.21102065,1.906497,-0.3665385,-0.2077211,0.5899225,-0.7436237,-0.027170774,0.59833825,0.55375063,-1.0024506,0.2756846,0.1362578,-0.4424235,0.17111245,0.14868937,0.27094048,-0.2256927],[0.3570491,-0.9449637,-0.0038414046,-0.18648717,-0.21053085,-0.71682775,0.19967486,-0.24819107,-0.12916584,-0.021362225,-0.01222075,-0.39958,-0.110254936,0.35989097,0.5008998,0.0059754075,0.054075558,-0.20690106],[-0.0066155936,-0.92957646,0.013711732,-0.28924587,0.9040592,-0.5274747,0.5186851,0.4869224,0.07748703,0.21800375,-0.13250247,-0.3384952,-0.19564785,0.61564326,-0.33629382,0.21877833,-0.17645325,-0.85731995],[-0.15106708,-0.18163809,1.5749623,-0.080494866,0.0063749384,-0.41591707,1.2240275,-0.5400741,0.18987378,-0.2516748,-0.13973542,-0.62628853,0.36244768,0.08076608,0.24033926,0.054027114,0.13816029,-0.222367]],"activation":"σ"},{"dense_2_W":[[0.18049516,0.06898391,0.026188483,0.50226945,-0.836067,-0.15816489,-0.035430282],[0.77764225,0.4938293,-0.18668377,0.33298555,-1.4891886,-0.24971096,-0.17076197],[-0.60486037,-0.68777907,-1.0724757,0.35820767,0.6229709,0.89322317,0.55584955],[-0.6130941,-0.45594084,0.2157379,-0.32011363,0.8813185,0.22641036,0.34688213],[-0.054075092,-0.7679671,-0.13776255,0.19197619,0.26417407,-0.16748618,0.29280367],[-0.10182613,-0.12194571,-1.0255779,-0.60696757,-0.09953989,0.23414455,-0.36724913],[-0.20329732,0.5056915,-0.016156103,0.11111321,-0.5714082,0.2851215,0.07377184],[0.050893724,0.2936281,0.19905426,0.02157211,-0.71915215,-0.31541398,-0.32369208],[-0.38534418,-0.57820314,-0.69817704,-0.78573805,-0.22289091,-0.1444706,0.84120387],[-0.22642383,-0.1060583,-0.6594286,-0.86231923,-0.11660855,-0.09651285,0.41405997],[0.35768324,0.29057413,0.52457124,-0.084269114,-0.76201826,-0.09401483,-0.106591016],[-0.43864337,-0.53775054,-1.1092063,-0.5224982,0.116868414,0.6581688,0.5014254],[0.34511328,-0.054018814,0.8002029,-0.07694278,-0.40526733,-0.13650577,-0.44867894]],"activation":"σ","dense_2_b":[[-0.09483589],[-0.30355707],[0.013573359],[0.045211345],[-0.0871814],[-0.24410044],[-0.0775358],[0.11720473],[-0.008279821],[-0.2442025],[-0.2776844],[0.015379876],[0.09168367]]},{"dense_3_W":[[0.40055394,0.582905,-0.4111319,-0.31334177,-0.48468548,0.11764927,-0.08204717,0.27377617,-0.7112729,0.19272773,0.26190874,-0.8084976,0.4428442],[-0.21866779,0.3226937,0.10855049,0.07141476,-0.13760294,-0.22177294,0.160254,-0.37559277,-0.5011528,-0.32128072,0.5026536,-0.39558798,0.10326434],[-0.18509546,-0.48764798,0.19780253,0.2646118,0.09047094,0.31383237,-0.58293486,-0.08110487,0.6763159,0.46092844,0.059963726,0.57369226,-0.64778125]],"activation":"identity","dense_3_b":[[0.052880295],[0.07685314],[-0.04764411]]},{"dense_4_W":[[0.9994107,0.08082187,-0.78512675]],"dense_4_b":[[0.05184357]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.03 56310-L5450 4DNHC103'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.03 56310-L5450 4DNHC103'.json new file mode 100755 index 0000000000..85544ca5c7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021 b'xf1x00DN8 MDPS C 1.00 1.03 56310-L5450 4DNHC103'.json @@ -0,0 +1 @@ +{"input_std":[[8.26363],[1.2876029],[0.4691794],[0.042342793],[1.2798712],[1.281447],[1.2820183],[1.2581282],[1.2295567],[1.1863525],[1.135284],[0.04198092],[0.042049758],[0.04212124],[0.042146564],[0.041984763],[0.041710183],[0.041294366]],"model_test_loss":0.006388714537024498,"input_size":18,"current_date_and_time":"2023-08-08_01-25-55","input_mean":[[22.872793],[-0.08689881],[0.0010234753],[-0.0038607456],[-0.08724453],[-0.087999865],[-0.08858455],[-0.08748225],[-0.08481368],[-0.08042719],[-0.07732415],[-0.003858866],[-0.0038813055],[-0.0039040009],[-0.0041669253],[-0.004390024],[-0.0046632714],[-0.004900364]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.5336922],[-0.6008307],[-0.6673705],[-1.177618],[2.1967514],[-2.8734276],[-0.27195445]],"dense_1_W":[[1.2013925,-0.38953242,-0.028237127,-0.14180943,-0.18575947,0.1106242,0.12136914,-0.71949697,-0.20943782,0.047901746,0.09341362,0.0044323304,-0.29708275,-0.052522436,0.53091663,0.27349496,0.3104034,-0.38801497],[-0.23073046,0.8099321,-0.03846076,-0.91607964,0.11726978,0.42854434,-0.07123206,-0.2530622,0.029919352,0.23274454,0.029808447,0.55654866,0.31956628,0.027127922,-0.24346891,0.12953727,0.1545052,-0.016463429],[0.4944997,-0.507676,-0.021496933,-0.13818543,0.00021766199,-0.45922992,0.5179483,-0.1616277,-0.13048062,-0.02763714,0.031596903,-0.2688555,0.3347001,0.022401655,0.18831164,0.16599877,-0.00036161195,-0.058895797],[0.79052234,0.5169544,0.004457134,0.07639163,0.040505003,0.16811295,-0.49953467,0.30723387,0.43350053,-0.30323687,0.0021920651,0.5147583,0.1054229,-0.8480872,-0.08184729,-0.10606368,-0.11437162,0.14529237],[0.87388206,1.4188874,0.005403591,-1.2710905,-0.5001256,0.66239464,-0.049878355,-0.09099538,0.22368619,0.1436128,-0.05005276,0.5060512,0.5519586,0.14216568,-0.03614136,-0.30450502,-0.01521232,0.22127852],[-1.1201782,1.1519747,0.018877197,-0.84099257,-0.10477958,0.22008999,-0.0178951,0.098986864,-0.25299644,0.25593615,0.013966401,-0.02736472,0.4958138,0.34917468,-0.06082836,-0.18867119,-0.08527511,0.14691037],[-0.011524901,1.2455785,3.091312,0.2794258,0.30048615,-0.25095785,-0.81237376,0.073421545,-0.07831179,0.29788557,-0.48452437,0.3920703,-0.35341492,-0.0816123,-0.2704529,0.057917055,-0.08816406,-0.20087627]],"activation":"σ"},{"dense_2_W":[[-0.16297658,0.03952007,0.017301178,0.11138396,-0.54143757,-0.6359262,-0.48702642],[0.023838406,0.53726286,-0.8185933,0.9541119,-0.21379428,1.0464535,-0.14768387],[-1.4899192,-0.46342307,-0.012913185,0.6559764,-1.133273,0.5413093,-0.4222291],[-1.5246911,-0.19620198,0.47882864,-0.2679241,-1.1384221,-0.3305512,-0.79238653],[-0.67590755,-0.47291875,-0.37138042,-0.867928,-0.3243818,0.35817894,-0.081819],[-0.44167435,0.26642233,-0.7098097,0.98480886,0.2975434,1.3568006,-0.6182568],[0.021911422,0.0072481604,0.80867565,-0.6889035,-0.58101594,-0.28012198,0.083424546],[-0.31145698,-0.15393952,0.88755167,-0.5754666,0.14976555,-0.2653118,-0.24384615],[-0.24493891,-0.06982408,-0.36303687,-0.28657684,-0.14763613,-0.33112663,0.09139967],[-0.3299021,0.33315933,-1.5499225,0.38461637,-0.3175137,1.1142358,0.43303496],[-1.0491866,0.33792546,-0.069094226,-0.509567,-1.1447937,-0.050081585,-1.2587998],[0.19292325,-0.06235127,0.7175149,-0.33345056,-0.8505459,-0.8724147,0.4035013],[-0.26649722,-0.77229846,1.0092193,-0.67018247,-0.044674527,-0.95283824,0.4402431]],"activation":"σ","dense_2_b":[[-0.19604135],[-0.27089414],[-0.061074182],[0.049550105],[-0.17541133],[-0.013591371],[-0.1635722],[-0.110457405],[-0.2914021],[-0.630707],[0.06793911],[-0.19795586],[-0.1507593]]},{"dense_3_W":[[0.20882441,0.32402983,-0.65811265,-1.3424684,0.384235,0.53797245,-0.056847516,-0.7877067,-0.21982256,0.8989965,-0.93191963,-0.13438137,-0.60060513],[-0.26045218,0.37893888,-0.31171417,-0.692449,-0.33556944,0.19751847,-0.22969474,-0.47745273,0.08315438,0.36671123,-0.725029,-0.41554233,-0.31832826],[0.11780495,-0.14251727,-0.22456245,-0.6772515,0.4477451,0.006119811,-0.36196816,-0.3983645,0.06536692,1.012304,-0.91562796,0.46987322,0.039987262]],"activation":"identity","dense_3_b":[[0.07951171],[0.20113988],[0.19002767]]},{"dense_4_W":[[0.76106316,0.6755035,0.4400971]],"dense_4_b":[[0.20939666]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021.json b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021.json new file mode 100755 index 0000000000..e97167c484 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI SONATA HYBRID 2021.json @@ -0,0 +1 @@ +{"input_std":[[8.904712],[1.4085329],[0.50820595],[0.046452872],[1.4017634],[1.4044306],[1.4055834],[1.3812906],[1.3511641],[1.3032484],[1.2478882],[0.046305403],[0.046340212],[0.04636982],[0.046317764],[0.04617617],[0.04582262],[0.045322053]],"model_test_loss":0.011622299440205097,"input_size":18,"current_date_and_time":"2023-08-08_00-09-02","input_mean":[[22.673122],[-0.031736072],[0.007969155],[-0.013558],[-0.032557942],[-0.03305167],[-0.03298927],[-0.029548688],[-0.026128702],[-0.023727983],[-0.020936318],[-0.013552669],[-0.013538184],[-0.013526184],[-0.013537751],[-0.013667655],[-0.013909288],[-0.01411971]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.9472544],[0.09100576],[0.07340574],[-0.6315094],[0.37090293],[0.18976328],[0.4189057]],"dense_1_W":[[-1.1817962,-1.553194,-2.9592962,0.64605,-0.7203815,-0.5482526,0.50757265,-0.721568,0.14788827,0.30028212,0.4398359,-0.5897631,-0.26421258,0.034407478,0.30330506,-0.15496844,0.25997123,-0.3066445],[0.058786348,-0.27546605,-2.8685112,0.26771522,-0.43513617,-0.2600268,0.58820564,-0.14542523,-0.08567567,-0.52094615,0.84956247,-0.0930839,-0.32848006,0.10680902,0.17591019,0.016146999,0.2344313,-0.24816336],[1.6007652,0.028163971,0.000641371,0.76986766,0.43884957,0.1650065,0.0068902513,0.05802695,0.027824534,-0.017033007,0.13403726,-0.42092884,0.06564483,-0.19293658,0.15149602,0.0152002005,0.4810689,-0.48326603],[-0.14626782,0.044463154,-0.030598573,0.09514202,0.029573362,0.5215925,-0.16921219,0.23771454,0.0925813,-0.22268316,0.1525121,-0.07805162,0.46790215,-0.34623843,-0.29796118,0.07368295,0.159104,-0.07751048],[1.5266113,-1.0623161,-0.0036699253,-0.033174455,0.05534692,0.58918065,-0.18993984,-0.4061732,0.1180316,-0.041908402,0.08485711,0.029580023,-0.2831808,-0.1555281,0.526601,-0.2898042,-0.45805973,0.31297514],[0.14919099,-0.9022488,-0.018481275,0.131622,0.17497712,-0.34224376,0.34405345,0.17506301,0.03541973,-0.12935044,0.048721306,-0.4446497,0.15578839,0.30417204,-0.111914314,-0.121121965,0.0929509,-0.017727112],[0.3040071,0.5304203,-0.0030280105,-0.020691369,-0.32636136,0.48215166,-0.24673954,0.032341566,0.1636895,0.13916636,-0.15661035,0.5669737,0.18278182,-0.6610388,-0.009479835,-0.2828995,0.15746541,0.07788113]],"activation":"σ"},{"dense_2_W":[[-0.34190053,-0.17745249,-0.15337539,0.27886426,0.69785804,-0.56094927,0.87852126],[0.4731782,0.33899984,-0.32553697,-0.5920245,-1.1791692,0.35757312,-1.2558827],[-0.17805865,-0.21635677,-0.082375415,0.42723528,0.44513035,-0.8980545,-0.15309213],[0.33529067,-0.05726452,-0.480721,-0.7930404,-0.69926023,0.8291907,-1.0018113],[-0.103077516,-1.2176032,-1.2135342,-0.18128513,-0.8239158,-1.0818433,0.37739542],[-0.016627673,-0.21135633,-0.07407072,-0.7603306,-0.2276791,1.0221021,-0.37553006],[0.31585032,0.14014794,0.72860646,0.022745533,-0.023529714,1.016683,0.16218413],[0.41354743,-0.30034938,-0.683525,0.302346,-0.41821057,-0.86687744,0.6552664],[0.1185467,-0.7869525,-0.43301994,0.2526739,-0.794169,-1.1868601,-0.19882572],[0.1250559,-0.57725024,-0.9392709,0.31270868,-0.6713074,-1.3244504,0.6004076],[-0.32635778,-0.025522923,-0.15778969,-0.76357174,-0.83400786,1.0821341,-0.69009364],[-0.18017006,0.31208438,0.18055223,0.13536966,0.37867144,-0.9807895,0.6815438],[-0.013808813,0.16385165,-0.34636796,0.37806544,-0.3967438,-0.69719434,0.17996557]],"activation":"σ","dense_2_b":[[0.067470364],[-0.26331186],[0.06993582],[-0.23382637],[-0.06892213],[-0.10123643],[-0.044926178],[-0.05964296],[-0.045392096],[-0.04618724],[0.16808233],[-0.003218339],[-0.07415678]]},{"dense_3_W":[[0.11602406,0.73329675,-0.17197938,0.64163977,-0.71038646,0.8112198,0.2608411,-0.6153334,-0.26859817,-0.67736506,0.33450362,-0.5620311,0.19605356],[-0.59497255,0.628338,0.24506254,0.019271871,-0.5683355,0.58888596,-0.36362818,0.41652063,-0.003895321,-0.26925486,-0.1982826,-0.32602772,0.5407099],[-0.57255495,0.2139631,-0.28807914,0.01145839,0.31905892,-0.15611991,0.47299016,-0.6717293,-0.11661602,0.32700828,0.41476637,0.13788031,-0.49381214]],"activation":"identity","dense_3_b":[[-0.023692269],[0.0855048],[-0.01574187]]},{"dense_4_W":[[-1.4620413,-0.09824631,-0.97454345]],"dense_4_b":[[0.0232099]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.00 56300-N9100 2228'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.00 56300-N9100 2228'.json new file mode 100755 index 0000000000..ae735ba724 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.00 56300-N9100 2228'.json @@ -0,0 +1 @@ +{"input_std":[[5.974163],[1.2132347],[0.5706513],[0.0502793],[1.2130301],[1.2128786],[1.2129273],[1.2019379],[1.1921468],[1.1817437],[1.1693443],[0.049872153],[0.050001368],[0.050128575],[0.0504321],[0.050471127],[0.05024059],[0.049630113]],"model_test_loss":0.0027105817571282387,"input_size":18,"current_date_and_time":"2023-08-08_02-17-02","input_mean":[[24.601255],[0.09067642],[0.00598973],[-0.01976689],[0.08466021],[0.085768804],[0.087323815],[0.088206366],[0.08898853],[0.08882811],[0.08783784],[-0.019929642],[-0.019905197],[-0.019887373],[-0.019954689],[-0.02004099],[-0.02029898],[-0.020633632]],"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.033486906],[-0.9854258],[0.18699676],[0.23900361],[0.066415675],[0.29984745],[-0.8694348]],"dense_1_W":[[-0.017391304,-0.1664158,1.2471004,0.17742877,-0.17622486,-0.07136989,0.17133567,-0.4406301,-0.17438401,0.10146424,0.2975635,-0.1329268,-0.1988518,0.13207461,-0.07052476,-0.57519513,0.1340373,0.2621166],[-0.53872705,-0.23616274,-0.9677832,0.3608879,0.5576081,0.5372162,-0.07011008,-0.33063745,-0.5091716,-0.47236058,0.5879706,-0.025170565,-0.39819354,-0.0017943033,0.23057717,0.32230052,0.053017925,-0.38491854],[-0.007569397,-0.15017577,0.017163722,0.11802223,0.086126305,-0.43940485,0.27736512,-0.08943185,0.12873243,0.42947087,-0.3468891,0.022381762,-0.22449934,-0.0031788715,0.19415219,0.17616823,-0.16482577,-0.6204708],[0.484722,-0.47863308,-0.003916951,-0.14998426,0.27055895,-0.62900317,0.35633156,0.2332263,-0.23696448,0.15093268,-0.056025397,-0.15387145,-0.028749702,-0.114084855,0.43514955,0.20574397,-0.04303955,0.029721491],[-0.0050577456,0.45235983,1.3863038,0.11857966,-1.062984,0.024143053,-0.5049202,0.520871,0.14744748,0.660791,-0.5397323,0.1884993,-0.3807901,-0.26886487,0.04286105,-0.15216194,-0.18675679,0.3220595],[0.3422851,-0.091745734,0.00288963,0.20548403,0.0039008386,0.80896676,-0.24846731,-0.039755683,-0.37319353,0.19646579,0.11100307,0.28086716,0.011461304,-0.20595428,-0.4130035,0.09002887,-0.08794721,-0.04846733],[-0.5121424,-0.10687892,0.97480345,-0.32319045,-0.55000156,0.039779805,-0.23451307,0.39487234,0.677461,0.028733881,-0.3141663,-0.006031874,0.020082282,-0.2869862,0.3214539,0.14777255,-0.032176822,-0.0048443917]],"activation":"σ"},{"dense_2_W":[[0.51288545,0.26980367,0.41815448,0.7882964,-0.01700049,-0.40586126,-0.7246673],[-0.032620583,0.6513666,0.52040267,-0.40663394,-0.97148997,-1.0426518,-0.22752136],[0.16157787,-0.28532407,-0.62873006,0.2976417,-0.2695294,-0.6110988,-0.32099858],[0.288502,0.5002554,0.24604729,0.60736823,-0.52036625,-0.591719,-0.34863025],[-0.49133012,0.13397883,-0.3788907,-0.95399517,0.04031534,0.8688636,0.36374664],[0.57312244,0.38245326,-0.06361987,-0.015409997,-0.4972398,-1.1938152,-0.1887008],[-0.23034595,-0.06613118,-0.42114103,-0.5018989,-0.034961794,0.59000736,0.19794862],[-0.6363575,-0.519735,-1.0045744,-0.11841846,0.09764135,-0.7355506,-0.1620501],[-0.740666,0.07916898,0.051017664,-0.20237261,0.42158294,0.64777046,0.18364593],[-0.3495589,-0.21401046,-0.56614906,-0.9645764,0.23658282,0.30558574,0.44571444],[0.54428804,0.7490656,0.028581897,0.068156295,-0.8264058,-1.1980392,0.34633735],[0.12275982,-0.13522817,0.5264364,0.5047181,-0.529052,-1.3191032,0.2033573],[0.62411124,0.4409063,-0.18518022,0.8019149,-0.49426788,-0.65130705,-0.27399883]],"activation":"σ","dense_2_b":[[-0.110052325],[-0.29302466],[-0.5614016],[-0.07483078],[0.18669383],[-0.20799044],[0.07792293],[-0.3352715],[0.062055763],[0.018744566],[-0.0924943],[-0.23109648],[-0.04416926]]},{"dense_3_W":[[0.50142425,0.10667864,0.4399292,-0.028254379,-0.39511585,-0.5136239,-0.34489322,-0.21440437,-0.5778223,-0.33600324,0.6226011,0.27962455,0.11977961],[-0.043028127,0.52723306,0.20324984,-0.5955265,0.15386851,0.15855698,0.4817966,0.53277177,-0.517283,0.78218174,-0.12013057,0.39024982,-0.7431557],[0.4440453,0.35185146,-0.028372388,0.61086553,-0.9743987,0.5447786,-0.42143017,0.11649257,-0.6926346,-0.6080743,0.47793046,0.5229465,0.56632364]],"activation":"identity","dense_3_b":[[-0.03343789],[0.052187573],[-0.114594795]]},{"dense_4_W":[[-0.18980438,0.15273905,-0.88665426]],"dense_4_b":[[0.09599546]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.01 56300-CW000 1A15'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.01 56300-CW000 1A15'.json new file mode 100755 index 0000000000..71720e600d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.01 56300-CW000 1A15'.json @@ -0,0 +1 @@ +{"input_std":[[6.22473],[0.8251674],[0.55987936],[0.04294055],[0.80855274],[0.8140519],[0.819299],[0.8224256],[0.8223862],[0.8136785],[0.807375],[0.042726606],[0.042794228],[0.042867724],[0.043195076],[0.04336566],[0.043502316],[0.043476745]],"model_test_loss":0.0011282428167760372,"input_size":18,"current_date_and_time":"2023-08-08_02-41-29","input_mean":[[21.709253],[0.02837096],[0.014460302],[-0.004794128],[0.024455145],[0.026277967],[0.028953284],[0.0311847],[0.033131044],[0.030929914],[0.030909915],[-0.0050024847],[-0.004941226],[-0.0048792004],[-0.004936204],[-0.0050907354],[-0.005161467],[-0.005247103]],"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.20276919],[-0.81567574],[0.17173824],[0.02485116],[-0.16411562],[0.4910318],[-0.05420777]],"dense_1_W":[[-0.0012471483,0.89754707,-0.30605346,0.30311847,-1.4427079,0.6952515,-0.65700763,0.040769663,0.49388984,-0.0077092303,-0.12679042,0.30025703,0.22031534,-0.947996,-0.76274323,0.6916131,0.9007639,0.7855221],[-0.6438617,0.5432943,0.055781104,0.14055097,-0.05817591,0.85594875,-0.63760585,-0.14287747,0.0445909,-0.4966032,0.3642643,0.5872178,-0.43109778,-0.80650455,0.052074146,0.2705149,0.12943903,-0.19362473],[0.003357844,0.31364292,0.22141118,0.98970664,-0.247483,0.6660532,-0.45712006,0.2463237,0.04045275,-0.11441027,-0.20408206,0.25224286,-0.0011789324,-0.36312783,-0.7617343,-0.306311,-0.3153426,-0.5837831],[0.028954435,0.66365343,0.022223057,0.07054718,0.24609722,-1.2109858,-0.4602635,0.3987523,0.01633434,-0.09760745,-0.1753251,-0.49207205,0.0021850022,0.53756136,-0.00042571075,0.009666692,0.042855307,-0.11420329],[-0.03580821,1.9344804,8.167719,-0.66073954,0.7095272,0.1456512,-1.4878063,-1.1827188,-0.20311646,-0.14221944,-0.27837816,0.6607043,0.51872766,-0.2517782,0.24511532,-0.028188378,-0.12866867,-0.06853984],[0.53031373,0.023884322,0.039527502,-0.16327015,-0.037574653,0.8523508,-0.17424065,-0.25996268,-0.031912126,-0.14452986,0.22546388,-0.028659882,-0.0152696865,-0.29828578,0.35591877,0.16280918,-0.16622923,-0.045724925],[-0.0099094855,-0.024337003,-0.90923375,0.33954924,-1.0551822,-1.4047244,3.1376684,-0.67196745,0.21238333,-0.35975868,0.3339244,-0.7338359,-0.37664357,0.6216561,0.230003,0.13399994,0.009667031,-0.18426572]],"activation":"σ"},{"dense_2_W":[[-0.46300676,-0.92880476,-0.6603387,0.18106437,0.6114232,-0.3085461,-0.34915724],[-0.27267945,-0.032490827,-0.19413497,0.67636174,-0.25963235,-1.0346236,0.5159924],[0.10341285,-0.2286906,0.58102465,-0.6124768,0.27501637,0.63732,-0.25335288],[0.47252873,0.15228121,0.15265052,-0.1303907,-0.27630845,0.29428765,0.054996368],[-0.60003024,-1.7184374,-0.3925117,2.1059344,-1.1817226,0.8805947,2.0097177],[-0.5157754,0.2864647,-0.2600413,-0.5098677,-0.8062721,-0.8342195,-0.12589265],[-0.27893555,0.4498806,-0.46256977,-0.34525606,0.16928495,0.57889444,0.1360685],[-0.069990896,-0.033348653,-0.5150556,0.86856264,-0.43608308,0.2634268,0.50319856],[-0.92615515,0.8989689,-1.0192099,1.1630723,-1.5832745,-2.3778448,1.1420947],[0.24078313,-0.059227604,0.52533114,-0.22976397,0.26565957,0.0019856135,-0.37963587],[-0.43368915,-0.19412571,0.030553307,-0.008343276,-0.24855247,-0.38562915,0.028216615],[0.24137807,0.50673467,0.58424366,-0.5623794,-0.4958684,0.043686286,-0.29952815],[-0.53380847,-0.6478634,-0.66525984,-0.09425604,0.30415344,0.033006296,-0.2779725]],"activation":"σ","dense_2_b":[[-0.19925767],[-0.22416385],[-0.024587726],[0.00076841726],[0.9967099],[-0.21401763],[-0.009374596],[0.037712634],[-0.41577217],[-0.08446474],[-0.22238271],[0.029249683],[-0.19375889]]},{"dense_3_W":[[-0.064283945,-0.28218833,0.29587984,0.47048366,0.1037391,-0.34584334,-0.099526614,-0.4141651,-0.71549547,-0.14117901,-0.48195595,0.6179986,-0.056695417],[-0.5290835,-0.5220605,-0.5042605,-0.30072263,0.6284589,-0.45276895,0.028285943,-0.31197917,0.39458558,0.17490475,0.0648546,-0.5194648,-0.4971718],[-0.32037377,-0.016439343,0.07254626,-0.09806289,-0.59013605,0.27251726,0.36449474,-0.557429,0.4412477,0.3926684,0.5275635,0.4008913,-0.14265701]],"activation":"identity","dense_3_b":[[0.004609829],[0.016195556],[0.0031462326]]},{"dense_4_W":[[0.73565596,-0.034537062,0.4909206]],"dense_4_b":[[0.0029074473]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.02 56370-N9000 0B24'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.02 56370-N9000 0B24'.json new file mode 100755 index 0000000000..df9d5c3321 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.02 56370-N9000 0B24'.json @@ -0,0 +1 @@ +{"input_std":[[7.049927],[0.90012175],[0.48095357],[0.04241544],[0.8875352],[0.8917799],[0.8952688],[0.89421207],[0.88974833],[0.8810388],[0.8717085],[0.04214072],[0.042199083],[0.042250115],[0.04236346],[0.042318553],[0.042197257],[0.04192991]],"model_test_loss":0.0027597311418503523,"input_size":18,"current_date_and_time":"2023-08-08_03-06-21","input_mean":[[24.36531],[-0.12347623],[0.006147819],[-0.016785737],[-0.12271177],[-0.123503655],[-0.12395989],[-0.118791655],[-0.116043516],[-0.107350565],[-0.103384055],[-0.016675012],[-0.0167048],[-0.016730325],[-0.016802218],[-0.016868604],[-0.017092224],[-0.017343003]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.3077128],[-0.053523973],[-0.08867575],[-3.564466],[-0.8363932],[-0.03499285],[-0.9791886]],"dense_1_W":[[-0.657707,-0.40130603,-0.05392449,-0.17988339,0.54668987,-0.46538657,0.57125705,-0.8721553,-0.48437503,-0.3783023,0.20773576,-0.006874521,-0.16955361,0.5569281,0.012815096,-0.24756004,0.13119608,-0.0070960107],[-0.00478684,-0.024804201,-0.7233322,0.07783175,-0.24326427,-0.3535344,0.9700095,-0.7786834,-0.6422574,0.0039578755,1.0983216,-0.08911305,-0.43728283,0.4707163,-0.30569777,0.37014574,0.22817229,-0.17220958],[-0.0018613227,0.18911898,-0.003760839,-0.19434088,-0.11199104,0.8207415,-0.1570958,-0.0013982604,-0.3096825,-0.12772126,0.23146391,0.71790016,-0.23160003,-0.35091403,-0.104312025,-0.04883372,0.24788088,-0.024843656],[-0.6503062,0.4760144,0.05285127,-0.5623532,-0.31313643,0.11321604,-0.39134973,0.48142427,0.8163628,0.24858923,-0.16951846,0.20952548,-0.13689561,0.36601552,-0.25696254,0.21768238,0.08233283,-0.015864879],[-0.9636597,0.40053022,-0.0058141947,-0.33463675,-0.11677622,0.26507962,-0.21261413,-0.79070723,0.18271628,-0.105050296,0.18018496,0.17602134,0.7042138,-0.3778066,-0.45499915,0.03500361,0.11619197,0.020927545],[-0.0077773444,0.5942843,3.5123742,0.106612384,-1.3349271,-0.28774235,-0.8317361,0.39143825,1.498797,0.28138006,-0.60930085,0.0037155056,0.28335968,-0.20002076,-0.15279055,0.09878292,0.17169282,-0.04990126],[-0.9617149,-0.15065387,0.0058096866,-0.28747433,0.38993824,-0.16643299,-0.17986324,0.08583848,0.41806793,-0.09902705,-0.102467,0.09218759,0.28329134,-0.0128028095,-0.28463566,0.009430492,0.3542676,-0.045534987]],"activation":"σ"},{"dense_2_W":[[-0.81077546,-0.10424342,0.6886152,0.848398,0.6319954,-0.058461085,-0.36828956],[0.60984695,0.55423707,-0.42063406,-0.32707918,-0.24104166,-0.48186648,-0.24464516],[0.161898,-0.48786223,-0.41306773,-0.6622412,-0.13313001,0.022441162,-0.036522806],[0.57633585,0.079778,-0.68529695,-0.6923111,-0.63098544,0.06022443,0.58791363],[-1.1134484,-0.025714546,1.190732,1.4953258,1.1254282,-0.68416023,-1.3409424],[0.33615056,-0.18059164,-0.32584703,-0.43712434,0.011917973,-0.38235188,-0.048886925],[0.27672747,0.2700329,-0.5545609,-0.17063317,0.06863414,-0.29364643,-0.068461105],[-0.75640607,-0.67021567,-0.8091184,-0.5977734,-0.33590022,0.33695093,-0.052878845],[-0.29990476,0.07485581,-0.18799536,0.3113804,-0.2548531,0.079891905,0.5823901],[0.7713344,0.40596846,-0.39756826,-0.42803642,-0.12433386,-0.5623329,0.15788138],[0.47727326,0.5254002,-0.44868997,-0.5893729,0.033892345,-0.47418627,0.5335775],[-0.5053448,-1.0315061,0.3315767,1.0608679,0.8883031,0.15161903,-0.40771657],[-1.3299836,-0.099792145,0.9213788,0.5617499,1.2194797,0.03981927,-1.172062]],"activation":"σ","dense_2_b":[[-0.3320475],[0.016477866],[-0.29854566],[0.0858396],[-0.28445113],[0.055967335],[-0.0076928814],[-0.32438016],[-0.011105792],[0.0491247],[-0.061171416],[-0.26423758],[-0.19981484]]},{"dense_3_W":[[0.07605307,-0.5657727,0.21602604,0.33659753,0.061791074,0.16310127,0.0704255,0.33747506,-0.37032503,0.48479742,0.47762752,0.07121615,-0.47501156],[0.60820574,0.17259821,-0.14938714,-0.53478646,0.82433504,-0.56874645,-0.27502382,0.037113808,-0.19531803,-0.52230936,-0.5779869,0.4101667,0.6944722],[-0.07375422,-0.5958687,0.09147497,-0.47058004,-0.16646929,0.12560609,-0.015372727,-0.5500357,0.5909702,-0.19595517,-0.6633332,0.46147022,0.5020841]],"activation":"identity","dense_3_b":[[-0.018324953],[0.00094535865],[0.0076563973]]},{"dense_4_W":[[0.03257061,0.92077035,0.33927587]],"dense_4_b":[[0.0008585189]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN.json new file mode 100755 index 0000000000..bebd461c43 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON 4TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[6.8535337],[1.1871091],[0.57845885],[0.049630664],[1.1714827],[1.1759739],[1.1807529],[1.1754702],[1.163419],[1.1391207],[1.1146902],[0.049304288],[0.04938992],[0.04947085],[0.049577486],[0.049585983],[0.049360827],[0.048854783]],"model_test_loss":0.0038447733968496323,"input_size":18,"current_date_and_time":"2023-08-08_01-51-57","input_mean":[[23.75506],[0.019698216],[0.02125942],[-0.012130068],[0.02019723],[0.019409409],[0.020214675],[0.029943746],[0.034989115],[0.04343616],[0.04719076],[-0.012154487],[-0.012135111],[-0.012114784],[-0.012035617],[-0.012112525],[-0.012144607],[-0.012390441]],"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.2290616],[-0.06566025],[-0.26232734],[-0.014396481],[-0.23760305],[0.014094781],[-0.13057418]],"dense_1_W":[[-0.2349692,-0.0063291234,-0.035249587,0.08617903,-0.365861,1.0055882,0.2188088,0.1449217,-0.24121442,-0.4175699,0.37988308,0.62451494,-0.123622105,-0.09489112,-0.50720054,-0.44936404,0.0527042,0.2325743],[-0.0063050375,0.3207623,-0.0044895783,0.28548434,-0.507397,0.6541944,-0.6847768,0.43596634,0.030897599,0.20960332,-0.057178702,-0.21487401,0.053376693,0.13392489,-0.21650217,-0.109688595,0.039938804,-0.116206385],[0.2708052,0.5528461,-0.03331542,-0.12908351,0.06319576,0.12678441,0.13067268,-0.2470256,0.05019679,0.10845501,-0.038128812,0.35948697,-0.12627743,-0.37605998,0.25131917,0.24767017,-0.49968937,0.09801629],[-2.6202499e-5,0.37221593,2.4131448,-0.299408,-0.6506924,0.47218078,-0.29836714,0.32324246,0.577699,0.008439944,-1.0393782,0.1451764,-0.10641525,0.44623712,-0.0794428,-0.11800355,-0.12773673,0.28916764],[0.0017583282,-0.03781789,-0.21004789,0.41564634,-0.0032608341,0.31357232,-0.6957937,-0.53825456,-0.52614933,-0.6324325,-0.009301665,0.02049273,-0.048440617,-0.4821638,-0.18134792,0.3243188,0.33311984,0.39314845],[0.004920383,-0.533088,0.1415015,-0.13392477,-0.40952107,0.8444377,-0.8526385,0.7274967,0.9084346,0.18900108,-0.6379418,0.19544344,0.42572308,-0.39255446,-0.24895424,-0.019269833,0.0014590932,0.02395835],[0.00041457335,-0.469483,-0.03338856,0.17351627,0.01683441,-0.35584116,0.016615873,0.38706398,0.33813193,-0.23397829,-0.32178026,-0.17345887,-0.10871371,0.21958116,-0.042337235,-0.1781205,0.16341408,0.14160205]],"activation":"σ"},{"dense_2_W":[[0.44592378,0.15143807,-0.009424234,0.35239178,-0.09963268,0.55982405,-1.0174559],[-0.442566,0.29746428,-0.33482108,-0.014999504,-0.6711541,-0.40101603,0.6295242],[0.39900258,0.30389005,-0.26535806,0.3451803,0.120485105,0.536382,-0.30911598],[0.11134723,-0.23925714,0.19048968,-0.7852743,-0.16722661,-0.5444894,0.43297023],[0.07680695,-0.53264195,0.015406939,-0.086414926,-0.002185912,-0.81844103,0.35812145],[-0.40373468,-0.54447883,0.13417311,0.024675215,-0.48897472,-0.30226046,-0.10632472],[0.6465857,-0.38075125,-0.18136446,0.3086386,0.03399703,0.64962906,-0.71223384],[-0.46307555,-0.057900187,-0.23908263,-0.2741226,-0.4267321,-0.24727249,0.78550595],[0.0005410685,0.5130376,0.18730785,0.32222855,-0.16497147,0.5314175,-1.0230789],[0.019229718,0.06334568,-0.5937085,-0.46484637,-0.60105985,-0.21383111,0.51939124],[0.23276499,0.666815,0.71696717,-0.31990758,0.5952141,0.4067587,-1.1618655],[0.1722438,0.71504825,0.46906963,-0.13681711,0.47640622,0.45497712,-1.2770692],[0.3419466,0.85895354,0.057526387,0.11937055,0.3142995,0.68276507,-1.9635502]],"activation":"σ","dense_2_b":[[-0.24404627],[0.09535624],[-0.2836256],[0.032848567],[0.057316262],[0.049310047],[-0.25128764],[0.15491374],[-0.3825811],[0.13178083],[-0.30603507],[-0.29319304],[-0.7450717]]},{"dense_3_W":[[-0.30619392,0.6724943,-0.17787461,0.21804851,0.57443386,0.35076854,-0.5711128,0.59865326,-0.13248625,0.35207286,-0.35570997,-0.6262289,-0.32156947],[0.63655996,-0.082538255,0.31164888,-0.009138885,-0.13852367,-0.18027483,-0.38830742,-0.57337445,0.09914936,-0.7164049,0.45311737,-0.097862616,0.3133059],[0.21028735,0.1864526,0.24931045,0.3717982,0.38209185,-0.06889437,0.4184427,-0.15917623,-0.6388955,0.72339946,-0.59677637,-0.51407987,-0.3791772]],"activation":"identity","dense_3_b":[[0.06066313],[-0.053203672],[0.042732116]]},{"dense_4_W":[[-0.9345688,0.41612437,-0.1675497]],"dense_4_b":[[-0.06134532]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.01 56300-P0100 2228'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.01 56300-P0100 2228'.json new file mode 100755 index 0000000000..e4a5d71459 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.01 56300-P0100 2228'.json @@ -0,0 +1 @@ +{"input_std":[[7.217079],[1.0207418],[0.529568],[0.040043645],[1.0053055],[1.0108265],[1.0154151],[1.0237554],[1.0261607],[1.0251414],[1.0156276],[0.039747525],[0.03984065],[0.0399419],[0.040151272],[0.040166046],[0.040242888],[0.040208846]],"model_test_loss":0.00269640376791358,"input_size":18,"current_date_and_time":"2023-08-08_04-21-19","input_mean":[[23.900599],[-0.008398695],[0.0015282386],[-0.007829772],[-0.009208989],[-0.008911737],[-0.008798698],[-0.005703768],[-0.0035596534],[-0.0031186447],[-0.0031662488],[-0.007885317],[-0.007857131],[-0.007826983],[-0.00763483],[-0.0073542255],[-0.0071039707],[-0.007163035]],"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":[[-8.591739e-5],[-0.17085157],[-0.12687801],[4.364553],[0.8255702],[-0.8432205],[-4.7023892]],"dense_1_W":[[-0.00036674185,-0.15393308,-0.0043171174,0.52888125,0.19427226,1.0408313,0.117876925,-0.2845569,-0.089497805,-0.29269257,0.46610746,0.038173147,-0.28103483,-0.36340392,0.34743688,0.18314365,-0.16116409,-0.29159978],[-0.0051495107,-0.11477599,-0.15387562,0.12564987,0.4429667,-1.0813134,0.2080362,-0.20897992,0.1524622,0.039019175,0.15941331,-0.51186883,-0.16175619,0.35541835,0.15099002,-0.093263775,0.3209118,0.2376951],[-0.0045729824,0.17833863,-0.13646784,-0.19206388,-0.14445858,0.50118786,-1.1250085,-0.12486535,0.12982805,0.18782985,0.025482606,0.8972726,0.32246736,-0.6113951,-0.66491884,-0.60095704,0.4065867,0.78783005],[0.8883356,-0.004670374,-0.3004736,0.43118215,0.2730039,-0.73936516,-0.18756554,-0.30551004,-0.60160047,-0.4570068,0.42535797,-0.5673324,0.23564544,0.31826892,0.3946162,0.030204464,-0.21274225,-0.18297665],[0.5877724,-0.5607949,-2.7950788,0.3463737,0.3446188,-0.49314648,0.37603086,0.14976244,-0.11499728,-0.20843907,0.7227414,-0.21543501,-0.25004113,0.5456382,-0.35219005,-0.28194588,0.22977184,-0.019029563],[-0.42525807,-0.37978706,-2.812959,-0.20304315,0.23198645,-0.7054526,0.9276223,-0.21462558,-0.45101932,0.18400525,0.6539824,-0.4523719,-0.067426644,0.8022,0.12475116,-0.29360187,0.1820839,-0.08618455],[-0.8887159,-0.47105905,-0.30436194,0.5955465,0.044637978,-0.35214606,0.17866008,-0.38256323,-0.6545903,-0.4565794,0.49180064,-1.1552716,0.23951262,0.5748429,0.9034781,-0.27641115,-0.06816631,-0.3625054]],"activation":"σ"},{"dense_2_W":[[-0.057308674,0.07639922,0.2855919,0.06315537,-0.5223864,-0.32385927,-0.7735022],[-0.88395154,-0.36314768,0.18841538,-0.03785002,-0.5138743,-0.74670565,-0.33253807],[0.12478751,-0.6835147,0.49607527,-0.73937863,0.026476782,0.09121713,-0.42469463],[-0.7171305,0.4833388,-0.5362656,0.599928,-0.14776947,-0.052318748,0.46912462],[0.40110588,-0.31508088,0.4552697,-0.9951328,-0.36453304,0.095689364,-0.25619012],[-0.21850535,0.5483896,-0.102815315,-0.30166072,0.42355484,0.024482686,0.47288817],[-1.2052294,0.0726458,-0.46747494,0.19683914,-0.39607075,0.4458234,1.4317138],[0.19502828,-0.048589204,-0.19319248,-0.6721833,0.011818287,-0.031072982,-0.28005797],[-0.019494833,-0.30039933,-0.5927758,0.06800316,-0.08778525,-0.50062007,0.1897266],[0.15044136,-0.33724236,-0.27866372,0.012466757,0.35915533,-0.41124758,-0.57960784],[0.114993274,-0.24257775,0.6021602,-0.96579486,0.07640555,-0.3595668,-0.405754],[0.5267543,-0.18335517,-0.13551843,0.045388196,-0.58716494,-0.32110387,-0.0056233923],[-0.36361262,0.5996567,-0.4573528,0.7281233,-0.21097347,-0.55819994,1.4120568]],"activation":"σ","dense_2_b":[[-0.10522118],[-0.31128448],[-0.07047554],[0.011506447],[0.010999659],[-0.14467213],[-0.42379537],[-0.1810383],[-0.13019946],[-0.102506414],[-0.04960739],[-0.026930744],[-0.10272136]]},{"dense_3_W":[[-0.5352019,0.019407902,-0.4207235,0.6295458,-0.6254561,0.53919613,0.25542,-0.08012609,-0.44455698,-0.5093523,-0.5136104,-0.34459922,-0.37261885],[0.2026642,0.60963094,0.4016697,0.10310326,0.7051762,0.050026696,-0.55055726,0.1682248,0.48129147,0.19183299,0.45172593,-0.32796833,-0.81298125],[-0.4364362,-0.31193537,-0.17849928,-0.27077642,-0.2368534,-0.31495923,0.20951663,-0.035278384,-0.5224049,-0.42713875,0.56383544,0.28901008,-0.67109203]],"activation":"identity","dense_3_b":[[0.064849064],[-0.06753018],[-0.040117458]]},{"dense_4_W":[[-0.8941895,0.62574023,0.66779023]],"dense_4_b":[[-0.055856243]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.02 56370-P0000 0B27'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.02 56370-P0000 0B27'.json new file mode 100755 index 0000000000..363238aa43 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.02 56370-P0000 0B27'.json @@ -0,0 +1 @@ +{"input_std":[[7.403178],[0.7899407],[0.46679014],[0.038778264],[0.78739744],[0.78873724],[0.7892707],[0.7664106],[0.7474393],[0.72352415],[0.7035473],[0.038599715],[0.038635705],[0.03867455],[0.038486294],[0.03835014],[0.037975483],[0.037434243]],"model_test_loss":0.0036874583456665277,"input_size":18,"current_date_and_time":"2023-08-08_04-46-00","input_mean":[[21.313442],[-0.007652719],[-0.0010814818],[-0.015364245],[-0.008704642],[-0.0084470315],[-0.008181152],[-0.009390086],[-0.006841837],[-0.005270116],[-0.004453076],[-0.015435301],[-0.015421092],[-0.015408219],[-0.015379849],[-0.015380499],[-0.01542405],[-0.01552717]],"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.015034866],[-2.333925],[0.07472282],[0.33385256],[-1.7635626],[0.20520012],[1.4994509]],"dense_1_W":[[-0.020420635,0.47671422,-2.2228365,0.061408564,-0.33446848,-0.34008023,0.24743442,-0.049677674,-0.3092543,0.027715717,0.2433644,0.22493373,-0.33363193,-0.21346657,0.053122807,0.13210946,0.15116207,-0.1479962],[-0.7627412,-0.33639726,-0.017733732,-0.26600602,-0.030820448,-0.4295762,0.34820956,0.049817856,-0.08305463,0.0075742602,-0.021596808,-0.45695007,0.3086963,0.84450537,-0.5957173,0.10477459,0.18988973,-0.06328525],[-0.06376427,0.20835318,0.002514508,0.26117352,-0.62271047,-0.19520147,0.32756966,0.06494971,0.0065356204,-0.080957,-0.078121,-0.3372254,-0.0696566,0.28001508,0.14789122,0.07902147,-0.37852517,0.10395386],[-0.023382343,-1.0105892,0.16153766,-0.05629362,0.98606056,-0.38667163,0.120815866,-0.0031459653,-0.0114722485,-0.10742418,0.29860422,0.0918033,-0.18897793,0.8804208,0.28319594,-0.3183279,-0.60766125,-0.98080194],[-0.7378326,0.35443896,-0.0014945221,0.23333554,-0.066297725,0.59670603,-0.48733267,-0.0073978053,-0.15717119,0.0717004,0.048404034,0.22451897,-0.4241085,-0.28380367,-0.052011304,0.5055362,-0.11498784,-0.12756315],[-0.004277259,0.42898464,0.09345899,-0.24447562,-0.45621815,0.31656915,-0.1402948,0.04722811,0.008236777,-0.17245218,0.09979451,0.3201254,0.48197353,0.14734976,-0.1808025,-0.3086107,-0.4733515,-0.280876],[1.5839243,0.048649643,-0.01699404,-0.14009474,-0.11868921,0.5394154,-0.35899943,-0.021968285,-0.117241286,0.027508566,0.05609089,0.72090036,-0.19876392,-0.5080364,0.174731,-0.023319548,-0.32231605,0.2783173]],"activation":"σ"},{"dense_2_W":[[-0.22034773,-0.31270447,0.5831825,-0.3320837,-0.39305016,-0.6177819,0.22597681],[-0.5904076,-0.52282643,-0.20162795,-0.12272505,0.43796244,0.72379744,-1.1039912],[-0.3313703,-0.2817194,-0.5364639,-0.57078487,0.87520176,0.567861,-0.7439988],[-0.78400034,-0.3179023,-0.55988556,0.032341063,1.5522407,0.6788271,-1.6406517],[0.010183664,0.27435702,0.79238176,-0.10173684,0.32933375,-0.51913565,-0.42577544],[-0.69303,-0.39014181,-0.107236296,-0.48264664,1.0204724,0.5373991,-0.97509813],[-0.14288978,0.6519878,0.8277582,-0.12722696,-0.00015177799,-0.6953236,-0.16517387],[-0.3694772,-0.12806806,-0.33594415,-0.653893,0.2182475,-0.26103872,-0.2874901],[-0.07374445,0.19246729,0.5173003,0.61818415,-0.022056762,-0.5472877,-0.58056134],[-1.0251218,-1.2561343,-0.07483788,-0.9255225,0.44686273,1.6848487,2.3562455],[-0.349229,-0.21101256,-0.5525006,-0.7540905,0.49885616,0.4253754,-0.5412813],[-0.12317935,-0.6319155,-0.8908915,0.08234697,0.8512533,0.3687786,-0.09611299],[0.05607153,0.01724528,0.10498003,0.18284152,-0.31280768,-0.2632974,-0.622548]],"activation":"σ","dense_2_b":[[-0.025739571],[-0.23397255],[-0.0609166],[-0.2377031],[-0.022815771],[-0.3112023],[0.03326642],[-0.33141518],[0.0427826],[0.45685703],[-0.23909605],[-0.019891355],[-0.017059732]]},{"dense_3_W":[[0.048393164,0.01459173,0.55632687,0.16953933,-0.6129878,0.27854604,-0.30732617,-0.3395474,-0.6306935,0.41403195,-0.24093059,0.3859709,-0.14472291],[0.6029767,-0.49897185,-0.55901927,-0.5471171,-0.2063777,0.09599516,0.64774793,-0.48304877,0.38883877,0.17090505,-0.65467936,-0.7351466,0.53769803],[-0.08842656,0.06706266,-0.32794118,0.12725264,-0.24223024,-0.19160233,-0.22151925,-0.39071792,0.48049617,-0.7938209,-0.2654298,0.28608698,-0.3520467]],"activation":"identity","dense_3_b":[[-0.05909381],[0.06149542],[0.10376763]]},{"dense_4_W":[[1.2233244,-0.6344225,-0.43675804]],"dense_4_b":[[-0.06323359]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.05 56300-P0000 1514'.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.05 56300-P0000 1514'.json new file mode 100755 index 0000000000..8b65df1a06 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN b'xf1x00NX4 MDPS C 1.00 1.05 56300-P0000 1514'.json @@ -0,0 +1 @@ +{"input_std":[[5.7955017],[0.89799774],[0.5061451],[0.04870496],[0.897324],[0.89804333],[0.8983218],[0.88777643],[0.8856539],[0.87744457],[0.8659113],[0.048619226],[0.048616584],[0.048609655],[0.048495032],[0.048379052],[0.048049383],[0.047698256]],"model_test_loss":0.0017304600914940238,"input_size":18,"current_date_and_time":"2023-08-08_05-11-25","input_mean":[[23.104206],[-0.034794316],[-0.020573495],[-0.0021940465],[-0.028357053],[-0.030680137],[-0.032690864],[-0.042001907],[-0.0496564],[-0.052361522],[-0.051856462],[-0.0021513677],[-0.0021468238],[-0.0021485426],[-0.002253827],[-0.0023359228],[-0.0024148696],[-0.0024249407]],"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.08124138],[0.1903408],[-0.013999624],[-0.17143527],[0.1768055],[-0.20094149],[-3.179182]],"dense_1_W":[[0.0024723092,-0.09259051,-0.09757232,-0.12717314,0.25085792,-0.30573526,0.052445546,-0.08738104,-0.29787505,0.27411562,-0.018140156,-0.3799589,0.09386907,0.09939116,0.5356948,0.31420502,-0.38083148,-0.029328207],[-0.15488878,0.20467338,0.35297525,-0.60644305,0.6169192,0.115096435,0.48780584,0.056056496,-0.08405607,-0.23489293,0.92967564,-1.6062328,-1.3127173,0.013400019,-1.0209213,-1.1354511,-0.38825014,-1.3973286],[-0.005542379,0.099915504,-0.03526838,0.2042634,0.01714366,0.5498627,-0.26516965,-0.062147252,-0.019922264,-0.098149635,0.15541059,0.5616284,0.28126147,-0.5231745,-0.4385349,-0.16692646,-0.11820826,0.13180146],[-0.001893487,-0.12823583,-0.057376172,0.4284407,-0.047093183,-0.71953607,0.5155282,0.009202056,0.2418623,-0.21878259,-0.012335793,-0.03496361,-0.45879838,0.49171248,-0.1584971,-0.1781668,0.06704749,0.10256722],[0.08270151,-0.091461316,-2.2379663,-0.0538001,0.56830716,-0.22148854,0.0931062,-0.2950928,-0.50371003,0.100836776,0.6016303,0.26128513,0.41152674,0.28541353,-0.695136,-0.79610765,0.3173571,0.21472184],[0.16334678,-0.5975227,-0.34775907,1.1889083,0.43193462,-0.41070813,0.43282235,-0.7802282,-1.0563897,-0.5516799,0.39116058,0.38568383,0.96553546,1.4799829,0.5509527,0.6597429,1.5476053,0.72938883],[-1.1631825,-0.011732463,-1.3126845,0.18595614,-0.5279944,-0.20657395,0.09089918,-0.21701668,-0.29725736,0.09534146,0.16501014,-0.01930718,0.22282849,-0.078318045,-0.2752747,-0.5757349,0.60279995,-0.0931696]],"activation":"σ"},{"dense_2_W":[[-0.781368,-0.6196695,0.22133054,-0.58676493,-0.6143645,-0.38137332,0.5647905],[-0.28955936,-0.5514581,0.023019072,-0.7495296,-0.008635288,-0.43638018,-0.39646024],[-0.3833366,-0.34759468,-0.06495598,-0.098383896,-0.5783148,-0.16990937,-0.03879645],[-0.70470786,-0.24903737,0.15529387,-0.11518866,-0.5277072,0.20462422,-0.35701025],[0.36111197,0.36466828,-1.0183784,0.010062257,-0.2265021,0.78467375,0.3216761],[0.2558025,0.8101411,-0.42377698,0.6952867,0.50709,0.31241566,-0.44120306],[-0.44082734,-0.80780107,0.7503476,-0.26734918,0.42134613,0.060052637,-0.49203876],[-0.21579593,-0.85413295,0.5198353,-0.04937046,-0.25109845,-0.071964934,-0.1370948],[-0.2127926,0.023194531,-1.0355452,0.80749786,0.2418679,0.07336516,0.5543946],[-0.20147315,0.13373135,0.42837965,-0.2858223,-0.08012954,-0.6707916,-0.3436601],[-0.6738826,0.17187825,-0.07171224,-0.5686729,-0.63062835,-0.11246825,0.1411205],[-1.3131889,-0.8463761,0.691169,-0.7734476,-0.655862,-0.7365177,1.823689],[-0.31629813,-0.037334282,0.023063287,-0.9846409,0.076071545,-0.34590834,-0.38197684]],"activation":"σ","dense_2_b":[[-0.008497481],[-0.0669677],[-0.09891911],[-0.05246839],[-0.18587142],[-0.30422455],[0.1410383],[-0.2284569],[-0.499407],[-0.043939065],[-0.31666586],[0.44777015],[0.034658033]]},{"dense_3_W":[[0.23496294,-0.28386167,0.27681643,0.5520175,-0.75150144,-0.37156543,0.30156407,-0.27607068,0.30984825,0.5151721,0.37007424,-0.33879584,0.4097188],[0.31137607,0.26859313,0.34590572,-0.0062326957,-0.6559486,-0.36561298,0.4681323,0.16856219,-0.8273677,0.40059263,-0.12678978,0.7264656,0.6313906],[0.524701,-0.33622202,0.03420367,-0.34464833,-0.37003994,-0.43387958,0.36096427,-0.07529622,-0.31695953,-0.47834525,0.23216519,0.530552,0.54391605]],"activation":"identity","dense_3_b":[[-0.085940674],[-0.08410808],[0.08695583]]},{"dense_4_W":[[0.3335539,1.011704,0.07253775]],"dense_4_b":[[-0.07161993]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN.json b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN.json new file mode 100755 index 0000000000..57b9f626aa --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/HYUNDAI TUCSON HYBRID 4TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[7.4087214],[1.0962394],[0.552085],[0.045840405],[1.0842694],[1.0885813],[1.0920763],[1.0729834],[1.0586178],[1.0390083],[1.0111257],[0.04568487],[0.045708325],[0.045725018],[0.045583706],[0.045519102],[0.045363124],[0.04511732]],"model_test_loss":0.0031460165046155453,"input_size":18,"current_date_and_time":"2023-08-08_03-31-08","input_mean":[[22.685059],[-0.04596198],[-0.0031675429],[-0.010991076],[-0.04475341],[-0.04535443],[-0.04585154],[-0.045443647],[-0.042782683],[-0.043330435],[-0.042112358],[-0.011107673],[-0.011077235],[-0.011044265],[-0.010814458],[-0.010676653],[-0.010754372],[-0.010827275]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[5.1307755],[-0.22914484],[-0.08857657],[0.011367913],[-5.177985],[2.9143384],[1.9856763]],"dense_1_W":[[1.2700648,2.4509182,0.42634973,-0.043660536,0.07598462,0.6747098,-1.1844238,-0.047003433,0.04515124,0.38031095,-0.29778752,0.19533536,-0.08757439,-0.33965743,0.66066694,0.11041075,-1.1397349,0.1881033],[-0.018975187,0.86162823,3.7638307,-0.51357865,0.43678054,0.40158442,-0.9920606,-0.42070356,0.2959596,-0.43891278,-0.022803979,0.972302,-0.3332229,-0.17261001,-0.3463398,0.23325261,0.049253233,0.020867042],[0.013230203,0.20721851,-0.005705704,-0.05253921,0.31700867,1.174462,-0.7808391,0.113812,0.07265435,-0.14510319,0.16861048,0.7564678,-0.031058798,0.115615994,-0.5682336,0.123778,-0.68434507,0.43895295],[0.010290787,0.12781261,-0.0023238414,-0.41893026,-0.35603276,1.2424941,-1.300665,0.528987,0.19249827,-0.0497169,-0.10521977,0.3558453,0.17937179,0.042039894,-0.69474906,-0.3783733,0.48399767,0.008863078],[-1.2171276,1.6279436,0.41698736,0.040549632,0.39905706,0.23700579,-0.4378377,-0.0051275906,0.23958966,0.23730484,-0.23500912,-0.0059611434,0.14673305,-0.28380656,0.46382582,-0.36074856,-0.3228667,-0.12749387],[0.5837035,-1.46317,-0.0014780383,0.05828605,0.6278459,-0.7193519,0.7438587,0.97596496,0.31377402,-0.5242437,0.07906513,0.06160492,0.053548303,0.31995016,-0.07082522,-0.648382,-0.29354775,0.5114841],[0.7796686,0.82628,-0.0014781661,0.08306547,-0.45119047,0.8933981,-0.6380061,-0.66575885,-0.43284875,0.24002665,0.13119845,-0.038445093,-0.056063775,-0.4277078,-0.019120147,0.74485147,0.2288264,-0.4735436]],"activation":"σ"},{"dense_2_W":[[-0.77505285,0.44785905,-0.4859164,-0.69656503,-0.3268532,-0.043176193,0.30929434],[-0.533772,0.92544174,0.6345639,0.38062403,1.4165294,-1.2982454,-0.9251346],[-0.29203573,-0.23658712,0.76349384,0.56426525,0.22437766,-0.375684,0.379061],[0.3641449,0.05223953,-0.22189741,0.45458284,0.025595745,0.20614897,-0.5833691],[-0.912483,-0.95896566,-0.32421297,-0.28912008,0.70729816,0.22977747,-1.0203142],[-1.0123776,-0.8513916,-0.5037631,-0.2299052,0.7295842,0.08601015,-0.9566463],[0.32550806,-0.6377905,0.4949481,0.108062916,0.9683189,-0.37003064,-0.11962097],[-0.17852181,-0.39138564,-0.094003476,-0.18062831,-0.9090928,1.1256458,-0.014201421],[-1.4999908,-0.7281591,0.02269345,-0.42794332,0.49982706,-0.16169797,-0.2747838],[-0.23206441,-0.45395112,-0.50797534,0.039583728,-0.51249075,0.042664643,-0.37662345],[-0.10693958,0.07380252,-0.0014285411,0.24690871,1.4165428,-0.9269869,-0.034422167],[0.38615483,-0.5410777,-0.09538446,0.5820919,0.2631145,-0.26281682,0.02736992],[0.29233518,0.044993673,-0.016566137,0.47320673,-0.22927615,-0.55325514,-0.14620171]],"activation":"σ","dense_2_b":[[0.22806741],[-0.58099383],[-0.14560527],[-0.22234294],[0.23043375],[0.33217996],[-0.14389473],[0.2759481],[0.13984576],[-0.22704253],[-0.27780655],[-0.21868534],[-0.4021424]]},{"dense_3_W":[[-0.81395864,0.69009596,0.594186,0.3081578,-0.8761271,-0.9944457,0.26057324,-0.49558344,-0.02225669,0.42718655,0.4395653,0.36918622,0.12211585],[0.36394253,-0.2486054,0.21003513,-0.69946647,0.4221953,0.36324582,0.09421991,0.4322135,0.3120558,0.15996966,-0.38080767,-0.10931592,-0.27037248],[-0.120345704,0.63140625,0.41101453,-0.48626202,-0.93907106,-0.19290596,0.12457818,0.051282577,-0.86917734,-0.68639874,0.7245342,-0.21468553,-0.09911791]],"activation":"identity","dense_3_b":[[-0.0466283],[-0.09009529],[-0.011769824]]},{"dense_4_W":[[0.9855905,-0.11999337,0.6430469]],"dense_4_b":[[-0.037628047]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68417283AA'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68417283AA'.json new file mode 100755 index 0000000000..4dd26dd5c5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68417283AA'.json @@ -0,0 +1 @@ +{"input_std":[[4.8728914],[1.2090142],[0.50676817],[0.040933758],[1.2023742],[1.205829],[1.2078925],[1.1974459],[1.1874248],[1.1770345],[1.1642895],[0.040819507],[0.04086639],[0.04089597],[0.040786948],[0.040585384],[0.04012954],[0.039522402]],"model_test_loss":0.006614471320062876,"input_size":18,"current_date_and_time":"2023-08-08_06-01-10","input_mean":[[26.654694],[-0.054407947],[-0.01670446],[0.0044869445],[-0.050178558],[-0.052209977],[-0.05427611],[-0.056261167],[-0.0544454],[-0.055462785],[-0.055245146],[0.004572334],[0.004530314],[0.0044882884],[0.004352177],[0.0042599128],[0.0041515296],[0.0040832255]],"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.43810543],[-0.49519923],[-2.1822188],[-0.58497167],[0.47684842],[-0.09626731],[-2.2094405]],"dense_1_W":[[0.76050776,0.1499411,0.381249,0.04709322,-0.32396638,0.3491626,-0.782436,0.34238994,-0.08037048,0.6680065,0.33735675,0.22206604,-0.103562996,-0.31060776,-0.43599552,0.16334474,-0.25804174,-0.082635574],[0.0035128025,0.5811635,-0.004408256,-0.37787032,0.03389848,0.4616148,-0.32768515,0.18803275,-0.052016713,-0.3570066,0.24113122,0.42042783,0.2498919,-0.17125513,-0.33577308,-0.14208402,0.236966,0.011127863],[-0.18902422,0.9714371,0.0059900363,-0.38097516,-0.22164193,0.20545805,-0.076091416,0.31648,0.11805389,0.18802157,-0.22251801,0.5153625,-0.05821966,-0.091360226,0.0012999892,-0.16460156,-0.16339059,0.15703438],[-0.03422036,0.92381644,6.921008,0.24507758,-0.7177696,-0.6458995,-0.4362909,0.48058942,1.076679,0.42145476,-0.9482223,0.61656874,0.5209579,0.41245258,-0.7608114,-0.24345283,-0.6975248,0.038341008],[0.07477459,0.78708345,0.004199321,-0.23788536,0.15640183,0.40163487,-0.41976067,0.0005454862,-0.054376323,0.094340526,0.030391933,0.49687427,-0.21395701,-0.09833246,0.019072657,-0.102057405,-0.07488578,0.069800615],[-0.74563086,0.5257453,-0.38915852,-0.014258607,-0.014805873,-0.021846136,-0.42956972,0.027794166,0.47592774,-0.21122316,-0.9867605,0.27827996,0.026848149,0.1879612,-0.11019756,0.01456598,0.033016063,0.34982008],[-1.017594,0.6378586,0.49575526,-0.25753835,-0.713349,-0.26929113,-0.6297332,0.2448187,0.93313706,0.418847,0.17675856,0.16072711,-0.031137649,-0.1681622,-0.18200019,-0.021670578,-0.45446116,0.0076085203]],"activation":"σ"},{"dense_2_W":[[0.7745368,0.0051938873,-0.11890521,0.88995504,0.2751288,0.54162115,0.06283707],[0.54824007,0.6159212,0.62110627,-0.4791488,0.16185509,0.3104695,0.45510858],[0.52840376,0.49313548,0.55167854,-0.34572417,0.9121422,0.53487015,0.17644465],[-0.4247197,-0.5281056,0.21303625,-0.6262236,-0.13522103,-0.26233667,-0.14396249],[-0.508547,-0.39328104,-0.39791986,-0.37415636,-0.91709316,-0.24228512,0.27710044],[-0.3951146,-0.31486347,-1.1718545,0.5269846,-1.1596807,-0.5815726,-0.14178322],[0.5949875,0.6315601,0.40430224,-0.038406808,0.53312445,0.18815556,0.085526235],[-0.29179358,-0.8260168,-0.18030375,0.07779656,-0.5514634,-0.49806046,-0.1366583],[-0.73898417,-0.016584689,-0.3333454,-0.22896339,-0.05116171,-0.1202695,-0.32896835],[-0.15493649,-0.76765895,0.004673897,0.10474267,-0.16431782,-0.014079051,0.23144981],[-0.042101637,-0.17159042,-0.7375734,0.071759894,-1.0362455,-0.43458578,-0.23665032],[0.7093842,0.9741466,-0.3642162,0.9787917,0.6507126,0.5392259,-0.42433175],[0.26979947,-0.52341074,-0.9280764,0.26746207,-0.5718743,-0.6411997,-0.5801518]],"activation":"σ","dense_2_b":[[-0.5332849],[-0.6305155],[-0.58254653],[0.12631744],[0.15982336],[0.32477045],[-0.57614744],[0.058194503],[0.30769274],[-0.14737707],[0.074832365],[-0.38743407],[0.04811002]]},{"dense_3_W":[[-0.55727553,-0.051364966,-0.17064416,0.2017602,0.008057165,0.32420316,-0.6367807,0.18341993,0.56611097,0.17584346,0.7482443,0.2938565,0.06779992],[-0.24583314,-0.08192307,0.26317647,0.64154226,0.37813106,0.21800083,0.3874455,0.1719494,0.24538884,-0.30450168,0.12902369,-0.38736972,0.76431566],[-0.04105808,-0.18581067,-0.69706976,0.6209051,0.670406,0.60423225,-0.6668137,0.18300876,0.7437342,0.09521902,0.0137198325,-0.62237316,0.23223503]],"activation":"identity","dense_3_b":[[0.09012325],[0.0749679],[0.11545244]]},{"dense_4_W":[[-0.48435527,-0.45564538,-1.096167]],"dense_4_b":[[-0.0997911]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68453433AA'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68453433AA'.json new file mode 100755 index 0000000000..9ddff83051 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68453433AA'.json @@ -0,0 +1 @@ +{"input_std":[[4.43866],[0.9594654],[0.3912325],[0.038489565],[0.9550493],[0.9573054],[0.95820725],[0.9453249],[0.93590647],[0.9254975],[0.91544265],[0.03837764],[0.038416598],[0.03845292],[0.038414918],[0.038395535],[0.038228408],[0.0379494]],"model_test_loss":0.005756708327680826,"input_size":18,"current_date_and_time":"2023-08-08_06-49-45","input_mean":[[27.448889],[-0.0067297285],[-0.012206868],[-0.012023059],[0.0005211621],[-0.001140509],[-0.002781004],[-0.0060957638],[-0.008815731],[-0.008225145],[-0.010236002],[-0.011980975],[-0.011978335],[-0.011977974],[-0.012018364],[-0.012198565],[-0.012354674],[-0.01254546]],"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.26672667],[0.020335548],[-0.3113232],[-1.0529982],[0.40098032],[-0.9344168],[0.20128816]],"dense_1_W":[[0.48369458,-0.3686703,0.0016632332,-0.16971397,0.25181967,-0.46175927,0.4843163,-0.374836,-0.37514406,0.34082055,0.026280358,-0.6478774,0.15835607,0.16001779,0.37194988,0.37345862,0.036551144,-0.28789935],[0.07043975,-0.45260653,-0.00046572334,0.37180796,0.5052569,-0.923053,0.37163734,-0.23138288,0.10260282,0.188695,-0.19567782,0.021202957,-0.079410076,-0.09227521,-0.18622167,0.41924185,-0.40328145,0.18227412],[0.017748738,-0.48881784,0.004065963,-0.21506804,0.54495573,-0.85553426,0.14905618,-0.029548364,-0.5290159,-0.07689605,0.3329747,-0.54319984,0.00667545,0.7586954,0.2262732,0.29633564,0.26088232,-0.29550886],[-0.64260155,0.3662986,3.173239,0.63683313,-0.6430913,0.4424823,-0.16027375,0.084609404,0.03705194,0.081928365,-0.097669385,0.18059629,-0.5149442,0.03890781,-0.11840206,-0.10823692,-0.1191671,0.04037941],[0.10563207,0.49981126,0.0029415153,-0.10415694,-0.18625958,0.90915346,-0.7287493,-0.13796005,-0.015489749,0.38912502,-0.15327297,0.3765297,0.088555075,-0.50586104,-0.13467893,0.12457146,0.046435032,-0.057002276],[-0.5938456,-0.024423348,-3.6706417,0.34764245,-0.1914768,-0.114475735,0.13170964,-0.187258,0.2949009,0.20557038,-0.3126963,-0.4473035,-0.41970354,0.6434845,-0.025949601,-0.27021688,0.10270479,0.02460305],[-0.54888344,-0.6696987,-0.00082320906,0.32633713,0.005453797,-0.47443417,0.67143047,-0.013440813,0.004097872,-0.007966471,0.0029117528,-0.3179762,0.02713174,0.09619391,-0.028661765,-0.37402767,0.26313016,-0.016989414]],"activation":"σ"},{"dense_2_W":[[0.5209726,-0.25359967,0.6619714,0.39587265,-0.35387352,-0.04535335,0.120071486],[0.48709035,0.3180766,0.29595408,0.098535866,-0.2987927,0.057739243,0.22679059],[0.23933189,-0.08163726,-0.9657385,-0.4965831,0.68811953,0.09032152,-0.6589171],[0.57636416,0.39442053,0.18478166,-0.12974693,-0.8272915,-0.29775232,0.20715299],[-0.5449741,-0.9353625,-0.31370834,-0.13274054,0.83518785,0.008355828,0.033751678],[0.35901573,-0.66106963,-0.1888595,0.41194937,1.588338,-0.5385817,-0.740165],[-0.98802006,-0.67757845,-0.0989083,0.26249525,-0.2753127,-0.47687986,0.025367346],[0.2892236,0.35800815,-0.13770878,0.55578154,-0.785857,-0.08480091,0.64590573],[0.09093238,-0.48290733,-0.99116063,0.46500945,0.6056846,-0.012176678,-0.12520207],[-0.9990715,-0.28646934,-0.07094919,0.5173688,0.10600437,0.06450096,-0.5188569],[0.68128484,0.008618474,-0.09483195,-0.17140749,-0.6186476,0.34410867,0.29150036],[0.80427694,0.737846,-0.22390766,-0.50543666,0.05763516,0.29581627,0.14593346],[-0.56531626,-1.014788,-1.0390762,0.37543738,0.08958771,-0.27486435,0.24934056]],"activation":"σ","dense_2_b":[[-0.1413122],[-0.15693974],[0.034285396],[-0.10772752],[0.21373348],[0.5429162],[-0.24522312],[-0.023586268],[0.023880517],[0.17696953],[-0.12841567],[-0.026000533],[0.11256094]]},{"dense_3_W":[[0.02749057,-0.4342947,0.59011424,-0.0131820105,0.4288545,0.41173843,0.3578794,-0.13965432,0.16253465,0.36047092,-0.64697146,-0.6048068,0.70385855],[-0.53569496,0.30542025,0.6883935,-0.63130975,-0.15454243,0.19938475,-0.52876604,-0.5835625,0.46811375,0.43471345,0.46132883,-0.004729517,-0.20376478],[0.23920149,-0.5100696,0.109994635,-0.41538352,0.65883255,0.04808402,0.65057176,-0.26300353,0.67316395,-0.23753574,-0.6068177,-0.36342996,0.5059538]],"activation":"identity","dense_3_b":[[-0.043995153],[-0.035359237],[-0.028157346]]},{"dense_4_W":[[1.0061214,0.5680961,0.2576211]],"dense_4_b":[[-0.04061578]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68499171AB'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68499171AB'.json new file mode 100755 index 0000000000..a74e54d2e9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68499171AB'.json @@ -0,0 +1 @@ +{"input_std":[[5.5967526],[1.0102762],[0.43027443],[0.05251798],[0.999985],[1.0024607],[1.0053881],[1.0012413],[0.98920035],[0.97731537],[0.96259564],[0.052146535],[0.052252885],[0.05235032],[0.05248029],[0.052331988],[0.05202955],[0.05168756]],"model_test_loss":0.009552407078444958,"input_size":18,"current_date_and_time":"2023-08-08_07-40-22","input_mean":[[27.414038],[-0.0075059575],[-0.004310022],[-0.012558367],[-0.005643982],[-0.006085868],[-0.0062815067],[-0.006680969],[-0.006342892],[-0.005391843],[-0.004076586],[-0.012551318],[-0.012558776],[-0.0125591215],[-0.0125386985],[-0.012456482],[-0.012317335],[-0.012218792]],"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.010202121],[-0.20869955],[-1.2660872],[-0.054420657],[0.055866957],[-1.3448147],[-0.8834831]],"dense_1_W":[[0.0012557846,-0.6672937,0.0010295995,0.32252085,-0.048310652,-0.5376883,0.7697637,0.0823376,-0.30575013,-0.26277706,0.24928996,-0.8753449,-0.5025692,-0.077491626,0.5145067,0.079226255,0.5474699,0.06658418],[0.0039056255,0.9247404,-0.009912007,-0.25928807,0.99379,0.96465033,0.08479168,0.010440816,0.27576396,0.073882826,0.17389007,0.53772444,0.30138925,-0.32761773,0.63664806,0.24958122,-0.05548543,-0.2774185],[-1.1338029,0.7972837,2.7477882,-0.2877902,-1.754552,-0.2689002,-0.63449675,0.42324004,1.8994156,0.73137105,-1.1024318,1.0254707,0.08409975,-0.529214,-0.502221,-0.14801149,-0.4222293,0.6621312],[0.00042969367,-0.8577691,-0.0021418685,0.35081863,0.65922713,-0.6490291,0.2931224,-0.60029286,-0.014103398,0.47114435,-0.123872444,-0.43758586,-0.47995508,0.6163008,0.4267091,0.38276717,-0.47198132,-0.14263928],[0.00044543247,0.36023495,0.0021837356,-0.2779762,0.05987485,0.64892846,-0.517532,0.32271734,-0.18660611,0.28274518,-0.1146797,0.13610251,0.5230807,-0.19606018,-0.39453036,-0.046586644,-0.046734218,0.08382657],[-1.2255402,-0.22072525,-2.8729386,-0.25934264,1.7529143,0.06705062,0.02021511,0.045151696,-1.9299484,-0.7893005,0.9692529,-0.14630248,-0.14744897,0.118275866,0.6106455,0.28660807,-0.06394074,-0.28017327],[0.005199153,-1.1621727,0.00077480485,0.17639922,0.46977073,-0.020649184,0.18502355,0.5452717,-0.090024605,0.017219655,0.016716335,0.6221494,1.1390406,1.5075128,0.48781365,0.17463161,0.10828733,-0.43913674]],"activation":"σ"},{"dense_2_W":[[-0.58769137,0.05236564,0.35124663,0.04817339,0.2898144,0.28079572,-0.00064369116],[0.005263831,0.19137648,-0.48806444,-0.23123759,0.6268823,-0.16993119,0.34425706],[-0.5901436,-0.23695424,0.098380215,-0.17219543,0.48076913,-0.4071234,0.28624105],[0.14382643,0.13441655,0.45674977,-0.027003672,0.56117404,-0.45108694,0.33755574],[-0.2538037,0.45569667,0.27736127,-0.23255807,0.07589655,-0.2602569,-0.5057338],[-0.46332666,-0.13729805,-0.12543498,-0.39890754,0.0796631,0.31270605,-0.31902856],[0.49847755,-0.2749227,0.0026628354,0.55073225,-0.50455254,-0.07015729,0.18485697],[0.16384278,0.4331959,-0.2250921,0.16277151,0.5106723,0.31678322,-0.18506958],[0.2638649,0.3195002,-0.43078262,0.13981557,-0.004984484,-0.5785593,-0.18042926],[0.19678845,0.00667378,-0.30015993,0.36041152,-0.8781901,0.11745428,0.40608066],[0.15176365,-0.2606354,-0.27513868,0.46041733,-0.14977318,0.29587746,0.034236424],[0.5043066,0.046352975,-0.06961968,0.10950722,-1.003576,0.024827112,0.36801037],[-0.18985961,-0.4802785,0.3937008,-0.663785,0.06894842,0.10332041,0.35070738]],"activation":"σ","dense_2_b":[[-0.030413345],[-0.018623633],[0.037994068],[-0.039921794],[0.06337368],[-0.0037913572],[-0.11922998],[-0.01326628],[-0.015669143],[-0.30007255],[-0.0722405],[-0.16496572],[0.00060786883]]},{"dense_3_W":[[0.32435206,0.028846495,-0.13252908,-0.1982058,-0.36715662,-0.30138585,0.46504492,-0.31018558,-0.24452554,-0.29342332,0.51592284,-0.40441313,-0.0497606],[-0.08831045,-0.06720264,-0.1351913,-0.31066024,0.31655452,-0.31953314,-0.49679926,0.38395572,-0.3895881,-0.047352865,0.13741386,-0.31013528,0.3948293],[0.45862782,0.2571993,0.62897617,0.37644735,0.40071562,0.31087562,-0.5142998,-0.41985396,0.27594817,-0.54097104,-0.5071787,-0.6661379,-0.014177239]],"activation":"identity","dense_3_b":[[-0.006262847],[0.010518014],[0.007370069]]},{"dense_4_W":[[-0.95558,0.989042,1.2003003]],"dense_4_b":[[0.007831933]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68501183AA'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68501183AA'.json new file mode 100755 index 0000000000..d1a79626db --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019 b'68501183AA'.json @@ -0,0 +1 @@ +{"input_std":[[4.452467],[0.86690396],[0.40215713],[0.040074926],[0.8606064],[0.8630931],[0.8649407],[0.85491246],[0.844539],[0.8305169],[0.81689984],[0.03982056],[0.039912425],[0.039979994],[0.039879803],[0.03978153],[0.039445743],[0.03891937]],"model_test_loss":0.010768964886665344,"input_size":18,"current_date_and_time":"2023-08-08_08-04-56","input_mean":[[27.322044],[-0.024251966],[0.010604335],[-0.013273577],[-0.024150817],[-0.02318872],[-0.022487855],[-0.016739838],[-0.013881857],[-0.01513014],[-0.018847467],[-0.01310166],[-0.0131332185],[-0.013161585],[-0.013236801],[-0.0134922145],[-0.013910382],[-0.0144336065]],"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.7449901],[0.5293309],[-0.13684131],[-0.012751344],[-0.7529798],[-0.23311737],[0.07853056]],"dense_1_W":[[-0.13072656,0.6283987,0.015078402,-0.054005172,-0.2233314,0.45095843,-0.43263704,0.04728289,0.26050776,-0.021932844,-0.11329059,0.54408914,-0.4077183,-0.18935005,-0.10371036,0.2651148,-0.35418501,0.19614394],[-1.7171507,-0.3317916,0.004072612,-0.15467915,0.41885808,0.92006916,-0.8898168,-0.4614065,0.29903418,0.25961474,-0.05122034,-0.20094745,0.5485216,0.06610662,0.016513953,-0.37984493,-0.1926293,0.29794264],[0.007063484,0.6856636,-0.011413773,-0.72127,-0.20380542,1.0480517,-0.8238829,0.2790337,-0.3606132,0.31933337,-0.07325723,0.5433965,0.121130235,-0.2291283,-0.32528403,0.11580332,0.12170283,0.054295488],[0.12663618,0.91206276,0.004443536,-0.30484363,-0.75032,0.7143595,-0.5558535,0.1742707,0.3093525,-0.26842314,-0.069468714,0.12913592,0.27518988,0.11542955,-0.49559456,0.11280359,-0.117812514,0.20811172],[1.7389579,0.4180518,-0.01172704,0.21032059,0.47659472,-0.032733813,-0.875458,0.10615792,-0.013827842,0.23314281,-0.13350959,0.48809958,0.059256323,-0.3293328,-0.038980376,-0.70255446,-0.111022756,0.4263937],[-0.047828943,0.9741059,1.9788678,0.035556808,-0.33137748,0.06869328,-0.0728806,0.30185872,0.42945105,-0.2668291,-1.0493917,0.75109553,-0.044287033,0.2789782,-0.78056633,-0.5101993,-0.1294507,0.57637715],[0.06523681,-1.1740252,-5.89938,-0.22002901,1.5458798,0.5268267,1.4306431,-0.6207323,-1.5871657,-0.4998738,0.18801236,-0.4513105,-0.568868,-0.10367136,0.37126714,0.53899825,0.38020688,0.17896129]],"activation":"σ"},{"dense_2_W":[[-0.8985011,0.11458038,-0.37006074,-0.9091467,0.08845758,-0.4780092,-0.09387305],[-0.30258346,-0.2478026,-0.138898,-0.72172093,-0.6169151,-0.314319,0.7819804],[-0.7148826,-0.49621424,-0.2916977,-0.6574481,-0.073164396,0.27022183,-0.113334574],[-0.20976768,0.049662825,-1.0442357,-0.4784036,-0.31232062,-0.010284477,0.37272945],[0.11602564,-0.09091442,0.43364218,-0.1808539,0.42867213,0.110103086,-0.30165982],[-0.2179075,-1.046752,-0.68968844,-0.23109698,0.047580823,-0.14457914,-0.8176898],[0.65831876,0.8798172,0.87773097,0.5937055,-0.42482352,-0.15033811,0.6182065],[0.017662104,0.35544062,-0.044278342,0.3860054,0.6023141,0.46972203,-0.08535246],[-0.2605915,0.6408727,0.7716486,-0.15743664,0.6014163,-0.008522242,0.12289313],[-0.77912825,0.11850717,-1.0912898,-0.14447807,-0.4524029,0.21814777,0.4140316],[-0.98378664,-0.28703195,-0.5935176,-0.41121966,-0.10323715,0.25849262,0.59001917],[-0.61543965,0.08229077,-0.11793402,0.059594512,-1.2362256,-0.30034783,0.43083572],[-0.15708973,-0.303757,0.52465874,0.088811316,0.15832427,0.11913656,-0.2735138]],"activation":"σ","dense_2_b":[[0.3555512],[0.1413531],[0.0609361],[-0.0072417697],[-0.06120809],[0.16177845],[0.00092023175],[-0.15782398],[-0.20185831],[-0.07573758],[0.08495398],[-0.36860523],[-0.06752801]]},{"dense_3_W":[[-0.17603812,-0.4140721,-0.62913364,-0.49161103,0.06334394,-0.4608268,0.50220513,0.6482869,0.28214014,-0.30096096,-0.68956196,0.14852367,-0.13984762],[0.70722806,0.81301016,-0.0990699,0.34233677,-0.2081479,0.6863452,-0.40330297,-0.23650733,-0.4555184,0.78053814,0.06477601,0.5426404,-0.3088452],[0.06759314,-0.38149613,0.4649801,-0.024833316,-0.14772557,0.68093634,-0.31712177,-0.31436524,0.021902535,-0.06391409,0.52740633,-0.023403548,-0.30866808]],"activation":"identity","dense_3_b":[[0.040954825],[-0.05325551],[0.009019909]]},{"dense_4_W":[[0.83495075,-0.86214906,-0.13330713]],"dense_4_b":[[0.043454375]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019.json new file mode 100755 index 0000000000..2942415d1f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE 2019.json @@ -0,0 +1 @@ +{"input_std":[[5.4780097],[1.2577926],[0.43811297],[0.051083397],[1.2457128],[1.2499636],[1.2529455],[1.2401595],[1.223894],[1.1997709],[1.1767297],[0.050826065],[0.0508941],[0.050945964],[0.050895486],[0.050689384],[0.05035568],[0.049934413]],"model_test_loss":0.011547946371138096,"input_size":18,"current_date_and_time":"2023-08-08_05-36-40","input_mean":[[27.111942],[-0.03980634],[-0.0022899704],[-0.006063226],[-0.03720769],[-0.03763983],[-0.038365092],[-0.03697022],[-0.03660629],[-0.03213649],[-0.029237831],[-0.0060009984],[-0.0060217986],[-0.0060452693],[-0.0060623847],[-0.0061068335],[-0.0060221725],[-0.006052836]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.12641694],[-0.33899814],[-0.25064033],[0.20345357],[-0.22338079],[-0.8124178],[0.16103578]],"dense_1_W":[[1.3942753,-0.3584407,-0.154166,0.022718882,0.5902439,-0.22766683,0.2832875,-0.22318293,-0.25568873,0.28416058,0.12970877,-0.500204,-0.5363517,0.45337692,-0.13542888,0.054177634,0.13246426,-0.022701526],[-0.005614037,-0.74243695,-0.024937803,-0.016466122,0.16694336,-0.79974186,1.0153489,-0.21336944,-0.3901125,0.23960757,0.0332596,-0.07577539,-0.42862704,0.4491737,0.17550863,0.31181923,-0.16353676,-0.07374046],[-0.0031423056,-0.57563585,0.017968522,0.3929503,-0.15378566,-0.63862056,0.15106781,-0.12307793,0.23466262,-0.24525358,-0.0012493497,-0.6446595,0.23389706,0.2918894,0.012215268,-0.17649019,0.35015333,-0.16645752],[0.04239965,0.5392046,4.068176,0.13729823,-0.68696815,-0.07966062,-0.088794686,-0.3782991,0.8575764,0.7636464,-0.54163724,0.9711964,-0.018747166,0.14241268,-0.38917318,-0.40814298,-0.3224793,-0.29323283],[0.8142449,-0.7080669,0.16443568,0.63644344,0.28831044,-0.24459267,0.6272347,0.22174281,0.1637401,-0.70512813,0.2843761,-0.16773595,-0.27920532,0.55365586,0.256064,0.11410076,-0.021043133,-0.39824295],[-1.6068854,-0.2603165,0.18158215,0.49356657,0.12779,0.17468308,0.25797316,0.08986019,-0.3094926,-0.6496034,0.49420497,0.34940144,-0.21054225,0.10816955,0.0055429307,0.37773353,-0.37752208,-0.09018268],[-0.7694553,-0.07489691,-0.16786428,-0.00053137547,0.4097508,-0.36562666,0.12501729,-0.19840546,-0.0126358615,0.039615765,0.18806833,-0.54327863,-0.51791424,0.0740618,0.22897214,-0.18245429,0.3604914,-0.09582553]],"activation":"σ"},{"dense_2_W":[[0.24724053,-0.8135549,-1.0432718,-0.47479427,0.23202157,-0.11595288,-0.8035583],[-0.3641042,-0.91288745,-0.17233254,0.062157948,0.012575541,-0.2614273,-0.5772882],[0.29817045,0.49287653,0.19307482,-0.8773637,0.06299248,0.41714546,0.44092533],[-0.22270527,-0.7510113,-0.320351,0.13680461,-0.70703113,-0.12383241,-0.13850203],[0.5840328,-1.1061023,-0.6563664,-0.8935429,-0.123855405,-0.70505697,-0.63111097],[0.99201673,0.9417266,0.9312267,-0.81133705,0.5478353,-0.04604467,0.02872271],[-0.26014936,-0.412083,-0.7116672,0.29321614,-0.5735676,0.29037717,-0.7531203],[-0.38308242,1.0270671,0.65335995,0.19699557,0.48486,0.23515755,-0.14074802],[-0.7378848,0.32173055,0.28095686,-1.3347943,-0.10628233,0.2015702,0.62443095],[0.47323346,-0.77164555,-1.1039329,0.018455347,-0.5227511,0.69003034,-0.2582299],[-0.7601159,-0.2633271,-1.0450773,0.6082064,-0.675639,-0.23727775,-0.028281933],[-0.72581375,-0.90512085,-0.6048286,0.46046877,-0.6226022,-0.07060259,-0.21025342],[0.216426,-1.0285689,-0.4780186,-0.22132304,-0.5840384,-0.53020334,0.15992962]],"activation":"σ","dense_2_b":[[0.15380488],[0.10775849],[-0.19009462],[0.13743988],[-0.026639858],[-0.07323958],[0.1744765],[-0.21176378],[-0.6805215],[0.025015425],[-0.07340503],[0.20637435],[-0.27417326]]},{"dense_3_W":[[-0.400137,-0.17929879,0.37570322,-0.41039902,-0.78768486,0.45827937,-0.33256137,0.5615223,0.31010586,-0.35362414,-0.12100718,-0.41779718,-0.6763564],[-0.029315872,0.38450587,0.65436715,0.5139883,0.5027268,-0.20125258,-0.6333471,-0.34089682,0.29030252,-0.47958472,-0.50353307,0.046102453,-0.1736601],[0.7619456,0.69776905,-0.5650997,0.6306316,0.2189477,-0.5332646,0.4607702,-0.63797,-0.0884034,0.2954164,0.25978985,0.40438277,-0.020070346]],"activation":"identity","dense_3_b":[[-0.039152775],[0.10458916],[0.05406968]]},{"dense_4_W":[[-0.4555721,0.005902641,1.1475917]],"dense_4_b":[[0.05754332]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321644AB'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321644AB'.json new file mode 100755 index 0000000000..b31907e804 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321644AB'.json @@ -0,0 +1 @@ +{"input_std":[[7.1622963],[0.9471656],[0.44518656],[0.040083434],[0.9350785],[0.94012755],[0.94425213],[0.93108463],[0.91875947],[0.8984224],[0.87960774],[0.040001612],[0.04003194],[0.04005136],[0.040004794],[0.039946392],[0.039676767],[0.039269198]],"model_test_loss":0.010425965301692486,"input_size":18,"current_date_and_time":"2023-08-08_08-57-13","input_mean":[[23.123226],[0.014666694],[0.0013152711],[-0.015370418],[0.015775913],[0.015918152],[0.015987042],[0.017566826],[0.01997459],[0.024210589],[0.023963585],[-0.01532087],[-0.015298695],[-0.015288566],[-0.01526749],[-0.015188506],[-0.015101968],[-0.0150896525]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.4020265],[-0.38869652],[0.5984056],[-0.40903288],[-0.7209127],[-0.21461262],[-0.022622019]],"dense_1_W":[[-0.48059335,0.3100128,0.0076716603,0.16913813,-0.39116326,0.30901742,0.15213187,0.27245435,0.30929,0.0393514,-0.21169001,0.37455606,-0.0841324,-0.35264006,0.057713106,-0.3693904,-0.043460626,0.16143373],[0.1948784,0.3596294,0.0016701045,0.078808986,-0.031749953,0.5201668,-0.3876555,0.035953883,-0.052751865,0.29071456,-0.11915809,0.18078142,0.2654659,-0.3440918,-0.36261106,-0.04538469,-0.16205196,0.2049061],[0.27058375,0.39068493,0.008152962,-0.46268412,-0.37271506,1.1953743,-0.838863,0.20327426,-0.029140756,0.40090236,-0.25554156,0.1980216,-0.24836442,0.40255845,-0.11239343,0.08096013,0.28145158,-0.1982731],[-0.09668808,0.72334373,4.232626,-0.2011821,-1.4960433,-0.6716198,-0.7842683,0.3259893,1.7003231,1.2187169,-0.7756498,0.0010294656,0.015891263,0.07841224,0.28969085,-0.011956924,-0.21773098,-0.1516659],[-1.0268521,-0.04623315,0.02006263,0.53300685,0.49791265,-0.031559914,-0.06060664,0.40332755,0.24802661,0.4815803,-0.37091663,-0.009678896,-0.12575178,0.25624207,-0.65037,-0.19531684,-0.40527076,0.4080783],[0.06124146,0.33298203,-0.007085769,-0.3564556,-0.62365544,0.39928165,-0.30484197,-0.03956767,0.47177354,-0.32725462,-0.05135365,0.41259632,0.104655325,0.02163898,-0.3252136,0.19845222,-0.34582257,0.3192759],[-0.215077,0.61514986,0.014335081,-0.23261109,0.028965365,0.5105243,-0.8640813,0.41804183,0.06355636,-0.26415628,0.11219327,0.18719119,0.18345302,-0.09234277,-0.21879959,-0.077284895,-0.051544398,0.12303621]],"activation":"σ"},{"dense_2_W":[[-0.047037657,-0.82620645,-1.1012506,-1.5222656,1.2184019,-0.95923287,-0.32852557],[0.6561262,0.5126057,-0.24760722,-0.088599116,0.011952697,0.5099274,0.6522026],[-0.5948736,-0.51518464,-0.31788582,0.50248563,-0.48923284,-0.6654764,-1.0108097],[0.5930829,0.5896004,-0.34024367,0.5411401,-0.23081586,0.025500938,0.018493457],[-0.0699199,0.07561291,-0.099223636,0.2656774,0.12801234,-0.09348627,0.39833513],[0.1711992,0.61261594,0.10941279,0.15368794,-0.016752176,-0.08643972,0.51187015],[0.52641517,0.29478607,0.28599206,0.36893985,-0.012896536,-0.36574146,-0.06489677],[-0.9348127,-0.63718593,-0.9197959,-0.17101024,0.6478388,-0.25748882,-0.6722122],[-0.039446525,-0.17253296,-0.1102254,0.11489417,-0.12034824,-0.64540935,-0.61393607],[-0.018881954,-0.5315948,-0.20833272,-0.026863215,-0.46395144,0.38346213,-0.69737613],[-0.89750475,-0.9264009,-0.50270903,0.38569385,-0.1646158,-0.009521657,-0.2364964],[0.64389735,0.66855454,-0.51955,0.20904338,-0.059642173,-0.34599668,0.3828592],[-0.41403893,-0.23343006,0.27303386,0.32080367,-0.08580585,-0.0022561064,0.5581373]],"activation":"σ","dense_2_b":[[0.1540804],[-0.1450312],[0.42652166],[-0.16428761],[-0.15953712],[-0.17998531],[-0.22780614],[0.16343741],[-0.14679368],[0.12547316],[-0.083877504],[-0.18424872],[-0.14974242]]},{"dense_3_W":[[-0.79740316,0.3058743,-0.88944197,0.25014403,0.06497559,0.17014328,0.27509627,-0.6445844,0.052368652,-0.73738235,-0.5432747,0.4932797,0.065226056],[-1.4201472,0.54557586,-1.273868,0.49129322,-0.29190016,0.4022955,0.20194477,-1.0692892,-0.11673556,-0.22659089,-0.57724833,0.10635412,-0.22017439],[-0.029564494,0.52538013,0.31247225,0.23336294,0.4273138,0.10889286,-0.012862975,-0.57009745,-0.06713728,-0.5318249,0.48261672,-0.479357,0.26141784]],"activation":"identity","dense_3_b":[[0.027114814],[-0.091438465],[0.011498378]]},{"dense_4_W":[[1.1969254,0.4108815,0.4734377]],"dense_4_b":[[0.025864411]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321644AC'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321644AC'.json new file mode 100755 index 0000000000..352d7b0341 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321644AC'.json @@ -0,0 +1 @@ +{"input_std":[[7.830911],[1.115638],[0.4198547],[0.045398682],[1.1110027],[1.1132046],[1.1144112],[1.0970649],[1.0804734],[1.0600687],[1.0419487],[0.04529199],[0.045321435],[0.045338377],[0.045098767],[0.04478193],[0.044281803],[0.04369981]],"model_test_loss":0.016744062304496765,"input_size":18,"current_date_and_time":"2023-08-08_09-22-33","input_mean":[[25.32558],[0.020876955],[-0.0031986607],[-0.021073462],[0.023825074],[0.023209965],[0.022263236],[0.022898776],[0.022900082],[0.021173751],[0.019993754],[-0.021117106],[-0.021114947],[-0.02110833],[-0.020907117],[-0.020756595],[-0.020630443],[-0.020645482]],"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.08477574],[-1.1208596],[0.056731466],[-0.13102329],[1.3400327],[-0.21376154],[-0.14902717]],"dense_1_W":[[-0.019731255,0.5049976,-0.036526002,0.011823861,-0.1379057,1.0417687,-0.41630954,-0.28008935,-0.10283441,-0.05499538,0.25074315,0.047100175,-0.29597563,-0.07547027,0.25998276,0.22996715,-0.18355547,-0.08965249],[-0.5427593,-0.20459586,-1.1918509,0.49397376,0.40827742,-0.22497697,0.4398683,-0.36652535,-0.032938156,-0.5691974,0.40494335,-0.31987035,-0.33914092,0.37502846,0.1593614,-0.20469041,-0.11929302,0.08297961],[0.09138077,0.5844746,0.01609009,0.106926106,0.18020171,0.29379869,-0.33216235,0.0700583,-0.16037555,-0.24483693,0.24122177,0.21059227,0.16990502,-0.34959447,-0.22446343,-0.048417874,-0.10075254,0.14260091],[-0.04069323,0.72442687,6.4593797,-0.11315368,-0.64344734,-0.65112764,-0.43653354,0.18658906,1.393825,0.79047185,-1.1749243,0.47932476,-0.05644744,0.082114056,0.06887666,-0.52010685,-0.27435255,0.34667605],[0.5707703,-0.5124983,-1.2294043,-0.03657325,0.3137657,0.1472218,0.2302784,-0.17878631,-0.04963707,-0.4735355,0.3274108,-0.5153868,0.3066991,0.21095222,0.18537575,0.19664803,-0.3297685,0.09996214],[-0.064720176,0.19063953,0.034651436,-0.36256272,-0.21260333,0.6277773,-0.3070442,0.04620047,0.34898838,0.21007203,-0.30331737,0.5204954,0.28685373,-0.061015386,-0.26879862,-0.41823646,-0.34857938,0.550084],[-0.021767776,-0.65322065,1.1321541,0.16613401,0.57740504,-0.3740601,0.65210044,-0.37584355,0.0014690036,-0.06747381,0.32518736,-0.50768954,-0.30564624,0.591422,0.2179493,-0.316548,0.25551757,-0.22068849]],"activation":"σ"},{"dense_2_W":[[0.7023776,-0.5377536,0.447295,0.20259193,0.35656255,0.34270075,0.14764449],[-0.8119403,1.898599,-1.0897249,-0.9444553,-0.95713764,-0.7802652,1.1571481],[-0.41300622,0.5057582,-0.42050916,-0.26921916,0.4071575,-0.72827977,0.6723096],[0.659268,0.41014376,0.7103329,-0.2158735,-0.5761206,0.8324001,-0.6932241],[0.7650227,-0.098119624,-0.13894603,-0.09793376,-0.29583746,0.15023077,-0.18984264],[-0.5645378,0.37838322,-0.25003466,0.30110332,-0.17372216,-0.14515066,-0.2892711],[-0.86647314,-0.6360927,-0.512288,-0.40345564,-0.57944584,-0.10611315,0.3009823],[0.47419962,0.12130229,0.47665277,-0.22477815,-0.6503073,0.7154409,-0.5352525],[-0.33391073,0.19982284,-0.18712083,-0.61583984,0.32468942,-0.30625635,0.5543383],[-0.7848551,0.3256499,-0.20679983,-0.61387134,1.2375975,-0.54205257,0.7628237],[-0.80773836,0.5552902,-0.82975096,0.44044396,0.20548598,-0.41023898,-0.015094675],[-0.0031497905,-0.34568506,0.714917,0.34772903,-0.47651246,0.11289852,0.01636551],[0.26711908,0.18439986,0.6041066,-0.32462585,-0.6204204,0.6425605,-0.3411199]],"activation":"σ","dense_2_b":[[-0.09711639],[-0.08352111],[0.047110736],[-0.097634606],[0.0056070853],[-0.100640625],[-0.27092776],[-0.0012954418],[-0.0036094699],[0.3191952],[0.009079399],[-0.12750977],[-0.056785733]]},{"dense_3_W":[[0.06739133,0.59006786,0.6211502,-0.5984078,-0.32169876,0.3524586,0.24023733,-0.27815732,0.5021664,0.56558025,0.14635971,-0.56661624,0.3526846],[0.40286243,-0.37436473,-0.6752988,0.6229788,0.06661106,0.28863597,0.2982523,0.62539214,-0.2726357,0.0369207,-0.49113652,0.13289927,0.42825526],[-0.5299166,-0.058093112,0.2767313,0.31623214,-0.46782243,-0.02541171,0.52295595,-0.17039666,0.5000973,0.43198228,0.28259963,0.442186,-0.49364412]],"activation":"identity","dense_3_b":[[-0.045575317],[0.01754547],[-0.034936134]]},{"dense_4_W":[[-0.8772865,0.7928133,-0.44498837]],"dense_4_b":[[0.02575194]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321646AC'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321646AC'.json new file mode 100755 index 0000000000..547a4dd4b9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68321646AC'.json @@ -0,0 +1 @@ +{"input_std":[[7.737005],[0.88882256],[0.40919855],[0.039857272],[0.8705369],[0.8758246],[0.8814676],[0.8781675],[0.86962575],[0.85621184],[0.8394485],[0.03945453],[0.03953348],[0.03961019],[0.03977209],[0.039786596],[0.039618857],[0.03923206]],"model_test_loss":0.012028406374156475,"input_size":18,"current_date_and_time":"2023-08-08_09-48-14","input_mean":[[22.945333],[-0.0010462697],[0.0048553967],[-0.0153987445],[-0.0021738543],[-0.0016759728],[-0.0015154154],[-0.001325464],[-0.00038370863],[-0.0006709971],[-0.00058776775],[-0.015591592],[-0.015539771],[-0.01549547],[-0.015391692],[-0.015357372],[-0.01538723],[-0.015529609]],"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.5486719],[0.2716225],[-1.6157514],[1.1729423],[-1.1907693],[-0.39801067],[-0.121997826]],"dense_1_W":[[-0.46544072,0.7250584,4.8497953,0.14721076,-0.5592774,-0.06463778,-0.64544016,-0.40530452,1.03972,0.39865008,-0.32899725,0.3914242,0.2066326,-0.092136934,-0.25278154,-0.43968657,-0.29141605,0.33539483],[0.020392422,0.024581747,0.0031651654,0.040796407,-0.38519448,-0.8635064,0.37892318,0.102256194,-0.09094794,0.21679239,-0.2812365,-0.15923738,-0.108921684,0.6662101,-0.08453101,-0.07277869,0.05620035,-0.016352834],[-0.3585343,1.2613775,0.0038963037,-0.15068118,-0.13595745,0.22841744,-0.5804063,-0.11421715,0.540371,0.38811037,-0.412488,0.33400613,0.15549748,-0.08101292,-0.13149312,-0.3663767,-0.065549724,0.3084776],[0.23774011,0.95270973,0.0014370019,-0.033368304,-0.42406502,0.77913195,-0.5337653,0.07241031,0.044325322,0.3215471,-0.20761405,0.43413407,0.478264,-0.83566636,-0.32521436,0.21832462,-0.10103389,0.15086488],[-0.8515809,-0.001838693,-3.2252197,0.042975638,0.43727648,-0.22219318,0.35821626,0.15869705,-0.42442384,-0.39166257,0.0048108334,0.078742936,0.040681444,-0.3639781,-0.15564561,-0.12332069,0.5021788,-0.055283524],[0.005189595,-0.8111827,0.0013606233,0.50199807,0.3737952,-1.0003718,0.851964,-0.122223474,-0.3087659,-0.2764092,0.34383842,-0.43569988,-0.20424576,0.35416314,0.2666806,0.2474478,-0.25429338,-0.09367016],[0.012469906,-0.51571983,0.0040051304,0.15235668,0.5664555,-1.1568508,0.97973454,0.22787246,0.12199299,0.16332985,-0.17958714,-0.6260466,0.3168435,0.07752037,-0.16694872,-0.05125427,0.54919314,0.07834808]],"activation":"σ"},{"dense_2_W":[[0.42687958,0.35546088,-0.0835482,-0.16971982,0.44030172,-0.1060948,-0.27846086],[0.3972471,-0.26396534,0.60359323,-0.2778684,-0.5613684,-0.27746892,-0.39469868],[-0.2463116,0.42827067,-0.22504425,-0.59708124,-0.3661039,0.63707,0.15119193],[-0.33165976,0.33214015,-0.6223232,-0.38051826,0.030521309,0.08566356,0.44499964],[-0.19122124,-0.08419296,0.65129405,0.6664746,-0.13785547,-0.83451825,-0.1729238],[0.2925262,-0.8603122,0.49935588,0.41965902,0.0442165,-0.05522488,-0.82031214],[0.1410513,-0.08103695,0.25278136,0.37289864,0.25904986,-0.37102434,0.062144414],[0.29021037,0.3428696,-0.6168156,-0.13681921,0.34707314,0.5923309,-0.08615041],[0.4242105,-0.6498356,-0.19368397,0.86813235,0.12725602,-0.058380764,-0.29565084],[0.3024098,-0.06166411,0.3740148,0.6663715,-0.040609878,-0.41137022,-0.7049944],[-0.18053831,-0.37341672,-0.07160507,0.080549926,0.0789703,0.20618889,-0.40184686],[-0.7074698,-0.29236713,0.28588095,-0.20616542,0.13988344,0.09854203,-0.21226078],[0.3260612,0.23354511,0.35486403,0.6984273,-0.24646878,-0.60650444,-0.46223956]],"activation":"σ","dense_2_b":[[0.031995755],[-0.2639717],[0.0073487367],[0.057454802],[-0.040088877],[-0.07751858],[0.015209585],[-0.004185873],[-0.06493244],[-0.010564818],[-0.065297335],[-0.2724362],[0.016460005]]},{"dense_3_W":[[-0.07241538,0.51749754,-0.66165704,-0.6295341,-0.1707448,-0.43621805,0.18211804,-0.03065691,-0.13813734,0.6441604,-0.30329812,0.54201734,0.55464447],[0.19548033,-0.28439224,0.6228154,0.26898032,-0.5306852,-0.60617685,0.33318204,-0.16073118,-0.37244457,-0.5546019,0.17876261,-0.3419583,-0.09833642],[-0.5292195,-0.26595876,-0.27626458,-0.15267096,0.22562627,0.53073275,-0.20250128,-0.67357546,0.26390368,0.25917968,0.29303232,-0.573905,0.6053267]],"activation":"identity","dense_3_b":[[-0.032989413],[0.044406198],[-0.033128925]]},{"dense_4_W":[[0.5753529,-0.8160843,1.1863258]],"dense_4_b":[[-0.037123773]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68367342AA'.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68367342AA'.json new file mode 100755 index 0000000000..4676ef8177 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018 b'68367342AA'.json @@ -0,0 +1 @@ +{"input_std":[[5.3758683],[0.8794069],[0.46141535],[0.037675492],[0.88829136],[0.886115],[0.8817511],[0.84581715],[0.8278533],[0.80277216],[0.7799678],[0.03770945],[0.037679393],[0.037663188],[0.03748336],[0.037227985],[0.03666999],[0.03598855]],"model_test_loss":0.006474275607615709,"input_size":18,"current_date_and_time":"2023-08-08_10-12-47","input_mean":[[26.350012],[-0.09385938],[0.041549694],[-0.0030162074],[-0.09805675],[-0.09651579],[-0.09413497],[-0.07463795],[-0.06469781],[-0.05300219],[-0.045351826],[-0.0031147127],[-0.0030688543],[-0.0030160798],[-0.0029022517],[-0.0028611047],[-0.002841013],[-0.0029479503]],"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.09162939],[-0.0024971273],[-0.24881262],[-1.32228],[-0.4374819],[-0.9960854],[-0.32367432]],"dense_1_W":[[0.0013978665,0.5157658,0.057618756,-0.4238105,-0.5857702,0.50526756,-0.3266269,0.012936584,0.3625385,0.11991571,0.0066418285,0.40299493,-0.23047242,0.21920505,-0.4174118,-0.089936666,-0.104478516,0.045391113],[0.045715943,0.04829665,0.030840999,-0.24445257,-0.267954,0.2661487,-0.7767349,0.6312683,0.6088808,-0.05871689,-0.37978205,0.4366248,0.22490036,-0.57898104,0.0108244065,0.28357658,-0.55379957,0.32254124],[0.011607531,0.6717766,-0.07031896,-0.20974216,0.22755674,1.115498,-0.24775673,-0.08535654,-0.2567366,0.009943826,0.21396203,0.22771065,0.110520564,-0.5468987,0.0013472787,0.12118877,0.38788018,-0.5846402],[1.2240443,0.36507532,-0.0076892683,0.1908495,0.10025321,0.8377715,-0.829348,0.010610993,-0.34508568,-0.002731332,0.255436,0.22866087,-0.1078464,0.13727446,-0.16703908,-0.24019064,-0.047107916,0.0975457],[-0.049711026,0.4607915,0.015162587,-0.170386,-0.80058587,0.6337767,-0.053720508,0.19613627,0.17618516,-0.047628276,-0.115387514,-0.010986527,0.14302418,0.016793815,-0.2661772,0.047418084,0.41987264,-0.30581895],[1.1685805,0.011218695,0.007829905,-0.68930507,-0.43452054,-0.6339981,0.60769325,0.28270322,0.07532135,-0.04884226,-0.21931998,-0.008426204,0.04834048,-0.06860812,0.38515458,0.122956015,0.4017405,-0.29282153],[-0.020134322,-0.8001443,-4.5559916,0.18659148,0.70608896,-0.2582699,0.20592918,0.049877867,-0.35152316,0.053292986,0.19451627,-0.7794339,-0.2684154,0.07639334,0.6773159,0.5250616,-0.0034250547,-0.43527722]],"activation":"σ"},{"dense_2_W":[[0.21119271,-1.0255879,-0.16154091,-0.4769789,-0.61767894,0.34280777,0.05404951],[-0.02319971,-0.5616842,-0.29918796,-0.4990605,-0.56629777,0.18677638,0.112850465],[-0.3342754,-0.06275528,-0.16850384,-0.0028333499,-0.7661835,-0.41394717,-0.03308939],[-0.4943371,-0.15990037,0.2436778,0.23711683,-0.41802898,0.472897,0.36362448],[-0.5475525,-0.5687474,0.4426769,-0.5622382,-0.11734036,0.46177107,0.16163152],[-0.26939043,-0.84531426,-0.17959583,-0.20131466,-0.16513735,0.46629128,0.11826833],[-0.66524285,-0.62074107,-0.2418173,-0.6427534,-0.16397402,-0.3407568,0.38450608],[-0.72491395,-0.3333499,-0.01070937,0.06758591,-0.3469214,0.58276814,-0.60413307],[-0.7090462,-0.28402704,-0.29168892,-0.97276664,0.17415757,-0.29785421,0.35881364],[-0.053390227,-0.1611089,-0.8964952,0.26221168,-0.58006567,0.667772,-0.67146504],[0.09106713,0.40570852,0.030234145,0.12706229,0.72801465,-0.7008442,0.033457078],[0.64675695,0.34196526,-0.0063973228,-0.15831146,0.3233861,-0.818193,-0.70464826],[-0.43582126,0.39073256,0.6456649,0.5558599,0.7124559,-0.4439334,0.094163485]],"activation":"σ","dense_2_b":[[0.089445606],[-0.12313768],[-0.06173512],[-0.1068826],[-0.07586955],[0.044505995],[0.046850294],[0.107835546],[-0.07275619],[0.1918601],[-0.15383899],[-0.19150755],[-0.17611705]]},{"dense_3_W":[[-0.26096532,-0.30031928,0.18381803,-0.22780605,0.06046405,0.6438302,0.45061895,0.15275083,0.5594882,-0.23233925,-0.0062613282,-0.37721986,-0.3175804],[0.57467216,0.42339224,0.36510932,0.22639248,-0.0027739918,-0.29680425,0.39515868,0.18335965,0.6245671,0.56803894,-0.58078635,-0.732932,-0.5319626],[-0.20106415,-0.45754662,-0.37109572,0.052946024,-0.08164918,-0.5180276,0.24222454,-0.39028975,-0.37767205,-0.3367975,-0.057989135,0.5503922,0.27205816]],"activation":"identity","dense_3_b":[[-0.037949592],[-0.040613495],[0.0736481]]},{"dense_4_W":[[-0.91081345,-1.2000608,0.3280663]],"dense_4_b":[[0.040748246]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018.json b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018.json new file mode 100755 index 0000000000..cba87588f0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/JEEP GRAND CHEROKEE V6 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.254862],[1.1385337],[0.41576585],[0.043710105],[1.1287707],[1.132625],[1.1353652],[1.1196473],[1.0987684],[1.0703217],[1.0421079],[0.04358062],[0.043615773],[0.043639626],[0.04353495],[0.04332622],[0.04291046],[0.042309582]],"model_test_loss":0.014948678202927113,"input_size":18,"current_date_and_time":"2023-08-08_08-31-33","input_mean":[[24.234503],[0.023715263],[0.0013837352],[-0.016846638],[0.024842778],[0.024989845],[0.024956135],[0.025811702],[0.027098333],[0.02575938],[0.025799232],[-0.016848726],[-0.016819052],[-0.016790438],[-0.016748805],[-0.016675282],[-0.016660813],[-0.016719952]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1555274],[-1.2548984],[-0.4566681],[-1.6319039],[-0.14648859],[0.13250285],[0.9906875]],"dense_1_W":[[1.3423415,-0.24642485,0.006111532,0.012378954,0.82595116,-0.17717491,0.24821205,0.42500618,0.6834485,0.018730227,-0.1565104,0.09215833,-0.36679584,0.0047377744,0.24215446,0.43317646,-0.18074779,-0.17103945],[-0.5176677,-0.7046031,0.0015316915,0.14099175,-0.0733852,-0.6077859,0.2935369,-0.076649874,-0.110761255,0.051375758,-0.0816902,-0.05404265,-0.17823854,0.2719146,0.047899935,-0.5356291,0.31465584,0.016353693],[-0.111515455,0.7519741,4.21518,0.05408819,-1.119347,-0.20324452,-0.08807333,-1.244985,1.5230471,1.5096039,-0.717811,0.2608386,0.15778817,0.23581202,-0.56306803,0.31904206,-0.38444847,-0.19765459],[-0.5268752,0.76404643,-0.0017947298,-0.3977187,-0.22531988,0.6545117,-0.038231295,0.07132816,0.14574783,0.020449052,-0.010587621,0.0513172,0.25084835,-0.10950242,0.26603368,0.061757516,-0.2410503,0.07645558],[-0.00076164474,0.7578842,0.010459518,-0.12878841,-0.36717027,0.2933262,-0.9912176,0.64869034,0.30009547,0.2382631,-0.4692174,0.9048082,0.089927815,-0.3356697,-0.620122,-0.5221165,-0.043559503,0.49379468],[-0.013825502,0.7339534,-0.0039100796,-0.055555224,-0.0005979433,0.83517665,-0.20551458,0.24547431,0.40483287,0.01048875,-0.1659191,0.37662286,-0.18053651,-0.5086211,-0.052123472,-0.2253914,0.26272738,-0.00324899],[1.4422294,0.10161895,-0.009221952,0.0001851067,-0.5961213,0.35581017,-0.40002102,-0.57796574,-0.72453356,-0.2504394,0.40512785,0.33791512,0.23944646,-0.5331633,-0.10079834,-0.14660199,-0.12033143,0.26091284]],"activation":"σ"},{"dense_2_W":[[-0.7369561,0.02455093,-0.46102518,0.1283071,-0.7312183,0.10579285,-0.6936246],[-0.7311419,-0.749299,0.3388481,0.18734214,0.79592025,0.29745373,0.17872249],[-0.22437106,-0.45606863,0.29539058,0.5096125,0.5026677,0.12546055,0.85000384],[-1.3382739,-1.1157519,0.10686484,1.3033385,0.385738,0.17410201,-0.19884275],[-0.1854942,0.42922994,0.28422222,-1.1910807,-1.0079081,-0.23142847,8.624731e-5],[-0.39573595,-0.7930596,-0.130986,0.841052,0.45527455,0.13693747,0.12886971],[-0.73722404,1.5512154,-2.526512,0.409384,0.048512198,-0.16389945,-1.4609332],[-0.5329282,1.3224562,-0.89408386,0.12158089,-0.8545148,-0.67364424,-0.5871783],[0.8857724,0.6694776,-0.603088,-0.26001891,-0.79026496,-0.23295787,-0.30123875],[-0.10273737,-0.6942836,-0.45611718,1.081006,0.4116631,0.74641204,0.097880006],[1.5226238,1.1838912,-0.7302709,-0.74710697,-0.15506236,-0.9069341,0.47763306],[0.41078228,1.0947998,0.33479145,-1.2295458,-0.73588777,-0.35713267,-0.4043876],[0.051438108,-0.25903246,0.011029442,0.29265,0.4014094,-0.55543566,-0.45906964]],"activation":"σ","dense_2_b":[[-0.23664342],[-0.20603849],[-0.17615202],[-0.3781619],[0.0006889099],[-0.081270784],[0.25464833],[0.013770528],[0.22249864],[-0.026060008],[0.62564516],[0.11952428],[-0.12836026]]},{"dense_3_W":[[-0.074207924,-0.505883,-0.40938795,-0.59246546,0.7246955,-0.35897088,0.79559946,0.4252552,0.53429896,-0.7682427,0.41834652,0.73031914,0.09650071],[-0.49922326,0.3795509,-0.38837686,0.6977958,-0.5670746,0.28678024,-0.24660635,0.4053855,-0.20115663,0.21688443,-0.26936162,0.17709436,0.43220088],[-0.2724911,-0.0043004784,-0.3452385,0.35134262,-0.31723148,-0.32032728,-0.33450916,0.66542053,0.58240664,0.0893131,0.18599492,0.4492229,-0.58078444]],"activation":"identity","dense_3_b":[[-0.072912164],[0.02573561],[-0.051938336]]},{"dense_4_W":[[-1.0250915,0.18725124,-0.05788247]],"dense_4_b":[[0.0649493]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA CEED INTRO ED 2019.json b/selfdrive/car/torque_data/lat_models/KIA CEED INTRO ED 2019.json new file mode 100755 index 0000000000..56d771db4f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA CEED INTRO ED 2019.json @@ -0,0 +1 @@ +{"input_std":[[7.128073],[1.9819432],[0.67647],[0.03768782],[1.9757774],[1.983661],[1.9863665],[1.9118274],[1.8144435],[1.6810344],[1.5267222],[0.037616044],[0.03765301],[0.037677314],[0.03763337],[0.037550315],[0.037358243],[0.036996108]],"model_test_loss":0.008689496666193008,"input_size":18,"current_date_and_time":"2023-09-02_03-20-12","input_mean":[[14.68071],[0.021380786],[0.46259907],[-0.004524958],[0.022391],[0.022068378],[0.021636909],[0.017254867],[0.01384061],[0.011885543],[0.0075867935],[-0.0047742473],[-0.004707863],[-0.004638913],[-0.004404541],[-0.0042158943],[-0.004056291],[-0.0040879687]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.1280082],[-1.1454269],[-0.5907967],[-0.09462522],[-1.5222621],[-0.06474111],[-0.18497786]],"dense_1_W":[[-0.7009141,-0.38039988,0.004431449,-0.012658321,-0.22134589,0.40167508,0.24670589,-0.16331027,-0.6081444,0.044047765,0.15884489,-0.28576955,0.5305393,-0.21158585,0.01631704,0.0164069,-0.04090381,0.03749079],[-1.2070944,0.33291462,-0.00065425114,-0.15011062,0.107518055,-0.18207166,-0.14097372,0.41454053,0.0068484033,-0.22716488,0.103904985,-0.09329521,-0.06751863,-0.041087177,0.60482687,-0.26763386,0.11107493,-0.1320544],[0.4323738,-0.7883933,0.018195441,0.1580461,-0.6474651,-0.6159256,-0.9379849,-0.37990838,0.68379474,1.044618,1.4096797,-0.40671948,0.1614424,-0.11615482,0.12993212,0.37938693,0.11391126,-0.3182603],[-0.13848633,0.090352476,0.01572969,0.3221026,1.8986752,1.4132906,1.0738622,-1.0810357,-1.1936059,-1.3231126,-0.6220339,0.24080239,-0.34178606,-0.17251074,0.07337686,-0.21869779,-0.14425553,0.15532547],[-1.3020873,-0.3577446,0.004843032,-0.19699144,0.61322373,0.27911437,0.032230213,-0.86169994,0.13983178,0.12466293,0.17854461,0.07389106,-0.24750361,0.07031268,0.20702806,0.16463912,0.10438393,-0.1978545],[-0.16901715,0.3392736,0.004554811,-0.27741778,0.45267153,-0.3854464,0.30139357,0.38105348,-0.54760116,-0.1830378,0.25936118,0.2037518,-0.045803245,0.18543306,-0.3661198,0.30218798,-0.18051952,0.088926606],[-0.04060996,-1.2018764,-0.0063867588,-0.1523224,-0.23714058,0.14187981,0.37231123,-0.21963619,0.48160625,-0.064321116,-0.08458865,0.098526716,-0.23027526,0.29377708,0.07306222,0.05420829,-0.027615033,0.032934707]],"activation":"σ"},{"dense_2_W":[[-0.9896441,-0.91121817,-1.3145435,1.5384254,-1.8210615,0.4096885,-0.6555594],[-0.5512578,0.706973,0.1739295,-0.2688923,0.0792371,0.2261899,-0.93914133],[-0.17643008,0.37539357,-0.52018803,-0.60483295,-0.40311056,0.00969808,-0.60566235],[0.5127232,-0.6856154,-0.38688743,0.5137769,0.043315798,-0.31914636,0.55572736],[-0.4251685,0.8384956,-0.44557106,-0.33929333,-0.2585186,0.5259269,-0.57586336],[-0.10946882,-0.59604675,-0.20513241,0.4133915,0.30031222,-0.061005022,0.73186797],[0.17562889,0.145244,-0.26974306,0.28159103,0.1361736,-0.8459545,0.5167652],[0.050689343,-0.7800611,0.38343653,0.51704615,-0.014367372,-0.110503346,0.6778625],[0.20051907,-0.08033896,-0.1346465,0.4862248,0.26726595,-0.49421996,0.058299515],[-0.6299042,0.62805223,-0.79595345,-1.3490283,0.5333974,0.47591394,-0.63695586],[-0.90749574,0.033430014,-0.9152016,-0.031571057,-0.5695399,0.42602757,-0.27167413],[-0.17134069,-0.100465134,0.49037132,-0.2590825,-0.40358037,0.59190834,-0.2740423],[0.4622381,-0.2463554,-0.19674955,-0.23713845,0.62164,-0.40453714,0.3900809]],"activation":"σ","dense_2_b":[[-0.16326958],[-0.049766444],[-0.07038124],[-0.11578319],[0.066625684],[-0.1020039],[-0.12042527],[0.06384306],[-0.14624113],[-0.08538901],[0.01569337],[0.09202553],[0.00027780043]]},{"dense_3_W":[[0.7518775,0.02956615,0.6283354,-0.04630323,-0.31706655,0.42018586,-0.10056567,-0.7526844,0.40103868,1.063733,0.057580598,0.4941196,-0.70732373],[0.27228886,0.64840984,-0.030330945,-0.5357204,0.562624,-0.42896906,-0.22066677,-0.5914074,-0.64570546,1.042475,0.021803057,0.59831506,-0.15360864],[-0.9862492,-0.22666612,0.13068162,0.7076782,-0.28517807,0.4069032,0.24799564,0.2690811,-0.46506408,-0.38062972,-0.8088552,-0.4484452,0.12431305]],"activation":"identity","dense_3_b":[[-0.09667684],[-0.03777417],[-0.07913758]]},{"dense_4_W":[[0.31394643,1.0359226,-0.3090591]],"dense_4_b":[[-0.04020227]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.03 57700-CV000 1A19'.json b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.03 57700-CV000 1A19'.json new file mode 100755 index 0000000000..d772752e47 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.03 57700-CV000 1A19'.json @@ -0,0 +1 @@ +{"input_std":[[6.6028657],[0.998016],[0.53611773],[0.047976688],[0.9928589],[0.9924185],[0.991688],[0.96648145],[0.9476359],[0.9231466],[0.89530784],[0.047654726],[0.047677517],[0.047703277],[0.04752716],[0.04720977],[0.04657623],[0.045824196]],"model_test_loss":0.0073777767829597,"input_size":18,"current_date_and_time":"2023-08-08_11-03-36","input_mean":[[22.331253],[0.008268598],[-0.0049328315],[-0.016445948],[0.00974977],[0.009845438],[0.008850363],[0.0060875807],[0.005707362],[0.004997126],[0.001550338],[-0.016557517],[-0.016519358],[-0.016480202],[-0.016507305],[-0.016554574],[-0.016674902],[-0.016686343]],"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.2134058],[-0.4401382],[0.013421209],[-0.34870654],[-0.17111516],[-1.2804115],[1.5166906]],"dense_1_W":[[-0.003492201,-0.7001189,-4.9897428,-0.06689495,0.26876342,0.35482764,0.30641812,-0.21851085,-0.555579,0.24643534,0.8393177,-0.0675409,-0.0201491,-0.020234931,-0.11246266,-0.29563373,0.021233577,0.1581605],[0.01416149,-0.40680584,0.007477288,0.27667442,0.49908307,-0.8357575,0.31320336,0.078352265,-0.120635815,0.19794565,-0.11251097,-0.046342086,-0.14189145,0.031422284,0.12273671,-0.020133087,-0.41442218,0.2202907],[0.006394261,-0.26172528,0.014584929,0.05768383,0.0585847,-0.5514914,0.8517142,-0.24889153,-0.22688049,-0.16613601,0.26893988,-0.74086446,-0.04820193,0.005417286,0.62154377,0.22829771,-0.13376506,-0.03882397],[0.057499748,-0.086839266,-0.0019575898,0.4038879,-0.19230208,0.757238,-0.3092829,0.1257818,0.0051625846,0.057344712,0.007206614,-0.29419062,0.25565282,-0.1575536,-0.10660876,0.022886055,-0.52114695,0.33686352],[-0.04594949,0.0063070045,0.008311233,0.27411845,-0.10505312,0.59662914,-0.1289434,-0.062175047,-0.14703758,0.17578988,0.012138173,0.08942247,0.03361194,-0.5405618,0.01592405,0.21723932,-0.08538327,-0.03150985],[-0.9764623,0.6599259,0.10607622,-0.031322658,-0.25540224,0.593693,-0.8804088,0.257759,0.093271345,-0.016888158,-0.026402805,0.2872013,-0.113752045,-0.52583855,-0.055375155,-0.08507545,-0.29209676,0.3949437],[0.96527904,0.58919865,0.104077555,-0.018589191,-0.21170476,0.5390397,-0.80143183,0.2932772,0.10296324,-0.13822582,0.045123298,0.3152447,0.085109994,-0.72252256,0.008645425,-0.4263549,0.017035658,0.32861862]],"activation":"σ"},{"dense_2_W":[[-0.37199923,-0.12832722,0.1749511,-0.67342365,-0.13077573,0.13716596,-0.31276017],[0.08311641,-0.8226717,-0.732273,0.43065447,0.42091942,-0.23820308,0.46186474],[0.061342355,-0.13367933,0.7275678,-0.5163101,-0.97730047,-0.16040334,-0.39433354],[-0.0016042206,0.23937365,0.7839997,-0.5188498,-0.54760414,-0.75992507,0.20722012],[0.05986252,0.7940592,0.017990412,-0.5053787,0.250168,-0.6725281,-0.35185984],[-0.7115049,-0.0011200714,0.0579297,0.19635859,-0.52030295,-0.37339073,-0.6610869],[-0.18911484,0.5807425,-0.3931502,-0.35992047,0.19167884,0.107894614,-0.35034665],[-0.30906686,0.10427205,-0.1708548,0.64270127,-0.06690356,0.036203638,0.36818498],[-0.43202224,0.11372802,-0.32337222,0.45003918,0.3964415,0.48027653,0.13094209],[-0.19394279,-0.61314553,-0.982793,0.24535689,0.7340253,0.034465324,0.5163571],[-0.08394236,-0.114718884,-1.0960547,-0.13727869,0.5059502,0.4406658,0.71635777],[-0.16832595,-0.03387522,-0.105201766,0.4467705,0.4825295,-0.062805906,-0.23995127],[0.03845694,0.3393674,0.32816932,0.23535535,-0.2891049,-0.26096547,-0.60556257]],"activation":"σ","dense_2_b":[[-0.0046654143],[-0.26616848],[-0.15242769],[0.063154235],[0.06204032],[-0.3036946],[-0.05402751],[-0.11423277],[-0.14205089],[-0.076766774],[-0.13189071],[-0.118149914],[0.022861073]]},{"dense_3_W":[[-0.40607935,-0.36904916,0.37094548,0.46005347,0.35317707,-0.38036,-0.0136696,-0.031072931,-0.4748755,-0.64991397,-0.09883376,-0.51478076,0.4007376],[0.5878066,-0.048418067,0.11663792,0.37321356,0.61102366,0.2959198,0.108360104,-0.11913145,-0.3183053,-0.43023407,-0.4099306,0.11975287,0.29941538],[0.08712033,0.3742091,-0.39980045,-0.22939302,0.5524921,0.33014178,-0.061465893,-0.37761515,0.06954819,-0.040838677,-0.24257697,-0.23456632,0.16012669]],"activation":"identity","dense_3_b":[[0.046470255],[0.030692197],[0.032811448]]},{"dense_4_W":[[-0.89180064,-1.1650615,-0.18752445]],"dense_4_b":[[-0.03583435]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.04 57700-CV000 1B30'.json b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.04 57700-CV000 1B30'.json new file mode 100755 index 0000000000..b17e312325 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.04 57700-CV000 1B30'.json @@ -0,0 +1 @@ +{"input_std":[[8.636926],[0.99775106],[0.51730037],[0.04172602],[0.9902031],[0.991702],[0.99406433],[0.98449016],[0.98021054],[0.97221226],[0.9606815],[0.04157153],[0.041613027],[0.04166065],[0.041698292],[0.041637298],[0.04147782],[0.041154478]],"model_test_loss":0.008439864963293076,"input_size":18,"current_date_and_time":"2023-08-08_11-29-58","input_mean":[[23.63399],[-0.070179984],[-0.017329546],[-0.016923679],[-0.06702602],[-0.06750857],[-0.067957565],[-0.07641299],[-0.080450155],[-0.08741072],[-0.08942049],[-0.016724136],[-0.016768401],[-0.01682333],[-0.016932698],[-0.016983371],[-0.017182635],[-0.01732987]],"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.3281497],[-0.1386229],[0.068819225],[-0.019412158],[-2.451048],[2.45977],[0.072729476]],"dense_1_W":[[-1.0003167,0.059292447,-0.0025035366,-0.07270117,0.03486205,-0.71160764,0.47882712,0.1636013,0.34797484,-0.19271761,-0.08604989,-0.38023552,-0.10472232,-0.03376971,0.4000991,0.3570124,0.33536893,-0.24505846],[0.0052611283,0.84425735,5.585779,-0.021570992,-0.7179723,-0.113942355,-1.1103576,0.15865955,1.2473391,0.06493884,-0.2477255,0.14004384,0.18952657,0.010783735,-0.8468175,0.04784935,0.1129318,0.1958878],[-0.004737935,-0.6588937,0.006123585,0.17500632,0.287176,-0.9833101,0.61836934,-0.025035203,-0.16567795,-0.17453128,0.15334582,-0.41367865,-0.35360122,0.7015716,0.22423786,-0.3394676,-0.035324857,0.023584878],[0.99039614,0.02071242,-0.002529335,0.22897765,0.14088887,-0.9813151,0.72088784,0.18345436,-0.061098445,0.36531118,-0.29483438,-0.48716846,-0.70862526,0.6618173,0.22802202,0.24263938,0.26600027,-0.17759201],[-0.4457454,0.7465454,0.19822481,-0.6893106,-0.33370095,0.08260407,0.112919874,0.64286476,0.47592863,0.36428148,-0.38146886,0.2040808,0.13841604,-0.04391594,0.27622476,-0.19026394,0.16928938,-0.21241508],[0.46304423,0.7735011,0.19910802,-0.52521425,-0.6831936,0.5753077,-0.2356248,0.9027313,0.46573797,0.4141583,-0.48462674,0.341143,0.4956985,-0.6265562,-0.067270085,0.22146614,-0.08455455,-0.10452678],[-0.17997652,-0.048065923,0.0543845,0.7212201,0.35718217,0.16550168,0.57716334,-0.3129087,0.18472067,-0.73616695,-0.7397382,0.020727323,0.18844429,0.37562203,-0.19119298,-0.5826378,-0.62202686,-1.1500102]],"activation":"σ"},{"dense_2_W":[[0.30996957,0.3620612,0.19219857,0.5534441,-1.2349578,-0.41534692,0.35350785],[-0.2175235,-0.029167634,-0.07900721,0.53388363,-0.57290107,0.119387515,-0.16951317],[0.2695079,0.08399006,0.738549,0.2894061,-0.5357801,-0.71563846,0.31262836],[0.38937768,-0.9733951,-0.08894609,-0.013909257,0.24918033,-1.5008242,-0.7839707],[-0.6003588,0.14547037,-0.55455977,-0.48437524,0.39916262,0.56922144,0.22648938],[-0.46998897,0.34172785,-0.30137694,-0.34641954,0.11116893,0.46578008,0.24678849],[-0.78984165,0.46101516,-0.5639303,-1.1220579,1.1517729,-0.4244306,0.31534004],[0.4589919,-0.31986734,0.47596893,0.76536596,-0.051692575,-0.10105569,-0.4216019],[0.0010699058,1.2612101,-1.3807253,-1.1397744,1.6594896,-0.6309603,-0.8039972],[1.2380359,-1.7453684,0.4242525,0.019551069,0.49429622,-1.795323,0.08261984],[0.3972687,-0.8025517,0.60930085,0.07706176,0.076197505,-1.22639,0.18504499],[-0.9094243,-1.7106271,-0.7486791,1.3113708,-1.1184276,0.014299314,-0.34431195],[-0.008385938,0.27393603,0.6410162,0.70163506,-0.66412205,-1.0397469,0.1510303]],"activation":"σ","dense_2_b":[[-0.25120014],[-0.14833862],[-0.2754657],[-0.50557667],[0.13908446],[0.069000565],[-0.07628111],[-0.2187848],[-0.31339166],[-0.4099455],[-0.2503555],[-0.09509195],[-0.39131135]]},{"dense_3_W":[[0.5850583,0.24930371,0.47890794,0.36771303,-0.61603814,-0.48785573,-0.7595788,0.343497,-0.68425894,0.26591393,0.5141339,0.034521252,0.6326022],[-0.15742448,0.05325502,-0.34628916,0.28195977,0.7598076,-0.1799433,0.4802377,-0.044031564,0.3854451,-0.9805936,-0.07348244,0.84516305,-0.49842322],[-0.50455654,0.32130662,0.0916387,-0.09003524,-0.19368353,-0.28112268,0.22840995,0.5315722,0.31819898,-0.25823647,0.23832029,-0.007766277,-0.35535583]],"activation":"identity","dense_3_b":[[-0.10590303],[0.07168751],[-0.014283153]]},{"dense_4_W":[[-0.62888306,0.5515062,0.04721317]],"dense_4_b":[[0.08200853]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.05 57700-CV000 2425'.json b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.05 57700-CV000 2425'.json new file mode 100755 index 0000000000..5383620d87 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.05 57700-CV000 2425'.json @@ -0,0 +1 @@ +{"input_std":[[6.756191],[0.8422167],[0.3935759],[0.03985225],[0.847421],[0.84577143],[0.8438802],[0.8312308],[0.82332045],[0.8139623],[0.8044926],[0.039848723],[0.039851446],[0.039843414],[0.039771948],[0.039651867],[0.03946986],[0.039127663]],"model_test_loss":0.00447295093908906,"input_size":18,"current_date_and_time":"2023-08-08_11-54-31","input_mean":[[21.687302],[0.006407267],[0.018950889],[-0.009187785],[0.005421752],[0.006316563],[0.007847993],[0.013237735],[0.014951903],[0.018369293],[0.020485098],[-0.009148834],[-0.009137076],[-0.009120599],[-0.009176439],[-0.009111171],[-0.008984524],[-0.008785447]],"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.20498206],[0.14577107],[0.08559532],[-0.36848816],[-0.19730051],[-0.030227017],[-0.2253597]],"dense_1_W":[[2.308543,0.03020248,0.018995002,-0.024404034,0.8007829,-0.5156367,0.10489569,-0.33277398,-0.09787901,0.20294352,0.080392405,-0.31504363,-0.31018522,0.2897744,0.52273995,-0.031090064,0.19173853,-0.22689787],[0.00081780413,0.8643929,3.7596824,0.04694658,-0.97499377,-1.0411439,-1.1665148,0.29043487,1.221662,0.76075923,-0.2100547,0.18282944,0.30418468,-0.4097326,0.0014765597,-0.008321829,0.049456507,-0.028409772],[0.03110457,0.12643631,-0.033637524,0.82713836,0.14466572,-1.1336243,0.21813098,0.0455519,0.22815101,0.16354488,-0.3041193,-0.30829903,-0.19326043,-0.0013841438,-0.11585437,-0.13768283,-0.09550705,0.045170184],[-0.035894755,-0.30930525,-0.024392668,-0.2612936,0.21937297,-0.86915934,0.56173295,0.01745204,0.20141557,-0.32779387,0.061529484,-0.27867725,0.3428134,-0.095910266,0.05310102,0.5960199,0.067442365,-0.3346001],[2.3743505,-0.27000943,-0.024168417,0.15309551,-0.26398262,0.25595742,-0.022308368,-0.039125554,0.19000678,-0.11940631,-0.030037664,0.37605497,-0.33591053,0.050574202,-0.61969125,0.434404,-0.15990326,0.011175081],[-0.0070874724,0.15298845,-0.00084517436,0.2524529,-0.030157164,0.22337195,-0.17864515,0.3122118,0.14113893,-0.0834633,-0.050355904,0.6705104,0.16077328,-0.40681332,-0.06884257,-0.2205331,-0.079806775,-0.28337547],[-0.006012093,0.03713952,0.0051948116,0.14509241,0.31448504,-0.15223765,0.84517163,-0.62974775,-1.0796629,0.020326132,0.12779477,0.07742896,0.16281007,0.89423746,0.21255082,-0.6164101,-0.36238167,0.23721826]],"activation":"σ"},{"dense_2_W":[[-0.08678365,-0.28735358,-0.44816428,-0.67430466,0.49221525,0.5313274,-0.075466506],[0.44214758,0.23506661,-0.07796156,0.14776449,-0.2601569,-0.92744434,0.28036892],[-0.9958226,0.5270989,-0.9116515,-0.4043872,-0.4005815,0.42227224,-0.14791597],[-1.0120796,-0.99568295,0.4510569,0.76626235,-1.3704773,-0.5985419,0.33657166],[-0.1804857,-0.0013589673,-0.24071819,-0.6249834,0.46821326,0.7279164,-0.411145],[0.18040283,0.0071279733,0.62853,0.6653126,0.1514985,-0.036630243,0.4138839],[0.23634094,-0.45010313,0.83803207,0.14591682,-0.47077256,-0.18304086,-0.05127678],[0.4930245,0.24832006,-0.14192279,0.6992845,-0.36574662,-1.0204111,0.3912414],[-0.011458314,0.35960925,0.000741611,-0.6913261,-0.5707353,0.49046513,-0.6306739],[-0.6022925,-0.35062015,-0.29702994,-0.16955367,-0.76008457,-0.11612536,-0.7346027],[-0.52043587,-0.17739458,-0.53521717,-0.75561386,-0.29444557,0.084623955,-0.4924554],[-0.40299603,-0.39608985,0.59452647,0.39619842,-0.681544,-0.9410745,0.25125793],[-0.19426703,0.17029157,-0.7068769,-0.0753074,0.5027616,0.4312823,-0.6993899]],"activation":"σ","dense_2_b":[[0.01738418],[-0.055564888],[-0.11172867],[-0.517177],[0.10449031],[-0.16354589],[-0.02996434],[-0.39060414],[-0.075024545],[-0.30811903],[0.040471796],[-0.15641882],[0.08672954]]},{"dense_3_W":[[-0.35984564,0.46071008,-0.39839146,-0.3249784,-0.0111061195,0.3353518,-0.18329817,0.11267565,-0.12863319,-0.6369906,0.1716676,0.09197707,-0.45575505],[-0.21391304,0.47215983,0.8454924,-0.6340474,0.14945674,0.42495897,-0.47129405,-0.44493976,0.017284637,-0.17222904,0.61577874,-0.025167221,0.5150705],[-0.2882089,0.1130023,-0.5851863,0.5870541,-0.6550108,0.37209293,0.4928965,0.19859159,-0.32288226,0.39181784,-0.39298615,0.5562495,-0.19359553]],"activation":"identity","dense_3_b":[[0.061583135],[0.027594171],[0.048770953]]},{"dense_4_W":[[-0.88079363,0.123071805,-1.1413969]],"dense_4_b":[[-0.05361239]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.06 57700-CV000 2607'.json b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.06 57700-CV000 2607'.json new file mode 100755 index 0000000000..15385f410f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA EV6 2022 b'xf1x00CV1 MDPS R 1.00 1.06 57700-CV000 2607'.json @@ -0,0 +1 @@ +{"input_std":[[7.371664],[0.8660402],[0.44205353],[0.04006577],[0.8695941],[0.86906177],[0.86788267],[0.8551706],[0.8498503],[0.8475595],[0.84451574],[0.039957225],[0.0399996],[0.040031727],[0.039957136],[0.039866317],[0.039591454],[0.039338887]],"model_test_loss":0.003942334558814764,"input_size":18,"current_date_and_time":"2023-08-08_12-18-48","input_mean":[[24.679834],[-0.0610162],[-0.030723063],[-0.011534694],[-0.052937914],[-0.05447521],[-0.05660855],[-0.067540534],[-0.074050665],[-0.079697154],[-0.08435825],[-0.0114096245],[-0.011442526],[-0.011459501],[-0.011501318],[-0.011486345],[-0.011416641],[-0.011339719]],"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.0816141],[-0.18171957],[0.44719312],[-0.09176599],[0.3736729],[-0.1810884],[0.12800315]],"dense_1_W":[[-0.0047654295,0.43260875,0.026083717,-0.13993602,-0.56262296,0.23557863,0.2347399,0.2155446,-0.100177564,0.57063645,0.0511386,0.58946824,0.12326792,-0.27978677,-0.34483367,-0.39934745,0.037110258,0.14460585],[0.008695711,-0.11661433,0.063519776,0.11895952,-0.31001577,0.2511811,-0.21447526,0.5321257,0.5065731,-0.103904374,-0.21310645,-0.20680007,0.5116181,0.0080869775,-0.708677,0.11794399,-0.0753133,0.11726266],[0.01728632,-0.5147893,-3.7443237,-0.008262636,0.52203393,0.429946,0.37147424,-0.5823051,-0.6834975,0.38940904,0.3236906,-0.0104796365,-0.044810288,0.52437323,-0.52473974,-0.32590485,0.10339124,0.09157462],[-0.002603426,-0.17195284,0.10924778,-0.077441126,-0.25571346,-1.384354,1.4639283,0.087904915,2.1046076,1.8955059,-1.0389798,-0.030392189,0.28473544,0.12830776,-0.5015701,-0.2827064,0.22205079,-0.32293126],[0.471999,-0.33321312,0.014776426,0.3969741,0.06666081,-0.69879496,0.47338915,0.020157907,-0.435533,0.15537709,-0.08532591,-0.33910295,-0.31417578,0.3437639,0.1030388,-0.1870897,-0.12972718,0.11436254],[0.000637897,0.12112293,0.015960619,-0.32365808,-0.09766896,-0.090567514,0.3855356,-0.2726324,-0.49548095,-0.20762078,0.41708624,0.0070781377,-0.10015481,0.17304403,0.37958065,0.46784183,0.3907835,-0.2139301],[0.44996986,0.1220842,-0.01267547,-0.09012574,-0.17965375,0.73542017,-0.15659401,0.04869948,0.14307545,0.11160313,0.010984089,0.21072775,-0.04606061,0.05491384,-0.4440439,0.32647374,0.19412273,-0.18947527]],"activation":"σ"},{"dense_2_W":[[0.7131255,0.56979114,-0.20163262,-0.76048356,-0.8553241,-0.08986244,0.09411956],[-0.5182983,-0.42607206,-0.1451523,-0.10615285,0.032286465,0.35113242,-0.66459066],[-0.42765474,-0.7001917,0.66741145,-0.17573306,0.3278255,-0.850597,0.24560727],[-0.5889132,-0.8559872,-0.14758717,0.6270137,0.8541969,-0.11721104,-0.7477589],[-0.684439,-0.4758031,-0.026908234,0.817481,0.5295401,0.8627598,-0.7020077],[0.13727106,0.6912117,0.15914854,-0.09929708,-0.47058728,0.41985986,0.46591565],[-0.77461493,-0.48245478,-0.078716494,0.26805362,0.06693142,0.52222615,-0.3683436],[-0.7610143,-0.53920734,1.1778057,0.17035471,1.7079359,0.060867958,0.65265995],[0.5485359,0.21809472,0.089422144,0.18732184,0.13284095,-0.5967669,-0.057103433],[0.5938206,-0.058559667,0.3107985,0.29578283,-0.08403785,-0.4867308,-0.3937628],[0.043648288,0.17193118,0.14474227,-0.38408777,-0.49636945,-0.62368274,0.54162353],[0.44284257,-0.29537362,-0.64413524,-0.2906911,-0.9059539,-0.3265376,-0.47823036],[-1.0017595,-0.69023037,1.7603761,0.15749584,-1.549278,-0.037252687,-2.2732258]],"activation":"σ","dense_2_b":[[0.020199465],[-0.04349766],[-0.35098335],[-0.07552022],[-0.32699242],[0.013798403],[-0.06263833],[0.15603606],[-0.024233129],[-0.0554949],[0.02559489],[0.01943721],[0.043122534]]},{"dense_3_W":[[0.36593956,0.2853892,-0.54242194,-0.042743444,-0.49066496,-0.2595811,-0.05406562,0.006202219,0.27496532,0.35713604,-0.39133155,0.37615958,-0.43270436],[-0.023188023,-0.50453436,0.055650853,-0.14124836,-0.25217998,0.28775543,-0.5941702,-0.69895655,0.12989889,-0.23987368,0.7094374,0.4217381,-0.7861608],[-0.551317,0.49120143,-0.2342702,0.61732894,-0.022938209,-0.44924045,0.13548025,0.32949445,-0.5254622,-0.33368072,-0.47489953,-0.29117772,0.09898376]],"activation":"identity","dense_3_b":[[0.047230996],[0.068798855],[-0.031155106]]},{"dense_4_W":[[0.20761946,0.83402395,-0.8194524]],"dense_4_b":[[0.0384233]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA EV6 2022.json b/selfdrive/car/torque_data/lat_models/KIA EV6 2022.json new file mode 100755 index 0000000000..9e89e1b73c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA EV6 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.864324],[1.195729],[0.5000528],[0.045503624],[1.1876615],[1.1897441],[1.1915259],[1.1731166],[1.1543447],[1.1241426],[1.0919412],[0.045285385],[0.045317214],[0.045348417],[0.04523818],[0.044993326],[0.044672333],[0.044197746]],"model_test_loss":0.010650141164660454,"input_size":18,"current_date_and_time":"2023-08-08_10-38-45","input_mean":[[22.725025],[-0.055808485],[0.001137117],[-0.015166062],[-0.053198244],[-0.053012587],[-0.05277475],[-0.05324079],[-0.05459143],[-0.05888146],[-0.061499923],[-0.015064281],[-0.015065552],[-0.015068696],[-0.015092874],[-0.015163227],[-0.015276051],[-0.015225322]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.8403706],[1.9263608],[-0.02353573],[0.13397901],[0.053899422],[-0.64194036],[1.533293]],"dense_1_W":[[1.215834,0.5290091,0.0010350833,0.58499736,0.13186142,-0.31402144,-0.21469525,0.38816625,0.23431656,0.29439512,-0.31795207,-0.4929344,0.027251905,0.4290527,-0.27181652,-0.25157085,-0.13006414,0.19127874],[0.2723699,1.2427698,0.0014152995,-0.43297893,-0.48355135,1.1187311,-0.24734323,-0.09894979,0.11120238,0.28424853,-0.010035362,1.1629834,-0.19423008,-1.0324532,0.13956966,0.09991054,0.112085946,-0.1749808],[-0.19893286,-0.17605188,-0.0030688597,0.05146822,0.27002192,-0.7286609,0.43610734,-0.14199519,-0.0853716,-0.101905815,0.073544376,-0.46090946,-0.18160121,0.4364794,0.10960736,0.04185993,0.26554465,-0.31036776],[-0.011314031,0.4353308,3.653043,-0.05127646,-0.1675842,0.31245592,-0.18524799,-0.27518684,0.44928986,0.26701117,-0.52353877,0.41049197,-0.26632294,-0.028535297,-0.29766062,-0.048215423,-0.3651719,0.3764775],[1.5780559,-0.08976564,-9.765889e-5,-0.26617634,0.24203834,-0.8669704,1.1116273,-0.0742143,-0.2221292,-0.054146104,0.16106835,-0.92289317,0.365733,0.5554041,0.15667431,0.3766961,0.2937706,-0.38773754],[-1.6040205,-0.47703403,0.002361407,0.07246606,0.53856707,-0.90088457,0.95031244,0.007901789,0.048565075,0.0043789237,0.04390007,-0.9249038,0.1373752,0.6529523,0.4923536,-0.27184066,0.13291296,-0.11895679],[0.2517245,-1.1308137,0.0034714418,0.1780916,0.10587542,-0.8159195,0.4059062,-0.03472441,-0.04591407,-0.26056758,-0.016641837,-0.5397002,0.108333215,0.5678768,0.039879672,-0.132191,-0.21716514,0.2923616]],"activation":"σ"},{"dense_2_W":[[-0.48967394,-0.51389205,0.113997415,0.016403848,0.5711787,0.15113378,0.4878009],[-0.2635089,0.21487024,-0.7652375,-0.8594565,0.295536,-0.23716962,-0.41961473],[-0.88732815,0.43693033,-1.120157,1.132662,0.06735183,-0.01847645,-2.4321022],[0.01924355,-0.03326971,-0.11982994,-0.620888,-0.33939648,0.13469471,0.18667164],[0.3868043,-0.32892308,0.5205381,-0.04860096,0.63565564,0.5115548,0.18762778],[-0.617038,-1.3592334,-0.1403255,-1.1278222,0.28842503,0.97025603,-0.17546569],[-0.55640936,-0.90946704,-0.37307426,-0.58689624,-0.29243192,0.10891342,-0.54093736],[-1.3703765,-0.16418502,-0.823949,1.6223699,-1.0620314,0.53991866,-2.127252],[-0.009325325,1.5309258,-0.16605411,0.7356731,-0.34463426,-0.6377375,-0.29067755],[-0.39712206,0.07344511,-0.75337785,0.14594577,-0.71447504,-0.70417905,-0.90238726],[-0.5242973,-0.42696825,0.40271243,0.5059833,0.7945543,0.64832735,0.23148233],[0.3530504,-0.88467205,0.88836426,0.33030617,0.049364965,0.01906914,0.4844055],[-0.4703546,-0.24426712,0.7923177,0.36024544,0.0022455095,0.052522115,0.8682579]],"activation":"σ","dense_2_b":[[-0.17262366],[-0.14012913],[0.12171151],[-0.18287124],[-0.20833604],[-0.1185827],[-0.17963924],[0.059548587],[0.52694756],[0.41090366],[-0.200375],[-0.20045975],[-0.153012]]},{"dense_3_W":[[-0.07465968,0.15956515,0.46311855,0.014608014,-0.444435,-0.7115352,-0.30661452,0.73835003,0.8836145,0.9389069,-0.5226219,-0.41022688,-0.41954798],[-0.60114104,0.003818114,0.17285155,0.044011418,-0.4042057,-0.7233705,-0.45021132,0.0065049254,0.3945897,0.92667377,0.58642626,-0.5636264,0.041805413],[-0.40279514,0.053986654,-0.03796396,-0.01619937,-0.3810127,0.20270245,-0.16480388,-0.09316253,-0.31165186,0.23359255,0.42131686,0.16401958,0.35183364]],"activation":"identity","dense_3_b":[[0.10906697],[0.11099494],[0.09338066]]},{"dense_4_W":[[1.0284308,0.2183279,-0.010448182]],"dense_4_b":[[0.106538475]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA K5 2021 b'xf1x00DL3 MDPS C 1.00 1.01 56310-L3220 4DLAC101'.json b/selfdrive/car/torque_data/lat_models/KIA K5 2021 b'xf1x00DL3 MDPS C 1.00 1.01 56310-L3220 4DLAC101'.json new file mode 100755 index 0000000000..f2947b26a6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA K5 2021 b'xf1x00DL3 MDPS C 1.00 1.01 56310-L3220 4DLAC101'.json @@ -0,0 +1 @@ +{"input_std":[[8.854484],[1.1301922],[0.52762777],[0.03877506],[1.1222172],[1.1249937],[1.1272055],[1.1161014],[1.0981379],[1.0717709],[1.0430657],[0.038641475],[0.038688984],[0.038735364],[0.03873086],[0.03864822],[0.038562547],[0.03838567]],"model_test_loss":0.012177987955510616,"input_size":18,"current_date_and_time":"2023-08-08_13-33-06","input_mean":[[21.915575],[-0.06991629],[0.008433489],[0.007756771],[-0.071591675],[-0.07195356],[-0.07209177],[-0.06747005],[-0.06206288],[-0.055634778],[-0.04844025],[0.0078251595],[0.007823075],[0.007812319],[0.0076907766],[0.00752464],[0.0073143714],[0.007158594]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.6469083],[0.78235936],[0.08529988],[0.17299432],[-0.5838562],[0.1480536],[-2.9458652]],"dense_1_W":[[0.6887408,0.7862894,0.46915615,-0.7615858,0.18839829,0.28929535,-0.49877065,0.5568004,0.91740584,0.35415035,-0.18235375,0.013719181,0.5743932,0.19287096,-0.3434696,-0.024053648,0.064986974,-0.055624507],[0.7481552,0.44785875,-0.39244938,-0.5366956,-0.46786323,-0.1834816,-0.9788827,0.03859454,-0.30279753,-0.08496807,-0.3507284,0.19772953,0.36484724,-0.31819546,0.22478342,0.37129864,-0.10703407,0.08960236],[-0.0018834132,-0.78730613,0.00020844977,0.13114999,-0.22980459,-0.8770316,0.9075459,0.038643394,-0.19233434,0.0454518,-0.097979,-0.58106935,0.1089662,0.51069635,-0.056984548,0.02036188,0.28987607,-0.26365396],[0.8899782,-0.058186773,-0.002375113,-0.22645739,0.46521798,-0.80593467,0.43126416,-0.41846383,0.24639922,0.16433802,-0.10675408,-0.23226354,0.006861831,0.14686735,0.547673,0.004610249,-0.090327084,-0.08441118],[1.2577723,0.41239512,-0.0039192457,0.039716844,-0.14862831,0.2655834,-0.34833747,-0.019234447,-0.16249205,0.07985215,-0.018647766,0.07292356,-0.3869771,0.3235518,-0.2897348,-0.10409623,0.37779024,-0.16593073],[-0.08166623,-1.599451,-5.784969,0.3708807,0.18732668,-0.1005467,0.7795171,-0.76319546,-0.52485704,0.82277596,1.2727301,-0.9839783,-0.13048978,0.18545102,0.13665888,0.013392682,0.037149593,0.32225874],[-0.8011789,1.2479645,0.45739445,-1.1320211,0.014393064,0.8998146,-1.3779738,0.7481604,0.5442367,0.41216576,-0.12928943,0.5111585,0.6192922,-0.19101119,-0.14709279,0.099627435,-0.20379099,0.1167656]],"activation":"σ"},{"dense_2_W":[[-0.39168912,0.12821183,-0.5745629,-0.2955745,-0.32214537,-0.48573247,-0.0049454668],[0.045028664,0.24872321,0.86677504,0.6680555,-0.5444451,-0.44519505,-1.0166295],[-0.6287411,-1.0502021,-0.37122965,-0.1330107,-0.16224831,-0.016187359,-0.22554144],[0.14796557,-0.2989984,-0.99244916,0.122506104,-0.020859987,-0.22429037,-0.38963094],[-0.3986394,0.42711204,-0.84266853,-0.03070883,-0.33096692,-0.56852376,0.6374697],[0.41194984,-0.27822644,-0.97238785,-0.66755277,0.60301566,0.10326954,0.7110429],[-0.43703943,-0.066251904,0.36446202,-0.4253811,0.092789024,0.01931588,-0.1531331],[-2.0546894,-2.0581992,0.060728226,-1.9572034,-1.0979232,1.7699203,-0.25269505],[-0.6677076,-0.65859634,-0.6190105,-0.66367626,0.07593136,-0.723147,-0.792268],[0.11594589,0.028933136,-0.51343495,-0.74736786,0.6151048,-0.40659943,0.320618],[-0.8179273,-0.39457303,0.65922356,0.2230339,-0.1805746,0.24354604,-0.45367607],[0.13779806,0.3070163,-0.083634906,-0.6793103,-0.31604096,-0.2882177,-0.05156203],[-0.5967588,-0.3445199,0.49922496,0.72002596,-0.2383223,-0.07767089,-0.014663982]],"activation":"σ","dense_2_b":[[-0.020715965],[-0.1509274],[-0.22611032],[-0.23432997],[-0.08001996],[0.011014631],[-0.13749276],[-0.13827106],[-0.27956584],[0.020674339],[-0.114044055],[-0.033070605],[-0.067024864]]},{"dense_3_W":[[-0.56229556,0.37780973,-0.28346238,0.006381281,-0.427774,-0.63294375,0.19204108,0.59055233,-0.13668692,-0.71561706,0.49993688,0.2800797,0.37756824],[0.45251364,0.53362393,0.4679781,-0.29337665,-0.3235545,-0.07848005,0.058482118,0.10375023,0.27879906,-0.3273172,0.57563937,-0.4281684,0.54832417],[-0.07654791,0.19594347,0.14752778,0.0811722,0.35966474,-0.45563278,-0.40835533,0.9917353,-0.05505701,-0.18214287,0.28810912,-0.64292353,0.5321835]],"activation":"identity","dense_3_b":[[-0.027110294],[-0.04791606],[-0.03029678]]},{"dense_4_W":[[-0.9615104,-0.5668664,-0.5576843]],"dense_4_b":[[0.032777302]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA K5 2021.json b/selfdrive/car/torque_data/lat_models/KIA K5 2021.json new file mode 100755 index 0000000000..5256a3e1b8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA K5 2021.json @@ -0,0 +1 @@ +{"input_std":[[8.854179],[1.1303082],[0.53015584],[0.03889556],[1.123932],[1.126327],[1.1281773],[1.1152551],[1.0980102],[1.0719626],[1.0425837],[0.038768984],[0.038817387],[0.03885716],[0.03881795],[0.03875846],[0.0386614],[0.038491134]],"model_test_loss":0.01249716430902481,"input_size":18,"current_date_and_time":"2023-08-08_13-08-15","input_mean":[[21.914545],[-0.06985225],[0.0069250595],[0.0074601127],[-0.072784856],[-0.07272125],[-0.07216228],[-0.06802319],[-0.062263846],[-0.055437304],[-0.047055077],[0.0074525527],[0.0074529466],[0.0074460334],[0.007305565],[0.0071349433],[0.006932451],[0.0067396]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.1328846],[-1.0045387],[-0.20393331],[0.34046453],[-2.9040704],[-0.88909465],[-1.0122662]],"dense_1_W":[[-0.009380342,0.39705235,-0.00044332718,-0.09147423,0.08871867,0.9096405,-0.59983367,-0.18780915,0.30827704,0.051737268,-0.026273916,0.1966064,-0.08228399,0.07654324,-0.22208402,-0.26681504,-0.0277596,0.20970288],[-0.61757046,-0.8588174,-0.23621607,-0.027208043,0.09026295,-0.43468106,0.6500065,0.006853881,-0.12466401,-0.47896266,-0.2195636,-0.4655939,0.2346326,0.25235915,0.21434762,-0.3650002,0.06806084,0.19297919],[0.010002054,-1.349585,-5.1705165,0.12756625,0.08521816,-0.98372036,0.43257916,-0.057569943,-0.54946965,0.96981055,1.5286827,-0.9813786,0.12952766,0.14352597,0.23754609,0.4159036,-0.0977373,0.048195776],[0.9575999,-0.14470491,0.31414202,-0.09178863,0.14425702,-0.61020595,0.9214482,-0.051314764,0.49639797,0.7580396,0.10446417,0.056817234,-0.1146647,0.19221032,0.121222705,-0.14470126,0.08769907,-0.25462785],[-0.88419044,0.9049013,0.3302875,-0.8633652,-0.44462034,0.61998045,-1.0550838,0.5917251,0.48678157,0.50562924,0.12007341,0.26738396,-0.017963672,0.30564892,0.19286638,0.40492755,-0.14467871,-0.2856948],[-1.3030186,-0.29781476,0.31140298,-0.17929639,0.12359713,0.34227288,0.38400793,-0.4179453,0.20848781,0.7742308,0.35219595,0.0028036782,0.4082305,-0.34966815,0.021426486,0.34787825,-0.19836852,-0.21195874],[-0.58479625,-0.23239343,-0.24123837,0.6287148,0.47498283,-0.7846575,0.8982925,-0.88446414,-0.22690499,-0.40089333,-0.053161245,-0.52477574,0.04346586,0.0012316491,-0.17584592,0.15376398,-0.23099528,0.21563265]],"activation":"σ"},{"dense_2_W":[[0.06019809,-0.17363435,0.009131735,-0.6226487,-0.26803654,-0.040024236,-0.56756294],[-0.14312544,0.49063408,-0.44845125,0.40217203,-0.18071179,0.4310444,0.43489814],[-0.24798368,-0.56137055,0.52847433,0.7304674,0.039464716,0.2093034,0.44131762],[0.811304,-0.7688727,-0.07781592,-0.26929495,0.06020161,0.10069685,-0.2413632],[0.5917001,-0.7344408,-0.7879752,-0.70411605,0.096649006,0.5307449,-0.5803427],[-0.17709559,0.57773626,-0.12374329,-0.39053938,0.05942479,0.36537674,0.3478097],[-0.57855505,0.43059486,-0.29216823,0.44024208,0.109462574,0.05103991,0.6366086],[2.143651,-0.36122483,-0.28893292,-1.1197438,0.8901433,-0.60585576,-0.6609203],[2.3569098,-1.4072812,0.41858813,-1.4579345,1.6088637,-0.65525293,-1.0169],[-0.4568836,0.46699843,0.4344656,-0.108972535,-0.5572416,0.22916758,-0.03445166],[0.726269,-0.7789017,-0.42420408,-0.6138444,0.5996936,0.19354253,-0.40971667],[0.16139944,0.33351776,0.44673514,0.25408468,-0.6194311,-0.102249816,0.24741264],[-0.2875433,0.15023352,-1.0662942,-1.5630789,0.52131546,0.17151031,-0.08705293]],"activation":"σ","dense_2_b":[[-0.056130372],[0.007243945],[-0.049758114],[-0.10406119],[-0.215356],[-0.033409223],[-0.003601784],[0.3017622],[0.28980875],[-0.08838445],[-0.027734138],[-0.04194128],[-0.18084925]]},{"dense_3_W":[[-0.3558706,0.27432942,0.24073915,0.4001887,-0.5080968,0.1751163,0.57690793,-0.34388652,-0.48687238,-0.15128407,-0.3315714,-0.41198158,-0.18070593],[-0.45770586,0.05980327,0.4270051,0.4770666,0.50269896,-0.25726086,0.48697513,0.34577233,-0.074373096,-0.40511134,0.45576844,0.02034731,-0.09106971],[0.4071002,-0.1986135,-0.46739143,0.5110455,-0.26348698,-0.15412426,-0.5601918,0.17882004,0.52172244,-0.3752082,0.43591946,-0.6359482,0.3153758]],"activation":"identity","dense_3_b":[[0.04088854],[-0.057896398],[-0.03347668]]},{"dense_4_W":[[-0.6996337,0.5206291,1.0165205]],"dense_4_b":[[-0.037676737]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020 b'xf1x00DE MDPS C 1.00 1.05 56310Q4000x00 4DEEC105'.json b/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020 b'xf1x00DE MDPS C 1.00 1.05 56310Q4000x00 4DEEC105'.json new file mode 100755 index 0000000000..31b7512c4b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020 b'xf1x00DE MDPS C 1.00 1.05 56310Q4000x00 4DEEC105'.json @@ -0,0 +1 @@ +{"input_std":[[8.385439],[1.5132291],[0.5865538],[0.05131345],[1.5001018],[1.504909],[1.5081477],[1.4920704],[1.4653914],[1.4241073],[1.3771554],[0.051144965],[0.051199757],[0.051243976],[0.051260624],[0.051153995],[0.050753817],[0.050118044]],"model_test_loss":0.009958313778042793,"input_size":18,"current_date_and_time":"2023-08-08_14-53-23","input_mean":[[20.6522],[0.019880848],[-0.0015674612],[-0.009201578],[0.020643277],[0.020050274],[0.019826038],[0.018546505],[0.019691756],[0.02080321],[0.01971522],[-0.009233499],[-0.009218388],[-0.00920795],[-0.009186053],[-0.009161949],[-0.009261446],[-0.00937544]],"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.0022040606],[-0.45466518],[3.0495393],[0.1841935],[-0.07598528],[-0.049344935],[-2.8103917]],"dense_1_W":[[-0.043426234,-0.47749293,-0.02466255,0.26999012,0.29533443,-0.85174936,0.46759945,-0.18788536,-0.0090048555,-0.02694799,0.074940585,-0.17094204,0.2226856,-0.06197424,-0.06083671,0.5117093,0.3611478,-0.38309807],[0.0601729,-0.32238936,-0.0061821314,0.048993003,-0.119464226,-1.3493574,1.2128321,-0.24819785,0.09360174,0.017154751,-0.0945332,-0.31525713,-0.2354354,0.57461387,0.36087188,0.13730818,-0.27768645,0.046786904],[1.042279,1.1418763,0.38546368,0.38151142,-0.26414976,0.71848893,-1.2714393,0.41527608,0.8832226,-0.2916028,-0.11199533,0.6145823,-0.26009154,-1.2898295,0.5483713,0.22604805,-0.12541296,-0.10260658],[0.028834756,-0.7402766,0.042994425,0.13127239,0.82102907,-0.27223384,1.2230023,0.047152817,-0.7632143,0.07432769,0.35270634,-0.6807149,-0.39266413,-0.19658811,0.21255049,-0.20994696,0.0052200574,-0.28414842],[-0.03333096,-0.6419931,0.027721735,0.36765352,0.11669098,-1.0186125,0.45446727,0.2501265,0.030704029,-0.33163616,0.05462923,-0.61002415,0.079051115,0.4292307,-0.07177714,-0.19314681,0.12356582,-0.008606654],[0.015638076,-1.2189353,-4.177184,-0.15027538,0.59214276,-0.23344256,0.7318988,0.45370457,-0.88853407,-0.5243129,0.94887865,-0.35619122,-0.30369094,0.002676145,0.34892917,0.4637993,-0.02337859,-0.06700445],[-1.0455103,0.6458623,0.38122165,0.5683208,0.20575817,0.32748055,-0.7285804,0.36887115,0.49960437,-0.09581171,-0.014829534,0.14658736,-0.017480083,-0.75519586,-0.19585466,0.30125234,0.086563274,-0.15215997]],"activation":"σ"},{"dense_2_W":[[0.35791105,-0.14427873,-0.5609901,-0.12562588,0.58622676,-0.07395914,0.06280237],[0.29988632,0.0102157295,-0.4695938,0.1638178,-0.4523483,-0.34046823,-0.16422306],[-0.51069945,-0.63829863,0.4701338,0.068921834,0.11567098,-0.69826823,0.54002196],[-0.79609793,-0.9238868,-0.09042327,-0.31421772,-0.79002506,0.6459851,-1.3542271],[0.22355427,0.4964034,0.26008382,0.16483073,0.51995987,0.2259448,-0.6673576],[0.55433714,0.53631747,-0.24075024,0.49828082,0.21127781,-0.020997947,-0.054750577],[-0.5900872,-0.21735254,-0.0059305774,-0.6136997,-0.5256363,-0.2422479,0.9974833],[-0.16341521,-0.93104196,0.9141925,-0.5388812,-1.0119808,0.5274667,0.69387174],[-0.5459448,-0.6007257,0.129759,0.08534032,-0.6757581,0.08227118,-0.34070605],[-0.7405544,-0.68379045,0.5396067,0.05680183,-0.7028731,0.2363397,0.033819582],[0.6035027,0.40737432,-0.60496193,0.078725085,-0.14720674,0.38410118,-0.4465598],[0.63455087,-0.0047353907,-0.31880525,0.14844397,0.070003085,0.56770957,-0.025018206],[0.44256854,-0.6075469,0.81187916,-0.13535014,-0.39242724,-0.65649754,-0.16534975]],"activation":"σ","dense_2_b":[[-0.09462253],[-0.12638599],[0.058491252],[-0.14447154],[-0.13812666],[-0.1805173],[0.123461604],[0.089515485],[-0.19189687],[0.06357807],[-0.111211635],[-0.15331227],[0.31715086]]},{"dense_3_W":[[0.20542404,0.28171518,-0.15866286,0.11350425,0.4895743,0.3516957,-0.48876178,-0.7698101,-0.42093396,-0.25786847,-0.09865759,0.4434046,0.0078012934],[-0.21756878,0.12013417,0.38058028,0.51441383,-0.5845196,-0.095519304,0.5266495,-0.03282074,-0.25921062,0.4537682,-0.58191466,-0.35777017,0.61608887],[0.5017704,0.21205097,-0.3583318,-0.32390872,0.2300428,-0.023676097,0.39568096,-0.45662916,-0.34641036,0.13468637,0.2221489,-0.5345382,0.43819726]],"activation":"identity","dense_3_b":[[-0.069445506],[0.069069415],[-0.08497246]]},{"dense_4_W":[[-0.87340665,0.89448696,-0.035979144]],"dense_4_b":[[0.06572075]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020 b'xf1x00DE MDPS C 1.00 1.05 56310Q4100x00 4DEEC105'.json b/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020 b'xf1x00DE MDPS C 1.00 1.05 56310Q4100x00 4DEEC105'.json new file mode 100755 index 0000000000..825d921373 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020 b'xf1x00DE MDPS C 1.00 1.05 56310Q4100x00 4DEEC105'.json @@ -0,0 +1 @@ +{"input_std":[[8.397211],[1.1705283],[0.5805502],[0.03463821],[1.170059],[1.1703928],[1.1692861],[1.1415536],[1.1109211],[1.0685993],[1.0272604],[0.034454443],[0.034516428],[0.034570444],[0.03471502],[0.034645453],[0.034350075],[0.03395382]],"model_test_loss":0.00880099181085825,"input_size":18,"current_date_and_time":"2023-08-08_15-18-22","input_mean":[[18.077564],[-0.0021696435],[-0.009493895],[-0.00854008],[0.0008538185],[0.0005043035],[-0.0007781019],[-0.0034785918],[-0.0073397853],[-0.013359681],[-0.020281872],[-0.008589204],[-0.008590469],[-0.008597665],[-0.008717762],[-0.008793198],[-0.008924687],[-0.0091278395]],"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.14579934],[-0.14519477],[-3.863266],[3.8427587],[0.04578299],[0.26524872],[0.043028243]],"dense_1_W":[[-0.0036881375,-0.7376499,0.04573843,0.29232818,0.15998328,-1.1800053,0.7352752,0.4613827,-0.3654027,-0.05274166,0.008809302,-0.61651105,-0.19563314,0.30206302,0.48970523,0.70374197,-0.13464865,-0.34472147],[0.0448257,0.74444777,3.2913778,-0.3223886,-0.6795882,-0.048044868,-1.4441773,-0.44268838,1.1609985,1.1341279,-0.6441928,0.8005167,-0.016733218,-0.2582139,0.16986738,-0.40873948,-0.0124958,0.2744736],[-1.4770237,1.2707175,0.45410442,0.4337624,-0.21555193,0.30369025,-0.48256037,0.6929506,0.1363345,0.21567695,0.062066473,0.29594067,-0.016186427,-0.10937184,-0.69198745,0.013495664,-0.49616784,0.4540782],[1.4769372,1.6837573,0.44657153,0.3844198,0.055160612,0.5586182,-1.2392403,0.45482898,0.2477672,-0.08027943,0.28896198,0.13463345,-0.13796607,0.4082866,-1.1263032,0.29988325,-0.50733644,0.42053643],[-0.18178491,-0.9996767,0.046967883,-0.20623134,-0.1303795,-1.4485639,1.2343187,-0.1420455,0.15228446,0.3398408,-0.43701938,-0.09172013,0.17285657,-0.29155666,0.23236762,-0.0009749657,0.069472015,0.017742855],[1.9397535,-0.1242461,-0.09390661,0.22746196,0.65666324,-0.017458677,1.3508519,0.7675915,-0.09389921,0.36527961,-0.014139866,-0.10747237,0.61991864,0.2315784,-0.45759675,-0.15266441,-0.6211227,0.3915748],[-0.018558232,0.32297674,0.12868294,-0.767525,0.06287016,-0.07393509,-0.90018725,0.67280954,0.26545826,-0.15014802,-0.2787869,0.10362763,0.010670472,-0.5394097,0.79302734,0.7212029,-0.006213169,-0.43942323]],"activation":"σ"},{"dense_2_W":[[-0.9424259,0.5383402,0.90808415,-0.23045784,-0.757859,-0.16473587,0.23173162],[-0.15289421,0.38641956,-0.17613852,0.17639944,0.20112754,-0.08048493,0.6478715],[-0.3414318,0.026470331,0.50385565,-0.69266576,0.21662991,-0.18625331,-0.6141596],[-0.64374024,0.15664189,0.7064422,0.40667814,-1.746435,-1.2451849,0.22172058],[0.19559817,0.20769882,0.0077794413,-0.63236123,0.5809092,0.55333596,-0.22226444],[-0.06922767,-0.40762365,0.13696685,-0.70997673,0.5166103,0.19697687,-0.35657585],[0.62951344,-0.5005433,-0.6374106,-0.37252572,0.27152944,0.120718695,0.22742479],[-0.6968117,-0.07335819,0.61275095,0.35386997,-0.4375137,0.3337331,0.14570476],[-0.4349244,-0.14802983,0.19549963,0.40037483,-0.7249839,0.20111199,0.65657336],[0.62348944,-0.4536519,-0.17162655,-0.8989549,0.3261032,-0.54278314,-0.5373072],[-0.560637,-0.25253636,-0.021217873,0.12173196,-0.5342579,0.10775077,0.17879365],[-0.13053471,-0.44042438,-0.16759785,0.37813523,-0.47821322,0.32358372,-0.85976815],[0.71070844,-0.48786935,-0.80289835,0.453067,0.36268723,0.4134905,-0.7282149]],"activation":"σ","dense_2_b":[[-0.35494593],[-0.07334628],[-0.24927561],[-0.2947056],[-0.008191638],[0.014220917],[0.045416523],[-0.05121714],[-0.049447175],[-0.03848008],[-0.05180068],[-0.05216243],[0.12374667]]},{"dense_3_W":[[0.047790118,0.27769247,0.5402979,0.43852547,-0.1079715,0.5151454,-0.28413603,0.36645323,0.54276174,0.2656338,-0.01668038,0.35102823,-0.39181972],[-0.29544407,-0.32329983,-0.4288008,-0.20716709,-0.46158203,0.183949,0.49660423,-0.11650807,-0.65825564,0.3827715,-0.5592475,-0.30018342,-0.18621238],[-0.21135932,-0.095152944,0.2985688,-0.35737342,0.48794743,0.52512395,0.48139963,-0.43845367,-0.67661566,0.5103034,0.08317309,0.37826058,0.3123688]],"activation":"identity","dense_3_b":[[-0.020624995],[0.021909116],[-0.0076635494]]},{"dense_4_W":[[0.28056747,-0.27962217,-1.0827732]],"dense_4_b":[[0.0051891515]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020.json b/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020.json new file mode 100755 index 0000000000..9157493562 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA NIRO EV 2020.json @@ -0,0 +1 @@ +{"input_std":[[8.756613],[1.5469935],[0.5868461],[0.048539903],[1.5311569],[1.5367651],[1.5406994],[1.5197327],[1.4855404],[1.433774],[1.3787619],[0.048304897],[0.048386667],[0.048456155],[0.048535753],[0.048419178],[0.048049178],[0.047447804]],"model_test_loss":0.01072931382805109,"input_size":18,"current_date_and_time":"2023-08-08_14-01-31","input_mean":[[19.740038],[0.010453053],[-0.00983059],[-0.008197198],[0.011297055],[0.010507559],[0.009715306],[0.00675721],[0.005983052],[0.005432915],[0.0040853415],[-0.008249147],[-0.008247744],[-0.008244466],[-0.008281346],[-0.008300149],[-0.008453809],[-0.00865498]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.7556062],[-2.0698571],[-4.225762],[-0.15726951],[-0.30065513],[-1.0648031],[1.8342476]],"dense_1_W":[[-1.7290211,-1.5173091,-0.23002613,-0.37698144,0.016258085,-0.8270681,1.3781465,-0.7642315,-0.6422404,0.2824734,-0.110180624,-0.3257264,0.5549623,-0.032036513,0.43426138,-0.0714845,0.2864038,-0.21663748],[1.9184333,0.671971,0.04794123,-0.25451732,-0.10465885,0.5573552,-0.37439582,0.24595505,-0.06845002,-0.041696787,-0.05226348,0.22399874,0.03275794,-0.070917316,-0.22555944,0.1414704,-0.0041139866,-0.00024242824],[-1.8817899,1.5202969,0.2509318,0.51012284,0.62497395,0.032136127,-0.979242,0.6263891,0.70745003,-0.31345257,0.18674128,0.12859097,0.07685459,-0.46171176,-0.2280601,-0.33504027,-0.4022656,0.4169894],[0.04874895,1.0698912,-0.029439794,0.07341402,0.3300274,0.7930807,-1.2549204,0.0783156,0.44667515,-0.044906255,-0.043870416,0.46820083,0.10374188,-0.53068924,-0.48136172,-0.074282564,0.12173919,0.0077482965],[-0.04342037,1.5612729,3.16704,-0.28737867,-0.79875565,-0.07702065,-1.1260544,-0.43122292,0.9323476,1.0069447,-0.97308475,1.2108004,-0.18733604,-0.6011836,0.18945155,-0.30365372,-0.16747494,0.19430496],[-0.31009704,1.1274835,0.09042992,-0.03338503,0.018458644,0.5902667,-0.24463883,-0.06990637,-0.159641,0.30669054,0.05195872,0.40048352,-0.029881949,-0.021455474,-0.6194718,-0.10056458,0.027914932,0.17777753],[-1.7739217,0.33766812,0.043878227,-0.7079486,0.070119634,1.0434483,-0.68583184,-0.19537714,0.06398747,0.16186452,-0.09159792,0.9890885,-0.08469821,-0.27189568,0.09402364,-0.43951192,-0.060028143,0.3246841]],"activation":"σ"},{"dense_2_W":[[1.3462045,0.59007597,-1.0555073,-0.72884923,0.30742645,-0.7919825,-0.79060274],[-0.94850713,0.08338297,-0.14278129,0.8774979,0.573835,0.043590613,0.47284335],[0.6373134,-0.7411809,-0.33538958,0.14371277,-0.37772784,0.16757706,-0.5341049],[-0.16109301,0.74011505,-0.12572628,-0.123916484,0.87228954,-0.0765876,0.09092019],[0.75033695,0.0969066,-0.60294336,-0.23090811,-0.39634117,0.18033504,-0.8499323],[-0.9217793,0.014436126,-0.6526303,-1.0338821,0.44630024,-0.17751805,-0.63913804],[-0.090204455,0.4812081,0.26368377,0.015731392,0.9630277,-0.17355147,-0.11038842],[0.0126234675,-0.63450015,-0.5070031,0.14078641,-0.73571676,0.008089552,0.03479742],[0.80792475,-0.66766584,0.23032701,-0.33161584,-1.2037598,0.2125056,-0.15969864],[-0.2423005,-0.74057645,-0.5435483,0.044129636,-0.69188356,0.08389628,0.16697945],[-1.5361837,0.30874377,1.1789893,0.6659148,-0.69351107,0.4415424,0.6480144],[-0.07204271,-1.221483,-0.92439497,0.7499748,-0.035351105,0.5684253,-0.67117625],[-1.017458,0.48187095,0.2618596,0.97278225,-0.55749303,0.423465,0.33408752]],"activation":"σ","dense_2_b":[[0.1838596],[-0.28277993],[0.11383015],[-0.23923337],[0.14975849],[0.014726325],[-0.16617869],[-0.029415732],[-0.118649684],[0.27848494],[-0.45202333],[-0.1126877],[-0.33022732]]},{"dense_3_W":[[-0.29903474,0.096304685,-0.46381262,-0.0082688145,-0.34521008,-0.72311455,0.260216,-0.3090884,-0.632807,-0.635328,0.6114854,-0.52489674,0.5849963],[-0.1397393,0.7307058,-0.24962811,0.54387295,-0.42753673,-0.5538375,0.39787623,0.073375665,0.29743633,-0.4567702,0.4831776,0.17509066,0.23498277],[0.17090236,-0.29356945,-0.030084739,0.1615791,0.08188441,-0.01872784,0.24252425,-0.23374312,-0.050307382,0.2272926,-0.600093,0.61274093,0.07305241]],"activation":"identity","dense_3_b":[[-0.015210137],[-0.05734997],[-0.043353032]]},{"dense_4_W":[[0.7804087,0.5536279,-0.040379304]],"dense_4_b":[[-0.031827074]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2019.json b/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2019.json new file mode 100755 index 0000000000..38e5fcf3bd --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2019.json @@ -0,0 +1 @@ +{"input_std":[[6.316835],[1.3095051],[1.0337898],[0.036481883],[1.4656641],[1.4189432],[1.3673624],[1.186987],[1.1331091],[1.0980399],[1.0884928],[0.03714614],[0.03689554],[0.03668804],[0.03629855],[0.036578406],[0.036640365],[0.036640473]],"model_test_loss":0.010191518813371658,"input_size":18,"current_date_and_time":"2023-09-02_05-46-53","input_mean":[[15.765028],[0.016704094],[0.8253681],[-0.018551834],[0.0161312],[0.018667452],[0.018879415],[0.011466884],[0.024275666],[0.019936267],[0.025728673],[-0.018568791],[-0.018556552],[-0.018561324],[-0.01832107],[-0.01819993],[-0.018170435],[-0.017576592]],"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.32030553],[-0.44030616],[-0.148952],[-0.02167373],[-0.19297738],[-0.5169743],[-0.1770638]],"dense_1_W":[[-0.007737738,-0.99422234,-0.034771074,0.12463431,-0.44775382,-0.82441384,0.8120246,0.39558184,-0.08208208,-0.23790717,0.13854492,-0.35261232,0.2457002,0.28888467,0.06925625,0.06105845,-0.14821048,0.107533954],[1.3339429,-0.13082603,-0.019043105,-0.023946976,-0.8637906,-0.60042715,0.86515206,-0.14659251,0.42036998,0.22912209,-0.41044295,-0.3358372,-0.27527428,0.66332656,0.40219405,-0.32527128,-0.013785728,0.036081836],[0.038707253,-0.5486137,-0.020425517,-0.1048983,0.76533777,-0.12729818,-0.39131224,0.1432435,-0.2479908,0.09698657,0.059673753,0.37905008,0.22068103,-0.5984838,-0.021788964,-0.20137078,0.19989464,0.011386371],[-0.0005377785,-1.626023,0.014272335,0.35176843,2.007245,2.9080265,2.833754,-3.6938229,-1.5402598,-0.2808591,0.53739095,-0.05241689,-0.37616622,-0.22666292,0.34943548,-0.22642688,0.671277,-0.53848034],[-0.060603973,-1.7406929,0.044681583,0.30462697,0.81336474,0.3294149,0.94690406,-0.7220944,0.038787086,-0.110932425,0.29978025,0.3340294,0.097162254,-0.65183747,-0.14593266,0.18223895,-0.41430587,0.27231583],[0.6866103,-0.20675205,-0.008971864,-0.08271559,0.51373845,-0.59504503,-0.028739108,-0.01990747,-0.023005802,-0.23189393,0.16085576,-0.050083302,0.2854166,-0.17596366,-0.16408251,0.23354928,0.27060062,-0.20318592],[1.1686878,0.124509655,0.020137059,-0.0041627684,0.70473355,0.21293509,-0.2924701,-0.11603153,-0.26426125,0.0057812296,0.20993786,0.2904828,0.12312651,-0.4460388,-0.06700564,-0.17043492,0.16500446,-0.016062014]],"activation":"σ"},{"dense_2_W":[[-0.4900633,-0.54592615,-0.527382,0.12028304,-0.54894257,0.27355847,0.31364885],[-0.32254124,0.08293343,0.35285667,0.554822,0.10410332,0.5597751,-0.2383367],[-0.24240835,-0.2615861,-0.4423311,-0.5210761,-0.64304876,0.05002648,-0.30079335],[0.3660343,0.25507227,0.2009346,0.20860061,0.50754935,-0.17693439,-0.75036037],[0.017052304,0.2941397,0.48104966,-0.15767454,0.09076614,0.4001092,-0.383107],[0.5902993,0.07642233,0.042343333,0.3176652,0.051399287,0.06696487,-0.8254014],[0.5891686,-0.1186497,0.3283763,-0.2719375,0.4032117,0.4197208,-0.3724789],[-0.68634295,-0.52495784,0.17351876,-0.35263985,0.06430874,0.027971778,0.6754105],[0.20389055,-1.0025079,-0.5531749,-0.13745287,-1.0573874,-0.75676477,-0.5205683],[0.20552444,0.012774647,-0.54596126,-0.8671801,0.06615193,-0.75334895,0.015773846],[-0.33991626,-0.42872685,0.20969433,-0.02223333,-0.8523562,-0.26464137,0.6920498],[0.20529774,0.58902216,0.031505145,-0.1747456,0.41559178,0.5189576,-0.7233773],[-0.009052229,-0.5893052,0.17319442,-0.64532185,-0.79119825,-0.11295332,1.4095422]],"activation":"σ","dense_2_b":[[0.12995131],[-0.034807533],[-0.13722797],[-0.16153306],[-0.04602981],[-0.083130985],[-0.08390648],[0.071044385],[0.08433932],[0.04963225],[0.21911931],[-0.17281601],[0.68126506]]},{"dense_3_W":[[0.5093516,-0.5465462,0.15503123,-0.35234037,0.49185485,0.30204552,-0.5992861,0.0021642335,-0.05107888,0.26263082,-0.18888572,0.12664975,0.13551807],[-0.5860282,-0.09242898,0.1262402,0.32523513,0.379274,0.6664111,-0.3863529,-0.53702825,-0.08325101,-0.26101434,-0.31930283,0.4272874,-0.026482869],[-0.3292326,0.3132907,-0.25563857,0.3411082,0.20792365,0.07308729,0.4294356,-0.6729368,-0.48279455,-0.4198804,-0.2859276,0.60702205,-0.5340056]],"activation":"identity","dense_3_b":[[-0.0040983167],[0.007357109],[0.007665874]]},{"dense_4_W":[[0.24334429,-0.71678704,-1.1551462]],"dense_4_b":[[-0.0067243]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2021.json b/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2021.json new file mode 100755 index 0000000000..ce68ad35e1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2021.json @@ -0,0 +1 @@ +{"input_std":[[8.597539],[1.589519],[0.8570558],[0.04863597],[1.6346245],[1.6241254],[1.6103257],[1.498106],[1.4157897],[1.3226876],[1.2293135],[0.048567627],[0.048607342],[0.04863673],[0.048688337],[0.0488638],[0.049082097],[0.049054746]],"model_test_loss":0.011536603793501854,"input_size":18,"current_date_and_time":"2023-09-02_06-52-47","input_mean":[[17.37028],[0.06026842],[0.506836],[0.00031705393],[0.06628794],[0.06474968],[0.0628686],[0.05320054],[0.04718131],[0.04658512],[0.051670313],[0.00045426827],[0.00041247738],[0.0003619111],[3.6777285e-5],[-0.00032301998],[-0.0005914742],[-0.00092334347]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.24682778],[-0.006299858],[0.0748293],[-0.5736973],[-0.256641],[-0.58670074],[-0.0044331043]],"dense_1_W":[[1.0383956,0.9127742,-1.7661572e-5,-0.119445495,0.33176455,0.03573714,-0.8297675,0.023340857,0.47458792,-0.40310016,0.05576016,0.45783523,0.14146096,-0.4043011,-0.40886042,-0.11232859,-0.08254774,0.23749773],[-0.010238037,0.30345035,0.11772968,0.042131707,0.3533758,0.16141611,-0.32165682,0.22163633,-0.44536677,0.12489661,0.11577652,-0.4645873,-0.17438301,0.28373742,0.5604936,0.18323892,-0.099337935,-0.2914466],[0.019332694,-0.9718337,0.1213718,-0.09318972,0.4252448,0.122399725,-0.18120395,0.11679359,0.08406331,-0.28711584,-0.055180494,0.3861118,-0.31324327,-0.20063293,-0.299365,0.17973764,0.18562388,0.011371533],[-0.011864931,-1.153027,-1.1015527,-0.09962848,0.015605152,0.3611728,0.13415214,-0.23815176,0.63666695,-0.11102109,-0.2912127,-0.53489137,0.41428724,0.08640866,0.18429007,0.3095773,0.068252586,0.18889964],[1.0551776,-0.36253345,-0.001785746,0.022279864,-0.25197285,0.18718459,0.10246457,-0.26064438,-0.30058408,0.2714863,0.002131989,-0.643216,0.37801188,0.10752107,0.50343543,0.07076738,0.08356163,-0.22799636],[-0.008646536,0.78340423,-1.1187115,-0.57623047,-0.35842294,-0.7300839,-1.0882407,1.38732,-0.015289124,0.102130026,-0.69328797,-0.026475098,0.11983873,0.14571564,0.058386486,0.48151672,0.45962128,-0.04454241],[0.0033251448,-0.377444,0.08040648,0.07891003,1.9698765,2.2291944,1.0210977,-1.7496017,-1.0250691,-1.4425315,-0.31541628,-0.023265995,-0.059444286,0.0109439315,0.27883554,0.19031176,-0.16854845,-0.020514654]],"activation":"σ"},{"dense_2_W":[[-0.024243228,-0.05255965,-0.7595463,-0.5176617,-0.0028400528,0.5175856,0.5519225],[-0.018462835,0.24686936,-0.51719195,-0.42296433,-0.2835181,-0.007122102,-0.1566434],[-0.8202002,-0.6762049,-0.21161737,0.6190111,0.8244078,-0.58753747,0.34383672],[0.7579045,0.30807158,-0.5150138,-0.39650717,-0.65510255,0.6530385,0.029368501],[0.19137707,0.47466335,-0.6506839,0.14364511,-0.9489478,0.21647897,-0.47036436],[-0.7764023,-0.48433128,-0.14451031,0.436359,0.86376953,0.06893752,-0.3654762],[-1.6003051,-1.3418225,0.8276233,0.10213565,-0.890929,-0.37858123,0.72083765],[0.28483543,0.26148677,-0.7699699,-0.5142481,0.13567218,0.5638172,0.44093132],[-0.79822946,0.13202399,-0.72469413,-0.28871945,-1.2221936,0.35103744,-0.97257113],[-0.43247938,-0.09032452,-0.71232784,-0.012452181,-0.36949623,0.040841173,0.21214984],[0.10710754,0.36228323,-0.47006533,-0.37733367,-1.2878665,0.47658426,-0.45390767],[0.24698155,0.2711014,0.075908944,-0.42958894,-0.23198445,-0.2069848,-0.3533442],[0.6337969,0.35413942,-0.7264216,-0.47986504,-0.21905626,0.6985329,0.2576043]],"activation":"σ","dense_2_b":[[-0.12635571],[-0.14632428],[0.038847096],[-0.07666457],[-0.1459678],[0.14029463],[-0.169782],[-0.23029572],[-0.10404744],[-0.142377],[-0.08718043],[-0.06485942],[-0.14547676]]},{"dense_3_W":[[-0.15735611,0.17262073,-0.8805252,0.51910555,0.2501827,-0.2835049,-0.11046073,-0.15481108,0.6115458,0.2226787,-0.03818101,0.042739924,0.53314],[-0.5296838,0.2718061,0.544608,-0.2170193,-0.30278963,0.3500211,0.77196777,-0.58984184,-0.3200903,0.25097454,-0.4622797,-0.41570127,0.052868128],[-0.103185855,0.026371501,0.77141577,-0.66143405,0.17981799,0.3885078,0.7312039,0.48614725,0.2583454,0.014793015,-0.5174716,-0.26699665,-0.017405592]],"activation":"identity","dense_3_b":[[-0.09996536],[0.10106084],[0.0681742]]},{"dense_4_W":[[1.3119884,-0.8955275,-0.28397295]],"dense_4_b":[[-0.096690625]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2ND GEN.json b/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2ND GEN.json new file mode 100755 index 0000000000..c01244be27 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA NIRO HYBRID 2ND GEN.json @@ -0,0 +1 @@ +{"input_std":[[9.548942],[1.1556146],[0.5686091],[0.04125714],[1.1739614],[1.1698171],[1.1636059],[1.1330084],[1.1195551],[1.0984498],[1.052436],[0.041275118],[0.041270234],[0.041261356],[0.041291114],[0.041279677],[0.041211747],[0.04119539]],"model_test_loss":0.021393293514847755,"input_size":18,"current_date_and_time":"2023-09-02_07-27-02","input_mean":[[19.183447],[-0.061503228],[0.31750193],[-0.009586182],[-0.07582464],[-0.07115664],[-0.066330835],[-0.050047584],[-0.04131674],[-0.034985147],[-0.023530383],[-0.00953319],[-0.0095485365],[-0.00957056],[-0.009637397],[-0.009661676],[-0.009702404],[-0.009817304]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.11971723],[-2.06865],[-0.9273426],[0.2350055],[-0.039275352],[-0.6935257],[2.1106303]],"dense_1_W":[[-0.023465969,1.0403687,-0.0064599384,0.088695236,-2.572482,-1.9478124,-1.171903,3.2940629,2.2462277,0.7168309,-1.1020683,0.20056015,0.27593887,-0.26641613,-0.14360692,-0.7400961,0.00034045885,0.4156913],[-0.93346083,-1.4239619,-0.006503616,-0.22113818,-0.2023531,0.5193814,1.0461832,-0.3782537,0.29444095,-0.15030141,-0.5023597,0.16464102,0.7242057,-0.27950695,-0.3696878,-0.30749488,-0.47764552,0.76080126],[0.7568762,-0.981843,0.016051132,0.19062184,-0.90861064,-0.7826231,-0.2727878,-0.23859741,0.5777361,0.8479089,1.3446846,-0.44860214,0.23954475,-0.01972305,0.022940347,0.21341267,-0.041809097,-0.08129695],[-0.09766348,-0.6063554,0.0062130643,-0.03661122,-1.70968,-1.8175805,-2.0428705,1.8160136,1.7936941,1.4172349,0.45122316,0.4655184,-0.21158199,0.27250418,-0.25827283,-0.39359215,-0.2081721,0.463419],[0.008593872,-0.58326274,0.007718574,0.30187526,-0.93341124,-0.077753805,0.021100318,0.051944837,0.48332676,0.46354106,-0.6830866,-0.4099744,-0.23816824,0.20651065,0.4611754,0.027589535,0.42457825,-0.38316107],[0.47711346,1.1507468,-0.012431412,0.080158405,1.1602942,0.88804525,0.068638526,-0.049588755,-0.9131459,-0.90958065,-1.0101755,0.19905831,-0.12530342,-0.19841798,-0.21211796,0.1636958,0.23769926,-0.20800415],[0.9961328,-1.143366,-0.007048344,-0.38564992,-0.14137669,0.97105956,0.28828618,-0.38741222,0.11933695,0.042133637,-0.5720996,0.8045794,-0.14538643,-0.06855614,-0.025645649,-0.65618575,-0.23211053,0.7001129]],"activation":"σ"},{"dense_2_W":[[-0.21309559,-0.2557323,-0.37976655,0.4364266,-0.058041357,-0.10421585,-0.108383834],[-0.7912269,0.5097253,0.20453687,-0.53811145,0.99982816,-0.61565036,0.4312177],[-0.21263213,0.48694882,0.18081997,-0.8577293,0.73699605,0.030947331,0.18210255],[-0.58780706,0.68300354,0.09398714,-0.5269206,0.73805976,-0.80878305,0.48335037],[-0.64852566,-0.39090246,0.58450216,-0.46928614,-0.50298375,-0.07994645,0.053112958],[0.1690405,0.5960562,0.35752842,-0.87621987,0.32022333,-0.55614614,0.7826676],[0.71447146,-1.0444664,-0.4509489,0.911557,-0.7412179,0.54971963,-0.7381729],[-0.62482494,0.039678216,0.56063163,-0.3121521,0.15650049,-0.09051405,0.09062955],[0.0126393195,-0.06729555,0.37268206,-0.9645424,0.835795,-0.8074821,0.59585595],[-0.048607614,-0.53631896,-0.19049186,0.7581371,-0.61508256,0.115542084,-0.5422532],[-0.08638583,0.37238285,0.4352934,-0.9093409,0.3891405,-0.3895383,0.22890623],[0.6520517,-0.27878258,0.0021966984,-0.23270349,-0.9914703,0.48241284,-0.16072732],[-0.29694274,-0.17202643,-0.45471925,-0.048209682,0.030067155,-0.20176966,-0.34706435]],"activation":"σ","dense_2_b":[[0.040295675],[-0.14250198],[-0.28739277],[-0.18335883],[-0.12844329],[-0.23011152],[0.2616699],[-0.1555895],[-0.27772397],[-0.0050205495],[-0.17576194],[0.06814319],[-0.17360274]]},{"dense_3_W":[[0.096177064,-0.17084734,-0.35130522,-0.51758367,0.15829244,-0.57115465,0.74830765,-0.119700745,-0.28673345,-0.016819801,-0.21919145,0.6545112,-0.14663658],[0.49742782,0.74625164,-0.2345321,-0.48559803,0.1774502,0.3355754,-0.7141915,-0.16827786,0.5395194,-0.7827569,-0.40440023,-0.6389728,-0.24930853],[-0.66462135,0.3956486,-0.40556067,-0.3123342,0.21790422,0.5589044,0.38879392,0.26195037,-0.36978155,-0.21154313,0.3580779,-0.06915874,-0.32115373]],"activation":"identity","dense_3_b":[[0.09647246],[-0.073265985],[-0.08355868]]},{"dense_4_W":[[1.1780397,-0.3744698,-0.1993529]],"dense_4_b":[[0.091160975]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA OPTIMA 4TH GEN FACELIFT.json b/selfdrive/car/torque_data/lat_models/KIA OPTIMA 4TH GEN FACELIFT.json new file mode 100755 index 0000000000..a50b54aea6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA OPTIMA 4TH GEN FACELIFT.json @@ -0,0 +1 @@ +{"input_std":[[8.072969],[1.0171603],[0.41435865],[0.03957447],[1.0044475],[1.008584],[1.0119401],[1.0073107],[0.9948095],[0.9757278],[0.95639443],[0.039412063],[0.03944304],[0.039477617],[0.03948857],[0.03934316],[0.03904568],[0.03871683]],"model_test_loss":0.00399219011887908,"input_size":18,"current_date_and_time":"2023-08-08_15-43-41","input_mean":[[24.085066],[-0.030361513],[0.01571064],[0.0007362445],[-0.03486706],[-0.033671357],[-0.032109205],[-0.027380893],[-0.02287623],[-0.021235751],[-0.01674745],[0.0006118474],[0.0006441443],[0.000670867],[0.00071249413],[0.0006996055],[0.0005505158],[0.00045551005]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.29917517],[2.1752317],[0.32517457],[-0.06200813],[0.008188257],[1.2145834],[-2.4042017]],"dense_1_W":[[-0.0036490457,-0.65203166,-3.709906,-0.16634864,1.2238234,0.1361604,0.240366,-0.0953384,-1.1778214,-0.7621931,0.9326918,-1.3709967,-0.15128233,0.2677267,0.46784538,0.9360938,0.58685464,-0.60191363],[1.0609311,0.5510001,-1.2266392,0.5077542,-0.5202491,-0.04500755,0.09848119,-0.3979558,-0.19270724,-0.5866649,0.46674842,-0.5607535,0.21799003,0.25507393,-0.1446887,-0.3699364,-0.26326817,0.43315932],[0.039737374,-0.43775582,-0.013289291,-0.05986628,0.21640529,-0.7568447,0.5309831,0.2114327,0.11197306,-0.40092763,0.14490385,-0.1755713,-0.15272588,0.46322745,-0.10017493,-0.06966308,0.32474706,-0.19110319],[-0.0077359895,-0.43185976,0.020387627,0.3265592,0.16767904,-0.9530752,0.1524309,0.20602113,0.034762584,0.45183882,-0.40128747,-0.9679819,0.09233684,0.69716626,0.0959531,0.20735793,-0.10194677,-0.14030074],[0.005168357,-0.21313071,0.020432683,0.21680814,0.47587946,-0.1672917,-0.123546526,-0.28546202,-0.004813474,-0.2626441,0.2583704,-0.83474374,-0.3071537,0.70293534,0.035514556,0.2111255,-0.03847577,0.2905034],[0.039810598,0.41122228,0.0123043675,0.21473739,-0.08381318,0.053156123,-0.22393204,-0.07659595,0.2492394,0.084608234,-0.1508309,0.27756575,0.06493508,-0.6980999,-0.10522976,0.33079267,-0.021852562,-0.09157679],[-1.0318242,0.3270962,-1.2316992,0.074966654,-0.18502301,-0.540268,0.3426544,-0.32328182,-0.15373465,-0.5543649,0.4255326,-0.54132384,0.019477716,0.59251136,-0.14564046,0.17376666,-0.41093257,0.3159194]],"activation":"σ"},{"dense_2_W":[[-0.4484687,0.33253923,-0.28966695,-0.4360591,-0.24771251,1.0544692,-0.3488148],[-0.29909408,-0.58351547,-0.3938109,-0.11950906,-0.29386395,0.45222434,-0.031188905],[-0.97125804,-0.47300208,-0.5902675,0.09844755,-0.16599008,-0.14055668,0.33186546],[0.81737274,0.7941663,0.38187075,0.057302717,-0.24998307,-0.4406886,-0.15471426],[-0.22012134,-0.4555382,-1.0191162,-0.7460106,0.0017525634,0.37398848,0.55178577],[0.6003996,-0.07378992,-0.4675678,-1.0309192,-0.51752794,0.7784243,-0.13258673],[0.22552104,-0.42843226,0.6672592,0.5094388,-0.0069568693,-0.588892,0.22089334],[-0.040460102,-0.20706566,-0.4015441,-0.049420606,-0.47037354,0.62529606,-0.3584826],[-0.15761071,-0.6566617,0.13922708,0.6777953,0.6173028,-0.5567125,0.55445105],[0.421519,0.0040071155,0.4716913,-0.402618,0.37349927,-0.79084456,0.7557055],[0.18809932,0.48851332,0.20340067,0.53080684,0.07949558,-0.32842007,-0.15802757],[0.29606518,-0.42963374,0.061094977,-0.6543071,0.17196162,0.013567186,-0.72136617],[0.27312186,0.011079551,-0.9998639,-0.99941546,-0.35501084,-0.013600225,0.5464308]],"activation":"σ","dense_2_b":[[0.13286552],[0.08703823],[-0.031739317],[-0.052825537],[0.031032594],[0.013313505],[-0.030027948],[0.14758036],[-0.17001471],[-0.3692113],[-0.033355612],[-0.051361687],[-0.11612391]]},{"dense_3_W":[[0.08565427,0.037936352,0.31202748,0.0936324,-0.3239269,0.21602823,-0.13447368,-0.25992858,0.57573473,0.22251351,0.5654894,-0.5865121,0.19499925],[-0.31933227,-0.5680997,-0.40374595,0.2146467,-0.23784715,-0.53895664,0.7452532,-0.5017336,0.32644337,0.19702537,0.4468465,-0.10311684,-0.27303612],[0.51040643,-0.20984694,-0.19069631,-0.41539454,0.4963756,0.2997042,0.44628504,0.45647708,0.13536462,-0.67746484,-0.40592772,-0.2442403,-0.14450295]],"activation":"identity","dense_3_b":[[-0.056019142],[0.060379148],[-0.009930268]]},{"dense_4_W":[[-0.04487324,-1.0755644,0.06984845]],"dense_4_b":[[-0.055896856]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SELTOS 2021 b'xf1x00SP2 MDPS C 1.00 1.04 56300Q5200 '.json b/selfdrive/car/torque_data/lat_models/KIA SELTOS 2021 b'xf1x00SP2 MDPS C 1.00 1.04 56300Q5200 '.json new file mode 100755 index 0000000000..7a38f06d90 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SELTOS 2021 b'xf1x00SP2 MDPS C 1.00 1.04 56300Q5200 '.json @@ -0,0 +1 @@ +{"input_std":[[6.5049157],[1.2475282],[0.53859144],[0.048527],[1.2465597],[1.247301],[1.2471614],[1.2284999],[1.2013417],[1.1699766],[1.1366358],[0.04837552],[0.04840895],[0.048440192],[0.0483831],[0.048159745],[0.047685053],[0.047009286]],"model_test_loss":0.0057355728931725025,"input_size":18,"current_date_and_time":"2023-08-08_16-34-39","input_mean":[[22.57612],[0.051288225],[-0.016445091],[-0.009996599],[0.056181632],[0.055123083],[0.054446794],[0.046347804],[0.039804146],[0.03435145],[0.029239772],[-0.010040664],[-0.009997898],[-0.009956628],[-0.009932108],[-0.009981547],[-0.010063302],[-0.0102707045]],"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.0029297848],[1.8960894],[-0.7305671],[-0.6444308],[0.08400337],[-0.044434916],[-2.0828273]],"dense_1_W":[[-0.013393204,-1.2459188,-5.89612,0.48348445,0.71024114,0.761591,0.62751406,-0.5100544,-1.1702846,-0.5760703,0.9551647,-0.38647708,0.02746218,0.30091053,-0.4128432,0.65483654,-0.22607383,-0.17742366],[0.88628805,-0.8472278,-0.16042891,0.12056248,0.8128825,-0.3501976,-0.112867065,-0.14086482,0.22233468,0.18555838,-0.11159323,-0.56888944,-0.008235887,0.28833345,0.2616878,-0.03133189,-0.023425877,-0.10819697],[0.55932784,-0.50783956,0.016862486,0.021586508,-0.052158702,-0.2640505,0.36748064,-0.10141347,0.11880612,-0.01899467,-0.04536525,-0.03297897,-0.48517683,0.29445776,0.30262306,0.15327907,0.21546906,-0.23894748],[0.57508934,0.10616214,-0.02150118,0.15490909,-0.22505246,0.33355552,0.17564031,-0.078227825,0.33327138,-0.21566688,0.049708415,0.46191642,0.18780328,-0.89038825,-0.059960928,-0.12284671,-0.03831184,0.07615082],[0.006142582,-0.41586003,0.28906634,-0.39670786,-0.15463385,0.5797065,-0.07188739,0.0075380234,0.42778745,0.18411557,-0.22944504,-0.24470419,0.035731394,-0.13284975,-0.056895383,0.2658999,0.09685396,-0.004589674],[0.00045123146,-0.30300197,0.024411071,-0.32110432,0.007924963,-0.95534456,0.3975994,0.30021676,0.20445354,-0.2845605,-0.024686944,-0.15269357,0.010459293,0.06211917,-0.14940602,0.09413633,0.12700596,0.20926088],[-0.8864738,-0.91397375,-0.17195456,-0.099857494,0.64577985,-0.28100497,0.023341348,-0.11484865,0.3246616,-0.009700837,-0.04576229,-0.20125109,0.07292384,0.11487104,-0.019341417,0.3695137,-0.4571989,0.14654264]],"activation":"σ"},{"dense_2_W":[[0.16676657,0.044276875,-0.42283165,0.71878445,0.40764466,-1.0148888,-0.33971024],[0.69733125,-0.44017676,0.32185918,-1.5657734,-1.1737024,0.6366674,0.6671088],[-0.022854185,-0.71255684,0.2196965,-0.3687845,0.040978383,0.062146485,-0.22804913],[-0.28942934,-0.23564734,-0.42564517,-0.039671488,0.365399,0.20703237,-0.597828],[0.0347196,-0.07633118,0.58261573,-0.15203993,-0.91041917,0.7339944,0.48777974],[-0.32692164,-0.6838728,-0.25992492,0.6972931,0.53116393,-0.5526861,-0.030371524],[-0.2410249,-0.45013347,0.20631957,-0.15482004,-0.44667387,-0.76256126,-0.19490236],[0.3978247,-0.10121961,-0.5776459,0.7954871,0.22263652,-1.0624558,-0.46528906],[0.2895336,0.9195127,1.048547,-0.32349822,-0.8403002,0.08939599,0.22750446],[-0.41278213,-0.17696421,1.0299006,-0.5467821,-0.47607332,0.9951936,0.687682],[-0.009069157,-0.6828468,-0.22575156,0.52762353,0.37542656,-0.6015784,-0.07695309],[1.2645018,1.0877368,1.2602909,0.12577315,-0.3815145,0.06697079,-0.4439591],[0.28825867,-0.43880102,0.0008854993,-0.21242517,0.37472376,-0.21022174,-0.71526283]],"activation":"σ","dense_2_b":[[-0.0043339795],[-0.7411984],[-0.3235559],[-0.0028266062],[-0.30525705],[0.09933733],[-0.28506866],[-0.12051076],[-0.2798327],[-0.34464663],[0.04831867],[-0.31347185],[-0.0137135675]]},{"dense_3_W":[[0.48027906,-0.34028012,-0.5646587,0.106692836,-0.03532492,0.63961244,0.66511965,0.54406637,0.21516123,-0.17382753,0.376983,-0.55481,-0.113014586],[-0.6947742,0.5437955,-0.26280165,-0.6517489,-0.17782186,-0.09640967,0.45545045,0.11279408,0.322814,-0.40994444,-0.68243754,-0.049466625,0.17386594],[-0.2016882,0.33245435,-0.22961138,-0.045353495,0.5742978,-0.75247186,0.120317265,-0.09858627,0.5166808,0.6125953,-0.088035,0.14460035,-0.23711456]],"activation":"identity","dense_3_b":[[0.04315742],[-0.025058303],[-0.06259806]]},{"dense_4_W":[[0.5995295,-0.25079918,-1.226213]],"dense_4_b":[[0.054296162]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SELTOS 2021.json b/selfdrive/car/torque_data/lat_models/KIA SELTOS 2021.json new file mode 100755 index 0000000000..f68b17ada0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SELTOS 2021.json @@ -0,0 +1 @@ +{"input_std":[[6.5043],[1.2473463],[0.53390634],[0.048283435],[1.2437444],[1.2446332],[1.2450808],[1.2284776],[1.2033198],[1.1706628],[1.1364652],[0.048133977],[0.048158456],[0.048181333],[0.048161115],[0.047940608],[0.047484715],[0.046831056]],"model_test_loss":0.00607825955376029,"input_size":18,"current_date_and_time":"2023-08-08_16-08-39","input_mean":[[22.575022],[0.051328536],[-0.006913471],[-0.01011988],[0.05268152],[0.05299266],[0.05207647],[0.048002362],[0.043245066],[0.03809434],[0.035212684],[-0.010153537],[-0.010121024],[-0.01008983],[-0.010034731],[-0.010037355],[-0.010153356],[-0.010373143]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5531221],[-0.5509416],[-1.445181],[0.28771853],[0.22789262],[1.434991],[0.0080130715]],"dense_1_W":[[-0.072858766,-0.25066936,0.001488759,0.17555322,0.07657381,-0.9037761,0.3106683,0.08651254,0.067195155,0.15176873,-0.20259917,-0.21302752,0.28982407,-0.43658245,0.015916249,0.11262799,0.11793564,-0.059966978],[0.43427393,0.08093749,0.0133838765,0.1622592,0.09717405,-0.83871514,0.5765018,-0.31165177,-0.15231861,-0.16858198,0.16277543,-0.60361624,0.17700994,0.33473372,0.38939148,-0.20558326,0.45074964,-0.25900662],[-0.74159485,0.30163378,0.22673568,0.14877096,-0.47694537,0.4062525,-0.13229688,0.1764854,-0.156683,-0.07724261,0.12065852,-0.07211137,-0.008046468,0.105538025,0.03403057,-0.40424374,0.101804785,0.09886794],[0.056292683,-0.44537598,0.0066523813,-0.36948034,0.0020229202,-0.23440255,-0.1426723,0.044855885,0.21266802,-0.04769602,-0.07245297,0.095258914,0.14331557,0.06311263,-0.081638,-0.13354753,-0.10685418,0.2744694],[-0.4399394,-0.24742912,0.015261683,0.036726598,0.21024184,-0.56052953,0.2644335,0.22065622,-0.49486712,-0.22668484,0.26602116,-0.027812555,-0.26319936,0.4370143,0.30383864,0.05929112,-0.278868,0.19924623],[0.7735669,0.71460426,0.22413033,-0.16059706,-0.6686849,0.07259404,0.16731831,-0.019293515,-0.071510345,-0.132955,0.10057606,0.3232639,0.11988385,-0.38480517,-0.09152796,0.0526992,0.22566798,-0.07503419],[-0.013013475,0.9049779,4.2753534,-0.7142396,-0.40504238,-0.4914329,-0.67501336,0.25923017,1.06321,0.6865681,-0.7837867,0.6691853,-0.14117423,-0.25011092,0.2118381,-0.4131931,0.0050245565,0.23714177]],"activation":"σ"},{"dense_2_W":[[0.83081543,0.7152437,-0.9272331,-0.058508083,0.5601877,-1.0513786,0.34386688],[-0.40297586,-0.20603098,-0.02151336,0.27510563,-0.72458434,-0.33728045,-0.39708093],[-1.0368242,-0.39495397,-0.43345797,-0.44247583,-0.31836608,0.47316584,-0.5714821],[-0.57493865,0.08437657,-0.13061555,-0.76476145,0.03340725,-0.026223348,-0.12614326],[-0.55024046,-0.6168174,-0.028391553,-0.18474647,-0.26115215,0.12521398,0.35426983],[0.39255112,0.5900703,-0.22482665,0.5707256,0.5464044,-0.71590644,-0.002837547],[0.25933468,0.5432395,-0.25603205,-0.023391314,0.17869925,-0.030074507,0.05608481],[-0.40570793,-0.8749095,0.7643032,-0.95808434,-0.292604,-0.31031305,0.5525302],[-0.7991779,-0.5244842,0.7676792,-0.2169589,-0.35757715,0.3793689,-0.18556851],[0.27159563,0.47496906,-0.8455038,0.3217735,0.56621623,-0.37803704,-0.3152324],[0.34084067,0.4475718,-0.45190004,0.6034602,0.19615944,-0.74282926,-0.3698053],[-0.12877308,-0.040314443,-0.07347546,-0.022651967,-0.35362196,-0.25663686,-0.03716333],[-0.12629175,0.18490966,0.3493096,-0.12202217,-0.87659836,0.84210044,0.7154535]],"activation":"σ","dense_2_b":[[-0.37709257],[-0.36266398],[0.041201413],[-0.2759538],[-0.045757968],[-0.32502013],[-0.116910934],[-0.0555258],[0.13395292],[-0.11479294],[-0.12865],[0.0017155915],[0.03419236]]},{"dense_3_W":[[-0.21281184,0.025354605,-0.38931814,0.4332946,0.34886065,-0.5425068,-0.45385525,0.5249028,0.8241498,-0.0018914028,-0.71546686,0.37642565,0.6025195],[-0.10640655,-0.15879385,0.8035984,-0.0676657,-0.45838603,-0.16732062,-0.10961278,0.47199112,0.05652834,-0.273728,-0.5767416,-0.26667383,0.25352108],[0.2845616,-0.20691596,-0.0674403,0.26220548,-0.5230078,-0.013668718,0.14580722,0.21254358,-0.455578,0.6447261,0.39926735,-0.578386,-0.07932991]],"activation":"identity","dense_3_b":[[0.046802334],[0.06993807],[-0.054334518]]},{"dense_4_W":[[0.86223423,0.7466944,-0.5962639]],"dense_4_b":[[0.05574729]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SORENTO 4TH GEN b'xf1x00MQ4 MDPS C 1.00 1.04 56310R5030x00 4MQDC104'.json b/selfdrive/car/torque_data/lat_models/KIA SORENTO 4TH GEN b'xf1x00MQ4 MDPS C 1.00 1.04 56310R5030x00 4MQDC104'.json new file mode 100755 index 0000000000..e58a0a3add --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SORENTO 4TH GEN b'xf1x00MQ4 MDPS C 1.00 1.04 56310R5030x00 4MQDC104'.json @@ -0,0 +1 @@ +{"input_std":[[7.828237],[0.97600704],[0.4089475],[0.035214473],[0.9679743],[0.970265],[0.9714391],[0.9529998],[0.93442535],[0.907574],[0.87835944],[0.035107806],[0.035135653],[0.035162415],[0.03512646],[0.0350294],[0.03484094],[0.034691963]],"model_test_loss":0.010908995755016804,"input_size":18,"current_date_and_time":"2023-08-08_17-24-46","input_mean":[[23.668701],[0.043239903],[-0.008454303],[-0.0006616455],[0.05023332],[0.0483886],[0.046359282],[0.042707],[0.038750947],[0.031606093],[0.023638321],[-0.0005428065],[-0.00058967434],[-0.00064167456],[-0.0007974575],[-0.0008222639],[-0.0008730811],[-0.0009429487]],"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.07139598],[2.2307112],[-0.22793715],[0.028497862],[-1.4758755],[-2.2683609],[1.7139114]],"dense_1_W":[[0.05402334,0.7879195,4.0841537,-0.56412846,-0.06755307,0.16052529,-0.98961514,0.082657665,-0.29167134,0.3808659,-0.24588543,0.27139375,-0.021965634,0.08988655,0.5314556,0.022917956,-0.28474882,0.16892314],[0.040134925,0.9678868,0.2435498,-0.22607546,0.26583675,0.16535611,-0.29292968,-0.06048666,0.3677877,0.12361147,-0.06213637,0.23552014,0.001912692,-0.086550094,-0.35551274,-0.057126056,0.035038613,0.025732724],[-1.2022591,-0.2863651,0.33088538,0.5872443,0.15807754,-0.37816197,0.79342896,-0.52512366,-0.14498816,-0.047592632,0.23991925,-0.3639295,-0.25689954,-0.12431776,0.17954038,0.04690324,0.27545586,-0.3235991],[-0.0032510161,-0.90251637,0.0055037816,-0.046377614,-0.15268828,-0.56092745,0.54981595,0.039801016,-0.04936413,-0.0055981306,-0.071823165,-0.70809287,0.013437283,0.69162565,0.26313534,-0.058428794,0.08031778,-0.09614916],[-1.5630318,0.17789239,0.4537161,-0.0041152863,-0.39420608,-0.15796205,-0.7327813,0.66765463,0.4993053,0.405701,-0.65776676,0.3633854,-0.38824862,-0.53840584,0.27669683,0.48978165,-0.033090215,-0.2082885],[-0.029351536,0.9172641,0.2475216,-0.3134773,0.17839907,0.2644386,-0.063878715,-0.15182072,0.32643992,0.184796,-0.05073872,0.13546649,0.33546865,-0.20729195,-0.36180612,-0.11467291,-0.092137635,0.1431712],[-2.7309752,0.47239518,-0.8031595,-0.45335308,-0.5626998,0.3833318,-0.09541673,-0.21970436,-0.67134327,-0.43375826,0.4113513,0.43214273,0.17258164,0.00038695108,-0.27933037,0.2652092,-0.11726535,0.14931515]],"activation":"σ"},{"dense_2_W":[[0.18113254,0.2362841,0.23913723,0.4250595,0.41874975,-0.14176264,0.07982823],[1.2559026,-0.04362239,-1.9165045,-3.4750113,2.4915068,3.245088,0.7472181],[0.21553496,-0.15909076,0.1990112,0.06815371,0.40578955,-0.74799186,-0.40865952],[-1.270139,-0.5704174,0.013024697,-0.17953704,-0.36550337,-0.51389843,-1.1189383],[-0.4607257,-0.24294525,0.30119574,0.51511997,-0.5896765,-0.38873392,0.4903248],[0.27587494,1.3980604,0.41343182,-0.55864316,0.13226879,0.41889343,-0.025503036],[-0.11382582,-0.72006303,0.31443623,0.47339836,-0.05456861,-0.45569026,-0.44168296],[-0.14633095,-0.86015487,0.18689813,-0.007913177,-0.68155503,0.0981196,-0.20697698],[0.21121454,0.07270005,-0.47414,0.14561962,-0.47502828,-0.058896564,-0.30503902],[1.5235077,4.3672147,-1.9797657,-2.1577153,0.08651692,0.56285816,0.7441386],[-0.35447982,-0.2280675,0.2248906,0.69576144,-0.19720139,-0.035972144,0.23887096],[0.5307749,0.8708496,-0.9982855,0.06719293,0.5508931,-0.3601659,1.1098136],[0.41608205,-0.9552457,-0.7181348,0.54820853,-0.20942546,-0.0229672,-0.61255497]],"activation":"σ","dense_2_b":[[-0.09698142],[-1.4033747],[-0.07078607],[-0.105896965],[-0.032276735],[0.039644904],[-0.049273986],[-0.123684354],[-0.19865851],[-1.3548915],[-0.040826697],[-0.2473369],[-0.1898357]]},{"dense_3_W":[[-0.07364597,-0.28819343,0.33614686,-0.11555612,0.54371834,0.06078414,0.25967473,0.16326325,0.052277688,-0.2328434,-0.1264749,-0.36707604,0.6011789],[-0.4987282,0.21116212,-0.041836318,-0.45521593,-0.2570767,0.5502648,-0.13099706,-0.33858767,-0.0388845,0.24381347,-0.45033324,-0.28740764,0.032078497],[-0.360317,0.73834044,-0.30889666,0.7047129,0.37393212,0.31944397,-0.13176474,0.18058318,-0.22899523,0.7277826,-0.43414494,-0.6223405,0.1327134]],"activation":"identity","dense_3_b":[[-0.07107471],[0.075273246],[0.038589373]]},{"dense_4_W":[[-0.73965013,0.41693646,0.8098712]],"dense_4_b":[[0.070436954]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SORENTO 4TH GEN.json b/selfdrive/car/torque_data/lat_models/KIA SORENTO 4TH GEN.json new file mode 100755 index 0000000000..36c28370c1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SORENTO 4TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[7.8233147],[0.9782015],[0.41718537],[0.035352696],[0.9691626],[0.9718523],[0.9732458],[0.9550015],[0.93631965],[0.9095138],[0.88053274],[0.035256404],[0.03528126],[0.03530267],[0.03523645],[0.03513863],[0.035011794],[0.03486604]],"model_test_loss":0.012016833759844303,"input_size":18,"current_date_and_time":"2023-08-08_16-59-47","input_mean":[[23.676199],[0.046169933],[-0.0024152591],[-0.00083978643],[0.052181892],[0.050630625],[0.049394105],[0.04861944],[0.04347715],[0.037709467],[0.029363334],[-0.00079315034],[-0.00083242205],[-0.00086724694],[-0.00093634427],[-0.0010770531],[-0.0011623197],[-0.0013536707]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.34205592],[-0.6101867],[0.025273371],[2.7362225],[-0.3362331],[-0.22314112],[-0.42840534]],"dense_1_W":[[0.70273304,-0.07699354,0.004216056,-0.049642496,-0.1173342,-0.1843091,-0.514,0.301412,0.120716415,0.14159362,-0.26860958,0.22482587,-0.22099495,0.25595915,0.07369682,-0.30280155,-0.022244852,0.19049275],[-0.31632742,0.40738678,-0.0030173576,-0.14833613,-0.5414197,0.9335088,-0.3921892,0.074954435,-0.09115997,0.2769111,-0.164147,0.14919339,-0.16596842,0.19945244,-0.38358882,0.23962471,0.037440404,-0.055190288],[0.28026038,0.53400266,0.0009745513,0.14234091,-0.017792422,0.35154557,-0.54393846,-0.041059464,0.23289026,0.2371453,-0.22173151,0.32878917,-0.34945992,-0.17935802,-0.030065529,0.05598791,-0.16419156,0.06693432],[1.0627971,-0.69044113,-2.8159893,-0.11743469,0.06090651,-0.3309259,0.61224234,0.15625772,-0.35828912,-0.20305863,0.19095968,-0.38171795,0.088828474,0.45887148,-0.2708491,0.1556519,-0.33625215,0.20122494],[0.46239635,0.53465575,2.211843,0.16536956,0.27959237,0.03331173,-0.73842824,0.19596708,-0.17479798,0.15080513,-0.030420419,-0.2798054,0.38705692,-0.3063825,0.33478513,0.013453584,-0.30902138,0.09854831],[-0.07509558,0.06009354,0.0014442373,-0.37906444,-0.18389311,0.9123579,-0.23291315,-0.098106,0.17996079,-0.38929048,0.2669226,0.37405357,0.0829103,-0.12002334,-0.082380034,-0.19149263,0.17356545,0.021014312],[0.83645344,-0.12868191,2.8339524,0.66849464,0.2345121,-0.25139904,0.62862474,-0.14285043,-0.101333186,0.18938905,0.027926499,-0.30594265,-0.25533596,0.050244536,-0.12834157,0.20466578,0.14557889,-0.25508425]],"activation":"σ"},{"dense_2_W":[[0.2385943,-1.2497817,-0.4320098,-0.69494075,-0.15682808,-0.7165265,0.33271864],[-0.5953695,-0.94797826,-0.75910956,0.15720847,0.16028434,-0.42265445,-0.06788467],[0.013007017,-0.65603364,-0.54143244,-0.18851374,-0.48472962,-0.567826,-0.21415836],[-0.12800428,0.6126203,0.48534265,-0.0439459,0.3090983,0.6686178,0.06581577],[0.086700656,-0.7233699,-0.8339351,0.57965523,-0.0795262,-0.60835373,0.6064965],[-0.16711766,-0.5194217,-0.3638064,0.0828189,-0.19742145,-0.74326986,0.32982042],[-0.60902363,-0.54570323,-0.9682073,-0.22863796,-1.0575902,-0.7974728,0.09679575],[0.65101296,0.2940795,0.91902715,-0.3448089,0.7953689,-0.01467941,0.49614373],[-1.0385482,-0.7393712,-1.3759025,0.18227631,-1.3805835,-0.31249633,-0.33556783],[0.34581456,-0.657716,-0.2713684,0.86821914,-0.16907854,-1.0973026,0.6021319],[0.06327717,-0.08374516,0.2938722,-0.21229501,-0.08540833,0.84707147,0.17620224],[-0.3019964,0.7991158,0.15228769,-0.2151937,-0.01442734,0.6086916,-0.46539715],[-0.17123166,-1.3208861,-0.53291464,-0.768727,-0.22558156,-1.1115304,0.9095279]],"activation":"σ","dense_2_b":[[0.025361877],[0.115043625],[-0.19263957],[-0.15302731],[0.16757403],[-0.13207324],[0.2047931],[-0.023633512],[0.12663384],[0.21831232],[-0.10527339],[-0.07977336],[0.16238554]]},{"dense_3_W":[[-0.6029877,-0.001360625,-0.64843386,-0.024384713,-0.31931442,-0.2223872,-0.41601577,0.40875682,-0.6390585,-0.18351403,-0.22626987,-0.16342458,-0.5330356],[-0.9919812,-0.3600715,-0.23596478,0.014639649,0.05383371,-0.0056866687,-1.0682598,0.45604205,-0.13326848,-0.33690926,0.050030075,-0.28139764,-0.4887333],[-0.035192277,0.53870684,-0.28763992,-0.64913034,0.61716443,0.020962728,0.5046917,-0.6201238,0.081873566,0.4083527,-0.44538507,-0.638268,0.28089696]],"activation":"identity","dense_3_b":[[0.05839103],[-0.06695255],[-0.039935347]]},{"dense_4_W":[[1.2304412,0.24217309,-1.3306029]],"dense_4_b":[[0.0467045]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SORENTO GT LINE 2018.json b/selfdrive/car/torque_data/lat_models/KIA SORENTO GT LINE 2018.json new file mode 100755 index 0000000000..7cba3a0bd1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SORENTO GT LINE 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.225504],[0.9862146],[0.4786618],[0.044386055],[0.9911494],[0.98926777],[0.9868219],[0.9688941],[0.95759606],[0.945508],[0.93368983],[0.04445444],[0.044414494],[0.044370808],[0.044087693],[0.04393713],[0.04383826],[0.04361526]],"model_test_loss":0.007047169841825962,"input_size":18,"current_date_and_time":"2023-08-08_17-49-22","input_mean":[[22.136208],[0.070861906],[-0.03981052],[-0.010668343],[0.080718815],[0.07792175],[0.07505944],[0.058528677],[0.045737457],[0.03174954],[0.021063231],[-0.010688668],[-0.010692572],[-0.010689235],[-0.010696851],[-0.01084794],[-0.0111111775],[-0.011500895]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[3.4361866],[0.8604132],[3.8839195],[-0.3530098],[-0.60368276],[0.18975182],[-0.14933607]],"dense_1_W":[[1.77373,0.502524,0.0018965496,-0.110705666,0.3420213,0.22547789,-0.29762477,0.0047542676,0.14169078,0.4244286,-0.26493979,0.77021676,0.0050104316,-0.45031142,-0.0891641,-0.3238069,-0.27745253,0.43920958],[-0.4554037,0.55976075,0.0024382551,-0.52546054,-0.35694334,0.31670326,-0.42664233,0.5528438,-0.02553557,-0.25557682,0.018628456,0.5487123,0.07868527,-0.44713297,0.2761562,0.01487938,-0.19466569,0.13075072],[1.9630107,-0.8828655,-0.003229503,0.096722186,0.11981852,-0.59655976,0.20542483,-0.09582429,-0.035594583,-0.0051746666,-0.00012015179,-0.31307888,-0.4298206,0.48810238,-0.19152062,0.65658826,0.10284727,-0.3608829],[0.0509072,-0.08480384,2.396337,0.02690105,-0.36376664,0.108113885,-0.308852,0.44377556,0.45792276,0.30328622,1.0544075,0.88695085,0.12360692,-0.119185396,-0.18221413,-0.5859372,-0.31101158,0.7223309],[0.28265178,0.32164347,0.0010089057,0.030570894,-0.30268112,0.8745566,-0.7895676,-0.08777498,0.4583039,0.3052894,-0.36076066,0.817972,-0.2626141,-0.4675079,-0.3099327,0.0030562575,-0.1641152,0.23820297],[0.019067027,-0.14309163,-1.8227177,0.047291636,0.32350194,0.20237854,1.0319531,0.03287445,-0.7612191,-0.9520363,-0.2104849,0.18699706,-0.27343786,0.21203913,0.1552981,-0.075778924,0.033884183,0.004781352],[0.10389948,-0.48800257,0.0021118661,-0.07135153,0.009598374,-0.5138354,0.51288474,-0.36974624,0.07902618,0.0439172,-0.019653676,-0.36099622,-0.046752088,0.59683883,-0.17708305,0.32293355,-0.07517723,-0.042607766]],"activation":"σ"},{"dense_2_W":[[0.096298866,-0.023356602,0.24766381,-0.68317467,0.4726718,-0.31475353,-0.74931395],[-0.048710193,-0.088762455,-0.26215088,-0.68562347,-0.09474713,0.28614464,0.25585324],[0.088518575,-0.29647326,-0.5624382,-0.42151505,0.9982967,-0.40049326,-0.4974512],[0.36501676,-0.53366756,0.296159,0.35532963,-0.47745422,-0.34653178,0.71060693],[-1.2016175,-0.62754,-0.3136847,-0.11115397,-0.40962538,-0.6096405,0.84929377],[-3.0193913,-2.1009915,-0.42303616,-1.5302383,-0.37101474,1.7938634,1.6035624],[-0.5427815,0.09416961,0.18964134,-0.70530283,1.0021083,0.1920392,-0.037322704],[0.0019868647,-0.08528146,-0.067309916,0.12519653,-0.92892164,-0.20166376,0.95873517],[-0.7638899,0.35672405,-1.1621267,0.39103174,1.1349736,-0.65880626,-1.0431181],[-0.17016599,-0.42968458,-0.5383481,-0.1613195,0.84924465,0.09490495,-0.16490082],[-0.7958531,-1.0898287,-0.21342301,0.3154297,-0.662309,-0.11026381,0.43740568],[-0.21438372,-0.023171034,-2.4562607,1.4170244,1.4787751,-1.4303266,-1.7063339],[-0.8461705,-0.8368954,-0.6641428,0.07786552,-0.85198885,0.16422716,0.5509807]],"activation":"σ","dense_2_b":[[-0.04843994],[-0.11621983],[-0.15534192],[-0.1777891],[-0.13141605],[0.45782998],[-0.038693666],[0.120798975],[-0.2962059],[-0.112060666],[-0.19976714],[-0.08506511],[-0.19297417]]},{"dense_3_W":[[0.06841162,-0.38602033,-0.44655094,-0.095605254,0.09524266,1.5977386,0.055025216,0.92095596,-1.0016881,0.001653223,0.22546917,-1.4391123,0.5747701],[-0.112245455,0.27487016,0.09106065,-0.5642001,-0.3326845,-1.0173982,0.6527395,0.1291596,0.18963833,0.07579223,0.08202421,0.39516202,-0.5810091],[0.62696713,-0.4055594,0.3906188,-0.22678788,-0.6915645,-0.62307024,0.27116132,-0.23976414,0.59970427,0.59344476,-0.5686633,1.0074819,-0.6300193]],"activation":"identity","dense_3_b":[[-0.015245617],[0.021583866],[0.0017865004]]},{"dense_4_W":[[-0.4391859,0.34876132,0.45405573]],"dense_4_b":[[0.011228666]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SORENTO PLUG-IN HYBRID 4TH GEN b'xf1x00MQ4 MDPS C 1.00 1.05 56310P4030x00 4MQHC105'.json b/selfdrive/car/torque_data/lat_models/KIA SORENTO PLUG-IN HYBRID 4TH GEN b'xf1x00MQ4 MDPS C 1.00 1.05 56310P4030x00 4MQHC105'.json new file mode 100755 index 0000000000..da245a1a09 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SORENTO PLUG-IN HYBRID 4TH GEN b'xf1x00MQ4 MDPS C 1.00 1.05 56310P4030x00 4MQHC105'.json @@ -0,0 +1 @@ +{"input_std":[[6.360649],[0.8416322],[0.33437338],[0.04986401],[0.8348178],[0.83668405],[0.8381006],[0.8281648],[0.8175133],[0.80145794],[0.7849904],[0.04949942],[0.0495519],[0.04959984],[0.049575604],[0.049440794],[0.049178783],[0.048773665]],"model_test_loss":0.011909223161637783,"input_size":18,"current_date_and_time":"2023-08-08_19-02-44","input_mean":[[18.798538],[0.060060456],[0.0042254925],[-0.01005732],[0.061129835],[0.06208465],[0.06287847],[0.05924524],[0.053896163],[0.050247815],[0.048835788],[-0.010078115],[-0.010027372],[-0.009984768],[-0.010235178],[-0.010460788],[-0.010615164],[-0.010720316]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.3711772],[4.0384655],[-0.60371107],[-0.021517932],[0.059795618],[0.014027763],[0.6545455]],"dense_1_W":[[-1.7019469,0.01004788,1.2882278,-0.38348064,0.12244237,1.0539651,0.010641099,0.41091317,0.3839485,0.36134282,-0.18248878,0.036194474,0.5019625,-0.4913562,-0.25413185,-0.011724185,0.1496672,0.11843239],[1.7626301,0.23605797,1.3201638,-1.0663824,0.2729441,0.6596989,-0.081463575,0.61732155,0.33063596,0.53841823,-0.3461883,0.6325652,0.09249081,-0.21124457,-0.2544897,0.28014565,-0.013723431,0.19491264],[0.27358976,-0.88453114,-0.03890136,0.48175734,-0.016419638,-0.97174513,0.2863007,0.3938403,0.11718968,0.18793224,-0.29152203,-0.6642347,0.14523181,0.30439466,0.17772515,0.17078802,-0.075555354,0.038167004],[0.04198796,-0.43382403,1.6559426,0.09345928,0.6753657,-0.4891842,0.44554886,0.011966843,-0.26713324,-0.09224718,0.20697893,-0.8472049,0.14456306,0.44531605,0.005752212,0.19066374,0.34522521,-0.41704535],[-0.3430911,-0.33624044,-0.03918591,0.4145386,-0.37784162,-0.32403097,-0.3204265,0.19870447,0.10699937,0.0043252283,-0.15599932,0.11689893,-0.06691096,2.8774783e-5,0.07241905,-0.3570826,0.23487402,0.17241248],[0.02902531,0.22444873,2.0474432,-0.046874467,-0.318975,0.12265587,-0.33706895,0.3610506,0.22912423,0.44967905,-0.6113972,0.63183457,-0.12738343,-0.534021,-0.06903115,0.026587073,0.024522554,0.063068636],[0.0050931163,-0.5446937,0.1994072,-0.9001721,1.0302886,0.49093354,1.1983348,1.1123027,0.4812851,0.057845764,-0.39551273,-0.40197656,0.018871471,0.021246241,0.06228036,-0.3096515,-0.12146903,-0.37020501]],"activation":"σ"},{"dense_2_W":[[-0.35032728,-0.5031512,0.20565645,0.5048391,0.5721213,-0.75960577,0.41200778],[-0.083224565,-0.4266255,0.3613455,-0.31832695,0.7508301,-0.42364982,-0.041131567],[-0.19479334,0.13154602,-0.49550515,-0.057689346,0.25966644,0.019963862,-0.30955124],[0.56296927,-0.2241234,-0.74579465,-0.19006501,-0.5774306,0.5061718,-0.4157748],[-0.18207398,0.74063724,-0.43985197,-0.60961854,-0.63657373,0.98453957,-0.2611528],[-0.08481909,-0.17079473,-0.9215012,-0.28457326,-0.108750716,0.5557871,-0.24374656],[0.28946897,-0.2658649,-0.17986174,0.7817012,-0.03662516,-0.15243457,0.65582645],[0.06432835,0.035722017,0.24966948,0.1820806,-0.34214944,0.04920283,0.10240223],[-0.106335714,-0.43905434,-0.99428046,-0.5975757,-0.6509662,0.8275932,0.12634481],[1.0581882,-0.3677934,-0.9597405,-1.0668633,-0.7719651,1.0440427,0.07109511],[0.57484365,-0.48430628,0.32345054,0.79538834,0.54478437,0.47041076,-0.14143173],[-0.35414475,-0.41750684,0.8834586,0.2510105,0.15189533,-0.17024374,0.30005693],[0.45395577,0.93997616,-0.9476304,-0.6193973,-0.8066399,0.6195946,-0.048480663]],"activation":"σ","dense_2_b":[[-0.10116813],[-0.14295042],[-0.0813808],[-0.002537517],[0.23133247],[-0.06090244],[-0.012912041],[-0.31398782],[0.026570017],[0.100405954],[0.024308678],[0.013686816],[0.16338688]]},{"dense_3_W":[[0.67018026,0.45342138,0.2517602,-0.7161156,-0.45907423,-0.30567223,0.6014191,-0.2725562,-0.45720404,-0.52766263,0.22907431,0.38704422,-0.6652359],[-0.43428063,0.278939,0.07284501,0.58099675,0.534265,0.408692,0.2663524,-0.13852553,0.70378095,0.12224407,-0.06698436,-0.7304552,0.043905403],[0.49885213,0.35949433,-0.28865784,-0.4043822,-0.032159276,-0.4398066,-0.1666352,0.3646978,0.109651156,-0.052056532,0.2463666,0.16612957,0.099209264]],"activation":"identity","dense_3_b":[[0.0218462],[-0.042534254],[0.01341708]]},{"dense_4_W":[[-0.94743174,0.5062643,-0.579337]],"dense_4_b":[[-0.02170465]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SORENTO PLUG-IN HYBRID 4TH GEN.json b/selfdrive/car/torque_data/lat_models/KIA SORENTO PLUG-IN HYBRID 4TH GEN.json new file mode 100755 index 0000000000..b3e5f0e367 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SORENTO PLUG-IN HYBRID 4TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[6.3644342],[0.84206194],[0.32837495],[0.0497152],[0.8371395],[0.8385447],[0.8395692],[0.829151],[0.8190757],[0.80348146],[0.7860103],[0.049369164],[0.04941689],[0.049452867],[0.0493644],[0.049244285],[0.04892234],[0.048490353]],"model_test_loss":0.012282345443964005,"input_size":18,"current_date_and_time":"2023-08-08_18-13-59","input_mean":[[18.745186],[0.058482915],[0.004100846],[-0.0101344995],[0.059071593],[0.060052983],[0.0608945],[0.058870878],[0.05506747],[0.051870324],[0.050613668],[-0.0101755485],[-0.010125563],[-0.010075055],[-0.010220342],[-0.010350309],[-0.01046635],[-0.010587991]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.26137024],[-0.8474335],[0.7221059],[-3.029152],[-3.0476334],[-0.50681853],[0.28089675]],"dense_1_W":[[0.118606314,0.25686783,-1.9051447,-0.7990428,-0.005979468,0.09638535,-0.8308289,0.51833004,-0.06402269,0.6971393,-0.6183026,0.6924021,0.12464697,0.043432377,-0.4148101,0.15270382,0.060744658,0.13626556],[-0.16419527,0.39643514,2.5732567,0.008115614,-0.28033996,0.43020484,-0.5210173,0.17210113,0.04305193,-0.15485092,-0.06430828,0.5110761,0.061184343,-0.39538494,-0.33624035,0.22553732,-0.36463583,0.28871256],[0.08022375,-0.1438102,2.275842,-0.34128058,-0.044324376,0.096882254,-0.010320051,0.23874547,-0.18070365,-0.08163477,-0.005464015,0.42233032,0.017914683,0.047668677,-0.22110505,-0.13801146,0.21807624,0.043199193],[-1.0983561,-1.3618904,-0.16421425,0.7119955,0.31953186,-0.022093425,-0.31532484,-0.20155048,-0.2332474,-0.5418476,0.23563766,-0.055656385,-0.3085361,0.27007875,0.12838498,-0.18988839,0.06709897,-0.1783812],[-1.1701652,1.2933975,0.1829548,-0.56762326,-0.21117829,0.32533327,-0.16175397,0.4003565,0.3450981,0.5221387,-0.26247823,-0.18100262,0.19747707,-0.020127997,-0.08322595,-0.06828175,0.17032392,0.079796456],[0.55186826,0.5894228,-0.0018529932,-0.14105065,-0.08741265,0.9153969,-0.5369019,-0.110670924,-0.1197868,-0.17400903,0.24264471,0.5258655,0.41813594,-0.97932565,-0.030922398,0.023046646,-0.2965142,0.17293993],[-0.53106797,0.6812101,0.003069036,0.013521579,-0.22647035,0.62607247,-0.21172582,-0.28151682,0.13779911,-0.18788983,0.14300823,0.5570215,-0.360614,-0.39254332,0.087255284,-0.17113407,0.00049219653,-0.022655595]],"activation":"σ"},{"dense_2_W":[[-0.5570222,-0.3558432,0.43228203,-0.69578755,-0.5209684,-0.3988039,-0.50713974],[-0.44423953,-0.5874194,-0.7323912,0.7715879,-0.41121703,-0.1318218,0.18571433],[-0.6390287,-1.387356,-0.36371973,0.9566006,0.119820826,-0.493032,0.24996151],[-0.18583159,0.6930251,0.17657615,-0.539559,0.16666687,-0.021469139,0.16992941],[-0.40057775,-0.42924806,0.31558606,-0.0009943814,-0.6159993,-0.6273195,-0.25029367],[-0.13757096,0.5006542,-0.21990159,-0.19693488,-0.39372584,-0.53963596,-1.0108879],[0.4223514,0.07548385,-0.010612892,-0.42543212,0.35533974,-0.11486922,0.89943194],[-0.16426279,0.6486941,-0.036648616,0.31983182,0.5339297,-0.086293764,-0.25488037],[0.3003831,0.17355344,0.20259908,0.3913868,-0.13287883,0.49564433,0.6325901],[-0.48450124,-0.122303,0.04608689,1.1349032,-0.7158418,-0.69535565,-0.4309579],[-0.017942823,-1.1588961,-1.7683665,0.11541567,0.7244163,-1.6989279,0.45806262],[-0.47665825,-0.6297304,0.14930177,0.03149848,-0.07129674,-0.594798,-0.27915043],[-0.69228166,0.49151105,0.71214664,-1.0289556,-0.55659735,-0.2014265,-1.69863]],"activation":"σ","dense_2_b":[[-0.24992906],[0.05137416],[-0.04471787],[-0.0656874],[0.03518997],[0.03586051],[-0.08755667],[-0.07071635],[-0.09519462],[0.38123006],[-0.14761746],[0.018471785],[-0.25193718]]},{"dense_3_W":[[0.17286126,0.5556709,0.46810713,0.4721513,-0.47047356,0.520569,-0.49622187,-0.49121454,-0.45540947,0.66542894,0.69841886,0.3982122,-0.25671947],[-0.22673589,-0.5611173,-0.089621924,0.1419429,-0.6225278,-0.1980974,0.45448488,-0.22727543,0.51839507,-0.101876915,-0.25131065,-0.25810936,-0.088802256],[0.07408502,-0.50601435,-0.07129802,0.68250656,-0.27145752,-0.33781096,0.42821127,0.10353291,0.29823735,-0.20758152,-0.16469304,-0.33839104,-0.72373396]],"activation":"identity","dense_3_b":[[-0.05540624],[0.050332494],[0.045503195]]},{"dense_4_W":[[-0.74805945,0.97596985,1.0388287]],"dense_4_b":[[0.04738765]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SPORTAGE 5TH GEN.json b/selfdrive/car/torque_data/lat_models/KIA SPORTAGE 5TH GEN.json new file mode 100755 index 0000000000..69e710e228 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SPORTAGE 5TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[9.271582],[1.2324897],[0.6433989],[0.04141489],[1.2489065],[1.2435695],[1.2356619],[1.172688],[1.1162171],[1.0433639],[0.9707198],[0.04149849],[0.041483577],[0.04144006],[0.041163605],[0.04088149],[0.040357973],[0.039594423]],"model_test_loss":0.008056153543293476,"input_size":18,"current_date_and_time":"2023-09-02_08-29-22","input_mean":[[18.359726],[-0.037949927],[0.5234115],[-0.008337179],[-0.04552693],[-0.04569026],[-0.04552523],[-0.039857816],[-0.033734176],[-0.024680167],[-0.015604315],[-0.008196234],[-0.008305338],[-0.00844266],[-0.0089836335],[-0.009296811],[-0.009439258],[-0.009452471]],"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.94973767],[-2.433663],[-0.034619235],[-0.077283],[-2.7017562],[-0.09339245],[-0.6244862]],"dense_1_W":[[0.80034006,1.0705961,0.000825829,-0.09964225,0.40290698,0.47271788,-0.30613136,0.9018622,0.00026438956,0.09919525,-2.150913,0.49553874,-0.3608581,-0.1313319,-0.4082762,0.09144183,0.0788233,0.34741214],[-2.3832078,0.71298873,-0.005020484,-0.17478089,1.0590492,-0.31795993,-1.1199154,-0.5731978,-0.0998752,-0.25876248,0.21498705,-0.14916337,0.33611503,0.25201452,-0.13425598,-0.23907493,0.0071402895,0.17116584],[-0.07616245,-0.34612796,-0.011475999,-0.072679855,0.58056265,-0.395393,-0.27633327,-1.8887899,-0.6015088,0.49371734,1.9656835,0.19998965,0.0057602297,0.13962367,0.12470687,-0.18640584,-0.023864588,-0.19377947],[0.010883457,0.6855033,-0.0010638234,-0.24550597,0.015826495,-0.35939503,0.53073984,0.3727611,-0.5348426,-0.44873196,0.39434654,-0.17992191,0.4207321,-0.22305717,0.23088501,-0.09521394,-0.11022331,0.06272074],[-2.3750079,0.02318054,0.005723935,0.4172705,-0.6483569,0.11516915,0.21627235,0.8689977,-0.097739585,-0.17518516,0.080854654,-0.5044023,-0.23945011,0.5778991,-0.19969985,-0.05412506,-0.018118298,-0.047388777],[0.034274723,-0.57860583,-0.0072152913,0.24105103,-2.9188197,-2.175338,-1.1614898,3.7702558,2.6517565,0.844019,-0.7422007,0.3744097,0.13847013,-0.2812754,-0.75471646,0.14402452,0.31923193,-0.22577274],[0.6020792,-0.93845457,0.0032515822,0.29181626,-0.71029466,-0.23251307,0.4013084,-0.9979102,0.07712134,0.010485791,1.9087931,-0.24826817,0.05725912,0.07313231,0.22776487,-0.03669609,-0.074751236,-0.3001132]],"activation":"σ"},{"dense_2_W":[[0.41379273,-1.5534699,-0.061251666,0.9784582,-0.31017292,0.5312373,-0.30788672],[-0.8307559,-0.5997123,-0.10822264,-0.16534962,-0.92172116,-1.0821096,0.27836254],[-0.04996724,0.016284576,0.15466881,-1.2067809,-1.0948375,-0.033628576,0.46014366],[-0.23169208,0.75857294,-0.95120645,-0.9115383,0.30752045,-0.28777564,0.08635593],[-0.39187977,0.5864086,-0.6104791,-0.4405727,-0.5313213,0.30406076,0.062464662],[0.34800822,0.8006306,-0.2674241,0.30921367,1.2659222,0.5549054,-0.80455273],[0.52084416,0.28339612,0.35776538,0.61953413,0.5954671,0.35080484,-0.4923708],[0.6637605,-0.90991306,1.2823876,-0.31609806,-0.17648666,0.84696317,0.4531972],[0.18129082,-0.1456923,0.860548,0.9921053,0.10297215,-0.23329806,-0.703881],[-0.6871936,-0.35452083,0.16561241,0.52725476,0.30145702,0.095435195,-0.031700533],[-1.037031,-0.12172777,-0.37805697,0.9377832,1.6396,1.0745027,-0.81819445],[0.4548168,-0.14163275,0.34056768,0.24697062,0.20977701,-0.09230414,-0.4355987],[-0.4384788,0.08605435,-0.4810871,-0.79529417,-0.68544877,0.46262282,0.39435223]],"activation":"σ","dense_2_b":[[-0.48680034],[0.068014495],[0.04869933],[0.2673811],[0.15607266],[-0.048658077],[-0.26778942],[-0.18545923],[-0.28900617],[-0.2309299],[-0.33494246],[-0.16927081],[0.20434596]]},{"dense_3_W":[[0.3822013,-0.4389438,-0.41882336,-1.0697446,-0.36492467,0.11356586,0.35364708,0.65464646,0.21121821,0.11611892,0.44234788,0.32605755,-0.81655335],[-0.4098758,0.73658663,-0.137919,0.9484474,0.6109782,-0.055106185,-0.0077281683,0.19195211,-0.24094999,0.010442004,-0.6749704,0.28052664,0.024752859],[-0.25375482,-0.2737522,0.2542901,-0.19734219,0.17325146,0.15619496,-0.18796492,-0.107151814,0.055576775,0.52131623,-0.14911918,0.16789204,-0.67280823]],"activation":"identity","dense_3_b":[[-0.123436764],[0.06764906],[-0.048735052]]},{"dense_4_W":[[1.3109156,-0.35272652,0.104447454]],"dense_4_b":[[-0.1077713]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA SPORTAGE HYBRID 5TH GEN.json b/selfdrive/car/torque_data/lat_models/KIA SPORTAGE HYBRID 5TH GEN.json new file mode 100755 index 0000000000..e51a7bfd6b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA SPORTAGE HYBRID 5TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[8.976727],[0.70075977],[0.5193822],[0.03042774],[0.69921887],[0.70013744],[0.7002965],[0.695902],[0.6933414],[0.67973745],[0.6627475],[0.030151172],[0.030225797],[0.0303137],[0.030544141],[0.03062558],[0.030789947],[0.030969843]],"model_test_loss":0.006343930959701538,"input_size":18,"current_date_and_time":"2023-08-08_19-27-16","input_mean":[[16.929798],[-0.07719816],[0.018166475],[-0.021377886],[-0.079235695],[-0.07809248],[-0.07658997],[-0.068645015],[-0.06328592],[-0.05931081],[-0.05909752],[-0.021333551],[-0.021345824],[-0.021356996],[-0.021575557],[-0.021667903],[-0.021827627],[-0.02195472]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.014880665],[-4.0546803],[4.039964],[-0.11868123],[0.15448645],[-1.107983],[1.1866902]],"dense_1_W":[[0.0020459956,0.33396527,-0.12089764,-0.09266742,-0.10447256,-0.9204386,0.6287741,-0.6056384,0.22843099,-0.036838837,0.06830062,-0.39476836,-0.25123098,0.16312656,0.52959627,0.44755596,-0.0060909246,-0.37075716],[-2.4018881,0.96303153,-0.011795681,-0.2927611,-0.56402475,0.09905826,-1.2417923,0.6909417,0.04634957,0.049870215,0.14829403,-0.24467021,0.098947786,0.60680634,-0.11770359,0.12915674,-0.28863087,0.106796],[2.4256525,1.437447,-0.012711781,0.2002033,-0.7284638,0.066629946,-1.2394707,0.30315024,0.19728456,-0.0064161224,0.16385247,-0.46458936,0.14064942,0.5783398,-0.52734655,0.12342225,-0.02771602,-0.024491971],[0.01097608,-0.027902901,-0.034374587,-0.3541097,0.5106101,0.76122844,-0.096962415,-0.6580167,-0.2428814,0.03086143,0.42839304,-0.1327025,0.22802521,0.23564328,-0.29380637,0.4714742,-0.12637857,-0.02005889],[-0.034812696,0.41839755,3.2609296,-0.42740518,-0.15298292,-0.00866209,-0.9877955,0.20124017,0.70070297,0.17947885,-0.23164096,0.28965604,-0.7283435,-0.2188886,0.7684531,0.19517736,0.2536015,-0.36128113],[-0.9371955,-0.44021863,-0.56623465,-0.32142237,0.72665215,0.002760211,1.794923,-0.5086798,-0.3332023,-0.46023577,0.28646132,0.021077845,-0.085969545,0.12202227,-0.0113952635,0.3216046,0.09244552,-0.3860546],[0.96695864,-0.30241808,0.58513,0.17075059,-0.22292358,-0.8550528,0.2879175,-0.43512177,-0.31959462,0.48480448,0.25879675,0.27618545,0.025451204,-0.122112915,-0.17442971,-0.3921672,0.06478193,0.40238667]],"activation":"σ"},{"dense_2_W":[[-0.044206314,-0.8398137,-0.64021885,-0.54042494,0.6175049,0.18352465,0.32354066],[0.43910313,-1.1964579,0.21669604,-0.65690404,-0.1722438,0.7105811,0.9846193],[-0.7918547,0.18124402,0.9972935,0.41970012,0.19829191,0.010471378,-0.43702286],[0.08539568,0.5138893,0.012154299,0.39407086,-0.2033074,0.2336377,0.07864137],[-0.57327664,1.5145365,0.055437118,0.44190773,0.09702478,-1.1895245,-0.6311017],[-0.44423488,1.5355299,0.024235807,0.16098042,0.29021573,-0.8679073,-0.9571557],[0.004154781,1.1336601,0.8133591,-0.50107414,0.031159671,0.22605118,-0.14536653],[0.007528867,-0.56511986,-0.3612175,-0.24699865,-0.3588984,0.07682657,0.65754634],[-0.23885256,0.037369203,-1.247802,-0.6006928,-0.26584128,0.70783955,0.31224442],[-0.7690314,0.500182,0.9671801,-0.31481332,0.67578256,-0.68111664,0.31868243],[0.6401129,-0.09492038,-0.6698544,-0.36198345,-0.5426654,-0.2671815,0.6592098],[0.7210531,-1.0498211,-0.22714017,-0.048228458,-0.37272957,0.26260805,0.70966876],[0.63982356,-0.29841152,-0.8246119,-0.47527993,-0.18812291,0.8096702,-0.06459521]],"activation":"σ","dense_2_b":[[-0.025994662],[0.15322399],[-0.07625017],[-0.02093097],[-0.5037285],[-0.3910864],[-0.2550051],[0.010986569],[-0.03674515],[-0.06740837],[-0.02110642],[0.203657],[-0.006955387]]},{"dense_3_W":[[0.13050179,-0.1750691,0.55030495,0.00817725,0.0064171855,0.037391666,-0.34142336,-0.3982381,-0.6864987,0.44729853,0.019040912,0.2000447,0.05393903],[-0.18140526,-0.7954796,0.4079409,0.11663361,0.7815968,0.6944582,0.29977924,0.37544534,-0.17576152,0.39384714,-0.40072137,-0.36830547,-0.2356481],[0.5863231,0.31058028,-0.7853302,-0.23653558,-0.35724676,-0.24529241,-0.29981402,0.3657695,0.7097211,-0.48353392,0.66631585,0.39028704,0.82543695]],"activation":"identity","dense_3_b":[[0.05991354],[0.027705792],[-0.10160021]]},{"dense_4_W":[[0.21156265,0.3147255,-0.69529635]],"dense_4_b":[[0.09139054]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA STINGER 2022 b'xf1x00CK MDPS R 1.00 5.03 57700-J5300 4C2CL503'.json b/selfdrive/car/torque_data/lat_models/KIA STINGER 2022 b'xf1x00CK MDPS R 1.00 5.03 57700-J5300 4C2CL503'.json new file mode 100755 index 0000000000..2dc670357d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA STINGER 2022 b'xf1x00CK MDPS R 1.00 5.03 57700-J5300 4C2CL503'.json @@ -0,0 +1 @@ +{"input_std":[[6.1329846],[1.0240825],[0.55357367],[0.032864623],[1.0280122],[1.0259764],[1.0244912],[1.0091227],[0.99859416],[0.99492943],[0.99062693],[0.03290333],[0.03287097],[0.03284539],[0.03274356],[0.03259516],[0.03226275],[0.031924404]],"model_test_loss":0.0039173574186861515,"input_size":18,"current_date_and_time":"2023-08-08_21-06-15","input_mean":[[17.373055],[-0.121487565],[0.004857097],[-0.0043323576],[-0.122308314],[-0.12176135],[-0.12166673],[-0.12044618],[-0.11866407],[-0.11413705],[-0.11999074],[-0.0043443115],[-0.0043463064],[-0.0043407544],[-0.0043205405],[-0.004334937],[-0.004431707],[-0.0045705433]],"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.15578866],[-0.121010795],[2.607187],[0.024626328],[-0.2870057],[-1.3427569],[-0.17659523]],"dense_1_W":[[-0.0033034484,-0.052573163,0.22313437,-0.4994298,0.23290847,0.23589677,0.24603657,-0.08493268,-0.17096585,0.21070172,0.14998867,-0.12246095,-0.27713594,0.266521,0.15202883,-0.5736784,-0.7178588,-0.22354351],[-0.033423953,0.48308042,4.3161335,-0.13211238,-0.22973481,-0.2271183,-0.17018077,-0.080117166,0.23103811,-0.06745466,-0.22646382,-0.14490494,-0.44278416,0.23661947,0.76887465,-0.16852573,-0.29098848,0.19946156],[0.8961271,-0.47064975,0.49676007,-0.5249683,0.1959607,0.82731485,-0.08854316,0.487867,-0.09237197,0.09834567,0.050139025,0.031087723,-0.018046698,0.23961507,0.48042274,-0.050623044,-0.061986376,-0.09952346],[-0.0008700511,-0.16591707,0.14862742,-0.07141854,-0.5259756,0.843034,-0.30464283,0.47228673,0.47462964,-0.019866813,-0.20559688,-0.12733686,-0.3478062,0.6510686,-0.49144772,-0.57306224,-0.30681828,-0.07526166],[-0.871296,-0.1437896,0.5101226,0.24243414,0.23617809,-0.778845,0.66372377,0.8925617,0.811687,-0.4287381,-0.18957064,0.00992578,-0.08970741,0.320578,-0.4153779,-0.30179247,0.32845688,-0.09843358],[-0.56676364,0.10569009,0.32999828,0.031681255,0.019788198,0.49837622,-0.1160794,0.06925489,0.10766315,-0.06880369,0.07340804,0.4267022,-0.24849682,-0.16590549,-0.19864106,0.101786755,0.19663657,-0.15131107],[0.016626861,-0.24604829,-0.008103917,0.4317491,0.09287087,0.963533,-0.42994773,0.15286058,-0.10805577,-0.01726937,0.1516635,0.12822759,-0.06660257,-0.07250721,-0.49660203,0.03619374,-0.09870995,0.12891567]],"activation":"σ"},{"dense_2_W":[[0.35354838,0.08248845,-0.2643721,0.028969606,-0.16676016,-0.8305304,-0.3016516],[-0.22521318,0.3866312,0.4977837,0.076887876,-0.71179044,0.6780423,0.50716233],[0.46899542,-0.24904732,0.14908811,-0.89964503,0.46441752,-0.70685565,-0.22258599],[0.11673758,-0.67375845,-0.84481615,-0.048750993,0.20950693,-0.4879097,0.16695245],[0.13204935,-0.24652998,-0.33666334,0.89801437,0.33655748,0.5779938,-0.14154734],[-0.5384168,0.014923374,0.29242253,0.00864887,-0.09533511,0.30288514,0.830687],[-0.5773432,-0.32536963,-0.42681998,-0.23757271,-0.17945053,0.15035582,0.0041262284],[0.34518933,-0.32978058,-0.21651018,-0.5379371,0.34204122,-0.32106385,-0.6527221],[-0.42277348,0.16665061,0.3108687,-0.28702435,-0.5732586,0.75958574,0.86309266],[0.015375347,0.19915505,-0.42266467,-1.0245055,-0.05351699,-0.6963474,0.14833081],[0.23518765,0.3833349,0.13227822,-0.584967,0.30398777,-0.93099904,-0.5175701],[0.06394686,-0.43986523,-0.12684605,-0.8447283,0.6266354,0.04569117,-0.8361707],[0.49337465,0.33293915,-0.96844876,-0.4276928,-0.6929566,-0.28569952,-0.14265089]],"activation":"σ","dense_2_b":[[-0.024476556],[-0.11499582],[0.022631852],[-0.009896085],[-0.014204676],[-0.043049544],[-0.30805475],[0.025720058],[-0.107878506],[0.009352697],[-0.04004397],[-0.022493577],[-0.01955864]]},{"dense_3_W":[[-0.57439166,0.5246423,-0.19036132,-0.40068084,0.5114071,0.46818924,0.3444213,-0.7027561,0.40878892,-0.3749757,-0.6299576,0.32576016,-0.16117278],[0.4093721,-0.3366498,-0.52919716,-0.008743298,-0.08526943,0.6047717,-0.1464253,-0.6356685,0.27361497,-0.6559057,-0.636247,-0.10396182,-0.087822154],[-0.0016937943,-0.6977227,0.6259379,0.64517385,-0.23953342,-0.55496264,0.22454576,-0.4191411,0.0044411933,0.005649371,0.58461046,0.60280037,0.57034343]],"activation":"identity","dense_3_b":[[0.011864344],[0.06484405],[-0.028621858]]},{"dense_4_W":[[0.63415956,0.3032611,-1.0295273]],"dense_4_b":[[0.026569296]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA STINGER 2022 b'xf1x00CK MDPS R 1.00 5.03 57700-J5380 4C2VR503'.json b/selfdrive/car/torque_data/lat_models/KIA STINGER 2022 b'xf1x00CK MDPS R 1.00 5.03 57700-J5380 4C2VR503'.json new file mode 100755 index 0000000000..8d8208b0f0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA STINGER 2022 b'xf1x00CK MDPS R 1.00 5.03 57700-J5380 4C2VR503'.json @@ -0,0 +1 @@ +{"input_std":[[6.766022],[0.5533229],[0.2856296],[0.033792395],[0.5389918],[0.54306436],[0.54760325],[0.55337805],[0.55737114],[0.5617065],[0.5625296],[0.03348953],[0.033542342],[0.033610392],[0.033808257],[0.033930898],[0.034050055],[0.034098357]],"model_test_loss":0.0027918475680053234,"input_size":18,"current_date_and_time":"2023-08-08_21-31-03","input_mean":[[21.389719],[0.0015681498],[-0.0053915554],[-0.002413832],[0.0013884547],[0.0015199955],[0.0016545503],[-0.0005008584],[-2.2193064e-5],[0.003740185],[0.0043427483],[-0.0020289146],[-0.0020741888],[-0.0021126948],[-0.0021486785],[-0.0021773984],[-0.0021409069],[-0.002074085]],"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.005023801],[-0.11859596],[-0.083387464],[2.9536428],[-3.17796],[0.013405252],[0.29147854]],"dense_1_W":[[-0.0033325052,0.6876983,-0.07805519,-0.19289164,0.65789926,-1.3244646,-0.020963509,-0.37362412,0.13077013,-0.40126017,0.35083288,-0.46714717,-0.6626373,-0.3469128,1.4830853,0.5011229,0.28441152,-0.4636832],[0.3598699,-0.64306945,2.2225964,0.4161311,0.41669363,-1.0839597,0.92909795,-0.95103395,-0.5053492,0.12075414,1.4680102,-0.2333293,-0.24382429,0.008533065,-0.19225878,0.18216391,0.11589113,-0.20803492],[0.20756045,2.033753,2.1817362,-0.9258632,-0.0874673,-0.5312963,-2.7698588,-0.14382717,0.5049645,0.37967896,0.4239767,0.7745002,-0.13785833,-0.38348323,0.5186508,-0.078807354,0.21235526,-0.11610479],[1.4961438,-0.3139877,0.28255,0.26589444,-0.61779964,1.0510086,-0.6857809,0.25174332,0.8591813,0.0057339612,0.012607628,0.16490415,-0.06531447,-0.11422419,-0.04204824,-0.2578638,-0.073865555,0.12349488],[-1.5165002,-0.0548487,0.28816897,-0.44763196,-0.85135686,1.1610124,-0.761776,0.5293456,0.32867563,0.25241977,-0.027216699,0.032018177,0.37777507,0.1571353,-0.21763782,0.32281792,-0.48416787,0.24708028],[-0.0059207403,0.75648165,0.00349558,-0.6363216,-0.2229793,-1.8046044,-0.11476358,0.26718977,0.025075352,0.8795477,-0.95764613,1.086634,0.044866603,-0.14078698,-0.16995233,-0.6281635,-0.20085551,0.6414435],[-0.003071575,0.12751202,-0.011326043,-0.020205589,-0.36886206,0.30381098,-0.34500697,0.18834841,-0.24861936,-1.2992047,0.863031,-1.9390234,-1.3683192,-0.63276744,-1.2014979,9.656866e-5,0.09690952,-1.0078585]],"activation":"σ"},{"dense_2_W":[[0.39662704,0.48374733,-0.29005706,0.07393947,-0.42477635,0.2564262,-0.42727342],[0.21152999,0.061012335,-0.7423783,-0.5523955,-0.39889368,0.38016352,0.54106915],[0.68259335,0.47207102,-0.8016757,-0.12860833,-0.49738726,0.6516305,0.014673964],[0.47920755,-0.107558385,0.04683691,-0.006397021,-0.44672456,-0.18994014,-0.46220642],[-0.30933115,-0.46241206,-0.063971646,-0.63298374,0.16368231,0.45431167,0.069120824],[0.13341828,0.12734184,0.23883563,-0.30482867,0.6489039,0.54735976,0.3412583],[0.12302853,0.066058725,-0.73864675,-1.1300348,0.62163764,0.53437996,-0.48281124],[0.20568475,-0.00066856324,-0.23245256,-0.07801379,-0.051070046,0.18588813,-0.42292082],[-0.75646293,-0.43007204,-0.013988241,0.65225786,0.47503433,-0.5898269,0.097233206],[0.4212197,0.27158758,-0.03540538,-0.8047878,0.059127036,0.35010928,-0.7840495],[-0.74006635,-0.7154454,0.26572984,0.67159295,0.33328587,-0.29086044,0.44390428],[-0.26889247,-0.01841652,-0.12786053,0.7110297,0.9222276,-0.13066176,-0.4141216],[-0.13986242,-0.16117467,0.5941917,-0.43290535,0.29161388,-0.7472561,-0.6601617]],"activation":"σ","dense_2_b":[[-0.10558703],[-0.086225174],[-0.024091406],[-0.06185179],[-0.1395063],[0.0145245325],[-0.14875814],[-0.06766006],[0.15597098],[-0.31839365],[0.027026298],[0.028820656],[-0.21016255]]},{"dense_3_W":[[-0.231988,-0.5889274,-0.1283931,0.20118165,-0.3871818,0.6120688,-0.5323036,0.09410525,-0.37467438,-0.33146307,0.18340798,0.30552286,0.5499228],[0.38446704,0.16326652,0.51952577,-0.2927903,0.28178582,-0.28718108,-0.019530099,0.15835221,0.12750727,0.4528022,-0.37826803,-0.32343772,0.41362897],[-0.07056111,-0.5892277,-0.6703741,-0.48694804,0.19810483,0.2863676,-0.40396088,-0.33865243,0.5503839,0.37918863,0.62173796,0.26518953,0.3827839]],"activation":"identity","dense_3_b":[[0.068464704],[-0.059921235],[0.04597432]]},{"dense_4_W":[[0.1415478,-0.47448632,0.58617306]],"dense_4_b":[[0.04461211]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA STINGER 2022.json b/selfdrive/car/torque_data/lat_models/KIA STINGER 2022.json new file mode 100755 index 0000000000..5bbf98eff6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA STINGER 2022.json @@ -0,0 +1 @@ +{"input_std":[[6.871551],[0.99076307],[0.5212804],[0.034033],[0.99273914],[0.99082446],[0.99025035],[0.97448325],[0.9654756],[0.9608115],[0.9527273],[0.033883817],[0.033910338],[0.033948522],[0.03404775],[0.03394733],[0.033679023],[0.033345345]],"model_test_loss":0.004427366424351931,"input_size":18,"current_date_and_time":"2023-08-08_20-41-47","input_mean":[[18.534761],[-0.107549384],[0.0060349857],[-0.004051211],[-0.10914043],[-0.109205954],[-0.10822495],[-0.1059477],[-0.10361664],[-0.10045632],[-0.105254054],[-0.0040303078],[-0.0040611844],[-0.0040791193],[-0.0039875545],[-0.003919938],[-0.0038113499],[-0.0038577982]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.10420359],[-0.1057817],[-0.39223936],[-2.3496768],[-0.28235236],[-2.4502673],[0.03921215]],"dense_1_W":[[0.074189,-0.46536532,1.0744638,-0.0955078,0.28618422,-0.7533586,0.43112066,-0.16309841,0.008819428,0.3651173,0.16028656,-0.111217655,-0.09443299,0.6007408,-0.26957542,0.0102762515,-0.211533,0.20011066],[0.01304878,-1.1999677,0.018503658,-0.372737,0.6353846,0.8292781,0.1719466,0.035132185,-0.10863397,0.08928544,0.19234443,0.36751947,0.06552409,0.09331779,-0.00076240604,-0.45366123,-0.218846,0.31527466],[0.01300137,-0.41192222,-0.25047097,0.6152148,0.2306633,-0.38328096,-0.5728854,-0.49195603,-0.593413,0.16746691,-0.19081128,0.9538493,1.0308561,0.66020083,1.0559919,0.5171979,0.52770406,-0.3480374],[-0.7787808,-0.008312755,-0.1780567,-0.48370415,0.35223204,-0.5498642,0.29583552,-0.7346698,0.10713884,-0.1704408,0.11306947,-0.02356725,0.21382311,-0.17346635,0.5998714,-0.07053526,-0.09073403,0.092191376],[0.012029196,0.011908107,-0.2484767,1.264593,-0.85373944,-0.26193362,-0.660338,0.74062943,-0.28554145,-0.702825,-0.16722941,0.46179152,0.9958684,1.0726779,0.44082853,0.5114168,0.29967558,-0.1432011],[-0.76869935,0.34115568,0.17525065,0.15999442,-0.49437794,0.87348694,-0.5276255,0.17559843,0.17176434,0.18722947,-0.12719314,0.17408907,0.051208638,-0.14185886,-0.4593266,0.11995127,0.20499156,-0.1721416],[-0.04674022,-0.38118473,-1.4628186,-0.047094345,0.7261122,-0.046270296,0.81954944,-0.19116434,-0.5375223,-0.33290347,0.15070404,0.02437715,0.10229408,0.08374787,-0.0230739,-0.4579543,0.19219628,0.0668545]],"activation":"σ"},{"dense_2_W":[[0.14351524,-0.46819293,-0.4224769,-0.00477388,-0.019241339,-0.293288,-0.1430304],[0.013082477,-0.26986554,-0.13183518,-0.019898584,0.26537928,0.006188077,0.11345527],[0.7385166,-0.95441747,0.025136676,0.2132236,0.18503574,-1.2178441,0.01919843],[-0.2702514,-0.11104125,-0.62654877,-0.5112985,-0.38709098,-0.28173804,-0.08601629],[0.6713761,-0.22839609,-0.06097961,0.58245105,-0.6278035,-0.72068113,0.45237026],[-0.15852696,0.64257956,-0.55724066,0.21575698,0.22704268,0.6273873,0.011703053],[0.2014989,0.5201913,0.0019037927,-0.26834032,0.3011644,0.3858986,-0.528807],[0.46606636,-0.7134467,-0.048275437,1.742678,-0.4659715,-0.6684311,-0.139159],[0.15509929,-0.30987412,0.30098167,0.29494023,-0.37981874,-0.5524831,0.48631984],[0.14930598,0.34096712,-0.40304628,-0.4632963,0.04036466,0.5767117,-0.5780966],[0.31667084,-0.6918976,-0.00022687673,0.6150214,-0.45327514,-0.47609383,0.52913016],[0.246736,-0.3391219,0.104266286,-0.5017469,-0.018542334,0.12372901,-0.40627465],[-0.3095181,-0.40006125,-0.012567477,0.85648316,-0.17277096,-0.6989313,-0.0026190844]],"activation":"σ","dense_2_b":[[-0.31950915],[0.013885399],[-0.11509819],[0.0267938],[-0.018023722],[-0.012910115],[-0.027250042],[0.14641029],[-0.038134225],[-0.025109382],[-0.07372913],[-0.010580315],[-0.11711807]]},{"dense_3_W":[[0.20788044,0.033924606,-0.49926776,0.60941577,0.01432724,0.5210565,0.4180843,-0.25332364,-0.57750213,0.44128165,-0.3681372,0.36565867,-0.42293212],[-0.41391054,0.49958703,-0.41073647,0.074788004,-0.42877886,-0.39288726,0.07698003,0.2999807,-0.5140176,-0.23761888,-0.041945565,-0.54366297,0.10134992],[-0.06092816,-0.03296278,-0.10772118,-0.49357474,0.4073531,-0.56182015,-0.27668962,0.4813049,0.43785417,-0.38696533,0.3007674,-0.30370563,0.076707035]],"activation":"identity","dense_3_b":[[0.042803183],[0.06512138],[-0.045637704]]},{"dense_4_W":[[0.67749745,0.58833116,-1.2096345]],"dense_4_b":[[0.04982903]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.04 57700-J5420 4C4VL104'.json b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.04 57700-J5420 4C4VL104'.json new file mode 100755 index 0000000000..d83cf8beb0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.04 57700-J5420 4C4VL104'.json @@ -0,0 +1 @@ +{"input_std":[[8.1246],[0.9034975],[0.48962846],[0.03529078],[0.8946102],[0.8961149],[0.89784646],[0.8950175],[0.88876706],[0.87975305],[0.86753106],[0.035175696],[0.035196],[0.03522797],[0.035351437],[0.035319105],[0.035140432],[0.034972258]],"model_test_loss":0.00436203321442008,"input_size":18,"current_date_and_time":"2023-08-08_22-21-02","input_mean":[[23.931408],[-0.13063739],[-0.0062418687],[-0.010867324],[-0.13015318],[-0.13073899],[-0.13138658],[-0.12890545],[-0.126041],[-0.12821095],[-0.12799272],[-0.010868597],[-0.010878354],[-0.010887906],[-0.010903779],[-0.010916722],[-0.011080605],[-0.011242595]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1994641],[-0.07004483],[0.04915275],[0.83877975],[0.13017571],[-1.118901],[-2.8877945]],"dense_1_W":[[0.7289999,-0.5943847,-2.0439968,0.1408729,0.014804936,-0.33637556,0.6747208,-0.031742137,-0.1290714,-0.25518748,0.66278976,-0.9197349,0.2682647,0.546328,0.183721,0.025967568,-0.26059458,-0.0011381623],[1.41076,-0.98072547,-0.009269284,0.10443673,0.2938804,0.11221869,0.023663813,-0.06939159,-0.12669353,0.1424146,0.008126474,0.2754397,0.27598444,-0.34879938,-0.3349643,-0.2994688,0.12687577,0.18874463],[-0.027532505,-0.13840102,-0.00062686426,0.08105477,0.09020943,0.84446275,-0.33102164,0.1570382,-0.040472265,-0.041165356,0.11451907,-0.17574714,0.45523196,-0.45946833,-0.24832533,0.28354466,-0.39972436,0.14596395],[0.66988164,-0.24064808,1.7260609e-5,-0.26275954,0.17384419,-0.66181016,0.7648268,-0.19273083,-0.16069436,0.009835958,0.0616284,-0.6692072,0.19462675,0.5278246,0.2114967,0.26900306,-0.14592189,-0.11368748],[0.11565289,-0.0024831272,-0.0010179644,-0.14267418,0.16810471,-0.91123056,0.27969635,-8.086505e-5,-0.17184173,0.050572287,-0.026562115,0.06282069,-0.10155926,0.18597111,-0.29300997,0.30992374,-0.074498996,0.022345124],[-0.5783355,-0.5027382,-1.9156728,0.34726906,-0.037399657,-0.6643333,1.2222189,-0.09885066,-0.38930404,-0.31581903,0.7669719,-0.7148593,-0.22047392,0.79417294,0.10776789,-0.27856073,-0.040653545,-0.017878184],[-1.0912887,-1.4251192,-0.0131444745,0.22531693,0.86903757,-0.95501935,0.8628306,0.45285952,-0.35062796,-0.31220162,0.3204548,-0.38606355,-0.23453595,0.6793242,0.079120405,-0.5386359,0.07823436,0.10280147]],"activation":"σ"},{"dense_2_W":[[-0.25574526,-0.3905968,-0.12767315,0.63553566,0.47872183,0.3867656,-0.10150367],[-0.473101,-0.020838056,-0.07608826,-0.56385255,-0.42035136,-0.4738983,0.13273646],[-0.6361896,-0.44256058,0.04147736,0.18567401,-0.7560507,0.050679706,-0.29739967],[0.20478374,0.4391665,0.79290694,-0.77543974,-1.0579494,0.37044573,-0.8896225],[-0.24755138,0.51200044,0.3236799,-0.7383176,-0.9946837,0.61080724,-0.7761964],[-0.13916887,0.51012295,0.66491944,-0.13200557,-0.38854194,-0.084789805,-0.5896282],[0.8047527,-0.44165358,-0.54248846,-0.17254305,0.20149636,-0.100210406,0.2344219],[0.14421801,0.559272,0.97542876,-0.56136894,-0.044083755,-0.3763456,-1.0293499],[-0.3186897,0.246195,-0.54825604,0.7406943,0.06757733,0.32055023,0.5683255],[-0.6583612,0.06683394,0.36377707,-0.8377172,-0.20560446,0.017155979,0.25158632],[-0.2456164,0.44221503,0.3131527,-0.74782497,-0.2063776,-0.65555835,0.4115904],[-0.012511154,-0.41900334,0.076221436,-0.30040342,-0.14252718,-0.6142689,-0.06536472],[-0.25791836,0.03984432,-0.79253113,-0.08203707,0.73551714,0.45526472,0.046143852]],"activation":"σ","dense_2_b":[[-0.05287782],[0.014592212],[-0.2794043],[-0.146621],[-0.024146877],[-0.08312265],[0.0064267763],[-0.028975371],[-0.06253404],[-0.07943845],[-0.15185589],[-0.1090268],[-0.09112515]]},{"dense_3_W":[[0.27280647,-0.35127035,0.3050531,-0.7444606,-0.48179445,0.3789633,-0.25849003,-0.7030355,0.39771867,-0.39718223,0.3331106,0.47105515,0.47934374],[0.6726295,0.0630439,0.33165845,0.23258673,-0.7143303,-0.5131551,-0.27799842,-0.20236474,0.49068013,-0.21187434,-0.18124661,0.3935689,0.58411384],[0.08724511,-0.577467,-0.12056874,-0.40466517,-0.2821864,-0.29668784,0.5748119,-0.19402814,0.33314952,-0.35929132,-0.119962655,-0.44145095,0.39621937]],"activation":"identity","dense_3_b":[[-0.034004413],[0.04665063],[0.09105554]]},{"dense_4_W":[[-0.16068545,-0.31246737,-1.0885646]],"dense_4_b":[[-0.084667206]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.06 57700-J5220 4C2VL106'.json b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.06 57700-J5220 4C2VL106'.json new file mode 100755 index 0000000000..d092bd2a9a --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.06 57700-J5220 4C2VL106'.json @@ -0,0 +1 @@ +{"input_std":[[8.5646715],[0.6694641],[0.44737],[0.026886152],[0.6618878],[0.663675],[0.6667225],[0.66845155],[0.66961575],[0.6750626],[0.67718285],[0.02651441],[0.026632387],[0.026751718],[0.027223678],[0.027500574],[0.027766436],[0.027753508]],"model_test_loss":0.0021724598482251167,"input_size":18,"current_date_and_time":"2023-08-08_22-46-54","input_mean":[[26.029737],[-0.12229291],[-0.00878866],[-0.017934654],[-0.11821583],[-0.11995477],[-0.12079329],[-0.1245332],[-0.12938891],[-0.1290596],[-0.12787117],[-0.017873093],[-0.017926747],[-0.017972697],[-0.018089544],[-0.018230878],[-0.018407188],[-0.018459646]],"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.36057478],[-0.16445863],[3.0447748],[-0.022469003],[-0.6659535],[0.22373353],[-3.3467278]],"dense_1_W":[[-0.2376849,0.38567924,-0.38532612,-0.36708954,0.5690472,-0.2458212,0.07751702,0.2212711,-0.46712497,-0.6651113,0.29152408,-0.08464707,-0.018103926,-0.24177329,0.7310908,-0.058990337,-0.030694641,-0.11854629],[-0.0009913361,-0.077025376,-0.0065500247,0.046067335,-0.049254794,-0.9076616,-0.0003211376,0.14927548,0.15986459,0.24684179,-0.38523427,-0.22149515,0.0073642987,0.11100769,-0.09587406,0.30423173,0.025807435,0.13052529],[0.4883289,0.30375436,-0.3209597,0.13514149,0.10009362,-0.5936262,-0.22444941,-0.5819263,-0.34365678,0.076933436,0.21189494,-0.28389084,0.15581718,0.038204152,0.13983965,-0.040451385,0.29750612,-0.2481491],[-0.0014382814,-0.13296318,2.1798,0.10981343,0.6367385,-0.13009104,-0.9085796,0.6248629,0.5663407,-0.34945607,-0.026286183,-0.09252589,0.32709804,-0.5283437,0.06888198,0.34782213,-0.0396639,-0.15430778],[-0.9994939,0.6315036,-0.39675602,0.10514331,0.31768408,-0.28510046,-0.07353569,0.50522256,-0.25331956,0.31126252,0.05213495,-0.62016946,-0.14337428,-0.5253215,0.36232558,-0.39571983,-0.51797396,-1.1316494],[0.22178838,0.65085924,0.38133407,0.45604607,-0.14068341,-1.0306925,0.30833307,-0.18152203,-0.11089663,0.14951013,0.20940769,-0.18067391,-0.058062352,-0.21344402,0.2434591,0.2801642,-0.2628211,-0.070006035],[-0.5233583,0.20665656,-0.3384473,0.57583076,0.21660234,-0.94515306,0.1279248,-0.9392442,-0.08341735,0.21010256,0.09249825,-0.3514638,-0.11611042,-0.052045938,0.30880475,0.03110251,-0.06850783,-0.12792635]],"activation":"σ"},{"dense_2_W":[[0.6317959,0.6705066,0.20417199,0.21395814,0.10470223,0.14087297,-0.12592584],[0.08588891,-0.081240855,0.5760022,-0.22544949,-0.54510444,0.23245768,0.046276238],[-0.23795508,0.006579916,-0.9301286,-0.43157038,-0.09368898,-0.5191553,-1.0032965],[0.19750868,-0.0020027894,-0.33918998,0.1652486,0.17350669,-0.22918618,-0.3234288],[-0.40517142,-0.044377446,-0.7739969,-0.5347441,0.010773094,0.4562043,-0.7532082],[-0.04751407,0.86060613,-0.27241683,-0.10298587,-0.272535,0.35024813,0.59923714],[-0.010178873,-0.37041524,0.23013395,-0.109916255,0.29119843,0.0144743025,-0.61659116],[-0.40173405,-0.7648917,-0.6105268,0.308084,0.3153847,-0.49524066,0.04767403],[0.34532696,-0.43309987,-0.3433278,-0.1705872,-0.14465691,-0.22976112,-0.2721868],[-0.2980317,0.22856045,-0.27896377,0.14522254,-0.23149188,-0.20256028,-0.7814072],[-0.42373073,0.24569665,-0.9021987,0.44055524,0.0935608,-0.39574504,-0.36532554],[0.4243805,0.6297723,-0.28280917,-0.7076218,0.3524698,-0.013303791,0.6177503],[0.2468454,0.41776308,0.8151066,-0.42162442,0.018570265,-0.22239894,0.3231103]],"activation":"σ","dense_2_b":[[-0.026862532],[-0.14978711],[-0.005214749],[-0.07263994],[-0.08199721],[-0.045804795],[-0.0866205],[-0.06230838],[-0.07474814],[-0.05142401],[-0.07595316],[-0.18088594],[-0.2217942]]},{"dense_3_W":[[0.4388805,0.08923334,0.15111509,-0.17938077,-0.47965288,0.3093158,-0.08968161,-0.30242828,-0.5312799,-0.31545746,-0.6203474,0.31204218,0.09222002],[0.6803294,0.07273466,-0.66237503,-0.3718425,0.5460477,0.036861733,-0.56628793,-0.24408782,-0.33143753,-0.58106333,-0.13587737,0.29482222,0.0920682],[0.13532409,0.10077603,0.13572003,0.31044018,0.5533716,-0.27005956,-0.5925635,-0.2709091,0.1561405,0.20917125,0.27186853,0.25998002,-0.21802285]],"activation":"identity","dense_3_b":[[0.048612285],[0.05009564],[-0.057215467]]},{"dense_4_W":[[-1.0191514,-0.7887438,0.3675588]],"dense_4_b":[[-0.044860546]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.06 57700-J5420 4C4VL106'.json b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.06 57700-J5420 4C4VL106'.json new file mode 100755 index 0000000000..1fecceac92 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018 b'xf1x00CK MDPS R 1.00 1.06 57700-J5420 4C4VL106'.json @@ -0,0 +1 @@ +{"input_std":[[5.501248],[0.66097784],[0.39463165],[0.033822067],[0.6530338],[0.6543088],[0.65753746],[0.6521385],[0.65343094],[0.6497655],[0.64884734],[0.033726152],[0.03373755],[0.033731945],[0.03357754],[0.033446345],[0.033136833],[0.033040747]],"model_test_loss":0.005525775719434023,"input_size":18,"current_date_and_time":"2023-08-08_23-11-12","input_mean":[[29.792126],[-0.04522217],[0.021310413],[-0.0061475663],[-0.042909686],[-0.04259835],[-0.041554518],[-0.03512602],[-0.022554956],[-0.014822821],[-0.010136456],[-0.006064173],[-0.0060414663],[-0.006004127],[-0.005759402],[-0.005674136],[-0.005454047],[-0.0052154707]],"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.22852585],[1.3894823],[0.122581],[1.568894],[-0.24534363],[-0.081348546],[-0.062656134]],"dense_1_W":[[0.013982386,0.33132157,-2.8375375,-0.2577825,1.5605328,-0.44175422,1.4673861,0.30788234,-0.8293273,-0.35149613,-0.20746693,-0.2756051,0.19700375,0.56104803,-0.22943902,-0.9442609,0.29700294,0.33738524],[-0.7498267,-0.6624498,-0.04035213,0.64772356,0.22239381,0.752236,0.7376311,0.22121955,-0.68275774,-0.31479657,0.5766379,1.1977735,0.23543899,-0.03235867,-1.2889259,-0.5574388,-0.38497743,0.22112268],[0.0009815576,-0.42306572,0.3711868,0.32548174,-0.6101839,-0.07870281,-0.6290229,1.9477028,1.6681696,-0.12739149,-0.51679254,0.08266713,-0.13435598,-0.860949,0.19675814,-0.040138233,-0.25093862,-0.4040983],[-0.6976788,0.25720024,0.0430806,0.3727656,-0.017078696,-0.7331152,-0.580502,0.19809097,0.21536557,0.19312605,-0.34806177,-0.7567413,-0.37611556,-0.52824664,0.42451826,0.5508943,0.23928273,0.03949534],[-0.0014112287,0.0859497,-0.6420441,0.250335,-0.79082257,0.26661268,-0.060180947,0.01820874,-0.537458,-0.52666235,-0.65162635,0.5239975,0.1635141,-0.46365562,-0.10242774,0.7817764,0.06101124,0.6259446],[0.00052573474,0.8818668,0.010850059,0.47755244,-0.89471304,0.77187765,0.29030934,-0.61783034,-0.51367205,0.24970502,0.19460167,0.5136466,0.047820516,-0.5154373,-0.59959394,-0.4312206,0.19824192,0.24100806],[0.0010626772,2.6087165,-0.4629497,0.6686539,-1.1897037,-0.84694195,0.7046186,-1.2559808,-0.6581498,-0.23632167,0.63437265,-0.9454196,0.3392225,0.8520271,-0.0974469,-0.7927253,-0.193067,0.31566033]],"activation":"σ"},{"dense_2_W":[[-0.1513031,-0.93051434,-0.44909996,0.3317688,-0.4884435,-0.67838585,0.36971784],[0.35191703,-0.048789192,0.450275,-0.039996978,-0.20984387,0.5479376,-0.6852263],[-0.12902059,0.37265527,0.117599756,-0.5375113,0.20516054,0.87671304,-1.022533],[0.2674715,-0.007845689,-0.46048212,0.40396458,-0.2595625,-1.1184877,0.9535189],[-0.09281683,-0.718375,-0.5129304,0.29733542,-0.34454262,-0.65599316,0.31568497],[-0.40095973,0.17952402,-0.92779064,-0.5870983,-0.632861,-0.69213766,0.52468324],[-0.040474832,0.059520535,-1.0331043,0.04681406,-0.19046701,-0.5846261,0.25040108],[-0.27255413,0.27288094,-0.50989443,-0.3859617,-0.533083,-1.1661375,0.29892063],[-0.3460965,0.14177947,0.19027938,-0.369559,0.14183414,1.0526645,-0.33656517],[-0.17344117,-0.5123712,0.048518293,-0.69904965,-0.5825566,-0.75061584,0.3186972],[-0.6285899,-0.07304559,0.1665746,-0.12463482,-0.07659766,-0.5974891,-0.490175],[0.58759695,-0.7291639,-0.010515633,0.49339303,-0.17044984,-1.4153128,0.3785607],[0.44372615,0.21508391,-0.5312156,0.004264401,-0.71482986,-1.0418825,0.7020857]],"activation":"σ","dense_2_b":[[0.08850905],[-0.24293129],[-0.15789112],[0.17704202],[0.24606779],[-0.11684559],[0.029992603],[-0.024114225],[-0.09106879],[-0.3028866],[-0.14801322],[0.24917996],[-0.050585084]]},{"dense_3_W":[[0.21220079,0.05355472,-0.63798493,0.04563667,0.4423918,0.0664141,0.6139182,0.38336623,-0.76794696,-0.22829553,0.27020785,0.57621443,-0.1627959],[-0.16809194,0.27078873,-0.5811216,0.09835563,0.20550297,0.42691118,-0.17207801,0.2604539,-0.49177387,0.26957557,-0.43846667,0.29487315,0.57365525],[0.26274177,-0.48716888,-0.8324663,0.5967428,0.5331667,0.0806274,0.32409737,0.18292934,-0.39461344,-0.02578827,0.13157013,0.17259999,0.15921797]],"activation":"identity","dense_3_b":[[-0.101195484],[-0.051826347],[-0.04482993]]},{"dense_4_W":[[-0.1355761,-0.1400903,-0.5103199]],"dense_4_b":[[0.037658684]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018.json b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018.json new file mode 100755 index 0000000000..e902464df8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/KIA STINGER GT2 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.232792],[0.93400556],[0.47102702],[0.0364885],[0.9195544],[0.924241],[0.92906463],[0.92022413],[0.91261363],[0.9017492],[0.88828105],[0.036282632],[0.036326736],[0.036377504],[0.036556747],[0.03661433],[0.036583815],[0.036482345]],"model_test_loss":0.004662908613681793,"input_size":18,"current_date_and_time":"2023-08-08_21-56-04","input_mean":[[24.3614],[-0.1338536],[-0.00033556155],[-0.011434872],[-0.13066752],[-0.13287227],[-0.13457236],[-0.13018748],[-0.12908219],[-0.1285007],[-0.1288561],[-0.011373002],[-0.011407338],[-0.011437276],[-0.011411569],[-0.011443319],[-0.011484706],[-0.011544373]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.475858],[2.159764],[-0.061220553],[0.66681635],[-0.12575488],[-0.16302125],[-0.19944711]],"dense_1_W":[[1.086152,-0.8324169,-0.40090436,-0.69676965,0.07591572,-0.76153654,0.14704636,0.01003906,0.042237986,-0.13237216,0.010166433,-0.022998422,0.20724043,0.38396737,0.32619816,0.24285975,0.040859465,-0.15704209],[0.79297894,0.6081378,0.23360905,0.3370354,0.22393392,0.4906143,-0.30672908,-0.17856854,-0.25943467,-0.062457237,0.2529202,-0.0010873047,0.21262763,-0.5751331,-0.1401793,0.19357836,-0.55147094,0.32092294],[0.0029746895,-0.07445199,-0.009906404,-0.27658758,-0.3105713,1.3074434,-0.62331855,0.37446457,0.37921852,-0.076034345,-0.10986473,0.6444909,0.3060177,-0.34074512,-0.20372215,-0.4336765,-0.12278754,0.10387535],[-0.5095448,-0.72657496,-1.8959101,0.0026990066,-0.043687414,0.6157908,-0.9232839,0.5408708,0.51549035,0.19628379,-0.40704572,0.5014059,0.29025885,-0.7103715,-0.25765055,-0.30216625,0.5263961,-0.10350972],[-0.035269834,-0.043332044,-0.012723803,0.13811198,0.29201096,1.0091876,-0.8771376,0.18579352,-0.04488109,-0.17704397,0.23413378,0.19482689,0.20975055,-0.30010784,-0.35608566,-0.11924245,-0.050680783,0.22465675],[0.16372576,1.0684661,2.3885384,-0.4287634,0.70907384,0.0041387198,-1.4072537,-0.46730998,0.49696034,0.29660532,-0.27237156,0.50066346,0.015487968,-0.20723666,0.18176752,-0.10723471,-0.29568553,0.32300335],[-0.13845481,-0.49266118,-0.1540314,-0.26245895,0.5343135,-1.4516279,1.0021015,-0.034394637,-0.15333414,-0.23182547,0.20259102,-0.662138,0.034917697,1.1150106,0.17494841,-0.38734046,0.042199794,0.047024578]],"activation":"σ"},{"dense_2_W":[[0.16896504,-0.6318725,-0.24279357,-0.3490866,-0.46762058,-0.77701944,0.4309984],[0.3208485,-0.7041557,-0.71111524,-0.5957026,-0.13623692,-0.6515591,0.086047836],[-0.2776602,0.4528481,-0.17088494,-0.017503724,-0.32922515,0.08896287,0.44616765],[-0.5082411,-0.3947844,-0.3123438,-0.057989564,-0.27827948,-0.18070908,-0.18309323],[0.2809697,-0.37338483,0.65222776,-0.2953018,0.56409293,0.37588066,-0.1554319],[-0.56023234,-0.31079367,-0.08408593,0.20908839,0.10924668,-0.45463365,-0.6904562],[-0.80874884,-0.3383102,0.65157753,0.04253899,0.42724007,0.24657841,-0.5648559],[-0.3517047,-0.794073,-0.12099776,0.22774486,-0.23081534,0.2358734,0.24807717],[0.3229278,0.24695866,0.6025792,0.0022002668,0.32681346,0.54143,0.023995057],[0.45531654,0.27657107,-0.88627934,-0.57686245,-0.694657,0.27816367,0.3275702],[0.13451672,-4.2249675,-0.3837861,-0.6255863,-1.3373032,-1.6044973,3.5761082],[1.8231589,0.25132626,-0.5901763,0.246227,-1.138569,-0.8484137,1.5885205],[-0.32017943,-0.61674356,-0.49218202,-0.19713864,0.04268222,-0.5201525,-0.052188545]],"activation":"σ","dense_2_b":[[-0.052272886],[-0.11724032],[0.0015635947],[-0.00789324],[0.027887536],[-0.19823864],[-0.05784887],[-0.21397027],[0.004577288],[0.035433523],[0.12991314],[0.36998233],[-0.22823238]]},{"dense_3_W":[[0.2214185,0.117530905,0.07735763,-0.42819867,-0.40887833,0.053850636,-0.48472774,-0.2518017,-0.14455964,0.24991058,0.44975048,0.53486747,0.053818256],[0.4654577,0.13631766,-0.46057823,0.29975346,0.45944688,-0.43295076,0.47323555,0.55603576,-0.5924481,0.48736095,0.115073934,-0.056898475,-0.11687438],[-0.10070122,-0.5919317,0.3332405,-0.4515512,-0.44559675,0.47399083,-0.4619347,-0.37476748,0.5336691,0.34931633,0.3149243,0.08350989,0.5604568]],"activation":"identity","dense_3_b":[[-0.049824595],[-0.047182556],[-0.04280936]]},{"dense_4_W":[[-1.3079116,-0.3294201,-0.081988834]],"dense_4_b":[[0.051560275]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33252x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33252x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..e26a3cc055 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33252x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.4440565],[1.0028862],[0.36267638],[0.043678306],[0.99411225],[0.9974919],[0.99982977],[0.99254435],[0.979976],[0.95886236],[0.93553513],[0.043576345],[0.043595448],[0.043623183],[0.04364424],[0.043546103],[0.0433696],[0.0430985]],"model_test_loss":0.008524268865585327,"input_size":18,"current_date_and_time":"2023-08-09_00-29-37","input_mean":[[24.4086],[-0.0049972953],[0.0014472222],[-0.011187174],[-0.0048188227],[-0.0048300573],[-0.004904814],[-0.0039606136],[-0.0010262493],[0.0019202619],[0.004503857],[-0.011211575],[-0.011217863],[-0.011226438],[-0.011296215],[-0.011372426],[-0.011467264],[-0.011505676]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.9125192],[-0.13636686],[0.03213368],[-0.31655693],[0.113999754],[2.0803509],[-0.14560352]],"dense_1_W":[[-0.95836014,0.21151903,0.22434151,-0.002453981,0.13014187,0.5596393,-0.16869491,0.077085264,0.14677656,0.18345413,0.3242226,0.081019655,0.31809556,-0.38337004,-0.1310791,0.091724716,-0.5161398,0.25401837],[-0.14619967,0.5092507,0.0018193424,-0.21825372,-0.6449165,0.92955756,-0.13284698,0.06275948,-0.08579267,0.35583824,-0.18346414,0.69240427,-0.16283554,-0.18422249,-0.4282623,-0.027244156,0.02582024,0.1427941],[1.0047165,0.015293248,-0.02223404,0.052268773,-0.41808492,0.386935,-0.42386678,-0.5135216,-0.24958232,-0.5126944,0.43498564,0.06511655,0.37023535,-0.114505425,-0.434018,0.116916806,0.0014085828,0.17056656],[-0.06596466,1.2519224,4.74866,0.11355789,-0.51302266,0.28445745,-0.3053417,0.36204198,0.647499,-0.60584915,-1.0571691,0.32952857,-0.0777627,0.3500026,-0.4212409,0.12553304,-0.213272,-0.122726746],[0.03182641,-0.04754851,0.0029030219,0.11716655,-0.2078027,1.1533194,-0.8695852,0.119884744,-0.13354245,0.10176885,-0.00028662398,0.17332709,0.30320284,-0.038923513,-0.54227114,-0.296703,-0.06784862,0.34063476],[0.79970616,0.43940097,0.1962523,-0.118129455,-0.41660714,0.8126276,-0.6059025,0.39716172,0.52851135,0.2263594,-0.08056667,0.2966726,-0.277799,-0.5333231,0.38141567,0.33619776,-0.037727766,-0.2941527],[-0.10851895,0.8244319,0.011763683,-0.3026351,-0.49091163,0.84520894,-0.45440027,0.18291348,0.3710321,-0.5599674,0.15607528,0.6427925,0.29607928,-0.6419731,-0.39483508,0.15418234,0.043094926,0.031589415]],"activation":"σ"},{"dense_2_W":[[0.090692595,-0.4490544,0.24625836,-0.28497836,-0.109338924,-0.17009985,-0.4655793],[-0.669885,-0.61082786,-0.7925282,-0.20993824,-0.09015391,-0.2284157,0.15029445],[-0.44977325,-0.7235435,-0.36254668,-0.009851951,-0.1750803,-0.81676334,-0.23792371],[-0.2912695,-0.7815833,0.59908646,-0.25272,0.3039248,0.45951632,-0.4202785],[-0.38828993,-0.35401246,0.038314883,-0.47171852,0.44466084,0.3610528,0.35880306],[-0.054223396,-0.16728099,-1.057462,-0.61807907,-0.5963022,-0.87659144,-0.45062214],[-0.71182984,0.4919117,0.7364119,0.81453204,0.5218261,0.27536118,0.6695429],[-0.29577672,-0.26198146,-0.54313695,0.18035722,0.05070786,-0.31965226,0.13927855],[0.21813929,0.77980363,-0.26194462,-0.55060804,-0.27208176,0.4345995,0.8768538],[0.020967001,0.74533176,-0.30123144,-0.015122309,0.6550382,-0.28115028,0.10651019],[-0.16647351,-0.4178918,0.0001960198,-0.22321661,-0.60688865,0.119590364,-0.3315932],[-0.35213155,-0.464748,0.48835987,-0.05246687,-0.2060589,0.046264112,-0.5531751],[-0.2018665,-0.063097775,-0.8816539,-0.6065871,-0.92965955,-0.6128336,0.014582347]],"activation":"σ","dense_2_b":[[-0.06833847],[0.012058566],[0.1310296],[0.107997425],[-0.09987967],[0.143086],[-0.116671406],[-0.290171],[0.030431822],[-0.029693417],[0.08782878],[0.045630615],[-0.1426334]]},{"dense_3_W":[[-0.328282,0.23894995,0.5074013,0.16549413,0.1285143,-0.13915035,-0.42390114,-0.55725336,-0.66650647,-0.22075084,0.6307297,-0.21100862,0.16000639],[0.13250639,0.52014196,-0.043805785,0.3813022,0.5189094,0.79271615,0.17715289,0.54481244,-0.60536987,-0.60951567,0.16811334,0.21930675,0.5196005],[0.12788317,0.67415655,0.75158405,0.47136194,-0.47586355,0.5831669,-0.61521083,0.016530482,-0.19323698,-0.15085855,0.6299936,0.32262608,-0.11284211]],"activation":"identity","dense_3_b":[[-0.00085244136],[-0.018760033],[-0.008874107]]},{"dense_4_W":[[-0.7199532,-0.7991476,-1.1705709]],"dense_4_b":[[0.008561696]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33690x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33690x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..51117292a5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33690x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.680412],[0.85285246],[0.3884425],[0.03205119],[0.8500491],[0.85049105],[0.8514502],[0.8458795],[0.8377078],[0.82015127],[0.8038297],[0.031919472],[0.03195958],[0.03199403],[0.03202506],[0.03193417],[0.03161889],[0.031273898]],"model_test_loss":0.009339340031147003,"input_size":18,"current_date_and_time":"2023-08-09_01-20-38","input_mean":[[24.875648],[0.0041736388],[0.010556495],[-0.0046896804],[-0.0006003252],[0.0007327586],[0.0016012463],[0.0060975295],[0.006737074],[0.0062413993],[0.0063207992],[-0.0047094855],[-0.004715502],[-0.0047238604],[-0.004803993],[-0.0049048723],[-0.005078436],[-0.0051641]],"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.17949091],[-3.3968902],[-0.07593549],[0.5466097],[0.03951519],[-0.00081275025],[-0.2818511]],"dense_1_W":[[0.03091709,-1.3157804,-5.490474,0.2759644,1.2174463,0.13602142,0.30531374,-0.5896565,-1.0454189,0.024137963,1.2799596,-0.5758251,-0.67036736,-0.10264167,1.023584,-0.022457464,0.0423572,-0.072023876],[-1.5988137,-0.4146702,-0.038053937,0.63521147,0.58526903,-0.3437994,0.22620016,0.08106555,-0.7296988,-0.448912,-0.47618243,-0.71913254,0.12589867,0.8123822,-0.8396519,-0.6090673,-0.2687799,0.8079711],[-0.017673936,-0.20331055,-0.0016520993,-0.20215373,0.5373215,-0.8593722,0.20908187,0.03162978,-0.35333672,0.28399038,-0.056258224,-0.83239245,0.2361236,0.645981,0.21572426,0.23369376,0.030962478,-0.20426486],[0.6789347,-0.81145126,-0.007111559,0.050477408,0.7655705,-0.961523,0.547529,0.29283896,0.11744454,-0.23781727,-0.49012998,-0.77257276,0.14991538,0.8663245,-0.47725388,-0.17021804,0.22196974,0.09640378],[-0.023541855,-0.037035666,0.55035615,-0.4223085,-0.3162554,1.0634682,-0.31260857,0.38816622,0.5183418,0.00963337,-0.9862806,0.35859644,-0.107738346,-0.23407808,-0.29413855,-0.43096134,0.33290064,0.27480224],[-0.008280398,0.5080252,-0.0030781063,-0.24516527,-0.076359816,1.3229189,-0.40155405,-0.6557982,-0.084914856,0.34833226,0.048928127,0.06514959,0.33998683,-0.17689575,0.01783814,0.2977825,-0.10754876,-0.10063827],[1.4288968,0.108082466,-0.031209342,-0.06544005,-0.39778545,0.56522495,0.20475589,0.061119992,-1.1141357,-0.5437865,-0.2889625,0.3729891,0.55635136,-0.78631455,-0.120706834,-0.44492543,-0.4325845,0.863979]],"activation":"σ"},{"dense_2_W":[[-0.30310643,-0.12873378,0.39852074,0.46089283,-0.061163615,-0.47244763,0.08307709],[0.063253105,-0.0028390735,0.6435178,0.021038773,-0.24314678,-0.30235827,0.201086],[-0.4110213,-0.15217133,-0.47424644,-0.5498248,-0.40863478,-0.03644606,-0.165162],[-1.0989958,1.0549769,-0.81128615,-0.29547232,-0.11975506,0.7134397,-0.58516175],[-0.19868451,0.50366116,0.31972986,0.55210483,-0.34068644,0.11577465,0.32061067],[-0.22519416,0.26882055,0.6880949,0.3129291,0.34909117,-0.63557214,-0.45552465],[-0.90025496,0.63476175,-0.5909716,-0.7426136,0.48243678,0.16065429,-0.2919061],[-0.40407148,-0.5999356,-0.45084292,-0.50555605,0.49569342,0.78641695,0.6107878],[0.19533251,-0.18449633,-1.2098444,-1.1110471,0.83463633,0.6744162,0.47429064],[0.2519356,-0.2709652,-0.43452793,0.16501693,-0.1434805,-0.164745,-0.55715173],[0.5556845,-0.7147965,-0.7962351,-0.9492054,0.45981735,0.48979762,0.5166068],[-0.81657475,-0.76384026,-0.46112433,-0.4948062,0.8747664,0.9776133,0.7079956],[-0.20226195,-0.2591615,0.63573545,-0.01795919,-0.082302935,-0.42891976,0.26436207]],"activation":"σ","dense_2_b":[[-0.047301266],[-0.016725123],[-0.049676552],[-0.07829081],[-0.08770606],[0.0036026512],[0.084506735],[0.109670915],[0.11299696],[-0.022765491],[-0.008457604],[0.32036614],[0.0072946316]]},{"dense_3_W":[[-0.31729496,0.12889174,0.4225155,0.31061146,0.24402286,-0.10446856,-0.48671034,0.3845978,0.2660345,0.3093137,0.44116616,0.38984168,-0.3460159],[0.0358234,0.31940135,-0.21071792,-0.5266989,0.4593207,0.17332634,-0.66819376,-0.58671886,0.024372714,0.10640016,0.038679607,-0.11834236,0.5630265],[0.10535604,0.40837932,0.53625077,0.50682795,-0.11473014,0.5603721,0.14725567,0.080817915,-0.60673153,0.3120416,-0.47885686,-0.3498024,-0.46723753]],"activation":"identity","dense_3_b":[[-0.09867763],[0.05700437],[0.053955115]]},{"dense_4_W":[[0.45426035,-1.1652403,-0.79250604]],"dense_4_b":[[-0.060487706]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33721x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33721x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c2836f44b7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019 b'8965B33721x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.344813],[1.0432545],[0.40825117],[0.03865216],[1.0351241],[1.0378826],[1.0401973],[1.0332909],[1.0210356],[0.99993485],[0.97768444],[0.03855244],[0.0385832],[0.038604163],[0.038570847],[0.038460117],[0.038177595],[0.037886962]],"model_test_loss":0.007136368192732334,"input_size":18,"current_date_and_time":"2023-08-09_01-47-26","input_mean":[[23.442703],[0.0035179595],[0.00408823],[0.012855675],[0.0033001432],[0.0034371077],[0.0034639447],[0.0074803857],[0.012283631],[0.018361822],[0.021030566],[0.01292293],[0.012896148],[0.012869411],[0.012853285],[0.012912567],[0.013085337],[0.013110078]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.9161396],[-0.22788599],[2.968902],[-0.009821155],[-0.18505585],[0.32007432],[-0.014948483]],"dense_1_W":[[-1.0511566,-0.29206184,0.8199831,-0.15576178,-0.38916576,1.1162808,-0.5011398,1.0977064,-0.5836164,0.16133548,-0.053778384,0.4155293,0.19529353,-1.2087135,0.5919332,0.53749675,-0.08758931,-0.2511601],[-0.09181765,0.33316463,-0.78092057,0.0865392,0.3381008,-0.6151113,0.3660635,-0.72633314,-0.6142182,0.0048095123,0.37035215,0.12880829,-0.23413754,0.5010518,-0.5957484,-0.16287656,-0.04932468,0.26007095],[1.0044367,0.35445923,0.78647244,-0.32049915,0.06494051,0.12055531,-0.22746965,0.26814324,0.05199458,-0.037158065,-0.03201108,-0.14750965,0.3159122,-0.053600136,0.2906058,0.037501868,-0.01485947,-0.0680036],[-0.0018256758,-0.39913148,-0.0054692593,-0.47800386,0.4134914,-1.2333674,0.23680426,0.23282804,0.3836774,-0.06254318,-0.22074893,-0.4077003,0.09583857,0.025910378,0.62602794,0.43462366,-0.12558399,-0.17822921],[-0.0047321627,0.55899805,-0.00081870187,-0.25419536,-0.3257252,1.1633046,-0.39042598,-0.20668344,-0.21059605,-0.006790498,0.18107124,0.15924998,0.02389586,-0.06371585,-0.44330505,0.36899558,-0.3173842,0.09592921],[0.095295206,-0.08933727,0.59179264,0.40638387,0.5824425,-0.25730613,0.7851391,-0.4444533,-0.6680196,-0.08562278,0.53340226,-0.57082343,-0.17787477,0.7951686,-0.13043731,-0.13890404,-0.28527093,0.17461915],[0.034483686,-0.7067752,-4.019811,0.037841592,1.0770723,-0.28922594,0.22808869,-0.094380274,-0.6669433,-0.2657373,0.5791061,-0.7896833,-0.3886935,-0.19634429,0.7110262,0.7885148,-0.027897676,-0.19876951]],"activation":"σ"},{"dense_2_W":[[-0.20400774,-0.22307488,0.83168095,-0.99375516,1.4662783,-0.54265076,-0.15802172],[-0.12194149,0.3057387,-0.25224084,0.86720455,-0.6698733,0.3360012,-0.292734],[0.37222654,0.122192845,-0.57808757,0.31621838,-1.051521,-0.18741105,0.18480313],[0.41065305,0.56189334,-0.65107477,0.33912212,-1.1690532,0.32877356,0.27887678],[0.58805436,-0.3522203,-0.8155676,-0.47617933,-0.42864746,-1.1024536,-0.7342275],[-0.28316686,0.42155153,0.1351553,0.00020168634,-0.39858565,-0.038997397,-0.0620207],[-0.2676193,0.5867359,0.34214348,0.46678424,-0.9861758,0.19793625,0.35967037],[0.26571375,0.49524286,-0.6020044,-0.31548288,0.0521101,-0.50098413,0.02061019],[-0.35134986,0.5898171,-0.8887333,0.49588937,-0.2849531,-0.15621391,0.39262283],[0.11367938,-0.035091795,0.20310073,-0.29153082,0.5581006,-0.1919044,-0.28208742],[2.092034,-0.5602147,-0.42445743,-1.403385,0.8866187,-1.2998788,-0.3509462],[-0.010185507,-0.2035467,0.33422557,0.7748165,-0.65113765,0.4648428,0.25325134],[-0.07438275,-0.06233438,1.0291604,-0.95668316,1.2571595,-0.65489537,-0.20861064]],"activation":"σ","dense_2_b":[[0.09113021],[0.04578328],[-0.29403162],[-0.2192368],[-0.28878424],[-0.11772192],[0.008928186],[-0.10850013],[-0.18696937],[-0.114522],[0.1894073],[-0.0047073704],[0.20806429]]},{"dense_3_W":[[0.69607276,-0.25463992,0.19224781,-0.64511865,0.27775756,0.4589496,-0.7449188,0.41997963,-0.12018125,0.4897476,0.9306085,-0.10257274,0.84184134],[-0.64124787,0.752149,-0.2837551,0.29449946,0.26526523,0.30954522,0.2830915,0.5043165,-0.16997944,-0.43304175,-0.694841,0.057517774,0.09658051],[-0.03208746,-0.26029688,-0.74573,-0.1032463,0.13831443,-0.64660555,-0.21513747,-0.40704614,-0.48390958,-0.06794522,0.12341715,-0.26635003,0.78502613]],"activation":"identity","dense_3_b":[[-0.09851486],[0.03344719],[-0.047249585]]},{"dense_4_W":[[0.797171,-0.25833753,0.61133206]],"dense_4_b":[[-0.06307325]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES 2019.json b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019.json new file mode 100755 index 0000000000..57e7e301d6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.041581],[1.1167691],[0.37027505],[0.04339891],[1.1085886],[1.1118982],[1.1143059],[1.1035876],[1.0856115],[1.0586617],[1.030805],[0.04334689],[0.043362875],[0.043374643],[0.04328665],[0.04312567],[0.04288237],[0.04255028]],"model_test_loss":0.00914697628468275,"input_size":18,"current_date_and_time":"2023-08-09_00-04-02","input_mean":[[24.044405],[-0.004445901],[0.0057743173],[-0.0008446529],[-0.0052520004],[-0.0049055307],[-0.004310624],[-0.0021481782],[-0.0005770088],[0.0025430974],[0.005762188],[-0.0008080605],[-0.00082908414],[-0.0008470768],[-0.0009064238],[-0.0009857891],[-0.0010071733],[-0.0010139564]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.3401184],[-4.1053653],[-0.010608114],[0.2289179],[-0.69536865],[-0.2987435],[-0.28003243]],"dense_1_W":[[1.7534523,-0.08379865,0.21821876,-0.111209184,0.18547846,0.70984817,-0.7669529,0.01540298,0.34365195,0.024990361,0.25576633,-0.04872505,0.058915216,-0.199681,-0.08895335,0.5293662,0.3860833,-0.47484013],[-1.6871309,-0.09608493,0.21602522,-0.25279704,0.15465249,0.53819185,-0.40238786,-0.01616075,0.06256271,0.22947508,0.23026761,0.24505456,0.014156367,-0.39275125,-0.00928132,0.6701992,0.068403155,-0.3019433],[0.004725199,-0.4235836,0.0013364913,0.15324596,0.42727017,-0.5808631,0.26156494,-0.20967181,-0.15404399,-0.09115835,0.18597606,-0.24034514,0.07084023,0.07770485,0.18210891,0.39121026,0.31440163,-0.5783728],[-0.19552681,-0.41310206,0.000722477,-0.0605445,0.701027,-1.3483342,0.5252242,-0.04271466,-0.11926105,0.18295698,-0.06785281,-0.47475234,-0.4607312,0.5883256,0.5187908,0.114911854,-0.25203437,0.08746814],[0.4152751,-0.14281093,0.7790405,-0.100202,0.28926933,-0.3125703,0.13834746,-0.3347568,0.43060276,0.55356705,-0.1735469,-0.11919702,-0.020521542,0.46576738,-0.06227651,0.036938347,-0.5694443,0.35215282],[0.3015953,-0.66961235,0.0007066811,0.419904,0.31045586,-0.9015735,0.7159605,-0.13024196,0.19127548,-0.18470418,0.06677055,-0.77706313,0.2998383,0.42251042,-0.21567652,-0.38658017,0.039470255,0.2681703],[-0.034314536,-1.076988,-3.4866838,-0.06330224,0.97281605,0.28214806,0.5845572,-0.5232068,-0.82733965,-0.2174799,0.6705298,-0.90485686,-0.048824865,0.40581775,0.6931158,0.17884906,0.25361615,-0.51271003]],"activation":"σ"},{"dense_2_W":[[-0.31351262,-0.32074958,0.8266476,0.8546215,0.3378021,-0.06759033,-0.46708575],[-0.8333776,-0.28922173,0.16795295,0.98310614,0.114590034,0.58432436,-0.13839144],[-0.6834294,-0.23853575,0.6451696,0.105569854,0.27903724,0.41774848,0.29000074],[-0.65618104,-0.20165549,-0.09106172,0.8227704,-0.23443276,0.53824764,0.47971424],[0.6953251,1.2419958,-0.79052114,-1.2340282,0.18634371,-0.6665756,0.107695915],[0.14654803,-0.19937792,-0.34062067,-0.7089461,0.40067112,-0.52197015,-0.085414894],[-0.2932009,2.5196638,-0.104791835,0.20051786,-2.2182112,-0.29118708,-2.7579544],[1.5122235,0.7356845,-0.89097416,-1.6861671,-0.033902757,-0.38292047,-0.13017933],[0.4886302,0.92094517,-0.91408855,-0.3532557,0.51951903,-0.95678043,-0.10919232],[-0.5293851,-0.20095,0.6889325,0.38757306,-0.377088,0.58944535,0.0955727],[-0.4349411,0.17035034,-0.15226962,-0.32203415,0.0838514,-0.059919562,0.04385721],[-0.26080495,-0.63391984,0.3301537,-0.1671539,-0.5050505,0.43088788,0.14715135],[0.45397362,0.3551525,-0.8346096,-0.65694994,-0.13430665,-0.31082925,-0.24663672]],"activation":"σ","dense_2_b":[[-0.15302955],[-0.15477453],[-0.1963815],[-0.2491886],[0.30184123],[-0.084158726],[-0.49648997],[0.67838836],[0.30030432],[-0.28645435],[-0.19416146],[-0.12059393],[0.36774662]]},{"dense_3_W":[[-0.30843228,-0.1345852,0.11176096,-0.5151945,0.29644585,0.12701263,0.0053969924,0.5684098,0.42676082,-0.370609,-0.16872759,-0.4540934,0.006954758],[0.43918204,0.6085673,0.51018596,0.6114487,-0.4061561,-0.1493339,-0.8047057,-0.18715277,-0.6292988,0.57502186,-0.1399395,-0.07194364,-0.8415874],[-0.39917964,0.53317773,-0.4621838,-0.015575044,0.50181717,-0.4820892,0.09182787,0.31296906,-0.39892152,-0.06316368,0.0068018823,0.37321454,-0.22843313]],"activation":"identity","dense_3_b":[[0.09777908],[-0.097871915],[0.098439135]]},{"dense_4_W":[[0.66679657,-0.8622704,0.007841214]],"dense_4_b":[[0.10087897]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33252x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33252x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..0a80cfd0df --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33252x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.8285],[1.1188737],[0.47342262],[0.05126763],[1.1050262],[1.1092741],[1.1127472],[1.0983341],[1.0797789],[1.0525575],[1.0272892],[0.050943088],[0.05100398],[0.051071826],[0.050979707],[0.050723284],[0.050214104],[0.049760416]],"model_test_loss":0.008092939853668213,"input_size":18,"current_date_and_time":"2023-08-09_03-05-40","input_mean":[[22.832628],[-0.048477665],[-0.0015699231],[-0.010172784],[-0.044837113],[-0.045658123],[-0.04680434],[-0.045073368],[-0.043960348],[-0.039256155],[-0.03613124],[-0.01008188],[-0.010097768],[-0.010119672],[-0.01006197],[-0.009999101],[-0.009887467],[-0.0099477405]],"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.15260588],[-3.2536018],[0.043962248],[-0.090603456],[3.5123594],[0.029381314],[0.24542183]],"dense_1_W":[[-0.018435279,1.2527711,4.230789,0.018031234,-1.4346001,-0.15953755,0.061720558,0.35755047,0.37375236,0.58350205,-0.88426137,0.59743536,-0.10547891,-0.33643883,0.21758044,-0.13492396,-0.36006564,0.20787364],[-1.5682247,-0.035563767,0.19118826,-0.43019408,0.14057355,1.0501944,-0.82073975,-0.14322114,-0.08808569,-0.013670676,0.67794806,0.5938818,-0.4189539,-0.5114651,0.5719749,0.39641926,-0.06207111,-0.38755944],[0.18513687,-0.71987325,-0.011965726,0.018532543,0.258614,-0.97279245,0.59959203,-0.22303152,-0.17081428,0.23112038,-0.04976506,-0.05941518,-0.5961051,0.20494816,0.33866015,0.023431057,-0.02673853,-0.027390076],[-0.0032866031,-0.46916834,-0.03375909,0.22316715,0.33248055,-1.0202448,0.7034391,-0.2351044,-0.13222691,-0.14861125,0.23242648,-0.035604436,-0.32533994,0.19433749,0.29952523,0.31940687,0.045100812,-0.16624303],[1.7107601,0.027855793,0.2056705,-0.48186287,-0.19466202,1.5228227,-1.2701944,0.4916286,-0.15901598,-0.4066886,0.8435757,0.29054174,-0.1801262,-0.5044365,0.6704808,0.3633137,0.21051206,-0.6159748],[-0.031839076,0.52859527,0.016463235,-0.66599137,-0.79132366,1.1579964,-0.58045477,0.13249406,0.4277288,-0.09080096,-0.18318327,1.2263923,0.5539931,-0.8813475,-0.576685,-0.13317113,0.06021947,0.3146238],[0.9673127,0.39608166,-0.02511569,-0.0046267007,-0.64154017,0.57387704,-0.346695,-0.9827318,-0.61006016,-0.05364682,0.4217874,0.039297163,0.57102877,-0.43577328,-0.42087564,-0.10482892,-0.18938681,0.42926088]],"activation":"σ"},{"dense_2_W":[[0.41543797,1.1738479,-1.0748413,-0.68251723,-0.23535445,-0.014745399,-0.074383706],[0.42731732,-0.5514982,0.074961975,0.59009844,-0.3027509,-0.5616325,-0.28420764],[0.11749416,0.3126048,-0.5657671,-0.26303276,0.39180964,0.77518344,0.33590633],[-0.14604264,-0.6352743,0.2253331,0.58631027,-0.3192098,0.20994529,0.007633578],[0.3937283,-0.078028925,-0.5664736,-0.124979004,0.48761243,0.3210194,0.07755378],[0.27684122,0.7713517,-0.31364554,-0.5921977,-0.18462463,0.47987497,-0.61615944],[0.29768473,0.41583326,-0.9713817,-0.35854688,0.09248492,0.31493294,0.040650316],[-0.112342775,-0.1878338,0.5448513,0.7486996,-0.56119305,-0.5220495,-0.5096629],[0.19718203,0.4135663,-0.28367767,-0.1573982,-0.19590908,0.104961894,-0.49705368],[0.77046275,-0.19075769,-0.46065587,-0.13512029,0.47356725,0.38181776,0.71995],[-0.18105839,-0.55663234,0.33512706,0.016357377,-0.55092573,-0.17190884,0.08964193],[0.31455922,0.20463717,0.033571117,0.43436614,-0.41633865,0.19258104,0.33313715],[0.08064332,-0.68228775,0.7010398,0.24371538,0.22882102,-0.54400474,-0.08356227]],"activation":"σ","dense_2_b":[[-0.43676507],[-0.006130799],[-0.15402001],[0.026011059],[-0.12692562],[-0.43001604],[-0.33370367],[0.05327725],[-0.13920946],[-0.041543793],[0.06294844],[0.038047582],[-0.014338484]]},{"dense_3_W":[[-0.5613603,-0.17332096,-0.1882884,0.18131785,0.23258103,-0.44985455,0.1740991,-0.45171297,0.35409343,0.20938201,0.22257555,-0.12860954,0.31328893],[-0.2600292,0.064422175,-0.56568885,0.34872493,-0.014263635,-0.0898774,0.34932417,-0.04355818,0.33161792,-0.4384388,0.21339151,0.4251023,0.3974905],[-0.6470215,0.23639736,-0.59931415,0.20245089,-0.12388959,-0.57567924,-0.40078935,0.7244318,-0.4283423,-0.62795776,0.66424334,0.4475859,0.5476653]],"activation":"identity","dense_3_b":[[-0.025201272],[0.023392009],[0.030334707]]},{"dense_4_W":[[0.7327956,-0.77316505,-1.070442]],"dense_4_b":[[-0.028413372]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33590x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33590x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..3d325cc48d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33590x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.4012003],[0.9084744],[0.3989995],[0.04316203],[0.9050049],[0.9055595],[0.90684354],[0.90098166],[0.89330155],[0.8834002],[0.872413],[0.04302624],[0.0430567],[0.04308886],[0.043104757],[0.043008905],[0.042880133],[0.042604897]],"model_test_loss":0.008806328289210796,"input_size":18,"current_date_and_time":"2023-08-09_03-30-27","input_mean":[[21.916237],[0.0112053035],[0.010207012],[-0.0057604206],[0.008076623],[0.008825207],[0.009262305],[0.015784515],[0.02193309],[0.029440241],[0.03471279],[-0.0059500956],[-0.0059324577],[-0.0059074587],[-0.005736568],[-0.005659438],[-0.005594903],[-0.005524908]],"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.113812774],[0.3718239],[-0.35734212],[-0.06904639],[1.668204],[-0.10319402],[1.6449547]],"dense_1_W":[[0.0018752348,1.2200488,-0.0005085679,-0.23384064,-0.9084212,1.2045864,-0.25443128,-0.13910054,-0.11256105,0.2179745,-0.08867826,0.16488013,0.35168028,-0.41050524,-0.1787089,0.43994418,-0.023817252,-0.08793733],[-0.04312678,0.43942824,0.11929371,-0.043850373,0.66910386,0.82385707,-1.033506,-0.08680779,0.37272778,0.28918013,0.2645954,-0.54255456,-0.44501963,-0.69097805,-0.45430678,-0.16467454,-1.2062163,-0.99093336],[0.06042321,1.267067,-0.12690838,-0.019565715,-0.8008834,1.6967841,-2.0936992,-0.73309845,-0.57475215,-0.97032815,0.53988296,0.0694317,0.19901374,-0.14523467,2.1987944,1.229183,0.41753313,0.53431153],[-0.005792214,1.6355677,3.5869675,-0.10959287,-2.1918557,-0.3136515,0.09652676,0.25249338,1.2399355,0.40560603,-1.0075005,0.6674059,0.023685906,-0.21504764,-0.5677693,-0.24701545,0.07742603,0.32459712],[0.9218543,-0.52115893,0.6683122,-0.49547228,-0.24380639,2.4874837,-1.3078512,0.50638986,-0.0022452448,0.18564974,-0.75149935,0.63630646,0.5417998,-0.47571868,-0.15869981,-0.19382617,-0.10689215,0.2615386],[0.0010884085,-0.07797116,-0.0022833152,-0.39120084,-0.54005134,2.2633855,-1.2395691,0.12394578,0.00030362024,0.113682985,-9.3380804e-5,0.9033568,0.15587245,-0.3935733,-0.43733695,-0.7241415,0.28267393,0.3301238],[0.8352049,-0.1388708,-0.62930346,0.028555281,0.0054504126,-1.2476301,0.70772225,-0.15140262,-0.14464574,0.05757089,0.6135008,-0.12531146,-0.37553704,0.107572205,0.24616258,0.23056793,-0.0013457185,-0.12736495]],"activation":"σ"},{"dense_2_W":[[0.08851535,0.6167409,0.05891007,0.5029618,-0.24713053,0.92836577,0.004156225],[-0.52199286,-0.36050865,-0.34034714,0.061794642,-0.109552786,-0.6266087,-0.31169102],[-0.7092186,-0.6801971,-0.26420647,0.39295742,0.05788309,-0.20119189,0.14084439],[-0.913237,-0.04797298,-0.48572946,-0.4032914,-0.7313818,0.1410581,-0.65766007],[0.6392394,0.24680118,-0.33827496,0.19102065,-0.08179918,0.7670678,-0.85375905],[0.8877098,-0.51691145,0.18935633,0.81099534,-0.6835733,0.80652905,-1.7127429],[0.26195377,-0.3456285,-0.71416736,-0.26705638,0.22344078,-0.27062252,-0.74219775],[0.1864041,-0.4139672,0.72243375,0.9860188,0.8927306,0.20730978,-0.0032860562],[0.029019173,0.7799921,-0.2924467,0.3229736,0.47412586,0.4905737,-0.71431655],[-0.9057719,-0.34483552,-0.6339002,0.44039795,-0.0815456,-0.6209059,-0.35469422],[-0.7642978,-0.21761882,-0.520907,0.38787058,-0.4754871,-0.47818175,0.5515306],[-0.45161492,-0.341044,-0.13645881,-0.65541065,-0.56910133,-0.19134521,-0.15136522],[0.8295409,0.03669771,0.38553452,0.446268,-0.31960988,0.7838232,0.068201065]],"activation":"σ","dense_2_b":[[-0.26521447],[0.122462295],[0.078140855],[-0.01945191],[-0.5003525],[-0.746069],[-0.45675567],[-0.3471183],[-0.29891852],[-0.21655038],[0.10162625],[0.14103983],[-0.29887974]]},{"dense_3_W":[[0.33197686,0.62199056,0.4247967,0.44158882,-0.12146235,-0.3375973,-0.44318354,0.0066761184,-0.13157894,-0.3443774,-0.44290087,-0.4360939,-0.33858845],[-0.4692612,0.46826863,0.054673724,0.283901,-0.01885255,0.2757358,0.31324366,0.4469478,0.3509845,-0.09880974,0.26294768,0.55622286,0.2389067],[-0.18467896,0.5184241,0.67473835,0.17306642,-0.28510845,-0.4426461,-0.046053376,-0.4500548,-0.50170314,0.26636368,0.60352683,0.80709,-0.5185129]],"activation":"identity","dense_3_b":[[0.08293219],[0.03822249],[0.060750734]]},{"dense_4_W":[[-0.12425623,-0.45378837,-1.2967176]],"dense_4_b":[[-0.056304324]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33690x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33690x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..d6d0089b3b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33690x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.15974],[1.045871],[0.3754209],[0.049849007],[1.0412234],[1.042158],[1.0431666],[1.0308688],[1.0145941],[0.9937998],[0.9695306],[0.049699858],[0.049720936],[0.049743976],[0.049645588],[0.049436506],[0.04910737],[0.048739962]],"model_test_loss":0.007239425089210272,"input_size":18,"current_date_and_time":"2023-08-09_03-55-25","input_mean":[[24.619316],[0.008315056],[-0.002209118],[-0.0009603967],[0.009455924],[0.009065263],[0.008578662],[0.008924362],[0.010585633],[0.012140301],[0.013719992],[-0.0010016458],[-0.000992241],[-0.0009847628],[-0.0009990969],[-0.0010099016],[-0.001055779],[-0.0010218886]],"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.01751012],[-2.792658],[-0.0036304477],[0.23906733],[-0.67204577],[2.824586],[0.020084955]],"dense_1_W":[[-0.0013722869,0.22783591,-0.010999781,-0.7420795,-0.5004164,0.8528246,-0.40537062,-0.3579778,0.20538606,-0.06207938,0.037892103,0.16028564,0.39440292,-0.47795537,-0.4981077,0.40456992,0.21351387,0.69398695],[-1.0907546,-0.37810156,0.5256466,-0.06323017,-0.28386277,0.40039942,-0.5656102,0.8704236,0.7594878,0.08758965,-0.2850435,-0.19939376,0.24667862,-0.5915887,0.7124935,0.33228317,0.40017298,-0.76232785],[-0.0022229636,-0.3566666,-0.0003173761,-0.2331804,0.32406712,-1.133683,0.29599214,0.07946594,0.19223347,0.10109193,-0.21318913,-0.4314191,-0.42940962,-0.059293773,0.96213984,0.3274362,-0.051667612,-0.10392697],[-0.17001934,0.31136727,0.00019800797,-0.39408368,-0.3893838,0.79402786,-0.490016,0.24215008,0.092356876,0.15550926,-0.18264957,0.2104772,0.2055425,-0.6079279,-0.100256115,0.35539958,-0.22659436,0.038026005],[0.5023145,0.415188,0.00086236314,-0.12141318,-0.3487774,0.5604944,0.29927528,-0.12137407,-0.20653158,-0.15300342,0.23502706,0.29839256,-0.15043968,-0.32693824,-0.2807662,0.010725707,-0.37295666,0.29116592],[1.1302519,0.29944658,0.5366313,-0.11482564,-0.48424527,-0.06633996,-0.12468005,0.48905316,0.53044945,0.3081709,-0.33819312,-0.054454595,-0.13536377,-0.1478465,0.49783385,0.4558332,0.22333856,-0.6476589],[0.019672142,-1.1385515,-2.8618698,0.5519799,0.5598079,-0.19218405,0.6098082,-0.34360152,-0.7758295,0.28531215,0.9757375,-0.13217533,-0.31033158,0.45779207,-0.3197823,-0.21947153,-0.24169978,0.12113089]],"activation":"σ"},{"dense_2_W":[[0.55490434,-0.06586316,-1.7488526,1.0742077,-0.26382893,0.5936367,-0.048338335],[0.22041039,-0.07157286,-1.3535683,0.9498899,0.59100443,0.13426219,0.1314393],[0.060050584,-0.37686986,0.93393904,-0.8473732,-0.8137314,0.3513347,0.13401532],[0.031560004,-0.67102486,-0.4638209,-0.16865264,0.19910118,-0.0022606154,0.014461398],[-0.26292112,-0.8773706,-0.27558997,-0.98985237,0.115747504,0.15425104,-0.32170153],[0.3645839,0.23929603,-1.0847621,0.7692537,0.053893678,0.29140672,-0.55564046],[-0.29527074,-0.8282215,0.6947013,-0.34474802,0.33731544,-0.47208363,-0.2703771],[0.10967559,-0.45384485,1.1605363,-1.1405638,-0.16794126,0.009725002,0.25623515],[-0.47460532,0.014810191,-0.049116056,-0.103007615,-0.7748003,0.020772532,0.164838],[-0.23443891,0.22693226,0.8323869,-0.5907415,-0.18859898,-0.5243307,0.024510408],[0.35138795,-0.71696883,0.6208494,-0.21413626,-0.30234987,-0.19566858,0.203605],[0.29550865,-0.5253764,0.44364005,-0.15027097,-0.52989537,-0.6267321,0.56808716],[-0.16024043,0.7365189,-0.48886365,-0.01982367,0.4768797,-0.4950252,-0.5998298]],"activation":"σ","dense_2_b":[[-0.28562254],[-0.28906816],[-0.004571446],[-0.16752788],[-0.11627307],[-0.17883891],[-0.08537872],[0.15237623],[-0.16480568],[-0.032770704],[0.038674396],[0.07090385],[-0.14601162]]},{"dense_3_W":[[0.6690154,0.071317546,-0.10587343,0.4107949,-0.19921759,0.026011487,0.083912425,-0.68911606,0.29841265,0.040238436,-0.19996041,-0.055458866,0.08188202],[0.8015601,0.021846859,-0.5534128,0.6944063,0.11055347,-0.0645739,-0.38998172,0.34884468,-0.06341523,-0.43967232,-0.49337965,-0.21307902,-0.22756565],[0.45879635,0.8307091,-0.22719614,-0.40354267,-0.23650342,0.8461611,-0.037451327,-0.43379617,-0.20254998,-0.5837768,-0.53370506,-0.6808303,0.31557706]],"activation":"identity","dense_3_b":[[-0.057544097],[0.14032708],[0.144235]]},{"dense_4_W":[[0.14295731,0.35312867,0.8483934]],"dense_4_b":[[0.13570417]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33721x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33721x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..8ad70e4908 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019 b'8965B33721x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.935237],[1.1821631],[0.40853298],[0.042256694],[1.1741917],[1.1772016],[1.179894],[1.1685648],[1.1510983],[1.1243435],[1.0962706],[0.042120658],[0.042167474],[0.04220416],[0.04219818],[0.042086348],[0.04190632],[0.041555516]],"model_test_loss":0.00865387637168169,"input_size":18,"current_date_and_time":"2023-08-09_04-21-28","input_mean":[[23.898808],[-0.061529078],[-0.0012386319],[-0.0038458514],[-0.05761159],[-0.058545504],[-0.058786135],[-0.0583106],[-0.05796732],[-0.055892948],[-0.055688474],[-0.0037394448],[-0.003766136],[-0.0037952624],[-0.004012165],[-0.0041559814],[-0.004327924],[-0.004494689]],"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.04631648],[-0.06555636],[-0.27339923],[1.8481191],[-1.92371],[-0.07156656],[-0.097226106]],"dense_1_W":[[0.007923849,-0.33078587,0.032207586,0.18164907,0.23387666,-0.6738162,0.24611568,-0.37660727,0.110470906,-0.2237764,0.11238094,-0.31033733,0.20521657,0.43043175,0.14618683,0.4109157,-0.045097392,-0.018656284],[0.0059264796,-1.4818896,-3.214948,0.72709614,1.4496776,-0.11549172,0.05585469,0.067367174,-0.5819717,-0.3143236,0.77938473,0.07448307,-0.5458307,-0.06897672,-0.307255,0.16108052,0.27242532,-0.31170502],[-0.029176371,-0.20550303,-0.011238303,0.40422836,0.651665,-1.205251,0.51314026,-0.06254734,-0.11725389,-0.004469061,0.057605438,-0.16204368,-0.20271099,-0.023192484,-0.09425388,0.12548377,0.16910473,-0.18110643],[0.913644,-0.22446877,-0.21192145,-0.35401252,0.32936195,-0.61308485,0.41242036,-0.054412857,-0.02144861,-0.7086938,0.46699503,-0.004493464,0.0013601056,0.81566185,-0.3642738,-0.123768955,-0.16624025,0.25355738],[-0.8782031,-0.4412915,-0.21091951,0.22394417,0.46380237,-0.52400494,0.51977473,-0.3934778,-0.035707317,-0.24971296,0.28146827,-0.033155452,-0.19057514,0.6566132,-0.22685449,-0.43057168,-0.40194762,0.46104968],[-0.009924806,0.34001565,0.008358892,0.17911334,-0.2556001,1.0795789,-0.789162,0.09035937,0.12697068,-0.20735092,0.08643546,0.22710793,0.63394094,-0.51461715,-0.55570894,-0.44454226,0.11515733,0.27629676],[-0.010439776,0.4010142,-0.008085905,0.10725627,-0.02110396,1.1806133,-0.8606922,-0.046847433,0.20864236,-0.11985588,0.0857068,0.15260428,0.2444861,-0.03642649,-0.59779644,0.32445312,-0.30190656,0.18685275]],"activation":"σ"},{"dense_2_W":[[-0.52392507,-0.053534046,-0.13596098,0.18724343,-0.7713173,0.71427715,0.7350986],[0.103605255,0.41991144,0.39895838,0.5297367,0.19954357,-0.07358835,-0.3800046],[-0.13534087,-0.07954504,-0.7891074,-1.04155,0.031840924,0.41851434,0.057672217],[0.18972358,0.53236634,0.6439358,0.110999696,-0.29787117,-0.5545026,-0.57896006],[0.46418715,0.073028445,0.16890584,0.31551063,0.44200546,-0.26141322,-0.8365631],[0.12976393,-0.42719504,-0.051802225,-0.9134454,-0.3056411,0.13355789,0.07198249],[-0.63852465,0.2367602,-0.17162862,0.09097974,-0.52287674,-0.110359624,0.25404847],[0.5456408,0.06541811,0.044041876,-0.079029,-0.19681188,-0.21370907,-0.32052663],[0.09726532,-0.21465707,0.609168,0.0588532,0.20782056,-0.029063694,-0.6592013],[0.014375357,-0.883838,0.1768969,-0.9506456,0.25958836,-0.26901084,-0.1747859],[-0.35349178,-0.045510672,-0.17568451,-0.18829311,-0.38173485,0.728441,0.254347],[0.10186036,-0.28966042,-0.20384645,-0.1784742,-0.72974414,0.7239003,0.84594786],[-0.13665237,-0.15572082,-0.23385355,0.24481148,-0.43725377,-0.0049998006,-0.47707897]],"activation":"σ","dense_2_b":[[0.058335815],[-0.08154515],[-0.10210349],[-0.017691245],[-0.09656311],[-0.11049739],[-0.0880714],[-0.0022098408],[0.0071529862],[-0.1155999],[0.015483792],[0.025640251],[-0.042404395]]},{"dense_3_W":[[-0.12712753,0.21623728,0.28793716,0.1288633,0.64396095,0.3019295,0.46078098,0.57720184,0.17094983,-0.29401407,-0.25292718,-0.6778351,-0.41588908],[-0.22999658,0.09658766,-0.6467794,0.43180892,0.09925922,-0.5388918,-0.21273088,0.39167225,0.42423695,-0.09006673,-0.5738687,-0.0685332,0.021032669],[-0.32774815,0.556063,0.13476838,0.33248642,0.581253,-0.13394178,-0.5767492,-0.31769308,0.14392637,-0.24081674,-0.4971341,-0.698404,0.42863867]],"activation":"identity","dense_3_b":[[0.012507354],[0.022687975],[0.023133183]]},{"dense_4_W":[[-0.598664,-0.94400805,-0.8493222]],"dense_4_b":[[-0.019668857]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019.json b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019.json new file mode 100755 index 0000000000..1f72524957 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS ES HYBRID 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.264645],[1.3075382],[0.44552016],[0.05060625],[1.2979935],[1.3015733],[1.3041736],[1.2848994],[1.2584554],[1.2216989],[1.1856711],[0.0503414],[0.050400995],[0.050465323],[0.050478272],[0.050248075],[0.04985913],[0.049460884]],"model_test_loss":0.0099137919023633,"input_size":18,"current_date_and_time":"2023-08-09_02-40-24","input_mean":[[23.043215],[-0.03371662],[0.0018890268],[-0.0067125894],[-0.031319],[-0.031593338],[-0.031663474],[-0.028725801],[-0.027785186],[-0.025144741],[-0.02163734],[-0.0065818275],[-0.0066027185],[-0.0066283992],[-0.0066961027],[-0.0067884526],[-0.006846654],[-0.006944263]],"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.22580747],[-0.259433],[0.15566492],[0.089529224],[-2.3941963],[1.9521749],[0.06790461]],"dense_1_W":[[0.077735715,0.5491028,0.031780783,0.061651852,-0.069661885,0.5064926,-0.63392377,-0.0062182117,0.39679298,-0.26671922,0.048575882,0.5175869,0.57268655,-0.72039944,-0.31672445,-0.682284,0.17552397,0.30148625],[-0.0033005108,1.3755544,2.9333427,-0.05311045,-1.6043663,0.119831525,-0.5092124,0.2000376,0.7576132,0.73848486,-0.8814628,0.3480808,0.3585077,-0.4351482,-0.43040854,0.005097866,0.15632282,0.105506845],[-0.12613682,0.053123258,-0.011962454,-0.31154743,-0.2879405,0.78129184,-0.3477709,0.11016321,-0.397643,0.29684106,-0.08335899,0.0011086084,0.101133905,0.14986652,0.10471807,0.088165864,-0.22822371,0.123035155],[-0.005890634,-0.5132265,0.02232674,0.038106803,0.26947373,-1.2872188,0.6846012,-0.06600805,0.23923853,-0.29101142,0.04426992,-0.41297558,0.27426517,0.054011345,0.22521552,-0.360118,0.13597938,0.0095917815],[-1.3102455,0.18389338,0.037292566,-0.4504437,-0.38227966,0.32267326,-0.41582158,0.34839186,0.41863716,-0.19948383,0.033166535,0.11101668,-0.17950892,0.03513152,0.5583567,-0.21783155,0.24341545,-0.21313481],[1.28462,-0.29303363,0.03239438,-0.07798496,0.47706926,0.26473632,-0.61586124,-0.015281519,0.34897882,-0.07400412,0.17125309,-0.11961657,-0.23919915,-0.15667392,0.09201665,0.82350713,0.0330319,-0.45983887],[0.008501559,0.4151316,0.24970283,-0.1932585,-0.3999573,0.7981322,0.08446922,0.43549573,0.42775178,-0.35798648,-0.25701943,0.6345054,-0.10344621,-0.4299825,-0.776323,-0.3758547,-0.5269095,0.2744096]],"activation":"σ"},{"dense_2_W":[[-0.42842335,0.05620099,-0.41398174,0.0075187576,-0.65040445,0.043987595,-0.7884258],[-0.21810047,-0.52364224,-0.24926645,1.5748769,-1.0048369,0.6784754,-0.17087893],[-1.0974892,-1.1205297,-0.52288646,-0.4585741,0.8355013,-0.86901873,0.08091025],[0.19924684,-1.6000783,-0.5017675,-0.6335594,0.81060636,-1.6753666,0.0042119725],[-0.6766826,0.035237,-0.5353934,0.8407999,-0.06624779,-0.5392324,-0.3999412],[0.83403057,-0.38959885,0.15132989,-0.74285805,0.81045157,0.045238588,0.057127055],[0.95894325,0.36917272,0.7675816,-0.8249631,-0.34739387,0.8758971,-0.17811485],[0.44207436,-0.13875146,-0.17526102,-0.48803738,0.8165408,-0.08225913,0.5292656],[-0.28129107,0.20525171,-0.7332951,-0.1858197,-1.0882939,-0.50657177,-0.48805308],[-0.7845191,-0.29932752,-0.3210797,0.7842274,0.120213665,-0.36830777,-0.4480391],[-0.4418548,-1.008012,-0.7143584,-0.03555356,0.6086784,-0.7865452,-0.24040942],[-0.14839058,-0.32335532,-0.67143065,0.41939855,-0.535096,-0.68048733,0.21396716],[-0.76420903,0.36155707,-0.16971277,0.82980686,-0.45884535,-0.16401686,-0.6478219]],"activation":"σ","dense_2_b":[[0.12145026],[0.4703432],[-0.17840025],[-0.04283482],[-0.062148705],[-0.016880652],[-0.028769262],[-0.25934026],[-0.3588194],[0.076413475],[-0.092342615],[0.0006822613],[-0.045883182]]},{"dense_3_W":[[-0.45874047,-0.6988261,-0.31221494,-0.6035287,-0.28207257,0.38988772,0.83404875,0.6202294,0.09104912,-0.2267445,-0.38150835,-0.57334363,-0.1794997],[-0.40566936,-0.5168596,-0.5243848,-0.11845207,0.35303384,-0.10472868,0.7140052,0.47152635,0.16413036,0.1380713,-0.43810734,-0.47773978,-0.4005078],[-0.44185263,-0.6747273,0.061594818,-0.0121055255,-0.28526518,0.7952212,0.69975144,-0.06553925,-0.3437621,-0.53210264,-0.114378266,-0.53271616,-0.10757975]],"activation":"identity","dense_3_b":[[0.09586072],[0.047312237],[0.13191016]]},{"dense_4_W":[[0.9993152,0.24272008,0.6070091]],"dense_4_b":[[0.08831376]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53271x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53271x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..2754e4d694 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53271x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.653599],[1.0475699],[0.507353],[0.0511427],[1.0465056],[1.0461539],[1.0466276],[1.0435494],[1.0403829],[1.034095],[1.0267593],[0.05091882],[0.050985433],[0.05104327],[0.051194124],[0.051185224],[0.050950732],[0.0506017]],"model_test_loss":0.002317079808562994,"input_size":18,"current_date_and_time":"2023-08-09_05-35-31","input_mean":[[24.87495],[-0.022877222],[0.03129203],[-0.005471257],[-0.033396523],[-0.030427122],[-0.026651071],[-0.015034059],[-0.0059272125],[0.004262375],[0.010118156],[-0.0058831],[-0.005736906],[-0.005597743],[-0.0052517094],[-0.0050170966],[-0.004636833],[-0.0044273734]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0750014],[-0.69738495],[-0.057568032],[-0.8138096],[0.8422802],[0.00422568],[-0.025037726]],"dense_1_W":[[-0.92567337,-0.4179756,-2.364189,-0.37799117,0.359521,-0.23128231,0.16912965,0.15324992,-0.29314092,0.35514003,0.1113519,0.18702953,-0.22939733,0.39211923,-0.19355458,-0.14666928,0.2541103,-0.015037065],[-0.26681975,0.19461927,-0.02443796,-0.19870783,0.015366757,-0.83895224,0.50951827,-0.046161894,-0.26054674,-0.10241932,0.09262357,0.32455042,-0.35291085,0.4337215,-0.047874916,-0.070374765,-0.19080578,0.16888785],[-0.0450405,0.3024657,-0.020173237,-0.18040816,-0.6210729,0.668985,-0.1294948,0.102294534,0.027441807,0.19392844,-0.15024275,0.2724876,0.30017278,-0.8359932,-0.09295618,0.5128679,-0.025930675,-0.08442807],[-0.9385832,0.38830346,2.4171264,-0.072888754,-0.6450525,-0.0052705472,-0.2073176,0.37481403,0.5322297,-0.016934434,-0.6272646,-0.011407112,0.2999659,-0.056183133,-0.17157498,0.16704822,-0.00995726,-0.016760994],[0.41495678,-0.36016837,-0.044468425,0.699604,0.12629355,-0.9168069,0.42850283,0.077245876,0.3887621,0.0388322,-0.26400945,-0.4751828,-0.018784745,-0.17013955,0.21044336,0.14742237,-0.257179,-0.07762288],[-0.0029706263,-0.27664563,0.20847207,0.26354775,0.20674135,1.0040307,0.04915213,-0.13483308,-0.15825804,-0.057579137,-0.0058719614,0.7015616,0.5505965,-0.08130265,-1.0528653,-0.55547035,-0.94390494,0.61734366],[0.017797226,-0.38827214,0.011275224,0.4138954,0.15614575,-0.6526553,0.3634799,0.23701335,-0.198492,0.14194344,-0.071847096,-0.3582882,-0.39685383,0.5765013,-0.12813473,0.23526756,-0.30017313,0.05643834]],"activation":"σ"},{"dense_2_W":[[0.11522227,-0.50041586,0.7625706,0.12953083,-0.84721595,0.26854208,-0.78707874],[-0.26998946,0.9135468,-0.5267852,-0.47694728,0.26567996,-0.4057614,0.44248503],[0.3397881,0.241825,-0.22745344,-0.43884552,-0.31017342,-0.48791227,0.624083],[-0.23961566,-0.61447287,0.7523344,-0.1524797,-0.034522954,0.80298376,-0.74258584],[-0.20403866,-0.45207465,0.2864171,0.585039,-0.43790713,0.049314383,-0.691187],[-0.37280735,-0.9096017,0.79407877,0.06587302,0.13932212,0.7276438,-0.16217615],[0.042196184,0.80028385,-0.6367271,-0.046625376,0.25419405,-0.8610059,0.36960703],[0.09347458,0.43240634,-0.8759679,0.1721286,0.5472644,-0.0896131,0.6584737],[0.34702182,-0.17617214,-0.37235767,-0.0058014165,0.6870974,-0.38691258,0.28578055],[0.027087606,-0.38712898,-0.5076633,-0.047688764,0.16426884,-0.32992855,-0.16210902],[0.05157716,-0.47973877,0.12872508,0.22652198,0.093843356,0.47721627,-0.70800775],[0.13196792,0.70168835,-0.728704,-0.507929,-0.3850781,-0.2150298,0.13088666],[-0.12113243,-0.341827,0.24893352,-0.064033784,-0.024845326,-0.21256083,-0.37305534]],"activation":"σ","dense_2_b":[[-0.040676095],[-0.04934049],[-0.13523409],[0.032700114],[0.04797525],[0.012522698],[-0.053262446],[-0.14503641],[-0.07796666],[-0.3327117],[-0.06517155],[-0.29661015],[-0.043684535]]},{"dense_3_W":[[-0.39554232,0.50275403,0.46011072,-0.26603845,-0.6258986,-0.18898715,0.350607,0.6611593,0.36714667,-0.03429704,-0.38445738,-0.42724767,-0.415385],[-0.12109516,-0.0026784122,-0.33396584,-0.4921449,0.025638519,-0.26242292,0.57392186,0.6282738,-0.31419235,-0.15783457,0.29055953,-0.11300429,-0.31670427],[-0.27667677,0.12075474,-0.13275498,-0.71421945,-0.30053577,-0.46803996,0.68881786,0.33228284,0.24152169,0.09559637,-0.0023924343,0.56565654,0.16803065]],"activation":"identity","dense_3_b":[[-0.027746597],[0.20316003],[-0.029442076]]},{"dense_4_W":[[-0.45957002,-0.04833828,-0.58646995]],"dense_4_b":[[0.02725393]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53280x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53280x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..a54f55a3cc --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53280x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.5803027],[0.8603793],[0.4513569],[0.029105911],[0.8487619],[0.8510528],[0.8550627],[0.8484798],[0.83925754],[0.832451],[0.8223531],[0.028991073],[0.02902925],[0.029061288],[0.029074881],[0.02896926],[0.028916502],[0.02890444]],"model_test_loss":0.0030515140388160944,"input_size":18,"current_date_and_time":"2023-08-09_06-00-13","input_mean":[[30.979578],[0.022293376],[0.02019513],[0.016653037],[0.016664432],[0.017896485],[0.020654846],[0.027760973],[0.031163529],[0.030931678],[0.0288627],[0.01662461],[0.016658263],[0.016681287],[0.01674288],[0.016692968],[0.016676333],[0.016725713]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.024255],[-0.25703537],[0.066896215],[-0.077876054],[-1.1755685],[0.053735092],[-1.813157]],"dense_1_W":[[-0.27897373,0.6238509,-0.20489661,0.1433003,-0.44274482,-0.46238834,0.08278444,-0.12610668,-0.28404528,-0.08119373,0.11206268,-0.011977598,-0.08802816,0.35872343,-0.44637114,0.09940686,-0.098998114,0.087747104],[-0.077062964,0.3174407,0.08627412,-0.2621875,-0.39889467,0.75071305,-0.02536695,-0.11606417,-0.44491976,0.27360457,0.01498593,0.5227387,0.3463404,-0.38459015,-0.5227802,0.03605743,0.0087138405,0.20318434],[-0.04407056,0.6402981,2.5346818,-0.0052747075,-0.51173216,0.33047506,-0.53520495,0.59467864,-0.2947999,-0.36928508,-0.72547835,0.23617381,0.28750753,-0.41744986,0.010572497,0.10425088,0.1149194,-0.28841314],[-0.0036573706,0.22945316,-0.0073808106,0.06309982,-0.40813765,1.0437207,-0.39680403,-0.092092186,0.14273745,-0.1925738,0.11202375,0.5490815,0.34099597,-0.39302826,-0.64261353,-0.06269388,-0.08197236,0.13292448],[-0.42824522,-0.25304925,-0.16903412,-0.23054327,0.46596405,-0.5538919,0.0059226677,-0.4401322,0.076376624,0.08189739,0.06873566,-0.26616675,-0.16517103,0.4085307,0.3613046,0.17234507,-0.08328618,-0.148345],[0.011475744,-0.28661492,0.033517,-0.1035912,0.32961515,-0.2715907,-0.105986364,0.09126555,-0.22195859,-0.2122366,0.19187194,0.29742795,-0.20964493,0.0700461,0.13138907,-0.2559807,0.38601238,-0.18372318],[-0.5847607,0.0017109648,0.25774232,-0.2373588,-0.2924784,0.9778526,-0.45161787,0.49743965,0.23385304,0.0501783,-0.2576654,0.08772852,0.2509274,-0.3904387,-0.055983637,0.24153244,0.21497074,-0.16889808]],"activation":"σ"},{"dense_2_W":[[0.2696645,0.09097578,0.2661085,0.008203172,0.58712953,0.008232839,-0.38130957],[-0.44034633,0.2513559,0.05034199,-0.7566649,-0.5055022,0.28274307,-0.18962547],[0.35309595,-0.52410984,-0.2166621,-0.51837164,0.51281035,0.6052604,-0.13995785],[-0.37981346,0.28354916,-0.22428422,0.09537504,-0.6703727,0.09452615,0.34979334],[-0.1286504,0.4058662,0.06990852,0.2916711,-0.2246424,-0.031917993,0.05038822],[0.11269455,0.27946022,-0.013186193,0.57915336,-0.779333,0.11132818,-0.08520752],[-0.5124887,-0.39176804,0.32016045,0.38343418,0.072306104,-0.21488254,0.15051393],[-0.25066197,-0.099142715,0.3025643,0.1498029,-0.22075655,0.08285247,0.16742654],[-0.0027565423,-0.54777265,-0.33877024,-0.45952037,-0.17979734,-0.24340412,-0.24863824],[-0.39911193,0.0050099217,-0.21278913,0.64141303,0.24979603,-0.12581906,0.60516745],[-0.1935344,-0.11531806,-0.5091185,0.23634945,0.17247137,0.32147193,-0.16084859],[-0.118722916,0.26619238,-0.45988715,0.38617563,0.24613833,0.50531286,-0.6070944],[-0.31973958,0.569741,0.28206736,0.307348,-0.2108575,-0.49773324,-0.17307866]],"activation":"σ","dense_2_b":[[-0.0266998],[-0.030578468],[0.010926638],[-0.12699191],[-0.18184385],[-0.09752178],[-0.01733428],[-0.027403263],[0.02766463],[-0.06362805],[0.004015615],[-0.04242502],[-0.022493202]]},{"dense_3_W":[[-0.12600064,-0.633004,0.16414349,-0.04648247,-0.20951967,-0.12900907,0.45063862,0.103525355,-0.68074024,0.55499035,0.41209528,-0.42067012,0.39265448],[0.3260821,0.57643926,0.61910576,-9.839889e-6,-0.01744337,-0.48366365,0.29486895,0.09513366,0.1914889,-0.5954007,0.3020512,-0.16881369,-0.49208182],[0.10530183,0.49050504,-0.5989605,0.26496586,0.1901535,-0.4129085,0.31638667,0.10397078,-0.11685577,0.56756043,-0.17770557,-0.29197764,0.2562083]],"activation":"identity","dense_3_b":[[-0.123790324],[0.014918573],[-0.018756263]]},{"dense_4_W":[[0.02038734,-1.2047465,0.8046749]],"dense_4_b":[[-0.016778698]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53281x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53281x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c94650159d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018 b'8965B53281x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[4.684907],[0.9460035],[0.33342025],[0.043801006],[0.943236],[0.9438911],[0.9439055],[0.9338765],[0.9230702],[0.90794885],[0.8921319],[0.04381569],[0.043804597],[0.043778293],[0.04356958],[0.043327603],[0.042924862],[0.042455677]],"model_test_loss":0.00282586133107543,"input_size":18,"current_date_and_time":"2023-08-09_06-25-49","input_mean":[[29.41278],[-0.009032724],[-0.0021492816],[0.004332889],[-0.00860808],[-0.00887388],[-0.010132152],[-0.0102206785],[-0.00937236],[-0.0074595967],[-0.005152443],[0.004347949],[0.004330746],[0.0043104156],[0.0040981416],[0.0039356602],[0.0037958957],[0.0036709488]],"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.09501388],[0.8404856],[0.7934484],[-0.066568784],[-0.31608787],[-0.109698914],[-0.12751737]],"dense_1_W":[[0.0011169801,-0.018726321,0.0015862584,0.17112947,-0.5446971,0.5853068,-0.3039678,0.4737596,0.21017975,-0.23414794,-0.07348194,0.98195386,-0.14195174,-0.10654367,-0.34493265,0.20805775,-0.4868443,-0.23417883],[0.9548257,-0.46348402,-0.29633194,0.18528488,0.40596813,-0.824306,0.30642077,-0.007846376,0.033617396,-0.23929001,0.1453222,-0.35812417,-0.22854868,0.39195415,0.49922717,0.7028648,0.50149786,-0.86416316],[0.97592115,0.007649104,0.3003986,-0.33777642,-0.13973069,0.46592122,0.03299811,0.19446975,0.067927755,0.1478205,-0.13307863,-0.11891002,-0.47453943,-0.19565998,0.54486775,-0.04400889,-0.35464677,0.13683307],[0.0047029937,0.14668527,-0.005069146,0.24684682,-0.614384,1.0910827,-0.094034076,-0.19462726,0.28000307,-0.42661187,0.2321289,-0.064942434,-0.42558447,-0.39662802,-1.0747879,0.06939005,0.2870679,1.3147138],[0.016900972,0.39719796,-0.0023543735,-0.0913586,-0.27493247,0.90382856,-0.43656674,0.011338879,-0.26157647,0.2745171,-0.04499426,0.9156245,0.18295021,-0.9320426,-0.07365104,-0.19892058,0.16344132,-0.0042856243],[-0.011051511,-0.78559583,-3.1862526,-0.13295761,0.65890294,-0.68599087,-0.12433693,0.08657334,-0.41985497,0.47015917,0.5829991,-0.71003574,-0.34596688,-0.17925437,0.41965798,0.31952843,0.61812705,0.09319992],[0.014576556,-0.18765137,-0.001399782,-0.12696555,0.0890215,-0.64548665,0.17923205,0.14201109,-0.30869052,0.19999632,-0.092428885,-0.6353419,0.07439351,0.80051905,0.04906582,-0.1398521,-0.2728979,0.2945558]],"activation":"σ"},{"dense_2_W":[[-0.6210588,0.45552707,-0.25218815,-0.17052735,-0.28304043,-0.3500373,0.014205802],[0.33707482,-1.3240942,-0.6408793,0.8307369,-0.10797842,-1.2964274,-1.3836163],[-0.33217075,-0.43026388,-0.12341792,-0.41299066,0.2880537,0.083734885,0.1641773],[0.35629743,-0.4401899,0.1567848,0.30102292,1.318357,0.048755936,-1.2286369],[-0.12527834,-0.23215155,0.56640136,0.3483607,0.8943009,-0.039557446,-0.9478881],[-0.57511246,-0.2275013,0.23487775,0.46695858,0.37859124,-0.17711872,0.26375052],[0.63963145,-0.45322925,-0.54017925,-0.3060082,0.12730126,-0.6374732,-0.018194102],[-0.5951409,-0.08423941,-0.0051530325,-0.53952223,-0.6064661,0.23082048,0.39190525],[-0.3667256,0.008534655,0.4268871,0.34291455,-0.6101535,0.21997947,0.25764218],[-0.11584076,0.5873763,-0.63031334,0.2047302,-0.08922794,-0.18342617,0.6476465],[0.07069251,-0.45771497,0.12435426,0.04750334,1.8602587,0.24760254,-1.2554413],[0.33669302,0.4188555,-0.46464103,-0.048415337,0.05759297,0.3541,-0.13896422],[0.511148,0.23681977,0.36551967,0.35152832,0.792135,-0.31216228,-0.83162516]],"activation":"σ","dense_2_b":[[0.08171513],[-0.1163031],[-0.0041464856],[-0.21284437],[-0.06291548],[-0.047316123],[-0.13749899],[0.047459695],[-0.03701015],[0.045251872],[-0.29556692],[-0.00961862],[-0.029000068]]},{"dense_3_W":[[0.12327876,-0.048812684,0.6152893,0.21222751,0.18817006,-0.3728164,0.270455,0.4454563,-0.11968707,0.59693485,-0.06342227,0.34730113,-0.57901394],[-0.4065829,-0.04221764,0.020975756,0.42464995,0.34640458,0.4587765,0.20783032,-0.86228454,-0.72097176,0.101609,0.16048418,0.48934665,0.49102414],[-0.29578757,0.22049302,-0.14916682,0.33021316,0.40887907,-0.35374218,0.4427254,-0.24567138,0.15444578,-0.63093376,0.25220618,-0.3500056,0.50111896]],"activation":"identity","dense_3_b":[[0.016075611],[-0.12729394],[-0.029249111]]},{"dense_4_W":[[-0.2641593,0.3333745,0.8707298]],"dense_4_b":[[-0.031108981]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS IS 2018.json b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018.json new file mode 100755 index 0000000000..3222012608 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS IS 2018.json @@ -0,0 +1 @@ +{"input_std":[[7.9971128],[1.0977883],[0.45730543],[0.04923891],[1.089019],[1.0908507],[1.0933481],[1.0831064],[1.0687581],[1.0477011],[1.0263152],[0.04910758],[0.04913805],[0.04915577],[0.04904069],[0.0488613],[0.048416592],[0.047898013]],"model_test_loss":0.0029971429612487555,"input_size":18,"current_date_and_time":"2023-08-09_04-46-36","input_mean":[[28.262257],[0.00053741777],[0.007980467],[0.0073362947],[-0.002916855],[-0.0013664461],[0.00021708602],[0.0032231822],[0.007565537],[0.010730909],[0.014714129],[0.007122549],[0.0071928487],[0.0072572897],[0.007378812],[0.007430641],[0.007424608],[0.0074211424]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.13015555],[0.037057668],[-0.23104249],[0.32127166],[-0.1253072],[-0.6277245],[-0.1822209]],"dense_1_W":[[0.0022739936,0.15201275,-0.018758008,0.15420967,-0.6103832,1.253523,-0.6429536,-0.095406406,0.457949,-0.061857425,-0.09967628,0.34019652,-0.0124527775,-0.46103212,-0.41929677,0.31853652,-0.3198645,0.26396248],[0.016219854,0.2708034,-0.1250583,-0.3348056,-0.83736426,0.3921742,-0.35075605,0.30172172,0.24997391,0.45135334,-0.43142125,0.22985688,-0.40631214,-0.111362845,-0.5208431,0.004493165,0.4684426,0.6794704],[0.018668292,-1.0140254,-3.2794235,0.15160404,0.028701765,0.23249008,-0.1426395,0.43393394,-0.07807302,0.5009389,0.17505689,-0.7776797,-0.038091138,0.7018249,-0.21396264,0.011046297,0.13001016,-0.10944152],[0.3585128,-0.14987485,-0.13354455,-0.004226716,0.24764334,-0.858648,-0.007176733,-0.046182733,0.1446194,0.14181069,-0.1651582,-0.2749394,0.70667934,0.37523896,-0.2320659,-0.2591826,-0.20168015,0.28267252],[0.26727927,-0.41644073,-0.05738287,-0.011317095,0.4693145,-1.0781763,0.47786325,0.13199824,-0.1208562,-0.16208106,0.18948868,-1.007483,-0.48438329,0.07924176,0.80360824,0.66245914,0.16595826,-0.23646787],[-0.5315527,-0.023200141,-0.14639618,-0.2272303,0.064140245,-0.9595354,0.4488574,-0.16073947,-0.10355826,-0.061561897,0.069149286,-0.40911204,0.44534415,0.50131905,0.32962856,-0.22854826,0.1118126,-0.10387003],[0.45086104,0.62962455,0.05797986,-0.27834865,-0.03647285,0.58516073,-0.50903237,0.31138107,-0.46869588,-0.109248996,0.1444298,0.6807234,0.24872255,0.33425596,-0.46959794,-0.30864963,0.083699554,-0.24581586]],"activation":"σ"},{"dense_2_W":[[-0.47314742,0.30918634,0.6835903,0.33214816,0.41032484,-0.2974307,0.48068962],[-0.44719142,-0.3584287,-0.42897063,-0.0863155,0.32148045,-0.37775746,-0.35045746],[0.10737237,-0.107548736,0.40882415,-0.37991515,-0.35765076,0.6178046,-0.6659961],[0.5089876,-0.0018523282,0.47517067,-0.4635432,-0.51244944,-0.7637346,0.111460224],[0.009865635,-0.3599542,-0.08200983,-0.8016887,0.049183395,-0.55783385,-0.4132886],[0.21302545,0.24237937,0.2559324,-0.37488487,-0.8143479,-0.034766164,0.63836616],[0.06948995,0.5238659,-0.5756278,-0.34593225,-0.31828138,0.020820161,0.8075781],[0.264537,0.35211742,-0.2987492,-0.68384147,-0.37824905,0.12441704,-0.027348615],[0.18194555,-0.2742205,-0.7859905,-0.45490405,-0.6359722,0.30547658,-0.40839928],[-0.27246395,0.3188016,-0.6105616,-0.93436897,-0.120215744,0.019431151,-0.5015701],[-0.29636648,-0.44186333,-0.34854856,0.44886306,0.5337103,0.5365127,-0.5632916],[-0.24954297,-0.22443992,-0.15179092,0.51437247,0.24013738,0.43259284,-0.70645374],[0.4928545,0.18550447,0.22762263,0.29510337,0.3720493,0.37416783,-0.3423796]],"activation":"σ","dense_2_b":[[0.01935374],[0.0050131385],[-0.05235093],[0.046759594],[-0.12632822],[-0.027490286],[-0.024787772],[-0.044414002],[-0.123556636],[-0.14718735],[0.005641118],[-0.084211506],[-0.06420933]]},{"dense_3_W":[[-0.21112725,0.09418867,-0.44935966,0.3675701,-0.24375933,0.5796755,0.3944582,0.37292123,0.102567196,0.10260466,0.12603773,-0.6052102,-0.4585192],[0.033743866,-0.039306644,0.35334656,-0.42215514,-0.05132556,0.31450647,-0.30604413,0.12684399,-0.30334032,0.5066069,0.2883161,0.018579826,0.19727296],[0.5773127,0.44458362,0.37894127,-0.67509955,-0.4648014,-0.3175859,0.25752234,-0.57122767,-0.052177746,-0.57985467,0.56134444,-0.38693938,-0.35289878]],"activation":"identity","dense_3_b":[[-0.019124614],[0.012149713],[0.02416865]]},{"dense_4_W":[[0.85411745,-0.44846243,-0.8711393]],"dense_4_b":[[-0.020497099]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX 2018 b'8965B78060x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS NX 2018 b'8965B78060x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..4f170fb088 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX 2018 b'8965B78060x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.5523615],[0.9379796],[0.45997825],[0.04207175],[0.93919086],[0.93780416],[0.93652314],[0.91719604],[0.9034866],[0.88726455],[0.87291807],[0.041934993],[0.04192026],[0.04190248],[0.04164398],[0.04141029],[0.04100794],[0.040568497]],"model_test_loss":0.009954309090971947,"input_size":18,"current_date_and_time":"2023-08-09_07-16-58","input_mean":[[23.397924],[-0.035182085],[-0.008444157],[-0.009997125],[-0.033629764],[-0.035007965],[-0.036390144],[-0.03466254],[-0.03890593],[-0.043926965],[-0.046389326],[-0.0101134945],[-0.010121674],[-0.010125806],[-0.010022554],[-0.010067445],[-0.01014944],[-0.01027719]],"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.11680644],[-0.051436793],[0.113495305],[-0.01763076],[-0.2807573],[-0.120603226],[-0.2764257]],"dense_1_W":[[-0.0065118936,0.56794316,-0.032589998,-0.50918645,-0.060956616,0.9810513,-0.4785043,-0.008406265,-0.25840858,-0.030046064,0.2434936,0.28673422,0.075997785,-0.024465384,0.08006076,0.0716426,0.28245556,-0.24962135],[-0.023541331,0.8734935,5.699426,0.19145805,-0.5681911,0.014759005,-0.56469446,0.1186507,1.0214005,0.043286715,-0.4702243,1.222705,0.19846615,-0.15771359,-0.5883803,-0.39430845,-1.0096143,0.27339858],[0.45483243,-0.49536738,0.072315626,-0.011725951,0.086452276,-0.66168356,0.45572364,-0.23768657,-0.18117812,0.05266754,-0.04890949,-0.38048756,0.16300593,0.13775355,-0.15970619,-0.3038916,0.6219313,0.1968499],[0.0054552057,-0.093241274,-0.34040582,0.12216264,0.037718106,-0.46982464,1.1711069,-0.35518944,-0.51062614,-0.24715386,0.38451096,-0.40132213,-0.30608684,0.052601833,0.74853015,0.23053922,-0.2007082,-0.23960419],[-0.8520971,0.24116111,-0.089963615,0.15706292,0.20338425,-0.37373862,0.75903034,0.090791985,0.17018794,0.37343842,-0.17452653,-0.66951627,0.18461663,0.5859271,0.29183576,-0.0037389225,-0.4057764,-0.47674724],[0.012710134,0.435232,0.03543807,-0.036046702,-0.75405264,1.3212848,-0.5093719,-0.08682382,0.04233904,0.07034154,-0.097755805,0.7234229,-0.13957694,-0.57484436,-0.054068033,0.07991787,-0.05443112,0.05077546],[0.0065418757,-0.6116693,0.025854474,-0.16136944,-0.16720891,-1.043264,0.4933813,0.224038,-0.3168288,-0.026011353,-0.05957108,0.23472212,0.37794927,0.2708049,0.15880762,0.61977124,0.012229787,-0.19856346]],"activation":"σ"},{"dense_2_W":[[0.03146408,-0.13779452,0.75000536,-0.11498503,0.039698552,-0.40190673,0.7709186],[0.37171277,0.22650109,-0.19030742,-0.073141806,-0.20702402,0.33066395,-0.45444292],[-1.1190504,0.69764763,0.5377285,0.8013254,-0.18115376,-1.2980549,0.25413626],[0.5416716,-0.31991583,0.14092752,-0.44703355,-0.55331653,0.51895857,-0.710503],[0.49094778,0.14815535,-0.32600418,-0.63197994,-0.5370441,-0.083100855,-0.49352166],[-0.23559721,-0.54140323,0.78799313,0.8764922,0.39852077,-0.28144458,-0.1821518],[0.1500585,-0.32034987,-0.84529537,-0.41722593,-0.05029655,0.6604846,0.10658351],[-0.42256495,-0.089720786,0.876472,-0.08991852,0.4667296,-0.97803175,0.5145723],[-0.27449653,-0.47807348,0.61057085,0.6598581,0.28521484,-0.8254127,0.06432298],[-0.382518,-0.21356484,0.25773606,0.5809972,-0.015983999,-0.84368616,0.5800405],[0.5958008,0.37813,-0.42608508,-0.27179977,-0.4507597,0.28317532,-0.16438048],[-1.1322341,-0.49540442,0.17639433,0.08400206,0.59758526,-1.2232964,0.34022707],[0.018905511,0.3392843,-0.59598386,-0.44822788,-0.29109383,0.74419224,0.015790993]],"activation":"σ","dense_2_b":[[-0.025122445],[-0.08817167],[-0.18689576],[-0.15509543],[0.008846949],[-0.18207294],[-0.09901433],[-0.17813578],[-0.14573547],[-0.19155172],[-0.052382644],[-0.32253534],[-0.07473206]]},{"dense_3_W":[[-0.68304485,0.5767948,-0.17764251,0.33225822,0.2699078,-0.49734563,0.49882662,0.18162656,-0.21204075,0.08684376,0.52946407,-0.059715066,0.45340413],[-0.07762768,-0.11692675,0.5170938,0.048767503,-0.60837173,-0.004813306,0.16917212,0.70467114,-0.026616994,0.24883772,-0.50158614,0.36716226,-0.30068868],[0.10084016,-0.039664295,-0.31447792,-0.15362875,0.42048535,-0.38715878,0.07678511,-0.1563305,0.6452277,0.7573569,-0.5292506,0.28040695,-0.584425]],"activation":"identity","dense_3_b":[[-0.06316189],[0.050863322],[0.07035302]]},{"dense_4_W":[[0.79278344,-0.8832224,-0.20445246]],"dense_4_b":[[-0.054674253]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX 2018 b'8965B78080x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS NX 2018 b'8965B78080x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..309a6385f1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX 2018 b'8965B78080x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.7839713],[1.01453],[0.37487027],[0.036252256],[1.0074129],[1.0092586],[1.0114115],[1.0015283],[0.98707575],[0.9704761],[0.950582],[0.036038164],[0.036066703],[0.036101792],[0.036004264],[0.03577164],[0.03552027],[0.035136368]],"model_test_loss":0.005577164702117443,"input_size":18,"current_date_and_time":"2023-08-09_07-41-58","input_mean":[[26.561443],[-0.023815667],[0.010739189],[-0.013143686],[-0.026596677],[-0.024625478],[-0.023937158],[-0.020562654],[-0.018135259],[-0.018355336],[-0.021212468],[-0.013303214],[-0.013247967],[-0.013189033],[-0.013033623],[-0.012982845],[-0.012978024],[-0.0131039135]],"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.13472757],[-0.15373966],[-0.7054918],[0.0122620305],[-0.012871696],[-0.6218862],[0.036611043]],"dense_1_W":[[0.0034895893,-0.47329506,0.048285536,-0.074473254,0.3115557,-0.3702869,-0.22337489,-0.13975431,0.07517197,-0.24788152,0.01133247,0.096064724,0.07818763,0.2744151,0.1163445,0.08449597,0.11816498,-0.26796773],[-0.004053826,-0.2886099,0.007515931,-0.025261926,0.32493144,-0.54980326,-0.07815613,0.15308669,0.061913893,-0.0115428185,-0.104860805,-0.057970896,-0.102305494,0.38515946,-0.1713107,-0.03404761,-0.03721952,0.12314234],[0.32897007,0.02719031,0.006045787,-0.08623162,0.13007438,-0.5118012,0.48433113,-0.41582802,-0.120004706,-0.059094574,0.19850364,-0.72324777,0.09925934,0.13738394,0.55857325,-0.26578882,0.49354708,-0.24867299],[-0.0038880499,0.5191673,0.03414573,-0.25369272,-0.09369488,0.24986927,-0.44367638,0.24794495,0.10878251,-0.20875268,-0.00077913585,-0.00861606,0.2156449,0.116771065,-0.34864375,-0.025460653,0.20020796,0.0094880555],[0.03297434,0.026964193,-0.0009992104,0.16138399,0.23900521,-0.6232881,0.46326053,-0.27336964,0.074755706,-0.32827288,0.19562325,-0.47716168,-0.28450158,0.20518361,0.31182727,0.0014464655,0.114448994,-0.046351667],[0.29541498,-0.29648054,-0.00310848,0.52299774,-0.23534268,0.5741889,-0.123190366,0.26139322,0.10665974,0.1556051,-0.21010089,0.54775834,-0.3700308,-0.11212184,-0.4132441,-0.10879409,-0.008064727,-0.016256012],[0.0030948827,0.79608256,2.278605,0.073915124,-0.66955596,0.36016646,-0.2946711,-0.103818454,0.2748215,-0.3307413,-0.17108576,0.1856803,-0.14653331,-0.020247102,-0.4317631,0.20638601,0.020172743,0.16087113]],"activation":"σ"},{"dense_2_W":[[0.2784572,0.69297725,0.057563815,-0.71975124,0.6817395,0.30981833,-0.65247726],[0.49075776,0.42235997,-0.52229685,-0.7887346,0.51224124,-0.8081051,-0.5901962],[-0.5116851,-0.43084118,-0.255523,0.55842716,-0.73646706,-0.16906197,0.2810972],[0.4290504,0.11835542,0.09274147,-0.1294142,0.1156738,-0.5795711,-0.5911007],[0.52670825,0.17968906,0.5746221,-0.73111415,0.027278474,-0.71742743,0.10865298],[-0.63077503,-0.62192583,0.07450403,0.5630963,-0.4184549,0.6239278,-0.24081348],[-0.18570104,-0.09546027,-0.23013546,0.7691375,-0.7116309,0.59218144,0.51251227],[0.43361178,0.27859798,0.024286874,-0.40649956,0.13969101,-0.1732319,-0.20539345],[-0.31913874,-0.5736788,-1.0150186,0.61656374,-0.11421175,-0.05631541,0.41142127],[0.14283133,0.002449735,0.32700986,-1.0358429,0.54168445,-0.84849554,0.20175509],[-0.09336197,0.516962,0.6102334,-0.6526487,0.6995893,-0.43362787,-0.16046062],[-0.44804078,-0.5110132,-0.7325886,0.0035943415,-0.2756613,-0.2935251,0.20282711],[-0.086241946,-0.7803644,-0.51779443,0.59950584,-0.25105664,0.49625984,-0.13718586]],"activation":"σ","dense_2_b":[[-0.046400562],[-0.2743444],[0.101535104],[-0.12776503],[-0.18889363],[0.18883984],[-0.035363212],[-0.32065263],[-0.1838859],[-0.17174399],[-0.12857278],[-0.15375665],[0.13183501]]},{"dense_3_W":[[-0.51021737,-0.011125954,0.22268747,0.62723666,0.5020427,0.2123506,-0.44933605,-0.49467763,0.67046887,-0.21754947,-0.15336846,-0.4072764,0.040200777],[-0.64956605,-0.24969986,0.34987608,-0.56477535,-0.3730418,0.5834431,0.3829126,-0.09269529,0.22655901,-0.17133151,-0.56455123,0.23502398,0.81564665],[0.35202488,0.2378389,-0.59673995,-0.6565647,0.26492116,-0.07214567,0.33713487,-0.1934846,0.13139229,0.6117809,-0.5184132,0.45279473,0.10368968]],"activation":"identity","dense_3_b":[[0.071363665],[0.0600199],[-0.092375375]]},{"dense_4_W":[[0.006432696,1.1171645,-0.07490736]],"dense_4_b":[[0.05727158]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX 2018.json b/selfdrive/car/torque_data/lat_models/LEXUS NX 2018.json new file mode 100755 index 0000000000..7c13f097ec --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX 2018.json @@ -0,0 +1 @@ +{"input_std":[[7.6509843],[1.0640727],[0.43305442],[0.042583644],[1.0586958],[1.0597517],[1.0615927],[1.0452577],[1.0264294],[1.0022012],[0.97949535],[0.04246772],[0.042485926],[0.04249534],[0.042220093],[0.041864526],[0.041366912],[0.04084527]],"model_test_loss":0.009465457871556282,"input_size":18,"current_date_and_time":"2023-08-09_06-52-11","input_mean":[[24.357443],[-0.034125097],[-0.0049536517],[-0.011872438],[-0.03119763],[-0.03166454],[-0.03223406],[-0.03186475],[-0.030950857],[-0.030095048],[-0.03235388],[-0.011925372],[-0.011901585],[-0.01188047],[-0.011727326],[-0.011680916],[-0.011658311],[-0.01185102]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1033378],[-0.26196438],[0.64087105],[0.0723818],[-0.033235934],[0.4940777],[-0.6624133]],"dense_1_W":[[0.17036144,0.70846754,-0.01288402,-0.31765887,-0.055238843,1.4783168,-1.0382427,0.09412714,-0.042508673,0.088409066,0.06366592,0.51934177,-0.2507901,-0.029035429,-0.40638945,0.18454157,-0.10026727,0.011903059],[0.0059481994,-0.4173155,-0.025032401,-0.17385283,0.42768398,-0.86849064,0.4772952,-0.28207323,0.45553952,-0.16625436,0.024320044,-0.3186513,0.04276512,0.058902144,0.67383,-0.41462952,0.32956126,-0.20091176],[0.50393635,-0.34078136,-1.1108505,-0.15240273,-0.34397945,-0.1046281,0.93492657,-0.0046718954,-0.35346282,0.18444361,0.09232944,-0.04991994,-0.43069664,0.04396726,0.5247936,0.38054457,-0.15464556,-0.072698794],[0.06292795,-0.49206024,1.0766574,0.3604547,0.33866602,-0.6243087,1.1562465,-0.22390123,-0.5481248,-0.046518486,0.25936723,-0.6421865,-0.103222616,0.3717842,0.18865198,0.22381376,-0.36329344,-0.12459951],[-0.018098533,1.1626849,7.7763515,0.3133824,-0.5978771,-0.6280122,-0.19266517,0.024776168,0.88816226,0.1488128,-0.4072811,0.8084272,0.2971273,-0.16158436,-0.36504307,-0.34449837,-0.5314731,-0.119041726],[0.12846576,-0.35670948,0.013853135,-0.075688206,0.18726085,-1.3245617,0.4279662,0.061345413,-0.11054695,-0.14311172,-0.0014835523,0.022838874,-0.11576593,0.39926448,-0.14371544,0.15646,0.11126016,0.03145696],[-0.31940654,0.05947834,-1.0866358,0.5663338,0.448577,-0.43552175,0.23205471,-0.35897624,-0.33488578,0.52830327,-0.011136929,-0.5225207,-0.56818086,0.44197837,0.20225807,0.1941536,-0.29525572,0.063295834]],"activation":"σ"},{"dense_2_W":[[-0.086325355,0.8016826,0.24832225,0.47240105,-0.46999067,0.6068118,-0.14119844],[-0.5582966,0.27016947,0.4639829,0.59999377,-0.37201896,0.7842096,0.28597522],[-0.27619955,-0.5730724,0.12383269,-0.3039288,0.123326324,-0.649525,-0.17117126],[1.4408953,-0.55869764,0.48217335,-0.18616202,1.0840948,0.16935517,-1.398959],[-0.66845334,-0.04818159,-0.3074986,-0.14507903,-0.382395,-0.22019714,-0.91304696],[-0.26608887,-0.5060071,-0.97440034,-0.35025296,0.8698175,-1.1775255,-0.030318461],[0.10986321,-0.8288251,-0.44233164,-0.3325045,0.2556111,-0.43471605,-0.35890812],[-0.1694278,0.047042966,-0.050367933,0.055317376,0.088589475,0.6182619,0.57370675],[0.93917805,-0.7993694,-0.21087216,-0.54964507,-0.060357884,-0.63951623,-0.236041],[0.40430954,-0.37087506,0.17056553,-0.9355302,0.12229527,-0.18960477,-0.10435068],[-0.05200265,-0.4987538,-0.31892672,-0.6532706,-0.6485076,-0.49172983,-0.77469736],[0.03723317,-0.48895985,-1.6575545,-0.027954731,0.53395647,-0.40768418,-0.80457896],[0.83523464,-0.9624459,0.10569231,-0.15287304,-0.58598167,-0.73237014,-0.28460762]],"activation":"σ","dense_2_b":[[0.02828117],[-0.05488203],[-0.27607742],[0.3004205],[-0.25380412],[-0.24068235],[-0.21541698],[-0.01097173],[0.21617699],[-0.081049286],[-0.12033645],[0.026889555],[0.32255155]]},{"dense_3_W":[[0.61514294,0.52475756,-0.3778977,-0.5686912,-0.56705767,-0.29328373,-0.14644307,0.5718381,-0.41984692,-0.19014074,-0.59977704,-0.64661556,-0.06085831],[-0.004403978,0.6136505,0.26742232,-0.14778873,0.28366107,0.0020191541,-0.17208292,0.33170637,-0.48983493,-0.3504383,0.26020375,0.0004651127,-0.8777239],[-0.25540027,-0.14768086,0.0147348475,0.34739557,-0.5552034,0.33083212,-0.25017375,-0.46695128,0.2878471,0.41177458,0.16511062,-0.06707549,0.49898487]],"activation":"identity","dense_3_b":[[0.062096752],[0.050615054],[-0.043884374]]},{"dense_4_W":[[-0.82545334,-0.75625134,0.20575939]],"dense_4_b":[[-0.053638227]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX 2020 b'8965B78120x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS NX 2020 b'8965B78120x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..bf661cf881 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX 2020 b'8965B78120x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.146646],[1.0861496],[0.37736702],[0.041793752],[1.0729182],[1.0773717],[1.0815437],[1.0802093],[1.0698869],[1.0521225],[1.033094],[0.041741546],[0.04175913],[0.04176615],[0.04171372],[0.041648354],[0.041466083],[0.041214902]],"model_test_loss":0.007158362772315741,"input_size":18,"current_date_and_time":"2023-08-09_08-32-56","input_mean":[[24.87129],[0.0040199133],[-0.012174124],[-0.007803845],[0.008421226],[0.007382176],[0.0064237905],[0.0022175014],[0.0023437915],[0.00084140577],[0.0007466427],[-0.0077374396],[-0.0077325962],[-0.0077279285],[-0.0077621834],[-0.0077370647],[-0.0077854996],[-0.00790058]],"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.02440857],[0.30775324],[-0.38804558],[1.3022306],[-0.083552],[0.017909346],[1.0338217]],"dense_1_W":[[-0.018503293,-0.58764344,0.02424212,0.29838094,0.07453753,-0.31939444,0.71456915,-0.57316875,0.28442377,0.045891594,-0.09102808,-0.3166445,-0.21457,0.15771346,0.21041498,0.014606669,0.09654,-0.20440961],[0.11308228,0.36093086,0.0081503345,-0.15093833,-0.40928927,0.5281348,-0.3136049,-0.01366254,0.32156047,-0.01478815,-0.09433961,0.0589882,0.46570504,-0.08343458,-0.4513174,-0.23909375,0.32555535,0.03498277],[0.012934308,-0.807455,-5.4857802,-0.22414753,0.739661,0.35657424,0.100581415,-0.54639435,-0.54661614,-0.44405246,1.0174531,-0.23915811,0.018980676,0.3152944,0.16779307,0.06588091,-0.15882106,0.0069539533],[0.43364748,0.21731022,0.1509351,0.24937709,-0.266339,0.93301386,-0.77076274,0.03864835,0.16453606,-0.049564537,0.042268448,0.26538175,-0.3747379,-0.26633552,-0.1627539,0.4571696,-0.15453127,-0.052892048],[0.003844223,-0.30206564,0.007838732,0.44173336,0.16904438,-0.8539721,0.24912493,0.23093201,-0.30098426,-0.053782903,0.19755876,-0.8577459,0.08343516,0.19395697,0.13223626,0.15016438,-0.1095013,0.23785642],[0.13072594,-0.5031704,-0.008023158,-0.082815915,0.23274036,-0.3975246,0.06762822,0.28228945,-0.088360794,0.13266067,-0.15510467,0.14137018,-0.36540613,0.122993015,0.1820403,0.043875482,0.1807256,-0.17738947],[0.4567794,-0.4016854,-0.14515655,0.11580799,0.37104917,-0.80235296,0.84958047,-0.40907645,0.22014396,-0.29004142,0.14125343,-0.4521938,0.25444683,0.05556736,0.05717658,-0.0057016616,0.2562742,-0.2375869]],"activation":"σ"},{"dense_2_W":[[-0.48313946,-0.39628115,-0.11249228,0.2369702,-0.95594436,-0.016989736,-0.24979061],[-0.04802805,0.23703022,-0.2522654,0.8781721,-0.27487224,-0.32336324,-0.84614146],[-0.75498384,-0.02555702,-0.26924992,0.3685581,0.17157069,-1.1919085,-1.3296491],[0.24518122,-0.41801304,-1.3408265,-0.3844284,-0.43864518,-0.68599224,-1.1400452],[-0.7564912,0.5270413,0.5286734,0.07109369,-0.96531475,-0.43521672,-0.09374951],[-0.84034276,0.22120611,-0.4787729,-0.106007226,-0.423205,-0.35648152,-0.9256408],[0.12945794,-0.29220057,-0.1778261,-0.2368211,0.97371066,0.4675753,-0.24584447],[-0.3716841,0.90940213,0.02815187,0.45479253,-0.27149537,-0.50198483,-0.22473548],[-0.66260093,0.75476915,-0.03105298,0.57964265,-0.81710166,-0.061508402,0.17633282],[1.0140518,-0.72448766,-2.0274432,-0.70543754,0.20180465,-0.8068022,-1.4245642],[0.7672933,-0.52256364,0.1798329,-0.08854827,0.09783098,0.5402585,0.5772625],[0.6664194,-0.0006749223,-0.30461577,-1.0251858,0.48331183,-0.11165713,0.72331625],[0.94857574,-1.0158324,0.27272424,-1.608812,0.12564772,0.20672992,-0.026206829]],"activation":"σ","dense_2_b":[[-0.21546994],[0.036408603],[-0.099371314],[-0.22597122],[-0.15818553],[-0.13797529],[-0.049458597],[0.04860044],[0.277023],[0.074395016],[-0.16951285],[-0.06529862],[-0.2778253]]},{"dense_3_W":[[-0.18387982,0.8886978,0.66043097,0.7504068,0.36590803,0.12719806,-0.71894497,0.5354477,0.77389723,0.69074714,-0.70785916,-0.18604858,-0.7207551],[0.33382007,0.50233775,0.79906523,-0.17690791,0.2123564,0.48021612,-0.28027645,0.6302492,0.70902044,0.4347561,-0.8021013,-0.728156,-0.61748165],[-0.5456827,-0.0074385586,0.27454564,0.19413206,0.2291002,0.30727038,-0.49753815,0.2708291,-0.55447114,0.14861229,0.24177633,0.45634028,-0.15501119]],"activation":"identity","dense_3_b":[[-0.20096046],[-0.16594656],[0.02119976]]},{"dense_4_W":[[0.65935874,0.49205348,0.008652598]],"dense_4_b":[[-0.14721861]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX 2020.json b/selfdrive/car/torque_data/lat_models/LEXUS NX 2020.json new file mode 100755 index 0000000000..99ea2be6bf --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX 2020.json @@ -0,0 +1 @@ +{"input_std":[[8.147084],[1.086054],[0.37127572],[0.041630004],[1.0729798],[1.0772483],[1.0815692],[1.0805902],[1.0708296],[1.0535992],[1.0337878],[0.041566238],[0.041577842],[0.041586876],[0.04155611],[0.04150528],[0.041361168],[0.041143257]],"model_test_loss":0.0067100683227181435,"input_size":18,"current_date_and_time":"2023-08-09_08-07-39","input_mean":[[24.872166],[0.003932426],[-0.010966269],[-0.008132051],[0.0087015005],[0.0073090056],[0.0060250014],[0.0013043662],[0.0013662752],[0.0015136959],[0.0025651027],[-0.00813054],[-0.008112211],[-0.008098942],[-0.008128093],[-0.008089364],[-0.008116192],[-0.0082015265]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.9054255],[-0.28507137],[1.4240875],[0.02306676],[1.52593],[0.051342566],[-0.1610418]],"dense_1_W":[[-1.2814169,0.04502527,-0.24452247,-0.04534104,-0.22521678,0.12426732,-0.5100604,-0.1931805,-0.1757783,-0.71891594,0.26680607,0.33749202,-0.23968601,-0.4898723,0.4347295,-0.16316435,0.25191417,-0.040637583],[0.026426677,-0.5180133,-0.054280188,0.2787388,0.11506753,-0.7289032,1.0191976,-0.20389938,-0.12718956,-0.012505079,0.11661954,-0.20947376,-0.33647072,0.08544779,0.09467619,0.33146363,-0.09642059,-0.12805226],[0.4297043,-0.01532184,0.17760155,-0.11004306,-0.32989568,1.2537458,-0.2505036,-0.0105941985,-0.011504197,0.4410887,0.0021856735,-0.005641636,0.29666585,-0.013274171,-0.13881417,-0.022560775,-0.034353882,-0.016772056],[0.115859054,-0.69582313,0.008139212,0.10011219,0.35110396,-0.4720546,0.5779868,-0.2903919,-0.21940863,0.0279369,0.17058563,-0.69917786,0.3002438,0.18366155,0.35467052,0.10840391,-0.17159945,0.018160818],[0.22031884,-0.7193572,-0.18843435,0.09803419,0.3082459,-0.81420296,0.3980327,-0.044523235,0.05807009,-0.26365182,-0.07507196,-0.40902695,-0.13396262,0.41380468,0.18925877,-0.30483818,0.19883342,0.001749679],[0.17746796,0.81731343,-0.008930264,-0.34225407,-0.5971375,0.803859,-0.56055987,0.22442165,0.043888506,-0.28582388,0.07147745,0.6224109,0.025271881,-0.21175076,-0.3498934,0.1339036,-0.2896505,0.22109397],[-0.045657806,-0.7590582,-6.4479246,-0.38063437,0.36719322,0.23610972,-0.21581803,-0.29967567,-0.2673017,-0.34047002,0.9861421,-0.6061893,-0.1955559,0.54208314,0.6973659,0.06787787,0.08896528,-0.23932248]],"activation":"σ"},{"dense_2_W":[[-0.20833433,0.61933535,-0.800919,0.22723371,-0.090565115,-0.7945698,-0.13987784],[0.28559738,0.26079953,-0.15632679,-0.12129952,-0.289886,-0.21938595,-0.14360459],[0.95100516,0.07814724,0.0031976546,-0.75894195,-0.94153005,-0.7928424,-1.4411982],[-0.42705938,-0.8987026,0.06752999,-0.8046098,-0.51792544,-0.42536137,0.09767677],[0.19683614,-0.36086804,-0.014388864,-0.76707953,-0.8514832,0.26960486,-0.21758303],[-0.17587733,-0.5193636,-0.13756172,-0.44829637,-0.65762174,0.29082942,-0.008277407],[-0.3183399,-0.1665803,1.2876375,-0.0728533,0.30167028,1.2605048,-0.57462007],[0.3546879,0.35146946,-0.56283337,0.6228679,0.5594427,-0.19124825,-0.5252673],[-0.00087872695,-0.73673224,0.26480362,-0.72668016,-0.4297641,0.3408679,0.43822297],[-0.6492434,-0.5402448,-0.056282554,-0.08095678,-0.24393153,-0.7988477,-0.1693451],[-0.47922924,0.30153432,-0.7007562,0.39001682,0.10440299,-0.5656516,0.30876267],[0.9030477,-0.75241685,0.30403712,-1.1863935,-1.5607433,-0.5210042,-1.2099376],[0.09520087,-0.024397036,1.1286579,-0.4269453,0.06613633,1.022576,-0.42460024]],"activation":"σ","dense_2_b":[[0.068604216],[-0.07214453],[-0.23128065],[-0.11810941],[-0.113441095],[-0.066630945],[0.14084376],[-0.0044738725],[-0.22459178],[-0.2939405],[-0.04563305],[-0.05732056],[0.122370996]]},{"dense_3_W":[[0.37704808,0.6223934,-0.46660277,0.2654992,0.20017228,-0.33366653,-0.24672645,-0.32106653,0.56422967,-0.13366485,0.15189694,-0.2369768,-0.14679962],[-0.733396,-0.48898083,-0.3152747,0.08094783,0.33034948,0.599701,-0.27930403,-0.5709238,0.5841461,-0.06343237,-0.35778514,0.12911445,0.2698867],[-0.030497754,0.38693696,0.59045714,0.39527935,0.27385178,0.100422375,0.50604045,-0.398048,-0.12326097,0.0054453975,-0.7562181,0.5377892,0.3636564]],"activation":"identity","dense_3_b":[[0.038279504],[-0.05277531],[-0.07727225]]},{"dense_4_W":[[-0.21258786,0.8358761,1.1302456]],"dense_4_b":[[-0.062789865]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78060x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78060x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..43c8600aff --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78060x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.571262],[0.9866572],[0.44786832],[0.030994067],[0.98464835],[0.98554516],[0.9865821],[0.96593],[0.9504797],[0.92728204],[0.904809],[0.03096524],[0.030987293],[0.03100753],[0.030929225],[0.030893764],[0.030828128],[0.030683307]],"model_test_loss":0.007625925354659557,"input_size":18,"current_date_and_time":"2023-08-09_09-24-50","input_mean":[[21.981443],[-0.03410452],[-0.0042907107],[-0.010875239],[-0.034431927],[-0.034863934],[-0.034671817],[-0.035121698],[-0.034416344],[-0.033750016],[-0.03282395],[-0.011034662],[-0.010998612],[-0.01096597],[-0.01084258],[-0.010833595],[-0.010883476],[-0.010945559]],"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.75581545],[0.11879905],[-0.6501629],[-0.022731934],[-0.0029385677],[0.26847437],[-0.0017951597]],"dense_1_W":[[0.2516616,0.39057118,0.00022413803,0.063490085,-0.42193273,1.2512321,-0.600658,-0.10923261,0.31011167,-0.16468239,0.044944312,-0.11299465,0.09586187,-0.100811586,0.20447883,-0.23340297,0.096681945,-0.039790932],[0.021704927,-0.20683353,-0.03011313,-0.15637654,0.15294304,-0.49757507,0.28674713,-0.023688028,-0.3239314,0.10428786,0.053708497,-0.42767534,-0.24340263,0.6549382,0.066411644,0.34770808,0.13055065,-0.306452],[-0.22692491,0.3703906,-0.0047728727,-0.3158897,-0.3546027,0.7207767,-0.24876097,0.27380067,-0.24621023,0.24137513,-0.1049461,-0.13480167,0.72030693,-0.4477213,-0.017713917,0.39679456,-0.254984,0.04286245],[1.057311,0.04657839,-0.056031335,-0.098100096,0.04250412,-0.36376515,0.7487397,0.15540043,0.18684135,-0.09664429,-0.05738495,-0.17933905,0.3892038,-0.05849292,0.41884843,-0.11726217,-0.16056898,0.086423434],[-0.012506045,-0.59728193,0.045439012,0.2765916,-0.23399554,-0.46535358,0.2761762,-0.1671016,0.07206194,0.28501,-0.26103756,-0.21281493,-0.080912635,0.2563691,-0.07951293,-0.12668297,-0.11916628,0.13779652],[1.0182611,0.027373608,0.05301419,-0.2813371,-0.39408943,0.3335591,-0.24602611,-0.68556553,0.085850835,0.47405693,-0.23440285,0.4555455,0.31906822,-0.8772108,-0.119383216,0.02932853,0.36750838,-0.16070719],[-0.004662744,-1.1186787,-3.4395354,0.24383633,0.50660896,0.01470808,0.7312308,0.3490615,-0.53634375,-0.56201684,0.45341375,-0.64736515,-0.83393633,0.5130379,0.6360629,-0.013693679,0.14626765,-0.010980777]],"activation":"σ"},{"dense_2_W":[[-0.9355151,-0.023498436,-0.7968888,0.31088433,0.7671889,-0.9731516,0.41286936],[0.52685624,-0.8809834,0.80358076,-0.8165037,-0.896308,0.29132918,0.23919983],[-0.46378753,0.1493763,-0.8195766,-0.80706054,0.2181272,0.08533837,-0.47286823],[-0.929153,0.6981678,-0.7250342,-0.21020086,0.57452005,-0.7235436,0.05653503],[0.18721063,-0.921323,0.9797812,-0.8922341,-0.38992167,-0.42454776,-0.8229087],[-0.80549794,0.48562962,-0.67541397,0.33862114,0.67381793,-0.24850826,-0.030231507],[-1.2585708,1.0969089,-0.8206399,0.19675127,0.14951561,-1.1598734,0.3381644],[0.1852816,-1.1352712,0.8965919,-0.97538066,-0.94872093,0.31611708,-0.38623008],[0.17095518,-0.9345781,0.8144248,-0.068343334,-1.051506,-0.70048666,0.13564703],[0.7746455,-0.26728967,0.53744304,-0.11955244,-0.53616977,0.46801162,-0.38597685],[-1.4234841,0.045931406,-0.7355768,-0.37909967,0.10869067,-0.44514802,0.63276064],[-0.9319143,0.24633782,-0.652142,0.048897915,0.03313439,-0.6740785,0.42693377],[-0.13351214,-1.0613108,-1.04803,-0.58857614,-0.7700214,-0.926666,-0.035181627]],"activation":"σ","dense_2_b":[[-0.3801605],[-0.13295135],[-0.39476892],[-0.17900646],[-0.10525445],[-0.27975556],[-0.22018868],[-0.02276822],[-0.21814801],[-0.048818234],[-0.32378197],[-0.34881616],[-0.5472454]]},{"dense_3_W":[[0.15212612,-0.7641529,0.084815554,0.03359007,-0.21354504,0.12747967,0.4120128,-0.21778765,-0.04332278,0.13283496,-0.25436175,0.38143668,-0.021156475],[-0.29871544,0.06072304,-0.18974409,-0.787422,0.5630134,-0.3311209,-0.38903987,0.6408349,0.36237547,0.66097933,-0.5393427,0.12618305,-0.01849426],[-0.27246246,0.47302738,0.31806195,-0.094901696,0.6957061,-0.47511533,-0.95053864,1.0960633,0.36602244,-0.18240735,-0.64022654,-0.38033855,0.034928925]],"activation":"identity","dense_3_b":[[0.04440576],[-0.04094681],[0.07032833]]},{"dense_4_W":[[-0.38054875,0.8218665,0.48242453]],"dense_4_b":[[-0.029091563]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78080x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78080x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..0d1263e2f9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78080x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.765739],[0.94667494],[0.3616158],[0.03295844],[0.94349825],[0.94473606],[0.9459934],[0.93809646],[0.9294505],[0.9191347],[0.909892],[0.032861285],[0.032873545],[0.032887414],[0.03284168],[0.03278519],[0.032662667],[0.032455098]],"model_test_loss":0.00579620897769928,"input_size":18,"current_date_and_time":"2023-08-09_09-50-03","input_mean":[[26.929195],[0.025196731],[-0.012881554],[-0.010710338],[0.026543096],[0.026043745],[0.024963912],[0.020803003],[0.02182621],[0.021567121],[0.021462854],[-0.01068755],[-0.010679269],[-0.010679149],[-0.010794701],[-0.010869973],[-0.011037343],[-0.0112071205]],"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.44354764],[-0.7657953],[0.018021787],[-1.0539906],[-0.009620201],[0.6071759],[-1.4219347]],"dense_1_W":[[-0.14379139,-0.30779734,-0.011025622,0.052611172,0.557827,-0.4541853,0.054443758,-0.43811756,0.04116236,-0.065442,0.17522809,0.28900382,-0.30594754,0.03927426,0.10508941,-0.28021297,0.257097,-0.036213793],[0.9893257,-0.5675847,-0.014914029,-0.17742264,0.32900116,-0.73124397,0.13309838,0.13541694,0.116568185,0.20272915,-0.20234105,-0.17204566,-0.38287598,0.6434185,0.0064828196,0.1567134,-0.17254141,0.04431351],[0.17694262,0.110742696,-0.0072636493,-0.30341333,0.75194615,-0.3262881,-0.03383622,-0.6425869,-0.3143724,-0.1566403,0.4531637,-0.5161109,0.3051894,0.06773472,0.57514226,0.38881442,-0.24892426,-0.15087128],[0.6424904,0.08595462,0.017552882,-0.11244444,-0.0012405494,0.7457563,-0.16368888,-0.036026936,0.0022191536,0.013409932,0.04517947,0.5781084,-0.040897,-0.3180909,-0.26591027,0.22652127,-0.15628065,0.10445975],[-0.0072668577,0.8202856,2.617024,-0.2824348,-0.97013533,0.60666716,-0.6603529,0.07703543,0.7071423,0.31937075,-0.6525571,0.18346174,0.41531911,-0.38626656,-0.22641395,-0.33223557,-0.057725884,0.37739605],[-1.0272679,-0.3728853,-0.010129326,-0.12533276,-0.037398476,-0.42292497,0.38740557,0.026151482,0.066494055,-0.20116358,0.08494257,-0.56133485,-0.23647791,0.46512464,0.4194588,0.00095449237,0.40787858,-0.43964177],[0.47435406,-0.3580759,-0.016430117,0.4333006,-0.03563075,-0.3228895,0.2759132,-0.2764072,-0.08593015,0.08139821,0.03733085,-0.49198797,-0.3483896,0.08270213,0.55244505,0.034020998,-0.19379029,-0.08319991]],"activation":"σ"},{"dense_2_W":[[0.62931764,0.5971392,-0.27920744,-0.09625446,-0.2520517,0.15220097,0.4757284],[-0.06810498,-0.16192971,-0.67571473,0.77427846,0.7111675,-0.5092023,-0.5899211],[-0.12662062,-0.43264922,-0.42270333,1.0279697,0.9585099,-0.2272264,-0.8349456],[0.6851959,0.3806427,0.23734182,-0.32216796,-0.031175314,-0.31848902,0.7827528],[0.7574823,-0.016572893,0.13931036,-0.058099292,-0.27628875,0.32055375,0.8826999],[-0.44577265,-0.51336366,-0.17647457,-0.29222834,-0.403649,-0.5358206,-0.22588949],[0.8276441,0.69618565,0.28485808,-0.66541606,-0.55220205,-0.09244421,0.22509284],[-0.017253404,-0.61689866,-0.43271235,0.9186229,-0.06328271,-0.62504864,-0.02206981],[-0.24327579,-0.2601557,-0.7008787,0.5407824,-0.07432113,-0.6142975,-0.14885205],[0.2805065,0.4750363,-0.51714677,-0.8662437,-0.5432591,0.17315364,0.2283728],[0.07518284,-0.06419793,-0.058394507,0.0030758125,-0.45961043,0.096795864,-0.88641495],[0.40107206,0.83659804,0.60401416,-0.17886135,-0.18380448,0.026554653,0.42531914],[-0.5561093,-0.81054825,0.02538599,0.37181157,0.11950624,-0.48669273,-0.1697464]],"activation":"σ","dense_2_b":[[-0.15892611],[0.25231406],[0.21843024],[-0.11113979],[-0.32132435],[-0.13616537],[-0.033621266],[0.121211156],[0.11654428],[-0.2573873],[-0.17534298],[-0.35013044],[-0.10002702]]},{"dense_3_W":[[0.38975736,0.95184344,0.46049997,-0.036776196,-0.59762466,0.77046573,-0.6417351,0.2455277,0.38605514,-0.22826484,0.4754016,-0.20180263,0.72369117],[-0.34123415,0.52516204,-0.39218587,-0.2495947,-0.49277434,-0.24826856,0.08814419,0.57656366,-0.027706323,0.70304173,-0.46806642,-0.3219581,0.3978641],[0.6244901,-0.03226933,-0.593904,0.34863296,-0.08907449,-0.01563905,0.0118533475,-0.57811826,-0.56102645,0.41259542,0.020354345,0.6811666,0.4265405]],"activation":"identity","dense_3_b":[[-0.07089868],[-0.011698629],[0.01570641]]},{"dense_4_W":[[0.491706,0.3488659,-0.4674428]],"dense_4_b":[[-0.02980553]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78100x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78100x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..8b5278a2f4 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018 b'8965B78100x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[5.339225],[0.66194373],[0.31205928],[0.024341436],[0.6674081],[0.66513306],[0.66231716],[0.63895327],[0.6226761],[0.6013514],[0.58303964],[0.024373248],[0.024379227],[0.0243759],[0.024252327],[0.024022032],[0.023766125],[0.023506766]],"model_test_loss":0.0085480697453022,"input_size":18,"current_date_and_time":"2023-08-09_10-15-22","input_mean":[[15.308053],[0.026956981],[0.012521076],[0.008223056],[0.022762844],[0.024105612],[0.025292715],[0.029286988],[0.03120046],[0.03498811],[0.03913229],[0.0080815395],[0.008096857],[0.008109519],[0.008077261],[0.008023134],[0.007986101],[0.007946235]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.5486839],[-0.004182566],[0.70444334],[-1.2786864],[1.4237925],[-2.3157184],[-0.19027016]],"dense_1_W":[[2.3501394,-0.25705758,-0.07988189,-0.4290957,0.4012017,-0.49507633,0.68234736,0.19331971,-0.17918207,-0.2851441,0.014464558,-0.27997214,0.057441402,0.21785,0.4626131,0.25091216,-0.14428633,-0.11459715],[0.003891034,0.4025592,2.048489,0.2223581,-0.3264602,0.2324849,-0.31729513,0.026396394,0.39784166,0.28578123,-0.6775234,0.5099526,0.19664104,-0.78575885,-0.31198698,0.06568886,-0.11406481,0.18468915],[-0.029596832,0.37486562,0.0014446818,-0.018797278,-0.18172906,0.00620379,0.24613884,-0.0092346985,0.3056447,-0.2428616,-0.5551724,0.26058063,0.3762853,-0.10942015,0.62718093,0.25591257,0.54290694,0.44276074],[-0.04114054,-0.20652032,0.0009401521,0.14549057,0.18316638,-1.1457938,0.16571473,-0.040683154,0.01334905,-0.018335016,-0.076690406,-0.6794025,0.07434657,0.50387204,0.17088206,-0.09142393,-0.020549657,-0.07973338],[2.3122618,0.0072796457,0.07924426,0.55116,-0.27173284,-0.21541947,0.10083326,-0.17866814,0.34227166,0.083340704,0.03105569,-0.12183439,-0.2974347,-0.19256411,0.279966,0.003367294,-0.2737957,0.04101335],[-0.07023867,0.57056046,-2.7999631e-5,-0.164115,-0.2467486,1.2809415,-0.2786617,-0.043639272,0.18761483,-0.088788636,0.08548801,0.5136481,-0.2621358,-0.25907272,-0.018350206,0.2105986,-0.08260793,0.031995647],[0.0007746239,0.57527333,-0.0020729017,-0.49926147,-0.33753145,0.5631315,-0.70021117,-0.113007955,0.029500647,-0.06764356,0.15615635,0.0883909,0.25133765,-0.19060083,0.016509565,-0.061984852,-0.073395506,-0.1258471]],"activation":"σ"},{"dense_2_W":[[-0.28617162,-0.8748424,-0.3045525,1.0268904,-0.692021,0.54420674,-0.5599996],[0.08057282,0.21628964,-0.4089967,-0.18864584,0.47374418,0.4785689,0.5501896],[-0.48260906,0.24998908,-0.40376288,-0.8485313,0.76005214,0.18822819,0.6730072],[-0.5493484,0.74067533,0.5290222,-0.74589324,0.21366102,0.9318854,-0.32034856],[-0.37596846,-0.13169625,0.46739164,-0.86299413,0.24203786,0.5865028,0.42028916],[2.4739633,-0.036862414,-0.65760493,2.6289167,1.6200708,-1.7124206,-1.2274244],[0.51397264,-0.8629164,0.085178815,1.0408322,-0.055253804,-0.6733212,-0.20133649],[-0.69732106,0.12842987,0.41530445,-0.387307,-0.089540526,0.19835305,0.81477255],[-0.20419389,0.3284613,-0.09723707,0.5140212,-1.157376,-0.84693354,-0.74240136],[0.8758132,-0.15793347,-0.09718561,0.8709293,0.040350463,-1.1266917,-0.5584791],[-1.6498971,0.27860475,-0.44611832,2.437586,-2.1081448,-2.2837684,-0.871032],[-0.78162026,-0.79014534,-0.5790472,2.1518378,-1.4926344,-0.24358809,-0.6452897],[-0.46411687,0.6652152,-0.44766068,-0.18919358,0.32152855,0.16063835,0.5126533]],"activation":"σ","dense_2_b":[[-0.075753756],[-0.14393337],[-0.138848],[-0.06541741],[-0.08361248],[0.9521424],[0.19756864],[-0.17231311],[0.12727004],[0.23659523],[-0.27445894],[0.07138053],[-0.083465844]]},{"dense_3_W":[[0.4272615,-0.49210763,0.38295087,-0.41412348,0.2860867,-0.4020542,0.4103019,0.41672885,0.21858406,0.3664715,-0.13791886,0.3195822,-0.22315404],[0.27507186,0.4673776,-0.42973244,0.44775274,-0.1259053,-0.2956321,-0.009527084,-0.08753577,-0.109627016,-0.08309372,-0.027477503,0.13203609,-0.26320615],[-0.20693302,0.15525103,0.5645003,0.18120688,0.6252794,-0.7330898,-0.26089343,0.61918086,-0.43114677,-0.6229183,-0.7104607,-0.4226231,0.54074675]],"activation":"identity","dense_3_b":[[-0.087035514],[0.0670505],[0.079935245]]},{"dense_4_W":[[0.0027248666,0.14787766,1.2931683]],"dense_4_b":[[0.07440508]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018.json b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018.json new file mode 100755 index 0000000000..16bd3503fd --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS NX HYBRID 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.585601],[1.0769356],[0.4152277],[0.032089308],[1.0751251],[1.0764067],[1.076593],[1.0550125],[1.0351758],[1.0109047],[0.9867031],[0.032038312],[0.032060873],[0.03208132],[0.031983834],[0.03192507],[0.031825032],[0.03163297]],"model_test_loss":0.009431030601263046,"input_size":18,"current_date_and_time":"2023-08-09_08-59-32","input_mean":[[23.35191],[0.014709264],[-0.007846618],[-0.0073924493],[0.015706308],[0.01488224],[0.014164865],[0.01273958],[0.011578967],[0.010703318],[0.011319831],[-0.0074810195],[-0.0074531967],[-0.0074234046],[-0.0073149926],[-0.0072922925],[-0.0073944805],[-0.007550104]],"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.010489621],[-3.390052],[-0.27632216],[0.06388101],[-0.0023289998],[-0.5310449],[-3.7337463]],"dense_1_W":[[0.044022243,-0.9602262,0.023165302,0.23139995,0.40745816,-1.3215717,1.0053997,0.00058070425,-0.18163256,-0.11781253,0.109620206,-0.12967418,-0.5115588,0.37036052,0.051331975,0.19479781,-0.042822767,-0.08214719],[-1.3167536,0.9873784,0.12040588,0.1293769,-0.2311463,0.4298457,-0.42706266,0.021210633,0.3404923,0.21219859,0.22471832,0.08838383,0.29760027,-0.88747275,-0.0634611,0.10965482,0.47251707,-0.43532783],[-0.39206186,-0.13839394,0.0042735203,-0.32981926,0.20854518,0.60123193,0.06244858,0.075630054,-0.19788578,-0.0059076576,0.21052705,-0.005142829,0.37731835,-0.00039926043,0.029549208,0.1704483,0.040654548,-0.09829513],[0.033498857,-1.03267,-3.2917075,0.1436397,0.40437415,-0.07208642,0.4386376,-0.016019847,-0.41353783,-0.27417776,0.8748351,-0.8393321,-0.08226523,0.15535136,0.46795392,0.21382397,-0.14780073,0.08567079],[0.0075990325,0.3534574,0.017199304,0.1619128,-0.69365615,1.2924689,-0.63552207,0.10506459,0.12512617,-0.0582667,-0.06807627,0.43178403,0.4894852,-0.95637363,-0.25379786,-0.043963056,-0.3546822,0.3529367],[-1.0046507,-0.16842256,0.0057131224,0.04903764,0.66925514,-0.5714975,0.6537934,-0.19450375,0.62123895,0.15355848,-0.16622919,-0.10328739,-0.1587315,0.50108814,0.16457188,-0.16681637,-0.098925866,0.036512375],[-1.3783246,-0.82125074,-0.12702073,0.13462974,0.22287484,-0.4129491,0.21670008,0.12311822,-0.4235394,-0.3596955,-0.1640687,-0.28299794,-0.16758752,0.8536019,-0.066162966,-0.194256,-0.39008158,0.4202336]],"activation":"σ"},{"dense_2_W":[[-0.5063604,-0.4741062,-0.5781108,-0.5322161,-0.59136206,0.16058896,0.058547825],[0.8868212,-0.45694777,-0.20642655,-0.3002692,-0.58157927,0.25157875,0.6711802],[0.795214,-0.86609215,-0.3717794,-0.069523655,-1.109417,0.53392845,0.6741648],[-0.03295086,0.33387217,-0.09837575,-0.2690749,0.4300655,0.030849602,-0.69364756],[-0.054043226,-0.055589274,0.45605162,-0.6619817,0.1327919,-0.11879317,-0.048832323],[0.74532807,-0.4380021,-0.4157702,0.5167606,-0.2990743,0.2512731,-0.18856232],[0.05154261,0.456311,0.4568838,-0.0567244,-0.2747546,0.36871868,-0.062383007],[1.1826025,-0.92312306,-0.4721928,-0.1572826,-1.11019,0.43225694,1.1563685],[-0.108299814,0.027349837,-0.7674503,0.5352721,-0.89908135,0.3278036,0.7806216],[-0.5583551,0.2056205,0.08362692,-0.5434645,0.5470751,-0.3124283,0.08043123],[0.45070142,-0.57115096,-0.2245427,-0.045519225,-0.6893506,0.037161164,-0.23384157],[0.1461993,0.41832474,0.4386533,-0.20438145,0.48432893,-0.052871887,-0.021635566],[-0.6163875,0.38114646,-0.23866823,0.25583425,0.60170585,-0.25978467,-0.12486062]],"activation":"σ","dense_2_b":[[-0.2458712],[-0.06637249],[-0.013759815],[0.03347602],[0.018802742],[-0.08192537],[-0.010520929],[-0.037358187],[-0.13399647],[0.06693022],[-0.26994675],[-0.093340464],[-0.041655704]]},{"dense_3_W":[[0.49996868,-0.373681,-0.51962894,0.62675476,-0.31773674,-0.59978634,0.6219736,0.050350633,0.33989727,0.5896998,0.3858415,-0.5429359,0.4819143],[-0.12461631,-0.17281315,-0.3340952,0.4874769,0.0636714,-0.042632986,0.44136724,0.02729029,-0.454583,0.48858696,-0.10563923,-0.28252137,-0.075173035],[-0.23492163,-0.40539813,-0.23685107,0.21184611,0.55601394,-0.3081886,0.2426802,-0.6480087,-0.5652243,-0.013350206,-0.33100715,0.58174974,0.016825484]],"activation":"identity","dense_3_b":[[0.038624156],[0.041515328],[0.04800828]]},{"dense_4_W":[[0.6152052,0.6204614,1.1353754]],"dense_4_b":[[0.04677127]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B0E011x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B0E011x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..5595dd0b52 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B0E011x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.497126],[0.7899638],[0.44968936],[0.040003814],[0.790069],[0.78973264],[0.7899307],[0.7765341],[0.7670328],[0.758676],[0.7496478],[0.039959125],[0.03996849],[0.039961126],[0.039813876],[0.039652888],[0.03946854],[0.039514165]],"model_test_loss":0.019624391570687294,"input_size":18,"current_date_and_time":"2023-08-09_11-08-09","input_mean":[[24.399408],[0.032711282],[0.0115032485],[-0.00525594],[0.030166635],[0.029666992],[0.029536955],[0.035590276],[0.03622483],[0.039915655],[0.042751476],[-0.005364839],[-0.005367187],[-0.0053584483],[-0.0053036655],[-0.0054080314],[-0.0055061234],[-0.00556505]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.6610016],[0.151701],[0.009707743],[-0.26353267],[-2.1897213],[-0.07288661],[-0.11378308]],"dense_1_W":[[0.7202683,-1.4521006,-0.36892205,-0.27287668,0.5218362,-0.9888661,0.7682538,-0.22947517,-0.0722589,0.04581978,0.17252716,0.20101401,0.2203343,0.5318873,0.16461913,-0.10408441,-0.046259586,-0.0836677],[0.0017382947,0.73556834,1.6531876,-0.23093462,0.20005266,0.42430395,-0.5890132,0.49725816,0.5355405,-0.10126484,-1.4101623,0.7921084,0.1510884,-0.73259395,0.084286,-0.4520055,0.11672066,0.25221756],[-0.015996123,0.6276854,0.052092206,-0.36424366,-0.07230438,-1.2923295,0.7504581,0.09663407,-0.18611723,-0.120635055,0.015938537,-0.37530875,0.2885642,-0.059331078,0.08137963,0.20130512,-0.021207044,0.046624325],[-0.012034361,-1.4192638,-5.2265596,0.2612958,4.1413407,2.314966,2.3661003,-1.5783347,-5.9282966,-2.0653381,1.9981527,-2.0700922,-0.5770653,0.38979787,1.1890407,0.48308054,1.4855419,-1.1318967],[-0.7691148,-1.4111314,-0.36992973,-0.56459725,0.38714254,-0.3826238,0.5399009,-0.63972545,0.04428801,-0.21149153,0.40715024,-0.2787244,0.7013386,0.6029106,0.50310415,-0.23025295,0.11826784,-0.23212224],[-0.006358524,0.69335353,0.02794763,0.3399404,-0.59244144,0.7978909,-0.6742573,0.063028805,-0.1886972,-0.104276046,0.08210134,0.7829205,-0.17847379,-0.42135885,-1.1342844,0.29648486,-0.25651482,0.43940562],[0.006844428,0.990331,0.011878585,0.54291165,-0.19225447,-1.9755626,0.30564827,-0.07925933,0.31555137,-0.15508366,-0.27373806,-0.18496017,-0.4336757,0.18401355,-0.26887777,-0.010644886,-0.10060476,0.2263297]],"activation":"σ"},{"dense_2_W":[[0.36306933,0.3977938,0.22641855,0.7298922,-0.27546063,-0.10226779,0.034273352],[0.08656265,-0.48553008,0.55096817,-0.048100367,0.53174394,-0.83036834,0.56428534],[-0.24495511,0.33051565,-0.12894641,-0.26901788,0.3568392,-0.52020496,-0.11631975],[0.37262198,-1.0897073,-0.45251986,0.30015078,-0.5788583,-0.06598383,-0.6937122],[-0.4771023,-0.2963909,0.20836869,-0.4795101,0.028140526,0.91956437,-0.6256226],[-0.035516877,0.4190135,-0.27137184,-0.76606,-0.10609275,1.59395,-0.753493],[-0.47961858,0.030423556,-0.071964465,0.21260998,0.027962271,0.08736105,0.0015122219],[0.44915485,-0.49171802,0.5426616,0.38728034,-0.04750208,-0.24676758,0.32686082],[0.014905465,-0.09540689,-0.39694756,-0.07622363,0.43361604,0.061137225,0.7645907],[0.2848,-0.07338248,-0.6300479,0.32704386,-0.45459402,-0.4455886,-0.20302792],[-0.14017946,0.19692336,-0.5500081,0.43361938,-0.79839504,0.14536503,-0.5962689],[-0.35142824,0.22747609,-0.5308471,-0.3816653,-0.14133443,0.7790726,-0.46167746],[0.033977807,-0.47663027,0.21505095,0.060140327,0.50756395,-0.46516722,0.5984394]],"activation":"σ","dense_2_b":[[-0.08834933],[-0.17998597],[-0.098719954],[-0.07162819],[0.18823287],[0.25482836],[-0.23286653],[-0.13847035],[-0.1420269],[-0.16621625],[0.107665256],[0.27800032],[-0.2690747]]},{"dense_3_W":[[0.31680772,-0.04880554,0.41232827,-0.5364121,-0.18391071,-0.19796918,0.4786881,0.3846168,0.53205895,0.21274851,-0.69326276,-0.359501,-0.47516134],[-0.21317686,0.22660097,-0.36739162,0.16952656,-0.485056,-0.033075597,0.113461725,0.47104463,-0.29169482,-0.12948655,0.38925797,-0.826083,0.6325188],[0.34189993,0.43732288,0.26165158,-0.18155214,-0.54409766,-0.19873665,-0.28346628,0.5721446,0.5639601,-0.036017355,-0.4653392,-0.79315287,0.1872007]],"activation":"identity","dense_3_b":[[-0.064026974],[-0.056641966],[-0.060960032]]},{"dense_4_W":[[-0.5811463,-0.62689096,-1.1673242]],"dense_4_b":[[0.05718782]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B0E012x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B0E012x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..be3b6fb7c3 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B0E012x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.178389],[1.1035752],[0.4662704],[0.046207998],[1.1074592],[1.1067053],[1.1053001],[1.0732423],[1.0499698],[1.0244768],[1.0014167],[0.046057243],[0.04609966],[0.046142098],[0.04609972],[0.04592567],[0.045645263],[0.04529655]],"model_test_loss":0.01661650463938713,"input_size":18,"current_date_and_time":"2023-08-09_11-33-54","input_mean":[[24.113503],[0.026555553],[0.007805312],[0.0024834524],[0.025088156],[0.025798468],[0.026386062],[0.029757109],[0.030439591],[0.031094952],[0.03309283],[0.0025249124],[0.0025172262],[0.0025013706],[0.0023470775],[0.0021061723],[0.0018476403],[0.0016275451]],"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.04851935],[0.18912777],[-1.3116255],[-0.7472734],[1.5802238],[0.0032274537],[0.9271875]],"dense_1_W":[[-0.013812765,0.23587815,-0.88323635,0.4553478,-0.10918498,-1.4469972,1.0692941,-0.79699284,-0.6479312,0.06861249,1.1115149,-1.0295787,0.39040166,0.82937765,-0.28262046,-0.2515571,-0.27617222,0.80472493],[0.025999622,0.5356352,5.958624,-0.7345606,-2.8084228,-1.6167558,-2.1773086,0.74087584,4.05941,2.2720666,-0.5007629,1.8292586,0.73168993,-0.13792978,-1.0049746,-0.78412616,-0.32696438,0.1599063],[-0.68668175,1.2465404,0.0007119129,0.18416734,-0.17395344,1.1581551,0.3491509,0.015340899,-0.243164,0.3337365,0.0059605897,0.25817114,-0.012701957,-0.54250956,0.06875178,0.047875002,0.03650471,-0.042195074],[-1.4012998,0.15385582,0.00326918,0.23495099,1.1849846,-0.16899009,1.0280719,0.93690526,-0.14206767,-0.20286582,0.26880294,-0.5328709,-0.18946564,0.41029063,0.27763805,-0.22111964,0.04954255,-0.10736989],[0.7175712,1.2868648,-0.0006277978,0.26892963,0.06477711,0.9932033,0.34392086,-0.009526572,-0.22756432,0.25638282,0.08036479,0.50691277,-0.3837951,-0.49345502,0.054468766,0.033681694,0.08291686,-0.058626775],[-0.0014453949,0.14246415,-0.0014614231,0.21303391,-0.21408749,-1.5569146,1.0463302,-0.008707946,0.012354692,0.32674435,-0.3785094,-0.749308,-0.17875636,0.80370486,0.19241858,0.15964696,0.4008355,-0.4595413],[1.471798,0.053307597,0.0039579137,0.09766114,1.1792371,-0.15318848,1.1508945,0.9567271,-0.14996085,-0.31087992,0.346843,-0.35862166,0.021058438,0.12184848,0.20475146,0.04533049,-0.30174068,0.07555196]],"activation":"σ"},{"dense_2_W":[[-0.23688912,-0.29926342,-0.4236539,0.58860856,-0.35607925,0.62337095,-0.15733019],[-0.7429034,0.5418817,0.3976327,0.45379984,0.050487727,-0.19394211,-1.0679561],[-0.009215472,0.29501885,-0.70378315,0.044839945,-0.49085298,0.20003374,-0.35764387],[-0.19541922,-0.11391505,-0.20030189,0.0048329923,0.02828999,0.42400816,0.6403727],[0.08312188,0.31799898,-0.69704294,0.20299889,-0.2131362,0.44351074,0.098965526],[-0.3986167,0.18717383,0.62129164,-0.094000615,0.41735825,-0.50520986,-0.9462763],[0.19806273,-0.06787933,-0.59105605,0.36845544,-0.6435648,0.73989093,0.32647932],[-0.2055667,0.1422158,-0.43421987,0.20636247,-0.23087944,0.31787756,0.51859593],[-0.31988147,-1.4222198,-0.24275048,-1.1502436,-0.3906249,-0.6949595,0.47081533],[-0.32937595,0.38923815,0.8274464,-0.7638735,0.61449593,-0.20162378,0.33241272],[0.29764244,-0.8901207,-0.13424192,0.5848652,-0.61154383,-0.24175633,-0.35554945],[-0.4612609,0.10317978,0.24854125,0.13317706,0.54670334,-0.4810212,-0.74941343],[0.3080491,0.65429133,0.38162977,-0.8621924,0.78468126,0.30853254,0.40593398]],"activation":"σ","dense_2_b":[[-0.02144118],[-0.09335769],[-0.007059764],[-0.033586107],[-0.030305251],[-0.08470452],[-0.024528615],[-0.006754011],[-0.14906617],[0.07473883],[-0.25525466],[-0.049658544],[0.023403395]]},{"dense_3_W":[[0.6513854,-0.2971271,-0.10133595,0.06157518,0.5964825,-0.29642156,0.7061594,0.4733872,0.32888836,-0.55521995,0.50460774,-0.52282894,-0.6185102],[-0.23496525,0.37275878,-0.6667091,-0.39924023,-0.48301923,0.67697704,-0.6308714,-0.21922909,0.6176243,0.618389,0.0014676229,0.6497615,0.38443524],[-0.46734017,0.14557028,-0.28965655,0.39367342,0.04646032,-0.04165071,0.31603992,0.060060974,0.45381856,0.088807814,0.39907733,0.529591,-0.50600004]],"activation":"identity","dense_3_b":[[0.011306823],[-0.013359737],[-0.020531746]]},{"dense_4_W":[[-1.1962153,1.1962668,0.4678314]],"dense_4_b":[[-0.013093974]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B48111x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B48111x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..048b08551b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B48111x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.985375],[0.8484357],[0.40301353],[0.04616213],[0.84518045],[0.8455486],[0.8450366],[0.8306985],[0.8178662],[0.80961376],[0.7968393],[0.046044145],[0.046038657],[0.046025593],[0.045820486],[0.045615625],[0.045437485],[0.045231733]],"model_test_loss":0.011326421983540058,"input_size":18,"current_date_and_time":"2023-08-09_12-24-28","input_mean":[[22.471128],[-0.018951578],[0.010878803],[-0.0010533921],[-0.023024717],[-0.022267114],[-0.021230936],[-0.016909447],[-0.015211554],[-0.015772311],[-0.016099963],[-0.0011461969],[-0.0011510055],[-0.0011510034],[-0.0011011333],[-0.001083126],[-0.0011312175],[-0.0012207358]],"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.19449084],[0.23200378],[-2.1795752],[-0.06908683],[0.5561456],[0.74490666],[-1.4101259]],"dense_1_W":[[-0.03025444,-0.037244402,0.005869636,-0.11142137,0.30302644,1.9381279,-0.8191624,0.022108948,0.8009985,0.029354382,-0.08832442,0.72894895,0.3668595,-0.9385649,-0.2852418,-0.09583186,0.5544937,-0.21227281],[0.034946375,1.0261317,7.126802,-0.2404806,-1.1685041,-0.83051986,-0.4426787,0.6152297,1.1656748,0.80329746,-0.77668273,1.9598135,1.321885,-0.57261515,-1.2246871,-0.99875146,-0.9846027,0.7683447],[-0.42501846,0.98335177,0.0086295735,-0.38849956,-0.34183657,0.78103524,-0.3070697,0.041614834,0.010777993,0.16069779,-0.06382278,0.45972434,0.47352612,-0.8080994,-0.014047953,0.2616601,0.027314788,-0.023172976],[-0.002096383,0.42063478,-0.36391065,0.6753022,-0.427858,-1.5044448,1.4863667,-0.71073186,-0.30100074,0.20311977,0.043464664,-0.9429159,0.0748356,0.59035534,0.45266464,0.36573637,0.05602837,0.03608384],[1.132687,-1.1144317,0.022769302,-0.08955206,1.1042536,-0.5798501,0.5345062,1.2229115,1.1052201,0.23315747,-0.6132077,-0.11451021,-0.14781699,0.7205005,-0.5105502,-0.1375905,0.41816053,-0.13178313],[1.3072513,0.8143477,-0.02883156,0.032059945,-0.65769833,0.49218857,-1.0619043,-1.3068818,-0.7583709,-0.18983535,0.5098667,0.04548321,0.37096432,-0.49653402,-0.043797195,0.09462603,-0.117622316,0.09393342],[-0.36528334,-0.94333136,-0.00709332,0.11895063,0.4062324,-1.077606,0.63532376,-0.055628367,0.052410383,-0.17590849,0.052673202,-0.49115044,-0.166243,0.67629623,0.12474157,-0.26558882,-0.013086577,0.016891709]],"activation":"σ"},{"dense_2_W":[[-0.90425926,-0.3100587,-0.15216517,0.27145946,0.23597465,-0.330885,0.64773345],[0.98487633,1.1788161,1.4274528,-0.13287292,-1.942367,-1.2299767,-1.614185],[-0.23527108,-0.52527946,-0.22783957,0.94517636,0.804941,-0.40320855,0.18958431],[0.12163566,0.02718684,0.47783875,-0.95925164,-0.94627064,0.6247853,-0.8608685],[-0.94498646,-0.5125671,-0.29173845,-0.15166761,-0.8053367,-0.99756163,1.0966812],[-0.5952867,-1.0380365,-0.10330609,0.035324153,-1.1042368,-0.7014133,0.9698015],[-0.21240786,-0.23053433,-0.6369077,0.33950132,0.5255738,0.096905194,0.30876234],[0.5140029,-0.5269255,0.64448845,-0.7638766,0.0040237093,-0.020735802,-0.6104091],[1.2667329,0.045856774,0.7070585,-0.61856055,0.13016993,0.6576462,-0.6267828],[-0.17739317,0.37307802,-0.8725243,0.771662,0.049805034,-0.42982677,0.11095653],[-0.90507495,-0.25394666,-0.58229274,0.2684394,-0.50432193,-0.4329303,0.6245469],[0.77078027,-0.15400788,0.24913049,-0.8615302,-0.69670194,0.18226497,-0.8975012],[0.02397529,0.2646033,0.4380282,-0.15443936,-0.5261358,-0.52393633,-0.07421209]],"activation":"σ","dense_2_b":[[-0.09594069],[-0.6905126],[-0.074888185],[-0.037054244],[-0.12587616],[-0.27787346],[-0.057617527],[-0.01407181],[0.06147024],[-0.1516328],[-0.23781396],[0.075564094],[-0.19739097]]},{"dense_3_W":[[-0.36719826,0.2605464,-0.2282825,-0.15726866,-0.12012483,-0.31160554,0.17342465,0.33086634,0.38206747,0.18828884,-0.18907732,-0.01786273,-0.20533668],[-0.3468706,0.04522057,-0.072850615,0.605361,-0.6474378,-0.20503408,-0.0733508,0.12105218,-0.1717388,0.40598574,-0.18865044,0.4131868,0.19802985],[-0.6461299,0.69321644,-0.33386546,0.07647153,-0.42154786,-0.29778567,-0.3956274,0.23928347,0.59340984,-0.42163405,-0.052262533,0.2998,0.020345777]],"activation":"identity","dense_3_b":[[-0.0809652],[0.059218273],[0.06971658]]},{"dense_4_W":[[0.0938981,0.6363041,1.3952843]],"dense_4_b":[[0.06310906]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B48112x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B48112x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..aca9bda063 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016 b'8965B48112x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.513149],[0.9541818],[0.39656356],[0.046623718],[0.95074844],[0.950698],[0.95102835],[0.93498194],[0.92150253],[0.903537],[0.8869439],[0.046458315],[0.04645999],[0.046444196],[0.046160106],[0.04587233],[0.045259684],[0.044569284]],"model_test_loss":0.01733686961233616,"input_size":18,"current_date_and_time":"2023-08-09_12-49-35","input_mean":[[26.078451],[0.027438534],[0.0011958503],[-0.009430026],[0.024858253],[0.025092505],[0.025384951],[0.025721082],[0.027182773],[0.029522264],[0.029206349],[-0.009677318],[-0.009641802],[-0.009610473],[-0.009555977],[-0.009597703],[-0.00965417],[-0.009817797]],"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.1336756],[0.10344256],[0.30574226],[-1.0487646],[-0.14843734],[-0.028830774],[-0.43900487]],"dense_1_W":[[0.43604448,-0.5605264,0.012901217,0.022648716,-0.05411717,-0.52825683,0.976321,0.11842187,-0.5259775,-0.37925148,0.42006952,-0.84167475,-0.055660117,0.1304136,0.6104034,0.28378442,0.6410333,-0.76094],[0.4276094,0.15709533,-0.0169772,0.3044572,0.3100376,1.003849,-1.018638,0.02647807,0.1272281,-0.00826707,0.0850446,0.4799849,0.019232752,-0.39135626,-0.3757945,-0.61405283,-0.018439129,0.32969815],[0.007824015,-0.058601394,-0.105257824,-0.1341512,0.3888203,-0.28831708,0.48457155,-0.3913913,-0.40673906,-0.28273785,0.5328434,-0.33710465,0.0991382,0.6627208,-0.25941357,-0.16797468,0.1989,-0.016353317],[-0.21427123,0.86771905,6.534022,-0.6548552,-1.5710703,-1.0742532,-1.4654069,0.8514165,1.9961716,1.223437,-0.7285998,1.2758242,0.9320656,0.30135366,-0.34027484,-0.70199484,-0.7621133,-0.16112399],[0.085645236,0.7888055,0.00027891068,-0.39420474,-0.06814435,0.8111238,-0.8712305,-0.176747,0.01755771,-0.16584563,0.15874274,0.7242339,0.42814922,-0.7291331,-0.23838085,-0.005654039,0.31353015,-0.056190874],[0.695166,0.49490714,3.372351,-0.13590972,-0.9212608,-0.3051697,-0.50663286,0.20426105,0.7320531,0.55699635,-0.14507566,0.92698795,0.23466231,0.1211082,-0.4500127,-0.08752919,-0.47848958,-0.068858966],[-0.41407767,0.60256696,-0.012946635,-0.32264197,0.19446182,0.36647174,-0.5412527,0.036333155,-0.060324162,0.0108162025,0.08161502,0.40417644,-0.037009377,-0.21295482,-0.41150248,0.4401551,-0.18975988,0.027621428]],"activation":"σ"},{"dense_2_W":[[0.19137855,-0.59557676,0.28804228,0.32442906,-0.5375224,-0.20337382,-0.6008916],[-0.11394542,-2.0737066,-0.5354913,-1.3426789,-0.6801209,-0.27107587,-0.15083465],[0.29361624,0.1699438,0.7419668,-0.36620173,-0.8206793,0.00073572167,-0.4464687],[0.6434301,-0.4445039,-0.14719622,0.23853825,-0.286252,-0.24195918,-0.83651835],[-0.012359924,0.43869573,0.06229189,0.60834336,0.32198146,-0.24622436,-0.06080808],[-0.6786453,-0.13937657,-0.19309613,0.013606689,0.5540887,0.5298669,-0.05196762],[-0.013185264,0.5033074,0.31203073,0.047127012,-0.2498416,0.50795144,0.5977538],[0.8437041,-0.44398957,0.7342129,-0.45426455,-0.2659502,-0.31482774,-0.16570877],[0.34602955,-0.7132226,0.38534385,0.6092949,-1.3994591,1.1248631,-1.353814],[-0.08515577,0.5915542,-0.25632793,0.4754705,0.7452592,-0.18179281,0.12182859],[-0.049042016,-0.110786006,0.64409393,0.14546494,-0.9643141,0.29006732,-0.72953105],[-0.59469205,0.6471949,-0.26527888,0.23997271,-0.09655182,0.0051637134,0.52177334],[-1.4906286,-1.1227882,0.56706303,-2.809029,-0.85157853,-1.0621608,0.9694465]],"activation":"σ","dense_2_b":[[0.008693504],[0.15823685],[0.0637331],[-0.013258514],[0.0015104315],[-0.018139329],[-0.027512403],[0.10828464],[0.017622454],[-0.06617764],[-0.046749223],[-0.070872046],[0.3779424]]},{"dense_3_W":[[0.65443593,0.3343104,0.012527355,0.36417776,-0.28863862,-0.5988752,0.23106381,0.004670684,-0.122015595,0.28513318,0.60385746,-0.5160076,0.67743444],[0.627146,0.32316205,0.38000792,-0.027986798,0.116916984,-0.61325556,-0.4528739,0.25507253,-0.13200486,-0.60309863,0.20832081,0.25238237,0.15479685],[0.28230017,0.1581272,0.5597084,0.41742852,-0.5948192,-0.03049473,-0.3455425,0.30141747,0.7191692,-0.5980131,0.36263385,-0.5719517,0.45230243]],"activation":"identity","dense_3_b":[[-0.047069583],[-0.02659484],[-0.031588677]]},{"dense_4_W":[[-0.54359066,-0.6082866,-1.0533628]],"dense_4_b":[[0.03228879]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX 2016.json b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016.json new file mode 100755 index 0000000000..8121234c29 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX 2016.json @@ -0,0 +1 @@ +{"input_std":[[8.430978],[1.1379495],[0.45858315],[0.048554417],[1.1417856],[1.1416621],[1.1402241],[1.103209],[1.0752802],[1.0438159],[1.015414],[0.048459742],[0.048481967],[0.048495647],[0.048316676],[0.048084732],[0.0477648],[0.047343533]],"model_test_loss":0.017764510586857796,"input_size":18,"current_date_and_time":"2023-08-09_10-41-53","input_mean":[[24.381577],[0.05514361],[0.013313259],[0.0006179983],[0.051813576],[0.05245275],[0.05269495],[0.057216838],[0.0603638],[0.0627208],[0.06460416],[0.00054358447],[0.00054860266],[0.0005474048],[0.00047689374],[0.00043869138],[0.00029944416],[8.212836e-5]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.26622558],[2.9497008],[1.813058],[-0.025023121],[-2.0630577],[-0.10530793],[-1.0611445]],"dense_1_W":[[0.025534231,-1.1805913,-6.9120297,0.4762668,1.141532,1.194718,0.6604293,-0.30574933,-2.2145832,-1.1851851,1.0677514,-2.5831132,-0.71438986,0.58066684,0.89023423,1.3890202,0.6341061,-0.24130233],[1.2830616,1.4180796,0.013817758,-0.66995686,0.36852577,0.42192948,-0.13681625,0.50336146,0.33836475,0.33387825,-0.03252644,0.36973232,0.3118444,-0.560369,-0.010612995,0.080320194,-0.013821916,0.09603328],[1.6039705,-1.0465006,-0.021859074,0.4317561,-0.3821928,-0.9248917,0.1911275,-1.008013,-0.21806867,-0.30369827,-0.012168507,-0.2818822,0.308418,-0.016223406,0.421061,-0.42053384,0.026600147,0.016264306],[-0.14462262,-0.7510906,0.0010378277,0.6862586,0.075593695,-1.3630501,0.78086907,-0.21945457,-0.29287562,0.12408464,-0.20034757,-0.6130181,-0.15015851,0.22744867,0.22026828,0.18415438,-0.18599446,-0.15435989],[-0.17025296,-3.2277153,0.028557282,-0.73297334,-0.56138515,-0.84773684,-0.0022175754,-0.58208245,-1.1386961,-1.4433861,-2.14009,0.19586197,0.39540797,-0.052566983,0.20787114,0.28620672,-1.2643102,0.7919278],[-0.0032478468,-0.5915213,-0.09130981,-0.15959802,-0.07250981,-1.233284,1.4387474,-0.018223405,0.01532253,-0.12527408,0.120767094,-0.48614782,-0.20340073,0.60070837,0.51384115,0.028175151,0.28134152,-0.22379196],[-1.2310994,0.35107216,-0.009768715,0.108554766,-1.4150821,0.24119836,-0.5592179,-0.3124385,-0.37922817,-0.35682285,-0.040580634,0.032491393,-0.24726222,-0.29392195,0.278081,0.7974623,0.24596404,-0.6094582]],"activation":"σ"},{"dense_2_W":[[-0.26285568,-1.1060537,-2.942825,-0.67371356,-3.5155258,0.46508044,0.39250213],[0.040603336,-0.4580863,-0.05867417,-0.17467877,-0.12807631,-0.16877379,-0.6004097],[-0.21166655,-0.5113058,0.65276754,-0.4754752,-0.13656586,-1.194988,0.8539784],[-0.15373452,-0.6933606,-0.7155214,-0.5996274,-1.0520024,-0.60170096,0.32668498],[0.6738468,-0.15951255,-0.17071065,0.041958928,-0.11103761,0.902966,-0.58521444],[0.8874169,-1.2575809,-0.82644594,0.67518294,-0.18607567,0.31737596,-0.23714398],[-0.3840576,0.024641534,-0.7565307,-0.88211155,-0.28571716,-0.29910767,0.24023683],[-0.058167692,0.17876865,0.4777526,-0.94331837,0.4652216,-0.43854114,-0.53990954],[0.23073974,-2.1207473,-0.6605163,-0.2945441,-4.001501,-0.2752776,1.7681032],[-0.70948744,-0.7407854,0.42118362,0.6708104,0.32626638,1.098384,0.24783559],[0.043585002,0.27145508,0.6032944,-0.8032509,-0.06791304,-0.73068494,0.27683318],[-0.6658628,0.7501746,-0.3240815,-1.147417,0.3406268,-0.6849644,0.568758],[-0.1976796,-0.02303728,-0.765593,-0.41832325,-0.46337137,-0.65529525,0.04229715]],"activation":"σ","dense_2_b":[[-0.079793036],[-0.2289362],[-0.090767354],[-0.23192126],[-0.066803485],[-0.2459263],[-0.112346604],[-0.05293226],[-0.35880116],[0.007642163],[-0.040404778],[-0.03216628],[-0.21668698]]},{"dense_3_W":[[-1.3067548,0.53903705,-1.0720602,0.45293874,0.44038934,0.445163,-0.057403624,-0.12081309,-0.8046321,0.2472878,-0.6329288,-0.80141,0.25300354],[-0.7013012,-0.33519942,-0.22784245,-0.31578028,0.35543197,0.58259434,-0.18224044,-0.19449191,-0.00866361,0.76322716,-0.5559447,-0.5042247,-0.082718976],[-0.2083438,-0.3291305,0.049302626,0.35232225,-0.56150305,-0.15463752,0.2730324,0.19683221,0.6830847,-0.035634395,-0.005636273,-0.06266247,0.16106449]],"activation":"identity","dense_3_b":[[-0.049557555],[0.068597704],[-0.039742917]]},{"dense_4_W":[[-0.55702186,-1.4275403,0.36695966]],"dense_4_b":[[-0.06800569]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX 2020 b'8965B48271x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX 2020 b'8965B48271x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..9acad7b27f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX 2020 b'8965B48271x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.790511],[1.2051258],[0.486362],[0.046329346],[1.2025905],[1.2045679],[1.2048204],[1.1782552],[1.1522838],[1.114516],[1.0752699],[0.046031546],[0.0461143],[0.04619555],[0.0463639],[0.046436474],[0.046342947],[0.046053313]],"model_test_loss":0.01846417412161827,"input_size":18,"current_date_and_time":"2023-08-09_14-07-28","input_mean":[[23.297014],[-0.07091814],[-0.006433463],[-0.015964804],[-0.06944786],[-0.07049861],[-0.07169086],[-0.0725157],[-0.07295393],[-0.07059761],[-0.06671325],[-0.015837615],[-0.015886428],[-0.015935564],[-0.016081078],[-0.016197832],[-0.016277002],[-0.016316837]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.8718482],[0.043485954],[0.1334148],[0.04062672],[0.1371059],[0.47959167],[0.41457915]],"dense_1_W":[[0.302712,-0.64061826,0.00021023012,0.1270872,0.47509173,-0.88803416,0.07212928,0.042023487,-0.2701141,-0.11028586,0.14805569,-0.3301233,-0.030141128,0.110137366,0.24910642,0.022822332,-0.13628617,-0.02734447],[-0.0112305805,-0.062110696,0.9048815,-0.30518687,0.37704608,0.54086095,-0.36482716,0.78454524,0.09202176,0.124826275,-0.60082704,0.23958081,0.013718426,-0.59773356,-0.04289131,0.24219033,0.07552512,-0.14155541],[0.0095520355,-1.5135527,-7.146096,0.046556793,1.0016626,0.26657087,0.49129936,0.1192361,-1.3478962,-0.57923305,0.8990769,-1.2713641,-0.1449253,0.33309865,0.29299238,0.8477045,0.34352547,-0.26439115],[1.3360776,0.43069306,0.0033850432,0.13868013,0.12317294,-0.71958536,0.09370431,0.69450635,0.7858797,-0.061516054,-0.44013515,-0.36443138,-0.11492549,0.2905127,0.29464763,0.27047387,-0.009484421,-0.16326639],[-0.072193325,0.6810033,-0.0006428534,-0.17535646,-0.3925088,0.9478185,-0.4810887,0.14695391,0.22799563,-0.0067853555,-0.09267938,0.15300772,0.25419602,-0.25394833,-0.25696975,0.27363688,0.04384659,-0.047923796],[0.31465146,0.3511552,0.0015588161,0.2902856,-0.19568959,1.1875578,-0.8330673,0.016947713,0.26301575,-0.019239245,-0.031921107,0.33852276,-0.28278407,0.082128964,-0.28737378,-0.18144135,-0.28193912,0.35517663],[1.4577928,0.18897557,-0.0022648247,-0.5178223,-0.29067862,0.51650524,-0.51629674,-0.7847042,-0.3747238,0.10482232,0.20073019,0.57185805,0.13230741,-0.48319355,-0.041621983,-0.16511591,0.05802408,0.06077849]],"activation":"σ"},{"dense_2_W":[[0.09112419,0.3933311,-0.07912346,-0.16376911,-1.3840766,-1.13499,0.39429682],[-0.25075546,-0.139813,-0.10178927,-0.5902748,-0.03242446,0.10067222,0.17554912],[0.32162717,-0.26907963,0.4562144,-0.17545085,-0.8203269,-0.3948726,-0.48715237],[0.2058124,-0.26949823,-0.26260903,0.66973966,-0.8223285,-0.43544468,-0.20690836],[0.0921255,0.6398792,-0.4644536,0.43992248,0.66456866,-0.29228744,0.681274],[-0.701462,0.3418935,-0.30925137,-0.4308913,0.61918205,0.41725752,0.19738914],[1.0032815,-0.1373689,0.13509746,0.55519915,-0.66466725,-1.5082299,-0.6796551],[0.9098266,-0.6253603,0.9275299,1.3693849,-0.7913963,-0.12439643,0.2529121],[0.14551386,-0.302949,-0.6236385,0.38303864,-0.2522383,-1.0035355,0.37006238],[-0.6432663,0.26386604,0.11475341,-0.24213178,0.4122344,0.568145,-0.18189429],[-0.07105171,-0.6555986,0.7464795,-0.31800714,-0.6183989,-0.829439,-0.80282366],[-0.11153934,-0.00981713,-0.027943783,-0.25458655,0.29322457,-0.07820042,-0.009418274],[-0.08382857,-0.53568757,0.30139825,0.19761209,-0.21205801,0.19351888,-0.18371148]],"activation":"σ","dense_2_b":[[-0.1493231],[-0.00402506],[-0.037446134],[0.063946806],[0.047605712],[-0.063797615],[0.22099188],[0.028348964],[-0.08109348],[-0.016280346],[-0.046104338],[-0.038503833],[-0.014590311]]},{"dense_3_W":[[-0.23360372,-0.4386488,0.5417654,0.6029812,-0.102774434,-0.533376,-0.10394323,-0.3564222,0.6374826,-0.4906818,0.459046,0.38168675,-0.19220887],[-0.25327396,0.34030682,-0.5780689,-0.10341296,0.44794607,0.15350609,-0.51224583,-0.5694763,-0.3856984,0.60207605,0.124467865,0.37996173,0.4741996],[-0.65099394,-0.1436866,-0.34031066,-0.44880912,0.5899,0.31723353,-0.23588851,-0.50561076,0.28370628,-0.30152458,-0.38816845,0.047665782,-0.070512585]],"activation":"identity","dense_3_b":[[-0.023715347],[0.026487991],[0.03818343]]},{"dense_4_W":[[-0.68857694,1.0650787,0.9217563]],"dense_4_b":[[0.029519804]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX 2020.json b/selfdrive/car/torque_data/lat_models/LEXUS RX 2020.json new file mode 100755 index 0000000000..554ac5ac3d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX 2020.json @@ -0,0 +1 @@ +{"input_std":[[8.812706],[1.2046702],[0.48371235],[0.046686843],[1.1999358],[1.2024622],[1.2033786],[1.181801],[1.1561146],[1.1195389],[1.0815737],[0.04636314],[0.04644517],[0.046534877],[0.04676031],[0.046842918],[0.046764217],[0.04643078]],"model_test_loss":0.019136762246489525,"input_size":18,"current_date_and_time":"2023-08-09_13-16-19","input_mean":[[23.225687],[-0.071597725],[-0.006403737],[-0.014869247],[-0.07103227],[-0.07217188],[-0.07275048],[-0.074461505],[-0.07488792],[-0.07229588],[-0.068321556],[-0.01480668],[-0.014833956],[-0.014870731],[-0.0150201935],[-0.015132994],[-0.0152152665],[-0.015241827]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1922611],[0.94190425],[-1.8803643],[1.8052227],[-0.0708761],[-0.15278636],[0.03023423]],"dense_1_W":[[1.552201,-0.3393357,-0.27431434,-0.43802527,-0.3741866,-0.08110382,-0.6744256,-0.32662967,0.117568575,-0.07447189,0.0011381231,0.0149186775,-0.026234545,0.27035344,-0.22903343,0.21218765,-0.13117951,0.1787165],[1.5157571,-0.01751974,0.2628785,0.10242989,0.8160844,0.033813257,0.5027697,0.25837898,0.026799573,0.033179637,0.04939591,-0.1756206,0.17158255,0.082036525,0.26975772,-0.24218568,0.03992314,-0.101497844],[-0.6898828,0.3296126,0.2381383,0.38712546,0.0020844117,0.3836064,0.045370143,0.13722278,0.10226575,0.38099837,-0.24260375,0.29536518,-0.25331467,-0.46099368,0.0860768,0.3208733,-0.048293054,-0.1899293],[0.72579914,0.0024951876,0.24405375,0.072388135,0.5108625,0.6879625,-0.768285,0.4665226,0.40248188,-0.088189945,-0.03153826,-0.12015286,-0.12880835,0.038919933,0.18531369,0.19858767,0.4032525,-0.49639243],[-0.006907261,1.1555037,5.512076,0.011916408,-1.3611755,0.047472972,0.4679199,0.18809648,0.8807568,0.79814273,-1.2557139,0.693036,-0.17998734,0.17353718,-0.72927487,-0.6196344,-0.10912921,0.36026958],[-0.0008086146,-0.6703738,-0.04672321,0.051983077,0.5071199,-1.3758855,1.051845,-0.13139765,0.10653976,0.16576192,-0.11845737,-0.29320416,-0.44305497,0.47334316,0.6171071,0.13699032,-0.11988301,-0.15529875],[-0.010062327,-0.4213587,-0.033820994,0.24619605,-0.107379094,-0.7219596,0.05261352,0.16658644,-0.5604586,-0.06510145,0.1325112,-0.3156187,-0.45383725,0.44158942,-0.100481614,0.15328817,0.27649054,-0.21409012]],"activation":"σ"},{"dense_2_W":[[0.09448425,0.3760177,-0.15260221,-0.40807378,-0.43990996,0.5492166,0.721128],[-0.72103924,-0.54227215,0.037051897,-0.30457422,-0.89297354,0.68800735,0.22008589],[0.28751957,-0.72327036,0.58277506,0.28192317,-0.026689565,-0.9505252,-0.50040275],[0.4725355,-0.62869906,-0.034366626,-0.08867052,0.33788702,-0.9937069,-0.8205744],[0.70781505,-0.1194498,0.69015354,0.60684264,-0.15911719,-1.1402134,-0.77705395],[-0.11801999,-0.90623593,-0.35348848,-0.13936913,0.27008694,-0.6951836,-0.85475653],[0.053964566,0.19979686,-0.6263667,-0.6289394,-0.1642748,0.97348315,0.6938839],[-0.057833552,0.25785288,0.33920816,-0.40871015,-0.19964917,-0.35569403,0.08428918],[-0.35905418,-1.1179031,1.069501,0.20561393,0.34141743,-0.50298977,-1.1658801],[0.5924804,0.05359343,-0.74364394,-0.542707,-0.7528103,-0.89056516,-0.49965763],[-0.17235844,0.009363647,0.14541583,-0.6132933,-0.4071755,0.72789896,0.4605604],[-0.037599627,-0.65237206,0.21704821,0.6360923,0.31922218,-1.1261895,-0.5370619],[-1.4063736,-0.410196,-0.4618791,-0.8892677,-0.7377025,0.60982996,1.0650238]],"activation":"σ","dense_2_b":[[-0.05620989],[-0.060037877],[-0.04623755],[0.015519294],[0.0995001],[-0.3057865],[-0.029583905],[-0.18218923],[-0.09876781],[-0.36697587],[-0.078949876],[-0.047403064],[0.027366562]]},{"dense_3_W":[[0.35254586,0.089774035,-0.44079193,-0.56373316,-0.6380692,0.019918533,0.78052264,-0.3596739,-0.64493376,-0.09652632,0.17468911,-0.6748918,0.8599969],[-0.5039963,-0.54529995,0.42020872,0.42345285,0.77461576,-0.18526357,-0.66473806,-0.3536843,0.8206677,0.08182418,-0.13014542,-0.14203,0.34024766],[0.24226099,-0.58680654,0.10851144,-0.08556077,0.54436725,0.29506567,-0.5938133,-0.20851049,0.33693817,0.085123494,-0.47413915,0.37861294,-0.23017392]],"activation":"identity","dense_3_b":[[0.06330438],[-0.025818001],[-0.030472636]]},{"dense_4_W":[[-0.7522928,0.38205072,0.60193]],"dense_4_b":[[-0.038911503]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B0E012x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B0E012x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..ffbba4f215 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B0E012x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.858131],[1.0081798],[0.42891374],[0.04033326],[1.0039434],[1.0047058],[1.0057864],[0.9871899],[0.96912324],[0.9463845],[0.91797376],[0.040223543],[0.040249895],[0.040269017],[0.040249255],[0.040179927],[0.039965343],[0.039587643]],"model_test_loss":0.012978884391486645,"input_size":18,"current_date_and_time":"2023-08-09_15-22-40","input_mean":[[25.53512],[-0.057664793],[0.006972764],[0.0020606092],[-0.057454415],[-0.057828046],[-0.058313288],[-0.05210109],[-0.04723263],[-0.04305777],[-0.037324708],[0.0020332797],[0.0020444782],[0.0020467127],[0.0020990318],[0.0021205018],[0.0021155798],[0.002061087]],"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.9451743],[-2.0738995],[-0.061819293],[-1.8539776],[0.11293126],[0.8801313],[-0.34697428]],"dense_1_W":[[-1.3579488,-0.14123936,-0.018169187,0.2567915,0.2472419,-0.407651,0.44249314,0.404622,0.041434586,0.16605115,-0.18061078,-0.18744762,-0.007931179,0.06848994,0.23897268,-0.12570733,0.15255798,-0.054657888],[-0.5138878,0.7540569,0.01823065,-0.30429357,0.105593584,0.6283228,-0.88449097,0.35527444,0.34103888,-0.08124087,-0.12751521,-0.12272718,0.40023044,0.078568466,0.094270095,-0.24328744,0.22644232,-0.02296254],[0.01880253,0.041950032,0.025469717,0.41977495,-0.01845549,0.7469875,-0.5836401,-0.0023528198,0.06800503,0.048917662,-0.033807367,0.3940383,-0.3420582,0.048574876,-0.73250633,-0.3168187,0.19207624,0.14923036],[-0.5069683,-0.7299225,-0.017133389,0.27239755,0.09518913,-0.6464978,0.5669755,-0.22607638,-0.22541493,-0.05590562,0.15980408,-0.26756075,-0.22189523,0.26979044,-0.19004701,0.08372643,0.042589996,-0.106104],[0.003376271,0.99690795,5.194685,-0.08252821,-1.2339424,-1.278542,-0.95400864,0.22764781,2.1331182,1.0682175,-0.5518043,1.1603253,0.1512765,0.09291671,0.060322978,-0.39886457,-0.8555216,-0.31327197],[1.3195114,0.097568,-0.016457167,0.18425311,0.22003257,-0.49077654,0.6284053,-0.02067786,0.18970595,-0.003833334,-0.053493172,-0.3488455,-0.04374197,0.48894325,0.33779547,-0.61585546,0.335012,-0.015417546],[-0.05744463,1.1883487,-0.20707692,-0.32463714,0.8947988,0.5895385,0.09502346,0.2980289,-0.086293384,0.6502581,0.027666133,0.28947368,0.13124675,-0.7183947,0.23811169,0.54866403,-0.09458978,-0.1836273]],"activation":"σ"},{"dense_2_W":[[0.61253756,-1.1365101,-0.29902524,0.9798833,-0.2917683,0.59114116,-0.4712067],[0.52844095,-0.86928684,-0.78100795,0.8103875,-0.41248968,0.6061389,0.095086515],[-1.1287509,-1.1174941,-0.2299692,-0.5305931,-1.6240323,0.899128,-0.95204324],[-0.17106694,-0.65125066,-1.1487548,1.3049239,-0.03965821,0.7915052,0.23665957],[-0.1951633,0.736451,-0.018969562,-0.54605484,0.40702567,-0.7090892,0.14927544],[-0.43511096,1.3270646,0.090805426,-1.0105572,-0.117792316,-0.44068936,0.6473223],[0.52573407,-0.4151988,-0.7318552,1.1034199,-0.35240525,-0.29688236,-0.5681273],[0.8565392,-0.28433335,-0.68133914,1.1850481,-1.0075815,-0.13676727,-0.12454539],[-0.42941204,1.0876211,0.8470857,-0.7139818,0.4409865,-0.8451851,-0.2075387],[-0.58658993,1.1041594,0.80485415,-0.3956205,0.23861384,-0.6500841,-0.012711808],[-0.44264716,1.2002516,0.9671141,-0.777456,0.17264067,-0.8688163,-0.12924784],[0.83560413,-0.37854236,-0.9930072,0.970375,-0.09642324,-0.28791323,-1.1921409],[0.2517275,-0.98617977,-0.6023062,1.2428936,0.12169115,0.42175332,-0.4277408]],"activation":"σ","dense_2_b":[[-0.00045856892],[-0.13278121],[-0.38624468],[-0.009671737],[-0.11906116],[-0.098297276],[-0.10887506],[-0.17448516],[-0.11598807],[-0.1596173],[-0.09860622],[-0.26982278],[0.063321225]]},{"dense_3_W":[[-0.59850806,-0.55752456,0.21218449,-0.6224379,0.31959382,0.70844734,-0.67447245,-0.53966963,0.8812389,0.6643036,0.88396746,-0.3286644,-0.46220767],[-0.6034193,-0.5671035,0.73748684,-0.51771855,0.25666666,0.5623304,-0.5781052,0.20079169,-0.14487052,0.38135555,0.48326564,-0.115334585,0.1118099],[-0.3604728,-0.15291758,0.09415789,-0.1948471,0.6609959,0.6682593,-0.5599815,0.018269831,0.07930072,-0.060835414,0.57257175,-0.2622459,-0.668998]],"activation":"identity","dense_3_b":[[0.034600537],[0.1429371],[0.05962403]]},{"dense_4_W":[[0.8548602,0.121467695,0.28002813]],"dense_4_b":[[0.009385257]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B48102x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B48102x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..2986dbb0f5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B48102x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.8977513],[0.68954486],[0.4139147],[0.030382803],[0.69193476],[0.69048476],[0.68913734],[0.6806858],[0.6777796],[0.67110157],[0.6681313],[0.030303426],[0.030323956],[0.030338047],[0.030418577],[0.030385923],[0.030345106],[0.030242294]],"model_test_loss":0.012908237986266613,"input_size":18,"current_date_and_time":"2023-08-09_15-48-43","input_mean":[[23.19783],[0.03271446],[0.025837483],[-0.011847352],[0.026097897],[0.02815446],[0.03049293],[0.041018687],[0.044047516],[0.044604685],[0.0430235],[-0.01190559],[-0.011907151],[-0.011900433],[-0.011840576],[-0.011839805],[-0.011870837],[-0.011916283]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.070281],[-2.4973028],[1.3214084],[-2.4905453],[-0.052674435],[-1.0832871],[0.5832555]],"dense_1_W":[[-1.782736,0.38585284,-0.08545495,0.4048967,-0.2801542,-0.13097851,-1.0943906,-0.27965558,0.29071763,-0.1403219,-0.10031121,0.19426891,-0.5468137,-0.5553437,0.3665551,0.53392786,-0.272529,-0.12062517],[-1.217346,1.0300412,0.00075295696,0.22974275,-0.012137472,0.65442824,-0.40739405,-0.16076401,0.26733837,-0.05870503,0.14761084,0.053736396,0.095834024,-0.21273386,-0.33324143,0.12504764,-0.15672976,0.07386392],[1.0505023,2.1441545,6.541688,-0.21625133,-1.9480888,-0.570705,-1.6117417,0.95555365,1.6392485,-0.043550003,-0.036482707,0.42250034,0.20424727,-0.1673073,0.22605596,-0.013399118,-1.0146956,0.16446613],[-1.2516127,-1.0277461,-0.0049578804,0.030769175,0.043333333,-0.8858235,0.54669535,0.13188538,-0.095215924,0.012589365,-0.18010837,-0.30505812,0.5021825,-0.31425828,0.38749072,-0.22350626,-0.05114633,0.08698958],[0.0035146833,0.3828884,0.055803537,-0.2754486,-0.3728101,1.3081414,-1.0317568,0.29426,0.10069639,0.089421265,-0.16310905,0.4280105,0.44955868,-0.30968818,-0.6182345,0.111985266,0.117390126,0.0961805],[-1.0358554,1.2746156,7.393638,-1.1811066,-1.6412053,-0.5476179,-1.172681,0.36368853,1.9390265,0.47966236,-0.11466104,0.56276196,0.5378139,-0.06509055,0.35610762,0.26768783,-1.025618,0.03889093],[1.7004466,0.20178793,-0.087380014,0.27393892,-0.51528084,0.27506933,-0.92300934,-0.37298542,0.03233947,0.030535467,-0.07243149,-0.23616593,0.1807038,-0.07146105,-0.17994934,0.1573161,-0.3682807,0.24465875]],"activation":"σ"},{"dense_2_W":[[-1.0014797,0.13553746,0.22278486,-0.399194,-0.527964,0.115432225,-0.60008395],[0.24153942,-0.031119501,-0.51762193,0.6818596,-0.97653997,-0.52417797,-0.25938374],[-0.5205759,-0.63843703,0.18108721,0.5189804,-0.839813,0.10334479,-0.100626364],[0.525222,0.54790866,0.33529684,-0.8107151,0.20456313,-0.30038992,0.41534916],[-0.35009837,-0.37109253,0.34654424,-0.23345965,-0.90483,-0.12241629,-0.3237933],[-0.28656074,0.5365135,-0.19887519,-0.4632808,0.5597225,0.58351445,0.5293639],[-0.06900586,-0.63779444,1.5707409,-1.1598672,0.1615726,1.5663954,1.0012243],[0.5492712,0.70519316,-0.4818449,-0.7936975,0.98074996,0.12498996,-0.13810375],[0.0056431335,-0.43114427,-0.09032395,0.506023,-0.7993859,-0.21588661,-0.07299588],[0.67064244,0.49529698,0.18830942,-0.7618566,0.73772794,-0.3761758,-0.46270788],[0.5728761,-0.06610756,-0.2067,0.24439229,1.0658774,0.022089032,-0.10871751],[-0.3089939,-0.46645024,-0.06367501,-0.6681549,-1.2519213,0.6221667,0.10172743],[0.09857253,-1.1578652,0.08043016,0.43568343,-0.8444561,0.28122354,-0.16943873]],"activation":"σ","dense_2_b":[[-0.09551276],[0.26105896],[0.22863466],[-0.23741141],[0.17701647],[-0.17702891],[-0.25717747],[-0.36781237],[0.19594961],[-0.14985447],[-0.24570842],[-0.05177276],[0.061600402]]},{"dense_3_W":[[-0.22265823,-0.45556778,0.17281826,-0.14696541,-0.5590243,-0.42801765,-0.17338079,-0.10080969,0.36018917,0.17413813,0.06440728,0.56492454,0.22878975],[0.16702455,0.83242625,0.3850462,-0.33998582,0.5892735,-0.33413044,-0.55653554,-0.54551136,0.60024905,-0.15473615,-0.633992,0.31632444,0.7458124],[0.30883184,-0.23770918,-0.17857468,-0.58323413,-0.5130921,-0.059556685,0.38129666,0.58364826,0.1521082,-0.17372313,0.2868733,-0.23405342,-0.07776656]],"activation":"identity","dense_3_b":[[0.055418704],[0.0787763],[0.036709785]]},{"dense_4_W":[[0.005051283,-1.2674674,0.09997759]],"dense_4_b":[[-0.07513949]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B48112x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B48112x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..bd2c176bb7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017 b'8965B48112x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.672505],[0.97997594],[0.48896867],[0.036406606],[0.9879945],[0.98470104],[0.9816876],[0.9598457],[0.9478727],[0.9382326],[0.9277363],[0.036488507],[0.036457427],[0.036408816],[0.036040876],[0.035670046],[0.035212148],[0.034712877]],"model_test_loss":0.013047197833657265,"input_size":18,"current_date_and_time":"2023-08-09_16-38-38","input_mean":[[26.06892],[-0.032476645],[0.01847185],[0.008156076],[-0.03514416],[-0.03364282],[-0.03196355],[-0.0248437],[-0.023279596],[-0.017502444],[-0.018172378],[0.008091517],[0.008101025],[0.008103796],[0.00808531],[0.008018075],[0.0077868756],[0.007642417]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.0938547],[-1.5377342],[0.11164253],[-1.3607982],[-0.001633297],[0.28943086],[-0.017152473]],"dense_1_W":[[-2.6134133,0.1072478,-0.038407013,-0.55906427,-0.54777765,0.53895926,-0.26524103,0.15754877,0.0075992765,0.11399316,0.060622185,0.04282183,-0.9743834,-1.0467935,-0.030679928,0.2015473,-0.170534,0.72894627],[-0.4446471,-0.6120142,0.0009793217,0.28336817,0.028145306,-1.2111511,0.52227914,-0.02825454,-0.021248085,-0.09601412,-0.050700705,0.004752271,-0.20404592,0.27143523,-0.5377922,-0.22390097,0.28489593,0.043314826],[-0.013865213,-0.42944995,0.0024095853,0.33657116,-0.17577003,-1.3745159,0.96880376,0.08447174,-0.18238825,-0.11932599,-0.00020815701,-0.72243226,0.27775034,0.31180686,-0.02206438,0.043953754,0.0844208,0.16568054],[-0.37105855,0.68786305,-0.00039992417,0.18125659,-0.23189458,1.2473199,-0.55478483,0.04226533,0.08798957,-0.0069234855,0.058259994,0.7714291,-0.383511,-0.9248507,0.36679336,0.15952906,0.12819786,-0.2177665],[0.013770035,0.33806401,0.00094282354,0.17861775,-0.23762894,1.1728739,-1.2293357,0.07470985,-0.08396865,0.14319621,-0.040008016,0.5050906,0.26662126,-0.6125382,-0.6498126,-0.17428778,-0.17383261,0.46036986],[0.0077164564,1.5451698,7.429268,0.31939277,-2.2427018,-1.5543389,-2.5262957,1.1669385,3.063373,1.1486622,-0.49699086,1.9423336,1.13846,-0.5957547,-1.5996556,-0.34185794,-0.6949594,0.12978563],[-0.042126972,-0.29461217,-1.4955524,0.45490184,-0.033281934,-0.6029691,0.3394342,-0.30512628,-0.15046905,-0.14568257,0.8093577,-0.8086997,-0.15785371,0.51180923,0.26197797,-0.17697093,0.12429469,-0.21264184]],"activation":"σ"},{"dense_2_W":[[-0.5995437,-0.3603585,-0.20216258,0.08936401,-0.49370512,-0.54119444,0.28133863],[-0.58552414,0.81165653,0.91113776,-0.79454756,0.22261482,-0.21558377,0.10684496],[-0.4171185,-0.568881,0.43534383,0.0026570433,0.21137409,0.25033414,-0.29121745],[-0.36481413,-0.9939236,0.05604151,-0.35338676,0.9317966,1.4149865,-0.54362875],[0.54199463,-0.6108903,-1.0630567,0.39385843,0.7272977,0.33584854,-0.31977272],[0.24222183,-0.15256006,0.60300756,-0.4242564,-0.46528172,-0.34210142,-0.3140277],[0.09832237,-0.16391051,-1.2382702,1.0045747,0.8160615,0.110929355,0.02551595],[0.02746031,-0.19373654,-0.2355057,0.24359266,0.5353504,-0.22755131,0.2656299],[-1.1224236,-0.3300643,-0.407043,-0.353378,0.65846336,-1.0422004,0.09945112],[-0.18847044,-0.886505,-0.16673878,0.5101195,1.0061107,0.11062626,-0.050155606],[0.3335287,0.11981937,0.29632357,-0.13577487,-0.0740185,-0.02512637,0.44026503],[-0.10581189,0.38680208,0.5723,-0.26251873,-0.27632186,-0.5749631,0.35630655],[-0.16280471,-0.25712195,0.53059477,-0.66531825,-0.66056573,0.0900753,0.48065072]],"activation":"σ","dense_2_b":[[-0.2385691],[0.12793182],[-0.10159543],[0.25047785],[-0.23729679],[0.024322221],[-0.18446803],[-0.07810453],[-0.41927636],[-0.016799252],[-0.053551592],[0.055111423],[0.04165242]]},{"dense_3_W":[[-0.059520952,-0.5622691,0.45825937,0.39820474,0.13583045,-0.32961982,0.015958305,0.3244693,0.4253685,0.23013696,-0.54041684,-0.40731147,-0.30158764],[0.09375583,-0.0017320638,-0.39634547,0.24657139,0.5715864,-0.140639,0.52030236,0.553719,-0.18884522,0.516919,-0.1633942,-0.6434239,-0.5723449],[0.029367253,-0.6095855,-0.5169094,0.41468775,0.1923313,0.57539755,0.39066675,0.48482603,-0.5734151,-0.060352806,0.33851054,-0.28380212,-0.28927657]],"activation":"identity","dense_3_b":[[-0.022509072],[-0.026452657],[-0.0094871335]]},{"dense_4_W":[[0.83508223,0.90878975,0.025333464]],"dense_4_b":[[-0.026976062]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017.json b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017.json new file mode 100755 index 0000000000..2541918644 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2017.json @@ -0,0 +1 @@ +{"input_std":[[9.006951],[1.0661907],[0.4208536],[0.040620446],[1.0632395],[1.063527],[1.0637337],[1.0418845],[1.0213413],[0.9960982],[0.9659563],[0.04054981],[0.04057159],[0.04058309],[0.04049591],[0.040372174],[0.04013236],[0.039733175]],"model_test_loss":0.014225631952285767,"input_size":18,"current_date_and_time":"2023-08-09_14-33-01","input_mean":[[25.177166],[-0.026529262],[0.009477891],[0.0017629279],[-0.028283715],[-0.027773762],[-0.02699433],[-0.023891538],[-0.02269541],[-0.020438392],[-0.017402157],[0.0018114187],[0.0018036948],[0.0017961235],[0.0018093524],[0.0017814242],[0.0017387652],[0.0016870175]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3488934],[-0.25318402],[1.3796363],[-2.4763696],[0.17862964],[-2.581063],[0.0374099]],"dense_1_W":[[-1.9565458,0.43680963,0.06587548,0.042409927,0.3682261,-0.32550198,0.3935391,0.34101823,-0.19819863,-0.09118507,0.072811775,-0.55412966,0.22973019,0.5704431,0.10271992,0.10906355,0.18409586,-0.25245637],[0.010017396,-0.23327492,-0.025723774,-0.06732227,-0.1377613,-0.9790948,1.1363516,-0.004057807,-0.09313964,0.054035064,-0.04986635,-0.6889519,-0.43221784,0.85702723,0.469375,0.3359073,0.1845464,-0.47437343],[2.133775,0.8436303,0.06543569,-0.19301523,0.7682015,-0.71488863,0.44514364,0.121126205,-0.5451813,-0.23265283,0.36209187,-0.10944904,-0.10013678,0.8461928,0.47840348,-0.4829053,-0.15971945,0.19538315],[-0.762671,0.8158483,0.11918508,0.11182312,0.045061667,0.5209565,-0.017836645,0.19029039,0.05993828,0.14132203,-0.14783566,0.21835268,-0.37212574,0.021008398,-0.07471657,0.23310561,0.30849415,-0.32095852],[0.012362058,1.1697396,4.896626,-0.6752607,-1.293956,-0.6969285,-1.2943544,0.48185518,1.9836872,0.80383307,-0.67689174,1.464715,1.0810806,-0.6226654,0.5317476,-0.97188056,-0.93535984,-0.07797605],[-0.76108575,-0.96115094,-0.12517042,-0.023074046,0.21048824,-1.0002247,0.1298013,0.017577004,-0.04171292,-0.13762209,0.09954114,-0.4320813,0.051972903,0.5637555,-0.20373943,-0.0645255,-0.17654338,0.17915705],[0.012589448,-1.178468,0.16960609,-0.042218912,-0.313776,-1.1033659,-0.3083642,0.04046465,-0.69654006,-0.5194823,0.22638294,-0.115158446,0.1719876,0.6620813,-0.27977157,-0.6041283,-0.16925894,0.5477763]],"activation":"σ"},{"dense_2_W":[[0.2714706,0.59053195,-0.0041459124,-0.41285,-0.3072934,0.30405983,0.29765671],[-0.05261304,0.61104286,0.083263226,-0.2729422,-0.15758975,0.3245751,0.08180204],[0.11750135,-0.9169556,0.16402717,-0.47221494,0.013237812,-0.9444454,0.07540947],[0.14767434,-0.2879568,-0.23108272,0.41553706,-0.022354566,-0.7293346,-0.44255376],[0.30335668,0.37456387,0.3885767,-0.7781797,0.03455829,0.701339,-0.088443086],[-0.1726601,-0.85276175,-0.42082515,1.3459167,0.014372793,-1.1087767,0.25560606],[-0.22434108,-0.61502177,-0.77391124,0.58211446,0.70793843,-0.44423535,-0.10059737],[-0.24011742,-1.1389203,0.13803475,0.5802644,0.4245233,-0.4964158,-0.06763477],[0.17082813,0.26018152,0.2441558,-0.798921,-0.34764507,0.53820854,0.4687339],[-0.142942,0.1200522,-0.2755005,-0.44287127,0.12139864,0.7061747,0.30685058],[0.26870826,0.27511376,0.013270598,-0.38270554,-0.25317055,0.5880916,0.38201085],[-0.51288533,-0.74000406,0.041218568,0.23942995,-0.61270565,-0.35922202,-0.41015244],[-0.31531772,-0.6721873,-0.0041211997,0.44185337,0.094147496,-0.532301,-0.09608283]],"activation":"σ","dense_2_b":[[-0.13420725],[-0.006237683],[-0.29298192],[-0.16996942],[-0.24118775],[0.39525142],[0.12012915],[0.079633266],[-0.14625302],[0.017826455],[-0.25199854],[0.08497193],[0.11287382]]},{"dense_3_W":[[0.3236856,-0.11585646,0.37450194,-0.3883134,-0.12542132,0.117089026,-0.33960536,-0.51633084,0.15317307,-0.46796653,0.22769703,0.14106414,0.37199378],[-0.46536645,-0.21581124,0.21901791,0.11581306,0.0037904275,0.20201044,0.76395154,0.2692143,-0.08054871,0.3889979,0.13807094,0.58494323,0.6641779],[-0.31520608,-0.5903212,-0.0585899,0.1499463,-0.49658206,0.3555356,0.734374,0.46968886,-0.6641194,-0.6121126,-0.57470906,0.48789984,0.46722496]],"activation":"identity","dense_3_b":[[-0.010275512],[-0.05716576],[-0.03483528]]},{"dense_4_W":[[0.05533481,0.9485316,1.0639691]],"dense_4_b":[[-0.04380799]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2020 b'8965B48271x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2020 b'8965B48271x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..3f7bdb166c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2020 b'8965B48271x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.316072],[0.9590723],[0.36351156],[0.0441653],[0.9523992],[0.954041],[0.9552573],[0.9414871],[0.92725456],[0.9035007],[0.8794774],[0.044077154],[0.044106334],[0.044123128],[0.04409188],[0.04404384],[0.04385866],[0.043682296]],"model_test_loss":0.01662302203476429,"input_size":18,"current_date_and_time":"2023-08-09_17-54-54","input_mean":[[24.043165],[0.030592984],[0.008662194],[-0.009329172],[0.030800642],[0.030898405],[0.031143442],[0.032330383],[0.031538412],[0.030825427],[0.032572977],[-0.00929861],[-0.00929033],[-0.009281115],[-0.009265514],[-0.009250021],[-0.009282802],[-0.009329454]],"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.026120635],[1.9416399],[0.60815054],[0.25644714],[0.3952565],[0.17582616],[-0.19558431]],"dense_1_W":[[3.335223,-0.14903972,0.017792625,0.44585547,-0.17456532,-0.3629251,0.34922808,0.67767817,0.15890893,0.31689033,-0.45744747,-0.78738886,-0.15512607,0.31531373,0.13215774,0.08615877,0.7029011,-0.66872466],[0.33444184,0.3865422,0.033097874,-0.10416669,-0.13609071,0.37232438,0.041280344,0.3434424,-0.06693412,0.37225628,-0.31096882,0.6194188,0.019381195,-0.81112,-0.11371732,0.12016824,0.15621446,-0.051286366],[0.32034597,-0.5460983,-0.022756906,0.24789928,0.08965753,-0.78998137,0.8077627,-0.25334057,0.30262712,-0.57730323,0.31271738,-0.413183,0.26481584,0.20591393,-0.2825443,0.048321266,0.037722778,-0.02604145],[-0.001096885,0.877505,4.375584,-0.21056944,-1.4921321,0.30686256,-0.07281465,-0.23879132,1.7749463,0.65912414,-1.1899405,0.7710069,0.51181823,-0.3327569,-0.69171345,-0.14890115,-0.16795291,-0.058986213],[3.0410533,0.37130952,-0.014436474,2.9947143e-5,-0.20359561,0.08057991,-0.4799077,-0.21630915,0.02990563,0.44693226,-0.31517798,0.34675393,-0.35125488,0.04655145,0.0073511093,-0.02863017,-0.3938378,0.28197953],[-0.02691242,-0.27878886,-0.025484474,0.11147362,0.010308179,-0.70408285,0.24386121,-0.26564816,-0.09767933,0.54513925,-0.30042544,-0.70545626,0.19622594,0.4065873,0.2987727,0.13130112,-0.16078812,-0.09777715],[-0.045214858,-0.3631571,-0.036500983,-0.11810798,0.45778593,-1.060346,1.0526772,0.031578775,-0.59605724,-0.36440456,0.511626,-0.73647,0.015697645,0.37303218,0.7600099,-0.21960646,0.16917647,-0.29108718]],"activation":"σ"},{"dense_2_W":[[-0.35218585,0.14308812,-0.57519746,0.31768999,0.17070374,-0.3732793,-0.48790818],[-0.34943467,-0.60227203,-0.4166511,-0.112191014,-0.04813801,-0.32272428,-0.032062355],[0.16224292,0.1755412,-0.6478811,-0.387053,0.63158387,-0.72614723,-0.8409673],[0.03339276,0.5439781,-0.7387804,-0.08449288,0.11998959,-0.18540213,-0.2549742],[-0.27214608,0.19542813,-0.13491894,-0.38912305,0.19247393,-0.8167929,-0.35544467],[-1.5148702,-0.19982053,-0.4914989,1.1792556,-0.88855046,-1.1474198,-0.6109534],[0.43902197,-0.2789942,-0.12047118,-0.30758274,-0.41768637,0.5652369,-0.0692086],[0.41314223,-0.50518227,0.5529299,-0.5850712,-0.14101315,0.15159719,0.4114286],[-0.013627578,-0.103289954,-0.45013615,0.4243168,-0.04401468,-0.6160927,-0.43941525],[-0.11910079,-0.30987215,0.2152533,0.38692838,-0.30739278,0.0892118,-0.04579046],[-0.44247296,1.0036645,0.045824107,0.4684638,0.7781144,-0.6853828,-0.62459666],[0.10554759,-0.05212664,0.4570351,-0.031150939,0.12591816,0.81590295,0.060838416],[0.4397581,-0.34536296,0.10181044,-0.39205134,-0.38584864,0.4655003,0.29053125]],"activation":"σ","dense_2_b":[[0.056989435],[-0.06921607],[0.05528886],[-0.010666541],[-0.2541545],[-0.019204568],[-0.021566926],[-0.043972496],[0.023812661],[-0.0577136],[0.13183823],[-0.033985566],[-0.05114418]]},{"dense_3_W":[[0.53362375,-0.31393358,0.77158445,0.42364752,0.27630767,0.6144512,-0.45349428,-0.63806015,0.28949618,-0.34986678,0.30039573,-0.56956017,-0.5325901],[0.25773355,-0.5742002,-0.18550177,-0.2709638,-0.43932548,0.4737292,0.486204,-0.49685073,0.22938772,0.07413067,0.3179722,-0.38822258,-0.021123026],[0.2324419,-0.27651238,-0.7168737,-0.4830318,0.29606512,0.303249,-0.074232936,0.09739446,-0.6291083,-0.49824134,-0.56967014,0.36437067,0.6702277]],"activation":"identity","dense_3_b":[[0.008113352],[0.044839732],[0.00069537724]]},{"dense_4_W":[[1.2693222,0.03663439,-0.6965769]],"dense_4_b":[[0.0059736283]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2020.json b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2020.json new file mode 100755 index 0000000000..4912d86a06 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/LEXUS RX HYBRID 2020.json @@ -0,0 +1 @@ +{"input_std":[[8.48588],[0.9537726],[0.36582693],[0.043554034],[0.9464909],[0.94813603],[0.94916946],[0.9368726],[0.9235678],[0.90086037],[0.8777369],[0.043447778],[0.043471374],[0.043487635],[0.043498106],[0.043457054],[0.043319046],[0.043142088]],"model_test_loss":0.01665860041975975,"input_size":18,"current_date_and_time":"2023-08-09_17-03-58","input_mean":[[23.708097],[0.018138325],[0.0074228332],[-0.009125995],[0.016877966],[0.01722217],[0.017804503],[0.01873034],[0.018360198],[0.018759517],[0.02228655],[-0.009105863],[-0.009100863],[-0.0090915],[-0.009066759],[-0.009038707],[-0.009013525],[-0.008991696]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.010409239],[-0.0048437957],[1.1988333],[-0.13476348],[1.4858104],[-0.794262],[0.6790735]],"dense_1_W":[[-0.011625103,-0.3083069,-0.0026562517,8.90253e-5,0.24631822,-1.1913638,0.82102,-0.11153706,0.1505958,0.2899964,-0.27461168,-0.49880293,0.04710429,0.29354858,0.416012,-0.3435446,0.19979279,-0.12608024],[5.6495715e-5,0.28144145,0.42635885,-0.04114077,-0.0014621562,0.46131748,-0.5228703,0.41057003,0.33081797,0.34625557,-1.0916862,0.09432066,0.32492688,-0.056624148,-0.040471476,-0.5424953,-0.0072112447,0.28388345],[1.7090412,0.2002619,0.0026196167,0.26699355,0.071899444,0.049739193,0.1701057,0.42871216,-0.038330317,-0.011365764,-0.23889059,0.12167451,-0.393932,0.3747686,0.00017281089,-0.1975879,0.026008612,0.12001063],[0.0018485491,-1.0713278,-4.8827915,0.26486492,2.050632,0.16912486,-0.06104053,-0.11624062,-1.6869881,-1.0038092,1.237583,-0.84136367,-0.39167315,-0.30604422,0.44892347,0.5669582,0.034259807,0.35163558],[1.7980721,-0.4584174,-0.0022513545,-0.6307025,-0.14997724,0.72365683,-0.91590655,-0.31521827,0.11314583,0.38106278,-0.00602411,0.21668813,0.43501985,-0.45246387,-0.009387444,0.23703502,-0.14703332,0.0099657895],[-0.1358725,0.54878175,-0.0025949588,-0.12666118,-0.19501363,0.654152,-0.16454516,-0.08546684,0.1169596,0.49080434,-0.3239291,0.35493678,-0.10910667,-0.33374792,-0.24709627,0.114444494,0.27612403,-0.06697925],[0.13420698,0.50657654,-0.0042069573,0.045988888,-0.07106984,0.9937608,-0.6856747,-0.032089513,0.21678452,0.25315955,-0.18009213,0.6731982,-0.321046,-0.5262044,0.0499083,-0.21319143,-0.17084885,0.3188954]],"activation":"σ"},{"dense_2_W":[[-0.7456634,0.46501774,-0.6609165,-0.36825928,0.34470782,0.37473607,0.32698643],[0.8138239,-0.2721878,0.23626322,0.42493615,-0.49122226,0.11831825,-0.0014772185],[0.9073058,-0.24231595,-0.6257176,0.3009464,-0.9984163,-0.84967256,-0.9688514],[0.81139743,-0.3589047,-0.25483748,-0.008724137,-0.30143958,-0.55920064,-0.75189996],[1.2769561,-0.19255519,-0.5588862,0.4862281,-1.1403346,-0.9804591,-1.1165341],[-0.31463045,0.45179945,-0.24287948,-0.6230109,0.25823897,0.7043701,-0.22927245],[-1.008901,0.50820404,-0.73319477,-0.07753135,-0.3671213,0.6114657,0.06207998],[-0.5402591,-0.8133519,0.14899945,0.07088945,0.031132944,-0.13568036,-0.49520075],[-1.6630762,-0.06750191,-1.6710929,-0.14377673,-0.8075217,1.4285947,0.8853607],[-0.3978325,-0.20129038,-0.3479711,0.023103444,0.37153137,-0.3815196,-0.2664648],[0.22289358,0.35865685,-0.7157779,-0.28774455,-1.0286486,-1.0144361,-1.3272792],[1.084518,-0.7375414,0.45458505,-0.07111571,-0.6131045,0.0032512164,-0.5619188],[-1.4050175,0.33980614,-1.1927856,-0.46912205,-0.58342016,1.0496932,0.6457101]],"activation":"σ","dense_2_b":[[-0.06799501],[-0.14373808],[-0.1901882],[-0.15265658],[-0.22159524],[-0.07163111],[-0.12828404],[-0.37175685],[-0.48142236],[-0.34072894],[-0.10627754],[-0.048601486],[-0.29759893]]},{"dense_3_W":[[-0.04726544,-0.39426312,0.30152455,-0.13302766,0.118110485,-0.14255127,0.5374407,-0.020599457,-0.16083333,-0.14201048,0.047239352,0.38325223,0.15821639],[0.4946483,-0.34571862,-0.5582076,-0.5775158,-0.840619,0.24489452,0.33843094,-0.5029043,0.61864847,0.53716034,-0.54293144,-0.5770566,0.804303],[-0.68038666,0.06468416,0.5824173,0.06446385,0.5888793,-0.19427243,-0.3311894,-0.6022182,-0.77085805,0.42349538,0.5826747,0.58117974,-0.21141453]],"activation":"identity","dense_3_b":[[0.032147415],[0.045437515],[-0.028842183]]},{"dense_4_W":[[0.17054327,0.9154161,-0.7712217]],"dense_4_b":[[0.034591846]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/MAZDA CX-5 2022 b'KSD5-3210X-C-00x00x00x00x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/MAZDA CX-5 2022 b'KSD5-3210X-C-00x00x00x00x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..7e79feb6d1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/MAZDA CX-5 2022 b'KSD5-3210X-C-00x00x00x00x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.853387],[1.1592323],[0.5035471],[0.04757312],[1.1533973],[1.1566302],[1.1592906],[1.124919],[1.097695],[1.0662291],[1.031133],[0.04736746],[0.04742848],[0.047484897],[0.047564015],[0.047558986],[0.047428854],[0.04712477]],"model_test_loss":0.01737847924232483,"input_size":18,"current_date_and_time":"2023-08-09_18-49-11","input_mean":[[23.514374],[0.01205051],[-0.007076305],[-0.010646906],[0.013812598],[0.013436532],[0.01327746],[0.010840775],[0.010276086],[0.008101413],[0.0081624],[-0.010648332],[-0.010639621],[-0.010631156],[-0.010660867],[-0.0107276775],[-0.01080371],[-0.010883885]],"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.44225207],[-0.08251625],[-0.09139792],[-0.17654161],[-1.2058073],[-0.18010782],[-1.0617452]],"dense_1_W":[[0.81515855,0.19847405,-0.16027977,0.2605701,0.5020647,0.6416506,-0.74194986,0.2395706,0.008035103,-0.54028624,-0.68319666,-0.11733088,0.30929378,-0.57654405,-0.11921764,-0.07856754,0.36212778,-0.21245824],[-0.003413831,-0.88659906,-1.5215017e-5,0.2659344,0.66569483,-1.4612998,0.502116,-0.023383126,0.27923653,0.22036943,-0.24609998,-0.16959597,0.047625005,-0.4744547,0.54592556,-0.07476282,-0.057982,-0.0049017775],[-0.0071781585,1.3938068,5.4535723,-0.42513278,-1.0321593,-0.9752934,-0.7584714,0.67374307,1.2021991,0.6324794,-0.48040524,0.6027366,0.034736745,0.218859,0.021496648,-0.23673749,-0.3517566,0.1679437],[-0.7695569,0.26124287,-0.15884998,-0.08147379,-0.10981094,0.6529741,-0.19342661,0.43262586,-0.26433924,-0.30309507,-0.86631536,0.13160278,-0.033320703,-0.14629383,-0.047781195,0.07316912,-0.17327231,0.101880364],[-0.5631856,-0.42516446,0.13529952,-0.18435624,-0.1343596,0.2858478,-1.1791672,0.07787927,0.9311218,0.68779874,0.080623545,0.085128896,-0.26469198,0.19951835,0.5323622,-0.09537051,-0.2584652,0.101225466],[0.0015933844,-0.159882,0.00029708236,-0.26148286,-0.43383598,-0.5543793,0.9337357,-0.36895335,0.39094746,0.05787086,-0.24165697,-0.2886184,0.3548747,-0.29055887,0.74826497,0.10615606,0.20682812,-0.32921875],[-0.5261344,0.52323943,-0.13088919,-0.008910816,-0.21776229,-0.46300754,1.8696176,-0.20582403,-1.1688477,-0.6119323,-0.04257218,0.013339775,-0.043501914,0.2700189,-0.39648747,-0.0074166763,-0.10004616,0.16081381]],"activation":"σ"},{"dense_2_W":[[-0.5157362,0.9631259,-0.6171437,-0.63063097,-0.4735463,0.3908077,1.1676315],[-0.17338198,-0.23641111,-0.47618997,-0.8813003,0.06709429,0.39402965,-0.4519197],[0.059771042,-0.5551666,-0.1077192,0.09842683,-0.42055693,-1.128195,-0.056298535],[0.54656047,-1.1881918,-0.06123479,0.3539518,0.86083883,-0.22125135,-0.7932267],[0.43361214,-0.8142263,0.23757508,0.094281524,0.57598335,-0.29057238,-0.61107886],[-0.41463575,1.0157188,0.028030625,-0.78584176,-0.49250048,0.8294643,0.7266427],[-0.9193553,0.7055807,-0.585519,-0.31935224,-0.3264894,0.4916916,1.2605145],[0.22281124,-0.9272137,0.3690255,0.1680717,0.87741905,-1.0792515,0.07280114],[-0.0030278699,-1.4448571,0.16294147,0.63729775,0.4577902,-0.3729355,-0.14417095],[-0.7692859,0.9571105,-0.05139316,-0.5226682,-0.9362267,0.6496911,1.0343727],[-0.17001544,-0.5700911,0.4439341,0.087172486,0.5646342,-1.0282485,-0.018494168],[0.41095787,-0.8497653,-0.5612039,0.3726814,0.65113074,-0.5311523,-0.5471418],[-0.45295602,0.33931798,0.095446564,-0.54154277,-1.0325888,0.38092053,1.145116]],"activation":"σ","dense_2_b":[[-0.3186452],[-0.288119],[-0.38380378],[0.12766144],[-0.10716348],[-0.14310987],[-0.34722012],[-0.018767025],[-0.2038077],[-0.18889567],[0.07034628],[0.012997789],[-0.1260928]]},{"dense_3_W":[[-0.6318957,0.48257327,0.1136089,0.51249325,-0.49085104,-0.46579233,-0.32575548,0.69841176,-0.13590871,-0.48699,0.39608002,0.74255526,-0.28925848],[0.0032501454,0.12569621,-0.004480495,-0.45128265,-0.2787252,0.55744016,0.7084973,-0.52268666,-0.20164965,0.6661134,-0.37891406,-0.20163451,0.32705396],[0.5388942,-0.22452125,-0.35520035,0.22645302,-0.40178102,0.70361614,-0.22213759,-0.8835455,-0.56852955,0.671603,-0.407134,-0.011616957,0.27316284]],"activation":"identity","dense_3_b":[[-0.002264159],[-0.1245649],[-0.077148765]]},{"dense_4_W":[[0.3225791,-0.9383285,-0.49840775]],"dense_4_b":[[0.11291003]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/MAZDA CX-5 2022.json b/selfdrive/car/torque_data/lat_models/MAZDA CX-5 2022.json new file mode 100755 index 0000000000..3cb6a37b14 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/MAZDA CX-5 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.853577],[1.1593435],[0.49393934],[0.047530506],[1.1528559],[1.1569644],[1.1598135],[1.1245039],[1.0973833],[1.0626532],[1.0269637],[0.047361173],[0.047408417],[0.047455847],[0.047535572],[0.047536217],[0.04739956],[0.04713172]],"model_test_loss":0.017221078276634216,"input_size":18,"current_date_and_time":"2023-08-09_18-22-21","input_mean":[[23.515398],[0.012237509],[-0.0044900486],[-0.010730645],[0.013944725],[0.013308859],[0.012569497],[0.011769375],[0.010604365],[0.010843918],[0.011256869],[-0.0107458485],[-0.010734076],[-0.010720637],[-0.010731344],[-0.01076948],[-0.010765305],[-0.01082986]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.199587],[-0.25501987],[-0.5037064],[-0.23722672],[0.22343779],[0.14423445],[-0.07885718]],"dense_1_W":[[1.2625326,0.16327555,0.0066552805,0.44784018,-0.124741316,0.79189295,-0.37784576,0.21143824,-0.52783173,-0.20586084,0.23246923,0.1308419,0.11561832,-0.55449927,-0.11027749,-0.18869302,-0.2170536,0.08424656],[-0.006859232,-0.086538136,-0.03269977,0.13604829,0.24823508,-0.5691345,0.670277,0.040435724,-0.16860203,-0.41622674,0.25470176,0.02203289,-0.23012973,0.39989966,-0.47250885,-0.10986197,0.20646292,0.02149021],[1.3279617,0.25124303,-0.007813492,-0.72305727,0.06114258,-0.8571762,0.063125186,-0.25974143,0.4144009,0.60714114,-0.46617725,-0.2852775,-0.0355692,0.5701069,0.69028735,0.27851647,-0.26454824,0.07074926],[0.022198461,1.6731384,0.037180465,0.765974,0.030372338,-0.7625096,2.1497931,-1.2226309,-1.9869789,-0.91440254,0.9935744,-0.3478071,0.53434056,-0.08860992,-0.28544557,-0.29930937,-0.5889199,0.4349971],[0.2660301,-0.86187685,8.6956774e-5,-0.016676437,-0.3185729,-0.8080561,1.0541335,0.12288944,0.1756726,-0.14763017,-0.09342803,0.17633434,-0.24657024,-0.3275839,0.37692598,0.048297286,0.19601016,-0.20960684],[0.15503937,0.78893465,-0.0035333869,-0.0016546088,0.18449067,0.46749434,-0.7731415,0.33954102,-0.035273015,-0.3853616,0.23819815,0.34393597,-0.057135757,0.15562473,-0.3307375,-0.28002447,-0.14485608,0.3072072],[-0.002361901,-1.5429035,-5.8346395,0.50011724,0.42428496,0.7945255,0.49649864,0.34323424,-0.9758048,-0.9413602,0.64176863,-0.59547406,-0.009193582,-0.36598718,0.48848686,-0.27432454,0.047451578,0.28842512]],"activation":"σ"},{"dense_2_W":[[0.46865103,-0.60989743,-0.03747131,-0.39046776,-0.057409145,-0.39815053,-0.59903854],[0.3293413,0.5657211,0.58408237,0.09847331,0.6722225,-0.5966699,0.43323725],[-1.1938511,0.3152245,-0.7231345,0.36246085,0.17062272,-0.9542798,0.42241877],[0.95589864,-0.5171128,-0.20689346,-0.2149552,-0.17504925,1.4507052,-0.458539],[0.6998986,-0.5149185,-0.41500762,-0.34256452,-0.59194785,0.68115014,0.022985162],[-0.58739376,0.5298398,0.35696748,-0.09943707,1.0701959,-0.8042608,-0.25183183],[-1.7204717,-0.5559019,-0.9794375,-2.4412615,0.009480803,-0.2547261,0.2289718],[0.6462851,-0.7868944,-0.9317859,-0.62466663,-0.11116908,0.48139545,-0.1042982],[0.7837947,-0.31750438,-0.61143816,-0.53003997,-0.8487594,0.52839005,0.071558826],[-0.6952866,-1.0207022,-0.8329126,-0.23308934,-0.103428386,0.37906075,-0.95636684],[-0.4912487,0.16609176,0.38974765,0.5311249,0.8187408,-0.9927307,-0.1320584],[-0.50672543,0.5862622,-0.2999275,-0.0069663594,0.18914229,-1.3985909,0.35376993],[-0.8134264,0.55566525,0.6216377,0.7941298,0.6479907,-1.2260833,-0.31804174]],"activation":"σ","dense_2_b":[[-0.19038986],[-0.16041437],[-0.5408977],[0.30586013],[0.085234426],[-0.10838832],[0.22506814],[0.0007744643],[0.13522272],[0.03689445],[-0.13003486],[-0.27763245],[-0.092821054]]},{"dense_3_W":[[-0.65185815,0.54327095,0.10433931,-0.116812855,-0.55839425,0.6606599,-0.59668356,-0.1460392,-0.4181811,-0.8674938,0.51525503,-0.23707807,0.29755294],[-0.09864905,-0.65130895,-0.7366327,0.44178113,0.7440715,-0.18855122,0.5229587,0.648026,0.7389669,0.58856255,-0.29644322,-0.56690645,-0.47691458],[-0.028702423,-0.025029318,0.3560928,0.08559789,-0.5590178,-0.21502936,0.4283347,0.14829901,0.15673526,-0.36272648,-0.21479517,0.23683308,0.39158282]],"activation":"identity","dense_3_b":[[-0.08270337],[-0.04420589],[-0.00881405]]},{"dense_4_W":[[-0.259468,1.106187,0.007629875]],"dense_4_b":[[-0.03991197]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/MAZDA CX-9 2021 b'TC3M-3210X-A-00x00x00x00x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/MAZDA CX-9 2021 b'TC3M-3210X-A-00x00x00x00x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..3c68fce4ea --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/MAZDA CX-9 2021 b'TC3M-3210X-A-00x00x00x00x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.1361938],[1.0207393],[0.46784142],[0.044281065],[1.0135106],[1.0156862],[1.0179193],[0.99846673],[0.9808455],[0.95554197],[0.93192744],[0.044129286],[0.044156313],[0.044183984],[0.044230428],[0.044231635],[0.04403099],[0.043691065]],"model_test_loss":0.015346277505159378,"input_size":18,"current_date_and_time":"2023-08-09_19-39-22","input_mean":[[26.720535],[0.05398475],[0.018588284],[-0.0071310536],[0.04973699],[0.051148783],[0.05272367],[0.059138265],[0.05985436],[0.061450966],[0.061546516],[-0.007231824],[-0.00721414],[-0.007194777],[-0.0072021107],[-0.007212742],[-0.007267123],[-0.007447193]],"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.07717255],[0.27171892],[-1.2506876],[-0.016007472],[-0.015063482],[-0.040170796],[-1.3193151]],"dense_1_W":[[-0.00046635105,0.23848942,0.0075265327,0.63944364,0.1347048,0.47492328,-0.37915337,0.41173533,-0.12487092,-0.29509735,0.12250014,0.45845526,-0.054787334,-0.5933447,-0.42548034,-0.45802563,-0.43666455,0.4965784],[0.0028189807,0.9642001,6.3449173,0.27022457,-1.2672639,-0.31867704,-1.0117996,0.016185766,1.29451,1.0355864,-0.5214663,0.12862188,0.3666462,-0.44845012,0.0503311,-0.55411357,-0.0335223,0.22428314],[-0.47832125,1.0210371,0.0025497465,-0.37653345,-0.3742908,0.41137654,-0.88231635,0.07470647,-0.13826749,0.077677675,0.14215057,0.4993727,0.23369971,-0.41651008,-0.20243475,0.10337624,0.048701506,0.0058387266],[-0.010898832,0.9759092,0.78411144,0.13314718,0.7009455,-0.24671309,1.0518397,-0.8327215,-1.1135107,-0.9663988,0.37700438,0.242799,0.26452747,0.23343697,-0.0026173661,-0.60242945,-0.27355608,-0.0491],[-0.010772643,-0.5600224,0.763155,0.30147272,0.78109336,0.837608,-1.0615004,0.5927615,0.50307256,-0.23107275,-0.9367593,0.56559885,0.300443,-0.50897396,-0.2478554,-0.058721192,-0.103559576,-0.29454744],[-0.0016055347,-0.30018213,0.007459824,0.09456597,-0.24748099,-1.0068074,0.22400783,0.22705272,0.46885622,0.7039897,-0.7698514,-0.67375356,0.1720363,0.25146246,0.05736602,0.07285658,-0.13567634,0.09812689],[-0.4724937,-1.0677936,-0.0013191341,0.3016288,0.3043617,-0.546663,0.9942631,0.047015384,0.33232743,-0.22391738,-0.16955799,-0.44435427,0.088968895,0.2033616,-0.024262402,-0.21804309,0.2939665,-0.10468075]],"activation":"σ"},{"dense_2_W":[[-0.02815128,-0.15404527,0.48134676,-0.2045751,0.45873386,-0.9992201,-0.4732975],[-0.81980515,-0.14103535,-0.7424751,0.32967785,-0.43455988,0.42265758,1.1696832],[0.17993073,0.36625385,1.2360194,-0.7851182,0.58637094,-0.9563679,-0.6327467],[-0.80701834,-0.46103284,-0.38886464,0.26659998,-0.25459498,0.27860713,1.0151616],[-0.26352298,-0.27474797,-0.71573704,0.5585518,-0.2905977,0.35913047,0.5679929],[-0.040301513,-0.41732746,0.12182226,0.23108034,-0.84193206,-0.024594149,-0.28726375],[-0.37716445,-0.017540926,-0.7418782,0.67433614,-0.4516054,0.43178025,-0.06261839],[-0.14396086,0.20600641,-0.6750777,0.64446765,-0.9558452,0.41428146,0.09141522],[0.8223245,-0.051082235,0.52545285,-0.6711533,0.26996845,-0.093948975,-1.0486971],[-0.30826652,-0.180534,-0.19349286,-0.20159452,-0.15312585,0.3642725,0.52487767],[0.75069547,0.0020414179,0.33697206,-0.7357639,0.5642956,-0.73201805,-0.15238681],[0.7387959,-0.04430659,0.5192625,-0.5607489,0.7265771,-0.6451385,-0.68313706],[0.017428305,-0.34786505,-0.16648427,0.16268884,-0.6232374,0.32126054,0.8016188]],"activation":"σ","dense_2_b":[[-0.009145167],[0.07557344],[-0.19250816],[-0.049706537],[-0.10579298],[-0.23372805],[-0.22532278],[-0.12664817],[-0.03729099],[-0.123311765],[0.025257772],[-0.1679509],[-0.08767181]]},{"dense_3_W":[[-0.71948236,0.20356402,0.3145974,0.13516659,0.52638,-0.29817042,0.498107,-0.010514032,0.18771078,0.013163666,-0.7712328,-0.4116291,0.3748885],[-0.64847153,0.23644143,-0.4865116,0.47148782,0.41150305,-0.12364886,-0.3837079,0.32072318,-0.022468964,0.55944085,-0.6452794,0.29679397,-0.124723144],[0.32205322,0.8586511,-0.8641501,0.16287574,0.18229792,0.4021785,-0.042451933,0.47848225,-0.5249389,0.13250944,-0.4461431,-0.25520405,0.1984305]],"activation":"identity","dense_3_b":[[-0.07424013],[-0.058659244],[-0.08360579]]},{"dense_4_W":[[-0.8438062,-0.24870598,-1.0960536]],"dense_4_b":[[0.073657714]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/MAZDA CX-9 2021.json b/selfdrive/car/torque_data/lat_models/MAZDA CX-9 2021.json new file mode 100755 index 0000000000..bda8ada35f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/MAZDA CX-9 2021.json @@ -0,0 +1 @@ +{"input_std":[[6.1377034],[1.0210788],[0.46911943],[0.04458394],[1.0146378],[1.0170907],[1.0187873],[0.99643576],[0.977885],[0.9539401],[0.9314358],[0.0443801],[0.044420015],[0.04446651],[0.04452825],[0.04450817],[0.04427827],[0.04390146]],"model_test_loss":0.016026578843593597,"input_size":18,"current_date_and_time":"2023-08-09_19-14-34","input_mean":[[26.721071],[0.05378143],[0.018124493],[-0.007393202],[0.048810303],[0.050282035],[0.052012227],[0.057080623],[0.05906103],[0.058861],[0.05875214],[-0.0075229136],[-0.0075009223],[-0.007483631],[-0.0074706767],[-0.0074925683],[-0.0075200107],[-0.0076175835]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.18089767],[0.49798125],[-0.24118638],[-2.1373975],[-0.16477053],[0.34568876],[-0.21016233]],"dense_1_W":[[0.074662894,-0.3669638,0.25222635,0.107843496,-0.10552656,-1.0399265,1.0163934,-0.48659247,-0.030600587,-0.11743266,0.14577629,-0.25742808,0.3170169,0.36954135,0.040227413,0.15968736,0.062263597,0.24831484],[0.08303395,-0.8697939,0.0030468423,0.15263641,0.107188724,-1.0068568,0.4416236,0.036292315,0.7619705,0.1695332,-0.57831824,-0.2111467,0.11940522,-0.041054823,0.35764664,-0.47026095,-0.069946416,0.27341142],[0.048043054,-0.31118855,-0.008299072,-0.11476858,0.33377898,-1.0105896,0.36259222,0.2396159,0.20328248,-0.12248921,-0.12638399,-0.4566413,0.09750506,0.07093791,0.55933607,0.010423586,0.10305094,-0.16882543],[-0.2943162,-1.6256222,0.0030186898,0.4355704,-0.11311622,-0.18757336,0.59179604,0.19876327,0.081539884,0.15316048,-0.29308975,-0.78554755,0.11605082,0.106179096,0.4265695,-0.16271093,0.005539031,0.02609059],[0.07329607,-0.8092628,0.25480765,0.29808077,-0.0061037876,0.42461434,-1.7734524,0.8508979,0.86776084,-0.23827028,-0.3394005,0.49403337,0.00061965705,-0.28957158,0.25209922,-0.109510385,0.030290708,0.40608874],[0.039265428,0.96887267,6.0339727,-0.10146958,-0.4268955,-0.99481356,-1.3445842,0.73430777,1.103279,1.2262536,-0.9347754,0.7603965,0.27957165,-0.72691447,0.079958566,0.21448162,-0.6384232,-0.037277497],[0.0016329347,0.16354942,0.002987302,-0.052555222,-0.22473752,-0.5058604,0.6229535,-0.047164608,-0.5693476,-0.26495168,0.29653648,-0.5010037,-0.11219094,0.25223202,0.52381283,0.6169986,0.023134451,-0.33158067]],"activation":"σ"},{"dense_2_W":[[-0.7412992,-0.7675937,-0.4397283,0.31320858,0.5621121,0.53991586,-0.35282382],[0.39020097,0.14299431,0.11215057,0.1305876,-0.9580759,-0.42531374,1.1606607],[-0.68442714,-0.5091107,-0.2732925,0.038994852,0.16016693,0.084352866,-0.40752736],[-0.3638797,-0.5586708,0.12934496,-0.89443725,0.3385314,-0.49931,-0.49778506],[0.15667213,0.2869896,0.11566534,0.8353921,-0.8303651,-0.67806315,0.37547386],[-0.44675717,-0.89146745,-0.51320916,-0.8497574,0.53292394,-0.22540878,0.27044648],[0.31874314,0.7925137,0.691313,0.43609503,-1.0456865,-0.121448435,0.54489106],[0.70710474,0.8615981,0.37050986,0.17309327,-1.0366682,-0.033383362,0.64695203],[-0.56060874,-0.75052696,-0.23543693,-0.5132341,0.22080141,0.1704808,0.16872974],[1.0095209,0.8009594,0.5537545,0.8833569,-1.1999682,0.31028512,0.18520752],[-0.9428297,-0.37537527,-0.59236115,0.33072037,0.26682293,0.41685763,-0.0841698],[-0.24776414,-0.16537917,-0.06624358,-0.47923082,-0.06637364,0.113684684,-0.5439529],[-0.83423465,0.46298993,-0.27318522,0.014554697,-0.37881574,-0.9102047,-0.4330378]],"activation":"σ","dense_2_b":[[-0.052797712],[-0.087834224],[0.14800552],[0.15060428],[-0.11083593],[0.17317224],[-0.16887216],[-0.27164057],[0.14738622],[-0.7614823],[0.007635959],[0.1378371],[-0.66434515]]},{"dense_3_W":[[0.36896288,-0.490786,0.16599391,0.47720614,-0.30545673,0.7379879,0.013581132,-0.32646582,0.558891,0.18879382,-0.37756246,-0.1875126,-0.124775544],[0.18666591,0.5846334,-0.10136687,-0.7394393,-0.2828246,-0.08108596,0.39981124,0.20680344,-0.37288138,0.27750582,-0.11473721,-0.57098895,0.4266538],[0.7361726,-0.58514285,0.7204545,0.106599934,-0.59268904,0.5647647,-0.45099103,-0.6198126,0.68592227,-0.25746143,0.43516034,0.27023137,0.36228538]],"activation":"identity","dense_3_b":[[-0.09970351],[-0.0810631],[0.07066309]]},{"dense_4_W":[[0.09306378,-0.5163019,0.9577329]],"dense_4_b":[[0.07198106]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/MAZDA CX-9.json b/selfdrive/car/torque_data/lat_models/MAZDA CX-9.json new file mode 100755 index 0000000000..1464ff4dfa --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/MAZDA CX-9.json @@ -0,0 +1 @@ +{"test_dict":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.68026423,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6623511,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.7894848,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.45772332,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.033177804,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8652633,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.72988725,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.33481875,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.6028637,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.6341075,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.35337192,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5604581,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.49662757,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8983778,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8291683,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.21059237,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.3554733,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.61752445,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.008872215,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.82794446,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.722765,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.58601475,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.6585865,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.3415729,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7593987,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2533843,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.36514503,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9955126,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9061998,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5863995,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.70988524,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9357347,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.40801805,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.7080684,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8582784,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.051181857,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.32222438,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.68954885,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.81613845,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5503567,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.95135486,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.38768044,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.121791795,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.60388947,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.58747494,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.460676,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.07276039,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.7868223,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.45431036,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8425848,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.09901318,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.26556718,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.51706076,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.22000633,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.08331953,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.4225998,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.20729552,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.21171938,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8852378,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9542402,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.2908706,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.33962357,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.587801,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.40549684,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.13055985,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.93948686,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1222087,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2840799,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.41804174,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8638405,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.3479214,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1160183,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.4250751,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.37797537,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.74481004,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0012709,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5549363,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.013350483,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.59705853,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.32066464,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1208482},"input_std":[[4.758569],[0.7551621],[1.1411846],[0.024509063],[0.7418195],[0.74795926],[0.75277853],[0.7348531],[0.7328033],[0.7360365],[0.73419976],[0.024163457],[0.02427521],[0.024369553],[0.024361141],[0.024596939],[0.02470201],[0.024847152]],"model_test_loss":0.011168484576046467,"input_size":18,"current_date_and_time":"2023-07-16_15-31-09","input_mean":[[24.214306],[-0.068722084],[0.13368857],[-0.012954545],[-0.0908967],[-0.08666857],[-0.07849512],[-0.042653743],[-0.027166469],[-0.009568535],[-0.001553267],[-0.013330359],[-0.013247636],[-0.013182787],[-0.013015977],[-0.013002344],[-0.012768261],[-0.012813394]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"test_dict_zero_bias":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.63145995,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6819694,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8772025,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.55443954,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.024535596,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7776458,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.82169604,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.32655615,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.52833325,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.60248363,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.2712959,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.61627734,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.57438755,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.8270569,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.89278406,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2993996,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.39583528,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6871477,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.0012517273,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9093442,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.70719516,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.61919284,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.6058605,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.38305718,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7314606,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.31522623,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.31417722,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.94576484,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8632306,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.50871336,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.66870224,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0360692,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.3741793,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.7720997,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7928454,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.09808446,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.31983182,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.63806283,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.88232887,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.60230434,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.874546,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.34882647,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.10547972,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.52212185,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.51409614,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.55887365,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.08741653,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8739745,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.42246366,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8930687,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.060002506,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.3024186,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.59369165,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.28634965,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.12954244,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.48957476,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.29448348,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.23015675,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.81391317,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0366076,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.26818705,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.34778464,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6359127,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.3900602,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.09257127,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0405408,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0238359,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.27612492,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.38687146,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.77963734,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.26859418,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0187957,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.4089293,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.38123727,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.83644295,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9439602,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.60338587,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.04257779,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5176249,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.38916177,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0254881},"layers":[{"dense_1_b":[[-0.39623764],[0.14138116],[-0.2588534],[0.44002953],[0.22150832],[-1.471221],[1.091665]],"dense_1_W":[[-1.3643335,-0.39512777,0.49481088,-0.160357,-0.11053611,0.5127148,1.944503,-0.519241,-0.1717221,-2.2519088,0.85069805,0.16777276,0.046915065,0.07825442,-0.19920808,-0.093078785,0.22527768,-0.015349518],[0.07033132,-1.2395316,-0.015185883,0.049182996,-0.8706203,0.08936256,1.192001,0.73432046,-1.0403839,-0.99523735,0.18716313,-0.46670943,0.36377695,-0.06476297,0.29031602,-0.046463974,-0.0934093,-0.027420614],[0.036429238,0.25500375,-0.050834823,0.007870147,0.013165975,-0.2152336,-0.50505584,-0.57315665,0.43266997,0.2960198,-0.2809415,-0.16854034,-0.22267757,0.38213494,-0.32983685,0.22851394,-0.1784995,0.29428333],[0.031305227,-1.7722394,0.0051150094,-0.2393632,-0.429712,0.9946768,0.57891685,0.84168047,0.44816926,-1.2334055,0.5619671,0.3394732,-0.09925409,0.1931788,-0.7158236,-0.64525104,-0.15853617,0.7985537],[1.4468489,-0.79758126,-0.5674579,-0.089146346,0.15503111,-0.050696775,-0.41808343,-0.9180651,1.1887319,0.7490674,0.2818292,-0.05504427,0.09847831,0.24017516,-0.100371055,-0.26661357,-0.015151299,0.14749247],[-0.011997275,-0.01629248,0.0023960476,0.46332273,1.1773943,0.047555875,-1.0831845,-1.1777227,0.50374424,0.94301,-0.43155685,1.6632808,1.0289724,1.3457992,-1.3981099,0.21298541,-1.3651799,0.4583753],[-0.012068792,0.6946306,7.008868,-0.38002566,-0.8078394,-1.8026941,-1.6721241,2.1546853,0.7563132,0.12844934,0.21244754,0.028632099,-0.13106985,-0.14665121,0.10708859,1.0625329,-0.18022399,-0.35517347]],"activation":"σ"},{"dense_2_W":[[-0.10200387,-0.76644456,-0.30197436,0.88119465,0.039803542,0.35588643,-0.11579556],[-0.4315598,-0.18163718,-0.8021966,0.3789305,-0.60908353,0.2092475,-0.15666024],[0.24648495,0.5248265,1.1183228,-0.54292357,0.37333378,-0.621473,-0.2185636],[-0.44479766,0.061370973,-0.80736274,-0.06727713,-0.03573045,0.4296817,-0.6225945],[0.7770457,0.870017,0.6628652,-1.3054526,-0.24000858,-0.5467027,-0.63892704],[0.6606621,0.5903391,0.74629235,-0.30811584,0.9074003,-0.25882754,-0.49689066],[-0.61885303,-0.27397686,-0.32425815,0.5231217,0.0016664385,0.029230833,0.36123073],[0.116919406,-0.080033116,-0.80068344,0.17488338,-0.59637207,-0.25136593,-0.052427128],[-0.6091415,0.036435083,-0.31513107,1.0636747,-0.8583667,-0.050638534,-0.42107514],[-0.688126,-0.28585485,-0.74282986,0.07060043,-0.11225189,0.10933011,0.1853165],[-0.02946559,0.42606872,0.8841502,-0.08186191,0.5265807,-0.48210683,-0.32932183],[-0.103848316,-0.44215712,-0.32014853,0.7133248,-0.46932107,-0.47233966,0.028100768],[0.2052363,-0.19803643,0.61784434,-0.6395137,0.54827636,0.16492388,-0.25312033]],"activation":"σ","dense_2_b":[[-0.04292812],[-0.0074691507],[0.02623448],[-0.12690178],[-0.127359],[-0.0627155],[0.03455701],[-0.020989824],[0.17505483],[-0.009170552],[0.047454033],[-0.009859283],[-0.08406351]]},{"dense_3_W":[[-0.101136126,0.2837724,0.069948,-0.07415262,0.34190154,0.24395382,-0.19586,0.41830686,-0.3893048,-0.19336349,-0.14812821,-0.107784435,0.22945514],[0.32129276,-0.047892366,-0.15199028,0.40463585,-0.2276267,-0.27818957,0.14533494,0.21502836,-0.4884599,0.10375174,-0.41882825,0.47495985,-0.23964486],[-0.33068216,-0.40646386,0.3537997,-0.28240827,0.695928,0.32007056,-0.27887765,-0.47764063,-0.44847566,-0.5544643,0.4358929,-0.68283004,0.16520141]],"activation":"identity","dense_3_b":[[0.017270878],[-0.049352214],[0.051928796]]},{"dense_4_W":[[-0.18483475,0.37186217,-0.97547895]],"dense_4_b":[[-0.04841734]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68273275AG'.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68273275AG'.json new file mode 100755 index 0000000000..376ff90932 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68273275AG'.json @@ -0,0 +1 @@ +{"input_std":[[6.9210873],[1.1622182],[0.43444356],[0.05239421],[1.162601],[1.1617966],[1.1600338],[1.1373105],[1.1218978],[1.1002257],[1.0747715],[0.052226104],[0.052260432],[0.052283283],[0.052092496],[0.051803872],[0.051247757],[0.050530057]],"model_test_loss":0.013745146803557873,"input_size":18,"current_date_and_time":"2023-08-10_01-43-24","input_mean":[[23.540874],[0.039472643],[0.019381158],[0.010939346],[0.032198854],[0.03392217],[0.035938434],[0.04118405],[0.046537373],[0.049447913],[0.051183026],[0.010808573],[0.010828554],[0.010842155],[0.010789978],[0.01078458],[0.010702423],[0.010645217]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3592632],[0.24013901],[0.02950762],[0.007981313],[0.16977344],[1.0341699],[0.067953564]],"dense_1_W":[[-0.29443944,-0.86964434,-0.0030668834,0.34641737,-0.052413613,0.25383303,0.39592203,-0.37595648,-0.09712996,-0.067028016,-0.15717228,-0.30866244,-0.31660882,0.03619487,0.36077827,0.14766766,-0.08112562,-0.16371004],[-1.0683546,-0.4225962,-0.0066022496,-0.4033901,0.46962708,-0.44821528,0.38007107,-0.35131562,-0.19155227,0.32398295,0.044747997,-0.17824192,0.5510669,-0.0595588,0.35617167,0.4413747,-0.034901265,0.04095095],[0.0008612147,0.3940898,-0.006288894,-0.55062485,0.5392667,0.33954364,-0.48541492,-0.16118298,-0.09376398,0.10986033,0.12394796,0.9228157,-0.45805627,0.11727515,-0.022528082,0.06427372,-0.0030711165,0.04155096],[1.0198417,-0.35909548,-0.006616111,-0.59779114,-0.31270605,-0.14032304,0.9551273,-0.2675044,-0.24046354,0.032812644,0.16535293,0.012905942,-0.11244921,0.6141845,0.098029315,0.584352,0.23467723,-0.16135265],[-0.0028723876,0.29212356,3.77251,-0.04027425,-0.7930384,-0.98414063,-1.0553377,-0.016249495,0.87524354,1.4566501,0.4455834,0.31893766,0.3175888,-0.23782718,0.70991355,-0.03134838,-0.38082367,-0.7664585],[0.23746029,-0.524643,-0.0032641755,0.016509473,0.14262381,-0.52993554,0.7516659,-0.27583307,-0.28979933,-0.025237296,-0.11929308,-0.61843383,-0.04413926,0.3603565,0.9432264,-0.51941097,-0.17327741,0.033388518],[0.022823358,0.3032578,0.0024921081,-0.1483726,0.3248898,0.11600146,-0.2852234,-0.16650069,0.113197386,0.11354485,0.004953061,0.29692334,0.16251172,-0.60039353,0.059377182,0.0968991,-0.17315012,0.034780342]],"activation":"σ"},{"dense_2_W":[[-0.10226482,-0.4129552,-0.011484651,-0.8094231,-0.007036115,0.068016745,0.30800965],[0.51679516,-0.0140688205,-0.85121125,-0.09242818,0.41688886,0.7517409,-0.64519745],[0.35164565,0.392633,-0.101708815,0.6600604,-0.51135594,-0.24759813,-0.7536511],[-0.46807855,0.22016473,0.8009246,-1.2497194,0.8632494,-1.2237775,0.2705352],[0.12294014,0.28189301,-0.82049996,0.42017826,0.31424674,0.5031236,-1.0273964],[0.031432822,-0.62932956,0.22953837,-0.49194145,0.15946166,-0.07545127,0.25037768],[-0.36138535,-1.1441826,0.8748997,0.30837125,1.1008774,-0.039432786,0.5913679],[0.6354077,0.27034265,-0.8441376,-0.3852919,-0.7068959,0.5080131,-0.106792346],[-0.1320543,-0.8137172,0.9680676,-1.2771759,0.39580464,-0.6290615,1.3455303],[-0.50728315,0.35654846,0.08924023,-0.60484344,0.574961,-1.1762985,-0.0043168655],[0.14633264,-0.041424304,-1.0337647,-0.3997866,-0.016652329,0.07367241,-0.07422297],[0.4978552,0.4680909,-0.8531208,-0.009683,0.09626235,0.60354567,-0.8143497],[-0.7302568,-0.7541932,1.0414218,-0.31683722,0.71962583,-0.09527239,0.5987053]],"activation":"σ","dense_2_b":[[-0.08878189],[0.012890921],[0.044211157],[-0.4465577],[-0.062322337],[-0.0074243415],[0.15457644],[-0.07897435],[-0.08090508],[-0.22858685],[-0.27673057],[-0.07622174],[0.058422644]]},{"dense_3_W":[[0.050709836,-0.03184132,0.44536084,0.092137754,0.3236647,0.18253805,-0.07791841,-0.20872086,0.09598713,-0.2740574,0.10335441,-0.28594363,-0.25284308],[-0.39783764,0.72701114,0.3897124,-0.78861535,0.6352359,0.42759028,-0.2990431,0.056067392,-1.2246326,0.31149596,0.4554911,0.13868588,-0.4529365],[0.027524881,-0.48940495,-0.44448495,0.46868488,-0.57126254,0.57925117,0.31945515,-0.66192514,0.5332039,0.21860516,0.000447623,-0.37591594,0.49015212]],"activation":"identity","dense_3_b":[[0.0158691],[0.023787307],[-0.030451657]]},{"dense_4_W":[[-0.11161881,-0.3257279,1.0980971]],"dense_4_b":[[-0.03284489]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68466110AB'.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68466110AB'.json new file mode 100755 index 0000000000..cc62373968 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68466110AB'.json @@ -0,0 +1 @@ +{"input_std":[[6.0463657],[0.9747688],[0.3453712],[0.03803554],[0.9690691],[0.97106147],[0.97251296],[0.9614686],[0.94826],[0.92959803],[0.9101179],[0.037928607],[0.037951168],[0.03796943],[0.03788738],[0.03772722],[0.03745093],[0.037048396]],"model_test_loss":0.017076648771762848,"input_size":18,"current_date_and_time":"2023-08-10_02-58-26","input_mean":[[27.871407],[-0.025981303],[-0.0066066827],[-0.005477946],[-0.021529026],[-0.021929484],[-0.022823982],[-0.023858318],[-0.025280826],[-0.029299965],[-0.032219402],[-0.005470874],[-0.0054753814],[-0.0054821577],[-0.0055401647],[-0.0056055295],[-0.0057070768],[-0.0058246236]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.4266238],[-0.3416357],[2.5780525],[-2.5398123],[-1.5365838],[-0.15346667],[0.017754281]],"dense_1_W":[[-1.0982449,0.20722441,0.013749752,0.07489929,0.41551197,0.004341639,0.0048132003,0.00025495235,-0.18475117,0.08220013,0.0560664,0.82137764,0.495301,-0.63355666,-0.47019786,-0.04666432,-0.25567988,0.04631287],[-0.012575525,1.013855,6.6538153,0.0006221404,-1.0208796,-0.513264,-1.0584702,0.4347041,0.50328493,0.99720603,-0.41704744,0.9781865,0.078827344,-0.22583015,0.3788141,0.114769615,-0.8264082,-0.4377368],[0.82146376,-1.1214737,-0.038538903,0.129783,0.16356055,0.04583769,0.09611903,-0.25096208,-0.45288768,0.033663888,0.2989499,-0.27392572,0.05673563,0.29652318,-0.17211635,0.37968886,-0.0377033,-0.17876798],[-0.78663635,-1.252811,-0.03569057,-0.024772601,0.1393824,-0.16137758,0.63462764,-0.56116915,-0.25827187,-0.035541687,0.32233778,-0.49389195,0.107298866,0.5767397,0.15331157,-0.009262639,0.056745403,-0.17108874],[1.075038,0.63599974,0.013103103,-0.13239852,0.2721682,0.215895,-0.43340504,-0.2561609,0.08369225,0.09600925,-0.031108124,0.9223862,0.037735846,-0.24475971,-0.11832876,-0.24068235,-0.2104002,0.018788245],[-0.012586371,0.8092677,-0.005002185,-0.0010346456,-0.19357827,0.4030301,-0.41376656,-0.014812962,-0.14178266,-0.15467277,0.16577497,0.46197078,0.28108403,-0.72031033,-0.2485265,0.044038273,0.20874186,-0.06851787],[-0.01091231,0.993412,0.026124477,0.3239028,0.502026,0.68568456,1.7555947,0.8855259,-1.2782414,-2.011024,-1.1780066,-0.7251421,0.3048075,0.79791856,0.25945005,-0.80709416,-0.24202144,0.24123403]],"activation":"σ"},{"dense_2_W":[[0.8615375,-0.37836078,0.059902865,-0.610202,0.60982454,-0.05805709,0.3699734],[0.11572612,0.48987415,0.2018818,-1.1636332,0.5043109,0.53963894,0.019587068],[-0.82412773,-0.5432425,0.86591834,1.4440024,-0.50299263,0.0073020295,0.33265102],[-0.937952,0.34060618,0.28250477,1.2533687,-0.24819559,-1.102934,0.4194565],[0.0850848,-1.4026527,0.18256377,1.2569317,-1.3412946,-0.51787454,0.60327196],[-0.49207494,0.006521548,-0.84601384,-0.063308366,-0.2913924,-0.5534405,-0.36416996],[-1.1227055,0.6364929,0.40246958,0.3539726,-0.71709025,-0.5450521,0.116008334],[-0.3193431,-0.12110501,0.44127515,0.29223323,-0.5647738,-0.5818968,0.104559764],[0.19634451,-0.11687351,-0.52581316,0.14469767,0.26439536,-0.25766855,-0.5510215],[-0.05923424,0.28980356,-0.14158152,0.43791518,-0.732061,-1.0311065,0.41942894],[0.7570111,0.53114414,-1.135714,-0.26154417,-0.21490821,0.23511015,-0.73162705],[-0.060524873,0.09525046,-0.9220807,-0.09318619,0.486466,0.85145307,-0.22442955],[-0.5580914,-0.055617023,1.4159099,0.7312611,-0.9474024,-0.42224932,0.1571235]],"activation":"σ","dense_2_b":[[-0.051363647],[-0.12564756],[0.057266533],[-0.20513932],[-0.5409964],[-0.26110366],[-0.17036414],[0.04884298],[-0.2544224],[-0.0654127],[-0.11066689],[0.043957688],[0.111824796]]},{"dense_3_W":[[0.4754135,-0.13027504,-0.70067513,-0.68032104,-0.2434314,-0.49364966,0.0809345,0.3409165,-0.35128537,0.5138682,0.24348976,0.12398042,0.07979309],[-0.3433468,0.24112704,-0.5154696,-0.14498284,-0.22987618,0.22425546,-0.03564995,-0.48462275,0.40817538,-0.0020781446,0.6011458,0.6723392,-0.47040144],[0.5232041,0.45503825,0.087453336,-0.20923337,-0.4118531,0.15931882,-0.49080586,-0.22813377,0.13799725,-0.5762673,0.56595653,0.68413365,-0.7339804]],"activation":"identity","dense_3_b":[[0.04150388],[0.051177654],[0.041261487]]},{"dense_4_W":[[0.5853262,0.47804958,0.9168704]],"dense_4_b":[[0.043468688]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68469901AA'.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68469901AA'.json new file mode 100755 index 0000000000..6e24c14c4d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68469901AA'.json @@ -0,0 +1 @@ +{"input_std":[[6.33825],[1.1453629],[0.43486407],[0.046197876],[1.1367582],[1.1400605],[1.1420996],[1.1326395],[1.1184355],[1.1011796],[1.079299],[0.045960896],[0.046014525],[0.046063952],[0.046127878],[0.0460219],[0.045729626],[0.045291778]],"model_test_loss":0.021876206621527672,"input_size":18,"current_date_and_time":"2023-08-10_03-24-19","input_mean":[[27.181211],[-0.033823926],[0.008755515],[-0.0075790784],[-0.032792553],[-0.032709006],[-0.032333635],[-0.02890779],[-0.02326324],[-0.016518341],[-0.010042243],[-0.007586642],[-0.00755887],[-0.0075379773],[-0.007499133],[-0.0074144034],[-0.0072887978],[-0.007148881]],"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.046337597],[0.050293937],[1.8881503],[0.59185153],[0.8542854],[0.19480373],[1.5334643]],"dense_1_W":[[-0.008669442,-0.50197583,0.0013483413,0.07478634,-0.12987828,-0.42372242,0.451127,-0.21957916,-0.17928472,-0.0133529585,0.06471939,-0.61344665,-0.28108978,0.61214054,0.25012782,0.10078239,0.11161439,-0.16625455],[0.019537883,-0.25616175,0.0026798896,-0.47914556,-0.117883034,-0.5943702,0.47449878,0.02374437,-0.25907964,0.0004787899,0.041058734,-0.62058383,0.37889734,0.56780803,-0.12320269,0.24227172,0.05977054,-0.088733785],[0.9617319,0.5921454,0.08454962,-0.024177684,-0.33587864,0.7352508,-0.7387421,0.39873427,0.21945651,0.05807639,-0.2851063,0.16848388,-0.5095711,-0.648206,0.22489141,0.2630374,-0.10781773,0.05692585],[0.6508581,-0.034968324,-0.0046116984,0.042830404,0.2208985,-0.25876033,0.70590264,0.11468684,1.3392336,-0.462859,-0.19124633,-0.49964252,-0.112543315,0.23059364,0.22540659,0.8281614,-0.30613214,-0.41558707],[0.630478,0.72845036,-0.0040414827,-0.42815435,0.09451815,0.98280245,-0.5989212,0.11570024,0.012325331,-0.067932405,0.11440747,0.027836803,0.35311875,0.12638386,-0.23782413,0.35590366,-0.07542629,-0.12907898],[0.02959114,0.17071922,4.48706,-0.005770228,-1.3331827,-1.5406686,-1.4772613,-0.8343799,2.3675978,2.120532,0.66988176,0.90546036,0.2781295,-0.40613997,0.25572512,0.8060402,-0.9505193,-0.8492369],[0.9206642,-0.5364798,-0.08010512,0.04452516,0.0843251,-0.4182482,0.5212545,-0.20747036,-0.2660874,-0.06005273,0.2478061,-0.095565975,0.18786341,0.72273916,-0.19318765,0.028641535,-0.036184557,-0.10096181]],"activation":"σ"},{"dense_2_W":[[0.38142607,0.042492785,-0.77607405,-0.52826,-0.8402416,-0.63555807,0.26845828],[-0.36448377,0.013470403,-0.7751532,-0.62089664,-0.0025020323,-0.43518564,-0.032616902],[-0.51269734,-0.90651554,0.15344314,-0.97433233,0.13745055,0.95539695,-1.3348669],[-0.29381657,-0.72915894,0.1849723,-0.6422532,0.6542673,-0.23613134,-0.41772324],[0.98330545,0.1279324,0.07058928,-0.120830305,-0.6904588,0.43327442,-0.01615229],[-1.1281452,-0.7857186,0.7657339,-0.6405541,0.15110444,0.3140745,-0.77677655],[-0.10084952,-0.22716746,1.1716565,-0.091143146,1.0249162,1.0087454,-0.28616652],[-1.1938478,-0.12939769,-0.26710513,-0.8057877,0.28079078,0.6419189,-0.73595464],[-1.1646985,-0.43413186,0.16684091,-0.72566366,0.39882493,0.5024153,-0.07758079],[-1.0085496,-0.07076024,-0.20896135,-0.65417224,-0.2732086,-0.113864146,-0.6265197],[-1.1994962,-0.8906176,-0.33401784,-1.0209608,0.37494394,0.8777499,0.0017000877],[0.64241505,0.62737906,-0.6886972,-0.18807864,-0.07910444,0.48681334,-0.09631596],[0.8916427,0.6068368,-0.7540836,0.6216169,-0.3300996,-0.31663188,0.3107477]],"activation":"σ","dense_2_b":[[-0.13178545],[-0.15170422],[0.16972616],[0.02054858],[-0.06958599],[0.123835176],[0.06601367],[0.0011560497],[-0.0824041],[-0.1551787],[-0.07204721],[-0.0050074253],[-0.13309194]]},{"dense_3_W":[[-0.26774383,0.069543615,0.6138564,-0.19084257,-0.054911274,0.68343407,0.6239501,0.41537902,0.5271345,0.11967227,0.032000795,-0.057378754,-0.49043247],[-0.06432742,-0.7016147,0.10944263,-0.1354464,-0.13193382,-0.070864916,0.037493527,-0.88318646,0.12056807,0.35320503,-0.6730902,0.5864121,0.25374225],[-0.7003238,-0.21708901,0.26239115,0.7095383,-0.6740586,0.19532588,0.15621354,0.44259292,0.37482294,0.12022154,0.4868753,-0.46856374,-0.68130004]],"activation":"identity","dense_3_b":[[-0.056218784],[-0.079843864],[-0.01837998]]},{"dense_4_W":[[0.6685718,-0.15755904,1.0103254]],"dense_4_b":[[-0.027803186]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68469904AA'.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68469904AA'.json new file mode 100755 index 0000000000..fba85d85ca --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68469904AA'.json @@ -0,0 +1 @@ +{"input_std":[[5.154286],[0.76042634],[0.3701081],[0.034407996],[0.7532322],[0.755637],[0.7579886],[0.7569121],[0.7567644],[0.75660825],[0.75161266],[0.034349248],[0.034364954],[0.034366276],[0.034332108],[0.03430826],[0.034186568],[0.033984024]],"model_test_loss":0.010220293886959553,"input_size":18,"current_date_and_time":"2023-08-10_03-48-50","input_mean":[[26.29757],[0.21858484],[-0.00041749518],[0.015462894],[0.21635525],[0.2165749],[0.21686907],[0.21543358],[0.21598789],[0.21505341],[0.21361327],[0.015312114],[0.01533278],[0.015349211],[0.015250495],[0.015165519],[0.014907059],[0.014465246]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.5426987],[0.12417949],[-1.4781233],[-0.028249433],[0.20633578],[-0.13907257],[0.72390795]],"dense_1_W":[[-1.1175315,-0.07495566,0.02891214,0.19389996,-0.45027134,0.13735463,-0.6250549,0.85820234,0.59452385,0.042644564,-0.27779862,0.13595949,-0.09487241,-0.10740118,0.17391424,-0.38815653,-0.27959245,0.3287145],[-0.0005434315,0.7250965,-0.001302344,-0.052765388,0.10030851,0.33485708,-0.21132289,-0.115699075,-0.12958458,-0.18765004,0.22767502,0.3379646,0.17437504,-0.35456493,-0.18415342,0.1511127,-0.023203105,-0.03965679],[-1.095963,0.10147642,-0.028861295,-0.45387205,0.49530742,-0.11415999,0.055746414,-0.2760433,-0.46584845,-0.20907946,0.19582038,0.14730005,-0.041585524,0.4082932,-0.3926017,0.2602935,0.29690772,-0.18358155],[0.0038369219,0.37911403,-0.0045367144,-0.23510593,0.094250835,0.34022862,-0.2284937,-0.13612238,0.27017567,-0.33356893,0.14501272,0.4917901,0.03173992,-0.1809757,-0.032653864,-0.33173367,0.115388945,-0.28278348],[-0.003918218,-0.43321767,0.0073618796,0.5832146,0.45349523,0.29272223,0.3733469,0.47134906,-0.83762276,-0.85482854,0.09775691,0.017050214,-0.01622581,0.47676057,-0.03653979,-0.34529078,-0.30939806,0.26684877],[-0.017790653,0.697322,-6.3714147,0.46992886,0.8733624,0.17037292,0.6718011,0.47720847,-0.32684425,-1.1077062,-1.3093247,-0.6193358,-0.10829769,0.15212813,0.27934057,-0.50214195,-0.5461845,0.43900922],[0.51826936,0.12391658,0.051776137,0.072040915,-0.3065168,0.027357819,-0.37797117,-0.17238732,-0.353872,-0.31592342,0.29717565,0.38155913,-0.3906893,-0.14551696,0.22231571,-0.15257306,0.20485455,1.0147902]],"activation":"σ"},{"dense_2_W":[[0.32709605,1.1362737,-0.17482026,-0.046062417,-0.51949316,0.17334434,-0.2578324],[-0.15792392,-0.9065706,0.30352244,-0.48481166,0.3429801,-0.02744591,-0.19637136],[0.91549116,0.3893739,-0.13849072,0.090474464,-0.4911054,-0.309263,-0.51762164],[-0.4134321,-0.7770418,0.8557953,-0.3741374,0.751485,-0.051834386,-0.51904815],[-0.4399301,-0.61924434,0.6309824,-0.35251677,0.66121125,0.2404353,-0.23494475],[0.086413786,0.6363439,-0.41028103,1.0290276,0.047232375,-0.40705454,-0.4344609],[0.9350081,-1.4516156,0.7794276,-0.565611,-0.6901311,0.41864678,-1.1327723],[-0.8245831,-0.8406043,0.08613439,0.052566387,0.6732224,0.28659236,0.16209623],[-0.20109951,1.205864,0.6048377,0.7521136,0.44900057,0.3182956,-0.281427],[0.8864913,0.30494544,-0.53948045,0.63693535,-0.5898942,-0.17208202,0.16690974],[-0.5475406,-0.7371354,0.4504668,-0.5240461,0.34616926,0.32284823,0.44203338],[0.12659965,0.09303629,0.014360431,0.11488345,0.17780194,0.13185121,0.030691903],[-0.29399133,-1.1127974,0.42915276,-0.2730042,0.13696739,-0.2734059,-0.30105415]],"activation":"σ","dense_2_b":[[-0.095232666],[-0.12903397],[-0.16596866],[0.10246624],[-0.03857397],[-0.073855616],[-0.2992988],[0.2189761],[-0.1223435],[-0.1884392],[0.18001069],[-0.08254514],[-0.029937575]]},{"dense_3_W":[[0.26818132,-0.25044084,0.027241506,-0.19964801,0.56580776,0.22428977,-0.43430313,0.67310864,-0.6071206,-0.75302726,0.5696926,-0.25766462,0.02067551],[-0.5776643,0.3400569,-0.1890818,0.5839983,0.35982898,-0.75322586,0.5884296,0.4361948,-0.04064355,-0.82264584,0.77007246,-0.028092124,0.30400428],[-0.565468,-0.022219652,-0.61670506,0.17880899,0.33762756,0.25232822,-0.6182462,0.07745964,-0.14152253,0.07606692,0.43158156,0.40247133,-0.14412662]],"activation":"identity","dense_3_b":[[-0.02423033],[-0.05393112],[-0.025509434]]},{"dense_4_W":[[-0.25194114,-0.987808,-0.020282954]],"dense_4_b":[[0.045462962]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68522583AA'.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68522583AA'.json new file mode 100755 index 0000000000..372c112a42 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68522583AA'.json @@ -0,0 +1 @@ +{"input_std":[[6.100081],[0.7303489],[0.40821353],[0.033808213],[0.72612214],[0.72782314],[0.7296681],[0.7202953],[0.7148411],[0.7080344],[0.7024381],[0.03380297],[0.033810258],[0.03380648],[0.033657998],[0.03346423],[0.033204034],[0.03290225]],"model_test_loss":0.027830945327878,"input_size":18,"current_date_and_time":"2023-08-10_04-40-02","input_mean":[[26.731352],[-0.01177522],[-0.004391138],[-0.011022535],[-0.008092633],[-0.008825226],[-0.0103097875],[-0.0098579945],[-0.0067649335],[-0.0050272304],[-0.0049507814],[-0.0109223435],[-0.010953117],[-0.010988373],[-0.010941988],[-0.010961072],[-0.010930893],[-0.010915838]],"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.1745371],[0.9457931],[-1.2435032],[-1.0458435],[-0.1081323],[0.035753693],[-0.02165228]],"dense_1_W":[[0.16186859,-0.09768836,-4.7846518,-0.15079269,2.5244157,1.6883308,1.5134919,-0.89384186,-3.5332396,-0.6423725,-0.296458,-1.1548986,0.15355624,0.5327785,0.6254284,-0.37240118,-0.04440246,0.32268947],[2.0046134,0.53838843,3.4404945,-0.1141708,-1.1936749,-0.76779556,-0.97976905,-0.29515216,0.7165664,0.17453694,1.4159857,0.19968158,-0.324134,0.020139258,0.36342832,0.07758869,-0.21961124,-0.24075823],[-0.8806507,-0.36592105,-0.1603686,0.019333879,0.7319277,-0.018883258,-0.007104287,-0.4886063,-0.5159273,-0.25874293,0.71235996,-0.08952812,0.39945298,0.44347215,-0.71560186,-0.11375067,0.1372514,0.08856255],[-0.8596358,0.4530633,0.15744632,0.6229328,-0.19767399,0.50342345,-0.48811507,-0.012905224,0.035012916,0.10218181,-0.18411104,-0.14965416,0.28510785,-0.20222001,-0.84866565,-0.21149859,0.06309471,0.2692289],[0.00787326,0.17291375,0.02989127,0.33595058,0.097436145,-0.8344158,0.12299558,-0.056537054,0.063804835,0.102107935,-0.1609201,-0.4358222,0.17648806,-0.15191726,0.27956975,-0.26774335,0.21951361,0.14714526],[0.0013040424,0.0146544995,-0.034251958,-0.017003387,0.48911396,0.7778323,-0.6013927,-0.24220061,-0.1423357,-0.07045295,0.32420683,0.2770749,0.17541865,-0.6925609,0.13146631,-0.09090916,0.21767132,-0.08619563],[-0.0013283036,-0.76572543,-0.021439318,-0.07231562,0.33608717,-0.9519956,0.80349934,0.13154784,0.053906552,-0.0063607194,-0.05806696,-0.48233724,0.030579537,0.24628532,0.1421058,-0.049592685,0.37368706,-0.28366596]],"activation":"σ"},{"dense_2_W":[[-0.11426035,-0.4633911,0.5931024,-0.13167584,0.3877006,-0.8240802,0.4996165],[-0.6506094,-0.043036364,-0.63225603,0.09525037,-0.0013785976,0.30910346,0.09042436],[-0.111270815,-0.037402347,0.42292774,-0.5026528,-0.06920168,-0.5414584,-0.14867242],[0.62404346,-0.21483791,0.5609062,-0.58235985,0.1793472,-0.63125086,0.14775465],[0.39018965,0.30572656,0.19105321,0.120262615,-0.39587906,-0.3727809,0.19191758],[-0.43854353,-0.4174901,0.2537852,0.023853898,-0.6724934,-0.03747815,-0.44509795],[-0.59352624,0.107269265,-0.10295583,-0.05914811,-0.46114132,0.91326886,-0.28330517],[-0.6905027,-0.06767795,-0.20643814,0.2871444,-0.7398764,0.40445343,-0.16377075],[-0.19539294,-0.33604875,0.30735624,-0.3262871,0.6336829,-0.9044841,0.7461942],[-0.076478384,0.0081171375,-0.45632637,0.25862965,-0.033632897,0.95767784,-0.9119975],[-0.6780045,-0.5742568,-0.19451007,0.9155922,-0.2558469,0.7328771,-0.9628025],[0.10786977,-0.3863365,0.52240795,-0.4421973,0.7063569,-0.8783838,0.16820244],[0.043110512,-0.36765873,0.07240629,0.37819213,-0.38525218,0.62788934,-0.6130581]],"activation":"σ","dense_2_b":[[-0.1541479],[-0.0021927624],[-0.07528638],[-0.08054171],[-0.072549514],[-0.034027867],[0.12834808],[-0.10132512],[-0.065889865],[0.047784895],[0.03540158],[-0.04747654],[-0.065598845]]},{"dense_3_W":[[0.71479976,-0.3480489,0.110358596,0.32083592,0.24253292,-0.28188017,-0.5622667,0.011309102,0.6315449,-0.43116945,-0.5399975,0.29667172,-0.4142423],[0.19218774,-0.09594727,-0.10361748,0.10555191,-0.09383906,-0.56986606,0.03129942,-0.07917779,0.33813822,-0.41512942,-0.36388016,0.6792136,-0.223361],[0.34802097,0.07021865,-0.36761415,-0.12873147,-0.05381047,0.11233469,0.49716663,0.4738285,0.29140377,-0.2302745,-0.18917024,-0.5822452,-0.35502756]],"activation":"identity","dense_3_b":[[0.039899256],[0.044181313],[-0.031747688]]},{"dense_4_W":[[-1.0547942,-0.97846806,0.263912]],"dense_4_b":[[-0.039440837]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68552788AA'.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68552788AA'.json new file mode 100755 index 0000000000..6a3c858682 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68552788AA'.json @@ -0,0 +1 @@ +{"input_std":[[5.868239],[0.75070703],[0.34816617],[0.034229066],[0.74701726],[0.74780625],[0.74831426],[0.746065],[0.74128854],[0.7355061],[0.72421074],[0.03417469],[0.03418928],[0.034195792],[0.03400789],[0.033847637],[0.033606727],[0.03322697]],"model_test_loss":0.008458372205495834,"input_size":18,"current_date_and_time":"2023-08-10_05-30-40","input_mean":[[29.99863],[0.20272265],[-0.025704622],[0.008401776],[0.21002854],[0.20785059],[0.205384],[0.19537038],[0.18984987],[0.18505052],[0.1809265],[0.008209475],[0.008253665],[0.008296503],[0.008406267],[0.008323119],[0.0081936885],[0.007896792]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.2260764],[0.6165127],[0.2977843],[-0.14787921],[-0.9168285],[-0.12295077],[-0.09766494]],"dense_1_W":[[1.065022,-0.05936225,0.0022720068,0.08219392,-0.8567543,0.111217014,0.54122514,-0.2706693,-0.15036803,0.25742987,-0.08767648,-0.34830713,-0.027404225,-0.4185975,0.35305434,0.3575998,0.14072141,0.2625152],[0.15924072,0.593216,0.00052627287,-0.1057818,-0.36246762,0.28154594,-0.3878058,0.041176394,0.20087384,-0.038753517,0.042374074,0.48755527,0.036274087,-0.6767191,0.12023098,0.19956696,-0.13944839,0.03492848],[0.26169267,-0.59497786,-0.001051651,-0.324159,0.33932126,0.09371173,0.11345156,-0.016827654,-0.40026185,-0.100701384,0.15730438,-0.13552007,-0.1270308,0.4102569,0.28058168,0.12271481,-0.24961802,0.05837292],[-0.033944216,-0.29202187,0.00077848736,-0.114458814,-0.5727945,0.060648486,0.61588925,-0.11821368,0.11814919,-0.052538417,-0.13625127,-0.7172482,0.51400244,0.333069,-0.10085215,0.11445696,0.17483449,-0.20612186],[0.87344337,0.26699117,0.0022017667,0.28822276,0.37948754,-0.05094396,-0.41495946,0.40114012,-0.0048360685,-0.0020655768,-0.11235444,0.6665909,0.047259506,-0.11638346,-0.71936154,-0.22467732,-0.19744919,-0.10152469],[-0.107145384,-1.0915395,-6.141535,0.70560014,0.4831924,1.1330324,0.95880973,-0.5413501,-0.5439982,-0.9502495,0.21910736,-0.7986927,-0.226854,0.97576135,0.2663551,-0.53631556,-0.1967203,0.27619123],[0.014165441,0.4128995,-0.0009244823,0.15947568,0.20772904,-0.27174422,0.23572557,-0.68967,0.117952354,-0.32811052,-0.07497509,-0.07766617,-0.1715381,0.10645008,0.13909376,0.09034561,-0.076432556,-0.0002952288]],"activation":"σ"},{"dense_2_W":[[-0.11342565,-0.2809018,-0.05111502,0.22586785,-0.046716776,-0.035705794,0.6600342],[-0.18827938,0.9972883,-0.072743565,-0.61405253,0.7193729,-0.41576892,-0.104350396],[-0.3556824,0.66933596,-0.10034228,-0.36175656,0.80487776,-0.048805095,-0.6517391],[-0.0029814816,0.037780087,0.4565041,0.57524407,-0.61115396,0.00441405,-0.3738763],[-0.2594761,0.31262296,-0.09214641,-0.002778288,-0.00446783,0.19304605,0.54612243],[-0.28130808,-0.3503751,0.5588698,0.616398,-0.49632117,-0.41926727,0.7246912],[0.19776937,-0.29551616,-0.80695623,-1.1329869,0.094373874,0.6795281,-0.74388427],[-0.8445154,0.94859,-0.08256833,-0.4775403,0.04127346,0.10181072,-0.6063285],[-0.85923886,0.39777043,-0.36597455,-0.06115376,-0.044814575,-0.2704239,-0.4685487],[-1.1660684,0.25082108,-0.7324697,0.2520158,-1.2055342,-1.5113032,-0.13736865],[0.4879582,-0.67548096,0.3822733,-0.05974599,-0.4401489,0.06402922,-0.13399549],[-0.41230774,-0.33770072,0.6218817,0.5027607,-0.201837,-0.21050662,0.1802105],[-0.17762303,0.13510232,0.5571139,0.447668,-0.12594385,-0.07661345,0.27156433]],"activation":"σ","dense_2_b":[[-0.036336433],[0.23029093],[0.055804957],[-0.042286173],[-0.009081475],[0.06398727],[-0.23855366],[-0.03628939],[-0.059604287],[0.011632554],[0.008110043],[-0.00869093],[-0.060943495]]},{"dense_3_W":[[-0.35496664,0.23448576,0.5805028,-0.4621804,-0.5448057,-0.60412884,-0.11938377,0.13103668,0.5007172,0.321409,0.34096,-0.40516585,-0.017715745],[0.36484855,0.40388605,0.44538534,-0.056106996,-0.292742,0.19839688,0.2952001,-0.43382752,0.5743617,-0.051075302,-0.21471448,0.14332166,0.2699585],[-0.2499691,0.68792695,0.57182634,0.20412138,0.10965183,-0.7152176,0.39847228,0.60519606,-0.0041895057,0.82069314,-0.5085393,-0.22828765,-0.30936882]],"activation":"identity","dense_3_b":[[-0.014063893],[-0.06281853],[-0.02118316]]},{"dense_4_W":[[0.7967157,0.21090265,1.0282162]],"dense_4_b":[[-0.01977677]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68552791AB'.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68552791AB'.json new file mode 100755 index 0000000000..97d661e070 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN b'68552791AB'.json @@ -0,0 +1 @@ +{"input_std":[[5.327477],[0.83636034],[0.35854557],[0.03027954],[0.8322574],[0.8326431],[0.8336623],[0.8205453],[0.8127496],[0.8029663],[0.7927199],[0.030091072],[0.030136604],[0.030175311],[0.030065328],[0.02983974],[0.029646473],[0.029447762]],"model_test_loss":0.014091002754867077,"input_size":18,"current_date_and_time":"2023-08-10_06-46-47","input_mean":[[30.319626],[-0.08276231],[0.005369592],[0.004473744],[-0.08501025],[-0.084354036],[-0.08372337],[-0.082539454],[-0.081338175],[-0.07844728],[-0.074738294],[0.0042737313],[0.0043124184],[0.0043546893],[0.004361203],[0.0043273983],[0.0043060128],[0.004311133]],"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.35763365],[-1.3521506],[-0.016218545],[-0.059472244],[-0.6437557],[-1.6056265],[0.12085991]],"dense_1_W":[[0.87513417,-0.49436525,0.001526756,0.007689951,0.105178826,-0.7741091,0.389623,0.30006444,-0.030422192,0.10987545,-0.14698596,0.18236087,-0.29306155,0.38676205,-0.33443922,0.039674185,0.33462492,0.22763555],[-0.36546978,-0.40689582,2.668961e-5,0.02264227,0.05264314,-0.024173336,0.4129403,-0.48889917,-0.012633747,-0.10086103,-0.20651652,-0.32730335,-0.29228786,0.3802635,0.3812668,0.4096499,-0.3554582,-0.11867983],[-0.0013656212,-0.48252577,-0.0009152643,0.2006504,0.14096452,-0.6883657,0.5257372,0.07914371,-0.047559284,-0.19422947,0.058318842,-0.44962868,0.28549084,0.012210312,-0.064143956,-0.0011885081,-0.015983405,0.013072292],[-0.0026489464,0.5069076,1.9415842,-0.15803127,-0.43643364,-0.22442625,-1.1007931,0.72446126,0.6154824,0.30189446,0.05599185,0.30916336,-0.42455056,-0.12520063,0.21027873,-0.04347085,0.32625684,-0.19425716],[0.9294821,0.54150075,-0.0014356759,0.098655105,0.17580858,0.3025255,-0.4274019,0.063312046,-0.056220684,-0.19399443,0.15516913,0.15510176,-0.17118718,-0.12277757,-0.15992972,0.1450927,-0.30511072,-0.21360834],[-0.38354275,0.5149199,0.00057220226,-0.19913933,0.113392256,0.16671515,-0.8061363,0.12808692,0.49387446,-0.045991942,0.21927999,0.46965662,-0.16261269,0.10389701,-0.14170384,-0.65069014,0.22400732,0.25261372],[-0.002354059,-0.7396432,0.0020271204,0.45820466,-0.25027558,-0.94205016,0.6306626,0.48574498,-0.2435183,-0.0036713302,-0.101162255,-0.15816127,0.22204119,0.070377395,-0.33187887,0.02354076,0.015245039,0.21813555]],"activation":"σ"},{"dense_2_W":[[-0.39639628,0.133772,-0.45599017,-0.12503287,0.6173994,-0.1820395,-0.10319031],[0.52661186,0.6336824,0.38281307,-0.27256545,-0.11690951,-0.31991315,0.35685524],[-0.3293337,-0.0649368,-0.71211916,-0.01983682,-0.04604264,0.21905379,0.22640918],[-0.13469312,-0.3821376,0.38459212,-0.9789118,-0.59137386,-0.69679177,-0.46103966],[-0.3486451,-0.30294892,0.20108142,0.033686325,0.20845367,-0.15991163,0.16748387],[-0.5856937,-0.43619728,0.027885517,0.10118421,0.29912174,0.16026014,-0.145594],[0.5430804,0.85552984,0.428548,-0.4006437,-0.4890019,-0.48459867,0.3640567],[0.05403504,0.021867719,0.0033385737,-0.40292013,0.5227002,-0.3627125,-0.039094802],[-0.40562767,1.3550378,0.45764822,-0.619266,-1.8762536,-0.93922824,0.09558092],[-0.36202994,-0.6913235,-0.7093955,0.21246669,0.16837499,0.5995575,0.14070001],[0.36312523,0.43244222,0.028741337,0.028756998,-0.41653222,-0.8163697,0.50980633],[-0.33022994,0.76520115,0.5691923,-0.50416476,-0.23335694,-0.47498608,0.39545852],[-0.1516905,-0.15376274,-0.5148544,0.33134565,-0.1089893,0.73183095,-0.6926165]],"activation":"σ","dense_2_b":[[0.07102355],[-0.12229542],[0.019641167],[-0.29842442],[0.010732347],[-0.22115242],[-0.14720376],[-0.03818797],[-0.65264404],[-0.054308396],[-0.0794121],[-0.37990314],[-0.015795233]]},{"dense_3_W":[[-0.17495315,0.6230324,-0.2510061,0.2996151,0.20122245,0.16665521,-0.5264948,-0.12510355,0.58361983,-0.035939705,0.39780724,-0.49274892,-0.13300937],[0.19338629,-0.14241812,0.38995105,-0.24322313,0.103984654,0.67614037,-0.59531045,-0.3055774,0.2720826,0.49907777,-0.348274,-0.4995533,0.62145895],[-0.4343396,0.46093857,-0.6372687,-0.59232146,-0.37132394,0.42294338,0.64938694,-0.38425207,0.43624443,0.01882502,0.60109246,0.43596882,-0.4406191]],"activation":"identity","dense_3_b":[[-0.04878774],[0.05141081],[-0.054991424]]},{"dense_4_W":[[-0.57082623,1.0047814,-0.8701593]],"dense_4_b":[[0.05418028]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN.json b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN.json new file mode 100755 index 0000000000..4d77cc0389 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM 1500 5TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[7.8681383],[1.2917701],[0.42320544],[0.051469278],[1.2847253],[1.2883313],[1.2900517],[1.2667522],[1.242907],[1.2112364],[1.176482],[0.051301446],[0.051339414],[0.051366985],[0.05125917],[0.05098003],[0.05050668],[0.04989228]],"model_test_loss":0.022552745416760445,"input_size":18,"current_date_and_time":"2023-08-10_00-52-59","input_mean":[[25.508078],[0.034453202],[0.01726827],[0.00056943524],[0.031399224],[0.032966],[0.034444243],[0.04235863],[0.049242016],[0.057398297],[0.06200239],[0.0005415381],[0.000549214],[0.00055187126],[0.00063792604],[0.00062618323],[0.00070369913],[0.0007498945]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.107602455],[0.2592419],[-0.1010373],[0.34598154],[0.8561106],[-0.15246718],[0.9970168]],"dense_1_W":[[0.0071956124,-0.8389715,0.0016946977,0.37401447,-0.27382085,-0.5530695,0.5881284,0.12836976,-0.094520785,-0.060450573,-0.028743897,-0.04453258,-0.09910858,-0.051995493,0.017620616,-0.013560951,0.18469654,-0.013240006],[1.3669219,-0.2384396,0.08245142,0.14269358,0.22758602,-0.093947925,0.5673605,-0.045786478,0.036916874,0.38647193,-0.30818498,-0.4555334,0.29512686,-0.24807432,0.4348693,-0.34444955,-0.11027862,0.016942881],[0.013133192,-1.1178136,0.034996957,0.48028773,0.09731058,-0.693922,0.49429983,0.01820859,-0.037673093,-0.13616005,0.02270395,-0.69734114,-0.07626221,0.2784788,0.007214682,0.07223958,-0.011835337,-0.070404634],[0.0054024686,0.52874875,3.438241,-0.21533473,-2.068417,-1.530317,-2.6102667,-1.1109601,2.2420053,3.6071155,1.1157349,0.3809812,0.5365094,-0.52533704,0.02788547,0.4045346,0.24486302,-1.008144],[1.682156,-0.052193947,-0.09770653,-0.45150465,0.2333314,-0.5347695,0.09825678,-0.01992122,-0.1994097,0.116743915,0.16566196,0.20611681,0.6852969,-0.45614037,0.27821264,0.09751711,-0.02198396,0.04035941],[-0.002443684,-0.78855264,-0.014614094,-0.026071582,-0.10583151,-0.38199013,1.0572444,-0.18948583,-0.35938174,0.013804459,0.15949139,-0.7269957,-0.20543943,0.52785945,0.2962705,0.26196185,0.21384726,-0.39327204],[1.5940213,0.11492236,0.090780675,-0.32562405,-0.034105282,0.53610796,-0.4663451,0.38666242,-0.17008422,0.10295398,-0.2042109,0.31005463,-0.28528133,-0.21527892,0.22701246,0.018739212,-0.024669824,-0.04890493]],"activation":"σ"},{"dense_2_W":[[0.6139993,0.3757347,-0.1356616,0.085909925,-0.12511243,0.15788122,-0.031210706],[0.4353305,0.18801172,0.12204481,-0.118660524,0.31724608,0.7373148,-0.5507885],[-1.3431091,0.006327765,-0.48985648,1.2948128,-0.1034634,-0.6535869,1.5181615],[-0.89554805,-0.0707852,-0.38398325,-0.99453413,0.23394457,-1.3053,0.70568514],[-1.060718,-0.08779857,-0.34332564,0.93365616,-1.0663359,-1.5535986,0.9410223],[0.3106728,0.011034138,0.2690925,0.20874923,0.3430892,0.7928498,-0.7562942],[-0.9156255,-0.59965265,-0.23466443,1.0020962,-1.8364218,-1.0228359,1.0616008],[-0.6956375,-0.44040835,-1.0947623,0.5968099,-0.049048502,-1.2266653,1.1614286],[0.3183038,-0.35872775,0.13763095,-0.28848255,-0.050387893,0.39608815,-0.54269797],[0.5095539,-0.24931525,0.40140435,-0.27532217,0.13700272,0.57273823,-0.6925308],[-0.32013652,-3.1370046,-2.7840195,1.34559,-0.84404,-0.6845122,-0.5461476],[-0.72196037,0.038392793,0.057249792,-0.44615316,-0.0024790815,-1.1388366,0.36243963],[0.67724824,0.28425425,0.12925239,-0.22140531,0.5270677,0.15986088,-0.1314976]],"activation":"σ","dense_2_b":[[-0.14464946],[-0.15859996],[0.65735745],[0.28288272],[0.48416847],[-0.120317705],[0.17381315],[1.3373141],[-0.15882145],[-0.21813588],[1.288298],[-0.09495147],[-0.11485835]]},{"dense_3_W":[[0.52467114,0.573881,-0.37257165,-0.2885695,-0.73502827,0.5044393,-0.35882697,-0.32937768,0.40931723,0.33977678,-0.3444813,0.08750891,0.54127914],[0.0466505,0.44103855,0.41321534,0.5304071,-0.15150255,-0.293208,-0.13094401,0.05617865,-0.2815031,-0.25879386,0.09075154,0.71288633,-0.43692803],[-0.40456718,0.20321198,0.27640694,0.09131404,-0.27206296,-0.24663389,-0.60239804,-0.46262908,-0.07054595,-0.2889505,-0.20886894,-0.095937446,-0.075776964]],"activation":"identity","dense_3_b":[[-0.1063788],[0.09727621],[-0.08167072]]},{"dense_4_W":[[-1.0752603,0.4178708,-0.3472837]],"dense_4_b":[[0.10501918]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/RAM HD 5TH GEN.json b/selfdrive/car/torque_data/lat_models/RAM HD 5TH GEN.json new file mode 100755 index 0000000000..0b9abe7fb6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/RAM HD 5TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[6.5132856],[1.3632272],[1.5413244],[0.03303396],[1.3259029],[1.3417274],[1.3554335],[1.3285728],[1.3114035],[1.2910824],[1.2723991],[0.03297938],[0.03299731],[0.033014063],[0.033058062],[0.033087354],[0.033028472],[0.032748375]],"model_test_loss":0.020962899550795555,"input_size":18,"current_date_and_time":"2023-09-02_21-03-03","input_mean":[[26.374321],[0.24099204],[0.0014719056],[-0.017563006],[0.24074426],[0.24266605],[0.2428761],[0.2323719],[0.23110531],[0.23507003],[0.24088627],[-0.017492866],[-0.01751848],[-0.017543415],[-0.01748686],[-0.01742368],[-0.017475272],[-0.01757139]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.079944834],[-0.3598381],[0.09434822],[-1.3233447],[0.1130735],[-0.45763284],[-0.6268566]],"dense_1_W":[[-0.073462725,-3.7294142,0.008516538,-0.1984018,0.6034948,1.8619602,2.1633458,-1.9060298,0.40978914,-0.37825182,0.611484,-0.36018258,0.27376932,0.3118703,0.036994077,0.21737134,-0.12771696,-0.040260702],[-0.20176645,0.57531285,-0.0084412275,-0.17881922,0.9809269,-0.16568676,-0.58166283,-0.1486564,0.70059836,-0.29893303,0.21570963,0.3508427,-0.3873581,0.06504418,-0.021596037,0.23897065,-0.22310819,0.10423835],[-0.06450743,-0.7734916,-7.4385157,0.34980673,2.380512,3.2428308,3.075309,-3.6599858,-2.5296397,-0.5446167,-0.94137996,-0.59157187,-0.07057616,0.11925076,0.08353299,0.38889635,-0.23567261,-0.1015343],[-0.28985357,-1.5797744,0.0060979226,-0.031419355,-0.400295,0.3806542,0.11740358,-0.0064864187,-0.12764077,-0.04428382,-0.07560065,0.17292799,0.12330137,-0.27197468,0.29182738,-0.2540429,0.13684034,-0.04889033],[-0.07832161,2.1902764,0.030133046,-0.30596706,-0.7210498,0.027130641,0.6432982,-0.046274744,-0.5472184,0.70929205,-0.24650635,0.53280306,-0.48029587,0.12250029,-0.11553079,-0.13253216,-0.029158924,0.18207467],[-2.8597453,-0.43466172,-0.18268725,-0.060400605,0.28060955,-0.18074062,-0.6875857,-0.38406757,-0.37214103,-0.9286758,-0.38446707,0.15134443,0.054654,0.48821846,-0.004988523,0.06868294,-0.033809625,-0.047231436],[-0.0017858031,-0.6662176,0.0051888903,-0.06294718,-0.90392506,-0.8541502,-0.16361657,0.08513459,-0.07875049,0.0790174,-0.13931915,0.0140639525,0.017838055,0.1625987,0.25675306,0.18861753,-0.18611054,-0.059609663]],"activation":"σ"},{"dense_2_W":[[-0.6968983,0.27608687,0.10406441,-0.024237338,-0.42272064,-0.013714595,-0.54531485],[-0.67445093,0.32921025,0.36817434,0.06642965,-0.042997025,-0.32730803,-0.5889611],[-0.340392,-0.03912806,0.46399808,-0.4680018,-0.49668282,0.16590515,0.21437873],[-0.46547934,0.07344197,-0.12238069,-0.0253223,0.49247265,-0.25569054,-0.57428217],[0.41493058,-0.27931592,-0.089011,0.08059608,-0.5250433,0.09186349,0.07772292],[-0.3727222,-0.15556182,0.3317168,-0.14912905,-0.17529897,0.48200855,0.6279147],[-0.31705967,0.10656132,0.34339988,-0.63882726,0.055984847,0.45991278,-0.6692897],[0.15874985,-0.119392134,-0.19742353,-0.60957354,0.18357219,0.28318337,-0.25417072],[-0.37113652,0.43916598,0.27193624,-0.520228,-0.2144683,0.3655652,-0.53570765],[0.83260417,-1.699712,2.6747808,1.3270547,-0.96657324,0.093039535,-0.45796528],[0.45241207,0.39900452,-0.50378394,-0.20505324,0.45373067,-0.19082053,-0.22071704],[-0.5270052,0.45971948,0.3313946,-0.29207435,0.1978061,0.19034018,-0.23600237],[0.9750541,-0.7961233,-0.0005789574,1.0066968,-0.9369118,0.042760722,0.18730567]],"activation":"σ","dense_2_b":[[-0.20384558],[-0.20811413],[-0.0037139736],[0.023454173],[-0.015772115],[-0.0065609645],[0.0068738465],[0.009471401],[0.003985857],[-0.9329477],[0.010725975],[-0.013339677],[-0.2815146]]},{"dense_3_W":[[-0.4011974,-0.33610415,0.13164108,0.33895674,0.06529623,-0.1580419,0.26291764,-0.24552977,-0.3933592,0.13941231,-0.35621086,0.5489147,-0.086336456],[0.1649218,-0.31881985,-0.48512995,0.2596072,-0.5807467,-0.19014847,0.5032025,-0.22611593,0.22070079,-0.30926946,0.35143164,0.12860067,0.1903238],[0.17895938,0.46517286,0.3067372,-0.06601107,-0.3844143,-0.499728,0.46086124,0.58410454,0.52920264,-0.4394692,0.23419406,0.01974897,-0.5022407]],"activation":"identity","dense_3_b":[[-0.0035552178],[-0.0043843286],[-0.0047028256]]},{"dense_4_W":[[0.80738455,0.86131907,1.2868857]],"dense_4_b":[[-0.0045010163]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA KAROQ 1ST GEN.json b/selfdrive/car/torque_data/lat_models/SKODA KAROQ 1ST GEN.json new file mode 100755 index 0000000000..b4ce6b0baa --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA KAROQ 1ST GEN.json @@ -0,0 +1 @@ +{"test_dict":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5380118,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5668384,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.49744788,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1069546,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.022589128,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.87991786,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3465033,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.35901418,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.74537796,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0467105,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.40654802,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.22541186,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.39508894,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.5349423,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3032231,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.09337339,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.43609616,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.187037,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.03238472,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3256767,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2560252,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.269817,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.90431225,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.39230934,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.3635288,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.9773381,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.329567,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3380291,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.2777746,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.82472456,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7643237,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3661834,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.849533,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.1835219,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2257897,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.032864716,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.32149622,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.88784707,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.523679,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.157843,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.81264627,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.847208,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5404857,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2102542,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2051469,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.146302,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.4661444,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.49748513,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0818156,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3345778,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.347531,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.8679907,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.29394773,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.09643532,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.19364843,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1680533,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.17557147,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.21844473,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.50774,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3670707,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.40873116,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.35878894,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.60975885,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.55742276,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.505599,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3681715,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.5387529,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.35331953,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.60687315,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.86639714,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.27491,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.5394888,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.7878668,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5126742,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3503757,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.439768,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5785763,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.010508742,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2693633,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.8410233,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.5314865},"input_std":[[7.989791],[0.7320975],[0.5846287],[0.035815567],[0.7283375],[0.7326722],[0.7346924],[0.7248922],[0.73135966],[0.7329609],[0.7217711],[0.03612053],[0.036042064],[0.035952937],[0.035485364],[0.03517163],[0.034833923],[0.034284007]],"model_test_loss":0.008391334675252438,"input_size":18,"current_date_and_time":"2023-07-16_20-00-17","input_mean":[[20.655447],[0.024584128],[-0.044770714],[-0.0072627976],[0.031237675],[0.029807081],[0.028027987],[0.009196148],[0.008076342],[-0.0015783679],[-0.0010444114],[-0.0072330763],[-0.0072172945],[-0.0072000716],[-0.007262945],[-0.0073047676],[-0.007441227],[-0.0077096256]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"test_dict_zero_bias":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.39948598,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6295606,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.65359616,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.2675315,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.061416015,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.76222944,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.4814665,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.33280456,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5849962,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0883316,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.20698664,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.33144438,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5527949,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.402524,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1805307,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.094053596,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5350164,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.342611,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.12336916,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.4533029,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2709537,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.2863967,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.85154873,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.55498785,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2663321,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.8637229,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.23138924,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3381034,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3081448,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.69880867,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7338842,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.5125997,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.74419975,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3198262,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.1027677,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.11119664,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.21705788,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.8385861,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5986935,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0079983,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.70014787,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.80401677,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.49810106,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.066942,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0737326,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.2979757,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.56554705,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6396831,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.9987763,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3704159,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.17107952,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.89600575,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.48579958,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.18861425,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.36363924,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.3085387,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.048344463,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.3228795,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.3889711,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.5090332,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.35560045,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.45501107,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.70604444,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.50033605,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.37736052,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.5132567,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.4097024,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.40884608,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.5351974,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7473452,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.13379052,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.409246,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.7862364,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.5806613,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.5019659,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.348442,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.69009113,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.08894949,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.1496372,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.9766548,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.4074421},"layers":[{"dense_1_b":[[1.2601088],[0.50795346],[-0.32973284],[-0.4278964],[-1.3286078],[0.99765503],[0.4339966]],"dense_1_W":[[0.39427435,1.5991782,0.0038050977,0.05548223,-0.04591027,-0.2224138,-0.627583,1.6541553,-0.17021364,0.0030925316,-0.277334,0.016327249,0.38390467,-0.043327343,-0.3199062,-0.24170461,-0.03311468,0.21610846],[2.0976179,-0.39388067,-0.02243466,-0.058260668,1.7147076,0.66427886,-0.5170263,-0.5367035,-0.5689552,0.20077214,0.29552126,-0.1721181,-0.46311033,-0.34615812,-0.0888081,-0.18715298,0.16055387,-0.35338402],[-1.5097122,0.621122,-0.105104305,-0.18648383,1.1042429,0.77002937,-0.6538228,-0.44171673,-1.0661969,-0.14405254,-0.44617876,0.24370627,-0.19782393,0.19933222,-0.35169846,0.094613805,0.40841854,-0.25420657],[-0.009321846,1.7888899,5.6288323,-0.05019591,-1.6935351,-1.3057272,-1.5961826,1.3134946,0.88433415,1.1306716,-0.14263214,-0.25278306,0.2156381,-0.15768535,0.17491388,0.10185023,-0.057640597,-0.037920576],[-0.6545767,-0.7725577,-0.043511603,0.39719597,0.44334525,-0.29454172,1.1796441,-0.43937585,-0.008846232,0.3591864,-0.6636783,-0.19979312,0.10855517,0.07740657,-0.16985726,-0.3615132,0.19928159,0.004342849],[0.43667847,-1.4340503,0.0061377757,0.02465778,-0.0052791275,-0.21163116,0.3254924,-0.83517593,0.3075678,-0.17314681,0.21212056,-0.5718453,0.25654393,0.030458353,0.27716112,0.18619251,-0.166307,-0.07792453],[0.6207286,-0.74188787,0.0014747722,0.19179606,0.21235986,0.023669226,1.3397173,-1.0746361,-0.6413778,0.07621638,0.2610392,-0.14456956,0.40803775,-0.25941938,0.1692598,-0.019315228,0.32499546,-0.2848976]],"activation":"σ"},{"dense_2_W":[[0.5846105,-1.1216323,0.012021069,0.519304,-1.2193648,-1.2420696,-0.9293579],[0.31864703,-0.029731255,0.39742234,0.43330926,-0.8345377,-0.45988193,-0.52471954],[-0.48068455,-0.14217594,-0.052064557,-0.05625134,0.531164,0.07339243,0.5302106],[-0.046448767,0.46001384,0.3322486,0.16847979,-0.012636936,-0.58880013,-0.039295547],[0.12264031,1.0059353,-0.25489268,-1.3256443,-1.3072578,-1.6475178,-0.24379867],[0.31735018,-0.26441798,-0.47050726,-0.44442534,0.295501,0.37262294,-0.3538891],[-0.16229963,-0.6157792,-0.3740346,0.06780694,0.21299857,-0.38519585,-0.64304954],[-0.57181144,0.0069005713,0.3935489,-0.05499202,0.48840258,0.091699615,-0.16876978],[-0.5405887,0.3622075,-0.65014505,-0.45285606,-0.744763,-0.6536307,-0.75167125],[-0.78169376,-0.41184205,-0.33792898,-0.32395944,-0.017056243,0.4648398,0.5686303],[0.75694907,-0.031489003,0.5235601,-0.03767089,-1.0404472,-0.4519171,-0.42058164],[0.7886114,0.5415332,0.15376541,0.5960243,-0.46606156,-0.8066629,-0.5520896],[-0.71171945,-0.42530975,-0.26570597,-0.23765114,0.702833,0.00345897,0.07370162]],"activation":"σ","dense_2_b":[[0.25844958],[-0.08529898],[-0.009525728],[-0.06614882],[-0.35542876],[0.0096092895],[-0.21220195],[-0.0058748396],[-0.17085731],[0.029518519],[-0.0972837],[0.04010498],[-0.0016747463]]},{"dense_3_W":[[-0.18374792,-0.50147384,-0.49204373,-0.5885765,0.39067307,0.540897,0.4194,0.56657135,0.32507578,0.05896129,-0.2124288,0.12981957,0.57857627],[-0.47317266,-0.6505695,0.60085654,-0.061350014,-0.4325399,-0.13409662,-0.28602767,-0.07301156,-0.21435276,0.73678,-0.27858484,-0.6291994,0.7327412],[-0.33367744,0.4530852,0.011034279,-0.47386295,-0.26150367,0.42310083,0.4337839,0.22710037,-0.19489768,0.16766186,0.013165514,0.4446457,0.35002133]],"activation":"identity","dense_3_b":[[0.026227264],[0.040914938],[0.029111717]]},{"dense_4_W":[[-0.19691564,-1.2166661,-0.37322426]],"dense_4_b":[[-0.03747132]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820527T6070405'.json b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820527T6070405'.json new file mode 100755 index 0000000000..09703241a2 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820527T6070405'.json @@ -0,0 +1 @@ +{"input_std":[[8.822513],[0.7748963],[0.45073962],[0.028469948],[0.7594248],[0.7647172],[0.7702192],[0.76471704],[0.7589174],[0.7535919],[0.7483726],[0.02835351],[0.028382754],[0.02841451],[0.028416976],[0.028403616],[0.02836127],[0.028289525]],"model_test_loss":0.005644185468554497,"input_size":18,"current_date_and_time":"2023-08-10_09-20-08","input_mean":[[21.586409],[-0.0068980567],[-0.009099182],[-0.012765147],[-0.003074515],[-0.0043314965],[-0.0054138857],[-0.00872431],[-0.008043755],[-0.007268204],[-0.008552191],[-0.012878481],[-0.012848849],[-0.012813383],[-0.012694143],[-0.012824441],[-0.012981006],[-0.013215528]],"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.559899],[0.061946217],[-1.1318369],[-0.15356188],[-0.11130223],[-1.6501099],[0.72932065]],"dense_1_W":[[1.2257729,-0.21475899,-0.21481141,-0.06141821,-0.32331187,0.34948754,-0.45195353,-0.7936406,-0.2963517,0.075721286,0.16471535,0.3187927,0.026701737,-0.12669133,-0.19016542,-0.21420473,-0.03571252,0.24129197],[-0.0037353956,1.1463906,-0.032696437,0.08411021,-0.45902684,0.47184968,-0.049507096,0.48809394,0.6835621,-0.15164956,-0.2564982,-0.13430756,-0.05483595,-0.10893071,0.14104505,-0.15664752,0.14854911,-0.14124799],[-0.5031497,0.5740853,0.13468973,-0.07342075,0.22242497,0.5158128,-0.49981844,0.13897888,0.05672014,0.012715707,0.039177578,0.15471649,-0.13522737,0.18366553,-0.012791789,-0.20473395,0.17170367,-0.028233869],[-0.0030404613,-0.23232347,-0.051857546,-0.08527703,0.5234089,-1.2333686,0.76485693,-0.14326906,0.036368743,0.053107988,-0.030047482,-0.16562696,0.020687701,0.39415163,0.3789338,-0.36305478,0.031212157,0.050091427],[-0.00634946,0.2520326,-2.9768014,0.45517653,-0.44722444,-0.4035937,0.13028944,-0.25888947,-0.60737526,0.18608572,0.7329467,-0.059370834,0.17232452,-0.3012327,-0.63019043,0.29433328,0.35139483,-0.2806337],[-0.72473496,-0.41749117,-0.15656829,0.24190299,-0.14515589,-0.86861235,0.59240955,-0.26769835,-0.025524082,-0.033400673,-0.0374126,-0.012645718,-0.2529195,0.034257527,-0.11211495,-0.07982842,0.20105368,-0.08527751],[1.3300412,0.21610664,0.21324499,-0.047655277,0.30579573,-0.16403562,0.3423395,0.5994678,0.36008987,-0.104190245,-0.12160565,-0.28337744,-0.3201555,0.46343824,0.2363151,0.3774341,-0.27325517,-0.117115274]],"activation":"σ"},{"dense_2_W":[[0.89337134,0.06212176,0.69424486,-1.1258126,-0.41406798,-0.03324763,-0.8690317],[0.45488375,0.9383094,0.7518038,-0.23470305,-0.3165762,-1.0129137,-0.03375848],[-0.31297848,-0.49257454,-0.9567864,0.8079615,0.031627808,0.47916612,0.3070335],[0.16672489,-0.57691675,0.05825881,0.7295758,-0.48249677,0.8452979,-0.0969158],[-0.78628397,0.23688492,1.0961475,-0.21738441,-0.89421016,-0.75636774,-0.74580187],[-0.77340865,-0.19145031,0.8292296,0.08286966,-1.4438053,-0.20321132,-1.5541686],[1.4181628,0.6372049,1.5007821,-0.7996564,-0.8494127,-0.7805535,0.40175954],[-0.5131002,-0.28726596,-0.7685454,0.82989246,-0.3419074,0.9553502,0.20237355],[-0.028016198,0.6447288,0.70404804,-0.9766476,-0.08476289,-1.1437272,-0.59247833],[-0.04841889,-0.17168015,-1.1055567,0.8258706,-0.11265719,0.14096239,0.44926792],[-0.7357998,-0.46887338,-0.5601688,0.18314798,-0.3938517,0.6898303,0.30288145],[-0.91847914,-0.9485166,-0.36430508,0.18779275,0.10875428,0.7242329,0.20822012],[0.9209807,-0.09816239,0.44547236,-1.0485634,-0.72605056,0.12374904,-0.86046124]],"activation":"σ","dense_2_b":[[-0.13824841],[-0.037492033],[0.009199112],[-0.032276437],[-0.19626792],[-0.35359505],[0.104143284],[0.13742983],[-0.02941952],[-0.082949385],[-0.0472394],[-0.13388354],[-0.030517787]]},{"dense_3_W":[[-0.50135684,-0.6265797,0.37889096,0.23949896,-0.28617254,-0.80253077,-0.78707784,0.76118404,-0.6785741,0.6882018,-0.12380857,0.76802224,0.35342324],[-0.65878934,-0.25308114,0.5803435,0.40448022,-0.5880374,-0.10790633,-0.61491644,0.7250317,-0.50604415,-0.16505781,0.6877505,0.31448555,-0.26105368],[-0.30674505,0.52787536,-0.73549473,0.4655279,0.70805156,0.37356392,-0.22046967,-0.53852963,0.295031,-0.6098088,0.40994385,-0.40091082,0.61514527]],"activation":"identity","dense_3_b":[[0.037118178],[0.025729012],[-0.0008306772]]},{"dense_4_W":[[-0.45146888,-0.6571699,0.3420233]],"dense_4_b":[[-0.017946098]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567T600G500'.json b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567T600G500'.json new file mode 100755 index 0000000000..040727ee92 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567T600G500'.json @@ -0,0 +1 @@ +{"input_std":[[7.170632],[0.5570021],[0.32616535],[0.036937848],[0.5544301],[0.55469906],[0.55466586],[0.54358166],[0.53542227],[0.5261058],[0.52150166],[0.036922906],[0.036903005],[0.036881007],[0.036733527],[0.03662628],[0.0365955],[0.036601096]],"model_test_loss":0.011051010340452194,"input_size":18,"current_date_and_time":"2023-08-10_09-45-15","input_mean":[[21.523685],[0.005822485],[0.017957574],[-0.0105598625],[0.0046025654],[0.006011144],[0.0077467156],[0.01335771],[0.019210018],[0.024844872],[0.029322863],[-0.010329333],[-0.010309703],[-0.010285427],[-0.010262218],[-0.010182764],[-0.010136091],[-0.01018172]],"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.8376012],[0.79891944],[0.27328137],[-0.049832694],[0.1671762],[0.77761924],[0.080337375]],"dense_1_W":[[0.061794475,0.615098,-0.45199832,-0.89162534,0.14803112,-0.3359411,1.216409,-0.30902275,-0.46318957,0.15326177,0.5617341,-0.79835445,-0.41347325,-0.11659805,-0.5467362,-0.07835621,-0.23650429,0.081196256],[0.6269029,0.6299682,0.00862801,-0.28406104,-0.40516195,0.34416673,-0.05962201,0.12889835,-0.118009314,-0.006291829,-0.015252909,0.4089935,-0.14335842,-0.44551474,0.32767174,-0.07098034,0.08289599,-0.05129482],[2.873063,-0.39785758,-0.06460063,0.5302846,-0.54400563,-0.32484847,-0.74205005,0.15385602,0.2992983,-0.14630033,-0.20480666,0.5095823,0.26476872,-0.21809368,-0.38910902,-0.36676934,0.13174173,0.21983561],[0.061674196,0.40320727,-0.005555039,-0.012705039,-0.44866937,0.76068926,-0.53796315,-0.019318009,-0.011975164,0.49870455,-0.34061676,0.10459906,-0.10904486,-0.43353584,-0.16262761,0.19058083,0.45760906,-0.37183845],[0.061266888,0.49422592,-2.2183287,-0.2156109,-0.4867127,-0.22925144,0.71946245,-0.42894575,-0.5862933,-0.4373623,1.1160414,0.12841341,-0.36759555,0.023551682,0.07593063,0.50553346,0.03556044,-0.25252578],[0.74545926,-0.32704693,-0.008650265,0.02720982,-0.01538259,-0.82613665,0.5189707,0.14880055,0.040636804,0.12673292,-0.19592556,-0.262724,-0.07316436,0.3629183,0.25224432,-0.09442609,0.19599767,-0.1895605],[0.008984444,-0.8195131,-0.0010790422,0.45667002,0.27273402,-0.70226806,0.18335287,0.106715776,-0.11851017,0.8999131,-0.59194285,-0.27304903,-0.5033789,0.045519818,-0.23001073,0.25903532,0.51413286,-0.51565295]],"activation":"σ"},{"dense_2_W":[[-0.17816369,-0.4823508,-0.19070831,0.3857896,-0.5818765,-0.5350052,-0.750577],[-0.04763508,-0.32846496,-0.28990135,-0.5891694,-0.40825295,0.6042029,0.80569786],[-0.31981805,-0.048176482,-0.6725098,-0.0116866045,-0.7275763,-0.6111508,-0.5524373],[0.8248028,-3.5739028,0.45623106,-1.4498163,0.16980822,-0.20465934,1.124565],[-0.43001968,0.0030000166,-0.078488536,0.76254296,-0.45105755,-0.65158,0.25315326],[0.28314695,-0.2640387,-0.010856731,0.6712196,-0.42694327,-0.7123847,-0.51776206],[-0.08497496,-0.2769552,0.3038657,-1.5984288,-0.94830346,0.76130813,-0.5299745],[-0.13139525,-0.14840417,0.13429053,-0.9094941,0.006232065,-0.209775,0.01644083],[-0.27333236,0.36955395,0.06687941,0.8257492,-0.4901239,-0.8291871,-0.66357756],[-0.25540715,-0.4607236,-0.46596804,-0.80555916,0.07256802,0.75021,0.38117334],[-0.47401762,-0.25782427,-0.48962656,-0.95336634,0.078216136,0.7174792,-0.33049294],[0.53245556,-3.517823,-0.40500528,-1.7386801,2.6048553,-1.0151122,0.45161602],[-0.25264537,-0.55914116,-0.60352135,-0.4744699,0.39310023,0.123256855,0.5423338]],"activation":"σ","dense_2_b":[[0.02130018],[0.03923013],[0.0066096364],[-0.10651471],[-0.02452014],[-0.026465867],[-0.19940089],[-0.33655235],[-0.008171532],[0.14014752],[-0.24019146],[-0.028391115],[-0.08230956]]},{"dense_3_W":[[-0.69569725,0.45874256,-0.28139538,-0.15990418,0.33506617,-0.048326474,0.42024234,0.12925243,-0.30243614,0.646346,-0.046070546,0.755795,-0.38833755],[0.27728352,-0.4111872,0.5240284,-0.023659706,0.40603057,0.42206782,0.19779211,0.20356862,0.623484,-0.61507636,-0.103538364,-0.3267671,-0.52325946],[-0.10045345,0.4899018,-0.33766255,0.53569114,-0.43111655,-0.3958533,0.6952763,0.29030153,-0.5106717,0.21320766,0.12684761,-0.031848744,-0.15174294]],"activation":"identity","dense_3_b":[[-0.1256119],[0.056057606],[-0.06149789]]},{"dense_4_W":[[-0.4201209,0.91140276,-0.7814627]],"dense_4_b":[[0.059609402]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567T600G600'.json b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567T600G600'.json new file mode 100755 index 0000000000..f5a288fa5c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567T600G600'.json @@ -0,0 +1 @@ +{"input_std":[[7.978942],[0.6101572],[0.41588354],[0.03231331],[0.60168684],[0.6050097],[0.60834473],[0.58961505],[0.57773924],[0.56671244],[0.5566466],[0.032140717],[0.032189563],[0.032246154],[0.032141175],[0.0321322],[0.032021564],[0.031848647]],"model_test_loss":0.011636423878371716,"input_size":18,"current_date_and_time":"2023-08-10_10-11-28","input_mean":[[19.614794],[-0.106306285],[0.01432459],[-0.024576934],[-0.10741898],[-0.106938824],[-0.106123485],[-0.099019445],[-0.093359515],[-0.09050246],[-0.08906652],[-0.024685377],[-0.02465698],[-0.024623092],[-0.024553658],[-0.024545813],[-0.02454542],[-0.02470256]],"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.69355416],[2.4732628],[-1.3702826],[-0.11549802],[-3.2115526],[-0.4695894],[1.7158915]],"dense_1_W":[[-0.09712236,0.70359236,0.029870417,-0.32686847,0.41420302,1.2504632,-0.16431941,1.2449944,0.8515324,0.1591466,-0.47704843,0.42924815,-0.3310643,-0.32485127,0.4103194,0.14313804,0.27483824,-0.3073054],[1.9112779,-2.012766,1.1709712,-0.12909168,0.92364335,1.5146329,-1.5916656,0.3833729,0.68214667,0.8704969,-0.7785849,0.20670438,-0.0054348283,-0.6571034,0.59524465,0.25777373,-0.13047084,-0.13789715],[-0.35545897,0.74289757,0.0010395766,-0.4791203,-0.17787026,0.69020367,-0.2601107,0.35769174,0.03863855,-0.17375207,0.06826012,0.4671819,0.2501633,-0.30800718,-0.009430912,-0.123984225,-0.17020024,0.27680448],[-0.012191877,-0.46145502,3.9199607,0.20028035,0.6080922,1.1058863,-1.2070769,1.5072201,0.40595236,0.57759535,-1.5408669,0.43732843,-0.37236336,-0.17954569,-0.64967644,-0.065201126,0.5412813,-0.12528999],[-2.0663908,-1.4909488,1.3023357,-0.53967714,0.24725075,1.0423123,-0.69051623,0.5551958,0.6623838,0.41527644,-0.6491754,0.6272475,-0.13575684,-0.4233404,-0.0887856,0.60994846,0.2752093,-0.32854816],[-0.28226903,-1.5632701,0.038757235,-0.01621774,1.8377037,-0.7989218,0.74388874,2.3336496,0.76146716,0.1356443,-0.5690615,-0.30151263,-0.21605678,0.47128358,0.29254648,0.062264904,0.07035633,-0.18515895],[0.56221074,1.1516801,0.0010512201,-0.8426568,-1.0685285,1.9994211,-0.8278666,0.5958917,0.074260615,-0.4739713,0.17006992,0.6652615,0.05565689,-0.0064310133,-0.0893498,-0.17889997,0.13203734,0.14932431]],"activation":"σ"},{"dense_2_W":[[0.50028837,-1.064031,0.90041625,0.47736132,0.90677744,-0.90660274,0.13473313],[0.5786526,-0.17570329,1.1356779,-0.316433,-0.18528749,0.074578024,0.07604858],[-0.5514635,0.12420603,-0.9303746,0.07806514,0.043209217,0.44727743,-0.3354667],[-0.97645247,-0.8832375,0.33142787,-0.8761601,0.562086,0.28258607,-0.7472652],[-0.012420426,0.10160729,0.9597554,-0.54730177,0.92053396,-0.76612854,0.1645351],[-0.05629443,-0.6274549,-0.5702288,-0.47625864,0.007329011,-0.00937992,-0.27663508],[-0.39911163,-0.47183767,-0.26182827,-0.5910186,0.24520285,0.8801795,-0.7366388],[1.183774,0.38708115,0.95070434,-0.27969792,-0.647032,-0.06648758,0.63079244],[-0.92506593,-0.43120384,-1.1437249,0.3507138,0.048965972,0.2929897,0.023275621],[0.065495975,-0.7477936,-0.49741834,-0.43279028,-0.4596529,0.5749685,0.10943722],[-0.26667404,0.1566403,-0.56995285,0.18439355,0.006458198,0.0508498,-0.6114961],[0.07948333,0.6847074,-0.94002885,0.18541375,-0.5421211,0.40665948,-0.54692215],[-0.45402494,0.73848003,-0.42449367,1.1125244,1.3159411,-0.5954729,-0.3588103]],"activation":"σ","dense_2_b":[[-0.6029877],[-0.059801936],[0.04953782],[0.036911793],[-0.211757],[0.055112183],[0.07609173],[-0.14383955],[-0.064524055],[-0.18153428],[-0.24345446],[-0.07112296],[-0.13606189]]},{"dense_3_W":[[0.014554647,0.094213516,-0.67582,-0.6185381,0.2408976,-0.10117373,-0.69420695,0.073527485,-0.32116425,0.22428901,-0.08845355,-0.14691015,0.21477464],[-0.8124889,-0.4184272,0.58543867,0.62858254,-0.21226135,0.3507662,0.030289248,-0.5906286,0.029745838,0.5918081,0.020885047,0.24012372,-0.18108715],[-0.5155024,-0.053247117,0.26342782,-0.14311959,-0.32982498,0.58627313,0.5567257,-0.2194575,0.4445848,-0.44104552,0.24620505,0.69306016,-0.55217963]],"activation":"identity","dense_3_b":[[0.059930358],[-0.027894666],[0.031020114]]},{"dense_4_W":[[1.1718056,-0.8948126,-0.15244067]],"dense_4_b":[[0.05171624]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN.json b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN.json new file mode 100755 index 0000000000..a4416943e7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA KODIAQ 1ST GEN.json @@ -0,0 +1 @@ +{"input_std":[[8.8827505],[0.8142013],[0.43200606],[0.0335122],[0.8031897],[0.80755675],[0.8117341],[0.7966046],[0.78498024],[0.76929677],[0.7570983],[0.033453178],[0.033477545],[0.033494856],[0.033401415],[0.033346288],[0.033206854],[0.033045664]],"model_test_loss":0.014859683811664581,"input_size":18,"current_date_and_time":"2023-08-10_08-29-12","input_mean":[[21.130602],[-0.03657342],[-0.007161284],[-0.014905003],[-0.031632286],[-0.032585967],[-0.03383271],[-0.03620179],[-0.033439096],[-0.028820572],[-0.025867859],[-0.014983235],[-0.014939225],[-0.014891624],[-0.014817177],[-0.014846561],[-0.014888054],[-0.015024225]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.058770206],[-0.4304619],[-0.95764273],[0.9789649],[0.3071246],[-1.0843322],[0.29053277]],"dense_1_W":[[1.1150838,0.26620921,0.25107178,0.17738831,-0.023969606,-0.25568375,0.642087,-0.07235758,0.50214267,0.158553,-0.09377773,-0.22190028,-0.2522553,0.41755903,-0.18087326,0.00043216505,0.30621696,-0.21445055],[0.015974922,-0.84892243,-5.3681054,-0.050087623,-0.2124193,-0.42669013,-0.114291534,-0.23167059,0.030389197,0.10423019,0.94438344,-0.23461752,-0.038574662,0.0118201375,0.1480159,0.12792908,-0.10750315,0.12776713],[-0.5820234,-0.46031782,-0.16132316,-0.0877754,0.45185134,-1.3221487,0.9612837,-0.026405975,-0.2516217,-0.06304958,-0.007870968,-0.45073366,0.26110536,0.3053481,0.032379672,0.058629666,-0.16963068,0.04947794],[0.55877084,0.8845751,0.083844095,-0.5641011,-0.32626018,0.87646186,0.018245557,0.0067298566,0.19446261,-0.108108655,-0.006403946,0.045923747,-0.2118138,0.297809,0.30262896,-0.26306453,0.10386135,0.05455493],[1.2901627,-0.3996759,-0.28787684,0.18365255,0.053760547,0.09131756,-0.5133632,0.09711644,-0.6057078,-0.13895018,0.07327148,0.005111278,-0.07828046,-0.12552834,0.103638284,-0.18598253,0.030758386,0.011194429],[-0.4342015,0.51031667,0.1613037,-0.030471211,-0.47826028,0.91528296,-0.59053975,0.06803067,0.2916587,0.011835373,-0.01411119,0.39738727,-0.3548122,0.093028545,-0.5990489,0.45427456,0.20879458,-0.16441117],[0.24265775,-0.87913877,-0.073302165,0.13811685,0.17514472,-0.79730994,0.32166055,-0.056882083,-0.15787257,-0.026820026,0.09571887,-0.09280119,-0.31957984,0.5578229,-0.14536849,0.12825605,0.16227205,-0.22222283]],"activation":"σ"},{"dense_2_W":[[0.4287232,0.05141774,0.08859513,0.16694608,-0.25920102,-0.2550965,0.045888633],[-0.9586875,0.465085,-1.0644909,0.51924497,0.9285218,0.19630893,-0.8210365],[0.9428464,1.0110649,0.0912787,0.45720592,0.062315438,0.06551054,0.21646087],[-0.07554614,-0.20435923,1.3854393,-0.21705866,0.371234,-0.29250124,0.62470865],[-1.2622341,-2.4971948,0.16009766,-0.7064093,-1.3925549,0.670143,-0.65157413],[-0.2641713,0.1407864,-0.7451972,0.05855014,0.46847665,0.5723797,-0.2294421],[-0.2798032,-0.28557223,-0.9484105,0.7195964,0.5352625,1.0608548,-0.7886381],[0.85884315,0.05392705,0.63131255,-0.55358535,-0.62303364,-0.9995628,0.95493674],[-0.25178987,-0.46490377,-0.7359025,0.15180402,0.27750358,1.2637253,-1.2951062],[-0.16450088,-1.0085304,-0.35299447,-0.53890646,-0.97189784,0.22255774,-0.34916818],[0.017366037,-0.47484067,-0.9362656,0.73510003,0.57900065,1.098403,-0.34750253],[1.0237606,1.1220717,0.5213622,0.46244594,0.1062727,-0.8956484,0.4866493],[-0.54411316,-0.14556162,-0.49516523,-0.41195434,-0.012445791,0.29190034,0.08672975]],"activation":"σ","dense_2_b":[[-0.14722908],[0.09051571],[0.0073402002],[0.049312294],[-0.10615275],[-0.09993395],[0.14013591],[-0.09219207],[-0.04097555],[-0.44420165],[0.23860474],[0.12013257],[-0.11851125]]},{"dense_3_W":[[0.012701052,-0.76359975,-0.11508211,0.8544662,-0.78156996,-0.3141182,-0.53640413,0.8538724,-0.2971632,-0.16812785,-0.5316125,0.75913155,-0.26657495],[0.2436656,-0.53503543,-0.0021990442,0.45916784,-0.1381139,0.4441993,-0.05345697,-0.33151543,0.0037798227,-0.5038917,-0.15709756,0.02627418,0.5737324],[0.004380816,-0.7665436,0.4899415,0.62682587,-0.6219003,-0.4759317,-0.62745434,0.6913393,-0.47453716,0.23334874,-0.62208974,0.22364703,-0.43715024]],"activation":"identity","dense_3_b":[[0.13937238],[-0.015101592],[0.007283584]]},{"dense_4_W":[[-0.5961717,-0.32134253,-0.7058984]],"dense_4_b":[[0.008483538]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521T00403A1'.json b/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521T00403A1'.json new file mode 100755 index 0000000000..011cf806ea --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521T00403A1'.json @@ -0,0 +1 @@ +{"input_std":[[10.092253],[0.8257708],[0.45484608],[0.028356912],[0.8140217],[0.81918985],[0.82255614],[0.8102244],[0.7955667],[0.77078706],[0.7444314],[0.028424477],[0.028405886],[0.028365526],[0.02817091],[0.028066315],[0.02797186],[0.027903816]],"model_test_loss":0.008641937747597694,"input_size":18,"current_date_and_time":"2023-08-10_11-28-48","input_mean":[[22.111403],[-0.020468052],[0.00260176],[0.017814223],[-0.019568035],[-0.019937012],[-0.02050278],[-0.017664416],[-0.015589151],[-0.013915732],[-0.0077555873],[0.017904663],[0.01790113],[0.017888824],[0.018040547],[0.01814623],[0.0184057],[0.01856536]],"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.8901903],[-0.7438429],[-0.6122344],[-0.2412558],[0.8543316],[-0.3185247],[1.8399776]],"dense_1_W":[[1.1625189,0.40039057,-0.0025008812,-0.41890216,0.16774665,1.3301513,-1.05835,-0.43560216,-0.29536605,-0.29428786,0.5059595,0.15214878,0.3311833,-0.1092579,-0.12995712,-0.2121695,-0.25328377,0.34366265],[-0.2108492,1.8213944,-0.0037650513,-0.4443187,-0.9336769,0.5478224,-0.17455208,-0.13268296,0.30928424,0.40694132,-0.46156526,0.110320315,0.2874757,0.1347806,0.08251065,-0.11447139,-0.15634517,0.11815532],[-0.39651474,0.2910717,-1.0581565,-0.39096954,-0.84142905,-0.6921981,1.3464824,-0.6867708,-0.22886333,0.3074725,-0.056309637,0.3235317,0.21882245,0.5208447,-0.23176116,-0.3196763,-0.3908853,0.4924444],[0.023868388,0.93133456,6.693503,0.1693899,-0.6633739,-0.0019848838,-0.81877935,0.98811,0.14710788,0.8430833,-0.9749285,-0.027155153,0.3262936,-0.36924264,-0.38995093,-0.27307773,0.2114907,0.10148348],[0.41686654,1.3670295,0.0021478476,0.057002787,-0.14275764,-0.056658525,0.024400754,-0.086303845,0.66810167,-0.03742678,-0.23496434,0.30531916,0.17594281,-0.22570042,-0.13516694,-0.38421035,0.20677494,0.019969082],[1.0289154,-0.64804214,-0.0014387759,0.42662656,0.14895122,-0.58820724,0.22127119,0.34592313,0.31323263,0.24369654,-0.36650044,0.03182343,0.10101775,-0.264594,0.10111715,-0.0765178,-0.1477554,0.11140398],[0.5695519,1.808156,-1.253366,0.49105036,-1.9823967,-1.4973999,2.9290652,-1.7067322,-0.6763123,0.7516668,-0.19734581,0.3499678,-0.111037284,-0.2012088,-0.07701846,-0.0106067145,-0.5977169,0.38696328]],"activation":"σ"},{"dense_2_W":[[0.012349895,-0.081942245,0.24179463,0.25615865,-0.3466578,0.20768717,0.20456062],[-0.34042543,-0.95279694,0.40695366,-0.15362829,-0.15595287,0.58774436,0.04863392],[1.3811588,1.5968466,-1.302473,0.5022756,1.007051,0.15855049,-0.41123948],[0.5894904,0.29552183,-0.088070914,-0.05923328,0.14361995,-0.48715538,-0.15394852],[0.6696779,0.8154732,0.08090532,-0.067599624,0.30964845,-0.4651497,-0.98328984],[1.048996,1.7286566,-0.8740424,0.68472356,0.6781938,-1.3097667,-0.841068],[-0.5152714,-0.8245123,0.51846474,-0.19924398,-0.9657816,-0.46467522,-0.2969826],[0.5162466,-1.3718777,-0.81976885,0.5777913,-1.1951425,0.52725565,-1.5065942],[-0.6157756,-0.64146185,0.28268078,0.11798595,-0.19853584,0.59471726,0.19424395],[-0.51709485,-0.27288422,0.44598293,-0.50114965,-0.4821885,0.1842942,-0.13447413],[0.30716494,0.5455412,0.2820038,0.42298153,-0.16316639,-0.67882645,-0.80919987],[0.20057538,-0.6075936,0.021517077,0.0058594905,-0.4455176,0.8283304,-0.04153079],[-0.5672435,-0.55653644,0.9335801,-1.064612,-0.98080814,-1.6662495,-0.7125999]],"activation":"σ","dense_2_b":[[-0.04758697],[0.103950314],[-0.21034029],[-0.1759661],[-0.14534564],[-0.4014301],[-0.07821672],[-0.34081164],[-0.09482991],[-0.00027300368],[-0.3289372],[0.22015864],[-0.12635086]]},{"dense_3_W":[[0.08841069,-0.7012008,-0.27067128,-0.22566004,0.42384112,0.537129,0.3303587,-0.202971,-0.10006057,0.25611818,0.3373171,-0.31684256,0.22898418],[-0.20768598,0.04598255,0.601375,0.29420632,0.33671921,0.5732239,-0.68677086,-0.5184719,-0.42104113,-0.5277463,0.5918677,-0.5941145,-0.60128295],[0.22220895,-0.21446738,-0.119648,-0.22185299,0.34326845,0.40759936,-0.04515529,-0.16942169,-0.40177232,0.38087803,0.14435387,-0.41597226,-0.17067248]],"activation":"identity","dense_3_b":[[-0.03592224],[-0.03948418],[0.031077854]]},{"dense_4_W":[[0.37178338,0.77815956,0.08979673]],"dense_4_b":[[-0.04114462]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN b'xf1x875Q0909144R xf1x891061xf1x82x0516A00604A1'.json b/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN b'xf1x875Q0909144R xf1x891061xf1x82x0516A00604A1'.json new file mode 100755 index 0000000000..3ce7297d91 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN b'xf1x875Q0909144R xf1x891061xf1x82x0516A00604A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.290525],[0.82917035],[0.45113942],[0.041450657],[0.808434],[0.81629485],[0.82408255],[0.80830437],[0.795252],[0.78207934],[0.75818783],[0.041417964],[0.04143028],[0.041436702],[0.04143413],[0.041470982],[0.041412164],[0.041415334]],"model_test_loss":0.009140637703239918,"input_size":18,"current_date_and_time":"2023-08-10_11-55-29","input_mean":[[21.323723],[0.03325226],[-0.0033735863],[-0.0014594422],[0.031559683],[0.031856444],[0.03170563],[0.030355902],[0.029319406],[0.029543923],[0.028728634],[-0.0014694724],[-0.0014749364],[-0.0014824574],[-0.0015196581],[-0.0014603077],[-0.0013572131],[-0.001339693]],"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.56922615],[0.041300163],[-1.254721],[-0.03413835],[-1.6554084],[-0.17410408],[-0.61522776]],"dense_1_W":[[1.0540022,0.32624736,-0.00025852903,-0.04124151,0.22274004,1.4750109,-1.0787313,-0.99540067,-0.21925406,0.2080301,0.2912927,-0.14616714,-0.25007066,0.20059223,-0.13467374,-0.0125623,-0.09478596,0.01950804],[-0.009923938,-0.8645872,-7.849316,0.710686,0.36944547,0.15362212,0.93729883,0.06761643,-0.86989343,-0.44896173,0.77435964,-0.17029198,-0.030723508,-0.21656048,-0.28410506,-0.06316728,0.2806839,-0.2605462],[-0.22319421,1.3061746,-0.0011745724,0.087363705,-0.25787622,0.4865888,-0.5896333,0.6109107,-0.22302917,-0.10719543,0.017179906,0.39940724,-0.05673451,0.004958241,-0.6851484,0.37105274,-0.19090329,0.16849352],[-0.00035891216,-0.08626613,0.7303526,-0.68880993,0.22034171,0.9209459,-0.9556948,0.24309121,0.3545939,-0.0061660036,-0.62081426,0.31249496,0.24340105,-0.7395673,0.9197471,0.015660668,0.32094327,-0.3404047],[-0.28631234,-1.2720017,0.0011188913,-0.2188701,0.4519371,-0.4818437,0.28755167,-0.6112673,0.016787104,0.31543645,-0.056267515,-0.013484296,-0.31466198,-0.011283184,0.7387095,-0.08435522,-0.17678128,-0.018290224],[0.0018439082,-2.029053,0.008057842,0.5382048,0.2763366,-0.38902655,0.37340102,-0.40996662,-0.72045624,-0.2956851,0.42397067,0.25387588,-0.2772578,0.2145016,0.18141706,0.32736105,-0.10156828,0.018716993],[1.0636653,0.48715422,-0.0015376196,0.06604384,0.097244695,-1.8101829,0.46069503,0.8842625,0.013887742,-0.037064083,-0.32184562,-0.029657703,-0.070020884,0.14429364,-0.09371257,0.57893306,0.1488897,-0.2923841]],"activation":"σ"},{"dense_2_W":[[0.7879515,-0.46467248,1.0794638,0.7671335,-0.037539307,-0.652591,-0.44380203],[0.33411276,-0.23360157,0.31899008,0.79018146,-0.8197005,-0.58276,-0.74289805],[0.024688005,-0.13412961,-0.04840187,-0.8028189,0.66260815,0.03016398,0.039253287],[-0.018770358,-0.40480068,-0.46193084,-0.3494696,0.14812449,-0.6306497,-0.5127451],[-0.16712199,0.83740616,0.36462277,-0.13354221,-0.23577684,0.30791536,-0.43564942],[0.6434626,-0.8392937,1.6532009,0.7021095,-1.2320117,-1.1602876,-0.48219097],[0.6646111,0.21732892,0.49050468,-0.043008015,0.15137905,-0.48478547,-0.7212236],[0.11034068,-0.25311738,0.92781943,0.45044476,-0.9269697,-0.19231662,-0.4140086],[-0.7476244,-1.0192593,-0.04007068,0.5831176,-0.26690418,0.002005247,-1.3112344],[-0.5888374,0.08341635,-0.115199275,-0.922099,0.46274543,-0.19802791,-0.35727945],[-0.46942028,-0.17014697,-0.69315624,-0.0143117765,0.60911614,-0.15416178,0.62788534],[-0.84331405,0.302827,-0.99390453,-0.7173678,0.94187963,0.43155667,0.8959295],[-0.7744463,0.28774765,-1.1058409,-0.44697827,1.1843737,0.58229053,0.52381843]],"activation":"σ","dense_2_b":[[-0.0032762832],[0.09442419],[-0.22760114],[-0.14811619],[-0.021788245],[0.3878685],[-0.08048255],[-0.012592701],[-0.31711572],[-0.11638991],[0.0040142215],[0.04542833],[-0.013753473]]},{"dense_3_W":[[0.28196597,0.22568545,-0.030387998,-0.18586706,-0.16660844,0.5718057,0.15152381,0.44033635,0.2491916,-0.37710536,-0.65969247,-0.5834342,-0.57187986],[-0.628642,-0.025283614,-0.596149,0.47220096,-0.15986364,0.097276665,0.09287301,-0.3092298,-0.31016326,0.29485568,0.55567294,0.20108289,0.51474637],[-0.26703876,-0.70533663,0.45624056,-0.48600736,-0.64598805,-0.038812235,-0.69938004,0.40345365,0.2961252,0.4420242,0.5804485,0.38022405,-0.23318103]],"activation":"identity","dense_3_b":[[0.049912658],[-0.018233176],[-0.024009932]]},{"dense_4_W":[[0.8335982,-0.14927465,-0.36007002]],"dense_4_b":[[0.041336924]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN.json b/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN.json new file mode 100755 index 0000000000..4f65316dce --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA OCTAVIA 3RD GEN.json @@ -0,0 +1 @@ +{"input_std":[[9.094625],[0.9343503],[0.47275993],[0.039587528],[0.91534966],[0.92308986],[0.92961305],[0.9121938],[0.894315],[0.8712891],[0.84302557],[0.039629184],[0.03963656],[0.039634563],[0.039580777],[0.03957161],[0.039473023],[0.039480753]],"model_test_loss":0.010150332003831863,"input_size":18,"current_date_and_time":"2023-08-10_11-03-32","input_mean":[[21.930943],[-0.009137672],[0.004150357],[0.006063881],[-0.012747505],[-0.012902961],[-0.012921325],[-0.0107959015],[-0.009959326],[-0.007661503],[-0.0022189163],[0.005970253],[0.0059734355],[0.005978737],[0.0060841083],[0.0061559486],[0.006342566],[0.006470583]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0016042],[0.30121937],[0.5243282],[-0.37925154],[0.09780045],[-1.280653],[0.939577]],"dense_1_W":[[1.9456844,-0.23871988,-0.00096057716,-0.120664135,0.6110457,0.9801692,-0.49786648,-0.3335355,-0.16192155,0.2149353,0.18063189,-0.060477342,0.32169268,-0.21911122,-0.31224453,-0.06690952,-0.348577,0.2574717],[0.8044473,0.40910536,-0.00077739207,-0.1332547,-0.44118187,0.09815779,-1.422512,-0.1586437,0.00079494115,-0.27336416,0.036574032,0.10625827,0.2505548,-0.37372994,0.04841167,0.24479657,-0.18796268,0.14709403],[-1.9839507,-0.07971294,0.0019432222,-0.1465764,0.47511905,1.4785819,-0.6126462,-0.8653647,-0.006930718,-0.05133041,0.4208154,0.3623695,-0.07688759,-0.46326146,0.049198236,-0.29932696,-0.10871309,0.13249245],[-0.01090139,1.4570909,2.8342102,-0.48148742,0.35504207,0.8265004,0.22427893,-0.44684047,0.87371486,0.41123086,0.05926164,-0.3498932,-0.20314151,-0.4126248,0.6597188,0.18670116,-0.13712086,0.04479702],[-0.017381541,-0.7597381,-3.9741704,0.966278,-0.8725842,-1.0976232,1.3351153,0.36389372,0.6396286,-0.28108513,0.5655249,-0.3259955,0.2685084,0.3538014,-0.99265057,0.0020220215,0.08644423,-0.016739462],[-0.4040077,1.5493203,-0.0015337409,-0.057152465,-0.4507684,1.1744777,-0.84242934,0.26143765,0.5450927,-0.16338348,-0.12852266,-0.04006952,0.61630785,-0.35684994,-0.26787806,-0.173013,0.1754258,-0.055330947],[0.14463891,1.3947294,0.0005817746,-0.11709302,-0.47823873,0.9985025,-0.5435925,0.28843075,0.4257345,-0.07990765,-0.15169789,0.049027964,0.32417342,-0.14295861,-0.21804018,-0.1728184,0.25523916,-0.118601166]],"activation":"σ"},{"dense_2_W":[[-0.13598546,0.48721725,-0.8770504,-0.10435272,1.2942611,-0.6188507,-0.77000535],[0.2963742,-0.06368987,-0.6158674,0.5706844,-0.62964815,-0.6725343,-0.70922905],[-0.65155697,-0.40622166,0.22409256,-0.5447109,0.30369374,-0.6313153,-0.47783092],[-0.25578108,-0.23481992,0.6473863,-0.4388097,-0.16786619,-0.24785686,0.13121009],[-0.7862219,-0.51441395,0.14683217,0.16958761,0.822131,-0.8929698,-0.9890509],[-0.11013757,0.13794002,-0.2200882,-0.5511851,-0.7512739,-0.34854394,-0.20708162],[-0.26325488,-0.068378806,0.30052987,0.44717714,-0.19997324,0.36592284,0.37900636],[-0.56599057,-0.20042972,-0.51274085,0.27466905,0.329293,-0.9691359,-0.2049081],[-0.084157735,-0.6273445,0.22159277,-0.27066445,-0.27510265,-0.6879669,-0.9523734],[0.40842152,0.49088025,0.24065876,0.17004599,-0.26951402,0.06465446,0.33384213],[0.5391135,-0.5008811,0.4018758,0.16503108,-0.49227586,0.34286293,-0.2673176],[0.031132208,0.06428439,-0.086133376,0.35238424,-0.34203455,0.54796845,0.7357129],[0.060671475,0.49638665,0.6812915,-0.52441,0.41805837,0.5390166,-0.07453658]],"activation":"σ","dense_2_b":[[1.0358273],[-0.024130732],[0.059400935],[-0.027526159],[0.09260186],[-0.20580374],[-0.062025692],[0.39389342],[0.077137515],[-0.09825774],[-0.051716425],[-0.084061615],[-0.025274398]]},{"dense_3_W":[[-0.14006962,0.5902041,0.18080363,0.48413566,0.33100846,-0.11978409,-0.63116825,-0.13776208,0.29580384,-0.17148037,0.22820434,-0.15557605,0.31175599],[0.37938893,-0.13863787,0.45991153,-0.014412937,0.30609646,-0.023109397,-0.64584565,0.093050435,0.42860112,-0.40409505,-0.398128,-0.640976,-0.17863272],[-0.34660983,-0.50709665,-0.55247855,0.5898295,-0.4875454,-0.35633042,-0.19656834,-0.66706467,-0.4074692,-0.3361508,0.117474474,-0.3539698,0.6108807]],"activation":"identity","dense_3_b":[[-0.022861203],[-0.014076285],[0.034564495]]},{"dense_4_W":[[-0.60573244,-0.98281205,0.80961186]],"dense_4_b":[[0.019623742]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0909143K xf1x892033xf1x820514UZ070203'.json b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0909143K xf1x892033xf1x820514UZ070203'.json new file mode 100755 index 0000000000..da7a4077ac --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0909143K xf1x892033xf1x820514UZ070203'.json @@ -0,0 +1 @@ +{"input_std":[[11.043713],[0.70319986],[0.5343478],[0.026934588],[0.6932889],[0.6982947],[0.70214796],[0.6804861],[0.6649965],[0.6459059],[0.6288712],[0.02683069],[0.026860924],[0.026891591],[0.026939137],[0.026965177],[0.027052335],[0.027131638]],"model_test_loss":0.007857225835323334,"input_size":18,"current_date_and_time":"2023-08-10_12-47-08","input_mean":[[22.51676],[0.0007204448],[0.013955519],[-0.007230524],[-0.0025695318],[-0.0022219676],[-0.0015167582],[0.006477074],[0.012144769],[0.0140706785],[0.014874495],[-0.0073296432],[-0.007318436],[-0.007308196],[-0.0074638575],[-0.007604219],[-0.007796417],[-0.007880043]],"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.15176187],[1.7611258],[0.08499729],[1.2638843],[-1.0145266],[1.1479009],[0.019360576]],"dense_1_W":[[0.002253989,-3.1604483,2.767584,-0.8068704,2.3291543,2.6853511,-1.0791886,0.007758601,-0.49927247,0.57279307,-0.27753213,0.6716626,-0.06696021,-0.76052266,0.6966655,0.7008176,-0.40914094,-0.1446268],[0.7218885,1.6974216,0.0065495796,0.4848664,-0.38044524,0.9584917,-0.35017136,0.2935823,0.013307751,0.07913103,-0.08967284,0.17916568,-0.022755025,-0.45461747,-0.017031884,-0.22419493,-0.029785138,0.11329553],[-0.021195402,0.41831255,-0.006486072,-0.20005222,-0.044353534,1.5854481,-0.4566311,-0.5508707,0.0053089573,-0.73440605,0.7127015,0.0178563,0.105017535,-0.10557691,-0.08303766,-0.3148053,0.1120448,0.08851348],[1.0059944,-1.3769217,0.0028758708,-0.17301795,0.38417014,-0.8320218,-0.0021920572,0.05236675,-0.11604148,-0.010877651,0.017621847,-0.31199968,0.26072103,0.14645621,-0.060435038,0.23222387,-0.07030094,-0.048769366],[-0.59738463,-1.4774386,4.2301564,-0.6372516,0.28283474,0.29814866,-1.5950772,-0.37465736,-0.046396185,-0.23227905,0.2788923,0.43851766,-0.13952476,-0.1730685,0.5122576,0.09155205,0.22722334,-0.23425691],[1.9368905,-0.55235744,-0.030420046,0.088646464,-0.8423889,0.40580097,-1.086312,-0.1729247,0.11532571,-0.07618555,-0.12122231,0.14744973,0.014324671,-0.49680474,0.14322798,0.3056609,-0.1648101,-0.03914734],[-0.017226573,0.9975025,0.028348321,0.26694727,-1.7435403,0.6003638,-0.015127457,0.33234358,0.77899,0.36002707,-0.7812798,-0.110702105,0.4372163,0.062443327,-1.0144533,0.07515875,0.14223565,0.11260919]],"activation":"σ"},{"dense_2_W":[[-0.3708766,-0.09346849,-0.4860665,-0.28673357,-0.20471741,-0.3887301,-0.53816146],[-0.2870411,0.077891976,-0.7692872,0.46041366,-0.08263284,0.18123056,-0.50797004],[0.8342386,-0.045646798,0.4450974,-0.23703974,-0.12750176,0.7012232,-0.08630407],[0.08431561,-0.07679201,-0.581064,0.011516861,-0.7343563,-0.6116229,-0.34984374],[0.25569338,-0.5237751,-0.48068842,-0.102060966,0.28852814,0.32561827,-0.7739834],[0.17638424,-0.30714586,-0.8407769,0.7255838,0.32686406,0.014714416,-0.67529327],[0.15759718,-0.1990726,0.6290832,-0.42295182,-0.64416325,0.053911954,0.57387424],[-1.3421621,-1.2502698,0.12817562,-0.2831332,-0.016792206,-0.8235658,0.19831528],[-0.8367818,-1.409201,0.18254657,0.4927183,-0.25860602,-1.0264908,-0.50290155],[0.47554544,0.058592763,-0.0097552,-1.9191943,1.0258328,-0.8242871,0.45348266],[-1.2065568,-1.4047163,0.113010526,0.4773201,-0.4767762,-1.2966703,0.2312964],[-0.18884628,-0.058959916,-0.041673712,-0.5327593,0.11240756,0.10169141,-0.23927355],[0.22284397,-0.29184937,0.9790536,-1.3780024,-0.2994004,0.49964294,0.48355368]],"activation":"σ","dense_2_b":[[-0.22963583],[0.032741938],[-0.04570257],[-0.08706406],[-0.14223282],[0.05371619],[-0.34291068],[-0.20564795],[-0.061394084],[-0.5258954],[-0.060946673],[-0.1682708],[-0.30500868]]},{"dense_3_W":[[-0.109130874,0.1274272,0.13656163,-0.4027122,-0.4333919,-0.6936401,0.502236,-0.3675514,-0.7237411,0.4035158,-0.47524786,0.09295235,0.14962798],[-0.16585311,0.47740844,-0.37112427,0.06724968,-0.37363434,0.06406272,0.47516382,0.118478574,-0.022609822,0.2940244,-0.0018366133,-0.40694827,-0.63223433],[0.009586715,0.5517231,-0.34838903,0.078904286,-0.039595366,0.116432205,0.003195687,-0.17880835,0.5144741,-0.46928853,0.36233348,0.4112465,-0.08295281]],"activation":"identity","dense_3_b":[[0.073130004],[-0.049100634],[-0.073537566]]},{"dense_4_W":[[1.1643018,-0.47747687,-0.8026266]],"dense_4_b":[[0.068460904]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0909143M xf1x892041xf1x820522UZ070303'.json b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0909143M xf1x892041xf1x820522UZ070303'.json new file mode 100755 index 0000000000..97f7731e2e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0909143M xf1x892041xf1x820522UZ070303'.json @@ -0,0 +1 @@ +{"input_std":[[10.427667],[0.83860636],[0.42204696],[0.03361851],[0.81973565],[0.825077],[0.8310441],[0.83052015],[0.8284627],[0.8263309],[0.8187787],[0.033480283],[0.03350828],[0.03353586],[0.033594076],[0.0336516],[0.033648238],[0.033631567]],"model_test_loss":0.008597739972174168,"input_size":18,"current_date_and_time":"2023-08-10_13-12-36","input_mean":[[25.706522],[0.050851874],[-0.010751898],[0.01802959],[0.054632157],[0.05350465],[0.052438986],[0.04850811],[0.048906337],[0.046515435],[0.045032594],[0.018018972],[0.018040042],[0.018053347],[0.018092638],[0.018076882],[0.018033529],[0.018010886]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.2964697],[0.049180523],[-3.1576617],[0.118301444],[-0.61603487],[0.25273886],[-0.07330951]],"dense_1_W":[[0.89546925,0.7464279,0.35021314,0.22637925,-0.2754313,0.27137527,-0.031470492,0.33797157,0.21643418,0.26727158,-0.23981565,0.43944034,-0.3634637,-0.32961583,0.30687925,-0.18917838,-0.14749566,0.04560524],[0.0062736324,-0.26759228,-3.0462065,0.030409567,-0.7790592,-0.9642961,0.74581957,0.029767705,-0.2603852,0.43679196,0.83964103,-0.31235635,0.11810286,-0.33990052,0.35530522,0.512531,-0.19636977,-0.21697098],[-1.2924967,1.5836774,0.49238458,0.17067905,-0.25315788,0.8040949,-1.3140789,0.90885764,0.10285396,0.12174135,-0.1821378,-0.03410296,-0.02985042,-0.05142844,-0.092534445,0.31806526,-0.14324093,-0.14495374],[-0.0056716613,-0.20092379,0.015451282,-0.03791514,0.30047786,-0.6232725,0.5658962,0.2011616,-0.2557471,-0.06808377,-0.20146759,-0.44247743,-0.28945133,0.34938657,0.24206486,-0.2013541,0.4648372,0.19353375],[-0.05128189,0.67123437,0.06952555,-0.0042294925,-0.14324088,0.27791318,-0.5421431,0.23997568,0.13052511,0.08122149,-0.13987608,-0.022714188,0.032299228,-0.37737137,0.39930877,0.19679675,-0.15827186,-0.10318431],[-0.019568905,-0.0607303,0.0130618,0.12254651,0.45252982,0.62943685,-0.3645628,-0.24168354,-0.5303252,-0.24557371,-0.016784955,-0.15041395,-0.44035485,0.090951286,-0.45376906,0.050149996,0.75379664,0.5303551],[0.0017316106,0.90743756,-0.00965252,-0.23193015,-0.2623223,0.7361792,-0.38086128,0.18679944,-0.03619202,-0.030559268,0.008687389,-0.06500352,-0.14568505,0.24354985,0.37842107,-0.5658337,0.10926247,0.07731545]],"activation":"σ"},{"dense_2_W":[[-0.39177263,-0.18800414,-0.20788462,0.11247796,-0.22365552,-0.31875002,-0.5684635],[-0.40389916,-0.6881541,0.6079956,-1.2894017,0.4109726,0.6156602,0.94629717],[-0.7998929,-0.7778953,-0.44944042,-0.64266866,-0.12719534,-0.47801676,-0.39805946],[-0.5706913,0.22585051,0.16944969,-0.791522,0.31455386,-0.68588865,0.5746767],[-0.30519763,0.1677756,-0.25193778,0.90596414,-0.032425787,-0.3528361,-0.6918698],[0.21673183,0.024453318,0.1322771,-0.5855296,0.33343047,0.44287738,0.5721365],[-0.5699235,0.2542559,-0.35358787,0.50997967,-0.2712492,-0.5551658,-0.40215912],[0.2629367,-0.16355118,0.033490267,-0.13413614,0.5478591,-0.032118343,0.912505],[-0.36946553,-0.42410433,-0.52718824,-0.29544082,-0.79523194,-0.59584975,0.060524564],[-0.87224454,0.47336072,0.19169393,0.46603736,-0.86350787,-0.010868162,-0.6611907],[-0.67190355,0.14076924,-0.05090652,0.82290465,-0.009441278,-0.669959,-0.41791293],[0.21663819,-0.7003845,-0.1493456,0.60176605,-0.48739564,-0.47414222,-0.7249381],[-0.7122426,0.54805565,0.38896307,0.3285942,-0.112064436,-0.25502503,-1.1255239]],"activation":"σ","dense_2_b":[[0.03228759],[-0.33656517],[-0.34582642],[-0.14028646],[0.08078773],[-0.21520647],[0.10405124],[-0.26432717],[-0.13297138],[-0.03255631],[0.012594238],[0.13707925],[-0.05311798]]},{"dense_3_W":[[0.3323226,-1.0349873,0.16582553,-0.26558918,0.5585341,-0.50477654,0.5019021,-0.44945425,0.1489514,0.6722085,0.6043886,0.6088044,0.074028775],[0.32264686,0.2705527,0.6175214,-0.29842913,-0.061648432,0.5753947,-0.5904476,0.5447954,-0.03628221,-0.34314078,0.0864569,-0.61685383,-0.45528167],[0.63654476,-0.5604362,-0.044634674,0.42495975,0.19226094,-0.08704097,-0.45119545,-0.30201146,-0.48162442,0.5252597,-0.18146215,0.050959926,0.21880749]],"activation":"identity","dense_3_b":[[-0.0937596],[0.03815688],[0.062478464]]},{"dense_4_W":[[-1.019849,0.32047084,-0.07043468]],"dense_4_b":[[0.074612744]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567UZ070600'.json b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567UZ070600'.json new file mode 100755 index 0000000000..4e379cc35c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567UZ070600'.json @@ -0,0 +1 @@ +{"input_std":[[7.5485353],[0.842432],[0.47768155],[0.04491059],[0.8398388],[0.84115833],[0.841805],[0.82316613],[0.80845445],[0.7870207],[0.7709587],[0.044732787],[0.04478789],[0.044834975],[0.044941053],[0.04496564],[0.04483491],[0.04457904]],"model_test_loss":0.006399661768227816,"input_size":18,"current_date_and_time":"2023-08-10_14-01-50","input_mean":[[18.00953],[0.099562876],[0.011085797],[0.0136965355],[0.093436636],[0.09476455],[0.09581153],[0.100991],[0.10254183],[0.103215754],[0.09966734],[0.013582862],[0.013622751],[0.013662026],[0.013673613],[0.013685121],[0.013669784],[0.013470834]],"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.15596858],[0.4892694],[-2.485747],[-0.9076746],[-2.5210748],[0.62608117],[-0.12859546]],"dense_1_W":[[0.06842267,-0.8856152,-6.732937,0.19605958,0.741428,0.17544515,0.8053877,-0.35061014,-0.9764092,0.036799543,0.6009394,-0.6558462,0.35444188,-0.045649398,-0.06968357,0.21508473,0.2215049,-0.29990086],[-0.05740703,2.9165752,-0.005158554,0.15602402,0.39699048,0.5971187,-0.41904238,1.342937,1.2498165,0.20092702,-0.7303743,0.651644,0.032748777,0.0769538,-0.3169141,-0.06470094,-0.28091532,0.12019054],[-1.1610528,-0.90291053,-0.31168118,0.055444643,0.44807604,-0.53198224,0.92507297,-0.8764255,-0.11257939,-0.023954267,0.044729616,-0.0076007335,-0.1563039,0.1664793,0.21945952,-0.2034357,0.105529465,-0.06975108],[0.7200636,0.8466922,-0.007632461,0.033045746,0.05856158,1.3452346,-1.1502894,-0.12675957,-0.031347644,0.048609737,0.10773478,-0.09310796,-0.0042046523,0.009717507,-0.48196545,0.12704822,-0.033978984,-0.037001982],[-1.2062674,0.9051149,0.32335874,-0.1533066,-0.51617926,1.020792,-1.4042579,0.9042442,0.25317815,-0.05583252,-0.03010343,0.20175298,0.094550155,-0.16070417,-0.47876874,0.32050544,0.077573724,-0.015020535],[-0.7045055,0.2921713,0.0013640912,0.19007114,0.12720339,1.0896366,-0.5078957,-0.07863772,-0.027926547,0.21197884,0.007679035,0.08988427,-0.16537076,0.047214698,-0.45457175,-0.35825354,0.05781769,0.10457059],[-0.00158783,-0.2575547,1.3867532,-0.40103778,0.7387132,0.89181244,-0.06297082,0.24265654,0.16146004,-0.4570955,-0.37828583,0.21716939,-0.32538953,0.059181254,-0.2786397,0.0642267,-0.0045156525,0.13521087]],"activation":"σ"},{"dense_2_W":[[-0.054360803,-0.93450505,1.1069156,-0.25341234,-0.6672028,-0.56871617,0.46180332],[0.66834545,0.311226,0.92539716,-0.7637285,-1.0001141,-0.04506302,-0.79037106],[-0.336666,0.43282512,0.5231884,-0.33170068,-0.5402114,-0.67988545,-0.52936053],[-0.32985738,0.09310308,0.2807457,0.7175757,0.3434783,-0.054528777,0.14698726],[-0.9319756,0.55159384,-0.94562346,1.0089458,1.0009207,0.78610414,-0.39165795],[-0.24430718,-0.17523226,-0.21583228,-0.25136957,0.7013932,-0.1965411,0.6438836],[-0.7124287,-1.5932802,0.37554362,-0.114048585,0.643049,-0.22720207,-0.061459664],[0.72168005,-0.4816915,0.06136277,-0.7875475,0.35240883,-0.42538184,-0.2659062],[0.26363212,-0.8677782,0.10591171,0.32766673,-0.31068003,-0.60304576,-0.44430232],[-0.5729361,0.18546028,-0.095558025,-0.46766767,-0.7543451,-0.78625745,0.0124949105],[-1.4273218,0.6574617,-1.3855623,0.2680664,-0.93055564,-1.384056,0.09248577],[-0.146575,0.10351455,0.07099619,0.09571776,-0.004123669,0.1455809,-0.22726196],[-0.46773708,0.4945239,-1.1005019,0.59550714,-0.406852,0.60328615,0.46037948]],"activation":"σ","dense_2_b":[[0.15551081],[0.063135676],[0.21190381],[-0.12186496],[-0.32130012],[-0.10350768],[-0.1497363],[0.13513808],[-0.3129862],[-0.019406611],[0.081084184],[-0.107219465],[-0.31931284]]},{"dense_3_W":[[0.038192756,0.90545493,0.22436228,-0.08363581,-0.95819527,-0.48104054,0.14439842,0.49872485,-0.52165586,0.4655063,0.96369386,0.08209213,-0.043807942],[0.24979138,0.046216443,-0.24985886,0.46128502,-0.14784333,0.29726094,-0.09796824,-0.37513828,-0.13519555,-0.10046912,-0.019793414,0.26303867,-0.32336316],[0.6733837,0.65772706,0.5991573,-0.2601565,-0.8885243,-0.5688783,0.6620791,0.56542003,0.17227326,0.053705327,0.33648482,-0.17200494,-0.6597408]],"activation":"identity","dense_3_b":[[0.020342646],[0.01258384],[-0.08370784]]},{"dense_4_W":[[-0.4212374,0.007912168,-0.6052606]],"dense_4_b":[[0.07501488]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567UZ070700'.json b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567UZ070700'.json new file mode 100755 index 0000000000..b48d15badb --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567UZ070700'.json @@ -0,0 +1 @@ +{"input_std":[[10.325298],[0.7057722],[0.47287977],[0.031460747],[0.6921104],[0.697218],[0.70135456],[0.69763875],[0.685733],[0.66782856],[0.6485855],[0.0315074],[0.031504214],[0.031491026],[0.03148004],[0.03150045],[0.03156164],[0.031616196]],"model_test_loss":0.006121247075498104,"input_size":18,"current_date_and_time":"2023-08-10_14-26-22","input_mean":[[22.306183],[0.0053800372],[-0.00795939],[0.0013631819],[0.009645737],[0.008109978],[0.007211559],[0.00485605],[0.001991116],[0.0019658916],[0.0011436291],[0.0012911396],[0.00132131],[0.0013504513],[0.0012909095],[0.0012066179],[0.0010719349],[0.000821153]],"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.037611403],[-0.039259925],[5.3037424],[-0.014289626],[-0.04116731],[-5.299878],[-0.047248736]],"dense_1_W":[[-0.0064652376,-0.86517066,0.009122232,0.64427334,0.60157204,-1.5649973,0.5922017,0.32393336,0.10592543,-0.10904223,-0.08311717,-0.41152525,-0.17221938,-0.024847839,-0.42303094,0.6325312,-0.20199557,-0.13121592],[-0.01127936,-0.17854609,3.2403448,0.4238691,-1.0125954,0.7522482,-0.7303807,0.5404295,1.1757061,0.29872945,-0.5916982,0.07851869,0.16200984,0.12478189,-0.49618125,-0.35802162,-0.44821835,0.57569295],[2.7688413,1.5677587,0.41038755,-0.33729497,0.1729276,-0.8542694,-2.1819742,1.2398255,1.4715692,0.047309943,-0.2706118,-0.24824658,-0.13942274,0.20966528,0.4355863,0.31434494,-0.293769,-0.07769441],[0.0036463365,-1.5028012,1.0467403,-0.26813957,0.76441354,1.4152889,-0.99150753,1.1589833,0.72802955,-0.70228565,-0.74011207,0.19401184,-0.1607593,-0.33000073,-0.08714993,0.64130986,-0.27448478,0.06201577],[-0.003765804,-0.2075825,-0.022305839,0.9898987,0.50378066,0.95337635,-0.22548404,-0.1336573,-0.58790505,-0.4490368,0.749273,0.13859859,-0.027452512,-0.61067677,-1.153898,-1.1776212,0.24113877,-0.27340102],[-2.7447796,1.9117345,0.4073564,-0.04775491,0.23204777,-0.51974696,-2.9568594,1.3113073,1.4277631,0.020979766,-0.2532327,-0.26606435,0.13057557,-0.30686697,0.4028711,0.3851677,-0.4117104,-0.023646714],[0.0020379785,-1.0273771,-0.0040772515,-0.15474853,0.40938514,-0.8294739,0.61741006,0.41521803,0.19431064,0.012701662,-0.14437585,-0.53484315,0.40445113,0.42614287,0.2149064,-0.33539692,-0.026481858,0.0847282]],"activation":"σ"},{"dense_2_W":[[-1.524189,0.9351632,0.55989957,0.6639257,-0.41399422,1.9353259,-2.080693],[0.4837269,-0.42052314,-0.016988551,0.26961946,-0.5820897,-0.113735415,0.6621344],[0.66784316,-0.18224554,-0.46350604,-0.24139507,-0.33972263,-0.10908334,0.46273032],[-0.25121573,-0.5433506,-0.3747119,-0.48113945,-0.6870209,-0.2597966,-0.6666107],[-1.5878243,0.8484644,1.6857767,0.8684603,-0.49275222,0.8885371,-1.6989545],[-0.37864903,0.1991398,1.0727624,-0.06963282,0.744443,0.0127678355,-1.0510542],[0.6948821,0.4031339,-0.4709602,0.024776852,-0.19349359,-0.61693877,0.6901456],[-0.16844974,0.34244663,0.2792154,-0.22678165,-0.009063555,-0.2205289,0.30833983],[-1.0003111,0.061680865,-0.22125538,-0.14785585,0.33567291,0.23772448,-0.49937972],[-0.25907272,-0.45068902,-0.4165561,0.371873,0.6574395,0.3054128,-0.3081276],[0.4063414,0.31216034,-0.351421,0.24184814,-0.48907033,0.2369533,0.18272556],[0.6680394,0.23359145,0.2988422,-0.13820608,-0.0924177,-0.6595436,0.7519552],[0.7290062,-0.29669526,-0.7187181,-0.4984251,0.33927912,-0.05567023,0.7271803]],"activation":"σ","dense_2_b":[[-0.2505063],[0.036255818],[0.03159872],[-0.22770797],[-0.0873118],[-0.06630587],[-0.048832744],[-0.07904234],[-0.22275046],[-0.08476886],[-0.0669902],[0.0096226],[0.07374443]]},{"dense_3_W":[[0.8759032,-0.59936947,-0.44472367,0.26480153,0.8450838,0.48954475,-0.5052384,0.16207619,0.013260613,0.43904993,-0.105288796,-0.16599573,-0.31243858],[0.14936896,-0.628315,0.2414504,-0.10917872,0.4430291,-0.35649955,0.22603549,-0.48412538,0.2549734,0.48249015,0.0134211285,-0.071542166,-0.37372112],[0.047143627,-0.08542679,0.6750787,0.18638729,-0.011972222,-0.2818068,-0.23235205,0.124561444,-0.23522471,-0.3220255,0.30383208,0.18026324,0.34829038]],"activation":"identity","dense_3_b":[[-0.031695265],[-0.013660732],[0.018769676]]},{"dense_4_W":[[0.80076545,0.24590294,-0.42213082]],"dense_4_b":[[-0.026628232]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN.json b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN.json new file mode 100755 index 0000000000..74f3bb7e63 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SKODA SUPERB 3RD GEN.json @@ -0,0 +1 @@ +{"input_std":[[11.005025],[0.97968346],[0.50101554],[0.038736638],[0.9587485],[0.9655901],[0.971756],[0.95295596],[0.9315219],[0.90679765],[0.8827432],[0.038590446],[0.03862441],[0.03865234],[0.03871767],[0.038792223],[0.03873497],[0.03861525]],"model_test_loss":0.010799731127917767,"input_size":18,"current_date_and_time":"2023-08-10_12-21-52","input_mean":[[22.878464],[0.031642012],[0.0168804],[0.009622783],[0.030209461],[0.030093499],[0.03104034],[0.038059395],[0.040959135],[0.040258918],[0.040640317],[0.009454411],[0.009486841],[0.009516454],[0.009592338],[0.009573765],[0.009518463],[0.009365908]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.1818612],[-0.09344887],[-1.8393922],[1.848314],[1.0065805],[-0.08666866],[0.7747504]],"dense_1_W":[[-0.8857707,1.5844063,-2.7639117,0.8296629,-1.5801734,-1.389664,0.6718809,0.21833602,-0.3579308,0.031948198,0.036747955,0.14046027,-0.10389215,0.24267684,-0.58785427,-0.29687718,-0.071204364,0.17921484],[-0.016061021,-0.8927914,0.0014837141,0.16529202,-0.31931162,-1.5972285,1.0674282,0.50527793,0.00036276158,0.6643216,-0.70242655,0.23176064,-0.23684219,0.020929113,0.18165103,0.2728483,-0.077427186,-0.028263727],[-1.1033577,-1.4215872,0.010086168,-0.17611827,0.2112764,-0.69066954,-0.083308466,0.15166493,-0.22307171,-0.075834244,0.035160135,-0.26813668,-0.31942832,0.5206709,0.05213391,0.1393356,0.24755146,-0.20669232],[0.83160627,-1.0528738,0.010402418,-0.8488269,-0.097700946,-0.8356935,-0.030544959,-0.045691635,-0.12981445,-0.22643599,0.08581046,-0.099290386,-0.0029221023,0.43224323,0.16066676,0.23335454,0.26151142,-0.19559892],[1.6938869,0.33258435,0.011718149,0.5278453,0.4084221,0.054189947,0.6158366,0.5923816,0.31159598,-0.19908112,0.0759474,0.18903963,-0.16102462,-0.31830838,0.122031696,-0.5454575,0.14843899,0.0009889763],[-0.18688406,-1.837496,-0.024467822,-0.18667667,1.5253651,-0.87217486,0.6304656,-0.3631879,-0.93472433,-0.4855514,0.8494961,-0.29013696,0.11480595,-0.046378586,0.04579505,0.6772069,0.030312326,-0.2840396],[0.5354849,-0.16436046,-2.2868845,0.9490928,-1.1401188,-1.6175885,2.1010857,-0.067001574,0.09170741,0.23366773,-0.13356704,-0.38347217,-0.17166469,0.5771494,-0.16453075,-0.5179118,-0.2526112,0.2366501]],"activation":"σ"},{"dense_2_W":[[0.33937505,-0.3745738,-0.9080001,-0.67459136,-0.22434857,-0.68243057,0.15986687],[-0.4707506,0.3539919,0.7182431,0.32069924,0.52431095,0.47054338,0.32751095],[-1.0941919,-0.02285758,-0.6026077,-0.6543617,-1.1643189,-0.40606982,-0.530394],[0.4252591,0.47353566,-0.49499482,0.49766955,0.9336523,0.4235022,0.91593933],[0.5621498,0.24484019,0.066795506,-0.39081028,-0.2126147,-0.17618422,0.08806277],[-0.21437049,-0.086400345,-0.70952827,0.24951175,0.2172522,-0.935455,0.3494222],[-0.027205786,-0.3861311,-0.329584,0.3939693,0.21568625,-0.037430923,-0.44425386],[-0.8316691,-0.6763449,0.074327685,-0.473199,-0.55408454,-0.17554076,0.10902519],[0.24072582,-0.45537603,-0.5833832,0.25576162,0.19144523,-0.66718787,-0.2368218],[0.9988664,-0.3536028,-0.28179932,0.7269398,1.1277015,0.6262987,0.9872559],[-0.081231736,0.76173663,0.36381385,-0.087001294,0.15438923,-0.6396298,0.33097985],[0.37046397,0.6737554,-0.0037287436,0.1967084,0.20252821,0.25889185,-0.26074913],[-0.50508755,0.007956352,-0.56175256,0.4734349,0.11897713,-0.8310094,0.056679618]],"activation":"σ","dense_2_b":[[0.40672347],[-0.15762824],[0.54028726],[-0.06825271],[-0.14409027],[-0.24412309],[0.13284369],[0.13380992],[0.3824313],[-0.10148208],[-0.16163772],[-0.21077214],[0.2533245]]},{"dense_3_W":[[-1.1355319,0.3370882,-1.0809343,0.49130934,0.20389263,-0.79736996,-0.023168638,-0.094694644,-0.6435565,-0.079334155,-0.31444725,-0.088145025,-0.46537364],[-0.7897674,0.58977884,-0.6444405,0.5475269,0.0090896,0.1407256,-0.40847594,-0.47964928,-0.5811728,0.7200515,0.37270215,0.26434785,-0.682192],[0.07739398,0.37235165,-0.6278828,-0.1572289,0.14061572,-0.46377057,-0.18825918,-0.50748676,-0.5449003,-0.11498902,-0.10287988,0.50479686,0.14272374]],"activation":"identity","dense_3_b":[[0.019560132],[-0.021147352],[0.01810392]]},{"dense_4_W":[[-0.44403714,-0.84635425,-0.24351013]],"dense_4_b":[[0.015087563]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x05xc0xd0x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x05xc0xd0x00'.json new file mode 100755 index 0000000000..31b79abf84 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x05xc0xd0x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.7864456],[1.0675452],[0.44117737],[0.042466324],[1.0634382],[1.0641662],[1.0649238],[1.0489594],[1.0356928],[1.0174093],[0.9990636],[0.04239807],[0.042411074],[0.042412493],[0.042160373],[0.041902237],[0.04156318],[0.041192904]],"model_test_loss":0.006247136276215315,"input_size":18,"current_date_and_time":"2023-08-10_15-19-46","input_mean":[[22.789394],[-0.107057944],[-0.015220077],[0.0053075603],[-0.10096015],[-0.1036062],[-0.10646909],[-0.1105645],[-0.11274725],[-0.1129047],[-0.112440266],[0.0053247744],[0.0052974327],[0.0052765487],[0.005187726],[0.0051564705],[0.005072803],[0.005050624]],"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.22735131],[-1.1558822],[-2.4949677],[-0.028262757],[0.016046714],[0.46825287],[2.14808]],"dense_1_W":[[0.0063389866,1.1687455,5.6478443,-0.7739389,-0.37703404,-0.2977524,-0.35879293,-0.2989859,0.27854565,0.5250727,-0.5768838,0.437727,0.79303294,-0.25440294,0.015966117,-0.7346069,0.1822349,0.40839165],[3.5873764,-0.038363542,-0.49252892,0.88343006,-0.8263806,-1.0448018,0.35837594,-0.82923394,-0.2903959,-0.59976083,0.39708364,0.4991477,0.14932378,0.23114131,0.71492994,0.7446338,0.86800545,-0.10675554],[-0.71696925,0.589286,0.005141117,0.2558955,-0.15218897,0.56768674,-1.9735179,0.37540847,0.70758367,0.54208136,0.011372507,0.30521852,-0.07170634,-0.3685703,-0.17633998,-0.12821102,0.49403462,-0.28528726],[-0.0126111545,-0.25394174,-0.0476702,-0.051051825,0.15847693,-0.8556249,0.9062775,-0.35461852,0.08610974,-0.016350707,0.05444419,-0.021587849,-0.024609195,-0.041649777,0.2721636,0.11223671,-0.13007721,0.027287088],[-0.00082902284,-0.2895202,0.02292975,0.40938672,-0.5772713,-1.4159223,0.9096195,0.46552798,0.07192008,0.58374035,-0.7259645,-0.4192547,-0.119582735,-0.040364027,0.023777857,-0.099143706,0.07231984,0.05833065],[-0.034051787,-0.68221754,0.09880095,-0.083567955,-0.74208,-0.90698755,0.04928286,0.16156256,0.019495055,0.042218853,-0.28641602,0.051178593,0.26687574,0.46796858,0.46098933,-0.07269996,0.45891553,0.5021809],[0.66424364,0.45286804,-0.0005165507,0.2288496,-0.004017847,0.39797547,-1.7530091,0.4336208,0.41258094,0.72541785,-0.0085950075,-0.29211155,0.17102799,0.101752244,-0.20573312,0.25594547,-0.22377016,-0.008692318]],"activation":"σ"},{"dense_2_W":[[0.20325899,0.082790025,-0.64574623,0.5835337,0.2445456,0.39990926,-0.37031835],[-0.6524255,-0.44563344,0.23222709,0.45553765,0.0009599149,0.07084656,-0.40249822],[-0.42582795,-0.35526115,-0.41792208,0.71313417,0.48622853,0.42440364,0.124865286],[-0.42827517,-0.33303145,0.6030186,-0.6233551,-0.7089609,-0.19002749,0.98240393],[0.37648484,0.5340621,-0.075831234,-0.35439888,-0.05369259,-0.0852395,-0.5522382],[-0.18600848,-0.17840625,-0.13572167,-0.39332452,0.069297686,0.55391586,-0.56896216],[0.5372773,-0.42328098,0.46704698,-0.3903592,-0.31730473,-0.1323594,-0.15068243],[-0.025426986,0.27607596,-0.8116318,0.44459775,-0.039600827,0.2860532,0.21579745],[-0.34013402,0.61537576,-0.37449715,0.2465375,0.1431466,-0.20966384,-0.50743437],[-0.42331675,0.2752822,1.4675745,-0.7314219,-0.98570365,-0.13913184,0.50083154],[0.42013124,0.5378009,-0.11075335,-1.0205,-0.12323601,-0.10791454,1.2503781],[-0.46719682,-0.30131668,-0.7835209,-0.36901754,-0.74570584,-0.18500452,0.309284],[0.4626236,-0.17921384,0.23175037,-0.45361674,0.032451127,-0.29581988,0.68514556]],"activation":"σ","dense_2_b":[[-0.10602414],[-0.017100008],[0.040201504],[0.31925488],[-0.023480363],[-0.014836832],[-0.083288915],[-0.06903872],[0.040521644],[0.03449383],[0.06455035],[-0.22185017],[-0.065645464]]},{"dense_3_W":[[0.24577592,0.60105056,0.39954543,-0.2241492,-0.024554443,-0.15969503,-0.3220896,0.3241807,0.17859495,-0.5020777,-0.20332621,-0.26195568,-0.43355486],[0.14188491,-0.31661624,-0.65018225,0.34786117,-0.24704528,-0.57218057,0.3886062,-0.13966885,-0.6255838,-0.3665181,-0.27110517,-0.43634248,0.3648473],[0.2685311,-0.24588606,0.4600874,-0.6152837,0.44763306,0.503137,-0.21638398,-0.21211603,-0.17489356,0.066063605,-0.35907042,0.3705208,-0.39206743]],"activation":"identity","dense_3_b":[[0.03704233],[-0.009847877],[0.03596555]]},{"dense_4_W":[[-1.1007925,0.13783514,-0.4093285]],"dense_4_b":[[-0.037597723]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x85xc0xd0x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x85xc0xd0x00'.json new file mode 100755 index 0000000000..868f130879 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x85xc0xd0x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.751917],[1.2651925],[0.6286032],[0.041758075],[1.251075],[1.2542156],[1.25788],[1.2476728],[1.2321731],[1.209085],[1.171815],[0.0416455],[0.04166907],[0.041675318],[0.041540235],[0.041331045],[0.0410227],[0.04076636]],"model_test_loss":0.010389542207121849,"input_size":18,"current_date_and_time":"2023-08-10_15-45-17","input_mean":[[21.811985],[-0.08200492],[-0.021123547],[-0.015392087],[-0.077132],[-0.07836754],[-0.07990758],[-0.08903278],[-0.09390533],[-0.0994351],[-0.09906808],[-0.015419691],[-0.015373937],[-0.015333388],[-0.015234815],[-0.01517176],[-0.015184814],[-0.015314578]],"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.112263665],[-0.2413684],[2.3331506],[-2.6163883],[-0.065890506],[-0.11267999],[0.2540324]],"dense_1_W":[[0.00082437333,-0.6100184,0.0085841585,0.19443965,-0.3853334,-1.0094393,0.54652345,0.4635451,0.41569796,-0.024827078,-0.35933343,0.013195037,-0.34806025,0.38918108,-0.2045975,-0.028205873,0.21251714,-0.14155327],[0.00052090845,-0.067986116,-0.0049952795,-0.17397985,0.19120865,-1.151794,1.4686754,-0.26064983,-0.37115577,-0.14031996,0.22627379,-0.61062306,-0.6003732,-0.08005905,0.6625579,0.27400896,0.2810858,0.22422503],[0.9736936,-0.2066802,-0.03221171,0.38892078,0.12595229,-0.78887135,1.7474787,-0.357525,-0.87113667,0.059320755,0.12783788,0.29396367,-0.33448485,-0.18315637,-0.08755342,-0.07393691,-0.20805165,0.19661658],[-0.8980642,-0.61740303,-0.036882922,0.014804519,0.0004633668,-0.56963277,2.2672677,-0.8473421,-0.7454484,0.14973474,0.15070617,0.14196523,-0.4790531,0.44873357,0.1199102,-0.23800696,-0.27427772,0.2604217],[-0.019455962,0.23203465,-0.00544805,-0.37386358,0.198604,0.39421222,-0.9399687,0.4006715,-0.18001914,0.28436452,-0.16559297,-0.27809414,-0.3476229,-0.23943123,-0.15492289,0.29176927,0.45100713,0.6297477],[0.00265877,-1.9257119,-5.770941,-0.015959108,0.91101694,0.2507323,0.9135306,0.027248167,-0.37422356,-0.42659408,0.31162933,0.048672486,-0.09029977,0.20116101,-0.2788187,0.54255015,0.17655331,-0.34923193],[-0.053368453,-0.32306084,-0.0011745194,0.14451449,-0.10494747,-1.0513184,1.6973016,-0.3520769,-0.08723632,0.20861532,-0.03754033,-0.12658818,-0.45617837,-0.53323764,0.17189239,0.19411314,0.18694821,0.41706687]],"activation":"σ"},{"dense_2_W":[[-0.6774667,0.12969257,-0.4430792,-0.91589767,0.04770356,-0.14245662,0.32101628],[-0.007977094,-0.35256377,-0.17704034,-0.63430905,0.16956906,-0.70034474,0.04581389],[-0.46165147,-0.62357444,0.17046474,-0.75571364,0.43287623,-0.30724007,0.1923109],[-0.6784181,-1.1244366,0.11541932,0.0015692321,0.3201062,0.22912836,-0.3314084],[0.7617433,-0.10211574,0.85646874,0.09638195,-0.3320897,0.5301404,-0.12944654],[0.035080303,0.9425994,1.1255182,0.170445,-0.9830605,0.28675708,0.19016503],[0.050772995,0.07033034,-0.7225591,-0.4550455,-0.16105704,-0.13258936,-0.5693541],[0.33667997,-0.61400133,-0.51990676,-0.64140576,-0.114089586,-0.42780593,-0.09286493],[0.5349278,-0.001589271,0.36740375,1.0545287,-0.42867026,-0.08572172,0.1694925],[-1.0343602,-0.7271993,-0.040044453,-0.6931338,0.5427271,0.71489084,-0.30788174],[0.13735534,-0.39718962,-0.597495,-0.44561583,0.53015804,-0.5777026,-0.35073844],[-0.53797716,-0.5482148,-0.20631851,0.100615636,0.21108344,-0.1866766,-0.27603066],[1.0084223,-0.13957444,0.24433044,0.6394643,-0.8311719,-0.009334607,0.5582453]],"activation":"σ","dense_2_b":[[-0.09939182],[0.068688095],[0.009566937],[0.011495638],[-0.106889665],[-0.24243665],[-0.026521178],[0.1317154],[-0.10032767],[0.08581992],[-0.01238223],[0.015781516],[-0.17793517]]},{"dense_3_W":[[0.4781185,0.3084316,0.08325544,0.04606733,0.08636447,-0.6786478,-0.35504982,0.59879106,-0.120570466,0.8481977,0.4478148,-0.3906098,-0.63914454],[0.3031589,0.25322372,0.5268686,-0.22374596,-0.1588417,-0.0013027226,0.19833587,-0.4039331,-0.48228812,0.23426887,-0.09250619,0.19117919,-0.26200604],[0.059065677,0.54438025,0.23591729,0.44685203,-0.76421094,-0.22385049,0.4203905,0.5741656,-0.51101667,0.6874898,0.39969978,0.64433825,-0.3296311]],"activation":"identity","dense_3_b":[[0.021213043],[-0.017086985],[-0.06297748]]},{"dense_4_W":[[0.25790158,0.11600269,1.2381012]],"dense_4_b":[[-0.05793729]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x95xc0xd0x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x95xc0xd0x00'.json new file mode 100755 index 0000000000..591ebdc7f7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019 b'x95xc0xd0x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.9305706],[1.166364],[0.52697164],[0.04559408],[1.1611184],[1.1617836],[1.1621717],[1.1572268],[1.1512266],[1.1410046],[1.1271056],[0.045430746],[0.045456205],[0.045471754],[0.04538521],[0.045166407],[0.044751257],[0.044259742]],"model_test_loss":0.007159117143601179,"input_size":18,"current_date_and_time":"2023-08-10_16-11-18","input_mean":[[23.875044],[-0.04762809],[0.0020058034],[-0.0051164185],[-0.04738313],[-0.047682315],[-0.04707818],[-0.04922181],[-0.052050225],[-0.05241706],[-0.053604044],[-0.0052390727],[-0.005214684],[-0.005188381],[-0.0052186437],[-0.0052642184],[-0.005336835],[-0.005483444]],"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.30677524],[2.305386],[0.21258113],[0.0011374068],[-0.07798925],[0.13210933],[-2.2330644]],"dense_1_W":[[-0.9153392,-0.04457669,0.07580861,-0.14653037,-0.09173063,-1.0210644,0.28700185,0.2787717,-0.110930994,-0.22061832,0.031545375,0.21201925,-0.14316308,0.22535005,-0.13208093,0.47763622,-0.19806175,0.07550945],[1.408277,-0.8102327,0.07669226,-0.36992925,-0.10502352,1.4004408,-0.944446,0.52676916,0.45272207,-0.24533494,0.035849094,0.2495303,0.107555866,-0.19849469,-0.20219192,0.3377574,0.091887705,-0.09355204],[0.9365069,-0.6004133,0.073348165,0.15801865,-0.25915328,-0.8621952,0.9956089,0.10657743,-0.26742437,-0.09970222,0.07917549,-0.56488645,-0.07252198,0.6092978,0.18529537,0.062446173,0.21213096,-0.21162209],[-0.021605618,2.0233808,6.686231,-0.77553934,-1.7767231,-0.2691988,-0.54059815,-0.5960048,0.83274704,1.3160363,-0.8824629,0.47476387,0.31446755,0.564766,0.32654157,0.2584088,-0.60193515,-0.5081355],[0.0014130626,-0.53958946,-0.0328115,0.029045805,-0.032773897,-0.6771303,0.90978366,-0.1976198,0.17000276,0.09847352,-0.13980895,-0.6394955,-0.0060927877,0.14346723,0.3639303,0.4022752,0.04658495,-0.3556684],[0.035749156,-0.10624368,-0.104625024,0.035823658,0.20164482,-0.25137526,1.265547,-0.2905279,-0.5661436,-0.21419431,0.47792393,-0.30237326,-0.12908356,0.4366763,-0.18249804,-0.4698138,0.027572105,0.08708235],[-1.396587,0.15164146,0.07955495,0.8348063,-0.16462886,1.0165251,-1.172671,0.6484491,-0.2163863,-0.007840905,0.042114086,-0.29386994,-0.31274995,-0.1285774,-0.3331896,0.39886513,-0.12885635,-0.101650245]],"activation":"σ"},{"dense_2_W":[[0.38495073,-0.7412111,-0.22137684,-0.12030764,0.6368522,-0.06314703,0.03507243],[-0.6724593,0.739151,0.34064248,0.48897338,-0.50050086,-0.22222371,0.38529333],[0.44841364,0.03794733,-0.1467243,-0.20161211,-0.21433899,-0.43315327,-0.6118354],[0.06565437,0.23752235,-0.54241395,-0.19601826,-0.2867999,-0.1890192,0.41696703],[-0.27295426,0.30162266,0.6954773,-0.09653864,0.48812908,0.26977977,-0.4546936],[0.48944157,-0.61165446,-0.2726838,-0.39025265,0.26824158,0.44155118,0.23420909],[0.17367882,-0.1447462,0.5705062,0.11740234,0.38665462,0.3405028,0.37385175],[-0.4640401,-0.34844878,-0.520765,0.2933172,-0.23360184,0.06336928,-0.20476247],[-0.2682518,-0.2981224,-0.061291657,-0.15070377,0.4602456,-0.1752958,-0.35343117],[-0.4592221,1.1183828,-0.8640038,-0.4991326,-0.44832966,-0.2623515,1.0564609],[-0.045591548,0.03365201,-1.1687095,0.5368091,-0.6330926,-0.8546177,0.9726235],[-0.67239046,0.06492867,-0.5151909,0.16666827,-0.059304733,-0.17748602,0.7295886],[-0.17871682,0.7711487,-0.93309194,-0.24634744,-0.4780839,0.016693426,0.3126589]],"activation":"σ","dense_2_b":[[-0.0015952135],[0.012052551],[-0.010449206],[-0.044464882],[0.009422688],[-0.04994557],[-0.035012778],[-0.028600752],[0.016694155],[0.09361134],[-0.25293818],[-0.04506597],[-0.0031262708]]},{"dense_3_W":[[0.50088197,-0.45380923,-0.3447632,0.17479855,0.35610682,-0.29754344,0.29226437,0.40267113,0.3446978,0.15563208,-0.3483347,-0.6286209,-0.17550218],[0.4510917,-0.59041935,0.36655262,-0.30154505,0.49209,0.6228336,-0.18296722,-0.020777082,-0.10334578,-0.5006874,0.010148908,-0.52687216,-0.41658545],[0.39971578,-0.6320007,0.4202651,-0.58625245,0.6280199,0.34103268,0.25863847,-0.6293903,0.5739891,-0.46801668,-0.13070941,-0.01960773,-0.064851746]],"activation":"identity","dense_3_b":[[0.025732024],[0.02984865],[0.02392714]]},{"dense_4_W":[[-0.8745196,-0.8096158,-0.53739285]],"dense_4_b":[[-0.028630944]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019.json b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019.json new file mode 100755 index 0000000000..bb2bce72c7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU ASCENT LIMITED 2019.json @@ -0,0 +1 @@ +{"input_std":[[8.758843],[1.3803611],[0.60948026],[0.045717984],[1.3632656],[1.3669009],[1.3716704],[1.3600131],[1.3428026],[1.3118118],[1.2692281],[0.04556848],[0.045585617],[0.045588113],[0.045418713],[0.04517924],[0.044783145],[0.04430147]],"model_test_loss":0.011302465572953224,"input_size":18,"current_date_and_time":"2023-08-10_14-53-35","input_mean":[[22.14633],[-0.09750815],[-0.016923292],[-0.008263297],[-0.09257404],[-0.093882],[-0.095394194],[-0.10115487],[-0.105775625],[-0.10726142],[-0.10426775],[-0.008418747],[-0.0083834],[-0.008342148],[-0.008217269],[-0.008256564],[-0.008261369],[-0.008310724]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.028778102],[-1.968203],[0.065823115],[1.8248968],[0.062292587],[-1.7103531],[-0.01996085]],"dense_1_W":[[0.0070845596,-0.60425925,0.13626827,0.58880633,-0.31271362,-0.61375195,0.66517067,0.22636458,-0.19881134,0.45755818,-0.34704024,-0.57213944,-0.011795754,-0.6249568,-0.1684797,0.32110855,-0.17260504,0.544297],[-0.728326,-0.6023388,-0.058824457,0.31488872,-0.22620982,-0.60898775,2.0038636,-0.3022711,-0.629738,0.02945903,0.13288042,-0.14117523,-0.017454179,-0.034289096,0.067219295,-0.25439438,-0.053118344,0.09879211],[-0.020241546,-0.32952714,0.010935147,0.13660449,0.22784045,0.9439816,-1.076848,0.3701509,0.02565278,-0.019304488,0.13404894,0.18276764,0.43549806,-0.29936683,-0.58802724,-0.17244393,0.059832945,0.14556362],[0.76759815,0.06043721,-0.05881449,0.0035122675,-0.10848625,0.052874193,0.8961308,-0.89096814,-0.38440028,-0.16148087,0.24437909,-0.3767321,0.020551253,0.5319493,-0.12341046,-0.055117548,-0.11515104,0.11642417],[0.035288017,-1.6319109,-6.531466,0.11385578,0.8703579,-0.2708121,0.03723273,0.90277404,-0.28877074,-0.044411846,0.10059958,-0.33312798,-0.5378801,0.12608767,0.355296,0.48987788,0.32266265,-0.3474462],[-0.7375854,0.057307318,0.058046028,0.19952175,0.46198282,0.466313,-1.1714203,-0.15773736,0.28007728,0.14972468,0.010271487,-0.10134099,0.1349294,-0.18732592,-0.0563053,0.050620757,0.048619322,-0.045900762],[-0.0032983767,-0.9483289,0.020740977,0.16430958,-0.05373888,-0.6577905,0.2967871,0.2897931,0.2731,-0.18671848,0.084359705,-0.005540786,-0.0081646815,0.12515508,-0.08342288,-0.052237507,0.26822442,-0.21108986]],"activation":"σ"},{"dense_2_W":[[-0.45338973,-0.20294967,0.5083342,-0.42460576,-0.63909435,0.4879755,0.012130023],[-0.2742753,-0.61631083,0.46697986,-0.45406902,-0.06088979,0.76950836,-0.4132321],[0.81678456,-1.1331547,0.32828367,-0.31268513,-0.8846842,0.6429822,-0.4893232],[0.879309,0.7746291,-0.6991977,-0.23530038,-0.67047966,-0.1361894,0.9743538],[0.31158212,-1.6510494,0.1974917,-0.33475468,-0.11659852,0.07471639,-0.0023190496],[-0.6007021,0.55620384,-0.050591104,0.6911001,0.50198555,-0.48155546,0.5246929],[-0.81362003,0.870096,-0.6034486,-1.8557204,-0.71382594,1.4265903,0.31279352],[0.6726662,0.87645346,-0.31120607,-0.057908148,-0.517195,-0.5856469,0.6892038],[-0.62789345,-0.81853545,0.31356138,-0.040097605,0.6366377,0.31337318,-0.79096055],[-0.7211644,1.0459608,0.061597116,0.3745668,0.37840834,-0.46162283,0.76644534],[0.3500098,1.3790991,-1.1291443,-0.20502144,0.2560334,0.01199343,-0.027191881],[0.65701747,-0.9248509,0.506126,-0.16672745,-0.42342398,-0.14072593,-0.6027308],[-0.67928207,-0.19559407,-0.040364254,-0.47893044,0.14672689,0.6760947,-0.5760793]],"activation":"σ","dense_2_b":[[-0.014492411],[0.07639171],[0.39956445],[-0.16650708],[-0.13319126],[-0.13508296],[-0.10059368],[-0.31607836],[-0.0461397],[-0.32838032],[-0.20038198],[0.037399642],[-0.039441753]]},{"dense_3_W":[[-0.33679157,-0.009600073,-0.9610766,0.7423044,-0.19008559,0.21044315,-0.7233725,-0.04264747,0.26311195,0.57560843,0.4490669,-0.4002034,-0.7852221],[0.4784453,0.67048156,0.70986277,-0.8041704,0.3298966,-0.34861046,0.2399805,-0.27719498,0.5779557,-0.22748941,-0.932461,0.3537534,0.24791418],[0.58087116,0.6521763,-0.35804045,-0.07539161,0.062361475,-0.29150185,0.23337866,-0.089632176,0.21668643,-0.28445706,-0.36395082,0.26074025,0.598436]],"activation":"identity","dense_3_b":[[-0.030428782],[-0.123883836],[-0.12339338]]},{"dense_4_W":[[-0.23482278,0.8056521,0.30850294]],"dense_4_b":[[-0.10144986]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU FORESTER 2019 b'x8dxc0x04x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU FORESTER 2019 b'x8dxc0x04x00'.json new file mode 100755 index 0000000000..51e4706c5d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU FORESTER 2019 b'x8dxc0x04x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.799702],[1.4022106],[0.64107347],[0.048644897],[1.3754585],[1.384525],[1.3930372],[1.3637297],[1.3325337],[1.3025023],[1.2634097],[0.048490796],[0.04852734],[0.048555136],[0.04845293],[0.04838427],[0.048089206],[0.047663692]],"model_test_loss":0.007386927027255297,"input_size":18,"current_date_and_time":"2023-08-10_17-31-57","input_mean":[[23.816095],[-0.049997237],[-0.007897631],[-0.0071165124],[-0.04356241],[-0.044834737],[-0.046383783],[-0.045705367],[-0.044091124],[-0.04704344],[-0.044948243],[-0.0070246058],[-0.007036013],[-0.007050358],[-0.0070076296],[-0.0069411667],[-0.006977052],[-0.007046174]],"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.11336769],[-0.1558763],[-1.490285],[-1.5598854],[0.012304846],[-0.022315644],[0.041771296]],"dense_1_W":[[-0.01977819,1.1443615,6.4567647,0.22709283,-0.07258762,0.1256894,-0.9979844,-0.84394026,0.93974406,0.6906267,-0.6703605,-0.016698701,-0.12463053,0.4582139,-0.46097878,-0.1382326,-0.07665762,0.016058486],[0.01751075,-0.39227998,-0.042306893,-0.06479078,0.2590678,-0.7885349,0.8643044,-0.05622104,-0.5792078,0.49931744,-0.1498453,-0.091571845,0.068086684,-0.16460074,0.20773992,0.28189114,0.20789368,-0.30530888],[-0.84948033,1.009252,0.011256742,0.33373848,-0.42635688,-0.50016934,1.3120202,-0.9743089,-0.8169875,0.0070605767,0.07339234,-0.13629174,0.34325087,0.7454428,-1.020692,-0.6009766,-0.16322955,0.5690257],[-0.859371,0.6779426,-0.011156044,0.24427465,0.21054544,0.41095948,-1.243871,0.14078836,-0.18485905,-0.18274853,0.53857833,-0.17150062,0.010126415,-0.39408815,0.18594584,0.07860817,0.14298649,-0.1758404],[0.0010954959,0.5071819,-0.020262098,-0.2741187,0.15675487,0.48042226,-1.1560334,0.25577885,0.18734348,0.319839,-0.3276146,0.15339972,0.06763019,0.24912529,0.19296181,-0.35772792,-0.030918041,-0.056021962],[-0.001659214,-0.41259018,0.10546883,-0.04128334,-0.57788277,-1.2264594,0.9491901,0.31587604,0.42403442,-0.46528783,0.21479684,0.2612383,-0.07516154,0.10787102,0.12550128,0.20215736,0.010438747,-0.26799598],[0.0069037564,0.071458444,-0.17135356,-0.15143572,-0.42506117,-0.14927572,1.4475372,-0.7957649,-0.09695476,0.09732733,0.068755925,-0.447942,-0.39005634,-0.47970626,1.3778332,0.15125123,-0.061111715,-0.27014065]],"activation":"σ"},{"dense_2_W":[[-0.5476857,-0.34267196,-1.1804522,0.9826078,1.2559764,-0.06669344,-0.59067243],[-0.19235519,-0.73507553,-0.07926594,0.89560527,0.74729407,-0.61155975,-0.7242012],[-0.48663774,0.7720404,0.10374275,-0.6260227,-0.17417191,0.4686119,0.6312232],[0.36561587,-0.15491518,-0.44031703,0.06942568,0.64594734,-0.4462405,-0.6349547],[0.7081136,-0.29506996,-0.83266884,0.122376084,0.75587255,-0.3350482,-0.2778585],[-0.6224533,-0.5645358,-1.0115622,0.89887905,1.4065654,-0.32766277,-0.39135978],[-0.4492619,0.03162113,0.52745104,-0.41767576,-0.13911435,-0.020886017,-0.009816406],[-0.5448073,0.91549146,0.68613285,-0.013575926,-0.29431057,-0.06598866,-0.16217463],[-0.3627731,0.41454732,0.17659637,-0.039793443,-0.50492966,0.6114329,-0.2755667],[0.0074237594,0.78070295,0.22676738,-0.37978444,-0.3925154,0.5993168,0.31498003],[-0.34473616,0.4788029,-0.111885466,-0.2417559,-0.39796054,0.3986806,0.7663913],[-0.5048224,-0.041392315,-0.69820964,0.1713349,0.7381618,-0.29876855,-0.30547982],[0.028930116,0.4292938,-0.051137988,0.08411418,-0.11514599,-0.39944056,-0.04911791]],"activation":"σ","dense_2_b":[[0.20303766],[0.14015818],[-0.08520703],[0.09250628],[0.23017566],[0.48661518],[-0.00044188643],[-0.06016225],[-0.007325745],[-0.18048085],[-0.02599478],[0.0058664232],[-0.022089954]]},{"dense_3_W":[[0.13350116,0.4653472,0.35548818,-0.19969355,-0.19666392,-0.36159652,-0.4205869,0.4367674,-0.4891205,-0.15468554,0.156333,-0.36591503,-0.24838057],[-0.0064647943,-0.10470988,-0.5210429,-0.100936055,-0.54979503,0.6029704,-0.3322796,-0.58332735,0.060819454,-0.060762953,0.5044272,0.4439412,0.33067426],[0.26523876,0.8024418,-0.5483982,0.41635954,0.6793265,0.5232535,-0.3263415,-0.4702453,-0.20712556,-0.50518614,-0.36013588,0.21646436,-0.09427801]],"activation":"identity","dense_3_b":[[0.0074690827],[0.029551204],[-0.025025982]]},{"dense_4_W":[[0.06027109,0.044870634,1.0522106]],"dense_4_b":[[-0.022553917]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU FORESTER 2019.json b/selfdrive/car/torque_data/lat_models/SUBARU FORESTER 2019.json new file mode 100755 index 0000000000..f269e03b94 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU FORESTER 2019.json @@ -0,0 +1 @@ +{"input_std":[[8.800139],[1.4024142],[0.64793754],[0.04852409],[1.3756377],[1.3851136],[1.3934203],[1.3648111],[1.3329811],[1.3011713],[1.2632433],[0.04835437],[0.04840405],[0.04844234],[0.048357654],[0.0482471],[0.047991928],[0.047582824]],"model_test_loss":0.007408012170344591,"input_size":18,"current_date_and_time":"2023-08-10_16-38-20","input_mean":[[23.81501],[-0.049737465],[-0.012033205],[-0.007154475],[-0.042333253],[-0.04411629],[-0.046351664],[-0.046337746],[-0.0452032],[-0.0461177],[-0.04440744],[-0.007060857],[-0.0070801843],[-0.0070975143],[-0.0070964643],[-0.007056378],[-0.0070534865],[-0.0071490407]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.14959592],[0.15145145],[-0.31445217],[-1.278996],[0.042432982],[1.5067866],[-0.032994382]],"dense_1_W":[[0.007527928,-0.5552118,-0.033658482,-0.098787725,0.07584574,-0.9390659,0.81876254,0.20194316,0.43864456,-0.4218525,-0.039264686,0.16177176,-0.3515836,0.20080848,0.34289953,-0.09344094,-0.35971025,0.22003576],[0.09012296,0.46685427,0.0064236997,0.18229099,0.07276261,0.7347331,-1.3846129,0.22982895,0.4774952,-0.22901195,-0.07560122,0.29164892,0.25852647,-0.08081211,-0.041323017,-0.22754644,-0.36422738,-0.012168264],[-0.007923612,1.5721923,7.249816,0.24075961,0.25590533,-0.088694036,-1.1871089,-0.96667105,0.9330669,0.98532987,-1.0378566,0.5749717,-0.40850392,0.24602483,-0.63786286,-0.6482208,-0.15704682,0.6276128],[-0.963277,0.03193962,0.017269593,0.57181937,0.88669837,0.27691013,-1.8479526,0.38129202,0.73344886,-0.16890727,-0.1942604,0.950727,0.9030019,0.033808593,-0.89199686,-0.8695169,-0.48222977,-0.1936048],[0.003948569,-0.6626056,-0.026783565,0.24455325,0.13850336,-0.87496305,0.30995417,-0.12258559,0.627965,0.28786364,-0.36571527,-0.14854349,-0.048926286,-0.03496435,0.18779114,-0.090603314,0.06736233,-0.109832205],[1.1487782,0.404077,-0.03660598,-0.08010621,0.22780214,0.27421752,-1.7048142,0.8248977,0.32876998,0.15378678,-0.34877867,-0.92275876,-0.83582413,-0.37334695,0.31583604,0.31877267,0.8586441,0.715129],[0.0010568867,1.0778173,0.04372921,0.6322534,-0.1799248,-0.3518717,1.8120258,-1.5917265,-0.8620765,-0.35745504,0.2233659,-0.0019629926,0.28671154,0.32253462,-0.85555124,-0.21950537,-0.112213776,0.2568781]],"activation":"σ"},{"dense_2_W":[[0.10897138,-0.723212,0.03340947,-0.38988578,-0.31490615,-0.007838475,0.05767578],[0.124002986,-0.47957873,-0.6278711,-0.20655042,-0.17151697,-0.8776442,-0.36946294],[0.34166458,-0.6827676,0.36771443,-0.24060813,0.34594595,-0.74794686,0.22926417],[0.017008245,0.19041075,0.084082685,0.081093706,0.4542936,0.10335207,0.25682083],[0.5069386,0.24292083,-0.4515972,-0.18613566,0.21341953,-0.4916771,0.5676118],[-0.79913807,0.49238104,0.19868188,0.75191754,-0.41708577,-0.453282,-0.456025],[0.25128815,-0.63992566,-0.4836454,-0.3934495,0.094238296,-0.68461305,0.33668476],[0.01528515,0.78505975,0.5019243,-0.31464717,-0.74084806,0.8338816,0.1128433],[-0.51994556,0.15239593,-0.07230343,0.24837533,-0.6899928,0.0865479,-0.539543],[0.2825089,-0.38502663,0.44325826,-0.430329,0.21890175,0.1125448,-0.37878212],[0.16606337,0.54976463,0.36211267,0.32275504,-0.48639286,-0.25836277,-0.336691],[-0.06592535,0.7600238,-0.17236032,0.496856,-0.6375664,0.18681967,-0.40907857],[-0.28911406,-0.26927066,-0.5852496,-0.33134258,0.08002008,-0.1575813,0.27370805]],"activation":"σ","dense_2_b":[[-0.35370803],[-0.20628847],[-0.111258335],[-0.1018301],[-0.056314364],[-0.092298076],[-0.07329908],[-0.023466475],[0.112976246],[-0.077543356],[-0.033790935],[0.04352653],[-0.080127224]]},{"dense_3_W":[[-0.50061566,0.29911298,0.27225292,0.13542368,0.36572888,-0.65222454,0.3313954,-0.33749554,-0.6381314,0.39514777,-0.084563196,-0.4374779,0.39208907],[-0.14953244,-0.20290117,-0.599371,-0.1296707,-0.32913446,-0.37221158,-0.29940695,-0.34908745,0.2913214,0.17797685,0.25834674,0.75962204,-0.38031256],[-0.59162396,0.6006983,-0.23583624,-0.18037513,-0.533629,0.23406217,0.08210266,0.45098656,-0.05068087,-0.46481112,0.37245923,-0.113958105,0.26854116]],"activation":"identity","dense_3_b":[[-0.058710456],[0.06673158],[0.06627157]]},{"dense_4_W":[[-1.143745,1.012412,0.67946994]],"dense_4_b":[[0.060790185]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019 b'x8axc0x10x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019 b'x8axc0x10x00'.json new file mode 100755 index 0000000000..bdf37fa0a6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019 b'x8axc0x10x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.9070053],[1.0543791],[0.45644546],[0.04216511],[1.0496393],[1.0514421],[1.0525388],[1.0388994],[1.0230772],[0.9977821],[0.97294074],[0.042082436],[0.042079873],[0.042074014],[0.04191643],[0.0416697],[0.0412085],[0.04074361]],"model_test_loss":0.01961229182779789,"input_size":18,"current_date_and_time":"2023-08-10_18-47-37","input_mean":[[24.166582],[-0.028447185],[-0.004559452],[-0.0096051665],[-0.024261262],[-0.025696838],[-0.027025647],[-0.028589323],[-0.030067492],[-0.03444616],[-0.035814732],[-0.009534621],[-0.009544901],[-0.0095633445],[-0.009623893],[-0.009606267],[-0.009746497],[-0.009912363]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.7455199],[0.049996253],[-0.28023538],[-2.2060273],[-0.013816978],[-0.9874536],[-0.9019276]],"dense_1_W":[[0.6895121,0.5161322,0.14658317,0.11381423,0.1892214,1.7092749,-0.96651584,0.44850215,-0.0011632228,-0.042724244,0.15792367,0.5514578,-0.377292,-0.20945737,-0.76233065,0.012376638,0.07503095,0.03581266],[-0.6286081,-0.19999953,-0.26134518,0.40281624,0.025883766,1.6258272,-1.282856,0.15094246,-0.4982385,-0.14781019,-0.1479545,0.2354319,0.11133424,0.01337905,-0.27134678,0.36755842,-0.2766078,0.20018724],[0.01425971,0.12655693,0.027717352,0.25218877,-0.14888945,1.3863931,-0.58381855,0.119170696,-0.30655816,0.28394252,-0.028384114,0.28937957,0.11933416,-0.17924944,-0.5354822,-0.1023875,-0.112619705,0.23060223],[-0.70373154,0.21793373,0.15077697,0.2048877,0.536804,1.0242751,-0.6825991,0.6318776,0.21126975,-0.1301757,0.11066647,0.16537508,-0.13113236,0.008809388,-0.91487056,0.1511099,-0.20573723,0.17212375],[0.6260223,-0.82557577,0.2577335,0.09809156,-0.0992909,0.8572501,-0.7068254,0.11579019,0.9520398,-0.10346599,0.24801868,-0.04993002,0.1822422,-0.8884633,-0.5575527,0.70132893,0.013880684,-0.26569209],[-0.038469315,1.393094,4.8376126,-0.17993413,-2.8555899,-0.81073236,-1.82493,0.3075214,3.1346302,2.149397,-1.5296553,0.16216949,0.63347834,-0.16527048,-0.52531976,0.4832946,-0.8622477,0.4553706],[-0.0084891105,1.6197035,2.4590979,-0.13657339,-1.2173172,0.13232367,-0.9361693,0.3940753,0.5279083,0.7115164,-0.9698505,0.27118906,0.24368131,-0.12613261,0.07012018,-0.2520898,-0.77435726,0.66100776]],"activation":"σ"},{"dense_2_W":[[-0.3877504,-0.5656672,-1.2326187,-1.1548815,-0.2756651,0.68949634,0.3156601],[-0.086553685,0.083017066,-0.46457613,-0.06040094,-0.24278064,0.21467605,-0.820212],[-0.31367186,-0.38895422,0.5136481,0.54023415,0.13330653,0.1338129,0.4324519],[0.48387918,0.4686007,0.7549132,0.5443022,0.64290255,-0.3914411,-0.18872365],[-0.4481094,-0.3843902,-0.18481985,-0.12798713,0.0073901964,-0.8419567,0.07509202],[0.5552352,0.042670928,-0.77402955,-0.73152304,-0.43447974,0.11009675,-0.40836683],[-0.3615617,-0.56010073,-0.20947416,-0.66224504,-0.020653427,0.21728848,-0.3211307],[-1.4455059,-0.76313007,0.2822113,1.7159922,-0.5230928,-2.34454,-0.7053262],[0.5867471,0.043875463,0.29294136,0.05382179,0.34849784,0.6732012,-0.029372701],[0.23746303,-0.28121752,-0.6422261,-0.517458,0.11123861,-0.21673626,-0.02707978],[0.14627667,-0.5604455,-0.556298,-0.32100976,0.32297257,-0.35747936,0.035987776],[-0.28271908,0.46155292,0.36581132,0.38092643,0.5151189,-0.36064845,0.38086742],[-1.7228172,-0.6008753,-0.028210318,0.9336887,-0.7923858,-1.5424409,-1.1373487]],"activation":"σ","dense_2_b":[[0.3649016],[-0.28463706],[-0.18955103],[-0.0975359],[0.014972014],[0.19693135],[-0.20519742],[0.5246628],[-0.010990981],[0.14763328],[-0.051889963],[-0.065584496],[0.24132432]]},{"dense_3_W":[[-0.2141626,-0.5071306,0.47525346,-0.30042058,-0.13658617,0.33044663,-0.19224532,0.47024256,-0.43578166,-0.17088617,0.11608789,-0.46500286,-0.25973997],[-0.69258684,-0.4011068,0.47469568,0.40183055,-0.6213789,-0.5464064,-0.21653396,-0.016826013,0.18607092,-0.6653599,0.15087543,-0.011308093,-0.69397706],[-0.55069065,-0.4436314,0.4907695,0.59020114,-0.2770053,-0.10887845,-0.5752601,-1.0579756,0.44049686,-0.7758806,-0.5634297,0.25996745,-1.2285975]],"activation":"identity","dense_3_b":[[-0.0030500097],[0.016847884],[0.21006793]]},{"dense_4_W":[[-0.8614738,1.2687197,0.32792068]],"dense_4_b":[[0.007946701]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019 b'zxc0x04x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019 b'zxc0x04x00'.json new file mode 100755 index 0000000000..d738a84d5c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019 b'zxc0x04x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.614999],[0.88142365],[0.4115542],[0.04286995],[0.8717417],[0.8741691],[0.8768661],[0.87092763],[0.86162114],[0.8471719],[0.83313096],[0.042673744],[0.04272682],[0.042776305],[0.04276147],[0.042682905],[0.042456076],[0.042026334]],"model_test_loss":0.020124401897192,"input_size":18,"current_date_and_time":"2023-08-10_20-02-36","input_mean":[[22.85947],[-0.016667789],[0.0068580806],[-0.012056368],[-0.020457769],[-0.019109555],[-0.018067708],[-0.017776748],[-0.018178418],[-0.018938173],[-0.020024292],[-0.011968072],[-0.011980279],[-0.011996548],[-0.012103643],[-0.01220858],[-0.012383698],[-0.012489372]],"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.08823245],[-1.1790096],[1.2441144],[-0.011465203],[1.0564277],[0.0697024],[-1.3683548]],"dense_1_W":[[0.0014331031,0.30712977,0.039872505,0.80071706,-0.06956878,-1.9827149,1.0480732,-0.021383282,0.005184354,0.0075036837,-0.20064104,-0.3831549,-0.048222806,-0.46527135,0.28325924,0.08959743,0.16869979,-0.19650029],[-0.47628394,1.0323036,0.0727205,-0.12824745,-0.03173074,0.8555501,-1.0978942,-0.3188049,-0.23511048,-0.108945906,0.25071257,-0.13640903,0.22402667,0.2394587,-0.2969934,-0.05407172,0.23281921,-0.08285842],[0.5358869,0.30272746,0.73764825,-0.47511554,-0.67684716,1.2363486,-0.9340444,-0.06546125,0.26209694,0.1302329,-0.31725046,-0.26148638,-0.084479555,0.05804304,0.812802,0.13063046,0.061406944,-0.28873906],[-0.006784061,-0.19369683,0.5173411,-0.14995524,0.69393647,-0.8419515,1.0821712,-0.57659614,-0.5480855,0.040282447,0.3126287,0.14098974,0.21859266,-0.27093312,0.17456277,-0.07563259,-0.03413685,0.0682818],[0.49518052,0.9090121,0.07206266,-0.07255221,-0.40314698,1.3829393,-1.300141,-0.10262215,-0.14204547,-0.16600157,0.189207,0.114158854,0.5331006,-0.039711166,-0.51919204,-0.41197154,0.16707423,0.21446657],[-0.010184907,2.5707195,4.8210435,-0.59082705,-2.13527,-0.02737542,-0.084925294,-1.5004889,1.5263844,0.82498163,-0.750615,0.46455646,0.5213816,0.3898705,-0.31170332,-1.3961885,0.08791534,0.6026678],[-0.604111,0.33238423,0.7429127,-0.4376858,-0.1869525,1.0722656,-1.3618989,0.13231814,0.12388613,-0.027485399,-0.14985481,0.01705928,-0.40608093,-0.46543834,1.1232054,0.62169623,0.074105,-0.5730497]],"activation":"σ"},{"dense_2_W":[[0.66628206,-0.3684147,0.29401556,0.33376765,-0.20291045,-0.43510544,-0.49534982],[0.3000001,-0.27556387,-0.4702806,-0.012585157,-0.4258327,0.33206144,-0.23892596],[0.4380561,-0.38661313,0.19346173,-0.010281955,-0.6983228,-0.7392101,0.36173314],[-0.90225124,0.7195273,0.5120532,-0.4113813,0.3908176,-0.19042808,0.5445649],[-2.0083435,0.1796547,0.53105164,-0.43887454,0.55858135,0.095837146,1.0666932],[0.94471526,-0.7361511,-0.3394616,0.5484322,0.21810979,-0.04098551,-0.55697936],[-0.17648907,-0.1659118,0.09883211,-0.019644987,0.09760398,-0.2444248,-0.23118357],[0.012475254,-0.2854982,0.77410185,-0.5734643,0.86467403,0.57916874,0.36548907],[0.21869864,-0.059679627,-0.8418387,-0.3505286,0.19995454,-0.18443146,-0.3518136],[0.733226,-0.8237715,0.11591505,0.12030088,-0.16572322,-0.29059696,0.033399917],[0.4081683,-0.40732962,-0.696102,0.46398422,-0.9380676,-0.117172115,0.06541085],[-0.636597,0.5673404,-0.18129148,-0.80558836,0.3210611,0.22610644,0.059019666],[-0.17355403,0.38050172,0.7130264,-0.49735093,0.6084085,0.47226894,-0.23599635]],"activation":"σ","dense_2_b":[[0.15390728],[-0.27060974],[0.051722474],[-0.18110798],[-0.45624837],[0.005322652],[-0.048935406],[-0.13153522],[-0.2941039],[0.02853757],[0.031165767],[-0.283588],[-0.11898526]]},{"dense_3_W":[[-0.6583376,-0.1158339,-0.5825397,0.38649017,0.6810171,-0.48431656,0.18096629,0.5144921,0.03614329,-0.6123482,-0.3714544,-0.12423297,0.5612449],[0.21774262,0.41141757,0.5053978,0.036839064,0.012879289,-0.01591902,-0.39873704,-0.15116392,0.39331844,0.013287693,-0.51785904,-0.40162948,0.036296766],[-0.6850239,-0.028873632,0.09147937,0.6863797,-0.22511397,-0.7087885,-0.38730666,0.30543882,-0.19349012,0.35246828,-0.21587896,0.49934873,0.63229257]],"activation":"identity","dense_3_b":[[-0.018641375],[-0.010103108],[-0.022765955]]},{"dense_4_W":[[1.1674396,-0.010352109,0.70566726]],"dense_4_b":[[-0.022187218]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019.json b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019.json new file mode 100755 index 0000000000..0bae6debe1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA LIMITED 2019.json @@ -0,0 +1 @@ +{"input_std":[[8.554121],[1.0740528],[0.4476513],[0.042985532],[1.0663103],[1.0689878],[1.071583],[1.0549195],[1.0335085],[1.0030197],[0.9723682],[0.042850573],[0.042880993],[0.042904507],[0.04281879],[0.042651407],[0.04230733],[0.041820873]],"model_test_loss":0.022656971588730812,"input_size":18,"current_date_and_time":"2023-08-10_17-58-30","input_mean":[[22.76271],[-0.025877997],[0.0022960093],[-0.009181171],[-0.02727445],[-0.027402772],[-0.027459135],[-0.026559947],[-0.02817579],[-0.029742032],[-0.030806256],[-0.0091993585],[-0.00921486],[-0.009230055],[-0.009324119],[-0.00943795],[-0.009580347],[-0.009762122]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5694719],[-0.20375408],[0.4239076],[-1.5491991],[-2.7061498],[1.5443199],[-3.3281188]],"dense_1_W":[[-0.1568525,1.7437768,5.172882,-1.1876678,-2.9987805,-0.5681597,-0.72784686,-0.56439,3.2104652,1.4470582,-1.4493226,1.616085,0.16703165,-0.029379552,-0.89520353,-0.08414323,0.035069145,0.27360746],[0.008605118,1.5699749,-0.034170814,-0.6517424,0.1554151,1.9415936,-0.6549746,-0.14080332,0.4873717,0.20128046,-0.07373715,0.72448504,-0.18958189,-0.3032506,-0.3716506,0.21436751,0.13051425,0.057122074],[0.15251416,-1.065147,-1.7042818,-0.18689084,1.1120772,-0.40736163,0.34153485,-0.06619109,-0.19624624,-0.5001997,0.3767836,-0.46413225,0.124430165,0.1741939,0.08300067,0.4339266,0.39133996,-0.4509936],[-1.9674213,0.08717078,0.029132722,-0.03513353,-0.2589703,1.6724654,-1.3558731,-0.1305793,-0.454886,-0.012608211,0.23873848,-0.34175423,0.23151904,0.7033776,-0.41631103,-0.5752804,-0.4836925,0.59687835],[-0.7207827,-0.5354017,-0.046089556,0.70448333,-0.36087984,-1.4759765,1.6575412,-0.75853246,-0.4408815,0.08790331,0.0717399,-0.33782014,-0.42041263,0.67508817,-0.24991857,-0.3216102,-0.41419834,0.3666627],[1.9532421,0.33528504,0.01916575,0.41987598,0.10209625,1.2647687,-1.4621202,0.04530512,-0.48216137,-0.5880018,0.5948106,-0.49690482,-0.012825885,0.407025,-0.21983282,-0.46802706,-0.1458972,0.21309836],[-0.7360502,0.09303879,0.05160484,-0.5698299,0.48270965,1.2655245,-1.0951636,0.7825874,0.5584368,-0.051464483,-0.10931349,0.18838416,0.48844352,-0.7061164,0.29695016,0.34917378,0.2150316,-0.281181]],"activation":"σ"},{"dense_2_W":[[-0.07180556,0.3327603,-0.38922572,0.48622698,0.09493802,0.26061895,0.23152085],[0.13407795,-0.67967266,0.05478834,-0.13644974,0.38578004,-0.13981605,-1.063277],[-0.015875516,-0.22446778,-0.25920233,-0.21318886,0.96766865,-0.20522757,-0.96453786],[0.08992157,0.18349336,0.0824512,-0.18648697,-0.5639966,0.38651267,0.2273873],[0.24735251,-0.2508453,0.11087025,0.45425788,-0.4750976,0.48374006,0.7154399],[-1.4328333,0.5445412,0.7513447,-0.29624668,1.3955733,-0.7848697,-0.35838512],[-1.3571904,0.019299721,0.74097097,0.21410283,0.48808393,-1.7108941,0.8460511],[0.34152254,-0.33008227,0.7538879,-0.782962,0.46280092,0.3184853,-1.060949],[-0.5959307,0.6231766,0.24205552,0.80450344,-0.20037276,0.2900327,0.34695983],[-0.04536962,-0.6977615,0.08347324,-0.3414067,0.76720893,0.07663101,-0.62674546],[-0.08212232,-0.48272756,-0.11815556,0.24696878,0.023860326,-0.47122,-0.32275018],[-2.5981476,-0.62226206,0.30502877,0.7207847,0.95814323,-0.7556528,0.5867901],[0.18742424,0.22045845,0.27814955,0.33897662,-0.19170812,0.03715238,0.15590559]],"activation":"σ","dense_2_b":[[-0.05376892],[0.23207775],[0.08851935],[-0.051318903],[-0.23005556],[-0.015357251],[0.06677577],[0.3493236],[0.010827263],[-0.029838517],[-0.059241645],[-0.45090887],[0.0051090852]]},{"dense_3_W":[[0.43776008,-0.4779542,-0.6273563,0.012430885,0.27310228,-0.6358059,-0.5068906,-0.45288852,0.5793986,-0.29245862,-0.21443059,-0.15231055,0.4353823],[0.24600616,0.26503375,-0.1618708,-0.22456193,-0.43281186,-0.17235023,-0.4949653,0.4828677,-0.109212846,-0.3444521,-0.46777263,0.5679082,-0.11389996],[0.5157795,0.24814758,-0.17129026,0.32940918,0.6862252,0.45439878,-0.3838788,-0.6090692,0.4296436,-0.07106129,0.5077451,-0.04794848,-0.5777281]],"activation":"identity","dense_3_b":[[0.0597104],[-0.036633834],[0.03006256]]},{"dense_4_W":[[1.408938,-0.40635464,0.28050324]],"dense_4_b":[[0.051838256]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'nxc0x04x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'nxc0x04x00'.json new file mode 100755 index 0000000000..fd0b885f31 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'nxc0x04x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.149806],[1.0466807],[0.48216617],[0.03926948],[1.0378215],[1.0405693],[1.0433956],[1.034937],[1.0209817],[1.0002661],[0.97917086],[0.03917731],[0.039209686],[0.039230634],[0.039230503],[0.039089043],[0.03877449],[0.038412858]],"model_test_loss":0.0086250901222229,"input_size":18,"current_date_and_time":"2023-08-10_21-44-49","input_mean":[[24.784973],[0.022257574],[0.0018790626],[-0.0014456466],[0.021444617],[0.021993408],[0.022768045],[0.024583662],[0.0267569],[0.026212335],[0.025587328],[-0.0014159543],[-0.0014121836],[-0.0014230785],[-0.0014949344],[-0.0015499452],[-0.0016750016],[-0.0018316169]],"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.11915471],[0.4647498],[-0.18471648],[-0.05602483],[0.7303728],[-0.020603865],[0.08058517]],"dense_1_W":[[0.02919073,1.8689783,4.4265075,0.16716953,-3.2808,-1.9433872,-1.6631875,0.64648163,3.702317,1.9939891,-0.7665767,0.8001585,0.7883229,-0.39065278,-0.15145746,-0.16460232,-1.2793592,-0.002752089],[0.60766363,-0.8283458,0.086918816,0.49001363,0.1764836,1.6148571,-1.172861,0.28852218,-0.12384417,0.22311504,-0.038648173,0.08665237,-0.22122696,-0.1211155,-0.16418546,-0.06580166,-0.12981877,0.1223207],[-0.0611153,2.1892653,4.1823645,-0.020211374,-0.126075,-0.26824856,-0.21868485,0.009974396,0.54638195,0.08174665,-1.6289697,0.13641535,-0.026207518,0.037753426,0.0224,-0.30633605,-0.18595642,0.18627088],[-0.006284281,-0.9393309,0.131348,0.27939406,0.15329085,-1.1371962,0.67140526,0.23289137,-0.25185016,0.14388521,-0.20779973,-0.51052564,-0.30346033,0.5853443,0.3393873,-0.16495557,-0.28405264,0.07844043],[0.7133973,0.36651134,-0.09357234,0.053284127,-0.32661018,-1.1806043,1.2274599,-0.13515554,0.15792286,-0.40642232,0.14303061,-0.012403075,0.007870057,0.0046764547,-0.06777944,-0.23694073,0.4407839,-0.18311372],[0.063063905,-0.105903134,-0.07843828,-0.14851844,0.09402292,-0.94803673,0.9120545,-0.20011538,-0.16328399,0.105953924,0.057462662,0.09776021,-0.14990965,-0.06046959,0.15974031,0.2219897,0.004509259,-0.1270214],[0.0070889555,-0.44478884,0.06164922,-0.122812085,0.30908406,1.5513293,-0.5627223,0.25208586,0.123981394,-0.111266494,0.066460505,0.043457642,-0.06717314,-0.4400081,-0.30934328,0.038612906,0.059938014,-0.23997127]],"activation":"σ"},{"dense_2_W":[[0.36688,-0.19320922,0.28094387,-0.9803768,-1.1758837,-0.99039465,0.49203432],[-0.28640324,-0.72820544,-0.4875037,0.1816081,-0.5080949,0.39986604,-0.2271453],[-0.20991027,-0.33078238,0.36123854,-0.4010081,0.42690548,0.5543692,-0.66790026],[0.028127942,-0.46438977,-0.2351104,0.114041865,-0.8311537,-0.69191617,0.13150403],[0.6023005,3.1064928,0.30146995,-1.728805,0.39918655,-1.0887272,0.8644791],[0.17403108,-0.5989185,-0.5602132,0.23924266,0.047311135,-0.21583998,-0.08689489],[-0.408518,-0.67819715,-0.48529884,-0.43457308,-0.6859549,-0.72042423,-0.10757325],[0.13631205,0.05900456,-0.31221914,-0.42799878,-0.5074306,-0.066171676,0.2549441],[0.38185734,-0.41993743,0.16787384,0.48273364,0.23232572,0.16146578,0.1430547],[0.36192957,0.7118042,-0.11004752,-0.44175497,0.037270173,0.11878499,0.21234997],[-0.45457327,0.13838753,0.22052445,0.07949341,-0.62185955,-0.6223187,-0.597313],[-0.22084583,-0.1706968,-0.31476033,0.620582,0.66211015,0.5056345,-0.30923542],[-0.14307842,-0.09773044,-0.11317682,0.31420723,-0.032641448,0.05758633,-0.23174715]],"activation":"σ","dense_2_b":[[-0.1766578],[0.0030768153],[0.011622017],[-0.2613647],[0.41335022],[-0.029892111],[-0.27720392],[-0.03462619],[-0.03277327],[-0.033704933],[-0.23574014],[0.07590818],[-0.0031470906]]},{"dense_3_W":[[0.44066054,-0.5858187,-0.49569857,-0.27353624,0.016213497,-0.59161377,-0.48449734,0.46109423,-0.0024176766,0.34991503,-0.13543713,-0.48638907,-0.19906554],[0.669034,-0.12078269,0.06202367,0.44989127,0.5493621,0.336327,0.4797354,0.5557385,-0.36501727,0.26719907,0.3279164,-0.33229584,-0.3502743],[-0.5095002,-0.2236471,0.21968824,0.042991508,-0.38274318,-0.11278709,-0.5325957,-0.45203722,-0.12108213,-0.19157046,0.58804715,0.48384163,0.023208706]],"activation":"identity","dense_3_b":[[0.0001239895],[-0.013890755],[0.030029856]]},{"dense_4_W":[[1.067811,0.9453486,-0.14499813]],"dense_4_b":[[-0.002235052]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'nxc0x04x01'.json b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'nxc0x04x01'.json new file mode 100755 index 0000000000..6f5ea46958 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'nxc0x04x01'.json @@ -0,0 +1 @@ +{"input_std":[[8.433109],[0.9277941],[0.4133138],[0.042486828],[0.91961175],[0.9212083],[0.9230463],[0.9178699],[0.90644723],[0.8922139],[0.87602633],[0.042294905],[0.042328734],[0.04236129],[0.042348858],[0.04222418],[0.04196347],[0.041606702]],"model_test_loss":0.006344182416796684,"input_size":18,"current_date_and_time":"2023-08-10_22-11-17","input_mean":[[27.48561],[-0.045379456],[0.000610541],[-0.0075939377],[-0.04516856],[-0.04590259],[-0.04635042],[-0.0455905],[-0.044134438],[-0.047893465],[-0.04872525],[-0.0075862017],[-0.007591181],[-0.0075963517],[-0.0077280067],[-0.007869005],[-0.008030396],[-0.008253526]],"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.13907726],[0.91428226],[-0.08902528],[-0.8122626],[2.4960856],[0.6941552],[3.1465714]],"dense_1_W":[[0.012394863,2.442848,6.000615,-0.9667802,-2.4481606,0.04116472,-0.298802,-0.45781717,1.0988615,1.5439192,-1.6183215,1.5120034,0.70879805,0.33042568,-0.6360781,-0.72864187,-0.42245787,0.1924922],[-0.039127346,-2.5879724,0.45108536,0.10737795,-1.9936459,-2.6408718,-0.10216445,-0.74508464,-1.0754778,-1.6742834,-0.6845894,-0.2893954,-0.6440116,-0.68839306,-0.8477463,-0.49898022,0.39530098,0.49870434],[-0.028086787,0.11074618,-0.029657526,0.53074354,-0.09886754,-0.50980574,1.6068281,-0.1943193,-1.0108532,-0.4594659,0.7215557,-0.24808267,0.30215025,-0.18002108,0.2840001,-0.57245183,0.10710855,0.07138346],[0.4541753,0.06447674,0.019618178,-0.050374724,0.13303722,1.2749394,-0.6110799,-0.06389013,-0.17551425,-0.02773791,0.21997307,0.28395706,-0.14487898,-0.20185138,-0.18616714,0.03085588,-0.22616515,0.1570019],[0.933303,-0.34038252,-0.065301575,-0.16815153,-0.48548433,-1.0974069,1.3661956,-0.6751278,-0.06634803,-0.05417734,0.008298623,-0.21462391,-0.17723723,0.39795777,0.2967163,0.078405224,-0.10986368,0.0066645048],[-0.44923598,-0.02191377,0.020238422,0.43116552,0.33337408,1.5234641,-1.2367504,0.123196624,-0.13720761,0.06765882,0.14065754,0.2515097,-0.3147324,0.12851562,-0.5540239,-0.48021403,-0.22485968,0.4229258],[1.1905549,0.10563058,0.08857988,-0.563186,1.1590731,1.2013718,-2.1805055,0.6349522,0.81047887,0.13184841,-0.23018143,0.040691454,0.22812058,0.2580085,-0.2708511,0.37357846,-0.14638875,-0.019385386]],"activation":"σ"},{"dense_2_W":[[-0.4165453,-0.17428897,-0.656896,0.56047696,0.075286396,0.29055318,0.6539704],[0.67952734,0.31715697,-0.38251033,-0.9062763,0.61300415,-0.6845408,-0.5751852],[0.33353442,-0.4632752,-0.45792413,-0.58633304,0.45437384,-0.8976134,-0.459859],[-0.28707662,-0.20765603,-0.09663817,0.0712579,0.030774899,-0.9440693,-0.11771196],[-0.034040477,-0.44995186,-0.34478307,0.7316748,-1.0665529,-0.03579851,-0.029609136],[0.2525717,0.42749283,-0.3511222,0.24611457,0.047738947,0.7055022,-0.096511096],[1.0310456,-0.14640242,-0.67039543,-0.05573537,-0.97901416,0.053892918,-0.95491844],[1.935988,-0.24661754,-0.47021067,0.26482674,-2.1922724,0.12265447,-1.0171564],[-0.27922088,0.047959074,-0.4585162,0.43318775,-0.022253482,0.6992371,0.366425],[-1.2182665,0.30541417,0.54548246,-0.82654715,-0.86802375,0.36274722,-1.2755734],[-0.55027056,0.3726949,0.29450348,-0.663457,-0.28297377,-0.7872144,-0.77983695],[-0.29113156,-0.57935303,-0.07371765,0.569743,-0.046916172,-0.095878035,-0.24269529],[-0.4188927,0.2442818,0.6791062,-0.24187906,0.8024283,0.36645007,0.15694125]],"activation":"σ","dense_2_b":[[-0.13162552],[0.14610669],[0.06542088],[-0.008890042],[-0.25142753],[-0.13560805],[-0.25826016],[-0.17347474],[-0.1645501],[0.07222336],[0.059977163],[-0.32542986],[0.18807274]]},{"dense_3_W":[[0.57400185,-0.65310407,-0.026245644,-0.21171129,-0.0046483884,0.5902724,-0.07411066,-0.13533744,0.33003673,-0.23319454,-0.7222472,-0.062199857,-0.31266594],[0.08517949,0.10523219,0.17653435,0.22985537,0.03910563,0.48629716,0.024153559,-0.2307055,-0.5041997,-0.12600066,-0.1328216,0.066026025,0.2542358],[-0.07466326,0.03751704,0.34207597,0.08640459,-0.55675924,-0.43693897,-0.5372613,-0.67614335,-0.008879703,0.5449217,0.60687166,-0.079967305,0.23276323]],"activation":"identity","dense_3_b":[[-0.057068646],[-0.010597932],[0.064764485]]},{"dense_4_W":[[0.7126766,-0.056579176,-0.97978544]],"dense_4_b":[[-0.058505826]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'x9axc0x04x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'x9axc0x04x00'.json new file mode 100755 index 0000000000..e20bbbb102 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020 b'x9axc0x04x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.236228],[0.9541643],[0.46896935],[0.037251],[0.942408],[0.94659024],[0.95044875],[0.9528363],[0.95431703],[0.9549371],[0.94726866],[0.037057787],[0.03711012],[0.037162427],[0.037273765],[0.03735724],[0.03742994],[0.037366863]],"model_test_loss":0.01245664618909359,"input_size":18,"current_date_and_time":"2023-08-10_22-36-02","input_mean":[[23.454796],[0.043741453],[-0.009617127],[0.008929559],[0.048594497],[0.0470797],[0.04575023],[0.04157434],[0.037163395],[0.031240081],[0.02667783],[0.00891148],[0.008930276],[0.0089419745],[0.0089975605],[0.00889156],[0.008654451],[0.008377715]],"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.08725138],[0.62947553],[0.55281675],[0.47698602],[-0.010579495],[0.5603157],[0.121154435]],"dense_1_W":[[0.010149323,0.0927383,-0.049159903,-0.92321444,0.5301868,1.6467744,-0.34752372,-0.7960734,-0.23776174,-0.47925645,0.85876715,-0.12972605,0.07995605,0.4340685,0.24205516,0.10737243,-0.12019449,-0.15221375],[0.06681955,-0.8268898,0.08758739,0.8848569,-0.36724785,-1.2158617,1.1197345,0.067235485,0.035998013,0.15957934,-0.3456709,0.58034456,0.4314829,0.35206887,0.54623073,0.46871477,0.18022528,0.060644507],[1.5824217,1.7102716,3.6078386,-0.0684419,-1.5800762,-0.6593468,-1.0315231,-0.30346423,1.6339799,1.228651,-0.4846987,0.3710236,-0.4006895,-0.34770697,0.8819552,-0.5398949,-0.32821923,0.17143293],[1.303329,-2.1399665,-3.1076748,0.23288973,2.0736525,1.078245,1.2427267,-0.34367758,-2.3364317,-1.4993668,1.4313731,0.25981635,-0.069500186,-0.007198234,-1.0189565,0.4751188,0.6546988,-0.30582112],[0.0036950526,0.04958046,-0.041147415,-0.23472723,0.24974303,-1.5454353,1.8054543,-0.6608297,-0.26494673,-0.4223114,0.47601548,0.24096386,-0.38269913,-0.12060513,0.5988521,0.036612313,0.05911714,-0.14717643],[0.08024163,1.0550786,0.07653441,0.4824589,-0.5017987,0.01434394,-1.376971,-0.131279,0.006976325,-0.22164595,-0.06650469,0.74893504,0.41389975,0.5270169,-0.2144425,0.6345238,0.68122786,-0.1719554],[-0.07933006,2.3567731,0.0042914962,0.74784595,2.28212,2.9230127,0.23938161,1.0576327,0.23800474,0.61905783,0.1781994,0.63615847,0.0073392615,-0.002428518,0.5748812,-0.15760459,-0.54738325,-0.36927438]],"activation":"σ"},{"dense_2_W":[[-0.21508381,0.9633951,0.5315358,0.92654145,0.28553194,0.039701536,-0.18630505],[-0.1678206,0.207308,0.40976796,0.08400935,-1.1243716,0.39975542,-0.330028],[-1.1226933,0.52033097,1.0243174,-0.62620866,1.505394,-0.3176458,-0.777051],[0.693296,-0.28314844,0.4684673,0.17668417,-0.82024777,-0.012310348,-0.5580614],[0.24386548,-0.4684305,-0.25006077,-0.4782456,-0.47599876,0.5501203,0.062193394],[-1.3514801,0.9189132,-0.7240175,-0.28889558,-0.18423705,-0.08741435,0.24606031],[-0.67244714,0.47862688,-1.0843797,-1.111484,0.4975643,-0.52863014,-1.5702293],[0.06620587,-0.3826648,0.0595068,-0.31371126,-0.9359945,0.5710785,0.30018663],[-0.08168836,-0.51131517,-0.073826596,-0.008216051,-0.54347867,0.20297381,-0.6430736],[0.4543929,-0.49646172,0.43142736,-0.66066104,-0.23015887,0.028297924,-0.05720952],[-0.52589,0.61320555,-0.7472295,0.4251358,0.8921376,-0.78721434,0.28226647],[-0.711873,0.25582448,0.14650942,0.4705447,0.64871144,-0.113993205,-0.037552968],[0.41052327,0.18220364,0.35270774,-0.49306205,-0.956854,0.4278162,-0.03011779]],"activation":"σ","dense_2_b":[[0.10105641],[-0.09731066],[0.0055902563],[0.15583935],[-0.1778042],[-0.31665945],[-0.35505518],[-0.011538101],[-0.15872312],[0.123221055],[-0.20084055],[0.12061009],[-0.092269965]]},{"dense_3_W":[[0.34495553,-0.52540576,0.48382422,-0.21559586,0.16588818,0.4986695,0.7247998,-0.20436342,-0.21009935,-0.33020142,0.42502496,0.23494504,-0.6989969],[-0.43483838,-0.16045101,-0.7069782,0.6482748,0.6546552,0.19802035,-0.19270848,0.603569,0.15212789,0.32036832,-0.1777731,-0.59341335,0.37551636],[-0.23369972,-0.018393897,-0.23587896,0.03520326,-0.4262701,0.34585303,0.126404,-0.4852999,0.50604486,0.18693419,0.6988773,0.2218146,-0.40111375]],"activation":"identity","dense_3_b":[[-0.077010185],[0.06201826],[-0.041295182]]},{"dense_4_W":[[-0.8782402,0.5793239,-0.13800435]],"dense_4_b":[[0.0672247]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020.json b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020.json new file mode 100755 index 0000000000..56091f65a9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU IMPREZA SPORT 2020.json @@ -0,0 +1 @@ +{"input_std":[[8.894573],[1.1526463],[0.49937436],[0.04181223],[1.1407756],[1.1450312],[1.1480577],[1.1401104],[1.123895],[1.1006547],[1.071595],[0.0416507],[0.041704524],[0.041748393],[0.04176903],[0.041703388],[0.041490186],[0.041185617]],"model_test_loss":0.013009187765419483,"input_size":18,"current_date_and_time":"2023-08-10_21-20-07","input_mean":[[24.805859],[0.0049672336],[0.0013684959],[-0.001192497],[0.0036358428],[0.0034303954],[0.004092047],[0.005534218],[0.0066732266],[0.004927845],[0.0062723476],[-0.0012077604],[-0.0011977365],[-0.0011862671],[-0.0011791526],[-0.0012019373],[-0.001338799],[-0.0015223476]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.042427626],[-2.5019999],[-0.0457297],[-0.7153923],[-0.7774993],[-0.06926592],[-2.4368992]],"dense_1_W":[[-0.0009291319,0.27767056,-0.07892523,-0.059060324,1.0241088,1.171279,-0.069413096,-0.12784159,0.058901682,-0.18805476,0.4193225,-0.3469123,0.42202514,-0.36080348,-0.7251315,-0.3008201,-0.033229448,-0.49506444],[-0.40471604,0.11814647,-0.1926038,0.0060851052,-1.1522694,-1.2816894,1.9390084,-0.5257205,-0.2785602,-0.118004374,-0.020688536,0.07099932,-0.389517,0.20363228,-0.030239882,0.6832831,-0.015321787,-0.26263818],[-0.00991332,-2.1251974,-3.9875517,0.5100302,2.949812,0.787714,0.90843993,-0.38894913,-2.0025148,-2.1428773,1.4694284,-0.76132494,-0.45982483,0.11538664,-0.18600582,0.46312463,0.7552948,-0.31822762],[-0.46726972,-0.9092647,1.3574834,0.18761194,-0.81670135,-1.0397257,1.2560849,-0.21459231,-0.1436863,-0.16160814,0.41930124,-0.32464686,0.17093562,-0.20039976,0.055896353,-0.4330081,0.52754503,0.12463856],[-0.5152346,0.50216174,1.3355443,-0.31773502,-0.46232986,-0.13133429,-1.4018828,-0.43890733,0.06662451,-0.043737113,0.3108043,0.19670644,-0.093163505,-0.28796571,-0.051473662,0.24918097,0.38881204,0.02669732],[-0.02088246,2.2406785,-0.22520858,-0.70286745,2.008803,1.9785228,0.02844807,0.97084755,0.49748123,0.7884559,0.14848712,0.87087315,0.40047103,-0.21100943,-0.21773107,0.57993966,0.16083455,-0.54391414],[-0.3943676,-0.26845726,0.19103855,0.21092215,1.200674,1.3899878,-2.1009598,0.73901653,0.24895392,0.09445688,0.020025935,-0.21680212,0.3247223,0.046129495,-0.4636503,-0.37354514,-0.05204169,0.26103115]],"activation":"σ"},{"dense_2_W":[[-0.29813394,0.97317356,0.18235527,0.5965462,-0.36117476,-0.357781,-0.6302886],[0.4669501,-0.26381913,-0.6718241,-0.55993664,0.75606084,-0.22786976,0.54741734],[0.45668933,-0.81978554,-0.4400848,-0.47736016,0.9749981,-0.41887143,0.5611882],[-0.23562466,-0.33685845,-0.63146794,-0.25962546,0.7455925,0.050860852,0.47903395],[0.11492595,0.39062494,-0.5413327,-0.040900126,-0.17837498,0.06629638,0.052479822],[0.3525208,0.28856075,-0.14136873,0.6413087,-0.51915973,-0.2774327,-0.9177848],[-0.17333238,0.8689579,-0.28932738,0.566288,0.11427143,0.06013824,-1.1550378],[-0.5458432,0.5894391,-0.047653124,0.15687895,0.33795092,-0.5042759,-0.22974871],[0.49124256,-0.7596094,-0.17393427,-0.37332547,0.025444454,0.34669602,0.47311735],[0.31282023,-1.2118286,0.017776541,-0.91698223,0.24819252,-0.0926613,1.2513487],[0.33180416,0.23580849,0.46787393,-0.09696695,-0.25229496,0.3558893,-0.6826248],[0.42314368,0.07992972,0.4903785,-0.3677389,-0.38366356,-0.34357548,-0.33236912],[-0.37016624,0.46486557,0.060417723,-0.48779157,0.024656558,-0.38848272,0.0547722]],"activation":"σ","dense_2_b":[[-0.0017060944],[0.016006682],[0.13619791],[0.01692232],[-0.2458614],[-0.01584404],[-0.11229285],[-0.037353944],[-0.0535534],[0.023917647],[-0.08311039],[-0.05629295],[-0.21274085]]},{"dense_3_W":[[0.4620643,0.1110241,-0.73991674,-0.04964699,-0.49397373,0.636488,-0.21777737,0.45773318,-0.31195316,0.26977688,-0.015185564,-0.0892626,-0.50908834],[-0.45361328,0.48187032,0.123036705,0.6407995,-0.29581347,-0.18150009,-0.42016354,-0.3740721,0.5890714,0.49763745,-0.43375558,-0.2785329,-0.33093747],[-0.034139745,0.07872775,0.14715545,0.5339573,-0.10824458,0.07166932,-0.20306881,0.021034054,-0.44093442,-0.24978448,-0.026970783,-0.16316907,-0.21309401]],"activation":"identity","dense_3_b":[[-0.012436828],[0.029966448],[0.10008727]]},{"dense_4_W":[[-0.48937565,1.0721666,0.037118435]],"dense_4_b":[[0.023898797]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU LEGACY 2015 - 2018.json b/selfdrive/car/torque_data/lat_models/SUBARU LEGACY 2015 - 2018.json new file mode 100755 index 0000000000..14e1e1d95e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU LEGACY 2015 - 2018.json @@ -0,0 +1 @@ +{"input_std":[[9.750777],[1.3186632],[2.4594376],[0.034155015],[1.3260336],[1.3216915],[1.3177336],[1.3116305],[1.2217928],[1.1049051],[0.97790134],[0.03409643],[0.034110934],[0.03412991],[0.03416529],[0.034136374],[0.03408451],[0.034057345]],"model_test_loss":0.02841777540743351,"input_size":18,"current_date_and_time":"2023-09-02_22-47-37","input_mean":[[17.672829],[-0.0015280318],[0.0008010262],[0.021118881],[0.0008383113],[-0.0005000338],[-0.0014255784],[-0.001504001],[-0.00013831415],[-0.0043903766],[-0.004224954],[0.02113117],[0.021122888],[0.02112144],[0.021065863],[0.020995975],[0.020819707],[0.02090924]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.4262147],[0.29442513],[0.13858001],[-3.6157753],[0.11054395],[-0.096514955],[-2.7481675]],"dense_1_W":[[-0.59550166,-0.08087835,-0.10044884,-0.030051881,-1.0114387,-0.7159067,1.0509298,-0.4646438,0.254099,0.27775934,-0.30958077,-0.2699965,0.020533659,-0.021311773,0.45812935,0.20583425,-0.17345557,-0.12265345],[-0.1814759,-2.6059172,0.027335435,0.031072548,1.9576696,1.9464822,1.3979335,-3.122393,-0.40338284,-0.811746,0.915118,-0.2758879,-0.018445456,0.10923238,0.3439007,-0.3658017,0.17968847,0.0085251825],[1.2159636,0.50295633,-0.29685062,0.10249312,-1.1345159,-0.60397,0.9025859,-1.4166268,-0.34669524,0.31230232,0.03311125,-0.4099096,0.22891928,0.0058932696,-0.03164047,0.28680435,0.056274787,-0.21163589],[-2.1782408,-2.652491,-0.6163189,0.014259274,0.46644354,-0.07303462,-0.16025148,-1.9173824,-0.34420478,0.248388,0.23158954,0.038577884,0.08229089,0.039497472,-0.21905439,-0.31795323,0.80569685,-0.35556743],[-0.39873397,1.0991853,-0.15771712,-0.44371212,0.6436306,0.014177862,-0.9923157,1.1680098,0.09227359,-0.3646184,0.17011096,0.10480483,0.5100492,-0.115318246,-0.6804572,0.09150676,0.35543084,-0.04518636],[1.815469,0.7312476,-0.32006833,-0.47156325,-0.8404111,0.18205363,-2.1965184,-1.2279189,-1.0787835,0.2947485,0.085848495,0.06514893,0.41874364,-0.2661748,0.28740934,0.4390194,-0.31817436,0.0123811625],[-1.3422207,4.2687964,-0.25304475,0.53945225,-1.3436658,-1.9831376,-2.5219822,2.4054382,-1.2978123,0.42630863,1.098409,-0.47248852,-0.705663,0.60417634,0.0360486,0.5381174,-0.0367325,-0.60039526]],"activation":"σ"},{"dense_2_W":[[0.6287387,0.6726734,1.2156233,0.14890462,-0.7355616,0.36218125,0.14466967],[-0.74637365,0.3812475,-0.6406179,0.28641817,-0.20450425,0.32207528,-0.3226913],[0.06755054,-0.27992728,-0.70488316,-0.25441137,0.31789666,0.04202117,0.4387319],[-0.1773071,-0.06993977,-0.67512244,-0.46879476,-0.2630911,-0.7062165,-0.45115414],[-0.6238654,-0.26688075,-0.6413995,-0.30508804,0.62488157,0.15856849,-0.036961198],[-0.30532292,0.023894563,-0.0064119864,-0.105837554,0.01626758,0.14256619,-0.60051453],[0.013258742,-0.17537804,-0.44187704,-0.03241884,0.571268,0.39274576,0.042168505],[-0.6181693,-0.27180657,-0.44550276,-0.00063514145,0.47017303,0.1071446,0.4154284],[0.3637543,0.29671773,0.32823008,0.29629824,-0.551112,0.14014855,-0.46638033],[0.588223,0.1280512,0.3159679,1.2631085,-1.279261,-1.4572979,-0.2884451],[0.08316952,-0.2914584,-0.76872176,0.22730377,0.02180895,0.13148995,-0.5355329],[0.6056482,2.9128945,-0.027976673,0.84820426,-0.9162752,-2.0459216,-4.1563354],[0.03169041,-0.17865568,-0.2586998,0.10826119,0.071472034,-0.3774936,0.22949137]],"activation":"σ","dense_2_b":[[0.015828583],[-0.088196956],[-0.09036952],[-0.1230372],[-0.055517223],[-0.119829975],[-0.08279668],[-0.04842878],[-0.2312968],[-0.60610735],[-0.10119338],[-0.82878107],[-0.119595364]]},{"dense_3_W":[[0.4161587,0.39951083,-0.0774412,0.24522696,-0.6132204,-0.09533373,-0.47129297,-0.41050985,0.23757468,0.23466793,0.1497136,0.592779,-0.14382078],[0.10526708,-0.5690179,-0.44247043,-0.37303323,-0.45616138,0.17351544,0.47270444,-0.49300864,-0.013277441,-0.06569539,-0.5149398,-0.006244119,0.17057294],[0.6019824,-0.120864384,0.43110284,-0.51825607,-0.12548478,-0.4957451,-0.4877988,-0.39608762,0.053494465,0.6998196,0.01679197,0.4730759,-0.08663315]],"activation":"identity","dense_3_b":[[0.095762156],[0.09659323],[0.09680739]]},{"dense_4_W":[[-0.63916916,-0.8716667,-0.6933614]],"dense_4_b":[[-0.09472361]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU LEGACY 7TH GEN.json b/selfdrive/car/torque_data/lat_models/SUBARU LEGACY 7TH GEN.json new file mode 100755 index 0000000000..33a50713eb --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU LEGACY 7TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[9.185515],[1.6282288],[0.35043508],[0.031132786],[1.7255819],[1.6982063],[1.6648296],[1.4761653],[1.3519272],[1.2236267],[1.1229782],[0.03105924],[0.031098329],[0.031127678],[0.031184744],[0.031371836],[0.031613626],[0.03144637]],"model_test_loss":0.04537874087691307,"input_size":18,"current_date_and_time":"2023-09-02_23-19-34","input_mean":[[16.421978],[-0.048192535],[-0.013311911],[-0.030576248],[-0.05147835],[-0.051736772],[-0.051158622],[-0.051310074],[-0.056091797],[-0.051997066],[-0.04342065],[-0.030474063],[-0.03050476],[-0.030556701],[-0.030765096],[-0.030835558],[-0.0308675],[-0.030843992]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.0047161067],[-0.15242413],[-2.1423926],[-3.0072546],[-0.8894896],[1.5538071],[-1.542048]],"dense_1_W":[[-0.012829974,0.30741772,-0.03263021,-0.085545234,1.1814696,0.5471415,0.9120527,-0.33152023,0.5066247,-0.5210931,0.5341946,0.09236861,-0.39759701,0.02910307,-0.00886832,0.41334194,-0.23273322,0.016523872],[0.047321085,-0.15492304,-0.077865265,-0.804299,-3.377934,-3.6115973,-2.283943,5.437118,2.2738755,-0.043271527,0.16104881,0.112040475,0.5114801,0.093201585,0.13260198,-0.2661622,0.1796879,0.04888338],[-1.5367671,2.3720562,-0.02027605,-0.025416356,-1.4381312,-0.9349471,0.24836966,1.367659,0.3289632,-0.055137575,0.12185219,0.45477563,-0.30157885,-0.07613766,0.12895256,0.12588494,-0.1591801,-0.22217746],[-1.3666407,-3.5649407,0.02042984,-0.38937125,1.3380835,1.9989939,-0.20659405,-1.5160191,-0.104439735,0.062092394,-0.15397424,0.093930446,0.3034801,-0.30530134,0.041498467,-0.06435006,0.07080854,0.327221],[0.8026996,-0.44736055,-0.050972164,0.20318426,-0.8092374,0.24752559,0.32302567,-0.094395876,0.22440033,-0.17859897,0.11948998,-0.26337075,-0.27740997,0.18380176,0.30512437,-0.06352904,0.14718251,-0.17162979],[2.457627,-1.4923394,0.028457003,-0.3990584,1.7863452,0.60998243,-0.42721242,-1.8455137,-1.4121356,-0.16493158,0.06486093,0.016970918,0.19106352,-0.2922308,0.05603943,-0.020587316,0.34736913,0.20459694],[1.1815331,0.36599845,0.06255039,0.0657659,0.4088365,0.41529664,-0.25315446,0.017450152,-0.30593964,0.3139144,-0.16692097,0.2685098,-0.086217225,-0.069303796,-0.12145663,-0.22734722,-0.023085613,0.11520361]],"activation":"σ"},{"dense_2_W":[[-0.5023888,-0.05802139,-0.66911775,0.296051,0.7713285,-0.18254815,-0.8283855],[0.44022453,-0.24643378,0.5062762,0.09133972,-0.45227736,0.05079313,0.06773168],[-0.6219036,-0.9433538,-1.0238923,1.3172559,1.1334529,0.6552401,-0.69087607],[0.6763754,-0.40709624,0.6232817,-0.1610244,-0.67904115,0.6493273,0.0906405],[-0.635346,0.0011620739,-0.37521043,-0.5111516,0.986075,-0.3832682,-0.14561039],[0.45462242,1.1686025,0.14032847,-0.9475063,1.0923766,1.6022182,0.2453258],[-0.32724923,-0.7897613,-0.9935628,0.802958,-0.08129205,-1.1719561,-0.7486108],[-0.22323135,0.66134214,1.1732999,-0.8910564,-0.95774484,-0.39924416,0.7293297],[0.29451057,0.15649314,0.27317175,-0.6156423,-0.5974088,-0.54637176,0.16324385],[0.39435184,0.47537956,0.44074118,-0.23361506,0.39577127,-0.44843742,-0.6463624],[-0.48006952,0.5896299,0.56584865,0.23956761,-0.61484444,0.47759032,0.35471997],[0.35922313,0.43721467,0.18760605,-0.351279,-0.6390551,-0.28927103,0.6187888],[0.073767446,-0.8790351,-0.68584126,1.1712487,-1.6569555,-1.2728544,-0.015573282]],"activation":"σ","dense_2_b":[[-0.09275836],[-0.13285246],[0.22685666],[-0.048346587],[0.04652798],[0.08532798],[-0.09150484],[-0.05462159],[-0.1709193],[0.219226],[-0.10487605],[-0.18386836],[-0.227306]]},{"dense_3_W":[[-0.31240308,-0.2003438,-0.49512723,-0.33559966,-0.11021345,0.423354,-0.36147565,0.46913844,-0.33863887,-0.33271542,0.5626256,-0.27749553,0.15109913],[-0.18263677,-0.16133335,0.554565,-0.3057925,0.50082487,-0.3123607,0.6251424,-0.6040641,-0.4718807,0.17380686,-0.2015293,-0.22039177,-0.13468805],[0.75125694,-0.24231063,0.33473507,-0.54747844,0.5980235,-0.27477667,0.7795829,-0.4155024,0.4370703,0.43257073,-0.10999617,-0.19784549,0.7787281]],"activation":"identity","dense_3_b":[[0.08514209],[0.12190986],[0.11714442]]},{"dense_4_W":[[0.08379805,-1.1299504,-0.99574506]],"dense_4_b":[[-0.117058024]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU OUTBACK 6TH GEN b'x9bxc0x10x00'.json b/selfdrive/car/torque_data/lat_models/SUBARU OUTBACK 6TH GEN b'x9bxc0x10x00'.json new file mode 100755 index 0000000000..83a9167915 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU OUTBACK 6TH GEN b'x9bxc0x10x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.572336],[1.1483445],[0.42820358],[0.048202544],[1.1448809],[1.1459116],[1.1458608],[1.1237723],[1.1024351],[1.0727179],[1.0412753],[0.047973968],[0.048014168],[0.04805022],[0.048102845],[0.04802677],[0.04776489],[0.04739827]],"model_test_loss":0.026644039899110794,"input_size":18,"current_date_and_time":"2023-08-10_23-31-10","input_mean":[[24.136143],[-0.042093538],[0.013022028],[-0.0036085332],[-0.0470961],[-0.0462333],[-0.04523365],[-0.040591415],[-0.036471754],[-0.03127247],[-0.027871577],[-0.0038120802],[-0.0037680487],[-0.003724908],[-0.0035597768],[-0.0034507068],[-0.0033237508],[-0.0032780103]],"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.05131335],[-0.22923447],[-0.014189909],[0.09295414],[-2.8221803],[2.6356938],[-0.1626522]],"dense_1_W":[[-0.0006246851,-1.937167,0.02453268,0.124314785,-0.07763876,-1.3915496,0.6514346,0.062224012,-0.3782371,0.045342997,0.0131263565,-0.07671119,0.2950009,0.5244766,0.24981722,-0.6029727,-0.1914875,0.17850396],[3.6474159,-0.3351425,-0.13860475,0.017950775,-0.5807133,-0.48789144,-0.33976758,-0.092757314,-0.5980742,0.16750406,0.022784369,-0.0036915683,0.2978329,0.22988808,0.5386405,0.8470415,0.41101706,0.8745821],[0.00071263144,0.34790343,-0.025052998,-0.2664853,0.1425834,-1.2502533,0.901666,-0.40636706,-0.07849224,0.18394355,-0.039707936,-1.0538421,-0.278847,0.80892915,0.6621467,0.35024366,0.22499272,-0.44423023],[5.855231e-5,2.4907784,6.5716834,-0.76951736,-2.4156885,-0.6084292,0.32178223,-0.12523341,0.017727956,2.4002576,-1.4535077,1.1310626,0.7982315,0.10428222,-0.34654096,-1.1077892,-0.17795445,0.20854695],[-0.6954145,0.84418166,0.0098673105,0.052796964,0.26646963,1.0693092,-1.161872,-0.3446245,0.8000167,0.6914431,-0.18510826,0.27281952,-0.013284309,-0.51565313,-0.14262609,0.20675737,-0.08539979,0.11145477],[0.68266046,0.9602112,0.009963625,-0.1402191,0.20056713,1.5516362,-1.738518,-0.2687681,0.82588196,0.6286699,-0.16402455,0.6550529,-0.15899514,-0.72548264,-0.29978648,0.7046594,-0.24264838,0.08307443],[4.025976,0.7285796,0.14887388,-0.6201622,0.13705282,0.47417828,0.4768622,0.35751063,0.19407505,0.7661748,-0.6106113,0.17202562,-0.2742306,0.21339923,-1.1030523,-0.35447115,-0.85436875,-0.7747486]],"activation":"σ"},{"dense_2_W":[[0.46410686,0.62191635,-0.062384292,-0.5430435,-0.695603,0.057965573,-0.52540386],[0.6584527,0.21343426,0.17701761,-0.69918996,-0.049447756,-0.037598107,-0.5069386],[-0.44375354,-0.26292452,-0.64291656,0.63415337,0.26265192,-0.11597562,0.15929869],[-0.812513,0.10907013,-0.8120618,-0.19890812,0.8949706,0.5529603,0.13160336],[0.1050679,0.5375794,0.6706402,-0.041373048,-0.6123938,-0.44150752,-0.34567338],[-0.40558782,0.11219362,-0.5137659,0.38914016,0.22155257,0.522915,-0.50805056],[0.63432807,-0.43097767,0.5424638,-0.31058156,0.0059383763,-0.3071036,0.523059],[0.34565827,0.36890084,0.48656797,0.107707486,-0.46674815,-0.2624921,-0.4052778],[-0.022453148,0.6077112,-0.5046755,1.402873,-0.6407784,0.8215227,0.25630465],[0.03767525,-0.2515635,-0.56157374,0.22053413,0.5938849,0.04716324,-0.55130476],[0.02723474,0.6362109,-0.7232292,-0.18455642,0.45341918,1.2936736,-0.802384],[0.06902041,-0.60314816,-0.22065936,0.08411181,-0.19968052,-0.4402093,0.5050189],[-0.58374166,-0.4504642,-0.1112549,0.46519062,0.15296236,-0.15458451,-0.00064379047]],"activation":"σ","dense_2_b":[[-0.014328261],[-0.034038804],[-0.056317214],[-0.025555097],[-0.023897748],[-0.27516785],[-0.03674292],[-0.04560086],[-0.13362178],[-0.17087862],[-0.1543581],[-0.063457526],[-0.20349929]]},{"dense_3_W":[[0.13543664,0.6195368,-0.43438953,-0.59657305,0.5921997,-0.14353473,0.44341394,0.5110973,-0.33468905,-0.41089338,-0.19091435,0.34869814,-0.3758429],[0.30076426,-0.21575679,-0.38356882,-0.036623813,0.2787459,-0.3038595,0.44368634,0.27318835,-0.63082767,0.14850685,-0.27673995,-0.14115706,0.30847898],[0.2674523,-0.39884198,0.21306512,0.41216707,-0.02011493,-0.04432381,0.3676808,-0.016420744,-0.40233457,-0.1554329,-0.009226843,0.43924707,-0.23986638]],"activation":"identity","dense_3_b":[[0.017441018],[0.01997646],[-0.017420627]]},{"dense_4_W":[[-1.0507979,-0.56773245,0.31234828]],"dense_4_b":[[-0.019663213]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/SUBARU OUTBACK 6TH GEN.json b/selfdrive/car/torque_data/lat_models/SUBARU OUTBACK 6TH GEN.json new file mode 100755 index 0000000000..b18169a8f7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/SUBARU OUTBACK 6TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[8.573654],[1.1484252],[0.42591482],[0.04835451],[1.1461933],[1.1471832],[1.1470121],[1.1214072],[1.0991943],[1.0701101],[1.0406059],[0.048127588],[0.048172023],[0.048212342],[0.048246387],[0.04816156],[0.0479336],[0.047585495]],"model_test_loss":0.026417279615998268,"input_size":18,"current_date_and_time":"2023-08-10_23-04-26","input_mean":[[24.135065],[-0.042271867],[0.014178805],[-0.0037389072],[-0.046595708],[-0.04610125],[-0.04491835],[-0.03922049],[-0.035844963],[-0.028552856],[-0.025264736],[-0.003948662],[-0.0038945172],[-0.0038410625],[-0.0036192732],[-0.003510406],[-0.003390137],[-0.0033347548]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.6313527],[0.21449536],[-2.8833015],[0.08015413],[0.14096457],[-0.4543409],[0.08164727]],"dense_1_W":[[0.4385407,0.63463783,0.060082484,-0.4217529,0.07332441,1.2808025,-0.9600021,-0.07368351,0.7437968,0.13603747,-0.09279282,0.636986,0.15792926,-0.5835893,0.2658865,-0.07900949,-0.060865946,0.10794351],[-0.006779099,2.004387,6.8607817,-0.23751183,-1.6587999,0.09422444,-0.4874676,-0.5578516,0.5310813,1.6710776,-0.91060466,1.1751448,0.7926426,-0.19524321,-0.49832276,-0.68435484,-0.74160784,0.2320687],[-0.42611358,0.49704134,0.061547905,-0.31928867,0.5029787,0.8141926,-0.7419139,-0.19156225,0.8684419,0.06434307,-0.030311767,0.6344357,0.23724514,-0.786067,0.063948646,0.2718977,-0.096927255,0.02907163],[-0.0020692998,-1.7009348,0.038647033,0.13782075,0.0035963166,-1.8036139,1.506227,-0.012708647,-0.3238854,-0.11025291,0.08421155,-0.47822404,-0.21775703,0.98227096,0.5762303,-0.2504151,-0.04809817,-0.23663491],[1.6555676,-0.24368818,0.047565427,0.48294827,-0.24731039,1.2580825,-0.6229123,-0.16432685,-0.1041179,-0.058522437,0.10651611,0.31825465,0.34657153,-0.9056155,-0.25984085,-0.22779177,0.15267563,-0.16960645],[0.0037644738,2.2035384,-0.26136458,-0.24882643,1.9434549,2.1926913,1.2461177,1.196908,0.7997137,0.6749713,0.168482,0.024462335,0.3614625,0.2324969,0.38785332,0.30951214,-0.15484615,-0.023371682],[1.6319045,0.20060556,-0.046149492,0.25747207,0.40403402,-1.5326216,1.2633929,-0.11975938,-0.27659348,-0.01779074,0.17242773,-1.23197,-0.16269825,0.64393556,0.27350065,0.7107626,0.2205556,-0.44941023]],"activation":"σ"},{"dense_2_W":[[0.688743,-0.23856077,1.3524743,-1.0059541,0.48964348,0.16091633,-0.8487965],[-0.8221493,-0.6588716,-0.39466858,0.70084,-0.7679724,0.19794145,0.25073692],[-0.3579931,0.12520991,-0.061575927,-0.33722153,-8.587289e-6,-0.65669745,0.36834475],[-0.4896118,0.09266889,-0.091803305,0.58836436,-0.09530183,-0.29224685,-0.11824604],[1.4330658,0.47080937,0.83529705,-1.4794953,1.1691287,-0.38773456,-0.850906],[-0.17573813,0.15940154,-0.0883046,0.14367807,-0.2713903,-0.58145833,0.1813966],[0.16333255,-0.5058434,-0.151819,-0.31104934,-0.48204994,-0.5709609,0.1097057],[-0.11952788,1.132746,1.7155647,-1.0979568,0.5267555,-0.32039446,-1.5178013],[-0.6666372,-0.6210934,0.08266941,-0.26039764,-0.58124655,-0.1659565,0.012729861],[-0.81480265,-0.19473615,-0.09725363,-0.25143594,-0.18920764,0.05540429,0.08028312],[0.30783543,0.53514826,0.6950099,-0.83681816,0.28347406,0.09319918,-0.9719728],[-0.5300102,-0.09198815,-0.17771126,0.35486326,0.044223923,-0.62166435,0.06565767],[0.2399586,-0.4612763,-0.2989993,0.13399556,-0.853747,-0.038706385,0.35972396]],"activation":"σ","dense_2_b":[[-0.35425124],[0.109308064],[-0.031559847],[-0.0003400682],[-0.21089287],[-0.2585232],[-0.19723703],[-1.0296504],[0.08535486],[-0.0011093448],[-0.38453248],[0.01864399],[-0.022892497]]},{"dense_3_W":[[0.16066022,-0.45942912,-0.5723236,0.33713955,0.5059241,-0.35243854,0.2291558,0.025299186,-0.2669662,0.21250063,0.36912894,-0.59875554,-0.45286608],[-0.3987386,-0.2368262,-0.4920192,0.64763784,-0.16727564,-0.56451935,0.29059148,-0.33601287,-0.3881739,0.27909118,0.092289515,0.09268704,-0.16298614],[0.29671025,-0.6581518,0.3455493,-0.5484271,-0.058288824,0.041621033,-0.29955027,0.52763146,-0.6336574,-0.5787685,0.54040813,0.41626728,0.18120344]],"activation":"identity","dense_3_b":[[-0.0040779626],[0.020526942],[-0.0043588714]]},{"dense_4_W":[[1.1190621,-0.49331972,0.6428077]],"dense_4_b":[[-0.005149732]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2016 b'8965B41051x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2016 b'8965B41051x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..dc9102a55c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2016 b'8965B41051x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.155588],[1.2222154],[0.51593876],[0.045921255],[1.2146778],[1.2164576],[1.2193325],[1.2000308],[1.184473],[1.1582026],[1.1294578],[0.0457375],[0.04576663],[0.04578905],[0.04568079],[0.04555454],[0.04528545],[0.044940177]],"model_test_loss":0.0077543435618281364,"input_size":18,"current_date_and_time":"2023-08-11_00-22-19","input_mean":[[25.38624],[-0.109525174],[-0.0071247322],[-0.008090862],[-0.108410954],[-0.11049666],[-0.11148748],[-0.11183658],[-0.110412374],[-0.111614786],[-0.109395765],[-0.008206939],[-0.008208384],[-0.00822236],[-0.008191385],[-0.0081957765],[-0.008351754],[-0.008558403]],"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.147119],[-0.7151291],[-0.06542077],[-2.6854012],[-2.9215784],[-0.6333571],[-0.3588006]],"dense_1_W":[[0.050412737,-0.7688983,0.051297277,0.20422332,0.29614073,-0.7492136,0.6221707,-0.28156716,-0.25521812,-0.04673187,0.27558443,-0.7143839,-0.37546682,0.5423986,0.43472832,-0.09003486,-0.1610108,-0.13676094],[-0.86945575,-0.066927284,-0.060515594,-0.049497765,0.37880427,-0.4104487,0.99254173,-0.24023093,-0.22767603,-0.14191294,0.21729311,0.27627876,-0.03367094,0.08543982,-0.105297364,0.16060211,-0.23347247,0.2110998],[0.041003693,0.0019961689,-0.011989706,0.2586212,-0.2982694,1.1390727,-0.09271339,0.011216761,-0.07928292,-0.31107566,0.30151826,0.32163844,-0.111424804,-0.111504324,-0.54352456,0.08193889,-0.09293932,0.1449024],[-0.6092506,-0.34562534,-0.19357689,0.102853455,-0.076768324,-0.9644875,0.3549321,-0.35967496,-0.16627687,-0.3403019,0.100230105,-0.4866395,-0.054948322,0.3741284,0.2193991,0.1279479,-0.07926067,0.061663166],[-0.5892953,0.5779403,0.18596417,0.027102116,0.23143159,0.8041496,-0.5180442,0.17604749,0.13967356,0.3647289,-0.08085053,0.4862775,0.16692553,-0.6730509,-0.07277034,-0.0592746,-0.21806034,0.08425947],[-0.9096294,-0.17975268,0.062644206,0.16992755,-0.027315069,0.18641698,-0.2329115,-0.40319765,0.0728141,-0.022310384,0.15630817,0.19813018,-0.10582375,-0.52104795,-0.120786585,0.1117218,0.06465282,-0.11865458],[-0.032926153,1.0616482,6.864475,-0.11564605,-0.14158455,-0.4117831,-0.76951504,0.10398355,0.7756398,0.61653835,-1.1051329,1.1516933,-0.017778216,-0.34992045,-0.15732552,0.10676282,-0.53930724,-0.00068106386]],"activation":"σ"},{"dense_2_W":[[0.607369,0.045042686,-0.90820694,0.69801354,-1.0983257,-0.2685714,0.34300095],[-0.67589545,0.1324981,0.14731272,-0.85306466,0.5206796,0.7536436,0.09453407],[0.6423009,0.57089245,-0.4761381,0.6488958,-1.2223575,-0.8009584,0.3689039],[0.29086414,0.10636214,-0.45522293,0.20708704,-0.15621087,-0.78096426,-0.048316985],[-0.3550279,1.0548292,-0.88649863,1.015021,0.2844367,0.20109054,-1.1682143],[0.965661,-0.14941974,-0.7082443,0.19087248,-1.4366155,-0.36316642,0.28074083],[-0.21697107,0.5959022,-0.7900999,0.34238023,0.22955489,0.51429254,-1.3292482],[0.02833417,0.38777432,-0.41333404,0.41482702,-0.6048467,-0.38053027,-0.03946799],[-0.122554004,-0.105075054,0.72700727,-0.087382294,0.37528226,0.65905285,-0.4292818],[-0.47591224,-0.3380254,0.6051541,-0.2619172,0.30789238,0.24751364,0.37409812],[-0.08474495,-0.46902463,0.37705857,-0.61829376,0.35094222,0.6649397,0.07235656],[-0.6540115,-0.46159643,0.66689605,-0.59667706,1.0229484,0.06419672,-0.12906657],[0.14077464,0.25589386,-0.705507,0.41406876,-0.5768568,0.08440071,-0.3479489]],"activation":"σ","dense_2_b":[[0.06355875],[-0.17415898],[-0.1774852],[-0.11819309],[-0.41535345],[-0.1463154],[-0.38811693],[0.09710054],[-0.05073436],[-0.11638209],[-0.14782049],[-0.102039225],[0.13234599]]},{"dense_3_W":[[-0.17214395,0.5678262,-0.11139721,-0.08668092,-0.27163222,0.13644972,0.52798116,-0.08823449,-0.5390309,-0.41089463,-0.5085388,-0.5108906,0.6503059],[-0.49004817,0.507694,-0.28311312,-0.27198496,-0.6048582,-0.32954597,-0.027210526,-0.598534,0.24722685,0.6126394,0.63478196,0.4942442,-0.35184625],[0.66657585,-0.16694659,0.27015567,-0.4425793,-0.12436591,-0.39648074,0.17227231,0.61576825,0.53334814,-0.54657924,0.16337119,-0.4853141,-0.29025096]],"activation":"identity","dense_3_b":[[0.07506834],[-0.027431693],[0.033431824]]},{"dense_4_W":[[-0.19975226,1.0868903,-0.14778052]],"dense_4_b":[[-0.030237392]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2016.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2016.json new file mode 100755 index 0000000000..9ae1f90bbb --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2016.json @@ -0,0 +1 @@ +{"input_std":[[7.154972],[1.2219579],[0.5249089],[0.04609643],[1.2129667],[1.2152725],[1.2187766],[1.1979939],[1.1835413],[1.1609851],[1.131695],[0.045940075],[0.04595876],[0.045979664],[0.04583899],[0.045701966],[0.045422513],[0.045092262]],"model_test_loss":0.008101926185190678,"input_size":18,"current_date_and_time":"2023-08-10_23-56-46","input_mean":[[25.387062],[-0.10944313],[-0.008544132],[-0.00804191],[-0.107888475],[-0.10920066],[-0.110173844],[-0.1106636],[-0.109646805],[-0.109096535],[-0.105106495],[-0.008129847],[-0.00813124],[-0.008141087],[-0.008092408],[-0.008060575],[-0.008140952],[-0.0083157625]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.016645644],[-0.11951427],[-3.1821578],[-0.0059933704],[2.8677177],[0.031116206],[0.20521815]],"dense_1_W":[[0.00011691521,-0.0047739935,-0.0046798335,-0.23095101,0.67633355,-1.4215347,0.22167856,0.0051140105,-0.14782095,-0.18156183,0.16303727,-0.81555355,0.058726236,0.5032197,0.574162,0.18640463,0.21730764,-0.22049814],[-0.00011825084,0.4686856,-0.009756203,0.35097203,0.10730735,0.94829154,-0.6940468,0.19106765,0.12124054,0.025897067,-0.02768527,0.53336066,-0.23076952,-0.3619648,-0.4279046,0.022291774,0.13861004,0.018763274],[-0.7304196,-0.08818808,0.56801623,-0.09857474,0.34234688,1.0349541,-0.33047348,0.61446273,0.32419196,-0.050662857,0.2637253,0.20039666,-0.47378713,-0.3956067,0.009646421,0.390048,-0.008849323,-0.2498262],[0.0060903383,-0.49549666,-0.01697434,0.22030751,0.020088006,-1.0179988,0.80875695,0.441826,0.09327719,-0.029645108,-0.40414256,-0.45891628,-0.2560797,0.59599686,-0.012949928,0.30637464,-0.16429852,-0.077907525],[0.70374584,-0.01092509,0.540549,-0.40865657,0.1392593,1.3607061,-0.68692255,0.6964351,0.19591267,0.18743542,0.12110344,-0.008305118,0.15106158,-0.94731086,0.56679606,0.27371135,0.24476646,-0.47326928],[0.003219834,-0.25791815,0.1770013,0.058168087,1.0995903,-0.48271948,0.2528091,-0.021289961,0.10542952,0.6813602,0.28741544,0.007509176,-0.5195496,0.22631004,0.0013342625,-0.17950559,-0.054088753,0.010088536],[0.012934697,-0.99158263,-7.329649,-0.14901392,0.7383594,-0.13131715,1.0090424,-0.52978915,-1.10985,-0.26590362,0.9192803,-1.023092,-0.21835378,0.3614904,0.39267102,0.17742208,0.27959663,0.0059155384]],"activation":"σ"},{"dense_2_W":[[-0.16192931,-0.46922514,0.20061032,-0.22314207,-0.3545485,0.24491267,-0.17598084],[-0.6500808,0.5197684,-0.086435065,-0.06399719,0.93517494,-0.32023647,-0.2368111],[-0.85317075,0.6300723,0.9634644,-0.26148096,-0.30289555,-0.27350643,-0.3997722],[-0.9474749,1.5257666,-0.58592016,-0.20490168,1.7460821,-0.54258883,-0.72248006],[0.61233485,-0.52019024,-0.20221208,0.75963235,-0.63291365,-0.16668685,-0.14107104],[0.5829932,0.20956525,-0.5917082,0.334232,-0.5782333,-0.37722242,0.111714475],[0.3291867,-0.077928744,-0.13658442,-0.25665778,0.35779083,0.36474347,-0.293335],[-0.121685565,0.24806523,0.18834944,-0.46779516,-0.31577477,-0.22564404,-0.23130432],[0.4297668,-0.03992685,-0.7625169,0.4358002,0.46087322,0.59285825,0.27673835],[-0.47832817,0.57294714,0.25306076,-0.7069487,-0.017084602,0.052525472,-0.30928266],[0.7133705,-0.19208045,-0.30594656,0.40949252,-0.268573,0.33327693,-0.09717502],[-0.5436785,0.2889737,0.51880294,-0.56072646,0.9260692,0.107343785,-0.1836568],[-0.936714,0.88693315,1.2621549,-0.7801531,-0.4495786,-0.3362016,-0.5123693]],"activation":"σ","dense_2_b":[[0.011130354],[0.04997472],[-0.18216753],[0.3452406],[-0.02403721],[-0.06878961],[-0.004139792],[-0.2698251],[0.015881905],[-0.16309522],[-0.029837111],[0.04389526],[0.0100675905]]},{"dense_3_W":[[0.59172153,-0.13653415,-0.40732333,-0.29746622,0.42562142,0.1004339,-0.005074904,0.06819323,0.40120095,-0.28921607,0.5362933,-0.52448,-0.6777314],[0.2645431,0.3248634,-0.5370929,0.124842614,-0.29716966,0.063039936,0.011938057,0.31424755,0.38555825,-0.09687765,-0.33130735,-0.3187058,0.33251473],[-0.19941787,-0.4079571,-0.42453167,-0.505169,-0.03318176,0.3900114,0.53974134,-0.019272683,0.004807314,0.32995415,0.29342985,-0.40301663,0.2627771]],"activation":"identity","dense_3_b":[[0.04678321],[-0.041011743],[0.04454892]]},{"dense_4_W":[[-1.0930591,0.32782602,-0.2925129]],"dense_4_b":[[-0.047076307]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2019 b'8965B07010x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2019 b'8965B07010x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..971abf4ae7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2019 b'8965B07010x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.3547435],[0.9349845],[0.3416719],[0.03020802],[0.9287519],[0.93094236],[0.9321697],[0.9195053],[0.90565664],[0.88330543],[0.85894924],[0.03025142],[0.030234234],[0.030215727],[0.030088654],[0.030025238],[0.029914714],[0.029875476]],"model_test_loss":0.007811516057699919,"input_size":18,"current_date_and_time":"2023-08-11_01-12-12","input_mean":[[27.099766],[0.021257939],[-0.009488095],[-0.0040843748],[0.024692915],[0.023505691],[0.0221261],[0.019820152],[0.016889216],[0.016442697],[0.016379314],[-0.0040564938],[-0.004047964],[-0.004046166],[-0.0040283427],[-0.0039906264],[-0.0039846366],[-0.0040857326]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.2157677],[-2.3838754],[3.0455196],[0.8014893],[0.07945207],[3.106963],[2.1556125]],"dense_1_W":[[1.1125633,-0.56988466,-4.0888886,-0.15938745,0.6582105,-0.46116465,-0.41639355,0.04232433,-0.59602994,-0.32990792,1.0122606,-0.49626034,-0.13254666,0.37965775,0.3581549,0.51340127,-0.18809582,-0.113844536],[1.1409476,-0.52942747,0.0009779995,0.17279683,0.42025048,-1.0194471,0.19619784,0.018046845,-0.05372719,0.19695577,-0.14354223,-0.35454744,-0.4519569,0.3006548,0.89002454,-0.13396992,0.37972572,-0.4401214],[1.3309811,1.4823053,0.2582569,-0.032915797,-0.28236762,0.4846734,-0.15269001,0.3552266,0.30250248,0.14145501,-0.27240917,0.4871061,0.5173212,-0.7224162,-0.27998483,-0.41258854,0.20030643,0.14221442],[0.7907197,1.6901718,5.3816576,-0.27129257,-1.145268,0.31147382,0.019620774,0.17815213,0.4287783,0.04148877,-0.8830161,0.44120663,0.42428204,0.22440527,-0.92130196,-0.22413124,-0.33906758,0.54252696],[-0.012449405,1.7189058,-0.011069483,-0.08866588,0.0305128,0.9370316,-0.35130048,-0.024127513,0.24698113,0.31200036,-0.14631376,-0.17734727,0.21231978,-0.45571813,-0.14337474,0.32901996,0.2770767,-0.34568372],[1.3784999,-1.3435363,-0.2745729,0.25279233,0.07493813,-0.42336947,-0.063481055,-0.31757474,-0.12468922,-0.118494295,0.1393878,-0.64342916,-0.024168873,0.13941756,0.21592365,0.3690261,0.13736965,-0.3378454],[-1.1883208,-1.0948199,0.0016973034,0.36374646,0.6156439,-0.702277,0.4276083,-0.17839254,-0.15477405,-0.0038111163,0.15055132,-0.24193537,-0.24351074,-0.2785849,0.9893942,-0.10433792,0.28482616,-0.3947434]],"activation":"σ"},{"dense_2_W":[[-0.41992396,1.2538254,-1.3762401,0.18826605,-1.2015911,1.0849522,0.95279044],[-0.554603,-0.46099252,-0.21578617,0.045173306,0.6597546,-0.67514,-0.10196972],[-0.062698506,-0.5813329,-0.4847704,0.3779744,-0.18567432,-0.012139243,0.13781239],[0.54706806,0.63951415,-0.85959625,0.06293286,-0.7042504,0.8421599,0.5909391],[0.46164697,0.4020649,-0.33452457,-0.014348776,-0.62764764,0.124300346,0.9453233],[-0.3903317,0.6063093,-0.43484682,-0.2860064,-0.8296564,0.7835651,0.21584539],[0.175473,-0.5825516,-0.22237642,0.07386135,-0.3432968,-0.3868117,-0.21827103],[-0.5004876,0.97018445,-0.43547085,0.36776522,-0.27490538,0.48544273,0.9886506],[-0.6295581,-0.7262303,0.18957756,0.4320069,0.15381597,-0.37602007,-0.3400327],[-0.18816905,-0.27860478,0.91212904,0.38390306,0.2492882,0.12610404,-0.27094096],[0.037768684,0.45618993,-1.6272914,-1.0754924,-0.6273605,0.48672768,0.96011865],[-0.33102858,-0.027864542,0.42045346,0.14589894,0.015219363,-0.13589944,-0.77460396],[0.17902899,-0.50285494,-0.4366347,0.16011943,0.070149496,-0.4917402,0.015056903]],"activation":"σ","dense_2_b":[[-0.22400843],[-0.01302815],[-0.03749996],[-0.11806751],[-0.11926077],[-0.09058484],[0.06280237],[-0.2770851],[0.030630045],[0.07445694],[-0.22077157],[0.09475054],[-0.29818374]]},{"dense_3_W":[[-0.010462812,-0.24828628,0.041264076,0.5696833,0.15721063,-0.0060403845,0.0508466,-0.10241195,0.11243323,-0.5261026,0.49312815,-0.60535157,-0.22609983],[0.66831225,-0.3054378,-0.1565705,-0.031996824,0.26015618,0.4501768,-0.6939041,0.5919593,-0.69475293,-0.031049775,-0.053406052,0.018912103,0.13819246],[-0.50486624,-0.55928755,-0.53656745,0.48358017,0.5427902,0.50403154,0.46978712,-0.30256158,-0.14531422,-0.0904506,0.031830106,0.5406881,-0.063055396]],"activation":"identity","dense_3_b":[[-0.068349525],[-0.07652613],[-0.057301868]]},{"dense_4_W":[[-0.72008973,-0.7991561,-0.02538519]],"dense_4_b":[[0.07405978]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2019.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2019.json new file mode 100755 index 0000000000..82716f590e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2019.json @@ -0,0 +1 @@ +{"input_std":[[7.541552],[0.9650358],[0.3616818],[0.0328642],[0.9578452],[0.96073836],[0.96248627],[0.9491477],[0.9337077],[0.908715],[0.8812584],[0.032887284],[0.03287074],[0.032852463],[0.03271584],[0.03264729],[0.032499015],[0.03240248]],"model_test_loss":0.008866102434694767,"input_size":18,"current_date_and_time":"2023-08-11_00-47-36","input_mean":[[27.210583],[0.020935686],[-0.008948258],[-0.0069724205],[0.023982191],[0.02277414],[0.021633722],[0.018200217],[0.016092353],[0.01634521],[0.017552482],[-0.0069776564],[-0.0069683734],[-0.0069624],[-0.006934479],[-0.006922422],[-0.0069089876],[-0.0069400943]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.13328256],[-0.19930688],[1.0697682],[-0.5783517],[-1.5640957],[-0.92074555],[0.96863127]],"dense_1_W":[[-0.06047806,0.59424174,0.13268892,-0.21197622,-1.1050072,1.247896,-0.24135092,0.1444364,0.14218198,-0.2759823,-0.18579857,0.7423415,0.22738951,-0.2590543,-0.6573962,-0.107646905,-0.07558396,0.037075613],[-0.058194548,1.2433497,5.1614676,-0.020125298,-0.25091216,0.578058,-0.16740562,0.6148966,0.31894976,-0.42848128,-1.5423061,0.5142165,0.0080127595,-0.24593866,-0.23782809,-0.28146613,-0.10563642,0.2612805],[0.7431013,-0.52715963,-0.0064738155,-0.08120712,-0.10666046,-0.039603,-0.2889496,-0.27379817,-0.18491645,-0.2114326,-0.031808507,0.067143545,0.24152419,-0.46100402,0.12406786,0.5035436,0.19000971,-0.40269852],[-0.093319766,-3.5038989,0.026366359,-0.10428085,-1.5910784,-2.6836565,-1.729896,-1.2727953,-0.6854482,-1.3142506,-0.82473946,-0.24805659,0.30157104,0.10064682,-0.2649021,-0.45221263,-0.003649908,0.3906365],[-0.19653389,-1.1956127,-0.0013261554,0.20242849,0.5268085,-1.1662431,0.5995818,-0.21107472,0.035844564,-0.37587917,-0.010125557,-0.5800509,0.2748382,0.28321275,0.2552108,-0.22593613,0.1699103,-0.20041217],[-1.6779865,0.010922188,0.2911208,-0.18096207,0.6596778,-0.7872427,1.278464,0.4307826,-0.2584428,-0.3280948,-0.16272934,-0.3561698,0.31419376,0.30760053,0.45000735,-0.60065556,0.07380751,-0.7342767],[0.22576395,-1.2693808,0.00051059003,0.22724408,0.53528285,-1.052841,0.42936927,0.15097113,-0.21617922,-0.10659611,-0.13288835,-0.32452956,-0.29022405,0.43584242,0.565457,-0.4026171,0.10766105,-0.16005303]],"activation":"σ"},{"dense_2_W":[[0.40149835,0.36675823,-0.29831505,0.37289986,-0.6039201,-0.027274264,-1.1339715],[0.95495695,-1.3851566,0.358178,0.49656358,-1.2546502,-1.3234615,-0.39220563],[-0.84305114,0.33130413,-0.39270082,0.1366223,0.8356403,-0.71874714,0.6702931],[0.32502848,0.22423606,-0.3198426,0.69494843,-0.84058,-0.57765996,-1.1503054],[-0.55475,-1.0512786,-0.467161,0.23049785,1.171586,0.24218969,-0.14599386],[0.27919522,-0.6080323,0.83328724,0.4167502,-0.11279212,-0.19312277,1.0808055],[-0.98002326,-0.06683307,0.073704205,-0.7713237,0.36600292,0.32792312,-1.2809395],[-0.099299915,0.7157585,-0.69559073,-0.74590826,0.03745077,0.67139316,-1.3220712],[-1.1977009,-1.1743606,-0.8824673,0.82422435,1.4812046,0.54254943,-0.24748902],[-0.94787806,0.20738822,-0.0680158,-0.47344378,0.016936,-1.4717607,0.38640186],[-0.27705613,0.5600628,-1.2770342,-1.2288101,0.3837186,0.54160005,-1.0739172],[1.0531577,0.14682527,0.31090853,-0.22525707,-0.51124835,-0.16686235,-0.69970435],[0.54132354,-0.55377156,0.16552292,0.4777185,-0.91318285,-0.39976725,-0.8804106]],"activation":"σ","dense_2_b":[[-0.15207723],[-0.4524892],[-0.31112808],[-0.14511883],[-0.2907099],[0.035733145],[-0.59132564],[-0.091714524],[-0.3527001],[-0.18239608],[-0.123493806],[0.0051953667],[-0.010544346]]},{"dense_3_W":[[0.39324093,0.2485198,0.08692321,-0.18120968,-0.0657239,-0.034891907,0.5671789,0.31177345,-0.93040633,0.09452528,-0.25895926,-0.034117304,0.25137582],[0.25416353,0.0061438996,0.28148532,0.6699385,-0.74332523,-0.50077397,-0.46912852,0.711142,-0.830241,0.33939067,-0.19935456,0.069085754,0.578044],[-0.30625167,-0.4704901,0.5801462,-0.38525173,0.31889287,0.25167635,-0.11409451,-0.62698126,0.7056928,0.44565654,-0.42508173,-0.60673165,-0.41772822]],"activation":"identity","dense_3_b":[[-0.068453945],[-0.056202423],[0.09645773]]},{"dense_4_W":[[0.16098852,0.15347017,-0.7822183]],"dense_4_b":[[-0.068720676]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2022 b'8965B41110x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2022 b'8965B41110x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..95fdae0f2d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2022 b'8965B41110x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.376161],[1.2838221],[0.5474099],[0.04934304],[1.2836047],[1.2821697],[1.2806356],[1.258706],[1.2369865],[1.2116693],[1.183833],[0.049019773],[0.04906449],[0.049113937],[0.049148172],[0.049036138],[0.048767343],[0.048263323]],"model_test_loss":0.008681067265570164,"input_size":18,"current_date_and_time":"2023-08-11_02-26-47","input_mean":[[23.067476],[-0.03387557],[0.0021314505],[-0.00026479672],[-0.0335918],[-0.03408871],[-0.034120698],[-0.033429306],[-0.03334599],[-0.035154633],[-0.03337258],[-0.0003344364],[-0.00031001537],[-0.0002858812],[-0.0002081701],[-0.00014168753],[-0.00010316148],[-0.0001947083]],"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.00035714143],[-0.44112498],[-2.0768487],[0.033623725],[2.3311365],[-0.2579414],[0.068420805]],"dense_1_W":[[-0.00509446,-0.23187363,-1.2282524,-0.8727873,-0.20932141,0.4933777,-0.6846191,0.32296148,0.60479945,-0.27046466,-0.14131822,-0.012867556,0.5326964,-0.12989101,0.29854774,0.2623998,-0.22680795,0.051163733],[-0.059410393,0.43026504,0.010004543,0.2136965,-0.26893613,0.8620313,-0.18596862,-0.13626388,-0.107266344,-0.1622253,0.22793797,0.35623074,-0.27369574,-0.48247203,0.1288161,-0.14182153,0.17263421,-0.15390971],[-0.64431036,0.55822396,-1.3443316,-0.12504154,0.01676618,-0.694321,0.6168717,-0.6036482,-0.25818932,-0.11348284,0.24836093,0.107356064,0.13224693,0.04477359,-0.029285533,-0.43488002,-0.15231457,0.32518724],[0.048481237,0.42892945,0.026479786,0.108767025,-0.73508763,1.1185008,-0.38002115,0.03620541,0.086171456,0.061443076,-0.08954377,0.7163156,-0.22313805,-0.4416368,-0.18677765,-0.29935995,-0.004914676,0.18798521],[0.6947259,0.22686858,-1.3395145,-0.026273083,-0.024484975,-0.63676757,1.010914,-0.69115335,-0.47127905,0.24076219,0.13991874,0.05702926,-0.38383457,0.4660129,-0.15360665,-0.10321115,-0.20715226,0.20123789],[0.015787806,0.48204544,-0.021891365,0.12252965,0.067283645,1.2190595,-0.67878187,-0.18536092,-0.18721336,0.10465234,0.14439303,0.15279837,0.07980276,0.09336658,-0.8014295,-0.043885637,-0.058773834,0.113214575],[0.0014229139,-1.1489844,-3.6802135,0.37640184,1.4294708,-0.076660365,0.3178863,-0.64991164,-0.70733184,-0.21969552,0.770838,-0.26442793,-0.2161789,0.15546018,-0.12903892,0.17621045,-0.28502613,0.11893793]],"activation":"σ"},{"dense_2_W":[[-0.54397076,-0.540163,-0.5861562,-0.557604,-0.49618587,0.10378188,-0.11437754],[-0.41089043,-0.41863373,-0.26381302,0.06044076,0.28395495,-1.129064,-0.59406483],[-0.7494169,-0.08572868,0.52618885,-0.5607684,0.39462608,-1.169383,-0.1503176],[0.4045638,0.70051044,-0.5056532,0.6174259,-0.5292022,0.26922572,-0.424674],[-0.27162388,-0.9250028,0.26857534,-0.01561676,0.5560947,-0.33507198,-0.16067682],[-0.5384087,-0.64021826,-0.31936148,-0.2864999,0.42469084,-0.5843407,0.030071743],[-0.80377173,-0.5939738,1.089976,-0.60083944,-0.96987534,-1.6227651,0.9416666],[0.40233278,0.16919671,-0.42055172,0.41217375,-0.26429188,0.31943977,0.2621414],[0.0319197,-0.45274907,-0.0022422147,-0.6616981,0.45422152,-0.74961704,0.64761114],[0.298545,-0.08646255,0.16982067,0.49902782,0.06976334,0.75716037,-0.17437762],[0.12613215,0.7822465,0.19383484,-0.011980963,-0.5947784,0.040464688,-0.67411786],[-0.27101958,0.011575684,-0.007966585,-0.32394916,-0.23960575,-0.05978105,0.3404521],[-0.07279379,0.53345263,-0.46249855,0.589232,0.4325604,0.32934994,0.050769333]],"activation":"σ","dense_2_b":[[-0.27212226],[-0.03061088],[0.223251],[-0.1398213],[0.024589097],[-0.05151826],[0.1156625],[-0.07707154],[0.17189187],[-0.07979791],[-0.0551535],[-0.04675364],[-0.061966155]]},{"dense_3_W":[[-0.12258424,-0.67310715,-0.6216291,0.70087993,-0.5456542,-0.08261071,-0.794985,0.378915,-0.7075973,0.33079588,0.28384545,-0.3226729,0.3842719],[-0.53314304,-0.3283625,-0.027936831,-0.30382243,0.5143159,-0.11898092,0.06643987,-0.22891304,0.20859952,-0.62020797,-0.6542792,0.21820208,0.08545237],[0.4545815,-0.4721545,-0.28263086,-0.19456169,-0.294614,0.42408562,-0.28720883,0.50096816,0.17924507,0.2068184,-0.38797694,0.21201205,0.27561057]],"activation":"identity","dense_3_b":[[0.020500826],[-0.0064320345],[-0.03172262]]},{"dense_4_W":[[1.3453387,-0.38940504,-0.36594775]],"dense_4_b":[[0.020062331]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2022.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2022.json new file mode 100755 index 0000000000..4d6b4af069 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.376422],[1.2837375],[0.54391617],[0.049378082],[1.2814487],[1.2804018],[1.2795964],[1.2587454],[1.2385764],[1.21357],[1.1835355],[0.049072966],[0.049108904],[0.049148303],[0.049186878],[0.04908979],[0.048760086],[0.048228707]],"model_test_loss":0.009066876024007797,"input_size":18,"current_date_and_time":"2023-08-11_02-01-41","input_mean":[[23.067575],[-0.03366158],[0.0044186297],[3.4665016e-5],[-0.033809688],[-0.03444663],[-0.03468704],[-0.03309283],[-0.032493494],[-0.034124184],[-0.029784737],[-0.00010160864],[-7.466988e-5],[-4.264505e-5],[5.8855418e-5],[0.000106093255],[7.4934855e-5],[4.8816368e-5]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.1810939],[0.052338526],[-0.030882858],[0.033140995],[2.9087296],[-2.895278],[0.054216754]],"dense_1_W":[[-0.022466678,-0.079283744,0.015348881,-0.093145974,-0.50897855,1.1005377,-0.3424491,0.16023882,0.24858536,-0.28342143,0.08719842,0.11321456,0.25237224,-0.3242571,-0.16660848,0.08039433,0.2296425,-0.12092014],[-0.010926074,-0.5342929,0.014211034,-0.22288138,0.12526701,-0.6431979,0.11048157,-0.027558114,0.5129509,0.031701602,-0.28270888,-0.3469483,-0.0359589,0.3054121,0.42384326,-0.21366577,0.24789678,-0.21054278],[0.0015054089,-1.0920098,-4.1715555,0.42466384,0.8594457,-0.057574112,0.195077,-0.14336777,-0.934818,-0.14249723,1.1195656,-0.50157344,-0.34849435,0.4064381,-0.10914302,-0.09259135,-0.043489303,0.17882638],[0.00050957524,-0.5727624,0.02629925,0.039537206,0.07295519,-1.0905142,0.65514714,-0.22721705,0.10285973,0.015500398,-0.07354051,0.10782978,-0.2973014,0.10234221,0.40134785,0.31354493,0.075327724,-0.033144545],[1.1313975,0.27665266,0.21540989,0.474714,-0.542695,0.45748472,-0.534559,0.33019224,-0.00932876,0.37130055,0.01740698,-0.07030619,0.3058859,-0.33302706,-0.18166807,0.05664913,-0.020655787,-0.18409492],[-1.1192006,0.46339068,0.21362849,0.07990121,-0.11141043,0.052170627,-0.7601721,0.25794908,0.29454672,-0.019299706,0.18099277,-0.069216594,0.12746179,0.16600643,-0.2266845,0.04666312,0.26312882,-0.34587502],[-0.033930384,-0.5281495,-0.02478823,0.35514218,0.37443575,-0.93885845,0.8630589,0.32345197,-0.43721947,-0.22540626,0.31314182,-0.19791576,-0.45503795,0.42438814,0.15826641,0.10125901,-0.2744716,-0.007187695]],"activation":"σ"},{"dense_2_W":[[1.0154629,-0.040800903,-0.29480615,-0.579116,0.63008493,-0.16830389,-0.52992606],[-0.44676533,0.70518833,0.22363839,0.3335365,0.15123695,-0.5413408,-0.18469663],[-0.15817617,0.34588996,0.3173453,0.2432257,0.2876003,-0.55385196,0.09101465],[0.30243352,-0.56498605,-0.47895545,-0.24933416,-0.20325784,0.55106956,0.04037954],[0.03340286,-0.7613887,0.005524847,-0.34229973,0.020817522,0.70795476,-0.58045375],[0.32800585,-0.61029744,-0.37881643,-0.0494688,0.6649441,0.5878182,-0.693103],[-0.78130317,0.32768852,0.0486751,0.6938225,-0.6449391,0.19077687,-0.20455292],[-0.003070534,-0.25178492,-0.1787414,-0.18577683,-0.855277,0.05078717,-0.23962548],[-0.8574637,-0.55484927,0.11038485,-0.22769281,-0.8112205,-0.5803483,0.39239252],[-0.02281288,-0.18713373,-0.18762249,-0.36472616,0.6542259,0.41985798,-0.57571363],[-0.37003383,-0.7053904,0.16818082,-0.6309228,-0.42156786,0.28068355,-0.52919596],[0.7441994,-0.606726,-0.21135445,-1.1177553,-0.23082832,0.5370549,-0.3296431],[-0.82947385,0.6298715,-0.0031728123,0.59570336,-0.2874936,-0.56689715,0.31978017]],"activation":"σ","dense_2_b":[[0.12730335],[-0.017174786],[0.008333773],[-0.1725905],[-0.08095016],[0.022734491],[-0.03200295],[-0.2865707],[-0.23485084],[-0.041974284],[-0.26037046],[0.00494856],[-0.008746482]]},{"dense_3_W":[[0.5768022,-0.69957966,-0.57344234,0.18022925,0.18167411,0.10279416,-0.60731447,0.57294464,-0.15860513,0.55548793,-0.0742402,-0.03724561,-0.46468896],[-0.6463308,-0.08468973,-0.057763796,-0.15337418,-0.5244671,-0.41263047,0.41524106,0.17037424,-0.16188715,-0.28470117,0.10638861,-0.22415741,0.76425564],[-0.30938473,0.20329902,0.43855524,0.0105835125,-0.13655424,-0.32343802,0.59270227,0.6068919,0.56710804,0.56215036,-0.60497534,-0.4761755,-0.007562395]],"activation":"identity","dense_3_b":[[-0.028258],[0.046470042],[0.021202732]]},{"dense_4_W":[[0.7616137,-1.0874788,-0.41413057]],"dense_4_b":[[-0.037305925]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2019 b'8965B41090x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2019 b'8965B41090x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..eb5ba30c31 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2019 b'8965B41090x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.6056595],[1.1011987],[0.45016465],[0.036513034],[1.0954262],[1.096654],[1.0972972],[1.0781622],[1.0577228],[1.0278832],[0.99876994],[0.03632588],[0.03636222],[0.03639234],[0.036382567],[0.03631101],[0.036141142],[0.035890657]],"model_test_loss":0.009378368966281414,"input_size":18,"current_date_and_time":"2023-08-11_03-42-04","input_mean":[[25.669659],[-0.047895048],[0.011095525],[-0.0010007567],[-0.050389417],[-0.04983048],[-0.04955661],[-0.044621523],[-0.04115602],[-0.035016187],[-0.028634345],[-0.0010792029],[-0.0010608791],[-0.0010422019],[-0.00097256503],[-0.0010143764],[-0.0010519858],[-0.0011353532]],"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.16146694],[-1.5599775],[-0.17506365],[-0.19151914],[0.33073556],[-0.0044728843],[-1.8738011]],"dense_1_W":[[-0.022587843,-1.696307,-5.400682,0.3648149,0.67200285,-0.078337416,0.5580287,-0.7384839,-0.4336378,-0.06844309,1.2609831,-0.46469173,-0.3023337,0.33104905,0.30154014,0.21899197,0.04919983,-0.20795655],[-0.47104296,0.73747975,0.17403716,0.23270167,-0.1037867,0.8239424,0.09184954,0.16263483,-0.037750896,0.15098697,-0.0754606,0.34493265,-0.082084626,-0.33557257,-0.18489552,0.33800292,-0.16610008,-0.057679377],[-0.0027718232,1.5370984,0.024881154,-0.5346706,0.23415335,1.4315361,-0.14873216,0.105326936,0.066477254,0.8128371,-0.3328177,-0.32810703,0.40303403,0.28103107,0.07711046,0.079642035,0.076980725,-0.08185225],[-1.133281,-0.037655216,-0.20665579,0.09188236,-0.7868618,-0.026023107,-0.8787548,-0.6428669,0.033134256,0.11970976,-0.10050087,0.059997767,-0.022198018,-0.16140892,-0.35953227,0.29168937,0.034544915,0.05378626],[1.1066848,0.27753586,-0.22365077,0.16971135,-1.1832408,0.44884738,-0.96368015,-0.91032207,-0.23031113,0.08507745,0.05559425,-0.31901634,0.28722385,-0.31672338,0.21700029,-0.091585815,-0.15736222,0.17971504],[-0.004321371,-0.06275011,-0.048157416,0.24579182,0.47604734,-1.3198181,0.6782722,-0.10995617,-0.20460491,0.042091597,0.05913588,-0.5444536,0.061146915,0.30363235,0.18061714,0.2797491,-0.014113867,-0.18732737],[-0.5763257,-0.9677455,-0.1951802,0.11323726,-0.312983,-0.53621775,0.1185856,-0.21250775,0.04489358,-0.15929341,0.064324245,-0.2883423,-0.13198704,0.2777305,-0.03675221,-0.22492863,0.11493704,0.080734536]],"activation":"σ"},{"dense_2_W":[[-0.61590296,-0.5195715,-0.108829506,0.4103641,-0.15294282,0.4410914,1.4810303],[0.4780821,-0.8781517,-0.4252669,-0.59855515,0.4804704,0.7194652,0.3171456],[-0.0060195136,0.31312257,0.64193386,0.2910982,0.84490585,-0.9846345,-1.0567933],[0.1459189,-0.50605303,-0.69084024,-0.14800137,-0.88331693,0.6852774,0.2694695],[-0.3053409,0.35913458,0.7041157,-0.23017813,-0.017635284,0.06075772,-0.2936795],[-0.1356475,-0.78858066,-0.8566893,0.1977979,-0.3749218,0.33831593,0.691472],[0.5872542,0.44983965,0.22061676,-0.116593465,-0.36591926,-0.96924776,-0.14946656],[0.13530682,0.6748068,-0.19304672,0.5032931,0.8270327,-0.7906366,-1.0424157],[0.30044878,-1.209003,-0.07319125,-0.34063867,-1.1481062,0.9603452,1.1442114],[-0.20257956,0.61473626,0.5823472,0.24531272,-0.22855185,-0.6818321,-0.42225984],[-0.7394789,0.7810616,-0.058806174,0.8324751,-0.3867912,-0.97824925,0.15068337],[0.5175145,-0.9351888,-0.3562028,-0.7593984,-0.32492992,1.3009138,0.008064033],[-0.7596698,-0.08702234,-0.5448599,-0.6187972,0.3668954,-0.02732415,0.09881363]],"activation":"σ","dense_2_b":[[0.12397174],[0.33330676],[-0.0799793],[0.04158973],[-0.09782006],[0.037273075],[-0.23756596],[-0.14609045],[-0.24821158],[-0.159363],[-0.2940094],[0.17432326],[-0.22460997]]},{"dense_3_W":[[0.44469282,0.50233734,-0.66101295,0.3700973,-0.07787853,-0.08806539,0.41965428,-0.43115306,-0.022663087,-0.6569443,-0.39882353,-0.02137261,0.15087838],[0.16178976,0.09075096,-0.7934335,0.5412506,-0.092891194,0.6815236,-0.3410796,-0.31042063,0.55821943,-0.65534914,-0.56217957,0.64118695,-0.00170126],[0.49080417,-0.35064137,0.1350645,-0.5279935,0.09069881,0.516484,0.42135808,-0.110838115,-0.23615395,-0.30600968,0.33043766,-0.74036384,0.1663846]],"activation":"identity","dense_3_b":[[0.07007987],[0.05591756],[0.010658105]]},{"dense_4_W":[[-0.39591685,-0.9289211,0.07738602]],"dense_4_b":[[-0.050904196]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2019.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2019.json new file mode 100755 index 0000000000..b1b51e3228 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2019.json @@ -0,0 +1 @@ +{"input_std":[[7.6041064],[1.1035304],[0.4484023],[0.03683061],[1.0957737],[1.0976914],[1.0990177],[1.0801798],[1.0598575],[1.0331676],[1.0052766],[0.036654923],[0.036684364],[0.03671293],[0.036709417],[0.036651965],[0.036492568],[0.036210157]],"model_test_loss":0.009458640590310097,"input_size":18,"current_date_and_time":"2023-08-11_02-52-02","input_mean":[[25.630205],[-0.05623775],[0.010955678],[-0.0011824107],[-0.058129467],[-0.058100134],[-0.05753972],[-0.052215047],[-0.05002431],[-0.042788718],[-0.035654448],[-0.0013065297],[-0.001283106],[-0.0012580294],[-0.0011568652],[-0.0012149647],[-0.0012245286],[-0.0013113298]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.6020029],[-0.014326092],[2.131077],[0.9675631],[-0.19065784],[0.022073187],[-0.17599037]],"dense_1_W":[[-1.3987874,-1.1022329,-0.34505498,0.7636868,-0.20586683,-0.9504459,-0.049020052,-0.3938162,-0.123028636,-0.32886922,0.15735438,-0.4781323,-0.48132908,0.23977482,0.10422825,-0.12448882,0.05244729,-0.11038789],[-0.018301038,-0.6299352,0.00622713,0.13428006,0.5419454,-0.8375825,0.56663495,-0.19548799,-0.23334435,-0.2798497,0.34237435,-0.3636734,0.1918039,0.26086813,0.23164305,0.07724925,0.36682686,-0.23426089],[0.9700282,-1.2141867,-0.24132554,0.7250985,-0.054316934,-0.82846856,0.20743893,-0.07541251,-0.0029775759,-0.2764805,0.07297132,-0.55774605,-0.61494875,0.7186673,-0.20925622,-0.012554848,-0.007072312,-0.06780203],[1.2655128,0.6922755,-0.24722645,-0.26949418,-1.186765,0.52344996,-1.3021243,-1.0206279,-0.081423774,0.2734177,-0.22090656,-0.008360833,0.42805007,-0.6104315,0.10659541,0.59180355,-0.07409862,-0.16140598],[0.0016111843,2.3020566,-0.09538863,0.4775302,0.19104634,0.7581803,1.2245975,0.3259312,0.13016133,0.71805245,0.37977412,0.2731153,-0.35271376,-0.75976604,0.3985421,0.36015168,-0.24252148,-0.09097576],[-0.1696741,0.7506803,0.118888825,-0.3327318,-0.5104699,1.7509611,-0.8092226,-0.102412894,0.21171542,-0.41029605,0.29316515,0.289645,0.3842453,-0.32381833,-0.080485,-0.27451643,0.2969006,-0.0033906084],[0.016534764,-2.0133348,-5.4863,-0.03373743,1.1940682,-0.20837387,0.4025841,-0.2529515,-1.1387988,-0.38183406,1.9944586,-0.12616248,-0.8426146,-0.22513841,1.2779588,0.51199806,0.32435155,-0.69949305]],"activation":"σ"},{"dense_2_W":[[-0.7638269,0.031352714,0.10360953,0.5546481,0.30863878,0.82808226,-0.33563384],[0.51879066,-0.44226646,-0.5796693,-0.40858063,0.1578528,0.15035929,-0.84812665],[-0.15702121,-0.67073447,-0.4197038,0.3220818,-0.05991348,0.38041055,0.06092204],[0.806767,0.06304986,0.8075057,-0.20168602,-0.33820373,-0.87435573,-0.28601554],[0.20003784,-0.08937316,0.25184897,-0.5255257,-0.5728098,-0.43476734,-0.010894257],[-0.01787694,0.27795494,0.11630318,-0.06266501,0.060686372,-0.63279563,0.44636598],[-0.4958114,0.43005335,0.7080226,-0.12047338,-0.48428482,-0.2889726,0.44259036],[-0.39932543,-0.51808834,-0.7372899,-0.29793862,0.48923936,0.58836514,0.25622228],[0.25029996,0.08891042,-0.81593496,0.46271,0.15725288,-0.2126664,-0.08401766],[0.6195721,0.5448667,0.041502103,-0.8573642,-0.5645224,-0.87836134,0.20946307],[-0.14115311,-0.90280044,-0.5433088,0.7701665,-0.6260164,-0.13906801,0.23042479],[0.07473069,0.28087774,-0.9681486,-0.009864042,-0.6672649,0.45934054,-0.64873284],[0.13347791,-0.02133041,0.0807407,-0.2441324,-0.5546702,-0.2578623,-0.16019678]],"activation":"σ","dense_2_b":[[-0.020695023],[-0.118575685],[-0.045242883],[0.028083786],[-0.27159098],[-0.023374764],[0.012269623],[-0.12869656],[-0.1787051],[0.0306908],[-0.07568033],[-0.10759439],[-0.27744076]]},{"dense_3_W":[[-0.49162164,-0.4191868,0.0067901798,0.102787994,0.10602838,0.67330825,-0.04103629,-0.5477224,0.37683812,0.7409758,-0.15619572,-0.5923507,-0.07951754],[-0.039288122,0.28114173,-0.59904766,0.6645154,-0.44911647,-0.06922432,0.215001,-0.27168792,-0.19525866,0.49492684,-0.23237818,-0.6230769,-0.50621545],[-0.22085246,-0.51831955,-0.27986276,-0.38381657,0.54892325,0.44768026,0.31407866,-0.5329104,-0.16832387,0.34908122,-0.08704006,0.5308806,0.64026624]],"activation":"identity","dense_3_b":[[0.0607661],[0.06281816],[0.04532571]]},{"dense_4_W":[[-0.5887859,-0.83423084,-0.84973454]],"dense_4_b":[[-0.054816216]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2022 b'8965B41110x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2022 b'8965B41110x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c4dd358d7f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2022 b'8965B41110x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.621417],[0.60216844],[0.33766446],[0.031071559],[0.6074495],[0.6063964],[0.60408527],[0.592746],[0.5848162],[0.57773405],[0.57088673],[0.031094117],[0.031086348],[0.031075306],[0.03092497],[0.030987453],[0.030950982],[0.03085089]],"model_test_loss":0.0035974758211523294,"input_size":18,"current_date_and_time":"2023-08-11_04-33-01","input_mean":[[23.851212],[-0.011735492],[0.014822557],[0.0015981287],[-0.017860906],[-0.016335273],[-0.014861164],[-0.008908558],[-0.00019100294],[0.008320288],[0.015085844],[0.0013476122],[0.0014353959],[0.001521554],[0.0016404905],[0.0017713357],[0.001890435],[0.0018140652]],"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.29046783],[-0.7386649],[0.8099128],[-0.0830979],[-0.066769995],[-0.58767533],[-0.5783042]],"dense_1_W":[[-0.06973173,-1.1593121,-3.7385426,0.17812389,1.2648335,0.17882043,0.11353305,-1.1128533,-1.1402131,0.49317023,1.1549392,0.22488351,-0.039551347,0.54545957,-0.9453328,-0.30246973,0.48812893,-0.003690356],[-2.088028,0.03569328,0.06524252,0.3073911,-0.0669223,1.0475743,-0.9218425,0.20211175,-0.4463,-0.18910088,0.9684125,0.13405068,-0.1174013,0.081153475,-0.36694288,-0.18311328,0.19375218,-0.05552698],[2.1723948,-0.104979195,0.06845127,0.13558877,0.12955302,0.54661036,-0.71585613,0.37260148,-0.47275162,0.1936406,0.69998413,-0.17018797,-0.29841486,0.19461034,0.11221291,0.08999232,0.40883166,-0.48241648],[-0.0035949238,0.5195585,0.056816265,-0.21500319,0.13682762,0.6210256,-0.26336774,0.2708143,-0.3960605,-0.09337605,0.18600617,0.40625247,-0.03272976,-0.39815915,-0.4334662,0.03242743,0.106475964,0.18782848],[0.00026254903,-0.43522957,-0.29160616,1.2150093,0.561134,0.13226019,-0.3680962,0.4117709,-0.523177,0.21208563,0.37644473,1.2890456,0.35225967,0.95191664,-0.18308976,-1.3802807,-0.5709553,-2.2156804],[0.53350025,0.035052005,0.008865246,-0.04431933,-0.3176884,0.83934355,-0.37516874,0.00706265,0.0775229,0.030765524,-0.040516727,0.006187998,0.5950189,0.14796092,-0.52394676,0.060235158,-0.5274258,0.1178207],[0.5637231,0.13862197,-0.008244962,-0.3938652,0.48107556,-0.6489267,-0.07129171,-0.071288355,-0.050481576,-0.2556226,0.21773542,-0.3818978,0.122946635,-0.0005463466,0.5423771,0.15439962,-0.14910692,0.2768216]],"activation":"σ"},{"dense_2_W":[[0.33422744,0.5476326,-0.40897554,0.03363565,0.42117637,0.1993684,0.11700197],[0.016211191,-0.42357254,-0.013600616,0.58073217,-0.10585923,0.4968173,-0.06083235],[0.2560805,0.23497431,-0.4423548,-0.6719212,0.33036447,-0.65422225,0.11651074],[-1.0021728,0.6715551,-0.28054923,0.066978924,-0.047049686,-0.23047742,-0.7727124],[-0.8329245,-0.06253365,-0.8275449,-0.19949576,-0.49645177,-0.3025703,-0.39923748],[-0.0965028,-0.28401488,-0.29893482,-0.5392418,0.516837,-0.38260764,0.7805964],[-0.13280529,-0.06303277,-0.27558568,-0.47452193,-0.09497839,-0.026708731,-0.06549511],[0.33222172,0.09532853,0.094424486,0.41390723,-0.59934753,1.2102501,-1.4455571],[-0.18434185,-0.40622485,0.019825913,-0.44427174,-0.063956864,-0.15254037,-0.16048898],[0.4783499,-0.016979024,-0.38030294,0.03715881,-0.38931444,-0.73212904,-0.18792534],[-0.66844565,0.34431502,-0.1439725,0.48682266,0.041338764,0.32482722,-0.9202753],[0.10901106,0.37365302,0.25427094,-0.22439355,0.1677833,0.32048756,-0.757699],[-0.03728728,0.22946912,-0.5708871,-0.12548028,0.13651444,-0.3683857,0.40373203]],"activation":"σ","dense_2_b":[[0.03504426],[-0.021830266],[0.014506293],[-0.15004124],[-0.1996024],[0.08620867],[-0.22626895],[-0.2200163],[0.027354911],[-0.0187473],[-0.26950043],[-0.080006495],[-0.00023749561]]},{"dense_3_W":[[0.003805781,0.57647467,-0.3215517,0.6421878,0.36746186,-0.44294173,0.24244395,0.5338086,-0.60588413,-0.45965254,0.3151681,0.50712276,-0.30720553],[0.4721997,0.13897571,-0.66421515,0.36394912,-0.12090668,-0.54066294,-0.06981957,0.42225152,-0.1879612,-0.44998485,0.2981854,0.4459964,-0.1991944],[-0.46331075,-0.33276492,0.31424695,-0.0069436645,-0.17305002,0.6113178,0.48357555,0.2451846,0.33225268,0.5144922,0.4602627,0.007510923,0.5021902]],"activation":"identity","dense_3_b":[[-0.014281405],[-0.011103369],[0.0054283007]]},{"dense_4_W":[[0.86027306,0.53091425,-0.4524987]],"dense_4_b":[[-0.011388131]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2022.json b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2022.json new file mode 100755 index 0000000000..e308b6f7fd --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA AVALON HYBRID 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.6210785],[0.6022118],[0.33968922],[0.03099292],[0.60531795],[0.60364884],[0.60261005],[0.5927404],[0.5860802],[0.5780433],[0.57123464],[0.03102364],[0.03101872],[0.031000676],[0.030836336],[0.030818319],[0.03077106],[0.03060258]],"model_test_loss":0.0035856943577528,"input_size":18,"current_date_and_time":"2023-08-11_04-08-26","input_mean":[[23.850887],[-0.011798306],[0.008752907],[0.001631103],[-0.017083079],[-0.015211123],[-0.013052424],[-0.009723851],[-0.0010425432],[0.00763124],[0.012975372],[0.0013719393],[0.0014717524],[0.0015690022],[0.0016464603],[0.0017470267],[0.0018605703],[0.0018421216]],"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.64532423],[0.2870542],[-0.58806527],[0.26318058],[0.6671186],[0.6541222],[-0.22572796]],"dense_1_W":[[1.5230434,-0.007496155,1.0794041,-0.4841308,-0.6977591,0.51557744,-0.09899542,-0.23689902,0.18946739,-0.113655314,0.44560134,-0.532302,0.034997255,-0.1360111,0.17597911,0.59236944,0.050468095,-0.20623948],[1.0181296,-0.059453703,0.009536515,-0.01483209,0.38743848,-1.6092814,0.42287022,-0.26000166,0.51355636,-0.09300312,-0.20316118,0.07417511,-0.78482175,0.31442174,0.45461628,-0.05262415,-0.16865608,0.13292025],[-1.3765476,0.27935305,0.9930571,-0.51475865,-0.93571097,0.3701744,-0.72828853,0.1573733,0.84987473,0.26969302,-0.27910694,-0.17882767,0.23388991,-0.56191975,-0.17135333,0.69586045,0.3468155,-0.3236991],[1.0663162,0.11496424,-0.010609953,-0.34656164,-0.31095302,1.2454789,-0.104264125,0.16323781,-0.511932,0.1954236,0.14337912,0.27471086,0.2458354,0.09317978,-0.29965654,0.074385874,0.1680878,-0.15244573],[-0.5496053,0.30009452,0.019474812,-0.15155403,-0.42104033,0.804735,-0.24418715,0.12206082,0.01419753,-0.0772803,0.0075358734,0.31184286,0.119791746,0.02318575,-0.7550021,0.101326704,-0.19755691,0.20817216],[-0.4716649,-0.39404374,-0.017001849,0.30398825,0.37287918,-1.0172095,0.57842916,0.051887393,-0.14316402,0.08946873,-0.013960456,-0.18220635,-0.4013893,-0.019781204,0.40079808,0.3981192,0.09988082,-0.2901716],[-0.0910912,-1.8955553,-5.6552796,0.74153733,1.5436069,0.09860224,-0.26889333,-0.8300267,-0.9122361,0.28157806,1.6353471,-0.3455456,-0.19665305,0.20067552,-0.12310253,0.0478631,-0.24051762,0.018789763]],"activation":"σ"},{"dense_2_W":[[0.19653954,-0.5258311,0.14326829,0.16017042,0.2240187,-0.14981109,-0.23470822],[-0.20858146,0.37757653,-0.22290857,-0.24139176,-0.58756834,0.94805384,-0.3055405],[0.3827672,0.8731881,-0.5274364,0.5947985,-0.12186718,-0.22117402,0.97557515],[0.22888982,0.034816697,-0.4402026,-0.1263617,-0.2391757,0.375515,-0.45880428],[-0.50858766,-0.009293968,0.20779714,-0.06797905,-0.15627685,0.8566428,-0.16560455],[0.33234873,-1.0452052,0.3114699,-0.49879384,0.37760928,-0.10235413,-0.7995544],[-0.21585348,-0.7473184,0.45133677,0.48506138,0.35556215,-0.6276531,-0.18618119],[-0.3087059,-0.757823,0.30346602,0.1112487,0.23632218,-0.32476935,-0.23821081],[-0.33813116,-0.067351766,-0.084407635,-0.7633368,-0.33403933,0.5852588,0.04424095],[-0.13047165,-0.57245564,-0.10349484,0.44043526,0.8112992,-0.22286835,0.1134046],[-0.81824476,-0.48836493,0.24637613,-0.97839844,-0.44806626,0.014597846,0.6120905],[-0.011660478,0.27182546,-0.27260295,0.021457694,-0.15093423,0.103856236,-0.289786],[0.08348892,-0.27305228,-0.033261165,0.8160634,0.7069094,-0.68072647,-0.18045369]],"activation":"σ","dense_2_b":[[-0.028337892],[0.16126229],[-0.024233993],[-0.15039966],[0.010798022],[-0.2899587],[-0.050011154],[-0.23201685],[0.014608492],[0.003838476],[-0.08799288],[-0.049894854],[0.027036132]]},{"dense_3_W":[[-0.27019745,0.66014105,0.44614148,0.13896823,0.4704919,-0.17726699,-0.7050766,-0.099338174,0.18850864,-0.27997562,0.48057485,0.0069672302,-0.6804747],[0.4988687,-0.31667402,0.47645807,-0.12850301,-0.14989346,0.22235468,-0.09084276,0.10203466,0.19078694,-0.2741972,0.11726287,-0.24347067,-0.14281158],[0.11220936,-0.20938803,0.22899435,-0.17603627,-0.23535244,0.4323248,-0.064221285,-0.06924562,-0.5364228,-0.29542312,0.031429153,0.48623005,0.53304803]],"activation":"identity","dense_3_b":[[-0.056309115],[-0.10035845],[-0.002584182]]},{"dense_4_W":[[-0.93852043,-0.002831195,0.0376801]],"dense_4_b":[[0.05399409]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA C-HR 2018 b'8965B10040x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR 2018 b'8965B10040x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..1a89e9aa72 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR 2018 b'8965B10040x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.7313623],[0.9888169],[0.4152069],[0.033757195],[0.97801226],[0.9809649],[0.98316544],[0.97654957],[0.96262586],[0.9422399],[0.9169314],[0.033564508],[0.033611197],[0.03365405],[0.03371377],[0.03366836],[0.033512793],[0.03326571]],"model_test_loss":0.010666782036423683,"input_size":18,"current_date_and_time":"2023-08-11_05-49-47","input_mean":[[24.96519],[-0.033782624],[0.009671044],[0.0077961436],[-0.038051996],[-0.037176047],[-0.037127484],[-0.032916453],[-0.028262928],[-0.021224912],[-0.019132588],[0.0075910226],[0.007635079],[0.0076770876],[0.0077970643],[0.007867494],[0.007903498],[0.007878507]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0528064],[0.08900857],[0.75784385],[-0.8937406],[-0.51171505],[-0.10186542],[-1.3997765]],"dense_1_W":[[-0.08676465,2.0455117,-0.102706365,-0.6707259,3.1681015,4.2520304,2.8067908,2.0205982,2.160316,1.8089273,0.55365646,0.3163457,0.4537371,-0.29166102,0.61781347,0.54595727,-0.13856713,-0.8539102],[-0.00016419945,-0.56122553,0.006468475,0.058191027,0.3205225,-1.7764372,1.0253428,-0.22990642,-0.023242323,0.14960705,-0.11546516,-0.47926554,0.13979027,0.25853786,0.35933894,0.231268,-0.163933,-0.011948538],[0.8706783,0.5629842,-1.0976667,0.6597201,0.074501075,-1.1088905,0.073258646,-0.08372772,-0.027485643,0.40303627,-0.085082166,-0.15307684,0.13970284,0.4372201,-1.0356691,-0.46190366,0.08466662,0.31719726],[0.00088525575,0.28771025,-0.00041574074,-0.12136347,-0.45848206,0.7646498,-0.7480068,0.08633297,0.2238723,0.22185136,-0.27731135,0.24002591,0.5882265,-0.46785995,-0.36120954,-0.06715729,-0.019443577,0.20275888],[-0.06155146,-0.9296325,-6.176115,0.32850727,1.9988121,0.056870196,-0.7210163,-0.90295607,-0.6347279,-1.0500165,1.7257686,-0.63104945,-0.20577207,0.52953875,-0.038163472,0.21641904,0.24872929,-0.38487554],[0.0006827544,0.06588264,0.019023217,0.33368507,-0.50753003,1.274059,-0.41946143,-0.4562805,0.1713312,0.022509854,0.060954157,-0.0036319275,-0.14435211,-0.17530417,0.13293767,-0.04580827,-0.16321899,0.061178423],[-0.97508353,0.3754842,-1.2725447,0.30404013,0.06964748,-0.63675576,-0.116767436,-0.46295738,0.2441482,-0.061135307,0.2693983,0.19074592,0.19255072,-0.050766017,-0.34838012,-0.5683125,-0.16777495,0.4320534]],"activation":"σ"},{"dense_2_W":[[-1.7291162,0.18712735,-0.784268,-0.5211682,0.23055974,-1.0369477,1.2522866],[-1.4083703,-1.245634,1.5253365,-0.38234624,1.1451472,0.3420805,-1.3369085],[0.4079928,0.09092335,0.3915673,-0.6955576,-0.99043214,-0.37307084,-1.0267273],[0.36806342,0.86456835,0.014784731,-0.9323144,0.08767326,-0.98557246,-0.49028188],[-0.2841241,-0.47625312,-0.21175718,0.43561095,-0.36729914,0.8540727,-0.43895096],[0.16099487,0.7311489,0.19461572,-0.69285166,0.41518864,-1.1639454,-0.08508787],[-0.3261969,0.4563855,0.48312464,-0.14733022,0.76256764,-0.44852886,-0.35733178],[-0.8633155,-0.17938924,-0.4462165,-0.48804846,-0.8097996,-0.4533271,-0.46252802],[0.12385623,0.009189586,-1.1579738,0.71919787,-1.7606289,-0.31546488,0.448854],[0.07684563,1.1983187,0.08234343,-1.091461,-0.19976689,-0.54287857,-0.37857434],[0.560663,-1.4880527,-0.28693125,0.17221202,-0.36113575,0.19427057,0.44083765],[-0.059977785,-0.58561826,-0.57772005,0.7993362,-0.8236306,1.0891352,0.02070652],[0.57416856,-1.5304499,-0.030536273,0.6002819,0.3496771,0.52368426,-0.5069396]],"activation":"σ","dense_2_b":[[-0.2280989],[-0.6234252],[-0.692007],[-0.121901624],[-0.3153857],[-0.17784967],[0.07650244],[-0.45358527],[-0.4148523],[-0.08295175],[-0.3685902],[-0.006143885],[-0.21816583]]},{"dense_3_W":[[-0.6464554,0.59161955,-0.08040031,-0.38394913,-0.2547638,-0.66541696,0.10209947,0.22952524,0.51443064,-0.6007329,0.16476616,0.8392625,0.86081135],[0.29400313,-0.47131515,-0.07440717,0.4786253,-0.22355409,-0.141201,0.57343155,0.42071205,0.08289365,0.49173295,-0.2876836,-0.6514307,-0.34931198],[-0.41638458,-0.038208514,-0.21903223,-0.25014666,0.40054414,-0.80169666,-0.35611898,0.19608808,0.50653106,-0.22687514,0.33846655,0.9839725,0.9331715]],"activation":"identity","dense_3_b":[[-0.1338492],[0.02347098],[-0.14936106]]},{"dense_4_W":[[0.63154566,-0.2949555,0.46449748]],"dense_4_b":[[-0.07701077]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA C-HR 2018.json b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR 2018.json new file mode 100755 index 0000000000..90ff54f85d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR 2018.json @@ -0,0 +1 @@ +{"input_std":[[7.266456],[1.0311108],[0.42161182],[0.035121582],[1.0182426],[1.0210766],[1.024199],[1.0197712],[1.0053324],[0.98283356],[0.95835906],[0.03495412],[0.034997974],[0.03503269],[0.035035565],[0.034975693],[0.034770522],[0.034426987]],"model_test_loss":0.011608563363552094,"input_size":18,"current_date_and_time":"2023-08-11_04-58-44","input_mean":[[25.311535],[-0.031563792],[0.0060295113],[0.0037024636],[-0.034909807],[-0.034477167],[-0.03452592],[-0.032167524],[-0.028398417],[-0.025096538],[-0.02253926],[0.0035288066],[0.0035584755],[0.0035877393],[0.0036529114],[0.0036560637],[0.003644573],[0.0036541703]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.06250458],[0.7717496],[2.6856744],[-3.0798275],[-0.047530472],[-0.1521214],[-0.86107486]],"dense_1_W":[[-0.0058309548,1.6388441,6.026957,-0.7815384,-3.1444395,0.29995996,-0.6111942,1.4489828,1.5309435,0.9753039,-2.0177133,0.991274,0.99092865,-0.50581515,0.16233689,-0.99065316,-0.67018527,0.90234095],[-0.42814094,-0.57456744,0.0007794493,0.023858974,0.11595472,-1.2281862,0.6903777,0.243981,0.38887268,-0.085606225,-0.22763428,-0.020143623,-0.5932556,0.34875482,0.60443676,-0.12836404,0.1324796,-0.18602186],[1.1931428,0.05919804,0.05402463,-0.55798566,-0.36006367,0.7021459,-0.3192777,-0.27177683,0.6936569,1.2172635,0.96187454,0.38691327,0.35159546,0.032515947,0.16563621,-0.22681683,-0.04875851,-0.2965481],[-1.2964138,-0.2337551,0.0634739,-0.31843027,-0.3538266,1.1500596,-0.8726868,0.0036669122,1.0422454,1.1141241,0.9607149,0.40760738,0.06241413,0.11646168,-0.073522024,0.22547582,-0.30052686,-0.31555784],[0.0072235786,0.5063357,0.9562675,-0.48209998,-0.27141708,1.5686616,-1.061574,0.5231472,1.0100089,0.05071974,-1.886694,0.41332957,-0.06334984,-0.97750497,0.6102102,0.22696678,-0.06319088,0.0048847888],[0.006333134,1.688374,-0.0095348805,-0.66412175,0.28531587,2.01203,-0.1819137,-0.7547143,-0.31330884,0.35432032,0.33640975,0.016374094,-0.13819215,-0.15855257,0.40649945,0.33540976,-0.0046302704,-0.35495433],[0.4090967,-0.19826725,-0.0013017637,-0.5116933,0.38453588,-1.7476666,0.8353978,0.15093791,-0.14092202,0.31026828,-0.26896203,-0.28421417,-0.206051,0.5156937,0.7495738,0.24013326,-0.16817766,-0.15013888]],"activation":"σ"},{"dense_2_W":[[-0.28553647,0.51897234,0.3232974,-0.14583516,-0.6494069,-0.18854451,0.45899993],[-0.18945166,-0.7805358,0.21762379,0.06925927,0.1412742,-0.54521996,-0.49447703],[0.41819847,0.7103663,-0.36324528,-0.54330885,-0.2780997,-0.21234678,0.45622718],[0.45189,-0.30940267,0.2796695,-0.10068664,0.33236605,0.39892736,-0.23690474],[-0.00033029245,-0.2876081,0.21365881,-0.263795,-0.7780459,0.21173872,0.754661],[-0.4982613,-0.41572687,0.6875971,0.3845866,-0.026780535,0.85438734,-1.1519399],[-0.4147085,0.22912927,-0.54870033,0.3551388,-0.4057759,-0.1996842,0.34155196],[-0.46657288,-0.743298,-0.65183616,-0.358357,0.16232346,0.19327608,-0.015862346],[-0.5780829,0.48190355,0.42865816,-0.360802,-0.6834505,0.55482894,0.14401308],[0.51356256,-0.76134664,-0.3057201,0.3803027,-0.00610297,0.3648528,-1.0003062],[-0.690029,0.5113393,-0.7087683,0.38381904,-0.08314878,-0.2460164,-0.0017047548],[-0.2095539,-0.88663155,-0.05008726,0.3074065,0.52681,-0.06860818,-0.748798],[-0.44802594,-0.3936492,0.163376,-0.55659366,-0.3931171,-0.76979935,0.38669378]],"activation":"σ","dense_2_b":[[-0.017743433],[-0.26510626],[-0.018595928],[-0.17289363],[0.02423361],[-0.006021742],[-0.0071125105],[-0.2604571],[0.09466738],[-0.0020451464],[-0.07033006],[-0.2086756],[-0.26478064]]},{"dense_3_W":[[-0.53581256,-0.22029524,-0.03227938,0.33162057,0.11482841,0.61525244,-0.26008266,0.6051382,0.45775265,0.43236297,-0.58764994,-0.07332099,-0.5288951],[-0.18867671,0.37646073,-0.3081562,0.23591055,-0.38460404,0.13270791,-0.61747444,-0.24434201,-0.16632886,0.723561,-0.37653255,0.03962427,-0.027843077],[0.30763236,-0.4282034,-0.46785048,0.21578372,0.20392036,0.38424364,0.31873167,0.18515399,-0.6173425,0.64338654,-0.038045872,0.49573293,0.5208863]],"activation":"identity","dense_3_b":[[-0.009245349],[-0.0014893641],[-0.022675076]]},{"dense_4_W":[[0.41954702,1.1624148,0.5703593]],"dense_4_b":[[-0.004366342]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022 b'8965B10091x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022 b'8965B10091x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..3f9d6a7e29 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022 b'8965B10091x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.8614244],[0.75124866],[0.55659616],[0.019078998],[0.73906744],[0.7388618],[0.7372679],[0.7206659],[0.7110691],[0.699438],[0.68114865],[0.01886521],[0.018885473],[0.01889542],[0.01875568],[0.01862864],[0.018454202],[0.018320806]],"model_test_loss":0.01200881041586399,"input_size":18,"current_date_and_time":"2023-08-11_07-04-43","input_mean":[[19.02321],[-0.009182516],[-0.017429296],[-0.011283472],[-0.0053655286],[-0.007232309],[-0.0092455],[-0.01603544],[-0.01682772],[-0.019174336],[-0.027758926],[-0.011568266],[-0.011541738],[-0.011520918],[-0.01157352],[-0.011571877],[-0.011668593],[-0.011788717]],"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.03519353],[-0.15095843],[-0.7353578],[0.13929218],[-3.4776504],[0.041195296],[0.1761386]],"dense_1_W":[[0.046379987,-0.13878189,-0.036664445,0.38224146,-0.0646248,-1.0924313,0.8775562,-0.053549852,-0.15888737,0.1178062,-0.06738964,-0.47581938,0.02085043,0.04761963,0.19045879,-0.015851231,0.15402271,-0.23869996],[0.047233846,-0.37163836,-6.5784287,-1.1358076,0.5292454,-0.7138368,-0.020171849,0.20063849,0.18085273,-0.92067474,0.81135595,-0.51245284,-0.1656133,0.42384866,0.7504459,0.84762216,0.13103229,-0.24118356],[-1.1028277,-0.49579862,-0.098353446,0.35713926,-0.16605736,-0.5360656,-0.20586732,0.2877909,0.058039125,0.21760072,-0.28679097,0.055256702,-0.39677158,0.21102457,-0.21540093,0.018043555,0.26613265,-0.19123672],[-0.08534582,-0.9939401,-0.4242228,-2.8671207,0.6624762,-2.9042678,-4.992002,-3.7515533,-5.1040688,-1.9935926,1.7598441,1.1262454,1.8797381,1.1090043,-1.6218112,-0.863951,-0.5581413,1.6114283],[-1.1540707,0.43415037,-3.6339066,-0.47187626,-0.7554667,-1.4905885,0.6125929,-0.101766944,0.6937759,0.20132032,-0.47469506,0.018180996,0.51194876,0.07081824,-0.20423755,-0.27204958,-0.23085469,0.6143729],[0.005116348,0.3945791,0.10539601,0.331683,-0.8352237,0.98771363,-0.21386153,0.10292913,0.044619523,0.08716431,0.101707004,0.073796205,-0.09338911,-0.22695537,-0.19353603,0.3005215,0.19999096,-0.5015498],[0.018626228,-1.0940357,0.17377485,1.577099,0.87160116,-1.4516218,1.9833297,0.18896727,0.31323293,0.32171655,0.22981676,-0.048349075,-0.14686754,-0.003915933,-0.9725042,-0.13146995,-0.36996123,-0.098727204]],"activation":"σ"},{"dense_2_W":[[0.97411454,-0.51938444,0.8659755,-0.46950406,0.11822711,-0.8958734,0.6047596],[-0.14340101,0.1965236,-0.48290092,0.25887898,0.037219662,-0.33671203,-0.47383884],[0.883092,-0.04182707,0.39375,-0.28783375,-0.27379218,-0.5107806,0.12861542],[-0.3499007,-0.075701565,-0.16065952,0.028407833,-0.21673161,0.32120997,-0.24848087],[-1.0644221,-1.5145135,1.0423622,0.057657007,-0.8929386,0.38188818,-0.29111302],[0.6651675,-0.10167774,0.34609315,-0.41527653,0.24346839,-1.3106738,0.04831263],[-0.33749178,0.13250409,-0.17898846,-0.07075638,-0.325455,0.4888969,-0.32574978],[-0.13392222,0.005456629,0.32891217,0.2271199,0.03492276,-0.6633292,0.12100792],[-0.87907666,-0.5363504,0.67260146,-0.8091148,0.42400393,0.35343498,-0.5102727],[0.73019344,-0.2813332,0.32472983,0.5224319,-0.19995011,-0.8258774,0.12310978],[-0.9651855,-0.19100729,-0.40759322,0.079893395,0.14696078,0.21351884,0.17654544],[-0.38321492,-0.5142046,0.69242734,-0.7369066,-0.16813168,0.6556536,-0.5864559],[-0.87097305,-0.40665868,0.033173006,-0.36359137,0.2589845,0.35792008,0.16423905]],"activation":"σ","dense_2_b":[[-0.022246333],[-0.20147786],[0.01618344],[-0.018682426],[-0.39971286],[-0.37426376],[-0.05391573],[-0.14660585],[-0.12656218],[-0.13277695],[-0.1482318],[-0.31037378],[-0.18615629]]},{"dense_3_W":[[-0.44387364,-0.21935597,-0.264997,0.5069316,0.5022933,-0.08028709,0.39096925,-0.6225095,0.68565357,0.42978552,0.34397504,0.35004535,0.5203644],[0.7957216,-0.052110795,0.6300835,-0.47696984,-0.1722768,0.6797043,0.3657801,0.37323546,-0.4012943,0.56815857,0.08386955,0.013114558,0.5138369],[-0.0116800405,-0.3395463,0.52625775,-0.33296672,-0.6938831,-0.008207481,-0.47937372,-0.119277634,-0.20143117,0.46600667,-0.013720797,-0.29413077,-0.17268106]],"activation":"identity","dense_3_b":[[-0.060016062],[0.030613739],[0.060220987]]},{"dense_4_W":[[1.0726175,-0.54023695,-0.9860894]],"dense_4_b":[[-0.053101283]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022 b'8965B10092x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022 b'8965B10092x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..3846c4ff8a --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022 b'8965B10092x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.6808248],[1.0210598],[0.5966659],[0.042756997],[1.0107573],[1.012554],[1.0153259],[0.9912984],[0.9735415],[0.9533497],[0.9332258],[0.042687085],[0.042698804],[0.042709883],[0.042716887],[0.04270658],[0.042552505],[0.04235409]],"model_test_loss":0.008525088429450989,"input_size":18,"current_date_and_time":"2023-08-11_07-30-00","input_mean":[[22.609735],[0.021366691],[0.0036772767],[-0.0055039055],[0.018654037],[0.020882115],[0.02251627],[0.021924747],[0.02177209],[0.018817721],[0.015407738],[-0.005619203],[-0.0055884435],[-0.005562743],[-0.005521372],[-0.0055254106],[-0.005608956],[-0.005731615]],"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.10787289],[2.7295141],[-0.014846635],[-2.52249],[-0.41797954],[0.009203023],[-0.03822759]],"dense_1_W":[[0.006059761,-0.2780369,0.019265022,0.3020706,0.034155324,-1.3772042,0.47423708,0.35504794,0.36091778,-0.19814305,-0.16233607,0.22252728,0.31619906,-0.26939157,0.13296632,0.16370413,0.24879563,-0.44122157],[1.2936878,0.5217924,0.16455218,0.27345595,-0.03019537,1.0137162,-1.5315937,0.121129505,0.2535813,0.051281486,-0.114028275,0.08941389,-0.16636313,-0.046149377,-0.58158803,0.44673163,0.3362695,-0.30439505],[0.010025998,-1.1366434,0.06847304,0.05892584,0.7231386,-0.90292823,0.3060419,-0.17182396,0.06936535,0.13302577,-0.08824037,-0.6510271,0.25069413,0.5232841,-0.39950168,-0.1576116,0.20445362,0.044638686],[-1.2454971,0.6038898,0.16080211,0.12973976,0.13429877,0.7463809,-1.2848366,-0.16410895,0.124600835,0.30732483,-0.16996159,0.18161087,0.29306152,-0.6729109,0.00044485295,0.22021376,-0.11470402,0.0064366944],[-0.057729445,-1.6840429,-6.5337806,0.5755675,1.9029108,0.3108279,-0.045327578,-0.4666652,-0.8846539,-0.7133611,1.3928591,-0.7003825,-0.16232297,-0.3231918,0.5879237,0.5351214,-0.0139183095,-0.46289876],[0.012766599,-0.6894872,0.24702038,-0.23795167,0.051006347,0.81989294,-0.44921973,0.5467078,0.1596552,-0.13800426,-0.14706412,0.2545808,0.15971354,0.31360984,-0.8261207,-0.0990083,-0.2607686,0.524966],[0.011152478,-0.2827323,-0.0088778855,0.10415767,0.04776933,-1.0724484,0.85188013,0.12321841,-0.17070293,0.04727044,-0.03278087,-0.34906387,-0.070353836,0.4458464,-0.016616534,0.07696789,-0.16656372,0.2188996]],"activation":"σ"},{"dense_2_W":[[0.013153307,0.72258556,-0.9607895,0.5651246,0.30607197,-0.020686822,-1.0686581],[0.250104,-0.78947,0.47588462,-0.6149001,-0.032745462,-0.4966682,0.88839453],[0.22150557,-0.76598793,-0.3002023,1.2499317,-1.6504543,0.030420702,0.15898795],[-0.083388545,-0.689518,0.05265897,1.5231378,-1.540956,0.26537773,-0.5574814],[0.24958974,-0.37062392,-0.14619073,-0.13918088,0.43284532,0.04136838,0.07143529],[0.15065649,-0.109692805,0.093387246,0.30221173,-0.024876209,-0.09227776,0.63619983],[0.56862855,-0.17278619,-0.33281788,-0.10547164,-0.00034883298,-0.56013817,-0.22195897],[0.42458898,-0.77232456,0.6531793,-0.07446621,-0.1938117,-0.45410666,0.6741056],[-0.16886851,-0.47917107,0.49286413,-0.034239717,-0.108527124,-0.08425037,0.07619126],[-0.26427963,-0.02655328,-0.7206567,0.46840718,-0.6032674,0.5223421,0.075842224],[0.0049433056,0.95529455,-0.5440883,0.41637206,-0.45465398,0.8077066,-0.71393406],[-0.063968115,-0.108970076,0.109497316,-0.3942332,-0.68592453,-0.0995049,-0.4702665],[-0.70982593,0.37136346,-0.37781605,0.35262644,0.4457534,0.16508546,-0.5957397]],"activation":"σ","dense_2_b":[[-0.116926156],[0.0042479504],[-0.46176797],[-0.23112983],[0.011751201],[-0.011064423],[-0.038083997],[-0.029864028],[-0.008636633],[-0.040441785],[0.016329648],[-0.3489733],[-0.0816719]]},{"dense_3_W":[[-0.022905884,-0.09678962,-0.42239848,0.013462638,0.31903088,-0.51887375,-0.33630884,0.26145482,-0.1154883,0.33833036,0.11669115,0.06747294,0.11933737],[0.050040435,-0.5856353,0.14493953,0.6705113,-0.3872963,0.361062,-0.5757033,-0.16463317,0.09669611,-0.44681597,0.35252583,0.50204754,0.63696355],[-0.45258597,0.3210578,-0.28552428,-0.19756064,0.47599337,0.4500213,-0.24421427,0.72807336,0.25044173,-0.62012583,-0.6892487,0.28510118,-0.39239216]],"activation":"identity","dense_3_b":[[-0.032324813],[-0.058080077],[0.051499244]]},{"dense_4_W":[[0.19064297,0.63367367,-1.2247652]],"dense_4_b":[[-0.051857576]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022.json b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022.json new file mode 100755 index 0000000000..d7b16b7060 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA C-HR HYBRID 2022.json @@ -0,0 +1 @@ +{"input_std":[[7.92219],[1.0339159],[0.6051184],[0.040277395],[1.0160568],[1.0193809],[1.0235395],[0.9978284],[0.9780647],[0.953401],[0.92466515],[0.04011991],[0.040149756],[0.040181845],[0.040220965],[0.040193263],[0.039972864],[0.039762717]],"model_test_loss":0.010501861572265625,"input_size":18,"current_date_and_time":"2023-08-11_06-39-21","input_mean":[[22.015877],[0.016454747],[-0.0035791518],[-0.006060402],[0.017588632],[0.018613027],[0.01872038],[0.01622388],[0.013543572],[0.008158607],[0.0060163783],[-0.0061950283],[-0.006164029],[-0.006132473],[-0.0060454626],[-0.006085043],[-0.0062024957],[-0.006308306]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.08562436],[-0.13248813],[-0.6056908],[3.7711034],[-4.002061],[-1.0201851],[0.7905752]],"dense_1_W":[[0.008472031,1.9303364,5.75964,-1.236273,-1.9233848,-0.20769979,-0.50922215,0.77782845,0.93831205,1.015304,-1.6144773,0.83374774,0.7880719,-0.17530817,-0.22706063,-0.8191557,-0.19291312,0.83966184],[-0.007752059,-1.7240039,0.08638296,0.4374327,0.8499669,-0.58740795,0.44271347,-0.43893647,-0.79377645,-0.470287,0.6905167,-0.25326452,0.004325121,0.4151441,-0.20191722,-0.93765545,0.24482074,0.20686845],[-0.73755896,0.25490418,1.6415513,0.61049616,0.10450067,-0.005047854,0.26623517,-0.40121377,-0.57618237,-0.105919234,0.49663854,-0.18851577,0.003680681,0.07382204,-0.7838218,-1.418447,-0.8041371,0.06338623],[1.506414,-0.7172249,-0.26160046,-0.3195705,0.061357655,-1.2254318,1.7426652,-0.39996,-0.8630745,-0.0965681,0.1755039,-0.43433473,0.072750255,0.7390096,0.6420074,-0.6429821,-0.19715068,0.40123448],[-1.462788,-0.25966784,-0.25197747,-0.74088174,-0.39430162,-0.6678362,1.4408759,-0.8539805,-0.67458963,-0.0025512646,0.098765895,-1.3845773,0.84524035,1.4456284,0.8360301,-0.89562434,-0.39231324,0.55299884],[0.96476454,-0.5160151,-0.058161568,0.09431531,0.24567744,-1.7172141,0.87807894,0.32966504,0.13244158,0.0830991,-0.20607454,-0.7199951,-0.3938647,1.0462891,0.21604428,0.09326921,0.23194839,-0.21566468],[-1.0580249,-0.091983035,-0.06607944,-0.14238882,-0.032799177,-1.615105,0.88772935,-0.1148385,0.30407813,0.14823009,-0.25907746,-0.43574435,-0.119376965,0.4874739,0.5467528,0.2210292,-0.21703728,0.02701344]],"activation":"σ"},{"dense_2_W":[[-0.34801432,0.25854328,-0.10087859,0.91155136,0.47692245,0.386249,-0.07805484],[-0.114083804,0.08665275,-0.40829253,0.5105505,0.50143373,0.42545924,0.43460196],[-0.07745485,0.19914009,0.59899527,-0.86949354,-0.60257334,-0.27688003,-0.39490694],[-0.35776904,-0.09782943,-0.3387631,-0.6445889,-0.13637964,0.037489194,-0.4306386],[0.3664335,0.082265064,-0.3529968,-0.21454561,-0.690712,-0.40638104,-0.22740813],[-0.0052428595,0.06399636,-0.4362087,0.3643625,0.1340138,0.880946,0.51570714],[-0.42193365,-0.1661316,-0.4134133,0.069665395,-0.19969232,-0.49261189,-0.5509127],[0.429386,-0.04167956,0.069151536,0.054689564,-0.50504297,-0.5080177,-0.41438618],[0.61227196,-0.043998886,0.32082903,-0.45597827,-0.52242905,-0.10526631,-0.43464538],[-0.23791881,0.37427938,0.07763096,0.38759655,0.6870389,-0.2448108,0.22891921],[0.28850517,0.116395116,0.22972369,-0.40831333,0.26074657,-1.0264262,-0.5928814],[-0.8139447,-0.14806162,0.15462387,-0.42620218,-1.2090021,0.666371,-0.6178426],[-0.63677526,0.8647508,0.5548903,0.1261759,0.304771,0.28499243,-0.14660935]],"activation":"σ","dense_2_b":[[-0.21753441],[-0.5461314],[0.105829634],[0.15688233],[0.18240593],[-0.6977311],[0.17758703],[0.21791771],[0.110497065],[-0.45180324],[0.19605672],[-0.012792069],[-0.2483234]]},{"dense_3_W":[[-0.075603865,-0.4466055,0.2090132,0.44769254,0.5857853,-0.0886282,0.6599453,0.52339387,0.18296923,-0.4225845,0.26281965,-0.10703673,-0.6357655],[0.6664568,0.21380727,-0.21715312,-0.17340335,-0.029390512,0.43210483,-0.19127384,-0.4889734,-0.27069238,-0.16609475,-0.29695383,-0.6717075,0.570048],[-0.49318448,-0.535808,0.0617476,-0.29404658,0.3541034,-0.5322448,0.15549439,0.55970424,0.3449248,0.16689838,0.35094023,0.17978139,0.0012035011]],"activation":"identity","dense_3_b":[[0.009320866],[-0.014181249],[-0.008072699]]},{"dense_4_W":[[0.9121412,-0.99914575,0.15805192]],"dense_4_b":[[0.015280737]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33540x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33540x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..185558301f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33540x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.9780097],[1.4051862],[0.48408332],[0.04853162],[1.3928818],[1.3977288],[1.4018258],[1.375475],[1.3433505],[1.2949077],[1.2478521],[0.048412163],[0.048431084],[0.048459467],[0.048518475],[0.048504874],[0.04839253],[0.0481143]],"model_test_loss":0.00801712553948164,"input_size":18,"current_date_and_time":"2023-08-11_08-30-17","input_mean":[[25.642933],[-0.0019835518],[0.0040060235],[-0.009254944],[-0.0033266023],[-0.0029646403],[-0.0019904082],[-0.0020933496],[-0.0038487294],[-0.005581948],[-0.0044637513],[-0.009216257],[-0.009224849],[-0.009232599],[-0.00923392],[-0.00923287],[-0.009259574],[-0.009315466]],"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.04618915],[-3.334577],[-0.022748481],[-0.07218225],[3.7755296],[-0.122582935],[-0.0052783587]],"dense_1_W":[[-0.0012499753,0.33883905,0.042702407,-0.2214031,-0.36033404,1.2806584,-1.0731505,0.25989679,0.14866988,-0.10340344,-0.015702773,0.5870672,-0.09173469,-0.32383582,-0.35129866,0.27342206,0.0042890036,0.025042968],[-1.6428236,-0.63481885,-0.111530595,0.3713098,0.092823684,-0.6249234,0.54686266,0.41442233,0.03279755,-0.1797473,-0.09668681,-0.3626609,0.28806838,-0.031328026,-0.23864591,-0.1097307,-0.016905924,0.0765963],[-0.0009610195,1.2744341,-0.11151947,0.054716695,-0.73242664,0.90427834,0.16628876,-0.017297843,-0.053887896,0.30539826,-0.19929217,-0.22211027,0.10559502,-0.13222888,0.23039715,0.42640105,-0.40309757,0.036333088],[-0.023137279,1.8224742,4.434084,-0.51519555,-1.1649675,-0.28008473,0.09062625,0.14845455,0.49387005,0.02369536,-0.5737739,0.32818693,0.34118465,0.1457762,-0.5785472,0.1424408,0.16707024,0.08814323],[1.7683705,-0.1194262,-0.13175204,-0.23340832,0.29679087,-0.8300054,0.16098455,0.44727117,-0.1962079,-0.44604713,0.14344603,-0.46670324,0.37683523,0.5052653,-0.11880916,-0.39280412,0.36395994,-0.05599607],[0.00085408555,-0.3749454,-0.00757018,0.07293645,0.47284073,-1.08383,0.43937385,-0.3126087,-0.2110254,0.091425285,0.019250873,0.18259677,-0.20196928,0.24545331,0.41908297,0.12497451,-0.04950806,-0.27745348],[-0.002797162,0.45220622,0.0928887,0.14079146,-0.038952228,1.2299527,-0.77015364,-0.33163518,-0.19668595,0.18426204,-0.054098736,0.3948651,0.4821092,-0.12373006,-0.4104894,-0.3608244,-0.050283466,-0.054687865]],"activation":"σ"},{"dense_2_W":[[-0.9274079,3.2624276,-0.5414991,-1.8350966,-0.8542368,0.35031518,-0.34859648],[0.9660724,-0.7803512,0.48230568,0.0805093,0.19358476,-0.52365863,0.4405566],[0.7851582,-0.6059611,0.086790875,-0.26486087,-0.7225202,0.06725921,0.7280278],[0.62741816,0.033202164,-0.2685909,-0.15281594,-0.8427713,0.13733315,0.01932823],[0.8164209,-0.41978616,0.2836711,0.26222813,-0.87872094,-0.8590503,0.68521476],[-0.043918654,0.16022983,-0.2956201,-0.4721823,0.8772654,1.004911,-0.83114386],[0.07872535,-0.29399154,-1.0099515,-1.1905336,0.052381076,-0.71205014,-0.7501543],[-0.4239558,0.48020416,-0.45598856,0.09060652,0.64608604,0.5741175,-1.1443394],[-0.09043453,-0.1659236,-0.6169011,-0.7262809,1.2436397,1.0421194,-0.40427843],[0.4041751,-0.14081301,0.57343036,0.18853396,0.12455946,-0.9625049,-0.17269157],[-0.8457818,0.12824811,-0.046741482,-0.18018991,0.9064454,0.3723606,-0.51164293],[-1.1185607,1.6248577,-0.42184004,-0.4399729,-0.2472109,0.8469407,-0.9312666],[0.49973565,-0.3323982,-0.3472047,-0.593044,-0.38130876,-0.39827725,0.49389073]],"activation":"σ","dense_2_b":[[-0.18386438],[-0.05718434],[-0.06549015],[-0.07134607],[-0.10577739],[0.005866841],[-0.2776331],[-0.04393405],[0.1977544],[-0.06883987],[0.05352327],[-0.20584084],[-0.11540173]]},{"dense_3_W":[[-0.06877563,-0.7143566,-0.03641639,0.39388388,-0.18843412,-0.014399047,-0.45135775,0.8130004,0.5402372,-0.22440514,-0.026450275,-0.359043,-0.019707523],[0.18318374,-0.5381017,-0.6231416,-0.5614665,-0.5481862,0.61288226,-0.22442989,0.39143884,0.5283164,-0.4216234,0.38933647,0.2545475,-0.002126224],[-0.88305146,0.18006742,-0.40557522,-0.16114128,0.08966503,0.26192102,-0.4644843,0.3903803,0.02153314,0.22797619,-0.26264903,-0.33558837,0.53328735]],"activation":"identity","dense_3_b":[[-0.0750595],[0.053941935],[-0.05915371]]},{"dense_4_W":[[-0.07031837,-1.2113694,0.261664]],"dense_4_b":[[-0.05185825]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33542x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33542x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..541c69ebe1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33542x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.253551],[1.2301955],[0.4433781],[0.048036292],[1.2180563],[1.2215648],[1.2244625],[1.2078366],[1.1872348],[1.1560153],[1.1222544],[0.047749482],[0.047788024],[0.04782943],[0.047852717],[0.047783505],[0.04746524],[0.046932556]],"model_test_loss":0.008610215969383717,"input_size":18,"current_date_and_time":"2023-08-11_08-57-34","input_mean":[[26.187445],[-0.0071422574],[0.001980914],[0.001046037],[-0.007964942],[-0.007880573],[-0.007988253],[-0.009467786],[-0.008615659],[-0.008149362],[-0.009630898],[0.00084624556],[0.00086762797],[0.00088921416],[0.0008551317],[0.00078379776],[0.00071628735],[0.0006797733]],"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.02733056],[0.9519103],[1.179534],[-5.256048],[-0.068846025],[-0.001023872],[0.047838554]],"dense_1_W":[[-0.007770572,-1.2564598,0.036638457,0.21713501,0.23338117,-0.7073799,0.33575004,-0.19753128,0.24105607,-0.25897455,0.00047999376,-0.40289143,-0.1727166,0.26855484,0.15926753,-0.11272167,0.14361864,-0.027891645],[1.4905782,-0.47127068,0.26584575,0.3194812,1.1585804,-0.49999246,0.8128295,-0.06897485,0.27223653,0.27935958,0.6564722,-0.1511041,0.08323231,0.105417795,-0.19195606,-0.5771197,0.2512899,-0.16904134],[0.9752811,0.3798001,0.17150617,0.078614265,-0.4016901,1.0311221,-0.43946624,-0.046153106,0.45251793,0.23658508,0.19738759,0.27465844,0.24110676,-0.52507246,-0.1172636,-0.13135712,0.0018473302,-0.044648286],[-1.9979073,0.469533,0.38075405,0.38248965,0.03199995,0.8767418,-0.3808672,0.13193713,0.9768667,0.6579403,0.27945238,0.12676767,0.05653972,-0.5021998,-0.005707313,-0.5350684,0.50075513,-0.48098195],[0.09501199,-0.43849072,-0.02388532,-0.19896263,0.5059142,-0.7151482,0.5014636,0.14320679,-0.26502132,-0.10398254,0.097926326,-0.31807315,-0.017643483,0.26102692,0.11085488,0.44673,0.070843324,-0.24798131],[0.01869301,1.0456816,4.226997,-0.0017353684,-0.24813181,-0.09464798,0.19211425,0.2305938,0.75171006,0.0668822,-1.5460484,0.17806499,-0.3484644,-0.10388819,0.11723415,-0.087600686,0.043417487,0.026686585],[0.026612299,0.18889695,0.025076069,-0.31810546,-0.24766445,1.1192691,-0.5334893,0.19868112,-0.17242211,-0.24407543,0.15552837,0.44391513,0.22742282,-0.40553492,-0.3606672,0.12259318,0.1473879,-0.045519803]],"activation":"σ"},{"dense_2_W":[[0.60255677,0.16861977,-0.09762268,-0.2837764,-0.07567895,-0.37070033,-0.79792696],[0.49195844,0.17409827,-0.4679116,-0.20569389,0.6392559,-0.2820173,-0.7966848],[-0.053543754,-0.04045658,0.061384078,-0.27339914,0.29516026,0.09619451,-0.5365491],[0.19862464,0.40960187,-0.5885574,0.19464053,0.31404445,-0.14482382,-0.71336615],[0.050688785,-0.2452892,-0.71070766,-0.0914633,-0.36177072,-0.4671836,-0.55903697],[0.4795129,-0.131694,0.1492489,0.15489131,-0.007348985,-0.22303534,-0.31186175],[0.5021524,0.2245533,-0.6239134,-0.6030447,0.4679717,0.1760995,-0.099333],[-0.49081337,0.24919184,0.8373565,-0.41256565,0.28563014,0.67823786,0.38134417],[-0.8883889,-0.43416515,0.52214336,0.38264576,-0.64902043,-0.3316096,1.2996199],[0.13214777,-0.09506896,-0.7131637,0.5065029,-0.10351111,-0.593896,-0.7980942],[0.10000199,0.33303285,-0.18169716,0.19090554,-0.36384225,0.3556522,-0.67900723],[-1.5198281,-1.2734241,0.3973511,1.1452348,-1.8075484,0.96129864,1.0681554],[-0.81462014,-1.5782593,1.6699271,-0.5293936,-1.0444264,0.0026833075,1.7008731]],"activation":"σ","dense_2_b":[[-0.07236402],[0.028845945],[-0.1323438],[-0.1738864],[-0.09381208],[-0.1300469],[-0.11935734],[0.07721876],[0.14992687],[-0.06720915],[-0.19223419],[-0.33762133],[-0.1208263]]},{"dense_3_W":[[0.16432953,0.5942093,0.24944223,0.07672291,0.17414363,0.19451983,0.59266853,-0.668625,-0.64897245,0.6133092,0.21917813,-0.2546305,-0.6117167],[0.58310723,0.54848456,0.44340667,0.1732376,0.31500515,0.234152,0.39546844,0.19260909,-0.2684148,0.04366559,-0.37576258,-0.3523593,0.018720862],[0.2536531,-0.7660225,0.56532425,0.067297734,0.030229906,-0.009724075,0.45067325,-0.23095876,0.112479135,0.20881021,0.014405874,0.8360824,-0.10908318]],"activation":"identity","dense_3_b":[[-0.09141844],[-0.10133247],[0.05868698]]},{"dense_4_W":[[-0.96234053,-0.4108186,0.2421145]],"dense_4_b":[[0.09122495]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33581x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33581x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..03a5364272 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018 b'8965B33581x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.861338],[1.27499],[0.57348746],[0.046157062],[1.2795943],[1.2781751],[1.2762386],[1.24604],[1.2176551],[1.1878494],[1.1657255],[0.046013683],[0.046028],[0.04604425],[0.045964256],[0.045818],[0.045440868],[0.044904295]],"model_test_loss":0.0066848318092525005,"input_size":18,"current_date_and_time":"2023-08-11_10-12-24","input_mean":[[25.302942],[-0.08986686],[0.006437036],[-0.000770344],[-0.09078672],[-0.09131106],[-0.09105468],[-0.087818414],[-0.08535958],[-0.08077309],[-0.07629666],[-0.0008042366],[-0.00080282136],[-0.00080204045],[-0.0008154784],[-0.0008211331],[-0.0008975459],[-0.0010069694]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0742805],[0.92973286],[-1.2597991],[-0.015863936],[0.076297365],[0.039942347],[-0.09862842]],"dense_1_W":[[-0.89714944,-0.5694732,0.2553829,0.08549169,-0.3029584,0.8248408,-0.34906214,-0.0043470534,0.29719195,-0.2585757,0.16454367,0.2295475,0.1065112,-0.042710267,-0.63867694,0.22198902,0.1815665,-0.019736245],[0.043996632,-0.5165713,-0.01470944,-0.01490538,0.0015828871,-0.37951434,0.41633916,-0.43565232,0.0105871195,-0.09095717,0.14132233,-0.23960045,-0.23504797,0.4974917,0.23090471,-0.0010534904,0.14477685,-0.15111166],[-0.8907693,0.102393575,-0.26280454,-0.2428607,0.0006221315,-0.75598705,0.89070266,0.24951544,-0.1677102,-0.22674787,0.041006655,-0.6199366,0.055024263,0.34216496,0.2160915,0.37361667,0.13422973,-0.37392148],[-0.041263368,0.22979482,0.02687934,0.23515709,-0.058687184,1.2512988,-0.31698132,-0.20909786,-0.24276179,0.0524146,0.18924035,0.05974352,0.018966423,-0.30618235,-0.39119706,0.09769458,0.1381972,-0.09514759],[0.046502795,0.6602059,-0.037667993,-0.25442934,-0.11708759,0.86960804,-0.49021152,-0.07804353,-0.11474104,0.1469114,0.04552821,0.3126329,0.2082432,-0.5143092,0.114365466,0.15073813,-0.16331002,0.05541271],[0.05034215,0.14753957,0.032934844,0.028605228,-0.5262837,0.40912592,-0.21305162,0.5888757,0.5798016,-0.2346427,-0.29419842,0.1249654,0.34906247,-0.4432667,-0.36166826,-0.043212466,-0.00637034,0.10826623],[0.002508507,-0.9045623,-6.878152,-0.029319404,1.0181056,-0.451885,0.033875328,-0.75717235,0.07011871,-0.14485015,0.786407,-0.3947812,-0.098444514,0.39931172,0.10100173,-0.07530515,0.36536965,-0.30755058]],"activation":"σ"},{"dense_2_W":[[0.22400917,-0.30598494,0.25054607,0.37136942,-0.24538715,0.034769878,0.4539929],[0.037326954,-0.41299608,0.16081683,0.24574164,0.056523614,-0.027640207,-0.1309322],[-0.39091694,0.5082205,0.93584853,-0.63075423,-0.15180112,-1.0432836,-0.22495167],[-0.15306623,-0.45128495,0.41558233,0.48239455,0.6017532,0.7212807,-0.30316913],[-0.08770284,0.46613476,0.47092214,-0.53098565,0.050529372,-0.8164752,-0.0025518546],[-0.33539963,-0.48491186,-0.34354278,0.012208527,0.4700861,0.36545125,-0.041543964],[0.17866884,-0.19735998,-0.67110294,-0.3110027,-0.5290932,-0.68236077,-0.111222625],[-0.7327989,0.93089855,0.07169331,-0.49829224,0.19631308,-0.13825691,0.5089517],[0.36573797,-0.3776811,1.7510772,-1.9604117,-2.1450837,-1.4785987,1.3181192],[-0.21792145,0.016347371,0.10254979,0.51089144,-0.06845565,0.3958906,0.20665437],[-2.080944,3.407494,-0.39748654,-0.95476985,-0.6695305,0.49773726,1.6649209],[-0.3173275,-0.17373022,0.098646894,-0.46179616,-0.40287703,-0.20223522,-0.4789483],[0.030579967,-0.23474593,-0.26780617,0.6667259,0.5838826,0.37227827,-0.38209188]],"activation":"σ","dense_2_b":[[0.031172732],[-0.046594083],[0.04188912],[-0.009133611],[-0.020946773],[-0.008495372],[-0.2704271],[0.094023824],[-0.40898916],[-0.048260532],[0.6355896],[-0.01349315],[0.003674332]]},{"dense_3_W":[[-0.31565678,0.29919386,0.12521249,-0.51271564,0.4427603,0.122981675,0.48869878,-0.06551224,0.7051895,0.21552129,0.39309025,0.5903403,-0.5543942],[-0.2777765,-0.6289323,0.28298908,0.31119838,0.6172389,-0.27801976,-0.23232892,0.41942078,-0.05232441,-0.3835318,0.032355104,0.40797642,-0.5436199],[0.30726758,-0.13741928,-0.16658607,0.55618703,0.04306974,0.5606126,0.19286956,-0.5398464,-0.2852267,0.1816551,-0.6652878,0.26612532,0.55205345]],"activation":"identity","dense_3_b":[[-0.03041773],[-0.017930472],[0.016982466]]},{"dense_4_W":[[-0.9280437,-0.7111026,0.5093497]],"dense_4_b":[[0.021796599]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018.json new file mode 100755 index 0000000000..112a029733 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.383597],[1.5203282],[0.5082514],[0.0518889],[1.5132513],[1.5174434],[1.5199335],[1.4851471],[1.4453254],[1.3881189],[1.3348266],[0.051785868],[0.051798876],[0.051812388],[0.051785596],[0.051688608],[0.051483054],[0.051126033]],"model_test_loss":0.009930684231221676,"input_size":18,"current_date_and_time":"2023-08-11_08-01-58","input_mean":[[25.470009],[0.0042077163],[-0.0003353114],[-0.0023303148],[0.0042589367],[0.0040556374],[0.0040202853],[0.0027058893],[0.0012695856],[0.0030413663],[0.005136044],[-0.002385892],[-0.0023771315],[-0.0023616166],[-0.0023057486],[-0.0023015393],[-0.0022862742],[-0.0023375773]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.2718573],[0.15701862],[3.248821],[-3.5744123],[0.004125263],[-0.7583393],[-0.037708215]],"dense_1_W":[[-0.2879904,1.5954516,-0.0046582473,0.06479758,0.29433665,0.8528065,-0.6544351,-0.4978888,-0.0794865,0.468229,-0.05461509,0.9035509,0.15841998,-0.54152334,-0.4469752,0.07425236,-0.11780557,0.12198392],[0.006679829,0.40255344,0.009154457,-0.16641183,-0.39951205,1.4443473,-0.9139237,-0.057986554,-0.11843848,-0.0044754846,0.0925529,0.5124026,-0.0049318043,-0.2537788,-0.14938481,-0.224736,0.047049627,0.13330497],[1.7283604,-0.05969189,1.0530555,0.27028522,0.47397172,0.5086671,-0.63976616,-0.19285004,0.49581873,0.13492277,0.20006694,0.06384355,0.24601626,-0.3723971,-0.032245487,-0.13195412,0.31266445,-0.18301867],[-1.8633327,0.22747979,1.1220167,-0.02145294,0.28228733,0.85233575,-0.9075951,0.069776304,-0.18778838,0.56500834,0.1422919,0.41182467,0.2542804,-0.911527,0.53582734,0.023306668,0.07635535,-0.1735968],[0.022620516,-2.0202289,-4.6984797,0.37025738,1.6879617,-0.1484365,0.5125165,-0.90959346,-1.2976298,0.01080667,1.3414408,-0.295309,-0.27262625,0.2460714,0.11705216,0.34596816,-0.040567875,-0.3704739],[-0.1562062,-1.5769467,0.00974286,0.12022318,-0.060521524,-0.64386684,0.3535075,0.28329223,0.20385851,-0.23411226,-0.05331302,-0.43988168,-0.62577605,0.77806795,0.18664421,-0.41524816,0.19130825,0.045515057],[0.0025923399,-0.49789965,0.0048285224,0.0648064,0.5884254,-1.1329092,0.41850495,-0.10409346,-0.48019585,0.07617594,0.13875124,-0.41700658,-0.12853211,0.72437525,0.18255632,0.032605115,0.12712069,-0.07419187]],"activation":"σ"},{"dense_2_W":[[-0.7156104,-0.68829536,-0.7385952,0.55841655,0.26912323,0.6066667,-0.12475776],[-0.511934,-0.9153065,-0.6389169,0.3585597,0.2839266,0.5098371,0.50414217],[0.2944038,0.5859187,-0.5172965,0.3677821,0.054128557,-0.08085657,-0.89583373],[0.33193415,-0.5547596,-0.023806248,-0.48235148,-0.221697,0.033068255,0.5705964],[-0.46894178,-0.10590048,0.21662314,-0.040064402,-0.3858671,-0.44947234,0.59122],[-0.60725653,0.3228978,0.1861176,-0.2924726,0.42708892,-0.082993455,0.22582808],[-0.2562046,0.8381702,0.31616238,0.24505608,-0.12987854,-0.6930256,-0.76575553],[0.61845154,0.60325474,-0.575144,0.40564325,-0.714385,-0.21887647,-0.94107187],[-0.54684615,0.11815464,-0.6585375,-0.25468546,-0.09934533,0.117599614,-0.38795406],[0.16209334,-0.35611826,-0.15108901,-0.21047153,-0.3256097,0.28901953,0.80304426],[0.027611624,0.50159204,0.619658,-0.12446912,-0.59465826,-0.037129514,-0.21241622],[0.27525434,0.5680337,-0.107110925,0.24088366,0.043958385,-0.86346936,-0.64997584],[-0.024266828,-0.11527472,0.3829225,-0.17169206,0.08911536,-0.8643167,0.06748397]],"activation":"σ","dense_2_b":[[-0.17570926],[-0.14594816],[-0.05026906],[0.027095933],[-0.04517862],[0.06473192],[-0.028851002],[-0.12211885],[-0.27259725],[0.014737305],[0.02095205],[-0.070182],[-0.09559173]]},{"dense_3_W":[[0.4202054,0.703193,-0.3041087,0.48369282,0.1436207,0.37104702,-0.63816553,-0.58745027,0.13683067,0.5385481,-0.46124828,-0.5352316,0.19800703],[-0.86401147,-0.18695252,0.62547266,-0.68338186,0.10880029,0.3713409,0.027055534,0.41835827,0.27228013,0.11604386,-0.0106600085,0.20140606,-0.10059595],[0.056002628,0.035810802,-0.3965656,0.3976536,0.1726735,0.31009713,-0.09359465,-0.0209684,-0.26736382,-0.1666654,-0.5963385,0.03144756,-0.447781]],"activation":"identity","dense_3_b":[[0.022595499],[-0.16177715],[0.034701686]]},{"dense_4_W":[[-1.0497395,0.08801628,-0.6607149]],"dense_4_b":[[-0.026550818]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2021 b'8965B33630x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2021 b'8965B33630x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..5e651c0507 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2021 b'8965B33630x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.546224],[1.4038109],[0.5651468],[0.043467518],[1.3987619],[1.4010857],[1.4028497],[1.3774658],[1.3484732],[1.3066528],[1.2626185],[0.043321155],[0.043366555],[0.043409824],[0.043420527],[0.043341193],[0.043100573],[0.04268996]],"model_test_loss":0.008768445812165737,"input_size":18,"current_date_and_time":"2023-08-11_11-30-42","input_mean":[[23.653286],[-0.08564946],[0.00538869],[-0.0041225236],[-0.08325304],[-0.08371971],[-0.08399296],[-0.078614086],[-0.07081872],[-0.05996409],[-0.049967643],[-0.00410234],[-0.0040951944],[-0.0040958365],[-0.0041202484],[-0.00410688],[-0.0041029328],[-0.00419054]],"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.03874873],[-0.784227],[3.223217],[0.5529675],[0.30194795],[-1.4031215],[0.056803867]],"dense_1_W":[[0.034401055,-0.34275624,0.030142846,0.1802324,-0.107920006,-1.022601,0.54692894,0.13827248,-0.059076726,0.30037975,-0.31303012,-0.06996616,-0.12360416,0.28437266,-0.15365309,4.6970963e-6,-0.26872233,0.2647263],[-0.16882746,-0.5824008,-0.020696588,0.14142953,0.2510791,-0.82992935,0.7110236,-0.29950327,-0.11735881,-0.14580877,0.19486403,-0.225828,-0.2887637,0.32220486,0.15587561,0.14097172,0.05713667,-0.11179676],[1.2839215,0.69310856,0.25602317,-0.010940563,0.09358904,0.9869969,-1.9319696,-0.5257503,-0.3271229,0.07050555,1.0539954,0.37352842,-0.48068744,-0.5090061,0.5122622,0.41323286,0.19394471,-0.44235808],[1.1244255,0.013561664,-0.29108623,-0.36359474,-0.19730152,0.99993306,-0.5672578,0.35510588,0.0071264915,-0.11894784,-0.73594254,0.24889143,0.22513571,0.13149923,-0.34713557,-0.09747717,-0.21321945,0.36720133],[0.15369973,-0.45637712,-0.03247139,-0.1660746,-0.09586008,-0.50975263,0.6658816,-0.49961114,0.11238557,0.07679043,-0.0053253584,-0.15730502,-0.12147023,-0.2606572,1.0126175,0.005088513,0.28010598,-0.38153377],[-0.79352224,0.26021218,0.16691022,-0.21337944,-0.48989457,0.5108416,-0.9224001,0.012780019,0.02489179,0.38960975,0.22246063,-0.043535743,0.18737064,-0.2547757,0.2212282,0.41946402,-0.13940004,-0.1286837],[0.010760579,1.3616978,5.955588,-0.23460385,-1.2176392,0.08488249,-0.47026646,0.4500766,1.1898807,-0.050334588,-1.1531816,0.45957503,0.277536,0.27783328,-0.79819953,-0.6636131,0.3210711,0.3499502]],"activation":"σ"},{"dense_2_W":[[0.3657454,0.81196916,0.34115106,-0.05315271,0.418085,0.20080918,0.51165557],[0.24918951,0.758012,-0.7564233,-0.48264846,0.14990342,-0.45200977,-0.5562867],[-0.80529535,-0.9293644,-0.17528604,0.41654125,-0.21587072,0.21727388,-0.27255547],[0.5453549,-0.083353505,-0.49446028,0.53072816,0.4999342,-0.032543693,-0.27890655],[-1.0843325,-0.7817543,-0.7844736,-0.08889147,-1.439987,1.2749369,0.77239406],[0.14125653,0.5189451,-0.45035714,0.023866806,-0.18329848,0.025697729,-0.67258346],[-0.10291709,0.37623602,0.3589048,0.48825127,-0.16012862,0.22953656,-0.57453346],[-0.14062448,-0.6055541,-0.83215773,-0.40746033,-0.924489,-0.010786422,0.17521149],[0.30822852,-0.12148049,-0.40332836,-0.48652056,0.08054319,0.13378952,-0.7915521],[-0.7257491,-0.7932184,0.10272839,-0.25080377,0.0010266063,0.74610263,-0.049907055],[0.42381865,-0.0553793,-0.38158083,-0.265551,0.85806245,0.1474835,0.14327356],[-0.67127514,-1.3377081,1.2235403,0.68773735,-0.28817493,0.81384164,0.74030864],[-0.71422875,-0.88451463,0.27248266,0.44150946,-0.58906794,0.77334875,-0.2741372]],"activation":"σ","dense_2_b":[[-0.038974255],[-0.060381696],[-0.11952605],[-0.073940076],[-0.046222135],[-0.047778048],[-0.04543839],[-0.24633041],[-0.30813476],[0.036111247],[0.013441597],[0.1894709],[0.040286675]]},{"dense_3_W":[[-0.07313357,-0.59815574,0.26091176,-0.66873443,0.35969868,-0.25591415,0.0072562387,-0.098555766,-0.4751247,0.21601625,-0.14175397,0.41238782,0.47897983],[0.09714538,0.3654853,-0.2926264,-0.28464285,-0.61904335,0.3250731,0.15649477,-0.22976924,-0.41835013,-0.24120942,0.41197148,-0.17491877,-0.5697462],[0.55913174,-0.20682354,0.04047605,-0.075866535,-0.51092017,-0.47107786,-0.1388181,-0.17455935,0.5574489,-0.6044243,-0.13675697,0.4066009,-0.3129467]],"activation":"identity","dense_3_b":[[-0.054309756],[0.06553867],[0.04563365]]},{"dense_4_W":[[1.1299008,-1.1184049,-0.16297631]],"dense_4_b":[[-0.059165344]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2021.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2021.json new file mode 100755 index 0000000000..3b3aae741b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY 2021.json @@ -0,0 +1 @@ +{"input_std":[[8.547318],[1.4036797],[0.56934917],[0.04350854],[1.398559],[1.4011317],[1.40228],[1.3770106],[1.348263],[1.3074721],[1.2626077],[0.04330501],[0.043371696],[0.04343371],[0.04348332],[0.043410856],[0.04321263],[0.042814735]],"model_test_loss":0.008338634856045246,"input_size":18,"current_date_and_time":"2023-08-11_11-04-26","input_mean":[[23.64889],[-0.08561094],[0.015752671],[-0.004257724],[-0.08625081],[-0.08638373],[-0.08567994],[-0.077275604],[-0.06842236],[-0.056570813],[-0.04640004],[-0.004200933],[-0.004198378],[-0.004202762],[-0.004259174],[-0.004245101],[-0.0042204647],[-0.00425349]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1003305],[-0.9280888],[-0.27994263],[-0.03601646],[1.0726995],[1.5954292],[-0.07318528]],"dense_1_W":[[0.6028892,-0.5008186,-0.024919089,-0.12623027,-0.4729594,-0.38648638,0.2822896,0.09087385,0.01636962,0.024747238,-0.29404536,-0.18406688,-0.31876472,0.48221767,0.5086306,-0.06562299,-0.21337883,0.11643904],[-1.1941831,0.17382993,0.22181809,0.23333201,0.5458071,-0.43223855,0.5926918,0.3491883,0.1278165,0.50286424,-0.43537652,0.19344032,-0.26665846,0.11812404,-0.28001395,-0.3216877,-0.14064364,0.15485847],[0.07623883,1.5235251,6.7465596,-0.13723375,-0.80104774,-0.61400336,-0.39275688,0.5211227,0.37626675,0.3823852,-0.80926275,0.23730527,0.34998953,0.20261207,-0.464487,-0.30715373,-0.26015738,0.43704194],[0.12629938,-0.28819624,-0.09535608,0.16085212,-0.16898133,-0.6793061,0.43381187,-0.2702881,0.065844,-0.1441075,0.040372517,-0.117076926,-0.32687485,0.5354,-0.1250812,-0.19841617,0.3460908,-0.06750503],[0.4682372,0.59703195,0.034524012,-0.006926566,0.060249697,1.3168854,-0.9804278,0.074283265,-0.18839869,-0.07103339,0.32018688,0.041558877,-0.04179399,0.012026822,-0.15508115,-0.1332163,0.27430537,-0.18467638],[1.3037213,0.2139271,0.22422606,0.17373297,0.19543481,0.09874217,0.3998748,0.6430583,0.08877143,-0.05584769,-0.13569269,-0.4579002,0.12869297,0.39104635,-0.1829238,-0.2530643,-0.1974048,0.08369768],[0.088082924,-0.44940168,-0.19933243,0.07069701,0.7149304,-1.0380019,0.71266985,-0.4369744,-0.552529,-0.23388147,0.6032971,-0.16139722,-0.3540249,-0.026191853,0.60969,0.28289405,0.11056004,-0.31100357]],"activation":"σ"},{"dense_2_W":[[-0.6133522,0.1761722,-0.71424717,-0.0936426,0.8682251,-0.24639517,-0.30397138],[0.34320208,-1.0336052,-0.4439255,-0.2739278,0.3367824,-0.3631442,-0.98396087],[-1.6413774,0.08594568,0.71144843,-1.0480727,-0.11629067,-1.6811962,-0.8675772],[0.47143686,0.089915365,0.26338518,0.68463236,-0.97531956,0.32513487,0.65076643],[-0.87128234,0.064365715,0.1303472,-0.75249237,-0.25511387,-0.7430213,-0.28605184],[-0.7603966,-0.29632324,0.0682258,-0.7471322,0.5153051,-0.53268844,-0.21521862],[-0.3656277,-0.07363712,0.18693501,-0.9983321,0.69527906,-0.45794705,-1.0309372],[0.2617154,0.46204823,-0.6687536,0.82395816,-0.88860583,-0.33870435,0.4618431],[-0.39958304,-0.23751055,-0.8149946,0.19134824,-1.4698569,-0.43517134,0.62668824],[-1.4046016,2.1539013,-3.988871,-0.39821678,-1.9340425,-2.1167135,-1.0858109],[0.38306925,0.64414614,-0.5527955,0.6701854,-0.68190986,-0.18758336,0.7660656],[-0.82904243,-0.2745322,0.2605575,-1.0301431,0.27432004,-0.93553334,-0.739551],[-0.23676038,0.9406503,-1.986441,-0.4191224,-1.5621673,-0.88484937,0.3910027]],"activation":"σ","dense_2_b":[[-0.027016891],[0.08464052],[0.028135099],[-0.38301256],[-0.3638506],[-0.040266816],[0.16827495],[-0.36882532],[-0.40422207],[0.02508533],[-0.56583065],[0.09229101],[-0.416409]]},{"dense_3_W":[[0.0040040226,-0.6369987,-0.71731246,0.6850001,0.09157595,-0.41231555,-0.90613884,0.46305528,0.5752972,0.6877244,0.514109,-0.35633194,0.5317168],[0.1646857,0.52076554,0.14491199,-0.7185544,-0.07474149,0.60757786,0.53968096,-0.19788566,0.4318167,-0.51503956,-0.30411977,0.5457501,0.3619558],[-0.47842056,0.16373217,-1.109826,0.52913445,-0.5961691,-0.18387295,0.009211785,0.38275075,0.036590163,0.72789955,0.15105984,-0.82491213,0.72040874]],"activation":"identity","dense_3_b":[[-0.1681641],[0.029928174],[-0.06739022]]},{"dense_4_W":[[-0.72666985,0.20831722,-0.5900348]],"dense_4_b":[[0.07989163]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33540x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33540x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..ef4b109aee --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33540x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.8744264],[0.95179135],[0.41017145],[0.033567343],[0.9481631],[0.94890034],[0.9500518],[0.9391581],[0.92971367],[0.91555744],[0.9017156],[0.03344094],[0.03347542],[0.033526078],[0.033655073],[0.033587176],[0.033420175],[0.033133168]],"model_test_loss":0.006604278460144997,"input_size":18,"current_date_and_time":"2023-08-11_12-47-30","input_mean":[[24.228636],[-0.006917462],[0.012768614],[-0.01302538],[-0.007990223],[-0.007133511],[-0.006058136],[-0.000751731],[0.0036597915],[0.011357695],[0.014827531],[-0.012985793],[-0.012987019],[-0.012994645],[-0.013017216],[-0.013077659],[-0.013120363],[-0.013297155]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.304586],[0.857909],[-0.13514984],[0.041853286],[2.706798],[-0.056241833],[0.21371262]],"dense_1_W":[[-0.3753853,-0.9076579,0.0028183204,0.4173851,0.21572869,-1.0650074,0.73067254,-0.042485468,0.09713275,-0.03332723,-0.06025824,0.031956095,-0.41729087,0.31993416,-0.17310858,-0.047939993,-0.17648701,0.17462116],[0.33882773,-0.6728253,0.008314714,-0.09627012,0.36394936,-1.1073593,0.40562075,0.025473012,0.14220724,-0.22702415,0.032973353,-0.19210276,-0.099463224,0.3244121,0.4324219,-0.2788309,0.019109316,0.013932906],[-0.0022891897,0.031610064,-1.2756119,-0.41923544,0.012356326,-0.58470213,0.4747707,-0.59731174,-0.27581474,0.25697255,0.45881832,-0.34830928,0.25764722,0.26794606,0.1684697,0.28286308,0.054468513,-0.20199662],[-0.07542859,0.49655056,0.009735591,-0.29418063,-0.39386368,1.3242066,-1.0746825,-0.027953196,0.4030883,0.05812593,-0.17800117,0.14682488,0.52946347,-0.23444709,-0.2074028,-0.1704285,-0.1765637,0.28617206],[2.4904616,-0.26425233,-0.0018980796,-0.21572022,-0.50891054,0.17968056,0.5879445,0.25236315,0.11600188,-0.48917735,0.18833756,-0.108221054,0.18672714,0.2742739,-0.25533918,-0.044307824,0.22729309,-0.061135843],[-1.5304627,-0.06861046,-0.0068868627,-0.14318405,0.5373798,-0.4130537,1.0160918,0.28602827,0.1930912,0.6789012,-0.4611178,-0.4333957,-0.061391115,0.2945637,0.18769418,0.11001372,0.012913331,-0.2238074],[-0.041391328,1.6325934,8.690423,-0.05333061,-1.1986765,-0.6498667,-0.09251747,0.8950851,0.6041451,0.18318479,-1.2228688,0.04124331,0.48312688,-0.46965152,-0.5156128,0.43232778,-0.04794754,-0.017222332]],"activation":"σ"},{"dense_2_W":[[0.37433198,0.6652587,0.08239935,-0.8569689,-0.8685764,-0.3847302,0.0137114385],[-0.35057282,-1.2175003,-0.42322615,0.38215703,-1.0018536,-0.15562555,0.6304607],[0.86870515,0.79735583,-0.4298693,-0.554179,0.43315074,0.091884896,0.17298584],[0.9098309,0.52323526,0.12250424,-0.6117293,0.70999146,0.24827984,0.08124493],[0.57016754,-0.119958416,0.007385769,-0.20906192,0.028813249,-0.092872046,0.018928468],[-0.20748374,-0.31650364,-0.22984746,-0.6644821,-0.058953296,0.064504504,-0.48933387],[-0.22011767,0.2896796,-0.48634374,-0.12751068,-0.70889044,-0.26188907,0.11740775],[0.015611131,-0.3213432,-0.6176512,-0.23218389,0.2165557,-0.08857583,-0.32597545],[0.97897273,0.065667436,-0.2384423,-0.51702297,-1.5663196,-0.2764533,-0.7045769],[0.11058509,-0.9896542,-0.6524602,0.28573242,-0.63486636,-0.24109863,0.24683195],[-0.66108924,0.24438925,-0.27961603,0.6331003,0.7140061,-0.40370527,0.74801046],[-0.15248063,-0.86366767,-0.5378505,0.54860836,-0.28483847,0.048412364,0.030324109],[-0.5823096,0.039869063,-0.044110443,0.24722692,-0.14052401,-0.2127331,-0.4708845]],"activation":"σ","dense_2_b":[[-0.23049933],[-0.005141671],[-0.006018821],[-0.09049717],[0.07267921],[-0.2727181],[-0.37398845],[-0.007982683],[-0.31346324],[-0.006329838],[0.18627632],[0.060891155],[-0.025011454]]},{"dense_3_W":[[-0.6244113,-0.0693489,-0.64380056,0.02070149,-0.2835836,0.17476825,-0.30840033,-0.18814965,0.20354885,0.48808318,0.12971187,0.6179497,-0.062635556],[-0.03557403,-0.6171725,0.38030297,-0.011414498,0.7638232,0.5485419,0.069103144,-0.53698826,0.41040367,-0.646017,-0.50121707,-0.34758377,0.05735551],[-0.2116303,0.35683113,-0.32435957,-0.6160469,0.15839952,0.04338889,0.16674682,0.29060665,-0.39650652,-0.32134357,0.6334751,0.45032698,0.4106783]],"activation":"identity","dense_3_b":[[0.035586465],[-0.021380048],[0.02714556]]},{"dense_4_W":[[0.96291214,-0.41048172,1.2709689]],"dense_4_b":[[0.03164057]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33542x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33542x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..cae93624e0 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33542x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.103622],[1.1064674],[0.4549032],[0.04746862],[1.0982857],[1.0995609],[1.1011963],[1.0907159],[1.0762013],[1.0530915],[1.0245787],[0.04732885],[0.047370408],[0.047405586],[0.047371153],[0.047191557],[0.04685842],[0.046427477]],"model_test_loss":0.0077569992281496525,"input_size":18,"current_date_and_time":"2023-08-11_13-13-15","input_mean":[[24.77323],[-0.008526437],[0.012011691],[0.006570668],[-0.006429047],[-0.0059693544],[-0.005243256],[-0.0018391812],[-0.0014637707],[-0.0009910533],[-0.0016574132],[0.0064960546],[0.0065228636],[0.006551923],[0.006488435],[0.0064425557],[0.0063805063],[0.0062670223]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[3.3205738],[0.14958848],[-0.037750356],[2.9136846],[0.37804675],[0.029861098],[-0.23139778]],"dense_1_W":[[1.9326701,-0.5547836,-0.10067679,0.88928187,0.3556339,-0.44636774,0.371038,-0.16718003,-0.1884807,-0.48036063,-0.07517039,-0.37563908,0.008011507,-0.122201584,0.38154516,-0.52539575,0.3565951,-0.21173865],[-0.05472125,0.71019995,-0.011301738,-0.24624866,-0.20143683,0.6633662,-0.528109,-0.039701864,0.11818609,0.072079115,-0.06178089,0.09657236,0.26577142,-0.09257749,-0.33768046,0.16679412,0.043577697,-0.00800075],[0.08681189,0.67218554,0.016864384,-0.17151606,-0.7993779,1.7853086,-1.0030217,-0.03944043,0.4116835,-0.25059646,-0.008190873,0.24095483,-0.04000996,0.015966445,-0.048546206,-0.30038705,0.0048840884,0.13509746],[1.8621184,0.9286514,0.09670759,-0.8034425,-0.62457097,0.7103663,-0.60736674,0.08118307,0.21853067,0.34846613,0.11744647,0.5011902,-0.26050925,0.06353079,-0.00013581893,0.13610855,-0.20387033,0.17545028],[0.017074391,-0.6718979,-0.0025658803,0.1153182,0.39260125,-0.89202017,0.73113865,-0.48909268,0.13709295,-0.059374757,0.08379893,-0.21752448,-0.17059386,-0.12913309,0.55954635,0.06616547,0.2593372,-0.35252413],[-0.0015273993,1.122298,4.36107,-0.7284269,-0.52017367,-0.053717256,0.22980922,0.29242814,0.73537266,-0.28037038,-0.91037434,0.6036067,-0.20762318,-0.43595174,0.30240452,0.042510543,-0.03717491,0.16869526],[-0.057129644,2.118584,-0.030197065,-0.98787266,1.289168,1.9827989,1.6250021,1.1510297,1.2282369,1.2243376,0.013641883,0.543552,0.53434277,0.10262394,-0.19424945,0.7177195,0.3077161,-0.2747159]],"activation":"σ"},{"dense_2_W":[[0.13961074,-0.8202845,-0.7884319,0.05487456,0.4678429,0.49467292,-0.1308989],[-0.22201177,-0.32698002,-0.7149156,-0.29914114,0.031437565,0.047704495,-0.28477243],[-1.1148013,0.34092113,-0.18912317,-0.48008075,-0.8709616,0.59132445,0.40171188],[0.71819705,-0.2069683,0.51701564,0.9862385,-0.6635331,0.7514818,0.56039315],[-0.4868372,0.7213388,0.18281417,-0.06934696,-0.74189734,0.28737235,-0.11886813],[0.20839769,-0.28190994,0.67423296,-0.53066903,-0.09744761,0.4307269,-0.19752182],[0.26911464,-0.7672294,-0.62952495,0.1261736,-0.1012706,-0.5423726,0.6709568],[0.6176686,-0.08770763,-0.54375565,-0.10256734,0.7390516,-0.21484475,0.11860012],[-0.19913496,-0.7181119,-0.45452398,0.15518615,0.6978777,0.025296569,0.3637034],[-0.25252303,-0.53283435,-0.1554272,-1.2265081,-0.42687193,-0.36367923,-0.5279896],[0.32439613,-0.07298584,0.1197523,0.3783207,-0.7045304,0.37183088,0.21917883],[-0.09075075,-0.62557536,-0.3368084,-0.887969,-0.4871516,-0.23721167,-0.37883517],[-0.22336866,-0.7741714,-0.6305694,-0.4416341,0.7521898,0.00021530618,0.12290076]],"activation":"σ","dense_2_b":[[-0.121355705],[-0.09121598],[-0.24085803],[-0.083796315],[-0.094084196],[-0.058419645],[-0.14530613],[-0.037983466],[-0.080644384],[-0.025107358],[-0.004766168],[-0.08153612],[-0.044914465]]},{"dense_3_W":[[0.24312028,-0.01319292,-0.6061371,-0.6909818,-0.51359975,0.2992521,-0.39097613,0.31651005,0.2757285,0.4441153,0.31348884,-0.27545422,-0.3225179],[-0.39810908,-0.36194545,0.7269056,0.4569008,0.46710286,0.04934306,-0.3813575,-0.5831742,-0.3599856,-0.41585222,0.4099908,-0.41335598,-0.39183122],[0.306892,0.25172576,-0.07124628,-0.122216314,-0.41072568,-0.32011005,-0.027263654,-0.29434043,0.36800984,-0.007864523,0.36681712,0.40220886,0.41821438]],"activation":"identity","dense_3_b":[[-0.017188622],[0.047469802],[-0.052530196]]},{"dense_4_W":[[-0.30256894,1.1517153,-0.40644947]],"dense_4_b":[[0.042950604]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33580x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33580x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..5b1459e29b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33580x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.2698],[1.0929606],[0.43473774],[0.041922506],[1.081593],[1.0849229],[1.0877095],[1.0787771],[1.0640684],[1.0383222],[1.0108876],[0.04182125],[0.041832544],[0.041841984],[0.041791342],[0.041712664],[0.041520424],[0.041276637]],"model_test_loss":0.00780085613951087,"input_size":18,"current_date_and_time":"2023-08-11_13-38-19","input_mean":[[25.180971],[0.067363806],[0.0050942847],[-0.0016889262],[0.0692244],[0.068829365],[0.06866644],[0.070981584],[0.07282052],[0.07147961],[0.07122264],[-0.0016967524],[-0.0016941526],[-0.0016961577],[-0.0017855666],[-0.0018609619],[-0.0020476414],[-0.0022919406]],"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.078407],[-0.085797824],[-0.60504895],[1.2304441],[1.2940428],[-0.2765851],[-0.1730718]],"dense_1_W":[[0.03620994,0.5334588,-0.008751684,-0.30718732,-0.24120554,1.1354307,-0.8072042,-0.32701683,0.3591096,0.08543978,-0.093012184,0.035917368,0.05168646,0.01635545,0.0006926348,0.21674627,-0.1275013,0.018545493],[0.003296379,0.27156684,-0.0114976885,0.24166274,0.21411923,0.8352162,-0.8050061,-0.0060145953,0.31223345,-0.34529817,0.22191735,0.27288175,-0.13967498,-0.44568652,0.24579433,0.1121055,0.23223591,-0.2451417],[-0.28206483,0.5281006,0.004273511,-0.058251712,-0.66737545,1.2072822,-0.48789716,0.09432811,-0.43518975,0.28679478,-0.041617993,0.34799293,0.14502835,-0.048017643,-0.4097651,-0.3127551,-0.21574068,0.43956098],[1.2072837,-0.23662613,-0.3173964,0.3888246,0.13292286,-0.1938199,0.6423224,-0.16508526,-0.24950479,-0.32070765,0.33587667,-0.31030202,-0.07912521,0.1687367,0.30611345,-0.17966121,-0.5359515,0.3222771],[1.2397379,0.4381082,0.3287358,-0.23143762,0.23506987,0.24820729,-0.96802294,-0.019559357,0.15710932,-0.0708022,0.043548137,0.082909495,0.052344177,-0.057601973,-0.30085152,0.35778126,0.2825749,-0.26779613],[-0.1566607,-0.26598597,-0.0057827565,-0.0664115,0.7773096,-1.0950903,0.25486425,-0.30872136,0.16972275,0.088417634,-0.04042932,-0.63080585,0.16424803,0.31180224,0.17867585,0.27970847,0.35946506,-0.47439978],[-0.021681845,-1.7487134,-6.625535,0.1751056,1.331768,-0.03913034,-0.052204903,-0.722452,-0.59748906,0.19350941,1.3864747,-0.45786792,0.005014887,0.4978294,0.06386993,-0.059275076,-0.19035634,0.068175]],"activation":"σ"},{"dense_2_W":[[-0.27746135,-0.11133147,-0.7466579,0.32316014,-0.82424444,0.8190084,-0.07618176],[-0.98910165,-0.29924926,-0.121483654,-0.06462649,-0.77615696,-0.052050546,-0.2068846],[-0.81079465,0.21189949,-0.7650154,0.16670461,-0.24258237,0.6706145,0.41312888],[-0.04046249,-0.2564188,0.13485432,0.19543083,0.4125496,-0.28913745,-0.47865254],[-1.2282639,-0.5878796,-0.13990462,-0.68876964,-0.4017427,0.6788837,0.5318957],[-0.5227068,-0.48116323,-0.5057654,-0.09864695,-0.32342318,0.5650167,-0.13734272],[0.6354482,-0.15141888,0.64957154,-0.046926428,-0.21597984,-0.24500787,0.3873409],[0.10921166,0.40626168,0.77957875,-0.94732684,-0.37726498,0.010828876,-0.6373631],[-0.6380874,-0.68041843,-0.50705653,0.40137365,0.13087752,0.8324961,-0.20889166],[0.7565542,0.08734602,0.53366995,-0.75452554,0.105391264,-1.0089295,-0.034701627],[-1.1198757,-0.2618769,-0.59588647,-0.706865,-0.21783987,0.86488605,0.3997857],[-0.8328754,-0.35271266,0.12354107,0.1924855,-0.78571886,0.2952341,0.24212927],[0.7423821,0.44760862,0.035012443,-0.8567946,-0.23191078,-0.5886413,-0.664454]],"activation":"σ","dense_2_b":[[-0.010436229],[-0.066020235],[0.0060121845],[0.031020565],[-0.15874258],[-0.07110535],[0.020249015],[-0.13936971],[0.08172514],[-0.19487327],[-0.16985166],[-0.07488271],[-0.1648508]]},{"dense_3_W":[[0.2368204,-0.38186413,0.16379678,-0.093882345,0.18792015,0.30424705,-0.2652192,-0.0128758745,0.4871652,-0.82823867,0.3168634,0.36287144,-0.05755385],[0.08671304,0.26755866,-0.44672224,0.3511056,-0.07436179,-0.029944455,0.51201284,0.011309003,-0.009461364,0.03749171,-0.14320603,-0.5220241,0.5982596],[-0.6713392,-0.4692543,-0.18836813,0.16650435,-0.38397953,-0.09753196,0.4263721,0.3648231,-0.48916298,0.63411295,-0.26365083,-0.5657471,0.31661007]],"activation":"identity","dense_3_b":[[-0.043500695],[0.043294493],[0.070429035]]},{"dense_4_W":[[-0.13705656,0.4213639,1.0240872]],"dense_4_b":[[0.0634434]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33581x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33581x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..1e7cb72b13 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018 b'8965B33581x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.970947],[1.0384973],[0.5339848],[0.0439044],[1.0386008],[1.0383806],[1.0382704],[1.0300301],[1.0274649],[1.0244931],[1.0205593],[0.043891665],[0.043891575],[0.04389554],[0.043873448],[0.04374348],[0.043487765],[0.042901814]],"model_test_loss":0.005093628540635109,"input_size":18,"current_date_and_time":"2023-08-11_14-02-50","input_mean":[[24.332022],[0.060984537],[-0.010774325],[-0.010102695],[0.06669931],[0.066552386],[0.06558183],[0.064041205],[0.059805464],[0.057570588],[0.052696057],[-0.010093866],[-0.010066769],[-0.010040301],[-0.01002835],[-0.010157424],[-0.0103778625],[-0.01061843]],"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.0042867805],[-0.08686578],[-0.037254773],[0.03485279],[1.0671247],[-0.047314014],[-0.993783]],"dense_1_W":[[-0.021375071,-0.14122938,-0.35861322,-0.08880356,-0.82792205,0.7598527,-0.4383258,0.5881781,0.65400213,-0.08076669,-0.47284502,0.6587817,0.42645591,-0.71615744,-0.19810899,-0.26471764,0.089353725,0.25006968],[-0.0043314192,1.954295,6.3405747,0.22489387,-1.1874827,0.14704707,-0.07096752,0.41535223,0.5072961,0.09738453,-1.6553766,0.052053954,0.10042309,0.32028568,-0.6243986,-0.57866776,-0.2910692,0.6025305],[-0.004210423,-1.1789036,0.043389764,-0.17041136,0.018858045,-1.028696,0.60524696,0.12432735,0.1403251,0.6718426,-0.58897483,-0.49425384,0.26766488,0.021670086,0.47191808,-0.2670336,0.17180552,-0.076177396],[-0.0014423821,0.40574962,0.09375788,-0.030430922,-0.28834507,0.96773094,-0.4115615,-0.25777864,-0.122904286,0.16757521,-0.093617134,0.086109094,-0.19272889,0.12177329,-0.16501935,-0.3261848,0.109229244,0.048125066],[0.7480793,-0.44217807,0.47803837,0.12700126,-0.30083793,1.1000353,-0.34668228,-0.22410758,0.59894305,-0.2912633,0.106452525,0.12899296,0.16302301,-0.58852977,-0.4219825,0.3098118,0.30627355,-0.26459885],[-0.0010856693,-0.073189795,-0.010420755,0.510726,0.48776355,-1.3092571,0.5646315,0.09301288,-0.04550693,-0.18133546,0.030909019,-0.22555129,-0.37417185,0.066544555,0.21544787,-0.19924314,0.04824762,-0.037603877],[-0.7319411,-0.53309584,0.47002098,0.51350844,-0.15382649,0.8515273,-0.2119853,0.10290207,0.060688037,-0.017283736,0.07458493,0.12407178,-0.3054991,-0.5866961,0.32772487,-0.36159655,0.15252681,-0.10539709]],"activation":"σ"},{"dense_2_W":[[-0.8456761,0.29112202,0.5538746,-0.27183205,-0.66401464,0.9681805,-0.45490798],[-0.29222146,-0.19562286,0.64160013,-0.29229674,-0.22581333,0.8861653,-0.4574926],[0.20166388,0.07838155,-0.07201707,0.28346765,0.5453596,-0.2245247,0.5990845],[-0.7644849,-0.2661926,0.28970414,-0.36327568,-0.696993,0.51633406,-0.0007974338],[-0.58643913,-0.088404864,0.8255952,-0.36814624,-0.7079003,0.37753046,-0.022236357],[-0.06973816,0.19982524,-0.83173025,0.71500087,-0.3413635,-1.0756832,0.73801243],[-0.13959065,0.19020522,0.24497935,0.56480676,-0.2445819,-0.8559911,0.45792028],[-0.02966249,-0.7037074,0.8162655,0.044394657,-0.36493388,1.2052823,-0.84985954],[-0.42486554,0.19081669,-0.012745155,-0.80222046,-0.5517139,0.23807476,-0.1403817],[-0.5011139,-0.3268968,-0.6706034,-0.15131825,-0.3535179,-0.07793423,-0.2949964],[-0.108988635,-0.38238916,0.66745275,-0.89970803,-0.22937314,0.28115448,-0.01224377],[0.23614992,-0.08788459,-0.09533522,0.3415471,0.20813029,-0.80524844,0.5243813],[-0.7208867,-0.55935323,0.19054662,-0.89190704,-0.95664173,0.9696772,0.28062636]],"activation":"σ","dense_2_b":[[-0.052245323],[-0.22305784],[-0.09663632],[-0.20786262],[-0.014743078],[-0.08700816],[-0.10860553],[0.080216914],[-0.2522886],[-0.39075246],[-0.11641336],[-0.07052046],[0.5928834]]},{"dense_3_W":[[-0.7149941,-0.47273389,0.41016644,-0.104267396,-0.31817394,0.9295361,0.055846684,0.010776243,-0.5708312,-0.022532204,-0.6505357,0.15083706,-0.34012407],[-0.021996325,-0.48407006,0.39829472,-0.41447127,-0.45983404,0.2265217,0.64464855,-0.14684099,-0.13853866,0.1992617,0.023521371,0.6656039,-0.001323564],[0.11754858,-0.5532173,-0.6610757,-0.14822331,0.48995,-0.5581861,0.22167473,0.5960896,-0.36395517,0.18789944,-0.047904395,0.038645275,0.7867522]],"activation":"identity","dense_3_b":[[0.12575556],[0.038765904],[-0.04705467]]},{"dense_4_W":[[0.68855655,0.4865954,-0.44680688]],"dense_4_b":[[0.05231935]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018.json new file mode 100755 index 0000000000..d70742e35d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.113561],[1.288432],[0.44980875],[0.049022406],[1.276642],[1.2789117],[1.281596],[1.2659067],[1.2421862],[1.2042812],[1.1628327],[0.04884337],[0.048885074],[0.04892067],[0.048904777],[0.04874475],[0.048363086],[0.047754645]],"model_test_loss":0.008815777488052845,"input_size":18,"current_date_and_time":"2023-08-11_12-22-51","input_mean":[[24.583223],[0.035939325],[-0.0035848166],[-0.00051022915],[0.040922612],[0.04026527],[0.039454605],[0.038882907],[0.03908899],[0.037455987],[0.037543096],[-0.0004972871],[-0.00047999652],[-0.00047416435],[-0.000555545],[-0.00067389105],[-0.0009116623],[-0.0012008604]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.6907706],[0.020205228],[1.9151607],[2.0762143],[-0.070254005],[1.656243],[0.040563114]],"dense_1_W":[[1.9184645,0.12281177,-0.05548771,0.3325733,0.049481086,-0.93242055,1.1692095,0.029121507,0.09385143,-0.09659533,-0.11398056,-0.42710423,0.0013246255,0.5561167,-0.1495541,-0.21716745,0.1501572,-0.089972384],[0.0095424475,0.5977504,0.01609186,0.008589333,-0.6946006,1.0936681,-0.6658466,0.21197227,-0.06230653,0.17695144,-0.13071376,0.49202713,0.38372365,-0.6296875,-0.6752815,-0.07816118,-0.20058149,0.47544223],[0.7138527,0.88336164,0.10898959,0.07776455,-0.11466185,0.85354257,-0.44323412,0.28020075,0.1735972,-0.30542865,0.0051241503,0.41995117,0.010464949,0.16623583,-0.4241442,-0.028010447,-0.026523042,-0.14295045],[0.802182,-1.1617771,-0.1162637,-0.0067429696,0.18329306,-1.2598122,0.9663145,-0.18042558,-0.41879544,0.5239016,-0.06684812,-0.45527652,-0.28534758,0.2599457,0.2397677,-0.0516189,0.007355238,0.23112406],[-0.0030232992,-1.1722454,0.051927917,0.095425725,0.19179568,-0.96292347,0.33426154,-0.015786754,-0.26612803,-0.41344067,0.36896846,0.25567958,0.21475382,-0.40880233,-0.21282537,-0.22598088,0.27500418,0.0051436215],[1.9630992,-0.32222328,0.058737174,-0.5038972,-0.16381685,1.1271104,-0.9266026,-0.31080577,-0.05270356,0.24345441,0.07495984,0.039676085,-0.27428615,0.117246784,0.3644701,-0.038675178,0.4529369,-0.3158286],[-0.006583586,-1.90042,-5.086346,1.178374,0.9872427,-0.08279943,-0.11563482,-0.085821435,-0.30849832,-0.483396,1.235762,-0.6782165,-0.1051005,0.049771134,-0.08851904,0.47486317,-0.18179584,-0.33851555]],"activation":"σ"},{"dense_2_W":[[-0.98456967,-0.08674989,0.050625086,-0.7365153,-0.20228219,0.14482267,-0.011665877],[-0.5769628,-0.497833,-0.57603395,-0.27131066,-0.43619764,-0.41154072,-0.44292274],[-0.030439235,0.4782569,0.09370738,-1.0248427,-0.75271314,0.27682835,0.100586735],[0.7785517,-0.8945198,-0.24256033,0.12664571,0.73264015,-0.72209287,0.32675773],[-0.79072905,0.5852975,0.8183082,0.11523399,0.013696286,0.8965856,-0.12477829],[0.99764585,-0.9510505,0.026474258,0.8939435,0.6465811,-0.30319425,0.5071415],[0.4976951,-0.7593475,-0.8069521,0.42173788,0.46559027,-0.18526554,-0.5820664],[0.07649806,-0.0935198,-0.07850874,-0.52957004,-0.6727888,-0.7231066,0.25522104],[-0.27911595,-0.9477233,-1.153818,-0.15193523,0.7870086,-1.0027183,0.7966875],[-0.9716597,0.89015436,0.32853165,-1.0613221,-0.12263486,0.3528593,-0.5928117],[0.2827416,-0.32474115,-0.9680884,0.022911986,0.27188945,-0.98760265,0.3656817],[0.7160093,-1.0138652,-0.50953317,0.46416208,0.06371475,-0.028066937,0.23573612],[-0.77464837,0.44803238,0.14630596,-0.8826064,-0.56392753,0.6949805,0.12345892]],"activation":"σ","dense_2_b":[[-0.25699404],[-0.26730993],[-0.015171051],[-0.09039672],[-0.061481774],[-0.07387397],[-0.047998182],[-0.30401027],[-0.02116504],[-0.07505101],[-0.15518288],[-0.117099114],[-0.09308846]]},{"dense_3_W":[[-0.004456457,-0.17817564,-0.5636806,0.58977455,-0.6984907,0.37438712,0.4960488,0.08712738,0.672033,-0.39785558,0.5507936,0.3100092,-0.41587812],[0.36591443,-0.53552973,0.346754,0.4773916,-0.07704387,-0.27689734,-0.5725575,-0.2300009,0.38975373,0.5509545,-0.06661364,-0.16530657,-0.32090378],[0.5468248,-0.2983021,-0.18621923,-0.1862858,0.6007365,-0.7406874,0.013266623,0.53915715,0.18158531,0.8944796,-0.62438655,0.092128076,0.3605866]],"activation":"identity","dense_3_b":[[-0.09266206],[0.104886286],[0.028007649]]},{"dense_4_W":[[-1.0827008,0.1191742,0.25597933]],"dense_4_b":[[0.081487015]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021 b'8965B33630x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021 b'8965B33630x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..263e742b40 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021 b'8965B33630x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.527258],[1.58837],[0.5055459],[0.046407],[1.5704566],[1.5757883],[1.5804579],[1.5656428],[1.5384976],[1.4943614],[1.4440472],[0.046127472],[0.046209764],[0.04628142],[0.04638724],[0.046373256],[0.046248272],[0.045979995]],"model_test_loss":0.013032137416303158,"input_size":18,"current_date_and_time":"2023-08-11_15-08-28","input_mean":[[23.675987],[-0.061649498],[-0.0037433535],[-0.00974628],[-0.0592297],[-0.059604164],[-0.060115922],[-0.06090137],[-0.05811594],[-0.054634698],[-0.050830174],[-0.009785485],[-0.00977242],[-0.009764823],[-0.009743659],[-0.009729754],[-0.009756633],[-0.009844285]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-4.2454443],[-3.9935453],[0.028671095],[0.5960012],[-0.03880155],[0.05596765],[-0.034470085]],"dense_1_W":[[-1.64422,0.68550414,0.54501456,0.53847647,0.27692503,0.063880496,-0.7023363,0.5811879,0.4607719,0.32430968,0.33705142,-0.15086013,0.25737584,-0.14769863,-0.5269933,0.09086217,-0.039941527,0.056566585],[-1.6872351,-0.8609276,-0.5547092,-0.32451072,-0.42200893,-0.61688584,1.3860269,-0.36377195,-0.3244275,-0.36894146,-0.46561348,0.135956,-0.314409,0.33939078,0.11052305,-0.4511116,0.6767753,-0.25145525],[-0.0011624083,-0.46549657,-0.029367186,0.0338469,0.10036589,-1.3792645,1.3517435,-0.087907985,-0.17922819,0.27989322,-0.1508471,-0.30754912,0.12222471,0.27249634,-0.11857876,0.2081331,-0.20149365,0.092303105],[-0.019411901,-2.743489,0.2092647,0.03613767,-1.4975988,-2.199135,-1.4105736,-1.1626186,-1.1813308,-1.2874912,-1.0614506,0.12311394,-0.35716504,-0.39015725,-0.19417982,0.030657688,-0.10556074,0.30376726],[-0.0013404661,0.811287,-0.011727227,-0.184332,-0.50731385,1.0558553,-1.0108443,0.3428108,0.06010551,0.10949871,-0.1949178,0.31412193,0.35021275,0.1347588,-0.3269873,0.002721337,-0.3956695,0.107962616],[0.0018287555,0.9383599,-0.020639788,-0.10069178,0.012285102,0.8423632,-0.76416844,0.2949073,0.02011132,0.32481852,-0.20832625,0.09446031,0.05286432,-0.25073406,-1.0954369,0.19070928,0.29430318,0.21283779],[-0.0031318972,1.86199,3.7149577,-0.45614806,-0.9853326,0.0031807204,-0.36801562,-0.017010337,0.8629713,0.27299413,-0.93133396,-0.040520113,0.20344736,0.16688503,0.18763259,-0.3295253,-0.44451007,0.54270303]],"activation":"σ"},{"dense_2_W":[[-0.10703138,0.26329565,0.372871,0.62210536,-0.91045755,-0.5059908,0.082728624],[-0.8455082,0.60686517,0.77131647,0.18505652,-0.83584833,-0.061201718,0.06414944],[0.9602546,-0.33188254,-0.6254281,0.28107804,0.4938986,0.19022591,-0.021539062],[0.6665293,-0.88368744,-0.4690383,0.09154278,0.07947504,0.50024533,0.59482914],[-0.38501546,-1.222405,0.2893011,-0.6509259,-0.70557487,-0.66354203,-0.10562698],[0.49674258,-0.5769124,-0.49069,-0.41817957,0.67324835,0.4933393,-0.10286841],[-0.2216885,0.47380883,0.56191033,-0.28784683,-0.4096605,-0.490356,-0.031157235],[-0.0936251,-0.45093265,-0.76677954,-0.3329675,0.8052054,0.061642174,0.5920758],[-0.6441064,0.4133462,-0.15337071,-0.0061294995,-0.73091877,-0.11528061,-0.37335342],[0.18037143,0.040658288,0.91772383,0.17238702,-0.43315202,-0.4585807,-0.4309972],[0.2177669,-0.30795693,0.17052971,-0.16855669,-0.13677986,-0.69589096,-0.19900195],[-0.65990835,-0.1468485,-0.12448653,0.4080429,-0.14782807,-0.4780015,0.24199547],[0.34541848,0.07740233,-0.46892044,-0.18850818,0.12455788,0.3817125,0.20588997]],"activation":"σ","dense_2_b":[[0.004909596],[-0.1015675],[-0.026956508],[-0.14565209],[-0.068403244],[-0.17654194],[0.011075499],[-0.07494447],[-0.17450505],[0.081554756],[-0.067178436],[-0.08978031],[-0.16875927]]},{"dense_3_W":[[0.3513672,-0.21975671,-0.040741704,-0.6609442,0.47521582,-0.1486722,0.40466824,-0.651978,-0.1652465,0.65699995,0.5369138,-0.07486931,-0.4354842],[0.15970285,0.41789836,-0.22640069,-0.57340044,0.4493888,0.14716445,0.4456815,-0.39007702,0.5953172,0.079848245,0.08602837,0.51125026,0.2055881],[-0.44146788,-0.50463027,0.28063488,0.044468172,0.21196483,0.7198564,-0.37790608,0.103921935,0.4282467,-0.56497794,-0.14485644,0.31268966,0.57528377]],"activation":"identity","dense_3_b":[[-0.051718097],[-0.07012978],[0.038476463]]},{"dense_4_W":[[-0.54659784,-0.6573955,0.52299213]],"dense_4_b":[[0.05747961]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021 b'8965B33650x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021 b'8965B33650x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..4cee46ce78 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021 b'8965B33650x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.4544187],[1.1398869],[0.59536827],[0.03667061],[1.1367389],[1.1371896],[1.1369772],[1.1125838],[1.0882599],[1.0540591],[1.015276],[0.0365254],[0.03656361],[0.03660487],[0.03671011],[0.036751248],[0.036655042],[0.036459148]],"model_test_loss":0.00820766668766737,"input_size":18,"current_date_and_time":"2023-08-11_15-33-20","input_mean":[[16.952526],[-0.052201446],[-0.0025111593],[0.008815221],[-0.04683998],[-0.048375413],[-0.049727276],[-0.04895246],[-0.046067394],[-0.042347096],[-0.043832958],[0.008778602],[0.008794993],[0.008793817],[0.008708494],[0.008642194],[0.008570167],[0.008426222]],"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.6888532],[-0.14074084],[-4.6503873],[-0.0526546],[-0.16162582],[-4.8515434],[0.0059119985]],"dense_1_W":[[-0.1887723,1.7019817,-0.0113050295,-0.84645253,0.5320028,1.9590821,0.32137358,0.4540078,0.31248295,0.3334322,0.94135123,0.46212864,0.41069177,-0.008444669,0.44834596,-0.1659424,0.075368986,-0.14096133],[0.09387379,-0.24212502,0.004232037,0.1580718,0.5345186,-1.7837541,0.8140116,0.35570875,-0.09320282,-0.33667397,0.1162101,-0.07693762,-0.4861762,0.39767268,0.37297454,-0.23607363,-0.07967667,0.044579674],[-2.367052,-0.45616403,-0.06572045,-0.2425425,-0.008704978,-0.20262632,1.2449195,0.03634092,-0.26020807,-0.18703146,-0.27698797,0.04616871,0.3345856,0.27772164,-0.38416603,-0.26807493,-0.179506,0.45063913],[0.0060991277,1.3728696,6.3618674,-0.1529537,-1.0295473,-0.36459753,-0.5428813,-0.1351585,1.359785,0.59491414,-0.95546675,0.47300407,-0.07679976,-0.4389862,-0.09457229,0.09079313,-0.3535876,0.35535023],[0.10419659,0.6981407,0.0010684849,0.50049585,-0.6847731,1.2972739,-0.845766,0.4630602,0.014233105,-0.22511983,0.036824916,0.03641603,0.14271958,0.017790886,-0.62306106,-0.45059016,-0.12857214,0.3850661],[-2.4553664,0.7025891,0.07218532,0.3614062,-0.18104361,0.14960986,-1.4881148,0.47337767,0.12397967,0.15814431,0.22360176,-0.14111422,0.026148688,-0.4370157,0.06734503,0.2592729,0.23636505,-0.40628332],[0.011856804,0.28269672,-0.8995745,0.5396218,-0.41245276,-1.3505635,1.202017,0.23253399,-0.109473534,-0.1018154,0.30684808,0.012973135,0.26841184,0.26688126,-0.936263,-0.32659927,-0.01672119,0.30120432]],"activation":"σ"},{"dense_2_W":[[0.3640571,-0.6617311,-0.0747308,-0.37031746,0.6537133,0.37298128,-0.53218305],[-0.11639251,0.61945325,0.0017198602,0.1977158,-0.8382063,-0.58378947,0.45054537],[-1.5765465,-0.4710046,-1.2433935,-1.1040761,0.11871377,-1.103308,-0.08877445],[-0.35699993,0.6091763,0.03869232,-0.27107364,-0.480981,-0.37596822,0.63457584],[0.3026075,0.5471183,0.5758416,-0.22221741,-0.8760496,0.02318747,-0.014120267],[2.2380452,-0.91835636,-4.180824,0.85650325,2.4713848,-1.189591,-0.59328234],[0.4808254,0.5034869,-0.06683023,-0.2557325,-0.46868747,-0.563796,0.3365589],[0.17383875,0.052510574,-0.2056088,0.06328794,-0.0013120257,-0.39633247,-0.124248356],[0.32954514,0.45643237,0.41245767,-0.6036774,-0.11574388,-0.3204366,-0.17148384],[0.32425106,0.045497462,0.35014722,0.43193093,-0.43063545,0.021148223,0.30852592],[-0.25192562,-0.5058624,-0.8747967,0.552287,0.750765,0.5214585,0.05243548],[1.162155,-3.353464,0.5340603,0.659619,0.7062718,3.5616868,-0.5632878],[0.3252148,-0.06799463,0.5038412,0.12492446,0.07536071,-0.7216808,0.56761354]],"activation":"σ","dense_2_b":[[-0.058470216],[0.013836472],[-0.11013916],[0.024257516],[-0.047517203],[1.0202676],[-0.028003285],[-0.07813839],[-0.020832257],[-0.024440002],[-0.021560166],[-1.8247504],[-0.041251946]]},{"dense_3_W":[[0.40882266,-0.55162454,0.19300854,-0.7047124,0.18826057,-0.024725482,0.26570073,-0.54785085,-0.47576043,-0.58123916,0.60901785,-0.034762446,0.30913785],[-0.4319101,-0.61121434,-0.3207124,0.45264772,0.043344818,0.176912,0.48326144,0.14974174,-0.4031163,-0.005480138,0.21610041,0.40871677,-0.3560042],[0.43242753,-0.27668396,0.2542409,-0.29328224,-0.467545,0.8394127,-0.62540203,0.22238283,-0.031581767,0.07810114,0.41339856,0.8512083,-0.37855253]],"activation":"identity","dense_3_b":[[-0.03324967],[0.0075375573],[-0.052993078]]},{"dense_4_W":[[0.5854674,0.016769838,1.1952219]],"dense_4_b":[[-0.04352723]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021.json b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021.json new file mode 100755 index 0000000000..c221878177 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA CAMRY HYBRID 2021.json @@ -0,0 +1 @@ +{"input_std":[[9.740597],[1.6114016],[0.5348656],[0.046610184],[1.595203],[1.6010917],[1.6055775],[1.5847278],[1.5526379],[1.5036105],[1.4504586],[0.04635463],[0.046429936],[0.046500154],[0.046611696],[0.046591446],[0.046455257],[0.046220616]],"model_test_loss":0.01294305082410574,"input_size":18,"current_date_and_time":"2023-08-11_14-35-46","input_mean":[[23.0379],[-0.053410813],[-0.0019288365],[-0.0063912515],[-0.050324135],[-0.05122038],[-0.051873837],[-0.051581234],[-0.048981857],[-0.047338136],[-0.045371193],[-0.0064203762],[-0.006407644],[-0.006401244],[-0.006397862],[-0.0063910685],[-0.00646659],[-0.0066046687]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.5836827],[-0.00027897302],[-0.18345492],[1.9316171],[2.4109695],[-0.35735247],[-0.00752829]],"dense_1_W":[[-0.19923586,-0.8446253,-0.049223807,0.062187098,0.034134634,-0.5164691,0.5356359,0.02361736,-0.094354145,-0.13402478,0.03197027,0.025565224,-0.34767163,0.44327018,-0.2331072,0.08544469,0.13220021,-0.042109292],[0.19774629,0.7956804,0.048354603,-0.03464038,-0.5552806,1.4616147,-1.1069727,0.25491667,0.24574293,-0.032276858,-0.074901365,0.32208532,-0.005093918,0.04149316,-0.38724327,-0.3423741,0.038095005,0.20536087],[-0.01277339,-1.1209253,-3.2829685,0.2908269,0.7730306,-0.26604077,0.15447722,0.3180269,-0.39517486,-0.7156121,0.5851515,-0.157586,0.20472787,-0.10676806,0.103783496,0.38098288,-0.20058244,-0.17163335],[1.0040841,0.5252502,0.022688726,0.2826037,0.21658197,0.34697813,-0.94360363,0.24253304,-0.18907677,0.3291399,-0.11032786,-0.018658556,0.083128914,-0.6952669,0.32141057,0.35096252,-0.33404535,-0.04190496],[1.8762695,0.36984375,0.050812285,-0.69581956,-0.06582166,0.15085408,0.7331872,-0.22675583,-0.21822771,-0.05756491,0.2606855,0.33968002,0.33952188,0.08715113,0.047839224,-0.36322674,-0.25783,0.3792682],[1.4820158,0.1705126,0.0016943603,0.4127989,-0.0974151,-0.9748564,0.8694424,-0.44104308,-0.11535523,0.46097124,-0.24303544,-0.6474734,0.12288866,0.059170075,0.5683426,-0.27918825,-0.1918551,0.038009226],[-0.036992043,-3.7975738,0.13517864,0.27046844,-2.310979,-1.828817,-1.5850654,-1.539081,-1.5010515,-0.6565915,-0.9062962,-0.20627469,-0.67237496,0.12094677,-0.4404271,-0.19511403,0.5184492,0.33670986]],"activation":"σ"},{"dense_2_W":[[-0.42162207,0.37654948,0.20128639,-0.063237175,-0.48145297,0.4043876,-0.3341159],[0.44190538,-1.1244025,-0.09626844,-1.0280551,0.18970345,0.26944143,-0.009037805],[-0.49628687,-1.2132783,0.52467674,-0.7936528,-0.9315534,0.56592065,0.73007417],[-1.1409178,0.2814847,-0.25048304,-0.12513222,-2.585411,-0.61156756,-1.9930322],[-0.22451939,1.0647622,-1.433535,0.027757127,-2.0988069,-1.5258986,-1.1993341],[-0.39952537,0.90642506,-0.15748514,0.093761675,-0.14429392,-0.34393898,0.54427654],[-0.97083896,0.3346563,-0.51369995,0.31469372,-0.33595,-0.14703576,-0.02035328],[0.040784314,1.0367972,-0.2969124,0.8747469,-0.17848283,-0.3237289,-0.09698425],[0.1814441,-0.9662698,0.13469651,-0.82734567,-0.0686567,0.20662351,0.010672753],[0.7433569,-1.089515,-0.5163916,0.07499303,-0.0010849822,-0.03413402,0.3965658],[-0.070186645,-0.9964952,0.03863335,-0.39458206,0.121162325,0.0053036516,-0.23557144],[0.34303343,-0.22630331,0.42313117,-0.40690577,-0.72221476,-0.43852168,-0.6039356],[-0.45295054,-0.11365345,-1.2165514,-0.090053685,-0.5146623,-0.9904289,0.33478776]],"activation":"σ","dense_2_b":[[-0.46519402],[0.015997758],[-0.15750933],[0.36400142],[-0.0012292],[-0.056723733],[-0.11375456],[-0.05405809],[-0.015591645],[-0.0058899955],[-0.04078644],[0.00196873],[-0.16756381]]},{"dense_3_W":[[0.047287945,-0.6736067,-0.46639067,0.9129947,0.33239195,0.62215215,0.4689233,0.10021073,-0.6075113,-0.49370164,-0.27906764,-0.047028817,0.12527764],[0.09248094,0.1314878,-0.33640304,-0.49161217,-0.21528612,-0.5316355,-0.095554546,-0.5099446,0.39594427,-0.4868655,0.2566146,0.19383566,-0.56233704],[0.17183253,-0.6922636,-0.7815626,1.7245736,0.26443008,0.34830126,0.18106776,0.4897128,-0.5520722,-0.3594627,0.04037111,-0.46142736,0.64785737]],"activation":"identity","dense_3_b":[[-0.0055949884],[0.06270205],[0.041998606]]},{"dense_4_W":[[0.9982169,-0.30214822,0.8375058]],"dense_4_b":[[-0.011819658]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017 b'8965B02181x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017 b'8965B02181x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..986005262e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017 b'8965B02181x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.939101],[1.5599267],[0.57329994],[0.051986337],[1.5397805],[1.5469866],[1.5538288],[1.5324374],[1.5024316],[1.4477412],[1.390682],[0.051756933],[0.051815208],[0.051863786],[0.05182103],[0.051682103],[0.05124605],[0.050552182]],"model_test_loss":0.0067290966399014,"input_size":18,"current_date_and_time":"2023-08-11_16-34-05","input_mean":[[24.415758],[-0.0708019],[6.1642786e-5],[-2.1343174e-5],[-0.06627885],[-0.06775841],[-0.06956871],[-0.06583787],[-0.064153455],[-0.06203538],[-0.058261454],[-1.822088e-5],[-1.6343323e-5],[-2.2065358e-5],[-6.640849e-5],[-0.00010978214],[-0.00016678876],[-0.00023529833]],"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.090955906],[0.04917988],[-0.1741757],[-0.10349463],[0.073517144],[-0.14433604],[-0.21417597]],"dense_1_W":[[0.031386774,-0.0064099,0.008045171,0.2867708,-0.08236162,-0.84199697,0.10240696,0.13015348,0.21739843,0.13009188,-0.336333,0.18302079,-0.4356695,0.20127627,-0.14926645,-0.18274651,0.20071413,-0.009890185],[0.01055423,-0.9589615,-4.888261,-0.4326293,0.9792688,0.06254708,0.81589156,-0.22105382,-0.72918415,-0.47384414,0.57448494,-0.89492524,-0.42377415,0.28702468,0.94103277,0.3108972,0.22522354,-0.06581927],[0.00889319,0.5760613,-0.011418503,-0.2077564,-0.20235416,1.1582084,-0.71085477,-0.22053532,0.048205245,-0.0015826726,0.071042135,0.5661853,-0.19431645,-0.14515138,-0.23947677,-0.06749122,0.15579678,0.042601693],[0.021154417,0.73471886,-0.20633163,-0.092965506,-0.11627686,0.78098047,-0.3053794,-0.10012283,0.19263598,0.108361736,-0.21976234,0.1443252,-0.27093878,-0.088000044,0.14388824,0.12235138,0.7552596,-0.30535087],[0.7607973,0.059191745,-0.17095767,-0.18675576,0.4779047,-0.8605541,1.0540863,0.077983476,-0.35377684,0.34912428,-0.23799801,-0.61662775,0.19051781,0.324648,0.20347545,0.34229413,0.3465081,-0.20990801],[0.016754853,0.13105184,0.060855266,0.19800498,-0.25625008,0.93284976,-0.99328595,0.43371382,0.1287163,0.3198935,-0.34120345,0.36319074,-0.17294398,-0.40115258,0.018337402,-0.10593194,-0.09644049,0.093416676],[-0.80104244,0.5966007,-0.17412119,0.0745668,0.26523033,-0.12644067,0.37905166,-0.47610426,-0.19432892,0.23034103,-0.11601362,-0.0361885,-0.44668338,0.47873983,0.13158317,-0.19112219,0.28012928,0.10046652]],"activation":"σ"},{"dense_2_W":[[0.12751395,-0.579469,-0.42941913,-0.82789993,0.118697666,-0.030509774,-0.4625477],[0.43198177,0.34745836,-0.7453266,-0.28072536,0.3007269,-0.5361298,0.21595009],[-0.64348674,-0.43256557,0.5034301,0.23926352,-0.71879435,0.54971355,-0.32021347],[0.021957472,0.5988634,-0.9111236,-0.8090046,-0.04196959,-1.0256908,0.7584421],[-0.04072775,-0.5223909,0.8810148,0.102556,-0.08203382,0.8192045,-0.31275043],[0.52576905,-0.11147491,-1.0164086,-0.46802506,0.69514006,-0.9750496,0.25202104],[0.5843185,-0.43077394,-0.5290841,-0.8182589,0.56711,-0.2554457,0.27834472],[-0.9143706,0.14909329,0.7489671,0.21731603,0.094174676,0.5228992,-0.63162416],[0.5781319,0.077873595,-0.7260175,0.053800765,0.22003157,-1.1925383,0.4699523],[-0.8478256,0.27122667,0.574439,0.3034642,0.18656549,0.30236706,-0.74189764],[-0.89728916,-0.540247,0.42537263,-0.26421598,-0.71848625,0.5283021,0.27896],[-0.6038582,-0.6634362,0.35248938,0.39700025,-0.96313494,0.1258266,0.27540943],[-0.702523,0.28951612,-0.34453344,0.061114356,-0.6473836,-0.3301445,-0.5951263]],"activation":"σ","dense_2_b":[[-0.044364497],[-0.21510312],[0.11091102],[-0.13621476],[-0.06183172],[0.102863066],[-0.036004663],[-0.07521248],[-0.19428256],[-0.050729755],[-0.16412741],[-0.1322501],[-0.13190113]]},{"dense_3_W":[[0.21880057,0.17238903,-0.59318775,0.54590964,0.328959,-0.08423074,-0.021402186,-0.30087715,0.105242334,-0.07735786,-0.64967847,-0.60325295,-0.019917456],[-0.5737253,0.054932736,0.6915356,-0.5588708,-0.3497235,-0.66048837,-0.55370605,0.6054378,-0.6448654,0.5938389,0.70369726,0.15654652,0.4921153],[0.22326133,0.38247967,-0.68284494,0.74056363,-0.46936858,0.6398252,0.30618396,-0.1293351,0.72910917,-0.47571996,0.19982132,-0.50786984,0.120341815]],"activation":"identity","dense_3_b":[[0.0075428453],[0.03185654],[-0.06226225]]},{"dense_4_W":[[-0.20277399,0.36300623,-0.80966884]],"dense_4_b":[[0.048043206]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017 b'8965B02191x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017 b'8965B02191x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..cda75eb28b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017 b'8965B02191x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.0005245],[1.1223631],[0.56650954],[0.040156633],[1.1045293],[1.1096628],[1.1155437],[1.1086388],[1.1007575],[1.0822154],[1.0583125],[0.040068675],[0.040072493],[0.04007388],[0.039984047],[0.039851412],[0.039609052],[0.039315373]],"model_test_loss":0.005991812329739332,"input_size":18,"current_date_and_time":"2023-08-11_16-59-30","input_mean":[[25.675858],[-0.14288636],[-0.014269486],[-0.0032686314],[-0.13565269],[-0.1382612],[-0.14184494],[-0.14358865],[-0.14512834],[-0.14613849],[-0.14589326],[-0.0033924344],[-0.0033741088],[-0.003360874],[-0.0033476953],[-0.0033650529],[-0.003380635],[-0.0034961724]],"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.17480564],[0.18210134],[-0.56885064],[-0.19985428],[-0.045291904],[-0.57443535],[-0.11631125]],"dense_1_W":[[-0.007863749,-0.28470495,0.04231277,-0.66548604,-0.12848611,-0.91329616,0.30217457,0.16402288,0.19537158,-0.256202,-0.14585154,0.09115254,0.1150835,0.30422798,0.017745864,-0.29077125,0.5362173,-0.1107794],[-0.005497062,-1.2494678,-5.5986447,-0.093020305,0.934668,0.26794314,1.5251178,-0.6939207,-0.6933608,-0.6269682,0.42408594,-1.5087744,-0.582999,0.43095827,1.0934985,1.0581348,0.19804095,-0.61133814],[1.2855586,-0.045317598,-0.041259,0.6257151,-0.5867755,1.315738,-0.619025,-0.031879213,0.08639269,0.38603297,-0.21348597,0.4264018,-0.23836033,-0.62063384,-0.10609298,-0.61321807,0.107925534,-0.0714755],[-0.0047950665,-0.43550637,-0.028580034,-0.3060538,0.5702284,-1.100899,0.34844038,0.10669702,-0.11319558,0.3034445,-0.20166925,-0.30887967,0.33024544,0.51993126,-0.30957666,-0.01086123,-0.11150792,0.20599872],[-0.0060232766,-1.0670959,0.34271115,-0.76167846,0.07718474,0.8662963,-0.26442152,0.36251798,0.23742421,-0.071805924,-0.110565305,0.08984451,0.35723057,-0.25795203,0.08405907,0.2909975,0.04691789,-0.046068314],[1.243962,-0.06773367,0.041754216,-0.49038526,0.67357427,-1.419546,0.61591196,0.15995342,-0.3010706,0.116759814,-0.05290848,-0.58484674,-0.2919908,0.76646173,0.79990584,0.6095101,-0.2919323,-0.040067844],[0.0063426853,0.29359382,0.029911779,-0.11636771,-0.17950699,1.065461,-0.6709385,0.09389695,0.14424817,-0.031868383,-0.076493725,0.89900523,-0.100873575,-0.6742322,-0.11008049,-0.102969535,0.15808189,0.059139792]],"activation":"σ"},{"dense_2_W":[[0.1780774,-0.23879893,0.40886527,-0.03837895,0.6731009,0.37912157,0.024035169],[0.26459897,0.39045632,0.21518803,0.15523876,0.49753502,-0.24493335,0.25550902],[0.6711707,-0.43927252,-0.036247067,0.64019126,-0.31602848,0.52645594,-0.8239448],[-0.022878619,0.057614833,-0.1544598,0.04378831,-0.058183365,-0.0948237,-0.84012353],[-0.39999592,-0.30837488,-0.5094495,-0.45057485,0.04420731,-0.39995825,-0.0781143],[0.16760944,0.20678467,-0.40867665,0.471323,0.24410716,0.32461926,-0.22563171],[0.5557148,0.41185716,0.24847849,0.31282943,-0.41320753,0.50370765,-0.21249676],[-0.19418764,-0.012745005,0.19675006,0.15134968,-0.32846612,0.16126548,-0.086756974],[0.17462167,0.13238178,-0.31408685,0.038765885,-0.017508972,0.25259814,-0.58019114],[-0.017934231,0.26039112,-0.34202117,0.43214414,0.24746032,-0.30627286,0.5151575],[0.4940814,0.15724,0.06147876,0.2419263,-0.5808532,-0.0146812,-0.6242227],[-0.44739762,-0.51928467,0.49245462,0.08635158,0.5575218,-0.35451686,0.4488533],[1.2522198,-0.2360379,-0.6547458,0.8267273,-0.88394165,0.70522034,-1.0572921]],"activation":"σ","dense_2_b":[[0.026364576],[-0.025734073],[-0.04295231],[-0.25066647],[-0.013064962],[-0.08499931],[-0.036362205],[-0.004759432],[-0.061301507],[0.005311887],[-0.039976895],[0.04567746],[0.013406974]]},{"dense_3_W":[[-0.5968739,-0.439085,0.48412055,0.3187139,-0.29512522,0.5073818,0.20465378,0.045948084,0.013481034,-0.1332729,0.60977477,-0.6310519,0.23163827],[-0.27164835,-0.4812297,-0.6265655,-0.023346987,0.25599414,-0.12162734,0.13101235,0.41443184,-0.2227736,-0.2773484,0.3685923,0.030362112,-0.634783],[0.57348764,0.19016632,0.25121495,0.27343124,-0.2428453,-0.26571003,-0.6007244,0.4791869,-0.5334977,0.46657896,-0.4515347,0.35774907,0.027132725]],"activation":"identity","dense_3_b":[[-0.011396689],[0.0397831],[0.009339748]]},{"dense_4_W":[[-0.9927989,0.34151393,0.70749515]],"dense_4_b":[[0.012457315]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017.json new file mode 100755 index 0000000000..20e8650482 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.101178],[1.576821],[0.6001426],[0.05129009],[1.5563219],[1.5635437],[1.5707226],[1.5433452],[1.5103695],[1.4539864],[1.3962219],[0.051048342],[0.051107466],[0.051158227],[0.051144693],[0.05100346],[0.05054137],[0.049878743]],"model_test_loss":0.0073623862117528915,"input_size":18,"current_date_and_time":"2023-08-11_16-04-06","input_mean":[[24.654629],[-0.08590741],[-0.0009184312],[-4.0871888e-5],[-0.081669286],[-0.08285683],[-0.085108146],[-0.08099603],[-0.07861437],[-0.07853552],[-0.07747747],[-6.709087e-5],[-5.751621e-5],[-5.7667265e-5],[-0.000100658726],[-0.00015130512],[-0.000163422],[-0.0002661297]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.21534623],[-0.118863985],[-0.3162109],[-0.008301526],[-0.20225163],[-0.81838286],[-0.44373506]],"dense_1_W":[[-0.010962684,1.3271043,-0.2114807,-0.23165482,-0.46575153,1.4799869,-0.1840072,-0.33480445,-0.25981382,0.6701327,-0.23557165,0.70862395,-0.25953412,-0.40407246,0.21034719,0.26426816,0.26048476,-0.37272432],[0.063116424,-0.37950125,0.07257917,-0.3190763,-0.24379982,1.2784098,-0.7842402,0.43258125,-0.052969795,-0.12413401,0.06709847,0.2559667,0.22473153,-0.22734967,0.023825992,0.016029818,-0.028326835,0.059578158],[-0.3016696,-0.075852886,0.0527521,-0.011209507,-0.6228015,1.1113851,-0.34559983,0.22142892,0.2554701,-0.2911173,0.057123005,-0.021941856,0.38191658,-0.26981074,-0.23588574,-0.13898829,0.22445364,-0.04848302],[0.05634534,-0.51824033,-0.003713693,0.08173703,0.16384764,-0.88854563,0.7730121,0.17500255,0.047530588,-0.5229133,0.20252858,-0.44388622,0.25572473,0.42722487,-0.1655544,-0.104584515,0.3827446,-0.14453594],[-0.0098065995,1.1461085,4.4271894,0.28766564,-0.67997473,-0.41923288,-0.65402234,0.04776276,0.7062483,0.22435577,-0.3855223,1.1025202,0.38395193,-0.13660425,-1.0991157,-0.9289552,0.24331227,0.12602676],[0.064604074,0.09815192,0.04449264,0.167245,0.10047873,0.8369896,-1.0633512,-0.02719515,0.48547852,0.00025195925,-0.115980625,0.22939739,-0.16308971,-0.2363354,0.035979815,0.039715026,-0.31373924,0.16439395],[0.14448808,0.42794606,0.023460679,-0.03131989,-0.18359396,0.92956793,-0.62810725,0.051745564,-0.007592588,-0.2550739,0.22733083,0.4052302,0.21245979,-0.54544073,-0.47292453,-0.01651716,0.28038526,-0.06726948]],"activation":"σ"},{"dense_2_W":[[0.3185951,0.38238007,0.50007355,-0.44696733,-0.18833564,0.49253,0.5151739],[-0.75351256,-0.02323625,0.15045765,1.1255723,-0.22760838,-0.5423463,-0.39320955],[0.5941869,0.6002208,0.67094994,0.1078536,-0.21703981,0.5121481,-0.044793326],[-0.18639438,-0.77096725,0.06640158,0.31278,-0.1791094,0.005353212,-0.7920676],[-0.5254911,-0.34967858,-0.04295217,-0.09182358,-0.49522772,-0.29707804,-0.26805338],[-0.11694704,-0.5764714,-0.77232236,0.83998466,0.2796507,-0.6095662,-0.6371917],[0.4697945,-0.81612813,0.41819504,0.0026271453,-1.0698678,-0.44858027,-0.71943],[0.032202445,-0.36785793,-0.89155453,0.91260713,0.26696843,-0.8249699,-0.7184577],[0.14048702,-0.056610133,0.32802385,-0.046393655,-0.78281575,-0.81149364,-0.6811588],[-0.15381347,0.34545475,0.3851575,-0.18525209,0.6611936,0.46200687,0.029352214],[-0.27863827,-0.90037704,0.31005386,-0.06176267,-0.49294484,-0.47007585,-0.21173601],[-0.5374982,-0.098829664,-0.25622907,0.6391975,0.0902377,-0.5835498,-0.6351781],[0.18176489,-0.1428339,0.6578572,-0.7403219,0.44002348,0.21766058,-0.061404295]],"activation":"σ","dense_2_b":[[-0.19657324],[0.20226727],[-0.10386356],[-0.010249704],[-0.094468534],[0.15300958],[-0.060326923],[0.024111554],[-0.15287803],[-0.29019067],[-0.05875744],[0.12496516],[-0.08454377]]},{"dense_3_W":[[-0.2886454,0.5095047,-0.57979405,0.36372662,0.13746898,0.34730884,0.6172098,0.14228286,-0.2412701,0.024884012,0.52553844,0.1899192,-0.2080911],[0.723521,0.30430666,-0.48175433,-0.18722822,0.17053263,-0.046900373,0.32055286,-0.28427157,-0.559016,0.6173524,0.38790986,-0.58535457,0.20128798],[-0.38595572,-0.74244434,0.6686922,-0.7516655,0.11421817,-0.66320103,0.02764821,-0.48069245,-0.52054244,0.78038347,-0.008231983,-0.19960494,0.5328335]],"activation":"identity","dense_3_b":[[-0.08028006],[0.05776726],[0.01632964]]},{"dense_4_W":[[-1.2012991,0.5136856,0.2434981]],"dense_4_b":[[0.07582895]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B12361x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B12361x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..d7aedb019d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B12361x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.1069937],[1.377736],[0.55493695],[0.05719556],[1.3765576],[1.3775383],[1.3772336],[1.3490695],[1.3153961],[1.2702683],[1.223111],[0.056874666],[0.056979246],[0.05707212],[0.05725215],[0.057166327],[0.056820378],[0.056312907]],"model_test_loss":0.01224404014647007,"input_size":18,"current_date_and_time":"2023-08-11_18-01-17","input_mean":[[21.029448],[0.062122844],[0.011586429],[-0.013362663],[0.058448926],[0.059218813],[0.06003164],[0.060906783],[0.05690931],[0.05107428],[0.04589755],[-0.013371633],[-0.013350069],[-0.013321604],[-0.013194786],[-0.013209626],[-0.013246084],[-0.013091505]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.029981],[0.6557142],[0.025477692],[-0.07285545],[0.14103301],[-0.75449616],[-0.37838358]],"dense_1_W":[[0.45469517,-0.13852943,-0.20428768,-0.4649964,-0.16689883,-0.46213424,0.58211297,-0.2600774,0.011318633,-0.31072444,0.24087484,-0.30786481,0.22569135,0.4312357,0.095120884,-0.040498447,0.016559452,-0.006246631],[0.48909014,0.19140528,0.21468148,0.38366044,-0.2924136,0.90077084,-0.57901615,0.49554396,-0.109812155,0.13619985,-0.1644991,0.0029267913,0.39931184,-0.6447186,-0.28419474,0.011865851,0.32336563,-0.16406368],[0.08335772,0.46219787,-0.006281903,-0.4606084,-0.5252204,1.4688734,-0.81243116,0.23485558,-0.0043862914,-0.1055535,0.017743455,0.25692242,0.48580706,-0.406194,-0.3941023,-0.015782943,0.26534048,-0.03168482],[-0.025222164,1.0567143,7.659574,0.08088202,-1.9668833,-0.6673831,-0.35986438,0.8868536,1.874591,1.4548881,-1.8890685,1.428609,0.31265762,-0.31063205,-0.92161745,-0.96598464,-0.21013777,0.3951245],[-0.24860296,-0.03803796,-0.00405875,0.21248466,0.11106674,0.40961975,0.09255897,0.019209573,0.07700923,0.15433341,-0.100313425,0.10832265,-0.058324855,-0.31074783,-0.18075982,0.055103302,-0.20808068,0.12037389],[-1.7423648,0.82126313,2.705039,0.22467682,-0.003623281,0.25392738,-0.4748977,0.06635853,0.54281545,-0.13825028,-0.21510579,0.61694807,0.04500307,-0.4738145,0.15694156,-0.5615226,-0.28929874,0.30215448],[-0.029229201,-0.24708195,-0.06705875,-0.06484636,0.6352556,-1.6881858,1.0670066,-0.18514188,0.14397305,0.029184626,-0.022868067,-0.11220785,-0.41982648,0.24265464,0.5274242,-0.26783192,0.44759402,-0.3523202]],"activation":"σ"},{"dense_2_W":[[-0.14019006,0.8517118,0.23271823,0.36868808,0.61500895,-0.34682518,-0.7155873],[-0.347382,-1.0464604,-0.77282,-1.3966386,0.86157274,-0.15990283,0.32113728],[1.0913037,0.396265,-0.46790498,-0.52455956,-0.4228992,-0.13811836,0.6824839],[-0.19100685,-0.16689822,-0.38699043,0.19396296,-0.6368938,0.4325597,0.23740473],[0.86992455,0.2691951,-0.31172332,-0.21921356,-0.34238544,-0.21491715,0.80763847],[0.9475764,-0.02158802,-0.87059724,0.014679482,-0.324306,-0.33987498,1.1471028],[-0.2071371,-1.4411374,-0.26056397,-1.5143462,0.40373328,0.42800063,0.34931841],[-0.70536876,0.0997919,0.41194123,-0.036822613,-0.2394713,0.23169665,-0.33681363],[-0.2928761,-0.9999774,-0.19667697,-1.0640647,-0.17863739,0.35508665,-0.24925552],[-0.20061804,0.5150541,0.9944113,-0.39703074,0.5471109,0.24731952,-0.8795763],[-0.09993521,-0.21843813,0.9697644,-0.29330543,0.5018627,-0.17633167,-0.9433106],[-0.61491317,-1.1780969,-0.6712012,-1.6405643,0.7202017,0.3414344,0.14721029],[-0.83430654,-0.30646098,0.7540531,0.1640073,-0.07167989,-0.15225653,-0.6632847]],"activation":"σ","dense_2_b":[[0.008414734],[0.02586258],[0.26360497],[-0.17161213],[0.021794198],[0.11237369],[-0.19526652],[-0.21869946],[-0.15780614],[0.0076409117],[0.08034951],[-0.052167464],[0.008192686]]},{"dense_3_W":[[0.37548563,0.6901746,-0.017093312,0.05906239,-0.17285745,0.7850599,0.16857842,0.2924379,-0.45666716,-0.71577275,-0.20736414,-0.22495872,-0.7006286],[-0.63446444,0.3959629,0.6600817,-0.36419266,0.5282527,0.44988224,0.3944795,-0.48388985,0.33301595,-0.7800839,-0.2381008,0.04726727,0.008106329],[0.4815408,-0.39100966,-0.570321,-0.52544576,-0.5211865,-0.2355475,-0.13347512,-0.45825776,-0.1850824,0.6669436,0.73957324,-0.7607831,0.583408]],"activation":"identity","dense_3_b":[[-0.022654189],[-0.047549613],[0.081376344]]},{"dense_4_W":[[-0.07399648,-0.7841488,0.65943784]],"dense_4_b":[[0.049836714]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B12451x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B12451x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..44f484b674 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B12451x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.487649],[0.9452884],[0.49897322],[0.036168467],[0.9375047],[0.939802],[0.94176334],[0.9312508],[0.9176832],[0.8981818],[0.8754837],[0.036056127],[0.03607669],[0.0361009],[0.03615947],[0.03622122],[0.036174823],[0.03611307]],"model_test_loss":0.013644726015627384,"input_size":18,"current_date_and_time":"2023-08-11_18-28-16","input_mean":[[22.188808],[-0.0016201948],[0.0067229858],[-0.006841018],[-0.0040381285],[-0.0036605345],[-0.0031642113],[0.0007389491],[0.00048997015],[0.0011243575],[-0.0031244024],[-0.006816045],[-0.0068408772],[-0.006861466],[-0.006930233],[-0.006957305],[-0.0070455903],[-0.0070900545]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0673442],[2.7745846e-5],[-0.99905986],[0.58756214],[0.7617952],[0.04276479],[-0.08482717]],"dense_1_W":[[-1.376805,0.15786377,-3.812531,-0.245421,0.6155368,0.2635061,-0.1198247,-0.3752861,-0.55684185,-0.21776916,0.61006033,-0.44973776,-0.16761783,0.8354563,0.5233352,0.40619633,-0.25151846,-0.48748687],[0.028500041,0.8878804,-0.9752583,0.5530488,-0.47703752,-1.1190318,1.1573414,-0.41567516,-0.6945042,0.08366254,0.6784389,-0.9251646,-0.16067813,0.39871418,0.010591839,0.43614033,-0.1241933,-0.22110312],[0.0055779507,0.20711112,0.043922327,0.5815181,0.79546875,-0.3745229,1.0692942,0.5421788,0.51711035,0.08371175,-0.7767221,0.14060917,0.86184376,1.282557,0.5231202,0.48133206,0.85133666,0.6251881],[0.23285055,-0.4198758,0.0023081363,0.034350406,0.36339942,-0.8756732,0.4318861,0.068672374,0.1868084,-0.105609834,-0.082326055,-0.21219045,-0.052394826,0.38342378,-0.08516862,-0.073896684,0.20564918,-0.09030272],[0.20625626,0.69163126,0.0040207044,-0.2540704,-0.796767,1.4653561,-0.7764364,-0.3945441,0.16091216,0.07360298,-0.009463289,0.33463284,0.12811317,-0.33023477,-0.15273824,0.20237693,-0.057417326,0.027028535],[0.0009643716,-0.4622335,0.008336065,-0.14127259,-0.03327446,-1.2106333,0.1591597,0.17660871,0.1737159,0.04918479,-0.35066015,0.061325263,-0.32096663,0.065511234,0.07052332,-0.009597162,-0.12007005,0.08947649],[0.16628331,-0.74743044,-7.732924,0.14102307,3.3183703,0.25258428,0.033113215,-2.4762802,-1.7066356,-1.0341645,2.3158412,-1.1193362,-0.6722529,0.23111704,1.0017239,1.267337,-0.41339538,-0.4809045]],"activation":"σ"},{"dense_2_W":[[0.21290007,0.64724165,0.49358806,0.056110725,-0.70513237,-0.11181515,-0.11487207],[0.109797336,-0.40518957,-0.22855765,-0.87453985,0.69947445,-0.3448592,0.36246267],[-0.10385788,0.05007824,-0.43522125,-0.24411759,0.6849432,-0.72941595,0.11045129],[-0.366294,0.48336378,-0.026342975,0.38450494,-0.8003826,0.39405254,0.20164785],[0.09994913,0.15614097,0.03521924,-0.31754568,-0.87542045,-0.0036878414,0.6618589],[-0.4278517,0.13070711,0.22683983,-0.50581944,1.1253206,-0.574315,-0.33853972],[0.3912402,-0.057859033,-0.26818904,-0.07417243,-0.53089696,-0.037230473,0.35937098],[-0.007780401,-0.062603526,0.24958208,-1.1340399,-0.118980326,0.0787109,-0.6355662],[0.045311734,0.31174505,0.3089076,0.12579472,-0.5789172,-0.35370818,-0.276329],[0.002701942,-0.17374736,0.26680645,0.52160555,-0.4519264,0.38481277,0.07479425],[-0.16118486,-0.3074708,0.36325666,-1.1860276,-0.21609893,-0.49962327,0.43130475],[-0.18138263,-0.51702213,-0.07574924,-0.36417502,0.49235836,0.32681176,-0.4689479],[-0.39053667,0.11265152,0.20087351,0.767612,-0.99513376,0.61860406,0.3170469]],"activation":"σ","dense_2_b":[[-0.053010453],[0.073241115],[-0.090730816],[-0.14704],[-0.14625446],[0.19712886],[-0.35103756],[0.021736875],[-0.067158625],[0.013618938],[-0.021116722],[0.05918233],[-0.15891494]]},{"dense_3_W":[[-0.32645482,0.5014898,-0.22124335,-0.56819195,0.37468666,0.36114338,-0.35449836,0.31993988,0.2904279,-0.18361193,-0.49852094,0.5350739,0.17842627],[-0.33429646,0.2762441,-0.45675096,-0.17342906,-0.52969354,0.72830856,0.4542556,0.52436656,-0.14327197,0.19658618,0.5030742,0.086073324,-0.4896408],[-0.40658107,0.72393274,0.58974785,-0.31303748,-0.34105098,0.5463775,-0.105001554,0.5828467,-0.25973922,-0.49174955,0.43771726,0.20469081,-0.62791723]],"activation":"identity","dense_3_b":[[-0.042050008],[-0.04370406],[-0.031461757]]},{"dense_4_W":[[0.52837956,0.37841925,1.2096573]],"dense_4_b":[[-0.031662747]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B76012x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B76012x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..3379069f0a --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'8965B76012x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.375572],[1.0479666],[0.5336316],[0.034517776],[1.0380636],[1.0415741],[1.0435171],[1.0233974],[1.0003295],[0.96495837],[0.9329012],[0.034553193],[0.03455014],[0.034553725],[0.0345314],[0.034555648],[0.03454],[0.034541115]],"model_test_loss":0.01448360551148653,"input_size":18,"current_date_and_time":"2023-08-11_19-45-05","input_mean":[[21.282667],[-0.0041169003],[0.0054940344],[0.0054295054],[-0.0039702826],[-0.0047535836],[-0.0049827257],[-0.00041957427],[0.0036263561],[0.010159709],[0.010208528],[0.0053120484],[0.0053210543],[0.005327886],[0.0053719524],[0.005379417],[0.0054208445],[0.0054328674]],"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.08694271],[2.3874013],[-1.1189023],[-0.20053284],[-0.82135457],[-1.9767927],[-0.24129376]],"dense_1_W":[[0.04281066,-1.1349988,0.0029240015,0.51000357,1.2487551,-1.6569496,0.1126817,0.46920308,-0.18618616,-0.03293716,0.05162156,-0.70887804,-0.03422212,0.34768334,0.17257658,0.11435088,-0.062131677,-0.117349416],[0.78725845,0.5511427,-0.009158071,-0.0879293,-0.29217157,-1.1015882,0.22204675,-0.32402563,-0.31345448,-0.19125423,0.058251724,-0.37509483,0.445088,1.1528792,-1.2366151,-0.30880412,-0.08606776,0.5468172],[-0.53494954,0.8182066,-1.0288574,0.10421147,-0.57160145,-1.2457802,1.087224,-0.11592528,0.16457517,0.12212297,-0.29925084,-0.17019296,-0.27164263,0.33206818,0.03422637,0.16099158,-0.22837052,0.07222221],[-0.018647902,-1.2851863,-5.806965,-0.5820859,1.6532221,-0.15292299,0.3868868,-0.07472222,-1.1960039,-0.9730067,1.3412269,-0.4317284,-0.40662217,0.49923965,0.4225129,0.9066051,0.0015882424,-0.37326196],[-0.57139546,0.46502775,0.99184674,0.396859,0.2340786,0.7237931,-1.2583938,-0.08029648,-0.35627592,0.3597747,-0.040746044,-0.38713092,0.3865338,-0.10270777,-0.41028908,0.27863222,-0.26602527,0.07882698],[-0.5458326,-0.9584286,-0.009850046,0.20454025,0.32909134,-0.98597926,0.7100352,0.04268226,-0.2823607,-0.2440534,0.19341996,-0.3187937,-0.113805935,0.9269717,-0.62920344,-0.21646176,-0.054388206,0.28129458],[-0.020640513,0.1749185,-0.8748891,-0.08894304,-0.6374144,1.5462204,-1.4470797,0.53431803,0.16430534,-0.38660437,0.054579385,0.42408434,0.29847622,-0.53912234,-0.19198798,0.042103697,-0.15677306,0.2510289]],"activation":"σ"},{"dense_2_W":[[0.576956,0.58485156,0.46824354,0.23629351,-0.7127077,0.24054548,-0.801404],[-0.7679824,-0.82911664,-0.1316323,-0.649113,0.5064222,0.32822382,0.5846307],[-0.45726764,-0.2200032,-0.106780164,0.50859475,-0.6885187,-0.9536588,-0.1520038],[-0.6101801,0.0043161334,-0.52828544,-0.6778497,0.20272149,0.17903528,0.6156166],[0.00020568681,-0.8475529,-0.028076276,-0.40698978,0.09670474,-0.032005046,0.34535372],[0.65462285,-0.18649338,0.6973468,-0.1406565,-0.26298824,-0.05047055,-0.112580955],[0.82534224,-0.35191694,0.39351723,-0.1623142,0.109611444,0.19251318,0.25714624],[-1.0138118,-0.30412364,0.05206559,-0.20494476,-0.13674605,-0.24461035,0.34458944],[0.39735422,-0.3080049,0.184732,0.34991446,-0.19378886,0.5201685,0.10663582],[0.051989906,-0.43616736,-0.2765625,-0.6018549,0.35423297,-0.06406093,0.04343631],[-0.46184382,0.2845056,-0.6880694,-0.15087406,0.42838258,-0.8445976,0.78881943],[0.25200763,0.06935976,-0.23696655,-0.39565444,-0.20061536,-0.43781048,-0.48936784],[-1.0732412,0.27758133,-0.028595658,-0.5918897,0.66757387,-0.51985353,0.9180244]],"activation":"σ","dense_2_b":[[-0.13084444],[0.04154609],[-0.1692621],[-0.060585238],[-0.11847037],[-0.0038540647],[-0.009530867],[-0.199515],[-0.15339535],[-0.11540088],[0.031653397],[-0.31335723],[0.043830592]]},{"dense_3_W":[[0.6439716,-0.51321656,-0.29869318,-0.5795511,0.075971514,0.4085636,0.67255604,-0.52776796,-0.080016606,-0.49534002,-0.5485497,0.5257951,-0.51068026],[-0.229645,-0.125913,0.20544381,0.029917588,0.15909044,0.30286267,-0.5067371,-0.31015295,-0.34193483,0.35274273,-0.018820988,-0.10453944,-0.18352267],[-0.71315366,0.5508435,0.56744355,-0.11833193,0.4223396,-0.4779712,0.47948912,0.08573708,-0.28134808,-0.15602563,0.65661746,0.3988988,0.29393244]],"activation":"identity","dense_3_b":[[0.069226205],[-0.050530106],[-0.07095789]]},{"dense_4_W":[[-0.8900288,0.84156877,0.9698375]],"dense_4_b":[[-0.062096175]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12350x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12350x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..a161aec775 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12350x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.993547],[1.3824608],[0.5442085],[0.04466587],[1.3670224],[1.373887],[1.3785548],[1.3483428],[1.3078706],[1.2547767],[1.2047329],[0.044602543],[0.044602063],[0.044597205],[0.044438787],[0.044370554],[0.044226427],[0.043893978]],"model_test_loss":0.01754230633378029,"input_size":18,"current_date_and_time":"2023-08-11_20-42-27","input_mean":[[21.669216],[-0.019106807],[-0.00071183714],[-0.004523422],[-0.015881915],[-0.016015995],[-0.01599993],[-0.013354679],[-0.009738685],[-0.0054146647],[0.0011390813],[-0.0044711116],[-0.0044688736],[-0.0044746096],[-0.004526157],[-0.004584231],[-0.0047590407],[-0.004947274]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.3237112],[-0.2403381],[-0.014628102],[-0.022476863],[-2.7615786],[0.007984176],[-0.28538132]],"dense_1_W":[[1.0919807,-0.045324247,-0.75395745,0.08453984,-0.1758099,-0.7810576,0.60001886,0.1895486,0.022043524,-0.13008374,-0.6345032,-0.04466129,-0.10564512,0.4632076,-0.66976476,0.13218683,-0.12667759,0.23693071],[-0.14425355,-0.1333905,0.61592144,0.16705051,-0.4906342,0.47542897,-0.5073153,0.8226191,0.5239043,-0.020427523,0.118154675,0.042043276,0.05852372,-0.22402734,-0.002725648,-0.021388907,0.09187215,-0.10525817],[-0.002070986,-1.0142688,0.0024986335,0.29121137,0.23187101,-1.4923184,1.0455217,0.3253877,-0.026153605,-0.18092944,-0.022284921,-0.7775931,0.17352305,0.4154996,0.0007446691,-0.3231251,0.016695077,0.092076115],[0.003556123,-0.6074834,-5.16307,0.10229213,1.5040752,-0.24918728,-0.31775448,-0.24619824,-1.1433711,-0.9349265,1.3716418,-0.8144274,-0.26113123,0.12032675,0.4644665,0.6542465,0.8436341,-0.81249446],[-1.2800871,0.5802051,-0.8313711,-0.36175877,-0.6173688,-1.0907602,1.1683012,-0.12169285,-0.04679629,-0.31703347,-0.56498647,0.027285641,-0.13184144,0.46147045,0.08659124,-0.20840271,-0.24434797,0.31504855],[-0.0037023455,0.6878883,0.011835528,-0.14244853,-0.7035841,1.4227525,-0.67105776,-0.052963886,0.040167555,-0.06747049,0.03174579,0.07668224,0.270919,-0.25877607,-0.19650425,-0.39022088,0.16024818,0.07297123],[-0.15980847,-0.26276147,0.51323986,0.2717203,0.06203693,-0.92020065,1.1863018,0.17152844,-0.12639117,0.3401608,0.21352135,-0.5127686,-0.17613575,0.42713523,0.15159386,-0.028390504,0.116660304,-0.2374384]],"activation":"σ"},{"dense_2_W":[[-0.31951153,-0.60305333,0.94934136,0.5176455,0.42330498,-0.9991227,0.42707992],[-0.5175407,0.04058364,-0.5662553,0.3280252,-0.46270046,1.0823125,-0.36556607],[0.3591221,0.21218485,0.48469293,0.5919236,-0.39960954,0.10840565,0.34785143],[-0.6868013,0.5927585,-0.2725992,-0.43643984,0.09060123,0.12481008,-0.63349223],[-0.25257543,-0.8518924,0.085459694,0.6604647,0.55866843,-0.17756383,-0.24361156],[-0.3636745,0.036077805,-0.8358255,-0.19005351,0.23775734,-0.3111283,-0.3870686],[-0.5255931,0.4393281,-1.1511757,-0.071744345,0.46959507,0.40960646,-0.40884846],[0.12857412,0.560429,-0.8185417,-0.40506232,-0.06547155,1.1404641,-0.6429645],[0.629162,0.03809335,0.936505,0.342929,-0.6054116,-0.7688969,-0.062184736],[-0.2467538,0.0011489796,-0.6328479,-0.40097603,0.05688727,0.2515537,-0.40826854],[0.32569283,-0.26726797,-0.05968891,0.6881055,0.7094254,-0.566512,0.22227532],[-0.49612823,0.09098714,0.034291003,-0.28518376,-0.1303378,0.3737506,0.21425006],[-0.21644352,-0.40147,0.2609396,0.09716901,0.75330514,-1.2959148,0.58928996]],"activation":"σ","dense_2_b":[[-0.64226997],[0.07075255],[0.029240176],[-0.1350133],[-0.10543014],[-0.14136776],[-0.08885219],[0.04394021],[-0.06569347],[-0.014445162],[-0.30804452],[-0.14045092],[-0.09604305]]},{"dense_3_W":[[0.5584446,-0.49258238,-0.06831941,-0.33898526,-0.010516451,-0.243958,0.3254376,-0.6381771,-0.43171817,0.32533497,0.3000785,0.47373283,0.1616467],[0.62135106,-0.6357912,-0.03967677,-0.3655531,0.13359948,-0.010117412,-0.26593152,-0.2779743,0.7421054,-0.64709723,0.5776921,0.35391986,0.85788155],[-0.24483721,0.4855099,-0.3095385,0.46626845,-0.117039315,0.27388623,0.39779752,0.61265177,-0.034959346,0.2967797,-0.008864683,0.36063853,-0.479764]],"activation":"identity","dense_3_b":[[-0.031353332],[0.04507456],[-0.07856169]]},{"dense_4_W":[[-0.065495215,-0.60703295,1.0466374]],"dense_4_b":[[-0.0710821]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12520x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12520x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..9a58eb918c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12520x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.850587],[1.2006214],[0.60150135],[0.038597997],[1.1924275],[1.195236],[1.1976618],[1.1804594],[1.160997],[1.129005],[1.0974691],[0.03850275],[0.03851834],[0.038536113],[0.038553298],[0.038495034],[0.038382825],[0.03821236]],"model_test_loss":0.013673663139343262,"input_size":18,"current_date_and_time":"2023-08-11_22-22-26","input_mean":[[21.53012],[-0.045687865],[0.0011462382],[0.0033840926],[-0.041380186],[-0.042962875],[-0.044409957],[-0.04001238],[-0.035696205],[-0.031632073],[-0.029335052],[0.0033047958],[0.003320643],[0.003342723],[0.003354216],[0.0033464204],[0.003304185],[0.0032328872]],"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.108350344],[-0.20693034],[-0.14522482],[-0.5163846],[-0.37156594],[-0.119947374],[-0.31804028]],"dense_1_W":[[1.0910766,-0.43300736,0.0030034583,0.38913414,0.18278283,-0.31925726,0.64668375,-0.13552432,-0.41154033,0.24433674,0.048472222,-0.030966012,-0.18421704,0.302578,0.05368483,-0.10369585,0.45285794,-0.2643156],[0.021740088,-0.6065864,-0.0005514439,0.08483938,0.5714144,-1.2917976,0.6474515,0.1432958,-0.08682793,-0.0937718,0.09686305,-0.27733508,-0.2996467,0.07307305,0.4865785,-0.08587177,0.48999208,-0.4380169],[-0.0045009824,-0.5964933,0.00063102716,-0.16957587,0.42155236,-1.5124145,0.9020258,0.30124182,0.2940203,-0.19893585,-0.14327702,0.028712958,-0.3790416,0.5805242,-0.25458577,0.27593663,-0.32479686,0.18945682],[-0.031941526,-0.36289775,-6.4586377,0.5251884,1.2119403,0.19459614,0.027046863,0.15272467,-2.0958602,-0.6124005,1.2700095,-0.52332336,-0.1753136,0.04349013,0.5094644,-0.12745608,-0.3554143,0.17660716],[-0.0045775212,0.8235139,-0.9080976,0.8690431,-0.18817183,-1.0143514,0.68702215,-0.302185,-0.3445395,0.32111478,-0.021534106,-0.13426313,-0.1298182,0.04873703,-0.40560097,-0.0978507,-0.36964232,0.38757965],[-0.10878436,-1.5791492,0.060036104,-0.75532895,-1.7842572,-0.77946854,-1.2905889,-1.401123,-1.1079345,-2.0109158,-1.0800682,0.1277004,-0.047745556,-0.14514564,-0.4930343,0.4303121,0.40624237,0.38801444],[-1.047575,-0.3641548,-0.011621664,0.1802768,0.36029488,-0.5678573,0.87215257,-0.32095528,-0.48281944,0.18143207,0.16359733,-0.06739126,0.043152835,-0.06856613,0.3683477,0.08366781,0.41270572,-0.37719706]],"activation":"σ"},{"dense_2_W":[[0.08896879,-1.0618838,-1.236928,1.1085147,0.45503667,-0.29649493,-0.5560603],[0.05802153,0.8222231,0.79636604,-0.7962488,-0.14412767,0.14525741,0.6180748],[-0.15825768,-0.96576464,-0.20819964,-0.59680426,-0.15439917,0.22671004,-0.2357116],[-1.111581,0.27544013,-0.17377003,-1.2714287,-1.0232576,-0.6894107,0.9488163],[-0.5458172,-0.42459664,-1.6347574,-1.4187841,-0.964695,-0.5459487,-1.4589431],[-0.15094759,0.6969223,0.84540576,0.45799604,-0.31126192,0.48867247,-0.46977514],[-0.34919992,0.7479091,0.7190768,0.549971,0.5500571,-0.5448207,0.15025789],[-0.68081254,-0.38789412,-0.048226748,0.4368647,-0.8189457,0.021749284,-0.77771515],[-0.60718095,-0.26552448,-0.28099757,-0.15710582,0.29094604,-0.24080555,-0.7808776],[0.0033568847,-0.71768373,-0.9406896,-0.042297453,-0.36388123,-0.108075835,0.5197345],[-0.4915351,0.9041844,0.25389567,-0.013445068,0.18897061,0.2837717,0.3741654],[-0.3757065,0.23760095,-0.66970426,-0.36544222,-0.8507982,0.4782464,-0.5303433],[-0.29663894,-0.37195724,-0.8442924,0.29635245,-0.19174902,0.070796795,-0.4390862]],"activation":"σ","dense_2_b":[[-0.39513272],[-0.159368],[0.2868388],[-0.23528467],[-0.26247987],[-0.15212747],[-0.22264543],[-0.36984366],[0.033016775],[0.06725842],[-0.3415627],[0.22711973],[0.17381573]]},{"dense_3_W":[[0.69550085,-0.2602267,0.6511873,0.80323565,-0.5139177,-0.6302756,-0.41592857,0.5141956,0.6740762,0.7060216,-0.8168942,0.68222535,0.3284389],[0.089398846,0.46339324,-0.97560817,-0.80172545,0.19869575,0.5268298,0.6723404,-0.00843294,-0.75555086,-0.7210899,0.55462325,-0.8117566,-0.73714113],[0.48829198,-0.5059535,-0.08616368,-0.16644941,0.48320302,-0.48428047,-0.30819136,-0.35214564,-0.15856753,0.5061082,0.11269471,0.5998318,0.5135987]],"activation":"identity","dense_3_b":[[-0.117111795],[-0.062588595],[-0.0089505]]},{"dense_4_W":[[0.7856232,-0.70317644,0.19791394]],"dense_4_b":[[-0.08677392]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12530x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12530x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..8d7481346f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B12530x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.7166467],[0.9360951],[0.54996157],[0.039336555],[0.9278234],[0.92963946],[0.9314855],[0.92150825],[0.91230273],[0.8934071],[0.86945397],[0.039176],[0.03919577],[0.039226335],[0.03920194],[0.03908752],[0.0389208],[0.038630653]],"model_test_loss":0.01772945560514927,"input_size":18,"current_date_and_time":"2023-08-11_22-47-50","input_mean":[[17.004646],[0.045599815],[0.0011152645],[-0.001088986],[0.042060442],[0.043612026],[0.044696216],[0.043072034],[0.044451833],[0.042805985],[0.038478125],[-0.0010230377],[-0.0010265883],[-0.0010224311],[-0.0010469804],[-0.000976282],[-0.0009040997],[-0.0007548164]],"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.09819362],[-0.04249229],[-0.3479007],[0.03214666],[0.922219],[0.94473046],[-0.2771768]],"dense_1_W":[[0.07611097,-0.64347965,-5.7489953,-0.057701204,1.9627318,0.71188766,0.62335354,-1.5248296,-1.8103973,-1.1273834,1.2180927,-0.7481957,-0.65215784,0.3646581,0.76954377,0.93266475,0.5737459,-0.9375362],[0.082355805,0.0792861,-1.4165217,0.2831444,-0.8286206,-1.796174,0.7789983,-0.7667562,0.39938906,0.6860971,0.7154728,-0.3473279,0.46564227,0.70484024,0.18656117,-0.024444446,-0.13199502,-0.24193652],[-0.24016297,1.706992,-0.00090066914,-0.071590096,-0.7422648,0.8374083,-0.44082543,0.04738862,-0.22899044,-0.4460011,0.39585826,0.47956917,-0.17853828,-0.10812888,-0.08165929,-0.0425193,0.17251264,-0.29201412],[-0.35274625,-1.3477879,-0.0075425776,0.08863907,-0.77081376,0.9018588,-1.3318201,-0.44829947,2.0795786,0.8122879,0.6548207,0.44521397,-0.31335637,-0.17517531,-1.1029497,0.9331358,0.026675547,-0.06601325],[0.8279214,1.8557522,-0.0014833922,0.0585293,-1.1659931,0.9336915,-0.07515252,0.5152648,-0.62365764,-0.30737656,0.34178838,0.14973152,0.07111421,0.014621839,-0.22071289,0.16666935,-0.16080067,-0.23379543],[1.1760968,0.5412744,-0.0017593631,-0.22849438,-0.632045,0.6746573,-1.3172346,-0.8634406,-0.424611,0.5899645,-0.31364056,-0.32016203,0.25754422,0.1650363,-0.7505603,0.7215971,0.19650249,0.1422042],[0.852189,0.065097235,0.0061805155,-0.22967027,1.4924825,1.5642314,-0.60489327,-0.863056,-0.22668254,-1.0052434,-1.1320058,0.42393053,0.071807854,0.3276753,-0.47956294,0.08070331,-0.29770264,0.29226956]],"activation":"σ"},{"dense_2_W":[[-0.18211515,0.44951305,-0.9500942,0.21868896,-0.23856848,-0.2160815,-0.0797832],[-0.69846493,-0.4206712,0.31242144,0.24509996,-0.49114344,0.39693424,0.40193912],[0.17850624,0.19152331,-0.9087939,-0.44867268,0.23942706,-0.20083866,-0.22976424],[1.3243266,-0.25121248,-0.8598626,-1.3246324,-2.2754881,-1.6574712,-0.9889931],[-0.06998735,-0.6535759,0.1664615,0.1401335,-0.5745483,-0.5484165,0.52828187],[-1.0033789,-0.5766727,1.4222881,0.46975863,0.93773127,-0.7977733,0.08462863],[-1.6989592,0.24379954,1.0563916,0.8624438,-2.5557318,-3.1306412,-0.0018583427],[0.7160944,-0.045115337,-0.7554288,-1.3468298,-1.6522032,-1.3480777,-0.55742955],[0.8170345,-0.4355595,-0.24635607,-0.40475637,1.2702687,0.6482177,0.07428298],[-0.041201867,-0.83161634,0.6151208,0.63096315,0.09922941,0.5946334,0.097100645],[-0.8438058,0.4685656,0.83145976,1.2900296,1.6341914,1.3352168,0.91666037],[-0.22399388,0.07508866,-1.2330295,0.0674378,-0.18247488,-0.29714978,-0.35030952],[0.46261635,-0.33211225,-0.3962421,-1.7023565,-1.4344509,-1.1435779,-0.6136494]],"activation":"σ","dense_2_b":[[0.08529015],[-0.19910426],[0.1709426],[-0.27077383],[-0.40408188],[-0.21291175],[-0.6464522],[-0.30908433],[0.2922855],[-0.15335728],[0.09016753],[0.22037135],[-0.12172044]]},{"dense_3_W":[[0.17863923,-0.6011715,0.1722149,0.44289172,0.34816673,-0.49830723,-0.43645224,0.85543525,0.6923212,-0.49683204,-0.44174555,0.7450105,0.2767857],[-0.23232669,-0.05226724,-0.3187981,-0.7006331,0.26881424,0.5859572,0.7913836,-0.5530767,-0.0619629,0.5197311,0.06590323,-0.13048458,-0.727642],[-0.25087458,-0.4260785,-0.5679577,-0.8808904,0.3215431,0.3545877,1.4937782,-0.5066919,0.17787237,0.24629535,0.33879703,-0.77151966,-1.04119]],"activation":"identity","dense_3_b":[[0.11716675],[-0.15205665],[-0.09666118]]},{"dense_4_W":[[-0.6054611,0.6616036,0.5710006]],"dense_4_b":[[-0.113945]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B1254000x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B1254000x00x00x00x00'.json new file mode 100755 index 0000000000..8c62679e2e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019 b'x018965B1254000x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.5586987],[1.0668136],[0.65108716],[0.034576062],[1.0662991],[1.0668288],[1.065283],[1.0460236],[1.0356027],[1.0212996],[1.004612],[0.034393594],[0.034448482],[0.03450532],[0.03473761],[0.03497435],[0.03507344],[0.034994226]],"model_test_loss":0.00870500411838293,"input_size":18,"current_date_and_time":"2023-08-11_23-14-06","input_mean":[[15.162458],[-0.030393902],[-0.032802418],[-0.0010593864],[-0.023624144],[-0.026816128],[-0.030528499],[-0.045015506],[-0.055663712],[-0.07392666],[-0.08540629],[-0.00092076114],[-0.0009717724],[-0.0010414494],[-0.0015066566],[-0.001796707],[-0.002044406],[-0.002223362]],"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.021506997],[0.21911767],[1.484493],[-1.3083466],[-0.06510764],[0.9399787],[1.458603]],"dense_1_W":[[0.0022624284,-0.3323741,-0.35996,0.30342358,0.4944291,-1.2646209,0.9047208,-0.47583306,-0.23761328,0.18038853,0.38000605,-0.25240594,0.101771735,0.3689774,-0.5897502,-0.13633685,0.18846181,0.053237073],[0.017284913,-1.2738092,-4.2060423,0.73188466,1.3437643,-0.18045263,0.56554645,-0.26942906,-0.49767345,-0.5426496,0.51763725,-0.43579608,-0.3971797,0.086990125,0.05311058,-0.03055538,0.37126696,-0.39750952],[2.0191145,0.49570322,0.031393226,0.54196084,-0.59665686,0.66882825,-1.0989279,-0.18807355,-0.45894685,0.2759851,0.336422,-0.037411854,0.19308677,-0.46080658,-0.4973297,0.5372746,-0.37408796,0.10846941],[-0.46998337,0.3490007,-0.00438622,0.34095845,0.8166364,0.60549915,-0.8988132,0.5476835,-0.37996238,0.3388258,-0.03860557,-0.036083266,0.1092255,0.052381583,-0.5599509,0.24364339,-0.28141674,0.18529813],[0.009164018,0.433447,-0.042506576,-0.17593549,-0.38864172,1.2539347,-0.59288657,-0.13135396,0.29104137,0.023563422,-0.009315888,-0.07067319,0.2342533,0.10161306,-0.5636307,-0.23514093,0.25040185,0.046599127],[0.4312695,0.36135638,-0.0074610105,0.26067948,0.4758904,1.401296,-1.3515489,0.20557608,-0.082261525,0.21485652,-0.0033740771,0.6790412,-0.13174984,-0.46494,-0.69377804,0.41025424,-0.14858818,0.13721205],[1.986749,-0.49324146,-0.02681901,-0.4256105,0.3361303,-0.35204482,0.9926823,0.12374698,0.5503816,-0.09924912,-0.4841911,0.24159499,-0.40405098,0.31244668,0.36439434,-0.044306964,-0.08293645,0.027888171]],"activation":"σ"},{"dense_2_W":[[-0.6324022,-0.2001331,-0.3526252,0.092529655,-0.27300277,-0.43241245,-0.014045538],[0.32039317,-0.116377145,0.3309547,0.63877505,0.5530988,0.50968677,0.24939647],[-0.30597773,-0.40312517,-0.38242427,-0.37124476,0.45356536,0.24014069,0.028166713],[0.96208113,0.43337837,0.14673242,-0.47370073,-0.9436095,-0.7661267,1.4071115],[1.0540173,1.2540439,0.6600092,-1.6646789,-0.54332626,-0.32733205,1.6595306],[0.62378746,-0.023177164,-0.34522477,-0.18102872,-0.551694,-0.5655608,0.6431443],[-0.736956,-0.87690467,1.1770567,0.6597062,0.27471146,1.0888082,0.692091],[-0.62574077,-0.12893064,-0.022563975,0.029874153,0.9045192,-0.17541885,-0.34263155],[0.48334014,-0.41208985,0.18305346,-0.20077266,-1.1162131,-0.2358352,0.34831035],[-0.56035835,-0.06362593,-0.5727027,-0.9132281,-0.30174935,-1.0307825,-0.63969034],[0.14403231,-0.3598213,0.4601045,0.4040111,0.7650697,-0.24749416,-0.4396638],[0.42583916,0.43303528,-0.8717473,0.12096721,-0.70570135,-0.4342938,-0.106751114],[0.84214103,0.1612862,-0.44598746,-0.30170873,-0.734939,-0.39400816,0.33292803]],"activation":"σ","dense_2_b":[[-0.010498221],[0.033183154],[-0.07346041],[0.31818846],[0.4988308],[-0.06161561],[0.13534743],[0.04956322],[0.013285028],[-0.24566568],[-0.054392837],[-0.07685737],[-0.0044829077]]},{"dense_3_W":[[0.320467,-0.094095595,0.29182792,0.19275357,-0.2693895,-0.03124413,0.70573056,0.13810281,-0.14187036,0.4353431,0.59297323,-0.35034177,-0.3786733],[-0.49737677,-0.03697066,-0.4474356,0.4436638,0.22232622,0.077376895,-0.2219271,-0.41994625,0.35827994,0.6140234,-0.30546016,0.06829079,0.09227224],[0.16473123,0.5829968,-0.19248042,-0.60918665,-0.43222797,-0.5060332,0.6062956,0.26105765,-0.52482605,-0.3128516,0.19090605,-0.5577064,-0.6766231]],"activation":"identity","dense_3_b":[[0.03811113],[-0.038507566],[0.07794119]]},{"dense_4_W":[[0.5730286,-0.2928305,0.97310096]],"dense_4_b":[[0.052272193]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019.json new file mode 100755 index 0000000000..98b503aa71 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA HYBRID TSS2 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.718988],[1.5299566],[0.588685],[0.04587614],[1.5157732],[1.5220679],[1.5256046],[1.4840062],[1.4323099],[1.3597063],[1.2913275],[0.04572448],[0.045758896],[0.045787074],[0.045749795],[0.045636524],[0.045395125],[0.044941075]],"model_test_loss":0.01872895285487175,"input_size":18,"current_date_and_time":"2023-08-11_17-36-03","input_mean":[[20.897451],[0.06658304],[-0.006871385],[-0.0023558615],[0.06727495],[0.0672389],[0.06719857],[0.062312864],[0.059572313],[0.053668246],[0.050075833],[-0.0023719259],[-0.002378079],[-0.002380981],[-0.0024748852],[-0.0026206481],[-0.0028906488],[-0.0031310404]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.4188718],[3.7088637],[-0.4249776],[3.6651204],[0.046135984],[-1.4088162],[-0.10634205]],"dense_1_W":[[1.1106812,1.1545246,-4.947238e-5,-0.19786799,-0.18502258,0.5724563,-0.49629408,-0.04241503,-0.0403527,-0.15461488,0.11042651,0.53509825,0.37794867,-0.5013257,-0.36293125,-0.21677697,0.12571956,0.033723105],[1.8875406,-0.87548965,-0.001720046,0.009296322,0.26706383,-0.78977394,1.0030317,0.049685888,-0.81093186,-0.06850548,-0.606039,-0.72494996,0.5103131,0.33077994,0.15339775,-0.43638188,0.059071552,0.17510937],[0.00311601,-3.0533133,0.024360646,-0.6194892,-1.5417911,-1.5249615,-1.0547282,-0.9433036,-1.1036747,-1.0223001,-1.3264794,-0.25942302,0.510594,0.7205571,-0.4561305,-0.24234876,-0.38653123,0.5385542],[1.8394231,0.871029,0.00046375685,0.25113386,-0.26997137,0.6880674,-0.80075204,0.00029531567,0.5298615,0.050234746,0.67435867,0.2723314,-0.19964069,-0.3188195,-0.33458334,0.57019603,-0.115791656,-0.19562978],[-0.0028326493,0.5804407,1.410442,-0.28499115,0.28093004,1.6346636,-0.7038905,0.51737905,0.25173852,0.06668676,-1.1657398,0.79343003,-0.13164437,-1.4595138,-0.089708395,0.2537593,-0.105980076,0.3329512],[1.071272,-0.9638096,0.00031746196,0.07963901,0.52283543,-1.1346815,0.57982945,0.20819707,-0.23751144,0.14297311,-0.030557238,-0.51577616,-0.55872697,0.6908526,0.52733356,0.0744941,0.027328867,-0.12216176],[0.004417767,1.1576066,6.299144,-0.32635224,-1.7558908,-0.30372036,-0.066983394,0.6580024,1.0876615,1.1211929,-1.1704223,1.6710458,0.75445145,-0.87139034,-0.7181289,-1.1046274,-0.4240588,0.63390136]],"activation":"σ"},{"dense_2_W":[[0.2679174,-1.0445848,-0.8299557,-0.25635472,0.4422085,-1.1647375,0.6085093],[-0.6689395,0.39463186,0.23278524,-1.1111928,-0.74221855,0.76892823,0.35332564],[0.31055808,0.3647656,-0.02499961,-0.1409631,0.31955567,0.12277927,-0.15797752],[0.9008812,0.60631984,-0.813905,0.92170995,0.6534263,0.22818235,0.71731585],[0.230484,-0.26698533,0.08754667,0.03489466,-0.3151056,-0.47791874,0.3342572],[0.34251255,-0.7261644,-0.20441282,-0.034852047,0.36376244,-0.89967006,0.219338],[-1.1227978,-0.12817267,0.21945642,-0.8032351,0.09376713,-0.84758645,-1.0390291],[-0.15338765,-0.037509676,-1.0683689,0.50024486,-0.7426109,0.53765345,-0.37471557],[-0.17778587,-1.1523334,-0.80799854,-0.28195953,0.50175095,-1.0760622,0.46772632],[-0.86102694,0.2053753,0.3926311,-1.0105791,-0.2120155,0.7215332,-0.23412094],[-1.2708869,0.66490364,0.25874946,-0.5689588,-0.022179203,0.580645,0.002767838],[0.5473067,-0.6157128,-0.6704757,-0.57233113,-0.29838595,-0.34488145,-0.13409242],[-0.33881795,-0.022099096,-0.55139774,0.18853591,0.050985426,0.8735969,-0.35496432]],"activation":"σ","dense_2_b":[[-0.25471497],[-0.05747227],[-0.061555464],[-0.13456716],[-0.013720933],[-0.07922762],[-0.113175996],[-0.04504478],[-0.35800874],[-0.0046020667],[-0.11548371],[-0.028764911],[-0.05550412]]},{"dense_3_W":[[-0.51718456,-0.015113678,-0.5522247,-0.12137883,-0.18037502,-0.4991924,-0.188951,0.6336781,0.09542685,0.5714098,-0.14561579,0.44534728,-0.09133837],[-0.03161159,0.34381616,0.26201352,-0.41056356,-0.25490084,-0.5049834,0.5320046,-0.12673296,-0.33940148,0.4677796,0.67244035,-0.43483102,0.58558035],[0.22973408,0.5728116,-0.17393303,-0.28269792,0.5416507,0.23091814,-0.074842304,0.019422745,-0.469903,-0.22602552,-0.34416038,-0.09474743,-0.07237691]],"activation":"identity","dense_3_b":[[-0.011782462],[-0.022098923],[0.040575616]]},{"dense_4_W":[[-0.7849743,-1.266133,0.028305434]],"dense_4_b":[[0.018039817]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'8965B12361x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'8965B12361x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..a981acff9e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'8965B12361x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.9360695],[1.1630229],[0.49147838],[0.04477571],[1.156402],[1.1589196],[1.1612774],[1.1484874],[1.127694],[1.0978333],[1.0665215],[0.0445643],[0.04463128],[0.044691123],[0.044780783],[0.04475211],[0.044584557],[0.044264473]],"model_test_loss":0.014142030850052834,"input_size":18,"current_date_and_time":"2023-08-12_00-18-25","input_mean":[[22.546267],[0.026984693],[0.0015847267],[-0.009265251],[0.02708977],[0.02745922],[0.027661897],[0.027764216],[0.02783128],[0.027259488],[0.02614681],[-0.009333842],[-0.009295044],[-0.009257047],[-0.009214106],[-0.009245656],[-0.009297244],[-0.009411856]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.29641],[-0.092996016],[-0.07247574],[0.01721833],[2.1956046],[-0.15631124],[-0.058797363]],"dense_1_W":[[-0.22285046,-0.1114835,-0.18068203,0.16602449,0.59281373,-1.1307124,0.4008994,-0.16000947,0.085925706,-0.29159763,-0.3772878,-0.6881549,-0.13406135,0.5206962,0.36629307,-0.19463618,0.31983083,-0.1474239],[0.016796593,-0.98549455,-1.7525299,0.3078688,0.5721632,-0.3304454,-0.06705133,-0.11118571,-0.32195482,0.3919248,0.27401718,-0.46777967,-0.48869264,0.28487942,0.6982902,-0.074734256,-0.24820116,0.16100961],[0.31042123,0.19122998,-0.12722188,-0.27483284,-0.4547291,0.8013624,-1.0190685,0.21308842,0.33060518,-0.29281816,-0.40331224,0.17957272,0.39285606,-0.25553757,-0.24935547,0.1355044,-0.06329214,0.22954762],[-0.006421214,0.37099814,0.0027769755,0.010240031,-0.80907327,1.8348622,-0.38069573,-0.056077406,-0.14080317,0.13694486,0.03138031,0.16390382,0.21113038,-0.5778241,0.0057960977,-0.032158796,0.07527852,-0.04575749],[0.3227168,-0.17621782,-0.18886027,-0.37221447,0.32229832,-0.6248933,0.40250614,-0.18772343,-0.19750184,-0.27255252,-0.2845168,-0.30223995,0.15848213,0.16786462,0.3700133,-0.02713416,0.35638666,-0.14070766],[-0.029193275,-0.95258975,-6.3443847,-0.16789156,2.1661074,-0.15078546,0.3174049,-0.41737202,-1.9191536,-0.7163877,1.5734226,-1.7942194,-0.99211544,0.3988617,1.8096817,0.71005505,0.3803724,-0.517763],[1.4648159,-0.23948996,0.29068846,0.25918722,0.6120923,-0.8601464,0.5889934,0.34411243,0.020458814,0.28458166,0.45318642,-0.5825167,0.29618037,-0.066410765,0.42480034,-0.16173336,-0.10525159,-0.2598628]],"activation":"σ"},{"dense_2_W":[[-0.37377402,0.46476626,0.5534617,-0.26033473,0.45733005,1.1248896,0.9239269],[0.80217236,-0.20218013,-0.28995574,-0.92397535,0.33133814,0.21111849,-0.052037425],[-0.39823613,-0.4600786,-0.12479944,0.7203347,-0.6923874,-0.07840685,-0.11677317],[0.13027504,-0.37647787,-0.83754325,-0.6329695,0.6788497,0.2377329,-0.10071739],[-0.4414727,-0.18732905,0.5177299,0.7144774,-0.7800902,-0.009347282,0.04816524],[1.4953467,-0.1516854,-0.7720803,-1.5129604,0.547889,-0.11141382,0.4703957],[-0.082963005,-0.12600237,0.16579789,0.060129933,0.14053828,-0.4156861,-0.032326207],[0.10354526,0.39380085,-1.0558978,-1.1450167,-0.09905039,0.7310668,-0.8474744],[0.97818476,-0.174693,-0.38756898,-0.69246876,-0.029256595,-0.36487702,0.25810534],[0.36486697,-0.3805968,-0.32210922,-0.29974073,-0.2457904,-0.078286484,0.14194314],[-0.4540887,-0.23490758,0.45732084,0.8397524,-0.59814954,0.32775092,-0.22665621],[-0.6326152,0.1386963,-0.054368168,0.29623267,0.26214838,-0.5508051,0.03455977],[0.13512251,0.15923476,0.29472926,-0.41340572,0.10075192,-0.89706355,0.01360474]],"activation":"σ","dense_2_b":[[-0.12671065],[-0.051599756],[0.053335667],[-0.119286604],[0.026706826],[-0.1761932],[-0.024956206],[-0.17874902],[-0.109204695],[-0.030811843],[0.033664174],[0.027278738],[-0.33637452]]},{"dense_3_W":[[-0.41551515,-0.6342881,-0.021494662,-0.006901076,0.6140606,-0.03595642,0.2998105,-0.035869166,0.26118553,0.42404452,0.26687363,-0.34257045,-0.006692998],[0.41666955,0.63193476,-0.5990722,0.22787261,-0.69550204,0.6494638,-0.2658041,0.2686287,0.4277496,-0.08251372,-0.6163266,-0.23402017,-0.2279805],[0.57232213,-0.0648472,-0.58796054,0.13980845,-0.745974,-0.3898328,0.4852061,0.6894071,0.31734547,0.32177705,-0.009921448,-0.5850407,0.5147919]],"activation":"identity","dense_3_b":[[0.046797086],[-0.049840048],[-0.06342088]]},{"dense_4_W":[[0.605299,-1.1554636,-0.685096]],"dense_4_b":[[0.053069614]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B12350x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B12350x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..cde14c836c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B12350x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.373858],[1.429052],[0.5426649],[0.052008856],[1.4160408],[1.4200201],[1.4230659],[1.3935287],[1.3574492],[1.3125392],[1.2667787],[0.051808108],[0.051840812],[0.051871687],[0.051805917],[0.051645547],[0.05135777],[0.050868414]],"model_test_loss":0.01654689572751522,"input_size":18,"current_date_and_time":"2023-08-12_01-38-11","input_mean":[[22.57365],[-0.10559917],[-0.0033210916],[-0.012123505],[-0.10526322],[-0.105793074],[-0.106214054],[-0.10535747],[-0.101396576],[-0.097008556],[-0.09058301],[-0.0121329045],[-0.012128961],[-0.012128141],[-0.012230474],[-0.012350836],[-0.012518174],[-0.012592093]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0777179],[0.97938883],[1.5086899],[-0.04293025],[-0.1820288],[-0.6305807],[-0.120503895]],"dense_1_W":[[-0.8936668,-0.9089122,-0.0107665425,-0.33187804,0.63021916,-1.7183859,0.12800273,-0.0100968545,0.024045149,-0.029676547,-0.34905303,-1.0929383,-0.18899661,1.343712,-0.007488287,-0.3871314,0.25819728,0.1568673],[1.5129911,0.79717666,0.022131754,0.5209565,0.4205534,-0.332852,0.6810523,0.8714592,-0.50664216,0.08871834,0.32013246,0.2844342,-0.46781865,0.17079753,0.39502883,-0.36544546,-0.25921047,-0.09649327],[0.35998663,-0.9628087,-0.0062323916,-0.17270656,0.22350977,-0.6925143,-0.13750921,-0.17138264,-0.18750982,-0.013588476,-0.21163066,-0.5151457,-0.16456504,0.12154584,0.47781697,-0.20399685,0.11707962,0.10914235],[0.004396283,0.51554716,-0.9786613,0.69308823,-0.46901524,-1.0285038,0.84607154,-1.1921532,-0.63446474,-0.06949246,1.0443338,-0.42222655,-0.1182501,0.6120174,0.3311507,0.049771998,-0.29231647,-0.24979034],[0.20238344,1.1074004,0.0024114763,-0.0062439544,-0.62287986,1.6389,-1.4840738,-0.053691912,0.08705532,0.07321774,-0.042032983,0.74493074,-0.13798285,-0.52930796,-0.29137415,0.040948115,-0.19026838,0.14882064],[0.5280113,0.27212307,0.007787733,0.15363543,0.35135317,-1.3474009,0.05997354,0.101474024,0.081706434,-0.0908575,-0.10102894,-0.45173493,-0.1977021,0.4278154,0.318782,0.060933735,0.11480374,-0.13501142],[0.0057853195,0.6303344,6.09931,0.026223302,-1.2619864,-0.51326764,-0.03881918,0.49512786,1.4146665,0.79070103,-1.2047328,0.75863904,0.08617853,0.31710652,-0.20454784,-1.32909,-0.210705,0.46263775]],"activation":"σ"},{"dense_2_W":[[0.90623915,-0.19034801,-0.108130135,0.5278633,-1.2545385,-0.12592614,-0.52437365],[0.47535196,0.016532913,0.035282977,0.13013715,-0.870746,0.85260004,0.12751696],[0.5615727,0.46776855,0.09889727,-0.10724942,-1.3574804,0.77887696,0.22862391],[-0.5160793,-1.205545,-1.2478756,-0.8897315,-0.06685275,-0.8264719,0.81887203],[0.48447967,0.9875634,0.8365766,0.21329804,-0.49966353,0.4703453,-0.593851],[0.29606903,0.6514512,0.19704497,0.6196983,-1.1678208,0.060366396,-0.45280713],[0.88284767,0.07871202,0.028610494,-0.24149852,-0.63900256,0.6064404,0.11543124],[0.25333208,0.48942828,-0.12563716,0.051205732,-0.93026,0.80623984,-0.004143445],[-0.2687049,-0.44401962,-1.024401,-0.53700495,0.5412046,-0.6765064,0.29961354],[-0.8286411,-0.43201685,-0.61702985,0.2633626,0.8428664,-0.22970653,-0.1767021],[0.28991467,0.8902969,0.07605267,-0.15893519,-0.76903087,0.4981137,-0.3236638],[0.6096544,-0.21495588,-0.91238225,0.77867436,-1.8102629,-1.2908732,-1.2738218],[-0.5399221,0.2869458,-0.20122242,-0.5448208,1.5114583,0.0075225746,0.47214413]],"activation":"σ","dense_2_b":[[-0.6210039],[-0.7338756],[-0.49544066],[-0.016957626],[0.14940451],[-0.2620403],[-0.33229533],[-0.6031841],[-0.004913182],[0.07355716],[-0.09776186],[-0.21512811],[0.17054316]]},{"dense_3_W":[[0.48983884,0.36363626,0.21502955,-0.9243558,-0.16985188,0.4922954,0.3588781,0.27590808,-0.25560167,-0.46252558,0.39927235,0.69911397,-0.67142934],[0.37070408,-0.123413324,0.18464014,-0.37953055,0.77963734,0.129906,-0.29632708,0.44859973,-0.49503464,-0.2910844,0.2119971,-0.12548667,-0.6616464],[-0.4211456,-0.061192263,0.51209587,-0.8209177,0.81541854,-0.26879197,0.40843183,-0.38219845,-0.50384146,-0.26437145,0.048634317,0.21556903,-0.61757386]],"activation":"identity","dense_3_b":[[-0.14383568],[-0.119675145],[-0.059801787]]},{"dense_4_W":[[-0.9198642,-0.18013722,-0.18726753]],"dense_4_b":[[0.12321251]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B12530x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B12530x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c889cb8d88 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B12530x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.948574],[1.1548593],[0.53562486],[0.04142332],[1.1479245],[1.1507511],[1.1525209],[1.1366456],[1.1163762],[1.0853585],[1.0512753],[0.041254494],[0.04129291],[0.04133092],[0.041417275],[0.041405268],[0.041273605],[0.040966455]],"model_test_loss":0.01583303138613701,"input_size":18,"current_date_and_time":"2023-08-12_03-21-02","input_mean":[[22.332148],[-0.0104918955],[0.005065536],[-0.0070506595],[-0.013160345],[-0.013143605],[-0.01291947],[-0.008646495],[-0.0035904623],[0.003121308],[0.0078104283],[-0.0070844237],[-0.0070869317],[-0.007085635],[-0.007076808],[-0.0070724767],[-0.0071802554],[-0.007291667]],"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.8984663],[-2.0064306],[-0.15834741],[-0.15535103],[-2.6078513],[-0.8259225],[-0.36931977]],"dense_1_W":[[1.9998074,-0.5228987,-0.007837696,-0.37922895,0.2013876,0.9096955,-0.59748536,-0.48922086,-0.22898138,-0.16860367,0.4016587,0.026524307,0.41660535,0.061682027,0.01675915,-0.30379614,-0.22650504,0.31388414],[-0.70133764,-0.31426615,-0.30248472,0.44402006,0.048648655,-0.895414,0.40575865,-0.45831415,-0.31590462,-0.45891097,0.41624534,-0.114576444,-0.32526416,0.48809057,0.09747309,-0.5963326,0.14772642,0.024402922],[-1.3297249,0.20129964,-0.00036146026,0.038497657,-0.5804307,1.210312,-0.79524547,-0.021346122,-0.33560273,-0.2652577,0.30101648,-0.05918743,0.33916757,-0.09221603,-0.38487548,-0.048523333,0.1305082,0.026008023],[0.021477336,0.79985726,-0.0015464973,-0.024727628,-1.1476581,2.130608,-0.8638772,0.0654132,0.11198076,0.11908945,-0.14789096,0.3044069,-0.10925098,-0.37106133,0.018268378,0.16547772,-0.19248393,0.07397156],[-0.7169261,0.5082077,0.33950427,-0.2827534,-0.02629989,0.6695642,-0.17877822,0.435526,0.4602184,0.07237377,-0.22672322,0.29523724,0.30271506,-0.6622034,-0.18534695,0.18379785,0.17853066,-0.034246102],[1.5692992,0.20060617,-0.0087794345,0.22292043,-0.47884136,0.30518147,-0.12451496,0.5754826,-0.21691562,0.2744736,-0.279054,0.5970735,0.4481981,-0.34849948,-0.95557034,-0.4386284,-0.10558777,0.5969739],[-0.09477646,0.0028076046,6.1231327,0.08033729,-1.3894303,-0.101474024,-0.39416897,0.8766576,2.336158,0.5908453,-1.6577489,1.201268,0.18122643,-0.22435206,-0.83741874,-1.0561486,-0.29097697,0.85901344]],"activation":"σ"},{"dense_2_W":[[-0.43103984,0.57259583,-0.45353982,-0.8405737,0.23949991,-0.4028692,0.014858877],[0.73426634,0.05207242,-0.08326654,-0.18289784,0.02668798,0.6674364,1.2636756],[0.5063167,-0.07997967,-0.38297585,-0.54653513,-0.890911,-0.28915372,-0.25040558],[-0.45767108,-0.7947474,-0.98106426,-0.27605048,-0.223204,-0.26669544,0.32884514],[-0.6062595,1.2573644,-0.3091175,-0.5193278,-0.098620065,-0.22738218,-0.6608672],[0.3030579,-0.26088515,-1.2724319,-0.97036225,-0.35874432,-0.74326634,0.53469926],[-0.27986455,0.17539752,-0.7900952,-0.78699905,-0.33842587,0.22881772,0.07359398],[0.3623993,-0.53849274,0.28685072,0.22223133,0.34689447,-0.2684479,0.43466133],[0.46523356,-0.73971575,-1.0159626,-1.149454,-0.27072653,-0.8258129,0.5557078],[-0.53017086,0.72048044,-0.09883555,-0.2829141,0.04501004,0.0050941044,-0.960148],[0.04228475,-0.753709,0.51548535,0.9503595,0.9151871,0.1863079,-0.38379395],[0.20732456,0.4841701,-0.30309632,-0.6324904,-0.32458326,0.030910695,-0.62432814],[-0.414588,-0.5427142,0.07252307,0.13270381,1.1135048,0.40259692,0.40499088]],"activation":"σ","dense_2_b":[[-0.008773873],[0.053248625],[0.012098179],[-0.15198793],[0.031805143],[-0.1111416],[-0.028365295],[-0.14010914],[-0.15508862],[-0.11093824],[-0.08748234],[0.00033527156],[-0.4448109]]},{"dense_3_W":[[0.52092105,-0.5030081,0.3844592,-0.27487588,0.4706045,0.5264942,0.5090887,-0.51060134,0.5129347,0.56152797,-0.28395477,0.3204959,0.02406914],[0.01593203,0.39330208,-0.1664461,-0.33330208,-0.60746926,-0.9253926,-0.235876,0.08486243,-0.59641266,-0.583729,0.34775153,0.23688537,0.26984528],[-0.13828522,0.47288388,-0.14799266,-0.5270513,-0.20191401,-0.25410458,-0.33126354,-0.007962782,-0.09041336,-0.43510935,0.5427055,-0.25327948,0.24559122]],"activation":"identity","dense_3_b":[[-0.07803073],[-0.039414078],[0.06702688]]},{"dense_4_W":[[-0.8098712,0.37011686,0.88090986]],"dense_4_b":[[0.069430865]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B1255000x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B1255000x00x00x00x00'.json new file mode 100755 index 0000000000..0217d51cd4 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019 b'x018965B1255000x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.182226],[1.318108],[0.55038416],[0.04239555],[1.299573],[1.3053768],[1.310721],[1.3021369],[1.2816164],[1.2473235],[1.21014],[0.042187754],[0.042233933],[0.042278603],[0.042346247],[0.042341743],[0.042186968],[0.04189735]],"model_test_loss":0.014659138396382332,"input_size":18,"current_date_and_time":"2023-08-12_03-48-36","input_mean":[[23.368876],[-0.068378255],[0.006725546],[-0.008719376],[-0.06981951],[-0.06967088],[-0.069361694],[-0.063916035],[-0.05700445],[-0.05206913],[-0.047056135],[-0.008766596],[-0.008747308],[-0.008727638],[-0.008741792],[-0.008740139],[-0.008743794],[-0.008700719]],"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.07148768],[-1.2549438],[-0.12059412],[0.28853613],[0.5968914],[1.0667353],[0.060763594]],"dense_1_W":[[-0.024016947,0.84826535,7.0236993,-0.11074515,-1.0140074,-0.3385152,0.3869476,0.19172075,1.175179,0.6838961,-1.670459,1.526374,0.40274563,-0.15733598,-1.1089683,-0.61065984,-0.49152604,0.4318153],[-0.33222798,-0.9686618,0.001050462,-0.010235882,0.6520806,-2.10211,0.87924844,0.10038173,0.29654494,-0.24353155,-0.38334486,-0.46616292,-0.048904274,1.0027238,-0.324415,-0.18696539,-0.13033646,0.2411943],[-0.0034917125,0.52613735,-0.6482348,-0.2613602,-0.31058145,-0.95539135,0.74526536,-0.2220608,-0.07110724,-0.04182627,0.3254652,-0.77304727,-0.20731975,0.41823757,0.6348863,0.7838213,-0.011969447,-0.49731982],[-0.0023636539,-0.9352469,0.010787807,-0.34020036,1.1659639,-0.64832354,0.7099896,0.5089206,-0.4254998,0.33206016,0.01926688,-0.7223199,-0.3694965,0.43782136,-0.4339172,-0.22489113,-0.02471112,0.028520793],[1.4516557,-0.19518882,-0.0029764688,0.12874876,-0.98909014,0.5284616,-1.16062,0.22776824,0.089895435,-0.19509007,-0.56990606,0.7084235,-0.36520556,-0.498448,-0.059548475,0.3090115,-0.28404635,0.19958587],[0.6468036,-0.7351077,0.008596004,0.35622707,0.15142143,-0.7299676,-0.3414438,0.2833802,0.37200418,-0.32622182,-0.38793376,-0.0299215,-0.09024869,0.012755521,-0.27303815,0.07300682,-0.0782633,0.107511714],[0.0020368258,0.40920547,0.003771097,-0.2989948,-0.5958545,1.302363,-0.5710859,-0.12573288,0.14467251,0.008276177,-0.02948484,0.14001983,0.20254755,-0.68072915,-0.024878774,0.015510983,-0.0020638234,0.009023179]],"activation":"σ"},{"dense_2_W":[[0.041601215,0.24447797,0.4216046,-0.016745664,0.15380263,0.64953125,-1.5191501],[-0.39923093,-0.7630646,-0.076158375,-0.11835629,0.07851075,-0.68705547,0.38427234],[-0.8636165,-0.9983891,-0.19798958,-0.7385011,0.45974955,-0.3868112,0.79535973],[0.37583378,0.031611152,-0.033107635,-0.28120467,0.55615216,-0.03311618,-1.2747175],[0.47308478,0.6686049,0.3348913,0.04881856,-0.61745036,0.7808802,-0.66125715],[-0.3698526,0.166168,0.34443247,0.78737146,-0.22270668,0.6219827,-1.3671186],[-0.84190524,0.0076339054,-0.022591086,-0.6236704,-0.709543,-0.1443693,-0.075285174],[0.19466163,-0.26411548,-0.31579143,-0.1977254,0.022438988,-0.9939421,1.1909277],[0.25067687,0.65360653,-0.74067396,-0.17100555,0.19362506,-1.1775283,0.14330721],[-1.1357728,0.79514545,-1.0022937,-0.09116658,-1.3095479,-0.6293098,-0.13681495],[0.09452845,-0.37880635,-0.5292872,-0.386041,0.3486835,-0.056757417,0.43682256],[-1.2684631,1.433187,-0.12050286,0.46401381,-0.9219034,-0.38595304,-0.7805995],[0.54370886,-0.26546618,-0.40414193,-0.34449917,-0.46030614,-0.5862646,0.8578885]],"activation":"σ","dense_2_b":[[-0.21447611],[-0.2793929],[0.028746858],[-0.3559357],[-0.0974488],[-0.031200977],[-0.41441417],[0.04470072],[0.034972806],[-0.17655064],[0.049306504],[-0.20983955],[0.070270784]]},{"dense_3_W":[[0.28620473,0.49553362,-0.29979274,0.49239248,-0.3187128,-0.8089054,0.5728521,0.19156021,0.5760315,-0.15520339,0.63937896,-0.5519342,0.42006114],[-0.73719287,-0.10893459,0.69925296,-0.6052518,-0.18487976,-0.7727218,-0.39659286,0.65072507,0.53865,-0.36898273,0.17422022,-0.61456436,0.58988386],[-0.05938441,0.28018096,-0.3131366,-0.10477532,-0.56004566,0.48185638,-0.11083797,0.3429314,-0.25739473,0.5281356,0.32803684,-0.5822138,-0.26118425]],"activation":"identity","dense_3_b":[[0.008872742],[0.05966272],[0.06136013]]},{"dense_4_W":[[0.4281875,1.0318612,0.050216466]],"dense_4_b":[[0.027177498]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019.json b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019.json new file mode 100755 index 0000000000..eeb64e65a3 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA COROLLA TSS2 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.754316],[1.5248336],[0.56031793],[0.049654935],[1.5070868],[1.5136857],[1.5187283],[1.4884274],[1.4468032],[1.3927733],[1.3395035],[0.049471103],[0.049509283],[0.049545065],[0.049528807],[0.049440794],[0.049183726],[0.048698023]],"model_test_loss":0.01838030107319355,"input_size":18,"current_date_and_time":"2023-08-11_23-49-46","input_mean":[[22.216816],[-0.068382844],[-0.0003495027],[-0.009731857],[-0.06888316],[-0.06969439],[-0.07004197],[-0.06833163],[-0.062542245],[-0.054059293],[-0.046969976],[-0.0098139495],[-0.009790095],[-0.009772296],[-0.009818108],[-0.009930541],[-0.010102344],[-0.010210523]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.071733765],[-2.3017254],[-0.002747584],[-0.16260307],[-0.039528668],[1.2633095],[0.40724456]],"dense_1_W":[[0.14254493,0.7560598,0.0022538262,0.026828635,-1.0626036,1.6978638,-0.58277315,-0.532054,0.13709316,0.08024807,-0.01103483,0.7790654,-0.36199996,-0.27354154,-0.40135407,0.112546146,-0.12273542,0.17872572],[-0.75257075,1.8171842,-1.4895765,0.6856587,-1.047781,-2.1456847,1.0205821,-1.1760736,-0.51131254,-0.1572458,0.3351541,-0.8285507,-0.10711446,0.89037967,-0.5866782,0.046956923,-0.018645424,0.15313248],[0.04169559,-0.58989626,-6.2346396,0.21148093,1.0282952,-0.15679906,0.015086645,-0.4938231,-0.98810667,-0.8081533,1.2733475,-1.0567358,-0.6226471,-0.07101477,1.028134,0.7304045,0.7475682,-0.87618846],[0.00729714,-1.1409336,0.00029273634,0.021291457,0.47364047,-1.0528986,0.6670064,-0.31857133,-0.2512035,-0.14272158,0.29329458,-0.47188643,-0.18927035,0.7875639,0.17967238,0.47387323,-0.0324174,-0.19277702],[0.13785772,-0.30069488,0.002800617,0.31292388,0.408026,-1.1410295,0.61747766,0.056347255,-0.16441363,0.14121056,-0.08929794,-0.39708617,-0.2790936,0.44575593,0.28871247,-0.30545992,-0.063934155,0.045969535],[0.9263208,-0.0041096397,-1.2649248,-0.22491741,-0.7898359,-0.6432323,0.46669382,-0.69405776,-0.039997756,-0.059218984,0.16558072,-0.21184966,-0.06702091,0.2703531,0.22768503,0.39336708,-0.25291198,0.07505179],[-0.007783014,-2.9238482,0.010547396,-0.17914231,-0.9764414,-1.8973196,-2.0817938,-0.5377732,-0.8602919,-0.92122966,-1.1030004,-0.061209604,0.05769448,-0.2639501,-0.011335088,0.0692365,0.37218606,-0.34912306]],"activation":"σ"},{"dense_2_W":[[-1.2037164,0.82475835,0.58777946,-0.41806436,-0.07912497,-0.9752202,0.43038344],[-0.87383485,1.7625434,-0.9010436,0.04913966,-0.80236125,-0.8888718,-1.1724374],[-1.149093,0.588674,-0.79056436,0.5840478,-0.6800404,-2.3066614,-0.30252007],[-0.7044807,-0.3438525,0.18204984,0.9572669,0.17036141,-0.4475017,-0.10285365],[-0.35474542,-0.91775477,0.16575153,-0.6729545,0.004384356,-0.5627307,0.20499422],[-0.62687695,-0.89932716,-0.40928647,0.004326587,0.10205387,-0.38104382,0.05874869],[0.20604928,0.56815124,-0.031190628,-0.6709605,-0.70632714,0.3854373,-0.38627437],[-0.32655486,-0.48946378,-0.27688035,-0.28829703,-0.28283417,-1.2973477,-0.30639303],[0.95871663,0.015167555,-0.4939611,-0.82378834,-0.6367465,0.11321682,0.36064836],[0.17759234,-0.05241082,-0.9149439,-0.5095627,-0.028105808,-0.1622127,-0.56177574],[0.9313323,-0.7414045,-0.10210027,-0.6010315,-0.9564538,-0.379816,0.40230134],[-0.09108528,0.32599035,-0.026278114,0.36614916,0.5561161,0.84679973,0.47440732],[-1.5251282,1.6984508,0.8223704,-0.14148536,-0.21781565,-1.3052686,0.55815554]],"activation":"σ","dense_2_b":[[-0.5853772],[-0.1194652],[0.09660614],[-0.20516787],[-0.2301157],[-0.33061823],[-0.039316446],[-0.11710167],[-0.029613337],[-0.25951824],[0.089471936],[-0.0013098614],[-0.92236656]]},{"dense_3_W":[[-0.20270818,0.6552373,0.9410651,-0.7787618,-0.18410496,0.016181383,0.62408584,-0.3269968,0.7875554,-0.40091902,0.7076024,-0.21312849,-1.0302222],[0.27061725,-0.13254738,-0.19332989,-0.070887744,-0.23539513,-0.14211313,-0.56738764,-0.3196864,-0.56094,0.17847942,-0.31821814,0.57166994,0.60353655],[0.5228776,-0.36678898,-0.47331262,0.4382709,0.092253216,0.38762012,-0.44059324,-0.44392672,-0.19738796,-0.43091238,-0.8047946,0.5009608,-0.23722588]],"activation":"identity","dense_3_b":[[-0.08095956],[0.10173851],[0.10956224]]},{"dense_4_W":[[0.48155427,-0.78180456,-0.52694654]],"dense_4_b":[[-0.0919536]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017 b'8965B48140x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017 b'8965B48140x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..21de46199b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017 b'8965B48140x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.231288],[1.2236207],[0.48384562],[0.042621814],[1.2090349],[1.213721],[1.2177045],[1.1926111],[1.1658418],[1.1279925],[1.0919241],[0.042506836],[0.04252686],[0.04254458],[0.04244013],[0.042343955],[0.042099677],[0.04176238]],"model_test_loss":0.01185668259859085,"input_size":18,"current_date_and_time":"2023-08-12_04-42-56","input_mean":[[23.357746],[0.02301448],[0.0030845709],[-0.0019251241],[0.024697196],[0.024336],[0.024798963],[0.027229987],[0.029705063],[0.028953856],[0.027455976],[-0.0019747023],[-0.0019767939],[-0.0019740309],[-0.0018473448],[-0.0018153174],[-0.0018839837],[-0.0020214282]],"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.007139518],[-0.36417663],[-0.22151361],[-2.2752786],[-1.842185],[-0.052370787],[0.52810186]],"dense_1_W":[[0.06463208,-0.14614256,-0.004301284,0.17093673,0.10111846,1.3639654,-0.8234353,0.039920002,-0.11260984,-0.035453953,0.19663298,0.6151078,0.32875365,-0.8119263,-0.287689,-0.23053078,-0.42119426,0.4950128],[-0.07006446,-1.9708806,-6.5331817,0.1236159,1.8130503,0.5166503,0.68799275,-0.060281184,-1.673682,-1.1404577,1.1906871,-1.2054949,-0.46952084,0.06406035,0.34139132,1.0217533,0.42528445,-0.20924324],[-0.0120092,-0.55868286,-0.43635416,0.46025708,0.59761775,-1.3045688,1.4550803,-0.6410079,-0.46044356,-0.22099674,0.6732854,-0.4678468,0.03187814,0.92614293,-0.61934835,-0.05177542,-0.28630045,0.33652946],[-0.83317536,-0.80627066,-0.10179178,0.10999726,0.019785184,-0.956369,1.0176833,0.3697496,-0.028362121,-0.059128877,-0.12437713,-0.30265445,0.27188116,0.79045576,-0.71790576,-0.34110048,-0.04529891,0.3435819],[-0.7444216,0.63491786,0.08715752,-0.054840762,-0.049226776,0.716783,-0.7838131,-0.0045873374,-0.09835043,0.1465429,0.020588161,-0.035376523,-0.03541739,-0.4995638,0.5265647,0.15362841,0.17507628,-0.338172],[-0.102648556,-0.7882426,0.038460653,0.22105083,0.10494431,-1.0060503,0.5764925,0.11352376,-0.25469536,-0.10095615,0.09101166,-0.32238397,-0.4038888,0.48288944,0.24523751,0.06623701,-0.19029224,0.039122805],[0.7842295,0.004104562,-0.034050412,-0.038287047,0.6813913,-0.9235343,1.0443885,0.6999839,-0.30497897,0.19115898,-0.084208526,-0.488823,0.45840722,0.118487336,-0.117081836,0.0810515,-0.21686175,0.02809039]],"activation":"σ"},{"dense_2_W":[[0.31191123,0.012578262,-0.073103,0.4197174,-0.39167115,-0.5860375,-0.0401353],[0.49508798,-0.73552,0.32163823,-0.13604626,-0.20699552,-0.12848318,-0.3038487],[-0.57450694,0.18396352,0.11384991,0.2159519,-0.34654605,0.02929712,-0.44482008],[0.5138877,-0.17677623,-0.5761437,-0.4093428,0.5905016,-0.5129224,-0.05200225],[-1.1020558,-0.31896916,0.23366053,1.0878744,-0.3915952,0.83413684,0.30904847],[0.6287403,-0.45615014,0.28765643,-0.43303448,0.63161,-0.87807333,-0.6236202],[-0.18465663,1.3596067,0.5464439,-0.521901,-1.4459647,0.6942117,1.1208469],[0.72724205,0.047573425,-0.7336553,0.050098203,-0.30979815,-0.030565912,-0.1010699],[0.13069697,-0.7504235,-0.31712496,-0.25702086,-0.4903785,-0.38608697,-0.8202706],[0.25118548,0.26678544,-0.015086808,-0.7808886,0.49729776,-0.9659693,-0.10936706],[-0.8416602,-0.3856989,0.39649925,0.22174147,-0.27461663,0.97619355,-0.26972875],[-1.3890435,0.42025894,-0.07396389,0.83693534,-0.43904755,0.41258448,-0.7992472],[0.36811528,-0.80290574,-0.041142356,-0.1994228,0.36623415,-0.5200105,-0.76657784]],"activation":"σ","dense_2_b":[[-0.22534604],[-0.105216384],[-0.19398747],[-0.016557224],[-0.13661896],[-0.15216051],[-0.08812248],[-0.09663603],[-0.34491262],[-0.09128825],[0.04268533],[-0.39448884],[-0.061641783]]},{"dense_3_W":[[-0.049214575,0.06255724,-0.70038843,0.6088635,0.1090371,0.6303497,-0.5964707,0.47305194,-0.16417064,0.52888405,-0.53463614,0.09932232,0.2497237],[0.08096788,-0.39710945,-0.15236828,-0.64790344,0.3642383,-0.101971485,-0.020350397,-0.35562035,-0.19162105,-0.5233594,0.49097145,0.43193904,-0.1615822],[0.3178663,0.4239579,0.2581351,0.104468025,-0.5409481,-0.05274523,-0.60230494,0.025281865,-0.17851482,0.14904647,-0.5448667,-0.57374054,0.6508731]],"activation":"identity","dense_3_b":[[-0.062227387],[0.06364925],[-0.03869293]]},{"dense_4_W":[[0.5423993,-0.964113,0.53714585]],"dense_4_b":[[-0.056707334]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017 b'8965B48150x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017 b'8965B48150x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..f1afd48621 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017 b'8965B48150x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.754703],[0.99583066],[0.52195853],[0.03364074],[0.9999458],[0.9983864],[0.9967491],[0.9690758],[0.9489988],[0.9172365],[0.89279425],[0.033480037],[0.03352747],[0.033564996],[0.033597305],[0.033555403],[0.03339308],[0.033234917]],"model_test_loss":0.011961689218878746,"input_size":18,"current_date_and_time":"2023-08-12_05-09-42","input_mean":[[20.5533],[0.06072723],[-0.0130017605],[0.00067336776],[0.06433451],[0.06329887],[0.062110342],[0.059719138],[0.055979628],[0.0545425],[0.050233126],[0.0008544997],[0.0008328172],[0.0008131706],[0.0008174784],[0.00082928565],[0.0009185176],[0.0011421707]],"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.90862113],[-0.7998115],[0.29500127],[3.5970535],[-0.12021488],[-0.008523585],[4.1502047]],"dense_1_W":[[0.16046667,-0.18488905,-0.08116255,-0.18750922,-0.16433491,-1.1152148,0.9359541,0.09028606,-0.37050682,0.02058137,0.08767959,0.07042472,-0.10593792,-0.24539731,0.65890104,0.033354606,0.08174793,-0.13008156],[5.6240082e-5,-2.0457633,0.65334374,1.5251502,-1.3088462,-2.043833,-0.04112441,-1.5476086,-1.6310064,-1.5787094,-2.5516076,-0.15880251,0.8098546,0.84737986,-0.29775852,-0.58279693,-0.109593175,0.9306553],[-0.09240735,-0.23691395,-0.08596292,-0.021863438,0.19790214,-1.3464229,0.85313654,0.04628712,-0.3389506,-0.043647792,0.18819022,-0.37191772,-0.0034588557,0.14444594,0.39095238,0.1306712,0.023204941,-0.12470221],[1.6062875,-0.14168718,0.29216757,-0.29068917,-0.10627767,0.88737196,-0.22878392,0.2706971,0.52616674,-0.1836785,0.015717065,-0.40486693,-0.34726334,0.50040615,0.47368926,0.36900276,-0.0014073849,-0.43910235],[-0.007260963,2.2485175,4.940441,-0.5364479,-1.326066,-0.22738455,-1.5765278,0.108092494,0.6156207,0.84355676,-0.3730777,0.8112125,0.3988551,-0.008641389,-0.27626094,-0.28699768,0.046848673,-0.34230638],[-0.037478976,-0.1001093,-0.0863427,-0.07570549,0.36714154,-1.8569329,0.9551398,-0.16772039,0.1527077,0.12593286,-0.19880708,-0.16723952,0.27533242,-0.15500604,0.52059233,-0.3220368,0.048995454,0.06608929],[1.8863575,-0.09598721,-0.34971088,0.59141415,0.033216525,-1.0910133,0.68912745,-0.5307834,-0.4284811,0.18438782,-0.024860496,0.19869357,0.26999107,-0.24860352,-0.6470507,-0.508486,0.0019406695,0.51603043]],"activation":"σ"},{"dense_2_W":[[-0.48650655,0.2588981,0.0312486,0.43491283,0.16748133,-0.71130973,-0.053482138],[0.27239284,0.07384157,0.1776044,-0.33170608,-0.002457442,0.7151791,0.21523637],[-0.18006818,-0.4765831,-0.6325456,-0.70129013,0.122486345,-0.1399289,-0.26494774],[-0.7057871,-0.47439024,-0.52092475,-0.1475755,0.45321676,-0.11419975,-1.1540185],[0.29741463,-0.47053236,0.84870386,-0.09420109,0.3550361,0.53206086,-0.0045715007],[-0.72433555,-0.6616255,-1.5622116,2.4680088,1.291401,-0.54468,0.7206563],[0.6961331,0.44749773,0.36611405,-0.38041288,0.3445849,-0.18433261,-0.27811208],[-0.69021624,-0.017037576,-0.67009085,-0.09356929,-0.10503188,-0.34458145,-0.02231519],[-1.0635598,-0.33353114,-0.5266894,-0.137938,0.7490435,-0.35423642,-0.99171734],[-0.21807487,0.18801044,-0.68545204,0.12370873,0.9005878,-1.0286127,-0.8563234],[0.5423448,-0.29096147,-0.018749518,-0.09780457,-0.5506883,0.46788862,-0.16100915],[0.03551326,0.2860867,0.6957025,0.21722172,-0.1966169,0.5215825,0.07507346],[-0.5746759,-0.22346315,-0.44673678,0.15813608,0.3015097,-0.40882587,-0.51104206]],"activation":"σ","dense_2_b":[[-0.024497896],[-0.07063643],[-0.19928667],[0.42064607],[-0.005411175],[0.6328674],[-0.049392886],[0.02871734],[0.3210596],[0.26861688],[-0.026878959],[-0.060387224],[-0.10667805]]},{"dense_3_W":[[0.36677212,0.55660695,-0.55313206,-0.4082663,-0.27326408,0.10608849,0.021528898,0.36427072,0.35612637,-0.26106265,-0.580114,-0.5729309,-0.44237646],[0.4771073,-0.6284979,0.4865573,0.72787654,-0.19068882,0.63529533,-0.54094064,0.422667,0.3027027,0.3450987,-0.013951826,-0.53568786,0.41296872],[-0.48427796,0.43434283,0.07578888,-0.43649468,0.40260956,0.3030044,0.14234343,-0.16904311,0.2427833,-0.6615657,0.047491975,-0.2096294,-0.08129209]],"activation":"identity","dense_3_b":[[-0.014429971],[-0.026662724],[0.013837804]]},{"dense_4_W":[[0.45206308,1.1123025,-0.31965008]],"dense_4_b":[[-0.023298338]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017.json new file mode 100755 index 0000000000..a9250081a1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.59148],[1.2493986],[0.5269206],[0.041249365],[1.2364323],[1.2408036],[1.244121],[1.2149953],[1.1840745],[1.139739],[1.0999022],[0.04111617],[0.041138012],[0.04116289],[0.041093722],[0.04103911],[0.040840328],[0.04053395]],"model_test_loss":0.013219255954027176,"input_size":18,"current_date_and_time":"2023-08-12_04-15-52","input_mean":[[22.762989],[0.029107802],[-0.0036903925],[-0.0018161334],[0.02989136],[0.030132128],[0.029675554],[0.031246228],[0.032991253],[0.033477113],[0.031189695],[-0.0017968083],[-0.001822502],[-0.0018435197],[-0.0018475861],[-0.0018452929],[-0.0018318946],[-0.001845115]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.24648063],[-2.376559],[1.1662444],[-0.26554593],[-0.32742506],[1.4806708],[-0.0031550017]],"dense_1_W":[[-0.0022086294,-0.40385738,-1.160377,0.058853727,-0.45829934,-0.9892548,0.7024091,-0.026199905,0.1490116,-0.15794931,0.3758965,0.049813736,0.32553354,0.32745218,-0.17973755,0.050215364,-0.19431834,0.20708089],[-0.9471611,-0.7732935,0.0040800874,0.5742045,-0.18457998,-1.2835798,0.6246207,-0.14899649,0.18967356,-0.065814145,-0.15127227,-0.3386243,-0.23807645,0.6077654,-0.5328684,-0.30787334,0.28645578,0.14132696],[1.0173131,0.3188301,0.0074244044,0.61990887,0.7274369,-0.93646467,1.0704489,0.76136214,-0.32295448,-0.01725006,0.07569445,0.18620366,-0.17104647,0.29966894,-0.70542735,-0.7354604,0.016799392,0.30154032],[-0.20962188,-1.311333,-0.0026445198,0.17922984,0.531851,-1.5825989,0.7938387,0.0066229375,-0.09016458,-0.30289832,0.17271148,-0.47236636,-0.30804113,0.6233303,0.12623943,-0.0055988682,-0.043602336,0.06712645],[-0.020458225,-0.42885244,-0.0038395484,-0.10207273,-0.015277347,-1.4454521,1.3775421,-0.118530035,-0.22922382,0.17729308,-0.09748722,-0.89088255,-0.178599,0.85357165,0.35415354,0.43488976,0.04118875,-0.33566797],[0.8193772,-0.6007122,-0.0017037725,0.13282925,-0.11202925,-0.929353,0.317924,-0.11701756,0.10553851,-0.3365874,0.0851421,-0.054551814,0.0054372363,0.36028123,-0.2594373,-0.61298895,0.37971976,0.19868912],[0.008058829,1.6243702,6.4016485,-0.019551624,-1.5234914,-0.4204991,-1.3425288,-0.4094253,2.030977,1.4565194,-0.8323464,1.296278,0.47479084,-0.09157813,-1.1762311,-0.8872532,-0.12166119,0.38413718]],"activation":"σ"},{"dense_2_W":[[-0.28090087,0.74190426,-0.28707552,0.516355,1.334883,0.4357577,0.2586334],[-0.34608322,-0.33025268,0.0999196,-0.5887224,-0.6075646,0.64398736,0.3338182],[-0.31348327,-0.8770239,-0.6024458,-0.6178695,-0.6372776,-0.72627634,-0.16278459],[-0.3722624,-1.0817293,0.42359433,-0.33799604,0.10361065,0.7388388,1.3176775],[-0.29480588,0.7901369,0.17133124,0.4799114,0.85245687,-0.013445694,0.14533967],[-0.87411815,-0.16010237,-1.4885652,-0.29839927,-0.20605023,-1.562838,0.5986846],[-0.73472345,0.338243,-0.9374241,0.02173104,-0.7596491,0.6785289,-0.20274258],[-0.2997788,0.2209799,0.48596287,0.78598267,0.9243628,0.023341166,-0.43850183],[0.4222353,0.5027177,1.0574167,0.43871415,0.28589502,0.78985494,-0.5190039],[-0.18783973,-0.56768733,0.050845794,-0.28815973,-0.94438463,-0.2522084,0.32373685],[-0.106311925,-0.35109058,-1.1950349,-1.3491938,-0.63636744,-0.85660255,0.65720135],[0.11469332,0.6067198,-0.0036478473,-0.1060145,0.81046635,-0.43815076,-0.32849914],[0.02783019,-0.4614942,-0.2623803,-0.9181543,-0.88305587,0.06497931,-0.5045385]],"activation":"σ","dense_2_b":[[-0.15510015],[0.2342048],[0.15416661],[0.7777073],[-0.13564527],[0.14683509],[0.024061315],[-0.08486859],[-0.11236216],[0.14123017],[0.1472493],[-0.2562387],[0.1431819]]},{"dense_3_W":[[-0.39276794,-0.16104949,-0.6395178,-0.085208185,0.073711544,-0.10194128,0.45973158,0.53386575,0.3106653,0.012114314,-0.73890895,-0.1875676,-0.678936],[0.7250477,-0.36109838,-0.2772502,-0.73887503,0.37471095,-0.6863193,-0.5893201,0.13003068,0.5410711,-0.3264668,-0.8585225,0.46357864,-0.7054099],[0.12821884,-0.55353826,-0.29466185,0.21078463,0.06601266,-0.4738428,-0.10462136,0.5951863,-0.07738918,-0.641871,0.18521658,0.1677981,-0.252422]],"activation":"identity","dense_3_b":[[0.04069802],[0.026384773],[0.020536864]]},{"dense_4_W":[[-0.29379988,-1.0209042,-0.20056948]],"dense_4_b":[[-0.02549032]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48241x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48241x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..07a3ab8f04 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48241x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.209049],[1.1246747],[0.46813142],[0.038223516],[1.1218573],[1.1228344],[1.1237725],[1.099323],[1.0759022],[1.0401212],[1.0056554],[0.0380946],[0.03811699],[0.038133033],[0.038103707],[0.038023833],[0.037828285],[0.037552092]],"model_test_loss":0.011310987174510956,"input_size":18,"current_date_and_time":"2023-08-12_06-10-19","input_mean":[[22.88909],[-0.028824013],[-0.013613169],[-0.010625672],[-0.024585929],[-0.025837906],[-0.02695633],[-0.033290874],[-0.035039704],[-0.03637915],[-0.034272987],[-0.010562119],[-0.0105818845],[-0.010603017],[-0.010749645],[-0.010851333],[-0.011034958],[-0.0111641]],"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.22523445],[-0.26343995],[-0.16324636],[-0.118881956],[-1.753483],[-0.07577936],[-1.102491]],"dense_1_W":[[0.002532067,-0.03390916,-0.003535666,-0.04854094,-0.08614675,-0.69101536,0.10960003,-0.03146945,0.24333058,0.14761123,-0.2722869,0.27474254,-0.043608457,-0.11733092,0.24542642,-0.10411576,-0.14360683,0.1711039],[-0.002566696,-0.61363703,-0.012943635,0.026450964,0.29015598,-0.71414703,0.554264,-0.037178878,0.03740144,-0.30521652,0.21204664,-0.38488153,-0.21638761,0.41673842,0.33263344,-0.15415925,0.3494084,-0.28160352],[-0.16471842,-0.31117657,0.8566729,0.29125565,0.4319235,-0.75162256,0.95838267,-0.20883378,-0.32447112,0.082446456,0.10276111,-0.49870324,-0.023855265,0.21451043,-0.006508097,0.3004852,-0.32773772,0.011747492],[-0.019952636,-1.5153528,-5.0031734,-0.09435296,1.048899,0.43409705,-0.069626406,0.32380673,-0.8917055,-0.23266096,0.83130217,-0.20197223,-0.07251639,0.20138681,0.1400577,-0.017955068,0.055563636,-0.10964311],[-0.88960624,0.66261613,-0.9217085,-0.023391634,-0.13783228,-0.78201807,0.58500487,-0.34910184,-0.41719157,0.30604267,0.020150643,0.0013851137,0.14963569,-0.0014568489,-0.15652372,0.05179874,0.043643035,0.0022867518],[-0.05010886,-1.9120406,0.16408531,-0.29981497,-0.61399275,-2.088809,-0.7970844,0.03929672,-0.0981413,-0.88908887,-0.7213265,-0.37824726,-0.072238155,0.22233075,-0.5327377,-0.12634961,-0.14507468,0.4685959],[-0.692649,0.076070726,0.835587,-0.07369687,-0.31847525,1.0514476,-0.7529806,-0.02802738,0.112416394,-0.007971444,-0.073445976,0.027493669,-0.023394028,-0.14953516,0.3462396,-0.20032988,0.013378577,-0.006742064]],"activation":"σ"},{"dense_2_W":[[0.14651315,0.65690446,-0.04113687,0.041510507,0.09703274,0.42973572,-0.19722632],[-0.16582173,-0.02892236,0.21182849,-0.07145227,0.7815606,0.6976398,-0.4521055],[-0.09238782,-0.79659176,-0.010888447,-0.64854467,-0.3640353,-0.32341737,0.94107974],[-0.31743294,-1.079859,-0.48714882,-0.31109604,-0.7076601,0.6800173,-0.3782569],[-0.029170444,-0.949289,-0.2557742,0.26696756,-0.6634111,-0.020845836,-0.13919494],[0.39409286,0.7231917,0.6616238,0.6863315,0.45207512,-0.65741384,-0.27147612],[0.9265955,0.55270416,-0.15335171,-0.21362257,0.839455,-0.20367129,-0.54616636],[1.1020366,0.52923506,0.0077937646,-0.6614574,0.1045729,0.40647596,-0.01551381],[0.8354852,0.60446924,0.24171901,0.80390596,0.08422289,-0.5756955,-0.47378206],[-0.86737347,-1.0375736,-0.7943101,0.19968024,0.34953976,-0.27134398,0.38634428],[-0.23586744,-0.90408766,-0.9303652,-0.9001962,0.604345,-0.8173552,1.2277185],[-0.0666105,-1.2101858,-0.17242567,0.21582662,-0.5084395,0.30618143,-0.61344314],[-0.7643587,-0.44565865,-0.5358139,-0.789047,0.60576195,-0.40198153,0.7971051]],"activation":"σ","dense_2_b":[[-0.30520138],[-0.2789117],[0.26295054],[0.20992225],[0.09671134],[-0.23525962],[-0.28452772],[-0.15586977],[-0.24889536],[0.2383187],[0.031573173],[-0.06746427],[-0.18409434]]},{"dense_3_W":[[0.6026086,0.52552027,0.2761912,-0.8430829,-0.66491354,0.069576606,0.08970149,0.5401842,0.24471678,-0.89263755,-0.32295918,0.13739742,-0.5061482],[-0.3305499,-0.5845312,0.7317596,0.93317604,0.087755084,0.2923734,-0.8093447,-0.6683554,-0.6317001,0.99416625,0.7963545,0.5912554,0.59245497],[0.0005086235,0.27584663,0.7916986,0.4292943,0.63182247,-0.6468668,-0.2727807,-0.35912475,-0.3197199,0.82221115,0.32133383,0.2867808,-0.08736428]],"activation":"identity","dense_3_b":[[-0.034214295],[-0.032624304],[-0.05482243]]},{"dense_4_W":[[-0.24479973,0.74612886,0.73167807]],"dense_4_b":[[-0.026686598]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48310x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48310x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..191731833f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48310x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.603247],[1.3767333],[0.4454295],[0.045631606],[1.3678387],[1.370781],[1.3725109],[1.3436831],[1.311338],[1.2674466],[1.2208972],[0.045455445],[0.045487784],[0.045517508],[0.045482583],[0.045399908],[0.045213446],[0.04482382]],"model_test_loss":0.013772002421319485,"input_size":18,"current_date_and_time":"2023-08-12_06-42-21","input_mean":[[23.356035],[0.011589931],[-0.015715389],[-0.0022615397],[0.015798328],[0.014719816],[0.013118888],[0.009267011],[0.008420342],[0.008507399],[0.009309166],[-0.0022847306],[-0.0022728958],[-0.002267876],[-0.0022721845],[-0.00230573],[-0.0023624457],[-0.0024641412]],"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.88219327],[-0.05723061],[-0.059791878],[1.4932584],[-0.0350319],[-0.84323514],[0.2996949]],"dense_1_W":[[0.15552013,0.68498236,-0.004401782,0.06613787,-0.3138051,0.9909178,-0.4801728,0.27251762,-3.9911305e-5,0.14424084,0.029309403,0.041476194,0.5599982,-0.5216308,-0.12916003,-0.17854483,0.036074255,0.11677919],[-0.0082084965,-0.53576446,0.0034336871,0.36242324,0.07065764,-1.0044807,0.7644967,0.048346102,-0.28757718,0.05818398,0.0812672,-0.42089686,0.18758625,0.326259,0.5879358,-0.09024579,0.026588196,-0.027274309],[-0.030504204,0.94661164,1.4692297,-0.14969598,0.0024379326,0.62712175,-0.19334361,0.30215573,0.34021494,-0.14773123,-0.9896913,0.8398936,0.06587321,-0.62592477,-0.17010672,-0.34911457,0.26831692,0.1246808],[0.53607357,-0.8794676,0.0014746991,0.35912958,0.35449198,-1.2205513,0.5645118,-0.12328942,0.09299552,-0.07820418,-0.16524789,-0.18727893,-0.30706224,0.03244261,0.17126645,0.03033496,0.062598415,-0.15945143],[-0.29806733,0.62810147,0.016662166,0.04787856,-0.2178898,1.0717077,-0.58408093,0.038249463,0.055414878,-0.16181065,0.2520098,0.14243068,0.2880338,-0.34465408,0.011317232,-0.11930281,-0.32691225,0.30142125],[-0.09203294,1.0721633,5.374889,-0.26402676,-0.21183757,-0.18999156,-0.1049094,-0.13156429,0.3925089,0.41511986,-0.6934615,0.86322796,0.7660964,-0.3449572,-0.41987318,-0.61497223,-0.21786183,-0.13827488],[1.0558003,-0.15531835,-0.014700998,-0.15400389,-0.17445247,0.19957963,-0.7788509,-0.66680443,0.4196881,0.10506768,-0.30046782,-0.113978475,0.022458427,-0.07436751,-0.24094073,0.5980271,0.49674785,-0.5393424]],"activation":"σ"},{"dense_2_W":[[-0.5135834,-0.25661662,-0.026235756,0.030436503,-0.17369603,-1.7777263,-2.4461317],[-0.7826742,0.5919605,-0.203896,1.0301571,-0.49202737,0.30388182,-0.3286326],[-1.4934103,0.1125834,-0.784764,0.10120618,-0.73634833,-0.33474493,-0.51051533],[-0.08085624,-0.5157619,-0.61287373,-0.03598703,-0.13013026,-0.73116446,-0.6332094],[-0.15480644,-0.52027535,-0.43745804,-0.22571458,-0.59228283,0.22646776,-0.22388498],[-0.17604452,-0.18500611,0.50142026,-0.56830126,0.6879626,-0.08546103,0.09753222],[0.45385736,-0.1853672,0.5049051,-0.46082744,0.15115426,-0.3264805,0.27134734],[0.62699825,-0.23365812,-0.12801227,-0.66903687,0.5545601,0.15332852,0.32462138],[-0.107537225,-0.56420654,-0.6508188,0.30347762,0.0477495,-0.41004136,-0.012734894],[-0.19092843,0.54952693,-0.26207697,1.156082,-0.55869824,-0.2928665,0.26659483],[-0.55371886,0.43837482,0.24519897,0.20218645,-1.3142209,-0.4187609,-0.051204197],[-0.9921039,0.17509715,-0.047123123,0.009096356,-0.22319628,-1.7375966,-1.591449],[-2.3417017,-0.10801021,-0.026163574,0.3812512,-1.0870538,-0.819271,-0.7919683]],"activation":"σ","dense_2_b":[[0.3518073],[0.1122314],[-0.0118162315],[-0.2725371],[-0.24143407],[-0.04301829],[-0.037871398],[-0.043535873],[-0.077412814],[-0.016384799],[-0.030182287],[0.060030468],[0.27441582]]},{"dense_3_W":[[0.36764717,0.59455025,-0.26633954,0.55135894,-0.080566764,-0.058451932,0.34915563,0.37275517,0.4936895,0.0741616,0.30454972,0.37950292,0.40615684],[-0.6196921,-0.63125026,-0.48607326,0.026073568,-0.23994817,0.6612403,0.665946,0.624512,0.58777785,-0.47118247,-0.4825106,-0.5355161,-0.5683991],[0.32227254,0.10172928,0.0020228538,0.5071577,0.21635775,0.53688926,0.2714474,0.60069305,-0.26110378,-0.20226555,0.41789976,0.5308405,0.3238944]],"activation":"identity","dense_3_b":[[-0.04775693],[0.03200255],[0.023321353]]},{"dense_4_W":[[-0.6651373,1.1393598,0.5636013]],"dense_4_b":[[0.03244566]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48320x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48320x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..214f8be518 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48320x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[5.5644407],[0.8395695],[0.34483072],[0.038255572],[0.8326137],[0.8354024],[0.8375865],[0.8230707],[0.8024709],[0.77293986],[0.74346644],[0.03822754],[0.03823464],[0.038251538],[0.038143624],[0.03792401],[0.037752647],[0.03757457]],"model_test_loss":0.012391784228384495,"input_size":18,"current_date_and_time":"2023-08-12_07-07-38","input_mean":[[22.189064],[0.013319887],[0.004920282],[-0.013327403],[0.01110264],[0.011794839],[0.012627523],[0.014629398],[0.0158066],[0.0182441],[0.021402285],[-0.013237113],[-0.013275518],[-0.013312367],[-0.013382163],[-0.013264392],[-0.012985241],[-0.012600721]],"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.26434997],[-0.79208225],[-0.20664789],[0.013472025],[-0.39775062],[-0.83568007],[0.18677552]],"dense_1_W":[[0.34441796,-0.52539915,0.011351737,-0.0031063606,0.538754,-0.41478962,0.5309099,-0.49093226,-0.122121654,0.17211112,0.031722955,-0.049942363,-0.45295808,0.44230676,0.2298436,0.07178071,-0.19289836,0.0064287023],[1.1373345,0.30843458,0.06299667,0.29950574,-0.0838057,0.4998327,-0.2954441,0.07530557,-0.09903502,-0.3212128,0.0950906,-0.30354694,0.05237616,0.38115606,-0.29169688,-0.02946208,-0.23857956,0.18285783],[0.08874039,-0.36663172,-0.0022011884,0.042667914,0.25671524,-0.9374695,0.76006675,-0.13235554,0.3273898,-0.3046668,0.061351378,-0.16451104,-0.04971849,0.28689685,-0.10612716,0.091517314,-0.094520494,0.022685707],[0.060418982,-0.1157775,0.0033044387,-0.53267866,-0.3576781,1.0214648,-0.7689731,-0.088864565,0.5304823,0.36398104,-0.32102284,0.25985885,0.12955877,0.118082896,-0.41932943,0.5984563,-0.34898463,0.16819601],[-0.35258323,-0.2083451,0.0007432207,-0.19166562,0.53556216,-0.7179964,0.17767152,-0.19613978,0.014983063,0.1352932,-0.07252017,-0.049061526,-0.22725205,0.5097105,0.092519365,-0.052805327,-0.086677946,0.050957207],[1.1484965,-0.36967862,-0.059478328,-0.46070608,0.3855522,-0.77252835,0.12642105,0.28179643,0.06333251,0.08696457,0.012441664,-0.17870833,0.13207336,-0.3562681,0.39463803,0.7484561,0.21307406,-0.5399646],[-0.005871693,1.2971369,4.596029,-0.7689503,-0.85900676,0.2098196,-0.21946974,0.10207684,0.7080346,0.19166191,-1.1770563,0.31363365,0.35723364,0.23915814,0.012657947,-0.18623129,-0.03445843,-0.17965348]],"activation":"σ"},{"dense_2_W":[[-0.3623736,-0.41845292,0.15554701,0.52873987,-0.33623168,-0.109475665,0.1650474],[0.20129873,-0.17509207,0.6367557,-0.022217795,0.6520106,-0.06378363,0.37632793],[-0.02613163,0.6422942,-0.08672158,-0.018176718,-0.5885163,-0.41947407,-0.44015065],[0.06876831,0.2672296,-0.10011656,0.8271233,-0.14820686,-0.08494413,0.034133013],[0.5603243,-0.41052374,0.6464844,-0.7759632,0.13104425,0.6245838,-0.25918558],[0.24931118,-0.72889996,0.60138255,-0.7174911,0.44678172,-0.37861496,-0.6592254],[-0.2587339,0.14566004,-0.7437367,0.41833475,0.11803848,-0.119959645,0.13896635],[0.030275445,0.44386005,0.03581493,0.3722496,-0.7559753,-0.24718514,-0.5880272],[-0.16906022,0.14654645,-0.18917269,-0.5889206,0.30467245,-0.17858168,-0.2796732],[-0.7495855,-0.4666009,-0.668737,0.4311893,-0.3495553,-0.7319314,0.51790726],[-0.89682776,-0.011368982,-0.13440222,-0.12547427,-0.5925041,-0.63063765,0.40521654],[0.90010816,-0.44593993,0.4698638,-0.30274037,0.24248902,0.9315232,-0.4489031],[0.11560195,-0.4628338,-0.63196105,-0.2325408,0.10829967,0.08619985,-0.3691465]],"activation":"σ","dense_2_b":[[-0.09398416],[-0.16811661],[0.0034526016],[0.02302207],[-0.02017339],[-0.18555853],[0.007355943],[-0.012509794],[-0.15630287],[-0.059829053],[-0.22280535],[-0.104731545],[-0.05920679]]},{"dense_3_W":[[0.27258593,0.23565869,-0.3472996,-0.4951552,0.5607892,0.62477237,-0.26927564,-0.54649544,0.28152058,-0.48925486,-0.0038740942,0.41033503,0.5219135],[-0.044915594,-0.13625428,0.14908999,0.50632745,-0.36696005,0.5478251,-0.1786471,-0.3696246,-0.67396617,-0.04566228,-0.30607444,0.009878186,-0.5257712],[-0.45755082,0.5034456,-0.3199554,-0.06326751,0.6669257,0.49097896,-0.5270685,-0.15877146,0.44582334,-0.7103173,-0.2027269,0.0686523,-0.49046502]],"activation":"identity","dense_3_b":[[-0.062416617],[-0.03785598],[-0.053617734]]},{"dense_4_W":[[-1.1007901,-0.35901657,-0.90650785]],"dense_4_b":[[0.058452934]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48400x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48400x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..b84d1cc4f8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020 b'8965B48400x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.76261],[0.93215835],[0.425047],[0.03367151],[0.93245465],[0.93255615],[0.9317443],[0.9169954],[0.90578634],[0.890775],[0.87333876],[0.033522148],[0.033568572],[0.03361294],[0.03370465],[0.03366217],[0.033505887],[0.033300173]],"model_test_loss":0.009005936793982983,"input_size":18,"current_date_and_time":"2023-08-12_07-32-45","input_mean":[[23.330957],[0.031854257],[-0.016394153],[-0.010512169],[0.038015034],[0.037232615],[0.035574514],[0.029611548],[0.02562595],[0.019023875],[0.017404461],[-0.0105256],[-0.010525036],[-0.0105359815],[-0.010630796],[-0.010722013],[-0.010881347],[-0.011070561]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-5.0810957],[0.1603531],[-0.049640577],[5.2707887],[0.67574877],[0.1516555],[0.15765585]],"dense_1_W":[[-2.0682428,0.13633108,0.13491328,-0.36039838,0.43495807,0.68475527,-1.6714412,0.47828165,0.109744266,-0.026151523,0.72647053,-0.47452134,0.06982296,0.3297403,0.17760237,0.58767045,-0.21541646,-0.16653578],[-0.008568287,0.12206914,0.23071772,-0.102156624,-0.500583,1.8274449,-1.554223,0.340697,0.109655045,-0.18670748,-0.23404415,0.2656916,0.5948071,-0.46532926,-0.4009976,-0.39237484,-0.07123574,-0.010524451],[-0.0031924327,-0.62425506,-0.046601616,0.2168617,0.50812894,-1.6562872,0.9460569,0.13316472,-0.15056206,-0.15252529,0.14638653,-0.41414198,0.07276244,0.22266257,-0.15308774,-0.034698598,0.16347538,-0.050810855],[2.125994,0.39522022,0.1382072,-0.10945463,0.44430417,0.8159377,-2.1067505,0.37659898,0.11375099,0.35729685,0.5010697,-0.08696807,-0.36882088,0.1198089,0.24507992,0.24288763,0.26632097,-0.35650986],[-0.029398045,-0.75224733,0.8366512,-0.48501256,0.4163101,0.41848388,1.2642128,-0.53183347,-0.69976854,-0.6898771,-0.12976366,0.07133254,-0.26144692,0.38537222,-0.32685757,-0.23447362,-0.6981122,-1.0000134],[0.00065578264,0.609174,0.0046034064,-0.31727758,-0.15922506,0.9975659,-0.3816561,0.1362802,-0.30854115,0.085538454,0.09641526,0.15830934,0.38728058,-0.4841558,-0.4591731,-0.06406144,0.047263924,0.30575022],[0.0008388964,-1.4820985,-3.707669,0.069603644,3.1635418,-0.36718917,-0.4799769,-0.13187854,-2.1920686,0.1677239,0.9062365,-1.1247116,-0.34561667,0.36416775,0.48867264,0.6879564,0.30840775,-0.39429164]],"activation":"σ"},{"dense_2_W":[[0.2973958,0.08332646,-0.3467805,0.23699734,-0.5854178,-0.129308,-0.43418685],[-0.36580157,-0.3235827,-0.016993066,0.10935744,-0.049958985,-0.5979773,0.03689173],[-0.28405172,-0.45268708,0.4789435,-0.29643363,-0.24837038,0.3182004,0.115557075],[0.15464418,0.46542335,-1.0709205,1.0785366,-0.14720912,0.6205811,-0.8320102],[-0.10603755,-0.22647086,0.28111154,-0.55486935,0.17641152,-0.49721366,-0.09488447],[0.62766623,-0.20216012,-1.2113202,0.7469767,0.067126594,0.47500092,-0.15576144],[-0.49403727,-0.49650237,0.6379596,-0.0013690102,0.39851728,-0.38198105,0.34440374],[-0.35230166,-0.22415853,0.4071291,-0.5434958,0.010856588,-0.33139396,-0.07433657],[0.5740357,-0.03681304,-0.8333273,-0.15300135,-0.014365716,-0.36107722,-0.29574242],[1.0023674,0.22067322,-1.0635573,0.4620926,-0.38083276,0.2977076,-0.30534083],[1.5357183,0.21400538,-1.2476741,-0.5011329,0.20616063,0.50831836,-0.44240168],[-0.22830233,-0.047964964,0.6109007,-0.2337184,-0.4955921,0.11622925,-0.103081025],[0.22968316,0.37905967,-0.1994602,0.5001487,-0.16496213,-0.06584811,-0.18063226]],"activation":"σ","dense_2_b":[[-0.009041046],[-0.2510398],[-0.019130033],[-0.015723245],[0.114224665],[-0.25378084],[0.049713876],[0.14150867],[-0.29484767],[-0.20610979],[-0.49759024],[0.01332179],[-0.057279114]]},{"dense_3_W":[[-0.4027402,-0.60708517,-0.5284704,0.5859432,-0.6416008,0.10952159,-0.1184989,0.03421147,-0.29945162,-0.020218438,0.061756372,-0.5574928,0.31008488],[0.033894606,-0.41223776,0.17423983,0.18949471,0.5258869,-0.33833903,0.17779568,0.4694829,-0.47503108,-0.70289963,-0.48349223,0.21150771,-0.30218485],[0.10131618,0.10130477,-0.11519296,-0.5324584,0.28956762,-0.24111281,0.6044179,0.20313828,0.15558045,-0.2360581,0.09277952,-0.17545496,-0.5429789]],"activation":"identity","dense_3_b":[[-0.033029158],[0.045226328],[0.04225117]]},{"dense_4_W":[[0.6470691,-0.9522123,-0.9472077]],"dense_4_b":[[-0.041427232]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020.json new file mode 100755 index 0000000000..ed522a3754 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER 2020.json @@ -0,0 +1 @@ +{"input_std":[[9.797211],[1.4073237],[0.45344877],[0.04491299],[1.3987288],[1.4015741],[1.4033431],[1.3713129],[1.3358603],[1.2864146],[1.2356204],[0.044730604],[0.04476502],[0.04479927],[0.044761524],[0.04463559],[0.04441582],[0.04400734]],"model_test_loss":0.01496149692684412,"input_size":18,"current_date_and_time":"2023-08-12_05-44-01","input_mean":[[23.06539],[0.022372128],[-0.018723505],[-0.0037287462],[0.025849355],[0.024471685],[0.022525933],[0.017384581],[0.017084958],[0.015315184],[0.014839374],[-0.0038067892],[-0.0038066467],[-0.0038155483],[-0.0038835425],[-0.003969397],[-0.004126497],[-0.004283849]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-5.0399375],[0.66340405],[-0.08379381],[-0.1257602],[0.30399242],[-4.494502],[0.27936158]],"dense_1_W":[[-2.5363288,-0.57757294,0.0027555253,-0.69334877,0.13913916,0.38319087,0.95406264,-0.95457584,-0.033972528,-0.21526104,-0.67382884,0.1485172,0.4771976,0.18877178,-0.16290484,-0.016111093,-0.40084124,0.40098542],[-0.10251014,0.90069646,0.0015895946,-0.29654703,-0.49717396,1.268891,-0.8686852,0.106027365,-0.08154456,0.054320164,-0.0015901169,0.28086966,0.37089986,-0.39758688,0.089162976,-0.20091611,-0.019581586,0.1379176],[-0.0021139083,-0.5681109,0.0045096576,0.37979248,0.21457663,-1.1264517,1.0069007,-0.28261423,-0.2431941,0.19875054,0.0066458527,0.109028324,-0.3649011,0.09212255,0.49301502,-0.059227098,0.07381374,-0.17722736],[0.008648403,0.87794864,3.1009352,0.21482791,-0.8084606,0.18275541,0.3635672,-0.08733222,0.9668826,0.25053218,-1.0132065,0.3902859,0.59336084,0.04232025,-1.0975246,-0.20822704,-0.42172226,0.30119237],[-0.1216848,-0.9771412,-0.017562695,0.23040251,0.120802276,-0.26227885,0.70101273,-0.29537383,0.036361422,-0.3592869,0.32375747,-0.17707966,-0.4159238,0.05444697,0.37961268,0.26376435,-0.019785738,-0.23029959],[-2.2624679,0.24792579,-0.003632164,0.46374714,-0.43607607,0.033397473,-0.29120448,0.24237801,0.22114673,0.041112114,0.76203763,0.109556496,-0.29734334,-0.6331814,0.29980987,0.17154595,0.35740486,-0.4158375],[-0.034173463,-0.5125805,0.011909321,-0.24246725,-0.007852726,-0.9268454,0.438557,-0.2839944,0.24563706,0.2190338,-0.2901443,-0.34727386,0.33995688,0.16540235,0.28732327,-0.35981894,0.041257735,0.058045775]],"activation":"σ"},{"dense_2_W":[[-0.1993436,0.701577,-0.41372073,-0.09332039,-0.36059406,0.77733815,-0.833145],[-1.5271622,1.5048598,-0.77010024,0.07560495,-0.71047103,1.3006324,-0.5117385],[0.46061924,-0.008243548,-0.85892344,1.2595167,-0.948924,2.2698135,-1.942301],[0.061940253,-0.31634828,0.0798406,0.34763846,0.021756,-0.46359214,-0.07392033],[-0.2696488,-0.40507072,0.19450307,-0.6713937,0.40933418,0.14875686,-0.03199306],[0.014884351,-0.18024068,0.36034963,0.07164113,0.0156314,0.371164,-0.27950096],[-1.5902536,1.8198748,-0.7683764,1.3738456,-0.092035376,-0.3063631,-0.5351149],[-0.1981007,-0.3395727,0.57789916,0.21266969,-0.19264036,0.3517743,0.2045635],[-0.25479048,-0.42085296,0.2920033,0.060998514,0.1293151,0.31961867,-0.46009016],[0.3049363,-0.22684415,-0.034080368,0.0790401,0.61918515,0.29823962,0.09349991],[-0.4494046,0.31757298,-0.4080604,0.20879479,-0.44578844,0.58260244,-0.096968025],[-0.21508828,0.32704902,-0.51432735,0.7326623,-0.6550922,1.1410198,-0.62732315],[0.12526976,-0.09556271,0.63842154,-0.61208946,0.3558117,-0.23578581,0.62607837]],"activation":"σ","dense_2_b":[[-0.017869094],[0.36151597],[-0.1958973],[-0.023889307],[-0.0017105008],[-0.03132981],[0.2619224],[-0.013072357],[-0.013901752],[0.023021301],[-0.13436924],[-0.46172282],[-0.04681776]]},{"dense_3_W":[[-0.052120414,0.029567413,-0.66409993,0.094393685,0.31642377,0.10608072,-0.3086923,-0.040440086,0.03381829,0.66097414,-0.4579581,-0.51134187,0.57541263],[0.5851281,-0.17931658,-0.4185391,0.1195394,0.36722615,-0.21088938,-0.32132354,0.42602026,-0.47596413,-0.3402495,-0.26624802,-0.5764113,0.0354186],[-0.6289345,-0.8272402,-0.0011975961,0.18056613,0.063398294,-0.034670547,-0.5280208,0.43154517,0.0023103878,0.2373611,-0.08228515,0.107933424,-0.03365145]],"activation":"identity","dense_3_b":[[0.053374246],[-0.03893916],[0.06737692]]},{"dense_4_W":[[-1.0474417,0.35237366,-0.9325995]],"dense_4_b":[[-0.057818808]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2018 b'8965B48160x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2018 b'8965B48160x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..e8006d9259 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2018 b'8965B48160x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.447082],[1.3057796],[0.54874927],[0.045618646],[1.3064655],[1.3057723],[1.3055998],[1.2616607],[1.2238507],[1.1785189],[1.1370367],[0.045534577],[0.04553703],[0.04553903],[0.045388177],[0.045190737],[0.044918988],[0.04458369]],"model_test_loss":0.01316243689507246,"input_size":18,"current_date_and_time":"2023-08-12_08-27-45","input_mean":[[23.570164],[0.036853246],[-0.016496139],[-0.0010369287],[0.042531505],[0.041598342],[0.04004992],[0.035041444],[0.029833477],[0.026067143],[0.021290474],[-0.0010061035],[-0.0009948352],[-0.0009900935],[-0.0009686471],[-0.0009951665],[-0.001064114],[-0.0012318792]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-5.0845885],[0.1004176],[0.00013673597],[5.0672097],[0.16392848],[-0.0016507725],[0.03163203]],"dense_1_W":[[-2.194229,-0.9903979,-0.08080573,0.6365177,-0.016596766,-0.57292145,0.71629894,-0.13917753,0.10558334,0.048379973,-0.37905106,-0.37705103,0.008995534,0.26333934,-0.5870924,-0.014787129,-0.07076682,0.115287304],[-0.017660985,-1.7817364,-7.0660744,0.32349348,0.58495885,0.08818791,0.327425,-0.26258895,-1.0716436,-0.24204725,1.3435555,-0.4196861,-0.3284182,-0.5121312,0.5085909,0.29486054,0.47518936,-0.09737066],[-0.0020460926,0.5839157,-0.4102708,0.33361316,-0.19995423,-1.8766894,1.8676817,-0.6156362,-0.20390484,0.05773844,0.5775369,-0.69629824,-0.48964554,0.76413906,0.17794818,0.013914604,0.26574284,-0.35397956],[2.238539,-1.285662,-0.077533774,0.45735472,-0.15934312,-0.3347021,0.7057036,0.13443239,0.046269502,0.031148197,-0.40138546,-0.3106728,-0.22145422,0.705411,-0.5908254,-0.1697941,-0.099797,0.21151316],[0.0072099357,-1.0319359,-5.8044977,-0.012008662,2.721464,0.9949136,2.1362736,0.755109,-2.9483802,-2.687557,-0.21047898,-0.6913134,-0.46375927,-0.08410903,1.2371743,0.34849486,0.1389388,-0.11194528],[-0.001468309,0.71179956,-0.016407752,0.2380162,-0.59478456,1.7276148,-0.7567721,-0.15031393,-0.0544795,0.07924978,0.074758366,0.3384667,0.1260156,-0.73387,-0.12542778,0.035354953,-0.08498558,0.11839043],[-0.0067242286,0.7752038,-0.015802715,-0.2522099,0.18704206,1.0989213,-0.8221326,-0.1619869,0.36667046,-0.08953081,0.07729341,0.3080005,0.32241634,-0.6751567,-0.08914714,-0.25339732,0.11973354,-0.11458613]],"activation":"σ"},{"dense_2_W":[[0.48777774,0.16780007,0.506049,0.06149719,0.02641481,-0.15557353,-0.47309208],[-0.033767972,-0.22800188,0.3801882,-0.4038235,-0.018416025,0.48671988,-0.1726016],[1.3997426,-0.2836853,0.50399095,0.7228087,0.17250279,-1.1006094,-1.036102],[1.5827407,-0.52164584,0.44014573,1.500202,0.24160044,-1.3031888,-1.155962],[0.9090004,-0.22377129,-0.16544203,0.5805136,0.10938864,-1.071583,-0.36718455],[0.20949104,-0.15260668,-0.35395786,0.16198182,-0.26443386,0.1544654,0.30052176],[0.35954893,0.04215935,0.6288832,0.16029716,0.19912098,-1.1470475,-0.41342846],[-0.27078894,-0.22278617,0.28234375,0.17605774,0.060802832,0.1927992,-0.18586269],[-0.4729232,0.128256,-0.29198325,-0.63878536,0.11258722,0.7476101,0.41813225],[-0.38154852,-0.3791316,-0.5129751,0.013876141,0.11724782,0.6680124,0.40538806],[-0.31103176,-0.5047606,0.33748698,0.095529206,0.18596448,0.45894697,0.30854413],[0.11049385,0.3211236,0.30543202,0.6428709,0.14853697,-0.68060184,-0.22545667],[0.3577858,-0.05270775,-0.24674627,-0.62481797,-0.5663065,0.27451596,-0.25037414]],"activation":"σ","dense_2_b":[[-0.13820776],[-0.044455525],[-0.25503334],[-0.22968425],[-0.19087854],[-0.011678218],[-0.18331416],[0.006042763],[-0.007903232],[-0.012231933],[-0.008202675],[-0.1534127],[0.04731731]]},{"dense_3_W":[[-0.10723448,-0.34210286,-0.03438066,0.37535432,-0.0108004445,-0.6269137,-0.068967775,0.31058553,-0.65623224,-0.31572104,-0.39706936,0.3712482,-0.41853353],[-0.5804139,-0.04486996,-0.049920645,0.46066716,0.3930726,-0.25964186,-0.04363731,0.49404967,-0.013849256,0.4068667,0.38286507,-0.24872099,0.65286624],[0.57707745,0.17859071,0.51623523,0.37261355,0.4789657,-0.0021774643,0.6602461,-0.38525575,-0.35309088,-0.00086821883,-0.062653214,0.57291704,0.00911787]],"activation":"identity","dense_3_b":[[-0.029123915],[0.023471655],[-0.04527022]]},{"dense_4_W":[[-1.0457256,0.43828797,-1.1001852]],"dense_4_b":[[0.033784293]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2018.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2018.json new file mode 100755 index 0000000000..52a019b0b1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.446532],[1.305604],[0.54480565],[0.045578297],[1.3061355],[1.3057326],[1.3058693],[1.2597163],[1.2224401],[1.1767526],[1.1361469],[0.045510642],[0.04551679],[0.04551409],[0.045335952],[0.04515042],[0.04486992],[0.044565506]],"model_test_loss":0.013752324506640434,"input_size":18,"current_date_and_time":"2023-08-12_08-00-18","input_mean":[[23.569853],[0.03672725],[-0.020106794],[-0.0010078558],[0.04061277],[0.039911255],[0.03890138],[0.03328521],[0.027936308],[0.023301033],[0.021146066],[-0.0010234776],[-0.0010079038],[-0.000997834],[-0.0009388888],[-0.001006094],[-0.00110449],[-0.0012551269]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.775717],[-1.5074123],[0.03396842],[-0.21671481],[0.0462703],[0.8037427],[-0.052228786]],"dense_1_W":[[0.9219134,-0.5559626,-0.21603523,0.24129556,0.10209199,-1.0011351,0.5424733,-0.5449639,0.050155614,0.22614123,-0.004761036,-0.55282843,0.41325715,0.0022247569,0.044411074,-0.09423209,-0.10117545,0.04368109],[-0.7283206,-0.35355893,-0.16045861,0.25857133,-0.24542835,-0.62773067,0.48699424,-0.3978315,0.16402064,0.11644162,-0.05423804,-0.15727901,-0.1769678,0.16871296,-0.017148495,-0.1356121,0.12889557,-0.06923812],[0.031175813,1.3461481,-0.05207552,-0.13424256,0.15673165,1.1298523,-0.54824036,-0.16689743,0.049443748,-0.016901892,0.20333812,0.5619182,0.006826116,-0.6597064,-0.026180983,0.22729635,0.2584868,-0.2113748],[0.5795566,0.67358404,-6.977969,0.058563557,-0.29574206,0.5823302,-0.24030899,-0.2995381,-0.26924467,-0.081547186,-0.5541594,0.16588,0.15840445,-0.7864141,0.40154028,-0.2373318,-0.24145977,0.61007404],[-0.009848546,0.30045143,0.029503373,-0.27351668,0.11376449,1.6821749,-1.2038943,-0.049892105,0.37281117,0.18173723,-0.16429949,0.35660785,0.22832245,-0.4506436,-0.23757456,-0.32164904,-0.053110283,0.12267799],[1.3934647,0.36499634,0.26312694,-0.432766,0.75987923,-0.74437225,0.8091179,0.6067964,-0.2472178,0.10360785,-0.13620545,-0.34767386,-0.16454501,0.5357987,0.62150854,-0.05545808,0.010435748,-0.17039369],[0.20956095,-1.419724,-6.043722,0.29923502,0.8952572,0.09468286,1.1705585,0.08298218,-0.94001234,-0.7296266,0.37193263,-0.7382738,-0.4084395,0.52171934,0.029654104,0.22694133,0.35117772,-0.11566992]],"activation":"σ"},{"dense_2_W":[[0.93649673,0.50793236,-0.6459632,0.14732611,-0.31413737,0.24595617,0.5410845],[-0.147114,-0.36361343,-0.09407195,0.02937175,0.22865185,0.1751995,-0.9527202],[-0.7733485,0.011140345,0.23013693,-0.34375155,-0.19983934,-1.170109,-0.9463034],[-0.27665538,-0.39627838,0.51849717,-0.1559539,0.023949604,-0.90093136,-0.9847508],[0.10923114,1.0428375,0.10153842,-0.20655255,-0.99642473,0.0155226635,0.39040205],[-0.7608344,-0.741681,0.61714303,0.29961175,0.40194076,-0.6485538,-0.37572783],[0.06267869,1.0860785,-0.8247702,-0.24703546,-0.5712135,0.2198229,0.5468893],[0.9322532,0.8754985,-0.3895632,-0.72363174,-1.1679527,0.24966148,0.2579374],[0.1763633,-0.5714968,0.6868805,-0.06384768,0.5371141,0.2615531,-0.46435195],[-0.02702668,1.2335556,-0.27594045,-0.05924885,-0.87853885,0.3753951,-0.05063993],[-0.6255276,-0.8581678,0.021257112,0.43066528,0.77454144,-0.020291625,-0.6967373],[0.83754885,0.4857429,-0.050797034,-0.6029118,-1.0627534,0.080022566,0.92563975],[-0.09895578,-1.0526363,0.6905131,0.26684704,0.83103323,-0.55075085,-0.45172825]],"activation":"σ","dense_2_b":[[-0.19245008],[-0.3300925],[-0.017551435],[0.0553758],[-0.2694437],[-0.05464509],[-0.6291996],[-0.030519193],[0.07915488],[-0.22345226],[0.13039747],[-0.10993277],[0.18852183]]},{"dense_3_W":[[0.11073112,-0.533201,0.62755555,0.30198997,0.19470435,-0.51550233,0.43695763,-0.607277,0.5566251,-0.6911583,-0.36105812,0.12090485,0.41196087],[-0.35777438,0.18036212,0.36846223,0.24149348,-0.47303873,0.40955707,-0.50227696,-0.6546859,0.24461997,-0.3516048,0.58416516,-0.115509026,0.5594079],[-0.31891224,0.0019296159,0.70591456,0.27569255,-0.6370788,0.18638003,-0.031307057,-0.28519005,0.49748984,-0.3436976,0.7751193,-0.62876755,0.75629675]],"activation":"identity","dense_3_b":[[0.00038296377],[0.055723432],[0.018070834]]},{"dense_4_W":[[0.011774748,0.8155508,0.383835]],"dense_4_b":[[0.05629205]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48241x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48241x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..35099b6ea8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48241x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.00827],[1.1619883],[0.4412975],[0.04544336],[1.1478776],[1.1518719],[1.1561376],[1.1453321],[1.1250126],[1.0930616],[1.0567293],[0.045202393],[0.04525232],[0.045298003],[0.045285065],[0.045152135],[0.044884894],[0.044592474]],"model_test_loss":0.009325500577688217,"input_size":18,"current_date_and_time":"2023-08-12_09-31-17","input_mean":[[22.791122],[-0.042878833],[-0.011877181],[-0.014597569],[-0.035545684],[-0.03717921],[-0.03862496],[-0.038736913],[-0.03762687],[-0.03448324],[-0.028882926],[-0.014555443],[-0.014538738],[-0.014526647],[-0.014420466],[-0.014331951],[-0.014239206],[-0.014240208]],"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.11822516],[0.0008828471],[-1.0862342],[-0.18366772],[0.385106],[0.7609392],[-1.4512328]],"dense_1_W":[[1.1565036,-0.47999045,-0.64334595,-0.046866857,-0.2571887,0.5431218,-0.90600425,-0.015227577,0.6074154,0.2966983,-0.3288622,0.35351965,-0.105130196,0.014889756,-0.2885607,0.062367395,-0.0416696,0.19297217],[0.00013613896,1.1544919,5.8863997,-0.063363396,-0.9809145,0.28564644,0.35597575,0.155261,0.3324481,0.33633226,-1.2474326,0.6385195,-0.11791013,-0.054307703,-0.67459035,-0.1379244,0.102973334,0.19569656],[-0.06969047,0.12243385,-0.0019499671,0.39603442,0.30784214,0.31830847,-0.15033488,0.33314312,0.054290332,-0.028862095,0.027961347,0.2477672,-0.12936744,-0.09928604,-0.74599934,0.26326394,-0.22953305,0.12559183],[-0.02875901,-0.66695607,-0.005256191,-0.06915698,0.43517417,-1.1354989,0.80874676,0.1404699,-0.16011457,-0.005997933,0.033535052,-0.2592826,-0.2594959,0.2704396,0.34614062,0.2440052,0.0562286,-0.21780711],[0.9463859,0.18438934,-0.5292463,0.14852741,0.32597074,-1.031986,0.22700587,-0.24131732,0.20941843,-0.1038609,0.082350604,0.020917263,-0.022982072,-0.06515789,0.07043909,-0.07168746,-0.05299607,0.10198203],[0.0038015677,0.46421862,-0.011183879,-0.101370975,-0.031247087,0.8092469,-0.35475132,0.18806289,-0.1415783,-0.07569947,0.14818926,0.6507605,-0.0435432,-0.57430553,-0.28939062,0.19110921,0.07659029,-0.08136513],[-0.77969193,0.41833523,-0.5825853,0.06571391,-0.036265094,-0.7098911,0.27432096,-0.21149854,-0.14941117,-0.10727135,0.20307949,0.2624021,-0.30541962,0.34553188,-0.38883,-0.16372426,0.28227317,0.046450898]],"activation":"σ"},{"dense_2_W":[[-0.1928296,0.32115498,0.20930864,0.5611469,0.19011536,-0.26645315,-0.17603545],[0.166902,-0.16892958,-0.6638914,0.15825053,0.21120141,-0.748163,0.474334],[-0.1116566,-0.043712437,-0.25810665,0.7776559,0.30960482,0.045773234,0.3270671],[-0.10762828,-0.5864748,-0.28898096,0.15144639,-0.4097048,-0.24713844,0.018743742],[0.6269138,0.2670387,0.51526284,-0.38287458,-0.12963958,0.5141082,-0.16934894],[0.60643613,0.5065733,0.51206255,-0.8444096,-0.23755147,0.9865407,-0.66474754],[0.39914343,-0.31481522,-0.15519524,0.9308352,0.08094447,-0.563002,-0.39392495],[-0.62913185,0.13864003,-0.4409571,1.048762,0.6268857,-0.20228775,-0.062061056],[0.5582918,-0.37558815,0.8273307,-1.1066164,-0.3901795,0.70115936,-0.42085156],[-0.7219747,1.0324795,0.5925977,-0.7950196,-1.1894366,-0.35266805,-0.08333824],[0.17714527,0.035280515,-0.5560802,0.25969428,0.37214068,-0.70087725,-0.007387615],[0.45798004,-0.23500519,0.7236357,-0.7572892,-0.77434045,0.5295288,0.0067519485],[0.12378485,-0.26742935,-0.19959643,0.79587483,0.08676472,0.19069159,0.17077966]],"activation":"σ","dense_2_b":[[-0.023296025],[-0.062371153],[-0.08753547],[-0.012299448],[-0.12436653],[0.12464757],[0.051917683],[-0.044311624],[-0.08723197],[-0.22925796],[-0.037951283],[-0.031904783],[-0.029043172]]},{"dense_3_W":[[0.266644,-0.09708873,0.36481127,-0.3777422,0.34096837,-0.02927695,-0.01537932,-0.24403723,0.71203685,0.10868033,0.3864008,0.357262,-0.061952867],[0.21862133,0.09851822,0.21582417,0.22255906,-0.43100807,-0.68686426,0.00410916,0.4358678,-0.2271849,-0.73627913,0.66998297,0.072033614,0.08977202],[0.44470266,0.32145885,0.62044615,0.21872145,-0.17952862,-0.5809358,0.5550113,0.033751376,-0.20690925,0.011282066,0.040129244,-0.62126046,0.37573385]],"activation":"identity","dense_3_b":[[-0.061297435],[0.035920873],[0.030181145]]},{"dense_4_W":[[0.4694328,-0.89785147,-0.7038385]],"dense_4_b":[[-0.036924034]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48310x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48310x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..e15c8a24d9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48310x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.133618],[1.4129014],[0.44969133],[0.045696877],[1.4049444],[1.4081829],[1.4101628],[1.3818637],[1.3492402],[1.2996615],[1.2511544],[0.04564733],[0.04565076],[0.045647893],[0.04553961],[0.04542456],[0.045219943],[0.0448686]],"model_test_loss":0.014148019254207611,"input_size":18,"current_date_and_time":"2023-08-12_10-02-27","input_mean":[[22.846207],[-0.028825762],[0.0069386563],[-0.011931484],[-0.029900458],[-0.030026564],[-0.029956907],[-0.025415199],[-0.02073705],[-0.016202599],[-0.012826078],[-0.012012862],[-0.011981135],[-0.011950831],[-0.011894881],[-0.011909395],[-0.011980199],[-0.012003033]],"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.045462497],[0.14482749],[-3.1937203],[0.41232848],[-0.036116436],[-0.10669243],[3.1771445]],"dense_1_W":[[0.04209759,-0.123200886,-0.001966771,-0.27350724,-0.07637217,-0.69638944,0.49670324,-0.10970925,0.17391703,-0.020320209,-0.11798665,-0.32608816,-0.15994923,0.74159515,0.16622286,-0.16900371,-0.11755795,0.12067652],[0.12397108,-0.8622103,0.002287507,0.5233263,0.29362643,-0.90254813,0.6244419,0.09886855,-0.20115684,-0.068305194,0.09150868,-0.040079072,-0.5887415,0.03467633,0.37852713,0.04821548,0.33913377,-0.32878298],[-1.5204463,-0.30083042,0.54742867,-0.22839276,-0.2593333,0.5200578,-0.22732674,0.35200244,0.0005918363,-0.14585528,0.47478247,0.34271586,0.18018198,-0.5389027,0.31345156,0.32557848,-0.10517697,-0.24773833],[0.16338956,0.7465661,0.00091303553,-0.30629274,-0.83907,1.2726458,-0.46392232,0.28630704,0.009157783,-0.092671104,-0.027732085,0.6079292,0.34104618,-0.639812,-0.3557384,-0.16809613,0.056947865,0.15010986],[0.0016282196,-0.808354,-3.8552349,-0.28365737,0.5438757,0.06829288,-0.19340357,0.0031712118,-1.2518381,-0.3716958,1.4632245,-0.3830043,-0.08256899,0.41362843,0.4654074,0.24454728,-0.060357146,-0.29063493],[0.00881861,1.5529372,-0.004645296,0.101736404,-0.44716865,1.1123074,-0.11059584,-0.23869607,-0.19627295,-0.16191976,0.27920842,0.5280347,0.07986667,-0.2998149,-0.13689749,-0.061755475,0.26918095,-0.17861305],[1.5262027,-0.7209147,0.54510105,-0.41295,0.24966663,1.5925447,-1.7505642,0.4582838,0.21614361,-0.11827627,0.48279446,0.7191378,-0.5658482,-0.5843556,1.2161899,0.0055931257,0.16656737,-0.5068038]],"activation":"σ"},{"dense_2_W":[[-0.93619925,-1.0465239,0.51262397,0.74086666,0.21353468,0.3476233,0.32381067],[-0.51265305,-0.87474597,0.46417361,-0.24346405,-0.3276334,0.5293372,0.051842663],[0.53608036,0.56876564,-0.22863568,-0.38303185,0.27319765,0.33705932,-0.7360473],[-0.7518486,-0.65000415,0.35375157,0.28509223,-0.56357265,0.478604,0.03561653],[0.029013865,0.25404042,0.57304466,-1.2749768,0.95642287,-0.6889415,-1.2362365],[0.39669678,0.4147544,-0.33926824,-0.935757,0.07840821,0.26636747,-0.3079712],[0.596397,0.20710751,0.1445996,0.047088236,-0.58025897,0.08174204,-0.08478866],[0.6787158,0.85764533,-0.28679985,-0.9344713,0.11183712,-0.4111803,-0.7435469],[-0.032755844,-0.41277444,0.3462792,0.65885925,-0.33081263,0.115080066,-0.17707695],[-0.5118069,-1.2389166,0.28025037,0.68769765,0.15658064,0.116785616,0.18789898],[-0.1941865,-0.9085792,-0.015243897,-0.11461906,-0.61263376,-0.6787525,0.1516513],[-0.8660754,-1.2627017,1.1963525,0.4615613,-0.7016441,0.5529118,-0.5558919],[-0.25683263,0.2894195,0.38483003,-0.59003097,0.4263322,-0.7981855,-0.42868915]],"activation":"σ","dense_2_b":[[-0.26972106],[-0.23031023],[-0.12965338],[-0.041467585],[-0.15502211],[-0.23721904],[-0.07618676],[0.024510087],[-0.09441283],[-0.18249302],[-0.22564216],[-0.23934019],[-0.07737953]]},{"dense_3_W":[[0.3971231,0.28900996,0.1904874,-0.00935186,-0.193967,-0.02954578,0.06900154,-0.5145334,0.12633824,0.21880715,0.21613063,0.60171586,-0.64756685],[0.0129291145,-0.32070932,0.5608509,0.21185556,-0.22626269,-0.27636886,0.08561043,-0.31846905,-0.5734745,-0.21031462,0.1820749,0.28639615,0.4885934],[-0.12727283,0.26172706,0.64191544,-0.46281716,0.83532584,0.4892697,0.27129266,0.8000755,-0.53944695,-0.16300395,0.15426172,-0.75119865,-0.1486517]],"activation":"identity","dense_3_b":[[-0.022976112],[0.023158783],[0.0038195048]]},{"dense_4_W":[[1.077695,-0.06574526,-0.53436226]],"dense_4_b":[[-0.017774973]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48400x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48400x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c7cff36455 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020 b'8965B48400x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.644386],[1.1440065],[0.4692075],[0.044103775],[1.1367902],[1.1393884],[1.1417042],[1.1268477],[1.1062402],[1.0774581],[1.0459682],[0.04386147],[0.04393631],[0.044005807],[0.044103783],[0.04404187],[0.04392301],[0.04367208]],"model_test_loss":0.01073704194277525,"input_size":18,"current_date_and_time":"2023-08-12_10-27-46","input_mean":[[23.381014],[0.005975481],[-0.009992327],[-0.021032402],[0.008117326],[0.006850381],[0.0054110563],[0.0023832242],[0.002186634],[0.0035959708],[0.0033810092],[-0.021105358],[-0.02110145],[-0.021099575],[-0.021097427],[-0.021086434],[-0.02115564],[-0.02128101]],"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.834708],[-0.045707446],[-2.563987],[-0.117759325],[-0.91913813],[-0.03334596],[2.6613603]],"dense_1_W":[[0.16599746,0.7096867,-0.0038545108,-0.13340561,0.2588123,0.29712543,-0.2594707,-0.071150005,-0.07657077,-0.013201976,0.10662274,0.04428099,-0.1436738,0.16864574,-0.22712697,0.12658992,0.0954199,-0.12004688],[0.0042369105,0.18097177,-0.22014329,-0.30500078,-0.06370518,0.46832517,-0.90946174,0.6372478,0.25378084,-0.1069116,-0.37374678,0.3893671,0.45563832,-0.4595813,-0.2876199,0.33593014,-0.33627144,0.25168842],[-1.2126169,-0.16930301,-0.21450809,0.20024887,0.03201565,-1.0296049,1.4060705,-0.4294684,-0.0039082374,-0.42241377,0.012848083,0.123701885,0.14541772,-0.08624216,-0.18380383,-0.27203885,-0.19501837,0.2907863],[0.00063447293,1.2981268,4.2820415,-0.2594015,-1.2206693,-0.08402264,-0.313254,0.2832975,1.461314,0.50451976,-1.6309339,0.5598124,-0.14541756,0.23579545,-0.2860597,-0.611733,0.34472165,0.16626717],[0.14616013,-0.495636,0.0058109863,-0.01570958,0.58130336,-1.5504689,0.2670856,0.13132574,0.40939844,-0.057407007,-0.20243555,-0.2075857,-0.18856382,0.72101206,-0.06758915,-0.24377194,0.1419332,0.047459047],[-0.013590818,0.34024894,0.18479231,-0.019695252,-0.86625415,0.9378449,-0.7798978,0.22300671,0.40178698,-0.04151977,-0.13329166,0.45217785,0.09624605,0.084031366,-0.47827828,-0.55867606,-0.046922974,0.4538892],[1.2487265,-0.5044096,-0.22156143,0.51267344,-0.10274288,-0.51327384,1.1344092,-0.17422712,-0.058846287,-0.40755874,-0.003082627,-0.34271088,-0.2929998,0.434721,-0.30842355,-0.021555493,0.21910873,-0.1752489]],"activation":"σ"},{"dense_2_W":[[0.62964183,0.3170662,-0.7668863,0.4648944,-0.35633978,0.323501,0.36004624],[0.9853487,-0.27411574,0.34153345,0.1801431,-0.94035196,0.07904266,-1.1844826],[-0.16382942,-0.5559022,0.39087328,-0.6283743,0.41070727,0.020665707,0.8685],[0.34209964,0.5759347,-0.31890684,-0.2798852,0.13835523,0.6231073,-0.26864585],[-0.6228901,-0.4353858,0.24678996,-0.14232816,0.6366259,-0.22533265,0.60833997],[0.51754946,0.08759814,-0.1679395,0.5345081,-0.6778435,0.03203068,-0.94014156],[0.49474886,0.21732587,0.407077,-0.32371607,-0.2704814,-0.0010814304,0.13743709],[-0.0838043,-0.49292943,0.032049768,-0.05150428,1.0013574,-0.96868503,0.41634974],[-0.63949,-0.648591,1.0157802,-0.31856138,0.9662109,-1.015555,-0.22861005],[0.15993874,-0.013838849,-0.4022037,-0.28916073,-0.47161445,-0.6956427,-0.7160354],[-0.24090491,-0.26874304,0.749612,-0.4140518,0.6883246,-0.89394754,0.041574933],[-0.9463262,-0.55637103,1.0741757,-0.1182538,0.047610544,-1.0402383,-0.16455126],[-0.6265001,-0.59906393,0.09580579,0.026793769,0.63057166,-0.6412282,-0.3706451]],"activation":"σ","dense_2_b":[[0.07676112],[-0.111001514],[-0.008189968],[0.03080702],[-0.023322558],[-0.12537855],[0.041264],[-0.068600364],[-0.17696345],[-0.34724367],[-0.13291265],[-0.119294606],[-0.06824207]]},{"dense_3_W":[[0.30592474,0.65184015,-0.18676876,0.5202834,-0.47716483,0.49206358,0.1335472,-0.46779883,-0.45796365,-0.27737036,-0.61875904,-0.21409914,-0.4281805],[-0.22402486,0.36820185,0.5984844,-0.32377946,0.51082987,-0.5228782,-0.4425499,-0.22049034,-0.28360286,-0.63904005,0.57028985,0.27956602,0.54471344],[0.015972696,0.56076694,-0.4424602,0.50380963,0.1369866,-0.10628985,-0.03996058,0.51810396,-0.27963144,0.5446682,0.091093265,-0.067806154,0.017807629]],"activation":"identity","dense_3_b":[[0.08166017],[-0.07228911],[0.020593217]]},{"dense_4_W":[[1.2059438,-0.34201673,0.15371227]],"dense_4_b":[[0.075159274]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020.json b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020.json new file mode 100755 index 0000000000..8df2f4bb1d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA HIGHLANDER HYBRID 2020.json @@ -0,0 +1 @@ +{"input_std":[[9.164538],[1.4558752],[0.45833412],[0.04711418],[1.4456551],[1.4501203],[1.4533974],[1.4229606],[1.3864104],[1.3335255],[1.2820569],[0.047046598],[0.047047578],[0.047046028],[0.046939764],[0.046797764],[0.046596467],[0.04624541]],"model_test_loss":0.014431758783757687,"input_size":18,"current_date_and_time":"2023-08-12_09-04-44","input_mean":[[22.724527],[-0.0073930244],[0.0021499225],[-0.013335735],[-0.0060209357],[-0.0065084104],[-0.0070741335],[-0.004122651],[-0.0006198622],[0.002992856],[0.0050453614],[-0.013361201],[-0.013339233],[-0.013309726],[-0.013208915],[-0.013188212],[-0.0131769525],[-0.013236434]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.4987317],[-0.21502848],[-0.023930108],[-0.08293208],[-0.18136914],[-2.6931612],[1.9903412]],"dense_1_W":[[0.6072704,0.018546268,1.0117872,-0.02655404,0.12334371,0.9183143,-1.0057606,0.33296764,0.0034425545,0.30709305,-0.1837191,0.43864262,0.1951786,-1.0183357,0.08373593,0.46079198,0.069924854,-0.20370835],[0.018644223,1.3867873,3.9551542,0.15828222,-1.7119819,-0.06886215,0.15835802,0.104763426,1.5361047,0.7793233,-1.5410533,0.57826525,0.2791371,-0.091204755,-0.9631753,-0.25537375,-0.40537784,0.6930675],[0.05840197,0.83388406,-0.0011560204,-0.3091371,-0.24360721,1.7607956,-1.0322315,-0.24692948,-0.22033525,0.058811415,0.1848893,0.50187564,0.024970453,-0.10388528,-0.35247543,-0.33053055,-0.036511794,0.19697922],[0.041596312,1.2468644,0.00062399096,0.08458749,-0.64712596,0.8903513,-0.17702456,0.29386955,-0.32305542,-0.060308453,0.11958216,0.5488134,0.25830337,-0.8367097,-0.20763892,0.1274579,0.2367986,-0.21593204],[-0.16188623,-0.123164184,-0.9382007,0.13822892,-0.38314018,0.43343663,-0.5543238,0.26458925,0.39078033,-0.18539841,-0.12467638,0.29254597,0.14244753,-0.47446775,-0.09593193,0.09456061,-0.35750958,0.26552486],[-0.88318425,1.1153313,0.0017999654,0.19061683,-0.30666143,0.75104123,0.11356683,0.48195174,0.02523524,0.010765657,-0.04291398,-0.03229076,0.4961786,-0.31880328,-0.67625135,-0.14397632,0.15807933,-0.0985196],[0.5923598,0.6756624,-1.0463923,0.37445185,0.11736687,-1.0798235,0.55913264,-0.47123235,-0.54284656,0.055854443,0.17690535,-0.7807285,0.3889109,0.4822052,-0.42190412,-0.21585964,0.19765395,-0.03469817]],"activation":"σ"},{"dense_2_W":[[-0.7025875,-1.01547,-0.43722752,-0.09516741,-0.24370766,0.28927654,0.014542646],[0.2749662,-0.29885203,0.30274695,-0.10304987,-0.3782751,-0.26847735,0.025089832],[-0.54648656,0.24413349,-1.0082586,-0.23474653,-1.1860299,-1.0889997,-0.08883737],[-0.4322979,-0.7916055,0.08303449,-0.5981394,-0.08842554,-0.4015095,-0.44426244],[0.25884318,-0.48712513,-0.4562449,-0.765338,-0.3228274,-0.009145744,0.7458293],[-0.61903703,0.009864125,-0.7634911,-0.21205765,-0.7243218,-0.29422146,0.7232771],[-0.30022988,0.15801793,-0.4750129,-0.39146864,0.43409535,-0.20482707,0.21319191],[-0.09161583,0.29012272,-1.1244291,-0.7968736,-0.52818763,-0.31070143,-0.7589764],[0.41631448,-0.041808337,0.45858353,0.5034346,0.25543645,0.5356051,-0.6972568],[-0.779109,-0.23796116,-0.9607459,-0.6135155,-0.25498068,0.41323018,0.25573388],[-0.5596749,-0.21328482,-0.9854063,-0.5111223,-0.7307937,-0.06609184,-0.16158096],[0.26007235,0.24132085,0.5798595,0.6841223,0.65867245,0.061028752,0.36075428],[-0.3321862,0.12987743,0.56252885,0.2816003,-0.16890442,-0.22842854,-0.9761609]],"activation":"σ","dense_2_b":[[0.020393617],[-0.1259718],[0.15805069],[-0.23997118],[0.1390272],[0.08802155],[-0.11869106],[-0.24654494],[-0.11373044],[0.11735831],[0.30582067],[-0.15132986],[-0.27947864]]},{"dense_3_W":[[-0.41748047,-0.5452961,-0.5681742,-0.31478232,-0.43341246,-0.50046074,-0.1333813,-0.5239057,0.18791445,-0.6105861,-0.53726876,0.11316518,0.5290968],[-0.08242217,0.49892414,-0.4914419,0.32127154,-0.5822968,-0.6094572,0.18559168,0.31101432,0.7411366,0.31846002,-0.39128235,0.6802514,0.6365301],[0.6492468,0.02211246,-0.12046828,0.28079885,0.2860496,-0.10623663,0.10433247,0.3697982,-0.68328637,0.6391152,0.44678408,-0.028312663,0.45253885]],"activation":"identity","dense_3_b":[[0.078321405],[0.037635524],[-0.057794243]]},{"dense_4_W":[[0.5587847,0.7765039,-1.1255592]],"dense_4_b":[[0.048529897]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA MIRAI 2021.json b/selfdrive/car/torque_data/lat_models/TOYOTA MIRAI 2021.json new file mode 100755 index 0000000000..e1a890e78a --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA MIRAI 2021.json @@ -0,0 +1 @@ +{"input_std":[[8.621243],[1.130312],[0.5516336],[0.041195676],[1.126876],[1.1290765],[1.1299986],[1.1140016],[1.0942802],[1.061783],[1.0278625],[0.041149452],[0.041160367],[0.041163765],[0.041012943],[0.04082218],[0.04049875],[0.040250767]],"model_test_loss":0.010191036388278008,"input_size":18,"current_date_and_time":"2023-08-12_10-54-52","input_mean":[[23.69867],[-0.09237417],[-0.024359873],[0.005003234],[-0.08491814],[-0.08716023],[-0.08930154],[-0.09497029],[-0.09355577],[-0.09201378],[-0.08880379],[0.005034295],[0.0050175954],[0.004999444],[0.0049864235],[0.004929149],[0.0046412693],[0.0043429676]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0368268],[-0.6035686],[-0.37980628],[-0.38712236],[-0.31054008],[-0.35742834],[-0.1745767]],"dense_1_W":[[-0.30988532,0.94676775,0.06835736,-0.20904909,-0.31267637,0.4459532,-0.75116515,0.18319201,-0.16871549,0.01450603,0.094541326,0.19128986,0.094970584,-0.10434261,-0.12030237,0.08215967,-0.0004368318,-0.008146429],[-0.33773926,-0.57431877,-0.082528114,0.034690164,0.29717553,-1.3232597,1.2727411,-0.00825284,0.058543384,0.08819038,-0.25790802,0.36763,-0.3964585,-0.25440165,0.26645663,0.1723957,-0.13807693,0.016459083],[-0.643219,-0.52567714,0.16125901,0.35280794,-0.27486697,1.1864855,-0.64119214,0.28674185,0.24847941,-0.064988114,0.18981163,0.030853774,0.2485369,-0.36588603,-0.2141448,-0.24320458,0.054182176,0.08016488],[1.8329483,0.19176741,0.3630878,0.8177945,1.0301634,-0.8391618,0.029882386,0.28434104,-0.2605399,0.032751296,0.7037072,0.12650606,-0.5634059,-0.14148597,-0.14909759,-0.23083402,0.19594365,-0.15800387],[1.6136711,-0.023185488,-0.330168,-0.64757305,-0.7903925,0.3184771,-0.125178,0.5074217,-0.091587566,-0.15822329,-0.59075946,0.099624775,0.28776196,0.25979534,-0.31621882,0.2251791,0.16301762,0.015307925],[-0.012423788,1.3620756,3.723387,-0.09946844,-2.2505002,-0.6505167,-0.3025472,1.0916159,1.1659752,0.5379025,-0.8302681,0.2763101,0.3852661,0.03025497,-0.38073367,-0.20023987,-0.20818618,0.33501345],[0.035275426,0.13343032,-0.01315199,-0.16700771,-0.012076806,1.0922886,-0.46189055,0.04980423,0.22884117,0.08929184,-0.13899224,0.27415225,0.107125394,-0.21544056,-0.15122053,0.015403071,-0.16977242,0.05957028]],"activation":"σ"},{"dense_2_W":[[-0.32195273,-0.80007017,-0.047992315,0.00076893583,0.086762525,-0.2853599,-0.46519622],[-0.8466131,0.8392215,-0.625954,0.53587455,-0.05725867,0.48061028,-1.0681951],[0.6704792,-0.88257265,0.048325025,-0.11247827,-0.5555944,0.48655844,0.15341099],[-0.73055834,0.18692662,-0.0051072617,-0.28417185,-0.79494137,-1.1081446,0.3546513],[0.6564168,-0.9941641,-0.012599699,0.055534486,0.1949257,0.11912132,0.67601776],[-0.92568284,0.19816734,0.006052384,0.5773367,-0.58242613,-0.10242073,-0.62971866],[0.026353309,-0.101803504,-0.13243441,0.11023436,-0.18115512,-0.31580073,0.35157788],[0.024816064,0.74383426,-0.6058626,0.1693422,0.13700868,-0.34494787,-0.2539183],[-0.6846791,0.70265,-0.30746013,-0.5157588,-0.22700436,-0.56013364,-0.05191689],[-0.044140954,0.0018182937,0.14246152,-0.66603386,-0.27544877,-0.9813431,0.020237492],[-0.25419834,1.060303,-0.05096676,-0.4194434,-0.34662414,-0.66279954,-0.45178506],[0.35331485,-0.35900408,0.12481251,-0.69748133,-0.11242132,0.0421719,0.95737815],[-0.18702975,-0.19013745,-0.59367853,0.335176,0.036005035,0.045245975,-0.4265972]],"activation":"σ","dense_2_b":[[-0.30476797],[-0.195294],[-0.25333008],[-0.10860839],[-0.2226989],[-0.032822598],[-0.011119534],[-0.055506833],[-0.029588649],[-0.3181418],[0.07300559],[-0.06738982],[-0.15821727]]},{"dense_3_W":[[0.034150075,0.57094276,-0.48878017,0.5112273,-0.18092011,0.5353878,-0.11806307,0.3421746,0.47612357,0.52546614,0.15649377,0.1728523,0.4344787],[0.121647194,0.3492057,0.17216049,0.41008264,-0.7363858,0.18355447,-0.514776,-0.17685267,-0.14863887,-0.03910745,0.48813453,-0.7858287,-0.2943318],[0.33316976,0.06313858,0.2317506,0.47803766,-0.19028156,-0.13142887,-0.5406721,-0.3424372,-0.3295334,0.5573225,-0.1931224,0.24481794,-0.14382799]],"activation":"identity","dense_3_b":[[-0.10088669],[-0.08613214],[0.09071597]]},{"dense_4_W":[[-1.2123189,-1.2992013,0.67285275]],"dense_4_b":[[0.09299899]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47022x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47022x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..967dcf8d1f --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47022x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.000243],[1.0529355],[0.44031963],[0.04554594],[1.0481081],[1.0505339],[1.0517689],[1.0306543],[1.0114516],[0.9864613],[0.96286005],[0.045486752],[0.04548187],[0.04546514],[0.045314565],[0.045162555],[0.04484083],[0.044451322]],"model_test_loss":0.016144780442118645,"input_size":18,"current_date_and_time":"2023-08-12_12-48-27","input_mean":[[23.703514],[0.034525022],[0.0037587206],[-0.0066846693],[0.036115173],[0.035502695],[0.035573922],[0.038456824],[0.03878846],[0.037492014],[0.035617996],[-0.0066404915],[-0.0066419644],[-0.0066401316],[-0.006694763],[-0.0067848936],[-0.006970607],[-0.0071066907]],"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.018687818],[0.016889395],[-2.2628572],[-2.078596],[0.22971022],[-0.1767829],[-0.5167562]],"dense_1_W":[[0.011015955,1.0643084,-0.08839964,0.61551523,0.802623,1.5406702,-1.6393329,-0.07330995,0.22098303,0.5496796,-0.07165077,0.57465875,-0.49430174,-0.72913355,-0.028702782,0.2533353,-0.15451618,-0.014682099],[-0.0044485596,0.68300956,2.34839,-0.49447054,-2.7115552,-2.5957623,-3.4036458,1.1568989,5.159137,2.5940776,-0.9615852,1.2597148,0.4663126,-0.4115597,-0.54910094,-0.018557174,-0.6093785,0.19555537],[-0.38033494,0.6095696,0.27524653,-0.24040353,0.23970546,0.72473454,-0.19985196,0.05170179,0.37927815,0.008114709,-0.30030593,0.5968865,0.072596125,-0.31858274,-0.41960534,0.26154235,-0.09866176,0.15294196],[-0.3583878,-0.7227564,-0.2559942,-0.047408156,-0.23193003,-0.7996542,0.557878,-0.10742698,-0.4394683,0.09005993,0.26495668,-0.7439191,-0.013596186,0.88895196,0.092311434,-0.022404915,-0.17483388,0.011742477],[-1.1386592,0.20961168,-0.0043176794,-0.14611427,-0.13120638,1.3944597,-1.0419998,-0.39789963,-0.08476762,-0.36311617,0.42571318,1.3092103,-0.26345864,-0.98487866,-0.0447565,-0.3767902,-0.10429795,0.14397188],[1.1815095,0.06911906,-0.0023387522,0.08115236,-0.12113374,1.487969,-1.2359906,0.11289565,-0.58799416,0.07841065,0.22937942,1.0972705,-0.07823999,-0.92822057,-0.4054966,-0.18756558,-0.33272704,0.2668549],[-0.19750582,1.2739553,7.0663867,-0.5248582,-0.4676437,-0.08646342,-0.91660845,1.0469422,1.1008883,0.3525522,-1.6761202,0.9796133,0.77493626,-0.44570097,-0.3790537,-0.24817844,-0.04224263,-0.08521787]],"activation":"σ"},{"dense_2_W":[[0.56187254,-0.42941013,0.01137766,-0.5091996,-0.021960784,-1.0853531,-0.55602425],[-0.7135164,-0.39620182,-0.35796282,-0.24564448,-0.08940037,0.018869234,0.21817489],[0.5262834,0.37286675,0.54738665,-1.4483702,0.74003285,0.36226225,-0.4840184],[0.66549075,-0.45087525,0.5316808,-0.80598843,0.5375895,0.44839606,0.19927433],[-0.05242752,-0.47517085,-0.07394551,0.23638195,0.76435024,-0.7201021,-1.2908622],[0.20445137,0.27786765,0.6353812,-1.2159988,0.7916566,-0.03361323,0.14942108],[-0.29910564,-0.13706577,-0.66971123,0.5954099,-0.5241532,0.08504403,0.31102544],[0.2186948,0.13250604,0.14607616,-0.009396174,-0.4860835,-0.08648418,-0.5939958],[-0.18379676,0.37188196,-0.5983929,0.008835486,-0.5554737,-0.39572975,-0.17633566],[0.40148303,-0.3301877,-0.32109272,0.8163982,-0.18761033,-0.55294204,-0.4394005],[-0.18555163,-0.30746877,-0.8649402,0.3212118,0.37567982,-0.35336125,-0.40009186],[0.42191646,0.2480143,0.5938211,-0.47291356,0.24606346,0.3526983,-0.31585172],[0.30375394,-0.4357636,-0.67720544,0.18926817,-0.2186749,0.19559121,-0.15258849]],"activation":"σ","dense_2_b":[[0.0456926],[0.1021674],[-0.525961],[-0.2781079],[-0.179685],[-0.9191505],[0.018642724],[0.07845247],[0.06336037],[0.21135324],[-0.09867381],[-0.25866526],[0.27727693]]},{"dense_3_W":[[0.005986166,0.5403741,-0.5950544,-0.668431,0.3410047,-0.4509835,0.41055346,0.56165504,0.47017696,0.04962426,0.30859372,-0.4631947,0.19735102],[-0.548777,-0.34207267,0.29769439,-0.07678766,-0.18337654,0.3864849,0.09935212,0.41492525,0.2651904,-0.4132142,-0.055492,0.6352499,-0.0036086126],[-0.1508172,0.13540027,-0.39238226,-0.6953886,0.57532775,0.2929234,0.51378953,0.33914775,0.5232986,-0.16648121,0.079042025,-0.44329265,0.72198534]],"activation":"identity","dense_3_b":[[0.04064909],[-0.056400906],[0.02708405]]},{"dense_4_W":[[-0.9928628,0.7695461,-0.40275335]],"dense_4_b":[[-0.04485986]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47023x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47023x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..4d3ae8cfe8 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47023x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.189096],[1.2119626],[0.49706239],[0.047317218],[1.2048372],[1.20692],[1.2089139],[1.1869353],[1.1617409],[1.127547],[1.0964477],[0.04720443],[0.04723218],[0.047246177],[0.047100883],[0.046939258],[0.046583816],[0.046134617]],"model_test_loss":0.0164700448513031,"input_size":18,"current_date_and_time":"2023-08-12_13-15-10","input_mean":[[23.779161],[-0.013822137],[-0.002065226],[-0.0027149373],[-0.010493581],[-0.012193051],[-0.012818504],[-0.012930413],[-0.010893465],[-0.005386844],[-0.0016019325],[-0.0026636221],[-0.0026759957],[-0.0026916054],[-0.0028163292],[-0.0029443589],[-0.0030217492],[-0.003099767]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.6248422],[0.4383351],[0.0049929065],[-2.9431283],[0.008178566],[-0.051198818],[-0.33704558]],"dense_1_W":[[-0.8000218,-1.0995749,-0.2871293,0.5462917,0.24798232,-1.2576014,0.1120573,0.078140825,0.078286864,0.15174086,-0.01840363,-0.52815986,-0.05432176,0.34631014,-0.20628281,-0.14995483,0.07829511,-0.042495955],[1.6193608,-0.46763715,0.28946337,-0.2223544,0.35163045,-0.606444,0.984452,0.34925696,-0.08003834,-0.30489528,-0.18959466,-0.6525449,-0.3045237,0.5406548,-0.090693735,0.6568375,0.7551066,0.56893355],[0.020400103,0.33052164,3.5161345,-0.21798564,-0.87898314,-1.127264,-1.9201058,0.13413894,2.837898,1.4812523,-0.66593146,0.45540428,-0.012385356,0.13430928,0.21109414,-0.14471997,-0.4844812,0.03366415],[-0.86977047,1.0564649,0.306292,-0.13933228,-0.31024972,1.1149535,0.1641149,-0.005766936,-0.050841313,-0.06560041,-0.086284995,0.20279922,-0.04585891,-0.20554592,0.114430346,0.14967376,-0.021810979,-0.045283116],[0.00061570096,0.45353583,-0.009236617,0.26197684,-0.15322922,0.83636606,-0.8349571,-0.17852367,0.14262004,-0.05964174,0.04870579,0.69924206,0.4330304,-0.9156969,-0.4326727,-0.65043074,0.14345872,0.07251757],[0.0015624848,0.9121691,-0.02306211,-0.17766467,0.3675618,1.406637,-0.91108245,-0.26483488,0.007428613,0.17409417,0.12758283,0.22435105,0.11867643,-0.47856376,-0.003195762,0.21000656,0.26077518,-0.29852307],[-1.1143638,0.32679862,-0.2348363,0.5724334,-0.15143955,-1.033644,0.93523884,-0.40604407,0.0011522722,0.12635851,0.2240593,-0.24549077,-0.1502993,1.0182712,-1.1520041,-0.10360738,-0.0657126,-0.8226056]],"activation":"σ"},{"dense_2_W":[[-0.35284433,-0.2574711,-0.029361492,-0.49557316,-0.11526183,-0.2827134,-0.4111898],[0.03056212,-0.4830144,0.14822236,0.27505293,0.709112,0.4124182,-0.6306692],[-0.9140814,0.17214836,0.2355942,0.6127966,0.4447363,0.56893396,-0.3780424],[-0.72159797,-0.1386788,0.28826654,0.39564595,0.7098589,0.07965858,-0.09599504],[0.7131255,0.4191417,-0.11335002,-0.81645864,-0.16484027,-0.24157974,-0.1626869],[0.11402234,0.13955061,0.12694025,-0.046629976,0.011027189,0.7676317,-0.09719566],[-0.12212158,-0.15184937,-0.10101525,0.07340927,-0.24177536,-0.5750619,-0.3229692],[0.31239644,0.5398298,-0.12011592,-0.64138055,-0.556097,-0.6323519,0.41405684],[0.42244118,0.752209,-0.5100762,-0.5812268,-0.19271265,-0.061693292,0.4749355],[0.35658112,0.4356272,-0.6723626,0.1700935,-0.6141872,-0.49651685,0.69559157],[-0.00028722011,-0.30635557,-0.19579825,-0.09017295,0.15330125,-0.39068377,0.0518424],[0.30908525,0.26968578,-0.9460024,-0.6721539,-0.05254155,-0.96726763,-0.8004719],[0.5386026,0.24466284,-0.3876961,-0.35310513,-0.5629104,-0.62708277,0.7053968]],"activation":"σ","dense_2_b":[[-0.1009566],[-0.052083995],[-0.17170173],[-0.11832341],[-0.040780384],[-0.0032875277],[-0.06165029],[0.11283898],[-0.04587376],[0.04051942],[-0.27606243],[-0.3136743],[0.00120357]]},{"dense_3_W":[[-0.12000948,-0.07712079,-0.13579264,-0.5477244,0.12987608,-0.27466065,0.18847848,0.36536223,0.095779814,0.6490736,-0.54498273,-0.25738448,0.18985388],[0.2613838,-0.74475616,-0.71508867,-0.029044528,0.45442525,-0.2592899,0.40360647,-0.08311714,0.49941358,0.5649388,0.073403694,-0.15956575,0.47439378],[-0.3364592,0.5295699,-0.4562176,0.5927123,0.025007816,0.28039455,-0.4734172,-0.50012225,-0.26987627,-0.25010377,-0.22944938,-0.15876396,0.4559477]],"activation":"identity","dense_3_b":[[-0.04299677],[-0.057208654],[0.05739145]]},{"dense_4_W":[[-0.5825432,-1.227139,0.78172004]],"dense_4_b":[[0.05413455]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47050x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47050x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..73b1d0618c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47050x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.311736],[1.1833621],[0.46748862],[0.043473817],[1.1803772],[1.1810178],[1.1803039],[1.1448357],[1.1118515],[1.0669984],[1.0288521],[0.043289315],[0.043316387],[0.043338254],[0.043359537],[0.04335068],[0.043099],[0.04268195]],"model_test_loss":0.02130388654768467,"input_size":18,"current_date_and_time":"2023-08-12_13-42-52","input_mean":[[23.338652],[0.0079169525],[0.011965741],[-0.0043622814],[0.0054793637],[0.0060081836],[0.0057728244],[0.010234134],[0.015633008],[0.018571485],[0.021591475],[-0.004419671],[-0.0044097584],[-0.0044071046],[-0.0044820793],[-0.004507606],[-0.004685093],[-0.0047487807]],"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.3424917],[-0.22007197],[2.7653508],[-0.08879859],[-0.51477855],[-0.545124],[2.8031893]],"dense_1_W":[[-0.0609116,0.24219239,-3.0795984,-0.10600801,1.926117,1.9883113,2.695181,-2.2749603,-4.703912,-1.4620117,1.3659627,-0.61915976,-0.5933105,0.5631315,0.53107154,0.16850716,0.5389666,-0.24403873],[-0.13675421,-0.28692976,-0.047750086,-0.07963782,-0.15478788,-1.52701,0.76644737,0.36206856,0.08041735,-0.07322048,-0.13415782,-0.81037486,-0.11634636,1.0861106,-0.058293134,0.28003043,0.11846962,-0.11565344],[0.95614064,1.0019612,0.53723675,0.06426713,0.024449164,1.2951865,-0.014162737,0.17224762,-0.29896966,0.004003529,-0.033126593,0.5333686,-0.043380257,-0.34817392,-0.0940334,-0.070693925,-0.056659807,-0.040717468],[-0.3698795,-2.043652,-0.001344297,0.2573092,-1.8309736,-1.4463769,-0.7664984,-0.48727417,-0.77685726,-0.765619,-0.8620695,-0.12925234,0.19212537,0.22146735,-0.42407393,-0.28144377,-0.39236894,0.47548348],[0.8419204,-0.5650975,0.036041167,0.65058583,1.710107,1.0682759,2.30751,4.404108,1.5041014,-0.48164627,0.92178214,-0.6536394,0.088804975,0.48443964,-0.22410193,-0.3742232,0.056062154,0.047145177],[-1.2325656,-0.30824685,-0.09048496,0.18950711,-0.4825,0.048707586,-0.18827212,-0.6238843,-0.15898828,-0.0016847495,0.20470282,0.78116095,-0.21980284,-0.42645526,-0.20192316,-0.20980175,0.06175255,0.42999753],[1.1973844,-0.61121106,-0.65272874,0.11695344,-0.415401,-0.8369048,-0.51655334,-0.46804002,0.1774671,0.034465495,0.11842057,-0.19437845,-0.21636976,0.14230467,-0.1306049,0.22070019,-0.014487319,0.1370136]],"activation":"σ"},{"dense_2_W":[[-0.09687541,0.41265634,-0.28903764,0.088248394,0.08749764,0.40536332,-0.40259215],[0.09616042,0.53485495,-0.52763003,-0.3675957,-0.4812057,0.5304369,-0.35900635],[0.47528854,0.027117088,-0.79976135,-2.041139,0.12766449,0.6291589,-1.348053],[0.007089686,0.65491384,-0.28227356,0.14037174,-0.116616175,0.4254773,0.25753963],[0.30368233,0.830298,-0.5528413,-0.41899738,0.5059065,0.70742816,-0.5321653],[-0.106924206,-0.9505898,-0.1433678,-0.7451343,0.26985407,0.19505453,-0.37276903],[-0.6210788,-0.9982259,0.2111701,0.25647947,-0.2557463,-0.050668027,0.27773225],[-0.29684657,0.39087462,-0.6303919,0.45115256,-0.24149868,-0.099998295,-0.36485362],[-0.96378434,-0.67800295,0.101591,-0.4826239,-0.7637202,0.9594377,-0.27190077],[0.8295861,-0.09165251,0.27433112,0.76305205,-0.17441471,-0.2059716,0.47888404],[0.5831719,-1.3856399,0.16508237,-0.44017437,-0.1796982,-0.51486045,-0.26369834],[-0.70064485,-1.0656925,0.99505454,-0.13768534,-1.1000327,0.32685453,0.07229443],[-0.3610345,-0.9261802,0.8907604,-1.1000993,-1.0780302,0.43730703,-0.8698188]],"activation":"σ","dense_2_b":[[0.0029676734],[-0.045690004],[0.052396797],[-0.11907807],[-0.03244056],[-0.010383539],[0.14556181],[-0.06368351],[0.117490895],[0.0279692],[0.0063737636],[0.1982034],[0.36711437]]},{"dense_3_W":[[-0.4897033,-0.08666579,0.6885498,-0.029216405,-0.5607586,0.6646527,0.6371779,-0.49990708,0.80433536,-0.6012616,0.66267055,0.3536834,0.7406547],[-0.21406044,0.1894386,-0.059286572,-0.25800148,0.36541036,-0.023487262,0.08215483,0.2643849,0.7693755,-0.3409327,-0.3719815,0.62649447,-0.1366564],[-0.54868925,-0.38931724,-0.37813,-0.21437772,0.025669921,0.5354064,-0.53577673,0.43504256,-0.14300491,-0.6100815,0.2980951,-0.44299504,-0.3803292]],"activation":"identity","dense_3_b":[[-0.0040670936],[-0.008865108],[0.0073812064]]},{"dense_4_W":[[1.2559222,0.3952422,0.23678719]],"dense_4_b":[[-0.005785818]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47060x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47060x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..066956c53e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017 b'8965B47060x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.720254],[1.4248189],[0.6346064],[0.043413434],[1.4171089],[1.4204099],[1.4220495],[1.3829275],[1.3424436],[1.2829355],[1.2256352],[0.043280665],[0.043307457],[0.043318037],[0.043207273],[0.043084644],[0.042780377],[0.04235212]],"model_test_loss":0.017869291827082634,"input_size":18,"current_date_and_time":"2023-08-12_14-12-09","input_mean":[[21.814978],[-0.044544768],[-0.0024178808],[-0.009240181],[-0.045137636],[-0.04497973],[-0.04478877],[-0.04410983],[-0.045231145],[-0.043119643],[-0.043177184],[-0.009214069],[-0.0092027215],[-0.0092002945],[-0.0092338],[-0.009313492],[-0.009387383],[-0.00947316]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.389111],[0.4858375],[-0.13127421],[-0.38854295],[-3.1610048],[-0.33462796],[-1.149649]],"dense_1_W":[[-1.602772,-0.53400826,0.37718666,0.3633788,0.33693865,0.68845004,-0.8066354,-0.59084105,0.07060837,0.27426994,0.15494016,-0.07353975,-0.25826493,-0.32263887,0.28983268,0.3546069,0.18318044,-0.42745438],[0.25555605,-0.46022877,0.010211284,0.3684016,0.29642805,-0.20792986,0.9199042,-0.0009176482,0.15137427,0.30636084,-0.16015714,-0.052834738,-0.27825084,-0.27992555,0.24953611,0.13372909,-0.36744606,0.06524456],[-0.014943542,0.0033767207,-0.01663711,-0.16835603,0.11114337,1.0834363,-0.5150133,-0.07263835,0.054830827,-0.16517083,0.22029305,0.49329266,-0.17962627,-0.29688638,0.09192479,-0.06749909,-0.072753765,0.10270321],[-0.0008402716,-1.1286653,-5.7245965,-0.021644374,1.5435878,-0.1730232,0.21411745,-0.47486955,-0.97386926,-0.5715368,0.8451933,-0.455989,-0.4467363,-0.082325645,0.7459095,0.6310687,0.36110288,-0.34151703],[-1.7693851,0.12620595,-0.3989256,-0.2882022,-0.45917684,-0.51895636,0.84001356,0.61877567,0.27147272,-0.19530535,-0.35681,-0.45012978,0.7122562,0.3551444,-0.45587432,-0.4327567,0.33414394,0.11296678],[-0.08414736,-1.0083802,-0.015756436,0.013720882,1.0453994,-1.1957791,0.71627206,-0.21035555,-0.19702181,-0.27536744,0.35988438,-0.14539826,0.1924023,-0.14444451,0.25051752,-0.033313595,0.12550475,-0.12158435],[-0.30154642,-5.557496,-0.14708285,-0.061846647,2.3995101,-0.1547433,-1.5738837,-4.107894,-5.171764,-1.1092714,-0.02171138,0.11659548,0.45198613,0.6176347,-0.48459208,-1.2427675,-0.49318025,1.0491029]],"activation":"σ"},{"dense_2_W":[[0.03774502,-0.16235852,-0.84784216,0.24940088,0.00461042,0.65833217,-0.11222489],[1.1341851,-0.064238384,1.1198534,-0.95495975,-1.2911308,-1.0256866,0.6400749],[1.062979,-1.3534148,0.47456717,-1.5896825,-0.21420188,-1.0324565,0.31096524],[0.078438394,-0.271086,0.58087903,-0.26364973,0.10504239,-0.92563856,-0.25989658],[0.24416082,-0.7104936,0.24994028,-1.219746,0.37427732,-0.9982437,-0.0085131265],[-0.09752925,0.21119414,-1.1002113,-0.13776001,0.37355924,0.17910865,0.53129876],[0.2012527,-0.11168886,-0.8083448,0.059142426,0.2023561,0.5704213,0.12255705],[0.64825,-0.12111593,-0.76845324,-0.24870408,0.4248867,1.1680412,-0.2043484],[1.7244234,-1.3934715,-0.04146303,-0.17682545,1.7285235,-1.6673733,-3.813261],[-0.48733664,-0.6287612,1.05426,0.05775865,-0.87263334,-1.0111203,0.60572374],[-0.28019178,0.5071182,-0.466659,0.078289345,0.31104136,0.71050084,-0.16471304],[0.30341744,0.039579187,1.2398592,0.29671758,-0.5292248,-1.2144855,-0.31690553],[-0.040978797,-0.28604105,0.5629664,-0.15134554,-0.59253997,-0.5422128,0.19325934]],"activation":"σ","dense_2_b":[[-0.07329691],[-0.0073756496],[0.11507728],[-0.0200944],[-0.35160002],[-0.13647649],[-0.11702968],[0.07018993],[-0.4881218],[-0.11002543],[-0.046954576],[0.07282092],[-0.06980713]]},{"dense_3_W":[[0.3841397,0.43480623,0.3392544,0.11891049,0.19847225,0.45567343,0.56124204,0.73655707,-0.103296585,-0.12169428,0.0068540676,-0.71867234,-0.40767854],[-0.45614606,0.21017289,0.55516654,0.61873233,0.33714756,-0.4300137,-0.45999125,-0.08619196,0.9222072,0.008902227,-0.15612483,0.7118131,-0.082317345],[-0.042307917,0.6266083,0.664274,0.6469083,0.16917458,-0.51057035,-0.20145637,-0.67773443,0.61834735,0.5064825,-0.2500228,-0.056062642,0.3220822]],"activation":"identity","dense_3_b":[[0.016107948],[-0.113635235],[-0.055587772]]},{"dense_4_W":[[-0.3492811,0.56186444,1.1551155]],"dense_4_b":[[-0.04331681]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017.json b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017.json new file mode 100755 index 0000000000..0b66eb0995 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS 2017.json @@ -0,0 +1 @@ +{"input_std":[[9.762099],[1.487393],[0.60882616],[0.045595963],[1.4832315],[1.4860536],[1.486883],[1.4329017],[1.3824382],[1.3180021],[1.2599565],[0.045492638],[0.04550747],[0.04551469],[0.04532005],[0.045169514],[0.044900604],[0.04442004]],"model_test_loss":0.023460322991013527,"input_size":18,"current_date_and_time":"2023-08-12_11-56-57","input_mean":[[22.102732],[-0.036377847],[0.008207928],[-0.00759032],[-0.039697252],[-0.039314914],[-0.038734905],[-0.03351559],[-0.029701687],[-0.02374894],[-0.019018527],[-0.0075716134],[-0.0075744586],[-0.007576846],[-0.007673164],[-0.0077769123],[-0.007848316],[-0.007871212]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.2464235],[0.36032724],[3.2142584],[-0.6124687],[-0.3444237],[0.84660757],[2.4967933]],"dense_1_W":[[0.48956943,-1.0167718,0.00075395213,0.31859773,0.35728282,-1.7345634,1.4772928,0.22698121,-0.008497222,-0.2401796,0.06579528,-0.9262515,0.41439727,0.08820266,0.18549742,0.15475516,0.28202718,-0.3306144],[-0.01902877,1.317417,5.2883816,-0.0048064315,-1.1207271,0.14153387,-0.48907554,0.5965518,1.3317474,0.93645155,-1.5463351,0.8940235,0.01715244,-0.09698201,-0.79124266,-0.60062087,-0.5283351,0.48210177],[1.6799453,1.0875803,0.7233399,-0.1154038,0.13903706,0.6666519,-0.57941824,1.110945,0.8287281,-0.39736634,0.014497336,0.8294811,-0.24227042,-0.8082123,-0.11531884,0.3998047,0.38992816,-0.4658866],[-0.0093339095,-0.5626546,-6.469625,-0.24272315,1.8790531,1.1458817,1.6199373,-0.19717191,-2.2601504,-1.494756,-0.0270969,-0.83446693,0.017938558,0.20106375,0.4829865,-0.20796809,0.36888748,0.11745824],[-0.047758993,-3.753541,-0.18051493,-0.1676101,0.06609924,-0.8893684,-0.49023744,-1.0407737,-1.7489501,-1.3261193,-0.87734985,-0.39572844,0.64688593,0.5416982,-0.38286057,-0.97357833,-0.100056775,0.65565544],[-0.5856627,-0.59970623,0.0013667468,-0.121420965,-0.036623403,-0.898132,0.6988883,0.062262405,-0.06344699,-0.09589227,0.0075431895,-0.70993936,0.20738071,0.40989095,0.48009038,0.008462325,0.07712684,-0.15405595],[1.4587147,-1.1636585,-0.6985848,0.15750197,-0.38945892,-0.008756978,0.24255253,-0.8265293,-0.7826147,0.05190376,0.17086956,-0.6203985,-0.076512754,0.65016216,0.08441122,-0.1163062,-0.10427384,0.15624847]],"activation":"σ"},{"dense_2_W":[[-1.632233,0.37712488,0.4133944,-0.49261183,0.4405689,-0.7207189,-0.38359222],[-0.8616621,-0.24084182,-0.9289986,-0.018349092,-2.5249062,1.1182486,-1.4555736],[-1.3167355,0.7074618,0.21640916,-1.1284393,0.46383277,-0.13820471,-0.9500447],[-0.92115754,-0.59398055,0.20591407,0.14233942,0.32264933,-1.0047222,0.5837284],[-0.19402613,-0.29334325,-1.0017632,-1.2045952,-1.4455371,1.3564488,-1.236838],[1.0292754,0.18309414,-0.60503435,-0.67400736,-0.025801765,1.5835614,-0.18880595],[-0.08803988,0.85121155,1.2177777,-0.7774471,-0.15086989,-0.46124795,0.47848985],[1.1849687,-0.86750364,-0.43640986,0.5167854,-0.0021778047,0.67761177,-0.039286524],[-0.53804636,-0.047613166,-0.43315673,1.0911809,-0.8549513,-1.652081,-0.3882718],[-0.7047395,-0.45552897,0.29509792,-0.18719345,-0.106475934,-0.82755125,-0.3893937],[-0.57848173,-0.24025704,0.64958143,0.42696828,-0.4415749,-0.83788425,0.5138786],[-1.049563,0.35799855,0.37039617,-0.7668992,-0.1432876,-0.07057645,-1.404517],[0.8964256,-0.7548794,0.4873239,0.77339566,0.51797086,-0.043386698,0.9278152]],"activation":"σ","dense_2_b":[[-0.090917155],[-0.019869018],[-0.2314992],[-0.3312451],[-0.111754775],[-0.020750022],[0.201929],[-0.09248944],[-0.12347164],[0.07316307],[-0.045670044],[0.038350813],[-0.18804084]]},{"dense_3_W":[[-0.031516537,-0.15004298,-0.18322755,-0.49024573,-0.26840314,-0.21953586,0.4307271,0.6146507,-0.13160063,0.5342723,-0.47197735,0.3113398,-0.17237346],[-0.08184883,0.48368433,-0.5115264,-0.38417426,0.8723999,-0.29197934,0.050145645,-0.76852167,0.28836453,0.057352327,0.47973254,0.25683725,-0.18866217],[-0.5150742,-0.38569307,-0.65030956,-0.5188455,-0.23875389,0.4727463,-0.512049,0.80167,-0.69323355,-0.5246097,-0.35622385,0.00080956175,0.41679603]],"activation":"identity","dense_3_b":[[0.005088476],[-0.02459968],[0.076397985]]},{"dense_4_W":[[-0.09449419,0.40851843,-0.86686087]],"dense_4_b":[[-0.053760864]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS TSS2 2021.json b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS TSS2 2021.json new file mode 100755 index 0000000000..489abe3692 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS TSS2 2021.json @@ -0,0 +1 @@ +{"input_std":[[9.993096],[1.5129169],[0.5292781],[0.04735161],[1.4937518],[1.5009559],[1.5065974],[1.4822813],[1.4460584],[1.3909396],[1.3364335],[0.047238417],[0.047255352],[0.04726677],[0.04720177],[0.047057327],[0.046800528],[0.046432514]],"model_test_loss":0.02137083187699318,"input_size":18,"current_date_and_time":"2023-08-12_14-47-11","input_mean":[[21.92725],[-0.05898304],[0.0055398513],[-0.010017767],[-0.05939448],[-0.0591323],[-0.05851898],[-0.054530293],[-0.04864468],[-0.03953879],[-0.033812713],[-0.010021071],[-0.010010929],[-0.010004903],[-0.009986946],[-0.010029537],[-0.010210251],[-0.010435901]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.7096349],[-2.2459192],[1.8050286],[0.14590603],[-0.21259946],[-0.4865897],[1.0180423]],"dense_1_W":[[-0.044355545,-0.86803615,-5.470682,0.7662393,2.2697113,0.20532803,0.7032451,-1.0900831,-1.6173851,-1.3596452,1.1005849,-0.6813092,-0.3240795,-0.1764869,-0.049160894,0.72827965,0.515452,-0.7062596],[-1.1831604,-0.62358975,-0.0026339197,0.44086918,-0.13777687,-1.6426544,0.7253186,0.21613201,-0.33259863,-0.30798477,-0.3028476,-0.6908554,-0.26595157,-0.034876596,0.27096295,0.12958722,0.28949723,-0.13089034],[1.129321,-0.1758684,-0.016361756,-0.10424338,-1.0363773,-0.9705366,0.7942455,-0.14791845,-0.4966791,-0.14422588,-0.39332545,-0.4259459,-0.18380871,0.013830062,0.29699945,0.06683513,0.43560967,-0.118786275],[-0.17347103,-1.1811129,-0.0033009297,-0.21089908,0.5171898,-0.897144,0.44509307,-0.106434815,-0.28461242,-0.4546323,0.11333945,-0.42986956,-0.46928948,0.63054854,0.28181624,0.14660357,-0.021812595,0.05028003],[0.007173049,-0.70618355,-1.4873191,0.58662444,-0.089591786,-1.1213539,-0.47290862,-0.51822674,0.0023703398,0.2661958,1.152991,0.08745119,0.581388,0.3216495,0.05185744,-0.47252813,-0.24824727,0.051313765],[0.06722459,-0.70006377,-0.003337988,0.18606693,0.5765867,-1.6360734,0.96973306,0.05009269,-0.029201366,0.17914243,-0.20576404,-0.3237746,-0.289676,0.26199174,0.35764173,0.1982268,-0.094512984,-0.064385064],[1.4187667,0.23352993,0.015063511,-0.32947004,0.76953924,-0.5759871,0.85416406,0.6099805,0.14313644,-0.0988441,0.43220612,0.40879938,0.055067588,0.46557856,-0.18368772,-0.54336697,0.18179518,-0.084707245]],"activation":"σ"},{"dense_2_W":[[0.5947046,0.111288555,0.5850431,0.62112284,-0.078394376,0.24245393,0.32209224],[-1.8208972,-0.592816,-1.642084,-0.38896674,0.5061991,0.19109774,-1.5200887],[0.025273113,-0.08020302,-0.41331917,-0.022847144,0.6140032,0.10955139,0.35156295],[-0.50207645,-0.009498558,0.5945049,0.09697446,-0.6907574,-0.44700485,-0.69720614],[0.023978695,0.4353877,-0.6338232,0.066216335,0.5071922,0.72722405,-0.37157634],[0.22281975,0.30087987,0.10793576,0.6051096,-0.050377756,0.06560134,0.19566649],[0.3174169,-0.5281018,-0.3769352,-0.9404693,-0.38535568,0.047176104,-0.29524794],[-0.01142797,-0.8428373,0.61943024,-0.07822464,-0.27282074,-1.3535438,-0.027685491],[-0.1500802,-0.7242349,-0.30430663,-0.9526516,0.07655578,-0.72111547,-0.26857635],[-0.812532,0.026910001,0.31951103,0.13876708,-0.52592987,-0.28904262,-0.7990699],[0.43766123,-1.7336309,0.24968149,-1.029645,-0.074033834,-1.2529281,-0.030552762],[-0.33508214,-0.42931655,0.42052394,0.17153797,0.019656077,-0.109691635,-0.8664852],[-2.0966787,-0.025330383,-1.3079646,-0.22694683,-0.28807703,0.07181863,-1.555939]],"activation":"σ","dense_2_b":[[-0.019173387],[0.12807891],[0.0059481813],[-0.17893082],[-0.051502828],[-0.02974034],[-0.02933723],[-0.0073013883],[0.22854811],[-0.202757],[0.043750115],[-0.28998128],[0.23772466]]},{"dense_3_W":[[-0.3590014,0.24275887,-0.008422746,0.5422629,-0.6242663,-0.45372233,0.2612047,0.42095724,0.65564615,0.24925809,-0.024278162,-0.009784553,0.2571832],[0.5248679,0.040475123,-0.10563131,0.51980525,0.6735201,0.606566,-0.4731102,0.38770038,-0.1824653,0.12611738,-0.4370857,-0.6336852,-0.24878174],[-0.24122173,-0.7736854,0.54332715,-0.3138175,-0.3822715,0.051808015,-0.5872665,-0.6603135,-0.71875435,-0.22510114,-0.56668365,0.3377473,-0.81265104]],"activation":"identity","dense_3_b":[[-0.024711734],[0.022470985],[0.04454885]]},{"dense_4_W":[[0.7645119,-0.6550188,-0.91781116]],"dense_4_b":[[-0.03211836]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS v 2017.json b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS v 2017.json new file mode 100755 index 0000000000..e591efd503 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA PRIUS v 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.246218],[1.5180237],[1.1132214],[0.032814745],[1.5758848],[1.5594358],[1.5396744],[1.4333483],[1.3656113],[1.2911646],[1.211073],[0.032817718],[0.032821406],[0.032829028],[0.03273625],[0.03268472],[0.03245208],[0.032211557]],"model_test_loss":0.011019937694072723,"input_size":18,"current_date_and_time":"2023-09-03_04-36-00","input_mean":[[16.336061],[-0.044645034],[0.06438527],[-0.015354921],[-0.055193648],[-0.05405257],[-0.051184133],[-0.0345687],[-0.027733065],[-0.022407],[-0.018130124],[-0.015424534],[-0.015413215],[-0.015394557],[-0.01529056],[-0.015231228],[-0.015114382],[-0.014972076]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.001179121],[-0.0008084346],[1.0273217],[0.8665842],[-1.7917292],[0.5846544],[1.8503871]],"dense_1_W":[[0.0008713786,0.10571419,-0.009768912,0.20203193,0.06539419,0.8834566,-1.064991,0.8917164,0.2740178,-0.29560176,0.046367835,-0.06696189,-0.15079989,-0.10306829,0.15937875,-0.32234034,0.11896804,0.013798418],[0.0032703213,0.3225856,-0.017178465,-0.3818704,0.3018395,0.30094728,-0.41512567,0.38405526,-0.1570511,-0.014270626,0.080081746,0.6354644,0.35888773,-0.43707213,-0.32447734,0.023193512,-0.16756727,0.20933074],[1.5627879,-0.37140134,0.63836944,-0.3830291,0.72145224,-0.3836591,0.11257197,0.21017507,0.26833218,0.25539163,0.5186593,-0.15651038,0.41176555,0.45905823,-0.42902833,0.06326807,0.3629456,-0.30402216],[1.6168094,0.40822932,-0.66605085,0.22799215,-0.69717556,0.34626734,-0.0059232763,-0.54218775,-0.055495918,-0.3768063,-0.48113772,-0.018525612,-0.5950303,0.2557122,-0.18825729,0.22983,0.005579068,0.06161027],[-1.1495299,-0.7586535,-0.5353385,0.025521036,1.087006,-1.0086828,-0.17635801,0.4568657,-0.091241084,-0.5215724,-0.2604748,0.045887616,0.11212669,-0.25279886,-0.14159086,-0.033089254,0.0029795568,0.1999646],[-0.051524103,-0.51501364,11.658313,0.13625003,-1.3843681,-1.6409664,-2.668583,3.1511652,2.57322,0.51289797,-0.38707766,0.10578343,-0.40109116,-0.31546983,0.07539781,0.3615562,0.073550805,-0.14806822],[1.1748914,-0.7219464,-0.5470881,-0.003681565,0.49025726,-0.4171505,0.0072592692,0.024163779,0.024890631,-0.41618225,-0.32244092,-0.19234161,-0.16784292,0.34389323,-0.06989565,-0.12501281,-0.030100992,0.20458347]],"activation":"σ"},{"dense_2_W":[[-0.4868388,-0.61673963,1.4286674,-0.039495535,0.45262775,-1.0424562,1.5454369],[-0.6074346,-1.011816,0.046624646,-0.78734446,2.3072171,-1.3779964,0.8569677],[0.47693276,0.71271104,-0.2390285,-0.038990125,0.12270858,0.20493168,-0.45892665],[0.38512126,0.61106217,-0.41512227,0.46455616,-0.0570659,0.04394896,-0.13119707],[-1.2577482,-0.6138713,0.6549672,-0.65091866,0.5145879,0.3818217,0.53431696],[0.56899303,0.10398351,0.45342615,-0.053685065,-0.104297765,0.09119562,-0.6285316],[-1.0771691,-0.25324076,0.37886608,0.1173106,0.47042668,0.14671373,0.08761732],[-0.3019003,-0.86725014,0.91806465,0.18018398,0.77627605,-0.93972605,1.2739382],[0.62885785,0.7373836,0.016257606,0.023142297,-0.47996506,-0.52089614,-0.113337025],[0.22219604,0.67318004,-0.08316116,0.34620377,-0.6612502,0.034009792,-0.64690715],[-0.23770024,-0.50766915,-0.09670405,-1.216913,1.2701161,-1.6846908,-0.22704105],[0.59986305,0.5738209,-0.19015375,0.421755,0.26094252,-0.04966739,-0.62614566],[0.6166309,0.091970205,-0.12472761,0.28889042,-0.21862288,-0.36297256,-0.44079408]],"activation":"σ","dense_2_b":[[0.19794257],[-0.03969422],[-0.0656537],[-0.062498007],[-0.035217416],[-0.016953804],[-0.0943835],[0.053581137],[-0.03426556],[-0.003272987],[-0.075658314],[-0.07952997],[-0.0015540265]]},{"dense_3_W":[[0.024692904,0.58683085,-0.567369,-0.37911305,0.67811406,-0.15265317,0.6610765,0.4359995,-0.6584148,-0.6708834,0.7197889,-0.4486733,-0.1747178],[0.14699566,-0.6474973,0.2763736,0.28756335,-0.3922964,-0.04845914,0.18625976,-0.26840127,0.6112173,0.3658983,-0.651653,-0.42875016,-0.09464588],[-0.7110688,0.24306618,0.19536833,-0.20736542,-0.025801487,0.17186794,-0.44581038,-0.31020266,-0.16066518,0.029663702,0.22836117,0.06264115,0.15486911]],"activation":"identity","dense_3_b":[[-0.016370883],[0.0127013195],[0.026499491]]},{"dense_4_W":[[-0.8554128,0.2766906,0.524841]],"dense_4_b":[[0.019940862]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017 b'8965B42082x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017 b'8965B42082x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..fa23d9871e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017 b'8965B42082x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.019431],[0.9383312],[0.43760064],[0.04085473],[0.92240274],[0.9266218],[0.9308925],[0.9144991],[0.8993299],[0.87902194],[0.856193],[0.04076221],[0.04078495],[0.04079549],[0.040720142],[0.040604606],[0.040340398],[0.04001449]],"model_test_loss":0.015206318348646164,"input_size":18,"current_date_and_time":"2023-08-12_16-07-29","input_mean":[[25.50595],[-0.011863799],[-0.0006739514],[-0.01594329],[-0.012065965],[-0.012642977],[-0.012979119],[-0.01383788],[-0.012668227],[-0.014262671],[-0.016552003],[-0.015838692],[-0.015853724],[-0.015880592],[-0.015935425],[-0.015941922],[-0.015968155],[-0.016021552]],"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.036452126],[0.08559556],[0.2897148],[0.075330995],[-0.38187677],[1.4539754],[-1.2161264]],"dense_1_W":[[-0.0060098697,-0.39788464,-0.0083788065,0.18333316,0.278688,-0.92364454,0.88050914,-0.16357976,-0.083575465,-0.16548778,0.17388147,-0.64590514,-0.2367544,0.16991502,0.39137343,0.3947005,-0.15660408,-0.03307207],[2.8630645,-1.2588997,-0.0027301412,0.24774393,-0.2915709,0.7063696,-0.41898602,0.093648784,0.3480123,0.08518327,-0.19690122,0.02904587,0.4258792,-0.48439965,-0.58783513,-0.51380473,-0.11631057,0.456209],[-0.017119301,-0.7335742,0.0014175244,0.5969601,0.050444994,-0.6665325,0.5107775,0.111380346,-0.09259335,-0.026180675,-0.011466796,-0.4973461,0.1700098,0.035120707,-0.12647136,-0.0991956,0.044152405,-0.060947783],[0.004678411,1.2740623,3.7182605,0.107325286,-1.2989601,-0.3152337,-1.0639912,-0.13160844,2.1075041,1.0793704,-1.4939084,1.1409113,0.07448943,-0.5013081,-0.29907212,-0.39650646,-0.21130306,-0.116951525],[2.8458567,0.54284513,0.0016173293,-0.17757091,0.05277462,-0.094486594,0.62712353,-0.31395078,0.1025354,-0.12772946,0.13789791,-0.20587224,0.3055044,-0.119795896,0.5939448,0.4397611,0.06556392,-0.37161782],[0.4724819,0.80122966,-0.00018380646,-0.039874755,-0.3928932,1.8747684,-1.233508,0.09610313,-0.13470712,-0.06360237,0.15746103,0.67920583,-0.096370995,-0.8378776,0.014750212,0.28160796,-0.1478646,0.080034226],[-0.47802755,0.48921135,-0.0002520188,-0.037732497,0.10487879,0.92998505,-0.55178314,0.10634122,-0.18135986,-0.10310874,0.21691601,0.4927082,-0.095634714,-0.4269393,-0.3520725,0.43727353,-0.1824048,0.10521066]],"activation":"σ"},{"dense_2_W":[[-0.7678551,-0.044020087,-0.9463613,0.1381405,-0.4766844,0.17481054,0.865753],[0.36592254,-0.46206722,0.4263325,-0.5770286,-0.38127115,-0.35710543,-0.46009374],[-0.77888083,0.19055568,-0.7574013,-0.24226372,0.006470128,0.7841768,0.6951729],[0.4839658,0.49723354,-0.119507566,-0.37833682,-0.2862369,0.13223429,-0.08261849],[0.1550176,-0.13229156,0.23890848,0.28497326,-0.06232947,-0.5918447,-0.87441015],[0.38908252,-0.46098205,0.042430878,0.0006829582,0.25034666,-1.0715038,-0.5407985],[-0.62666726,0.47684154,-0.19868156,0.43383852,-0.49297318,0.9425333,0.27851704],[-0.18181121,0.5257746,-0.7636084,0.6897081,-0.76064235,0.20353147,0.13215753],[0.76410335,0.19123517,0.21125565,-0.22053698,0.16143271,-0.004425321,-0.2898052],[0.6294419,0.17306042,0.1091528,-0.00499673,-0.28395087,-0.97709465,-0.25536087],[-0.28397334,-0.055312153,0.44325092,-0.39098385,-0.20454785,-0.043942228,-0.51369905],[-0.4919128,-0.10269968,-0.6502031,0.4973944,-0.42260522,0.057200216,0.23966748],[-0.5128312,0.38837132,-0.107127376,0.24325761,0.16999815,0.28076303,0.35485357]],"activation":"σ","dense_2_b":[[-0.02832953],[0.045545593],[0.037394777],[-0.047663357],[0.037933607],[0.098250054],[-0.06336312],[-0.08578499],[-0.00794813],[-0.05136867],[-0.0020242317],[-0.09399862],[-0.1000513]]},{"dense_3_W":[[-0.48297986,0.3544177,-0.45382679,-0.06326301,0.5731008,0.033288028,-0.3915376,-0.42120582,0.25898603,-0.29080692,-0.17612633,0.12559004,-0.19767617],[-0.6037485,0.5368198,-0.3116054,0.16574962,0.33300138,0.70383537,-0.4044081,-0.5238778,0.40293556,0.65038425,0.26341242,-0.5921214,0.081331424],[-0.3002974,-0.47011936,0.46762595,0.45630494,-0.06353013,-0.33025408,-0.35250518,0.18968482,-0.20597102,-0.1440317,0.03978579,0.48477307,0.10114584]],"activation":"identity","dense_3_b":[[0.06856954],[0.03152135],[-0.011259861]]},{"dense_4_W":[[-0.6018683,-1.0063373,0.005766461]],"dense_4_b":[[-0.035384744]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017 b'8965B42083x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017 b'8965B42083x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c04c4bf7ba --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017 b'8965B42083x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.785183],[1.3424761],[0.5159871],[0.047890432],[1.3260951],[1.331146],[1.3365234],[1.3069957],[1.2819953],[1.2447248],[1.2092956],[0.04772719],[0.04774223],[0.047755223],[0.047561523],[0.04740499],[0.047128234],[0.04665515]],"model_test_loss":0.01631096750497818,"input_size":18,"current_date_and_time":"2023-08-12_16-36-05","input_mean":[[24.84536],[-0.048694376],[0.0017105383],[-0.0076607447],[-0.043704547],[-0.044807203],[-0.046089165],[-0.04298986],[-0.042797346],[-0.040657774],[-0.038248837],[-0.007561775],[-0.0075660897],[-0.0075722965],[-0.0076475735],[-0.007697426],[-0.0077724564],[-0.0077436664]],"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.280903],[-1.7886032],[-4.637047],[-0.08578383],[0.010013872],[4.6856623],[-0.22121063]],"dense_1_W":[[-0.09450893,-0.6459062,0.060911775,-0.3847882,0.7519606,-1.8593575,0.8616294,0.053076338,-0.209784,-0.07385902,0.00047539294,-0.4523988,0.2974266,0.38510123,0.259752,0.08684495,-0.02447588,-0.0733537],[-0.6774607,1.2661867,-0.10200818,0.65671134,-0.047138035,0.6458983,-0.24165322,0.062084105,0.14131553,0.28091753,-0.06481851,0.2215787,-0.13829407,-0.5720354,-0.24476062,-0.09048865,0.05114956,0.00428825],[-1.9029608,0.34790626,0.2843667,-0.37467235,0.09965191,0.57280195,-0.17685397,-0.11966289,0.2557388,0.055247348,-0.2157288,-0.08949254,0.4247985,-0.16542377,0.18466538,0.19807269,-0.23189463,0.09547625],[-0.00062151457,0.1738365,0.17885163,-0.57136464,0.012507409,0.7827646,-0.87514424,0.27497044,0.32263565,-0.13115652,-0.28708053,0.9652118,0.20607184,-0.5144796,-0.47407618,-0.042873062,0.12893395,0.18263417],[0.025652306,-2.0052488,-6.667998,0.4208965,1.2458491,0.3907362,1.0876682,-0.3848656,-1.4246505,-0.61824685,1.1011258,-1.3024,-0.37421313,0.12721808,0.6561884,0.37722364,0.08510617,0.3396205],[1.99233,0.6377857,0.28082734,-0.385711,-0.23865217,0.99780643,-0.48828554,0.08000757,0.029273741,-0.082829274,-0.1007471,0.2732823,0.0831288,-0.6843401,0.6745747,0.19553038,0.15868916,-0.2637087],[-0.035898842,-0.044465996,0.013378123,0.08511469,0.28486708,1.4638215,-1.2811527,-0.0017351665,-0.13274787,0.10752207,0.10370681,0.5822642,-0.12452679,-0.58151734,0.121833816,-0.2511263,-0.25619733,0.2831056]],"activation":"σ"},{"dense_2_W":[[-0.8841406,0.4347669,0.84688157,-0.0004789553,-0.5473451,-0.39614245,0.6071275],[-0.59437585,0.033965513,0.24382767,0.5086613,-0.5668177,0.4027159,0.6990393],[0.27216327,0.11812625,-0.6145046,-0.052390628,-0.39457545,-0.293586,-0.3356249],[-0.66689086,-0.19540851,-0.3679948,-0.36721542,-0.4817769,-0.4075158,-0.67281103],[-2.0079339,-0.15370838,0.8236128,0.6912437,0.29243928,0.94582,0.35805795],[0.6160914,-0.4700829,-0.29550225,-0.45972148,-0.2371927,-0.22895168,-0.22462685],[0.21214539,-0.38577923,-0.15344645,-0.3005762,0.33333546,-0.36551368,-0.67323405],[0.26780415,-0.6526573,-0.26887926,-0.39421728,-0.63939315,-0.06335249,-0.06702983],[-0.64520854,-0.13833176,0.710947,0.49081513,-0.67323875,0.88580966,0.07329091],[0.70333093,0.27374974,-0.185739,-0.64055556,0.6837862,-0.8216412,-0.7543152],[-0.08852291,-0.24456227,0.64587975,-0.25254932,-0.8361469,-0.0998585,0.41330463],[0.76102114,-0.52449924,-0.39964664,-0.28608727,-0.010932956,0.20352012,-0.34879187],[-0.5587552,-0.061310817,0.3489882,0.6867392,-0.19598259,0.6264299,0.19196412]],"activation":"σ","dense_2_b":[[-0.3371589],[-0.34260237],[0.0060174274],[-0.14280829],[-0.79392904],[0.1485932],[0.10975139],[-0.21955685],[-0.25368217],[0.059160925],[-0.105888784],[0.061584476],[-0.27724692]]},{"dense_3_W":[[0.599121,-0.09533889,0.046242982,-0.34005862,0.9232934,-0.63216597,-0.14118026,-0.520665,0.07688401,-0.7621056,0.41081268,-0.507315,0.26893604],[-0.13292964,-0.5938322,-0.14970674,-0.35914317,-0.34032637,0.4124289,0.4949658,-0.009953369,-0.6471148,0.6008697,0.5047356,0.4261539,-0.49192414],[-0.40530923,-0.49001616,0.48234347,0.23525164,0.13179244,0.6979752,0.19944161,-0.3692451,-0.49022684,0.55492526,0.17020899,-0.2596992,-0.27337795]],"activation":"identity","dense_3_b":[[-0.018591681],[0.05460255],[0.024361271]]},{"dense_4_W":[[0.7731739,-0.2942781,-0.54992497]],"dense_4_b":[[-0.021991715]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017.json new file mode 100755 index 0000000000..ba434a6ebe --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.785079],[1.3448962],[0.51876175],[0.047479864],[1.3252879],[1.331087],[1.3371022],[1.3088783],[1.2807853],[1.2440304],[1.2056386],[0.04731712],[0.04733776],[0.047359645],[0.04723333],[0.047111828],[0.046843447],[0.046379473]],"model_test_loss":0.01724853552877903,"input_size":18,"current_date_and_time":"2023-08-12_15-17-06","input_mean":[[24.85061],[-0.047142796],[0.0005701203],[-0.008726335],[-0.04417392],[-0.045567565],[-0.046358094],[-0.04118768],[-0.039137643],[-0.03847798],[-0.035704315],[-0.008584033],[-0.008594763],[-0.008609622],[-0.008570998],[-0.008600623],[-0.008706975],[-0.008697191]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.0296891],[-1.922514],[-1.149494],[0.022265209],[-0.052071013],[-0.032673564],[-1.9946277]],"dense_1_W":[[-1.8791502,-0.45478737,0.07119253,0.016805792,-0.38664973,1.3035942,-0.542431,0.047575254,-0.22030126,0.13161159,-0.07229064,0.36489004,-0.2386385,-0.23712136,0.034654524,-0.2886649,0.10312662,-0.047390282],[-0.66666186,-0.48720443,-0.11072515,0.094074145,-0.061216515,-1.2182275,0.8426725,-0.10592509,-0.21448702,-0.056960933,0.04259483,-0.7316568,0.20460397,0.42091593,0.15927365,-0.17348117,0.19803195,-0.18829267],[-1.8703458,0.30746105,-0.06834135,0.27911848,0.2422295,-0.6888701,-0.012127967,-0.15067418,0.5743117,0.07311509,-0.16059698,-0.15502444,-0.41604456,0.42384803,0.43910763,-0.17972651,-0.40040898,0.3014311],[-0.019090334,-0.76574296,0.09397271,0.10988411,0.51672286,-2.172949,1.0367043,-0.0839209,-0.58819324,0.16455668,-0.01100052,-0.7896944,-0.2134588,0.98234737,0.034016434,0.36617452,-0.035145547,-0.25804156],[-0.0018639659,-0.9749377,5.5816774,-0.23225898,-0.12594639,-0.9363593,1.234414,0.34805998,-0.08151865,0.107896045,-0.037450574,-0.27116403,-0.30569962,0.7310664,-0.58886266,0.20576492,0.49676666,0.072158925],[-0.019030262,1.2230272,5.830608,-0.41493434,-0.23800562,0.18280193,-1.5482132,-0.0852967,0.70929605,0.31744578,-0.51722443,1.0640428,0.19439188,-0.6710601,-0.2801976,-0.35409272,0.003487162,0.361651],[-0.649294,0.45132867,0.11169535,-0.06450987,0.17274019,1.0169406,-0.8244322,0.08305402,0.30460912,0.13607553,-0.12671345,0.31371805,-0.0019661803,-0.10996772,-0.15226273,0.090185925,-0.3348226,0.27420557]],"activation":"σ"},{"dense_2_W":[[0.6609678,-0.22481585,0.040954396,-0.31495926,-0.19392742,0.10244233,-0.08746393],[-0.7082068,0.86338276,-0.11436686,0.12848611,0.20935868,0.15040098,-1.1645155],[-0.22602943,0.793938,0.18418907,0.72948813,0.6846751,-0.6348888,-1.0778567],[0.53014493,-0.45450902,-0.35092524,-0.5569319,0.12838417,-0.13627666,0.5994005],[-0.17350997,0.7593281,0.7799434,-0.39523655,0.20372757,-0.834957,-0.38898385],[-0.70416707,0.22460131,0.085097484,0.78984326,0.2471842,-0.30347177,-0.58072823],[0.33662602,-0.7904104,-0.60286903,-0.16468751,-0.11612247,0.53005517,0.5211252],[-0.7082711,-0.46435446,-0.75132966,-0.29705703,-1.024626,-0.2615332,-0.20701897],[0.35671562,-0.02681799,0.6840728,-0.2612279,-0.08365274,-0.9705286,-0.605018],[0.62429255,0.0521647,-0.35856178,-0.4051332,-0.5179798,0.46409982,-0.052206893],[0.36666667,-0.5527411,-0.20863053,-0.6491323,0.06274223,0.4735839,0.22757712],[-0.012209164,0.5899906,0.46180722,0.48860443,0.58372164,-0.25489396,-0.895847],[-0.12133152,0.70728445,-0.4158088,0.7696778,0.1290468,-0.5404793,-0.33367673]],"activation":"σ","dense_2_b":[[0.08061271],[-0.19563875],[-0.24664785],[-0.12486449],[-0.2303988],[-0.07568345],[0.037712026],[-0.11140529],[-0.23779462],[0.034758605],[-0.11953955],[-0.21795286],[-0.21500231]]},{"dense_3_W":[[0.16741616,-0.5169601,-0.6872919,-0.3394973,0.08778304,0.27198112,0.7472469,0.11274346,-0.53623766,0.4801037,-0.17826463,0.07536674,0.6185708],[0.4108729,-0.3526092,0.1731832,0.5833954,-0.5591321,-0.5981915,0.7000401,0.37615168,-0.4772691,0.23866276,0.26305285,-0.48178422,-0.15993476],[0.53497106,-0.27460927,-0.65378416,-0.22805771,-0.005714031,-0.46566615,0.8224319,-0.0432606,-0.23549485,0.26196745,0.4718395,-0.6079023,-0.5116151]],"activation":"identity","dense_3_b":[[0.04784515],[0.063176766],[0.085746326]]},{"dense_4_W":[[0.3336722,0.86872417,0.6722818]],"dense_4_b":[[0.065143235]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42170x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42170x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c44df15868 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42170x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.6815405],[1.3625606],[0.58612674],[0.04494688],[1.3312421],[1.3441323],[1.3557953],[1.3301966],[1.3021425],[1.2688354],[1.2291747],[0.044845853],[0.044869147],[0.044881903],[0.044806324],[0.04471491],[0.044416413],[0.04393822]],"model_test_loss":0.010017327032983303,"input_size":18,"current_date_and_time":"2023-08-12_17-39-46","input_mean":[[22.628992],[-0.11303276],[0.007194183],[-0.0077724075],[-0.11107788],[-0.112366706],[-0.11259246],[-0.11006202],[-0.10841513],[-0.104063615],[-0.09847846],[-0.0077845864],[-0.0077784657],[-0.0077716475],[-0.007819506],[-0.007886005],[-0.0080318935],[-0.0081485715]],"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.21272992],[-0.40113866],[-0.046252824],[-1.1976674],[-1.8280349],[0.43455112],[0.41996923]],"dense_1_W":[[-0.014234041,-0.78265864,-0.13875955,0.18335098,0.23734437,-0.50521135,0.36379108,-0.4259525,0.4898528,0.0040126243,0.019784093,-0.032719463,-0.4327173,-0.12524551,0.7217114,0.05992928,0.002012295,-0.20088603],[-0.036329545,-0.9737573,-5.137863,0.083788216,-0.005417048,-0.17019805,-0.02595917,0.034362078,-0.2063752,0.23753147,0.70431274,-0.3613305,0.05551018,0.15823703,0.08872215,0.075007804,0.04234053,-0.056786302],[0.00834581,-0.96139866,0.014483826,0.055574536,0.22303146,-1.4104741,0.92028916,0.087765716,-0.16381508,0.3775856,-0.3001809,0.12152302,-0.42909965,0.40768436,0.0117414165,-0.14114279,-0.15148588,0.26370925],[-0.52212185,-0.03799507,0.24594627,-0.28721508,-0.13069189,0.75029343,-0.48417374,0.043601163,0.30521616,0.23167257,0.03514275,0.32121775,0.11313678,-0.6157623,0.16969404,0.1570377,-0.20692776,0.15328379],[-0.72681564,-0.06951357,-0.28516898,-0.08874456,0.046744134,-1.0358999,1.0505315,0.013021108,-0.5818019,-0.11940496,-0.08663402,-0.30453667,0.6163768,0.28448704,-0.41274244,0.1396545,0.027995694,-0.04543083],[1.1373413,-0.22728406,0.34642276,-0.19258007,0.7746351,-0.67045534,0.95286924,-0.21672118,0.0045977663,-0.18956426,0.669332,0.022881322,-0.15852845,-0.11712322,0.21890385,-0.047339663,-0.076035015,0.09771824],[1.158495,0.4386377,-0.3719728,-0.2144668,-0.28061992,0.37479827,-1.125051,0.20529382,-0.20885709,-0.18522696,-0.35365984,0.9139095,0.5455004,-0.16538139,-0.90117735,-0.37809762,0.024544928,0.43491235]],"activation":"σ"},{"dense_2_W":[[0.9442889,0.06396063,0.1758221,-0.9002739,0.51660156,0.6283171,-0.15372173],[-0.21146928,-0.46287906,-0.3174703,0.52997434,-0.60623443,0.4278871,0.5900774],[0.36982772,-0.58558965,1.3331947,-0.12588388,0.73645073,0.71320856,-0.82657343],[0.9362422,0.39615652,0.15127127,-0.60997945,0.20599456,0.57852656,-0.34932035],[-0.051511385,-1.3649589,-0.30547243,0.5103264,0.15643549,-0.6987231,-0.78192246],[-1.0683442,0.5136093,-0.5176573,0.054374628,-0.79540557,0.30752757,-0.2061963],[-0.09987685,-0.041346654,-0.9594419,0.56500435,-0.41152915,-0.21413708,0.30724752],[0.24056341,0.9189844,1.2736111,-0.57043445,-0.6264625,1.476869,-0.63796276],[-0.39368296,-0.5534738,-0.6872756,-0.3378118,0.019038709,-0.16970441,-0.6788282],[-0.43239704,0.4175175,-1.1101261,0.14615986,-0.51680034,-0.4460474,0.18916978],[0.34036997,-1.2931368,0.24365155,0.36805943,-0.8831002,-0.78154045,-0.9917771],[-0.32418334,-0.21353374,-0.8684678,0.71919113,-0.3519593,0.29612234,-0.24847104],[-0.6143994,0.334264,-0.738587,0.38311487,-0.8502191,0.24822249,0.52923447]],"activation":"σ","dense_2_b":[[-0.046749797],[0.15821725],[-0.14121938],[-0.00466868],[-0.21171582],[-0.12640443],[-0.01650508],[0.043904293],[-0.39722887],[-0.041803863],[-0.17979127],[0.04611048],[-0.08694865]]},{"dense_3_W":[[0.47707623,-0.55884546,0.3642584,0.61173815,-0.45111135,-0.58238584,-0.6464996,0.51249677,0.17997093,-0.21995978,-0.25227636,-0.19393432,-0.58519727],[0.41195044,-0.34169996,0.24929023,0.4966983,0.04403884,0.22156799,-0.3648181,-0.08629075,-0.32962176,-0.35790387,-0.23305754,-0.5900693,-0.55587316],[0.16219983,-0.60253245,-0.13929227,0.70285386,-0.39211234,0.26089627,-0.09964737,0.33340716,0.12721112,0.27053747,-0.23665811,-0.37967107,-0.61005354]],"activation":"identity","dense_3_b":[[0.047260348],[0.057699345],[0.0503478]]},{"dense_4_W":[[-1.0821502,-0.70280385,-0.16161306]],"dense_4_b":[[-0.045549482]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42171x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42171x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..e36c7414c1 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42171x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.850636],[1.0534494],[0.559162],[0.039194528],[1.0216674],[1.0324214],[1.0434673],[1.0372584],[1.0196428],[1.0042849],[0.98527515],[0.039155982],[0.039141923],[0.03912828],[0.03902883],[0.03896556],[0.03880961],[0.03858737]],"model_test_loss":0.007366378325968981,"input_size":18,"current_date_and_time":"2023-08-12_18-05-25","input_mean":[[22.558586],[0.012600959],[-0.0025238749],[-0.0026826798],[0.012323804],[0.012055752],[0.012161658],[0.01208182],[0.013478406],[0.012696328],[0.0117868],[-0.0026575418],[-0.0026759468],[-0.0026921802],[-0.0026960133],[-0.0027045996],[-0.0027334057],[-0.0027859134]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.3723984],[-0.15515873],[0.11519163],[0.06005554],[3.4827287],[0.42637882],[-0.33662567]],"dense_1_W":[[1.635911,-0.8581116,0.60294753,0.22644173,0.56974345,0.537524,-0.28151554,0.49941906,0.39198443,-0.07235275,0.006073699,0.14474358,-0.32794192,0.13542445,-0.119024836,-0.14169936,0.3387417,-0.20942728],[-0.346328,-0.5516171,0.080080934,0.10132348,0.4069819,-1.2606146,0.53356946,-0.32096785,0.14152372,-0.19885544,-0.006135965,-0.4611887,0.13272883,0.46906894,0.044298,-0.22844265,-0.070147365,0.20264639],[-0.0017895487,0.4250715,3.6650927,0.09883716,-0.20037115,-0.10519589,-0.31081927,0.33351684,0.6235205,-0.24577214,-0.35088176,0.16477962,0.08359709,-0.12857589,-0.35176766,0.08673794,0.0882971,-0.0059149545],[-0.11156434,-0.07133895,-0.11842378,-0.2705628,0.3160349,-1.201357,0.64614654,-0.29452515,-0.03474319,0.040595938,0.13474983,-0.34016025,0.29270774,0.2156598,0.2662016,-0.095750175,0.18576562,-0.1266449],[1.566436,0.40248048,-0.5471031,-0.2949783,-0.33196628,-0.70656186,0.41840243,-0.17929772,-0.5059166,0.11792245,-0.014220853,0.08556844,-0.29646376,0.3219811,0.003027516,0.2374258,-0.16363016,0.069542915],[1.1214007,0.76452684,-0.106327794,0.3591528,0.45266876,-1.0236844,0.8478621,0.6426136,-0.08401936,0.3613498,-0.2025572,0.16258357,-0.3565566,-0.0661512,-0.29554963,0.25371164,-0.3117673,-0.017764365],[0.15459706,-0.6427235,-0.107100666,0.15153684,0.6515941,-1.4472166,0.28652865,0.64169884,-0.013493055,0.084728494,-0.08627843,-0.32101175,-0.511683,0.23642686,0.5705781,0.32341844,0.04121637,-0.35112992]],"activation":"σ"},{"dense_2_W":[[-0.7762452,-0.849805,-0.46875656,-0.74493283,0.18020831,-0.4340312,0.25214154],[-0.29184672,-0.7365605,-0.595678,-0.13487294,-0.027134769,-0.20032321,-0.112272106],[0.58472466,-0.82953453,-0.005004089,-0.5499627,0.17766191,-0.20011434,-0.5746712],[0.18799576,-0.08261969,-0.26112568,-0.27001104,-0.38785893,0.10126745,-0.7606747],[0.44626936,0.12008678,0.2681783,-0.8564858,0.13984889,0.1533924,-0.8285644],[0.034566738,0.8191327,-0.3085401,0.77344036,-0.120254815,0.10792034,0.12895963],[-0.74384415,0.62587434,-0.0201533,0.43589312,-0.37061056,0.17112038,0.5242522],[0.2502627,-1.4431168,0.52936316,0.5863533,-1.8113189,-0.40397888,-0.21871096],[-0.6663258,0.44417387,-0.7050019,0.6507446,-0.296155,-0.55173874,-0.3932162],[-0.3191022,-0.4508303,-0.6623701,-1.0217099,-0.26747382,-0.14080943,0.05274293],[0.7867121,-0.5575085,0.38432392,0.3111023,-2.326249,-1.2271587,-0.10263035],[-0.01625549,0.5269726,-0.6120971,0.53062654,0.41914165,0.58355737,0.03725023],[-0.14983092,-0.43453297,0.32586545,0.15301059,-0.298674,-0.38269258,-0.12950632]],"activation":"σ","dense_2_b":[[-0.2599826],[-0.23439017],[0.092643164],[0.010998941],[0.09755141],[-0.10229962],[-0.06416034],[0.17825136],[-0.17380705],[-0.22213228],[-0.01849935],[-0.037762668],[-0.034081236]]},{"dense_3_W":[[0.24201153,0.27176222,0.48346063,0.45460057,0.5518781,0.11765685,-0.45951,0.040261418,-0.32136354,0.42783323,0.2824862,-0.4817042,-0.3478935],[0.25385153,0.13409254,-0.61687577,-0.41602758,-0.31623435,0.6585921,0.4292418,-0.48805797,0.1712523,0.39033636,-0.45903277,0.52522135,-0.5536476],[-0.42142174,0.49712908,0.0066777696,0.19092213,-0.19024393,-0.51191115,-0.51730525,-0.145093,-0.37869886,-0.6067165,0.27452636,0.5235049,0.5219291]],"activation":"identity","dense_3_b":[[-0.0019366292],[-0.004374928],[0.023441652]]},{"dense_4_W":[[1.1235595,-1.012536,-0.048990816]],"dense_4_b":[[0.00054319843]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42180x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42180x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..f6e6875fb6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42180x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.5956964],[0.71566606],[0.40817738],[0.030724205],[0.697758],[0.7050867],[0.7110168],[0.7090755],[0.704616],[0.7050678],[0.7017272],[0.03057917],[0.030627273],[0.030674666],[0.030662438],[0.030695168],[0.030730452],[0.030547515]],"model_test_loss":0.005593742243945599,"input_size":18,"current_date_and_time":"2023-08-12_18-31-36","input_mean":[[18.236588],[0.10607195],[-0.03237979],[0.01414653],[0.10869373],[0.10751717],[0.10631519],[0.095033936],[0.09223452],[0.08335266],[0.075875334],[0.014149798],[0.014185712],[0.014213116],[0.014326014],[0.014364046],[0.014352649],[0.014447873]],"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.21198542],[-2.6553576],[0.20141259],[0.95158356],[-0.5720143],[0.39397573],[-0.4670486]],"dense_1_W":[[-0.00029343241,-0.49663246,0.017366314,-0.12524623,0.020472532,-0.89937484,0.38001934,0.084407,0.0400682,-0.055563126,-0.091518156,-0.057863355,0.076088704,-0.047266904,0.11677408,-0.11511501,0.08395411,0.07032127],[-1.1604841,0.50435513,0.10866094,-0.38009703,-0.067992724,0.8220403,-1.8998632,0.6885379,0.45261034,0.09571614,-0.39597392,-0.3781081,0.03911253,0.39478612,0.39906728,0.059939872,0.06685323,-0.2039767],[0.86580884,-0.6447551,0.06702498,0.3656542,0.49015638,-1.1621298,0.70610285,0.38969237,0.4859566,0.36371088,-0.5152764,-0.43576756,-0.3097063,0.059733965,0.5456647,0.20413095,-0.28141046,-0.13499509],[0.9506561,0.33130687,0.055115584,-0.35157964,0.1601246,0.5376464,-0.7747868,-0.28408384,0.09547507,-0.23935354,0.24678634,0.25146312,0.43105263,0.010345131,-0.64360464,-0.1637928,0.4655862,-0.011340331],[0.011468432,1.1100329,6.454579,-0.09630004,-0.09938363,-0.035011847,-0.51070076,0.32011735,0.28890565,-0.0070284377,-0.8069142,0.36875013,-0.10292811,0.04136438,-0.4851647,0.10500297,0.22695696,-0.022597108],[0.55722225,0.2913517,0.06907888,-0.1502978,-0.5804214,1.1116054,-0.7745691,0.1985203,-0.11460045,0.14750798,-0.1172053,-0.00924517,0.25824112,-0.13810264,0.19143151,-0.018714879,-0.36252472,0.21987407],[7.108331e-5,-0.16992536,0.5472812,-0.37839067,0.18227997,1.005237,-0.9246754,0.05019804,0.19119476,0.20836721,-0.09654861,0.2401787,-0.40744683,-0.31037423,0.24721394,0.035022534,-0.0010219115,-0.37515312]],"activation":"σ"},{"dense_2_W":[[0.031580374,0.32096317,0.08259337,0.48913407,-0.24779709,0.47663438,-0.27535772],[-0.7346924,-0.08216103,0.05271296,-0.2585462,-0.16613883,0.035694335,0.6171577],[0.37460434,0.7498522,-1.41457,-1.657875,-1.2513721,-1.2112695,0.19442175],[-0.43960452,0.89257705,-0.25445974,0.07596238,-0.4224754,0.4412636,0.714036],[-0.21586035,-1.074201,0.49453756,-0.54887825,0.26405144,-0.68578094,-0.7791566],[-0.38307914,0.5247953,-0.21214375,0.52114254,0.33317557,0.21650434,-0.05312382],[0.46901834,-0.32129788,0.8633818,-0.29700297,-0.2139187,-0.39682165,-0.5993696],[1.3140488,-0.8290484,1.0804474,0.47383633,-0.5198381,-0.58393943,0.035804532],[-0.22552004,0.030722179,-0.70003814,0.339238,-0.08206504,-0.425623,-0.1990634],[0.71316224,-0.49133265,0.12954167,-0.7012649,-0.14375544,-0.21532835,-0.18687665],[0.99007577,-1.001546,0.5625099,-0.7423299,0.2236182,-0.14007774,-0.33882037],[-0.5948786,0.55410933,-0.36279666,0.11258444,0.5546571,-0.18480037,-0.37986085],[-0.9709514,-0.048795592,-0.0681278,0.24821533,0.3230478,0.041420642,0.60907954]],"activation":"σ","dense_2_b":[[-0.08150623],[-0.09351969],[0.036499698],[-0.12114925],[0.1371385],[-0.17559104],[0.16320653],[0.39418298],[-0.25063452],[0.045626037],[0.14293382],[-0.19067796],[-0.14629959]]},{"dense_3_W":[[0.1686224,0.077352226,-0.7372458,0.54665744,-0.39950836,0.30807123,-0.34158686,-0.50262797,0.31327793,-0.1562205,-0.21310961,0.46808118,0.6072344],[-0.38100314,-0.32793987,-0.36607596,0.250266,-0.46443465,-0.37167656,0.50372356,0.51983595,-0.038650624,0.008295879,0.07703269,0.04023035,-0.12850939],[0.27967122,0.4289127,-0.5830814,0.40497577,-0.31304854,0.30774248,-0.46728247,-0.48856315,-0.5128953,-0.46290538,-0.5038767,0.021850327,0.48637435]],"activation":"identity","dense_3_b":[[-0.030914357],[0.019430986],[0.018790174]]},{"dense_4_W":[[1.097547,-0.026450653,0.49955416]],"dense_4_b":[[-0.025014628]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42181x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42181x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..2570b49139 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'8965B42181x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.209153],[0.56191576],[0.30280617],[0.029290121],[0.56198466],[0.5629255],[0.5632454],[0.5529423],[0.5457737],[0.5399884],[0.5333994],[0.029308232],[0.029312193],[0.029313201],[0.029210748],[0.029177375],[0.02916549],[0.029083245]],"model_test_loss":0.0059767006896436214,"input_size":18,"current_date_and_time":"2023-08-12_18-56-01","input_mean":[[21.154913],[0.010469119],[0.00451821],[0.020266687],[0.009149304],[0.0099420305],[0.010431521],[0.011106589],[0.013026866],[0.015419768],[0.018629367],[0.020197067],[0.020221224],[0.020262599],[0.020369908],[0.020377211],[0.02038677],[0.020427668]],"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.032562368],[0.2667309],[-3.3975918],[-0.16405424],[3.4655445],[-7.2675724],[-1.1106223]],"dense_1_W":[[0.2530883,0.53237253,0.022144921,-0.20935972,-0.5053756,1.1278487,-0.7458744,-0.03808766,-0.08444307,0.12516658,-0.025194744,0.5732315,-0.14615831,-0.35127425,-0.15609278,-0.081573084,0.2889299,-0.056264035],[0.34920308,0.17837015,-0.018961329,0.22636858,0.41322023,-1.1747947,0.8681209,-0.53292376,-0.44061154,0.23169354,0.09196306,-0.4216225,-0.040040225,-0.028847596,0.5770588,-0.04013367,0.15739974,-0.29588875],[-1.2440773,2.9741986,-0.015545401,0.6699104,0.10026246,2.3330846,2.2823873,-0.6999431,-3.0649312,0.6264743,1.9608381,0.023817599,-0.6748272,0.24278682,-0.4272999,0.48700577,-0.053938422,-0.14937739],[0.12704581,-0.74948984,-5.975789,-0.3972795,0.97803533,-0.7561826,0.34060618,-1.0813448,-0.4782963,0.5196659,0.56873465,-0.14966846,-0.20922862,0.39868122,-0.17166515,-0.09302081,0.5862183,0.30957884],[1.4973711,-1.017241,0.020719383,-0.7863886,0.08703435,0.023158638,0.9363649,0.34963033,0.030911481,0.08855366,-0.034877688,0.09213344,-0.2908485,0.6495234,0.08364163,0.039586175,0.41629386,-0.2841797],[-2.6902182,-1.454271,0.010997178,-0.28280547,0.757442,-0.34354633,1.3582447,-0.3404384,-0.058033567,0.22861616,0.13654716,-0.35976127,0.3847413,0.6788782,-0.13538547,-0.715732,0.10295989,0.2687211],[0.7631619,-3.5063555,-0.0073654596,-0.5252896,-2.02067,-3.7005508,-1.8967742,-0.3488098,-0.4290062,-1.0894184,-0.8274565,0.20361504,-0.06869336,-0.00241295,0.15396996,0.13525395,0.19794835,-0.16415168]],"activation":"σ"},{"dense_2_W":[[-0.48136654,-0.9834331,0.32757175,-1.0854254,-1.5122548,0.03486615,-0.36054364],[-0.54480904,0.4169905,-0.61831635,0.10131936,0.5399218,0.059965108,0.30036604],[-1.655585,0.38479826,1.2823216,0.40274566,-0.2841753,2.3214834,-0.7712572],[0.61412394,-0.25269333,0.42487213,0.27490515,-0.10738923,-0.2351683,-0.027205668],[0.016566647,-0.8527608,-1.2557126,-0.6651972,-0.2184166,-1.6755227,0.7370958],[0.87999916,-0.8127039,0.2320283,0.12997639,-0.026233492,-0.923599,0.28825673],[1.0059335,3.5542972,-2.7622373,0.606758,2.7553868,-3.272648,3.1044261],[1.2445208,-0.57529145,-0.018139282,0.16910729,-0.47984317,-0.32202503,-0.40446222],[0.59024185,-0.15905726,-0.0014694524,-0.13362607,0.05351007,-0.23868667,-0.34731996],[1.6630312,0.10935514,2.5811799,-0.5959014,1.0950274,-2.4247248,-0.32879606],[0.42110145,-0.5520846,-0.30354732,0.4258476,0.12350095,-0.42948973,-0.33731243],[-0.10480609,1.0622531,-0.70043504,0.7745802,1.81419,-0.5862416,0.9866968],[0.892946,-0.8087333,0.85307103,0.16791096,-0.089219026,-0.49379104,-0.23497693]],"activation":"σ","dense_2_b":[[-0.15048273],[-0.005168303],[-0.033159684],[-0.1512387],[-0.26582178],[-0.069072716],[0.8422594],[0.08777569],[-0.010337959],[0.4020618],[-0.13930158],[0.27973402],[0.022490095]]},{"dense_3_W":[[0.023880383,-0.64809823,-0.04122315,0.5025599,-0.37605396,0.44815058,0.2004994,0.12245838,0.060301386,-0.092283376,0.20429155,-0.4129402,0.1394047],[0.13174233,0.12339004,-0.77201855,0.41352215,0.20950833,0.6537427,-0.7955242,0.025324047,0.0014908814,0.63648015,-0.014125444,-0.052981257,-0.31764406],[0.73352814,-0.40766987,-0.43053687,0.12957405,0.37287924,0.381178,-0.84177256,0.78270406,0.44731426,0.5089168,0.26753783,-0.45765585,0.35287583]],"activation":"identity","dense_3_b":[[-0.03262107],[-0.05573517],[-0.069711655]]},{"dense_4_W":[[0.03428719,0.48351324,1.3998046]],"dense_4_b":[[-0.06378867]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01200x00x00x00x008965B0R02200x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01200x00x00x00x008965B0R02200x00x00x00x00'.json new file mode 100755 index 0000000000..e7ee2b96ae --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01200x00x00x00x008965B0R02200x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.59677],[1.2723572],[0.5889571],[0.044212513],[1.2523131],[1.2586851],[1.2638719],[1.2450465],[1.227399],[1.2008731],[1.1704836],[0.044007845],[0.044053588],[0.04408408],[0.044052377],[0.043957964],[0.043728314],[0.043399837]],"model_test_loss":0.007355204783380032,"input_size":18,"current_date_and_time":"2023-08-12_19-23-58","input_mean":[[22.276354],[-0.037774753],[-0.007627978],[-0.011369784],[-0.037570585],[-0.038871903],[-0.040346414],[-0.040468186],[-0.040564455],[-0.03907898],[-0.037528113],[-0.011408063],[-0.011410129],[-0.011406415],[-0.0112786535],[-0.011247568],[-0.011202381],[-0.011247169]],"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.5261913],[-3.268581],[-0.029488502],[0.19144095],[-0.13675566],[0.12416384],[3.4747343]],"dense_1_W":[[-0.05226453,-0.24290532,-0.006649759,-0.2001671,0.09439727,-0.8264187,0.89495164,0.10392995,-0.09171039,-0.025333034,-0.018208345,-0.0045733196,0.07264264,0.17861007,0.2659576,-0.2747786,-0.35005352,0.31092092],[-1.4148408,-0.5394024,-0.25498414,-0.19303249,-0.2991067,-0.4224668,1.5064957,-0.47802028,-0.10831802,-0.091429316,-0.19356096,-0.3577177,0.48197216,0.13847184,0.45745626,-0.6015107,-0.19103733,0.25586933],[-0.015936209,-0.49370927,0.019225124,0.28393698,0.3275402,-1.0504159,0.8342227,-0.47017115,0.261455,0.11170544,-0.2031133,-0.6536298,-0.1680887,0.4808763,-0.014751369,0.033018075,0.37287006,-0.33709157],[-0.058008436,0.2024408,0.010655787,0.08164171,0.07408095,0.9617647,-1.2104056,0.081101894,0.20298839,0.08843122,-0.038386825,0.12976207,0.15168756,0.2055462,-0.6481027,-0.41196758,0.44144708,0.039478734],[0.006327593,1.225342,5.0604053,-0.32776642,-0.7639897,0.25207078,-0.25701052,0.27489042,0.7114278,-0.030908214,-1.028742,0.5304315,0.58392227,-0.3043921,-0.20152508,-0.217611,-0.5092573,0.44345003],[-0.005554315,0.6300724,-0.008829019,0.120132565,-0.0025714925,0.65304613,-0.54008144,0.36489114,0.60639745,-0.013963489,-0.41547593,-0.08670717,-0.31030667,0.011262129,0.0887775,-0.084896035,-0.3349578,-0.08532151],[1.4905181,-0.054565854,-0.26902393,0.3803058,-0.16003686,-0.19756374,0.59131384,-0.33023885,-0.21001525,-0.16574259,-0.14300068,-0.40850276,0.3227794,-0.06551579,-0.043412447,-0.26335156,0.075089745,0.0049520573]],"activation":"σ"},{"dense_2_W":[[0.6818973,0.09662785,0.85118216,-0.5597033,-0.51376563,-0.54998875,1.1681647],[0.11423674,1.5319918,0.5061838,-0.93979394,-0.83879524,-0.30968133,-0.8372116],[0.10013085,0.99290025,0.58343273,-1.0841141,-0.051542744,-0.5877158,-0.34524262],[0.30525035,2.2245643,0.78550303,-1.3862584,-0.86583656,-1.0520891,-0.75581723],[0.42648727,0.535297,0.8396946,-1.0172952,0.33770114,-1.0176997,-0.2623012],[-0.8693874,-0.047947355,-0.5417374,0.7271871,0.28763005,0.6387064,-1.211415],[0.24115744,1.5529282,0.49222645,-1.2373098,-0.4833875,-0.2019102,-0.48312268],[0.067739554,1.5064629,0.62205225,-0.7509757,-1.1738783,-0.25657117,-0.88183194],[-0.8212304,-0.18271463,-0.057214897,-0.032312606,0.24952747,-0.11964027,-1.2044641],[-0.93778396,0.48313844,-0.7947098,0.005431058,0.4053761,0.51689285,-1.1750771],[-0.97015196,0.19310886,-0.8617701,0.16075231,0.02563181,0.19641571,-0.2102881],[-1.4093407,1.1116021,-1.282566,0.67514616,0.7852251,0.6313887,-1.5295231],[-0.7758126,-0.17416649,-0.65078825,0.99865323,-0.19658208,0.2925777,-0.52684647]],"activation":"σ","dense_2_b":[[-0.007298762],[-0.5215708],[-0.26419812],[-0.39559385],[-0.1565479],[-0.04413851],[-0.48452112],[-0.63588786],[-0.060304374],[-0.08904473],[0.00323588],[0.005885602],[0.16125442]]},{"dense_3_W":[[0.6738338,0.24916402,0.48290968,0.9055114,0.4307571,-0.6490499,0.77687776,0.041201606,-0.46112925,-0.6019568,-0.7511755,-0.5311844,-0.9066927],[0.55784255,-0.05097351,0.6607086,0.01611087,0.48693258,-0.5370103,-0.2871033,0.40592095,-0.09984769,-0.1430968,-0.6162407,-0.5603644,-0.298156],[0.056438137,-0.6330188,-0.16844268,0.7197222,0.15123138,0.111305945,0.41622633,0.04650888,0.45203698,-0.6876475,0.39633313,-0.6461186,-0.060092986]],"activation":"identity","dense_3_b":[[-0.07432213],[-0.06564714],[-0.075471886]]},{"dense_4_W":[[-0.7008827,-0.1666988,-0.049054958]],"dense_4_b":[[0.071705334]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01300x00x00x00x008965B0R02300x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01300x00x00x00x008965B0R02300x00x00x00x00'.json new file mode 100755 index 0000000000..b61e726f55 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01300x00x00x00x008965B0R02300x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.78665],[1.1481314],[0.5406096],[0.039362922],[1.122932],[1.1308159],[1.1390376],[1.132657],[1.116679],[1.0969441],[1.0693002],[0.03927925],[0.039297566],[0.03930563],[0.0391093],[0.038840305],[0.03844836],[0.03801854]],"model_test_loss":0.006799423601478338,"input_size":18,"current_date_and_time":"2023-08-12_19-50-55","input_mean":[[22.356323],[-0.06985197],[0.00034995607],[-0.006157977],[-0.06978653],[-0.070587754],[-0.07151841],[-0.06944062],[-0.0665041],[-0.06379645],[-0.056661922],[-0.006219425],[-0.0062195924],[-0.0062180334],[-0.0062626824],[-0.006254376],[-0.0062909345],[-0.0063469317]],"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.26157844],[-3.8585093],[-0.056915253],[0.4083386],[0.12701957],[3.294551],[-0.011678797]],"dense_1_W":[[-0.017985545,-0.8749716,-0.05120776,0.67056817,0.1291728,-0.97086567,0.46367484,-0.20084848,0.33947694,0.118452,-0.07002966,-0.34398422,-0.027073678,0.5324926,0.094694346,0.5049914,0.31055605,-0.0054265293],[-1.4531353,0.09739576,-0.27593565,-0.3858397,0.09826383,-1.2416679,1.3741181,-0.5542574,-0.5062809,0.07726387,0.020567052,-0.49037158,0.21178146,0.7057941,0.033919472,0.1661194,-0.23747294,0.034861527],[-0.0022317865,1.2110817,5.054823,-0.3174173,-0.5742262,-0.15558177,-1.1665634,0.4472988,0.7720721,0.88218236,-1.1828778,0.6001719,-0.02098756,-0.3855406,-0.040552955,0.013535376,-0.0024735162,0.12027036],[-0.11180433,0.16049975,0.03677955,0.12961647,-0.2533068,1.1377895,-0.8505473,0.22427894,-0.13692026,-0.008696595,0.07835157,0.09832897,-0.14512521,-0.122960515,-0.024571015,0.11796106,-0.04595939,-0.025691045],[-0.3685039,-0.23575602,0.066452056,-0.07549508,0.41795194,-0.64417434,0.42375267,0.11620539,-0.27086356,-0.21933734,0.3035312,-0.105002984,-0.06251225,-0.01299668,0.26163852,-0.068665646,0.29290092,-0.22712018],[1.2734846,0.058355737,-0.24286984,0.37113938,-0.109489724,-0.5431782,0.74100715,-0.44564164,-0.23814303,0.03617263,-0.045741204,-0.4850852,0.37123144,-0.04264438,-0.179189,0.18089756,-0.20485662,0.024584953],[-0.008104353,-0.44774678,0.017182589,0.25728852,-0.18980739,-1.1090665,1.0207343,0.018984688,-0.23286112,0.07714398,-0.066708885,-0.42167252,0.033037923,-0.10394543,0.2788337,0.29151297,-0.11658049,-0.12395523]],"activation":"σ"},{"dense_2_W":[[-0.006371241,0.07629968,0.4152738,0.45680737,-0.399096,-1.0571772,-0.77203304],[-0.114975244,-0.78080434,0.33340687,0.5302852,-0.30048347,-0.95070535,-0.059019156],[0.0917907,-0.6346803,-0.03395308,0.27547774,-0.5208018,-0.56345195,-0.42710516],[-0.53994197,-0.08138468,-0.10966242,1.0073916,-0.22134155,-0.4202999,-0.558325],[-0.0911323,0.1374469,-0.05927406,-0.18155636,0.46053857,0.037110776,0.6041021],[0.044924278,1.207312,-0.80209786,-1.0643513,-0.19404407,-0.4108685,0.552001],[-0.20629992,0.87369746,0.38171571,-0.8638534,0.297487,0.10098056,0.809521],[-0.112105414,0.162961,-0.2513493,-0.67849934,0.5619054,0.33094102,0.75464505],[0.27615786,0.43389356,-0.113371626,-1.0247736,0.27918342,-0.2875816,0.69900244],[0.09716652,-0.2904934,0.36968207,0.40281,-0.42739582,-1.1725587,-0.46363854],[0.013255812,-0.4462732,0.1877262,0.54117006,0.09497548,-0.9675889,-0.5686861],[0.2776247,-0.28995666,0.21805735,-0.6418641,-0.6156117,0.044422686,2.309031e-5],[0.26508242,0.77385896,0.0650336,-0.37672806,0.4043684,0.22012536,0.032721337]],"activation":"σ","dense_2_b":[[-0.10330615],[-0.033679716],[0.045983385],[0.11898316],[-0.08782593],[-0.23800431],[-0.1865168],[-0.00038356465],[-0.15165646],[-0.14285177],[-0.032520227],[-0.14164776],[-0.17053805]]},{"dense_3_W":[[-0.45539868,-0.3461434,-0.62710863,-0.75514674,0.14802113,0.7396569,0.13793553,0.5599326,0.21306054,-0.16648014,-0.70004004,-0.02903243,0.519504],[-0.3650457,-0.3078859,0.5707353,0.12494614,-0.4517208,0.6094919,-0.27713495,-0.5677946,0.530929,0.026477134,0.34963655,0.25523546,0.07211842],[0.40082094,0.29107258,0.15391554,0.028763723,-0.07464035,-0.20093055,-0.6449461,-0.21919955,-0.18354571,0.67392844,0.4189149,-0.19322155,0.3498275]],"activation":"identity","dense_3_b":[[-0.002849253],[0.04010156],[-0.008000429]]},{"dense_4_W":[[-1.1442624,-0.018074226,0.46292245]],"dense_4_b":[[0.00046221056]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01400x00x00x00x008965B0R02400x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01400x00x00x00x008965B0R02400x00x00x00x00'.json new file mode 100755 index 0000000000..cbba3e3e97 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019 b'x028965B0R01400x00x00x00x008965B0R02400x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.339975],[1.3256136],[0.593127],[0.04754541],[1.3010378],[1.3100988],[1.3191553],[1.2989383],[1.2751849],[1.242973],[1.2088765],[0.047443245],[0.04748061],[0.04751091],[0.047400266],[0.047291804],[0.0470829],[0.04672949]],"model_test_loss":0.007941454648971558,"input_size":18,"current_date_and_time":"2023-08-12_20-18-02","input_mean":[[22.804787],[-0.0012492489],[0.0049283556],[-0.0027200934],[-0.0009171635],[-0.0005450689],[-0.00045307644],[0.0014277239],[0.0042266008],[0.004571549],[0.007173938],[-0.002649595],[-0.0026737156],[-0.002687819],[-0.0027264915],[-0.0028076714],[-0.0028791525],[-0.0030240817]],"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.05866234],[4.095448],[0.05124582],[-4.5607123],[-0.5631151],[0.019527452],[-0.044129238]],"dense_1_W":[[-0.030550428,-0.08043591,0.08307903,0.24843186,0.23929211,0.71641713,-0.8338393,0.16555603,0.2527681,-0.11340044,-0.034163836,0.21635275,0.48766017,-0.4958458,-0.12009069,-0.45047837,-0.40487534,0.5188204],[1.3933464,0.39291653,0.20624635,0.28392497,-0.20537527,0.33041698,-0.82583904,0.5374484,0.5927526,0.05136005,0.06089886,0.0043515163,-0.0073857335,-0.6039868,0.1363052,0.13789289,-0.076400414,-0.2556218],[0.00040147355,-1.2506115,-4.6456604,0.022542994,0.6865295,0.030435719,0.6394426,0.289509,-1.2726502,-0.48925576,1.074512,-1.0973631,-0.17780465,0.30962852,1.0192771,0.8037391,-0.07365006,-0.7483875],[-1.4990337,0.4968039,0.22349183,0.32746932,0.12910442,0.20665137,-1.306896,0.6917486,0.79503983,-0.16803351,0.15006495,0.06984487,-0.42613754,-0.23034474,0.035791446,0.18769096,-0.095758244,-0.27291724],[0.17470996,0.32795563,0.034444466,0.06723942,-0.6096647,0.8110515,-0.2520832,0.11456141,-0.15719128,0.21490517,-0.105078675,0.40423924,-0.10924174,-0.4147324,0.01310793,0.060144518,-0.13492018,0.059378713],[0.006133638,-0.3088513,0.04955513,0.17181134,-0.07184565,-1.4350437,1.1074777,-0.13354936,0.06834596,0.08551515,-0.19919638,-0.08143802,-0.55520076,0.52157044,0.25806877,-0.13898116,-0.09956009,0.13659504],[-0.508209,0.31000626,-0.037681013,-0.057895504,-0.75460684,1.1465745,-0.8317998,0.35057747,0.09632918,-0.20959972,-0.16074719,0.056147385,0.076875456,0.13462108,-0.33426112,-0.027258357,0.3241483,-0.0732327]],"activation":"σ"},{"dense_2_W":[[0.25001925,-0.5711229,-0.88617605,-0.18417396,0.33657238,-0.07999938,0.10933263],[-0.015448602,-0.8196552,-0.31138465,-0.77860475,-0.6738751,-0.08348504,-0.19269453],[-0.41236618,-0.9773098,0.30927274,-0.60864997,-0.016705617,0.75516015,-0.3620944],[0.51392204,-0.35382575,-0.71654284,0.69806784,0.35409018,-0.7125174,-0.3585419],[-0.34544718,-0.212541,-0.46838158,-0.348286,-0.4673545,0.73423237,-0.7466479],[-0.2571807,-0.87686163,-1.0323783,-0.3470508,-0.44749308,-0.8353898,-0.72766614],[-0.8385732,-0.82968605,0.104628935,0.20757905,-0.32339612,0.497941,-0.26445195],[-0.80247515,-0.6636023,-0.5110591,0.2453179,0.20732372,-0.01901174,-0.82556474],[-0.76035863,0.0074476735,0.33188587,-0.31674412,-0.50591946,0.853444,-0.20236208],[0.0013595351,1.0197767,-0.6925592,0.45688447,0.60580957,-0.26385808,-0.050980914],[0.06841057,0.7079414,-0.087536745,0.8707849,0.67308784,-1.2102008,-0.31384364],[-0.089014076,0.22765215,-0.22885361,1.1801783,0.64802265,-0.72977227,0.076044604],[-0.2654659,-0.74361503,0.40524837,-0.32977498,-0.7657364,0.167108,-0.52621794]],"activation":"σ","dense_2_b":[[-0.4408888],[0.090220116],[0.09630298],[-0.30440426],[0.0277946],[-0.4173861],[-0.08740925],[-0.4363536],[0.07060309],[0.0055395924],[-0.32225478],[-0.42043456],[0.027541628]]},{"dense_3_W":[[0.009158828,-0.64987886,-0.32672417,0.33792084,-0.6813809,-0.12942642,0.0065088505,0.36009103,-0.46551788,0.650782,0.3398156,0.33237734,-0.29790145],[0.17885834,0.018317161,-0.103069186,0.0333603,-0.009732622,0.43167624,-0.27477983,-0.29342014,-0.64711416,0.37721634,0.38430053,0.1257458,-0.2783452],[-0.06386373,-0.34565896,-0.5648887,-0.14779678,-0.1418012,-0.085997246,-0.26618838,-0.57671523,-0.24667156,-0.3074685,0.5998481,0.28325394,-0.39654872]],"activation":"identity","dense_3_b":[[0.06877291],[0.064048566],[0.089000046]]},{"dense_4_W":[[1.4214735,0.3623055,0.6621128]],"dense_4_b":[[0.07191435]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019.json new file mode 100755 index 0000000000..155aa27712 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.244548],[1.5275985],[0.6107275],[0.046586774],[1.4886055],[1.5034448],[1.516418],[1.4891112],[1.4557259],[1.4174078],[1.3739654],[0.046419684],[0.046444356],[0.046451736],[0.046329428],[0.046216674],[0.04595779],[0.04549419]],"model_test_loss":0.012242425233125687,"input_size":18,"current_date_and_time":"2023-08-12_17-12-26","input_mean":[[22.124489],[-0.06681358],[-0.0017872587],[-0.007304861],[-0.068287455],[-0.06810858],[-0.068098135],[-0.06760926],[-0.064708285],[-0.06156465],[-0.05595117],[-0.00735773],[-0.0073575596],[-0.0073616607],[-0.007393436],[-0.0074092923],[-0.007485401],[-0.007535655]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.1266818],[1.2665837],[-0.0057515856],[0.021575607],[3.145306],[-0.015559701],[0.023866596]],"dense_1_W":[[1.8619034,0.2318498,0.010758091,0.17204547,0.178258,0.8156095,-1.2977135,-0.4021356,0.015441509,0.051510673,0.08473766,0.25257683,-0.08047843,-0.5401921,0.37597016,-0.25112596,0.11061834,-0.04145345],[0.6234877,0.39512575,0.029949188,-0.06756969,0.3141993,1.1970576,-0.9448964,0.4692527,0.4956762,-0.30381662,0.07292307,-0.11752247,-0.20445238,0.27772313,0.2778997,-0.20992711,-0.023655668,-0.03751188],[-0.09121854,-0.6526218,-0.008271368,-0.030463165,0.084578365,-1.1863025,0.71669704,-0.15648295,0.17038843,0.16980262,-0.2854215,-0.39527944,-0.29325402,0.4517195,0.58793545,-0.078027494,0.112520106,-0.19935027],[0.04239312,1.1436936,5.7977223,-1.2159046,-1.0222747,-0.018097226,-0.37114885,0.30876333,0.6447345,0.05005192,-0.3040888,0.3811603,0.53224164,-0.033966746,0.17231053,0.052680492,0.23297076,-0.20054573],[2.028991,-0.054335885,-0.050801482,0.22889599,0.034708247,-1.0235145,1.2738502,0.19607924,-0.6348713,0.3133455,-0.0084064,0.021044038,-0.19193278,0.24242897,-0.3887398,0.1055326,-0.14184418,0.124946855],[-0.15122393,0.6909391,-0.03846719,-0.2270961,-0.37185147,1.1930336,-0.83393574,0.019238736,-0.21900049,0.11245591,0.06722247,0.12010414,0.40301353,-0.5959846,-0.014899062,0.31775734,0.16264969,-0.20392336],[0.01964954,0.28060383,0.26928812,0.262222,-0.11968318,0.7917884,-0.94788104,0.24767427,0.5285209,0.20321472,-0.57217216,0.20230694,0.0041204365,-0.14682977,-0.1698623,-0.464828,-0.13932788,0.25505906]],"activation":"σ"},{"dense_2_W":[[0.07229978,0.043845255,-0.56071085,-0.37639382,-0.40895855,0.75563765,0.8920604],[-0.068550885,-0.2143043,0.8185382,-0.26352042,0.5178714,-0.88407123,-0.11102227],[0.80396324,0.084928855,1.9896538,-1.2700796,1.9254806,-0.6978969,-0.66902035],[-3.2066817,-1.9363941,0.8663164,-1.005594,-0.19276151,0.18454145,-0.32200423],[0.2388041,-0.3560892,-0.6499542,0.27040178,-0.4285769,0.50025755,0.4411526],[-0.5105194,0.6164994,0.40899366,-0.6055838,0.6227542,-0.3112731,-0.7521502],[-0.32484958,-0.49589607,-0.44490832,-0.23112644,-0.27562693,-0.39052173,0.1971162],[0.412541,0.319048,-0.79024744,-0.2737245,-0.6196046,0.015550856,0.43303803],[-0.28605422,-0.13784991,-0.24433006,-0.17126347,0.14660196,-0.3652191,0.36726522],[0.24914217,-0.5839129,1.1011901,0.48133576,1.1741915,-1.2662312,-0.41844484],[-1.4900029,-1.4929997,-0.24996275,-0.50023335,-0.65646017,-0.5239063,-0.16179247],[-2.2904916,-1.4458047,-0.10081112,-0.33487344,-0.16292852,-0.32974166,-0.41704106],[-0.12204984,-0.049235914,-0.7661266,0.20250078,-0.19582883,0.2884153,0.6099948]],"activation":"σ","dense_2_b":[[0.11034473],[0.04505026],[0.45456424],[1.1033564],[0.020434767],[-0.061051648],[-0.030366903],[0.06634181],[-0.039427042],[-0.17920223],[-0.12165889],[-0.071725644],[0.0007172712]]},{"dense_3_W":[[0.037582874,0.3922276,0.15515213,0.32579648,0.0045574703,-0.08303329,-0.35669035,-0.2959597,0.22798133,-0.00853858,0.26190194,-0.2177828,-0.051661514],[-0.6728899,0.60465753,0.37104872,0.84813213,-0.75632805,0.4609253,-0.123116,-0.16484596,-0.043769807,0.29626662,0.4587799,0.3421823,-0.5048559],[-0.31732032,-0.24499367,0.5200649,0.16775814,0.11487889,0.5378913,0.294093,-0.5565743,-0.33720338,0.0644005,-0.47207704,0.24707094,-0.1313763]],"activation":"identity","dense_3_b":[[-0.06704118],[-0.07568502],[-0.06689809]]},{"dense_4_W":[[-0.38717636,-1.245721,-0.60878205]],"dense_4_b":[[0.07232816]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2022 b'x028965B0R01500x00x00x00x008965B0R02500x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2022 b'x028965B0R01500x00x00x00x008965B0R02500x00x00x00x00'.json new file mode 100755 index 0000000000..0380b8728e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2022 b'x028965B0R01500x00x00x00x008965B0R02500x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.323066],[1.4018469],[0.567659],[0.04745886],[1.371474],[1.3818233],[1.3930135],[1.3780496],[1.353553],[1.3199772],[1.2810564],[0.047208063],[0.047284752],[0.047346227],[0.047340184],[0.04724789],[0.04699337],[0.046616953]],"model_test_loss":0.009241282939910889,"input_size":18,"current_date_and_time":"2023-08-12_21-15-20","input_mean":[[22.710884],[-0.02667767],[-1.9947951e-5],[-0.0022435884],[-0.024858162],[-0.025795942],[-0.027008465],[-0.025401326],[-0.024992129],[-0.02418946],[-0.022016376],[-0.0023103587],[-0.0022975747],[-0.0022888356],[-0.0022831862],[-0.002328815],[-0.0024200957],[-0.0025149914]],"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.02660969],[1.042771],[-0.033824593],[1.3177401],[1.2243396],[-1.3144829],[-0.029618222]],"dense_1_W":[[-0.042961396,0.8769499,-0.0041193925,-0.28560525,-0.20101343,1.1051995,-1.3274776,0.1784311,0.15195456,-0.25092003,0.06740475,0.2186879,0.265752,-0.15826978,-0.30693996,-0.28658256,-0.040432233,0.227988],[1.1160629,-0.5995385,0.025996689,-0.15590227,0.013243591,0.6837929,-1.4657838,0.23292334,0.066290066,0.086385906,-0.117085874,0.44104484,0.1790555,-0.29690143,0.2645984,-0.15013884,-0.1352086,0.2450129],[-0.02550995,0.11425251,-0.048323117,-0.21157871,0.07942085,1.3628405,-0.7377691,0.13772115,0.07743978,0.10179341,0.021651335,0.009930128,0.03140351,0.24963082,-0.17956105,-0.049760547,-0.19708844,0.121905],[0.50287706,-0.59522426,-0.072128914,-0.17238382,0.056527812,-0.6922978,0.4801964,-0.17814112,0.054864608,-0.046747845,-0.015958516,0.41250488,0.111997865,-0.242329,0.1574411,-0.18989699,-0.24354196,0.31047294],[1.2728062,0.9029083,-0.02995525,-0.11530327,0.19549532,-0.72583985,0.97019637,-0.023350935,-0.13342142,-0.09830459,0.11504367,0.004033683,-0.5631423,0.33631292,0.20850284,-0.13248868,-0.19359264,0.02700284],[-0.5022331,-0.4029477,-0.07267978,-0.032978907,0.123317115,-0.6608719,0.2172116,-0.2220228,0.036327496,0.036248263,-0.05348906,0.4633486,-0.45709947,0.35074022,-0.29431617,-0.015300724,-0.047331363,0.17334145],[-0.005675072,-1.177238,-4.175773,-0.33227032,0.593491,0.33732134,1.1989933,-0.018660717,-1.6915731,-0.8134577,1.1082839,-0.6968372,0.13508995,0.6501428,0.17571086,0.43262443,0.23011513,-0.2609291]],"activation":"σ"},{"dense_2_W":[[0.51582694,0.3121973,-0.20595367,-0.63976544,-0.6190774,-0.11476523,-0.161778],[0.45226112,-0.5900978,0.6664454,-0.98015857,-0.76075673,0.20415324,-1.0172082],[-0.049352575,0.030535527,0.5126004,0.26862317,-0.54523516,-0.68212223,-0.4634505],[-0.83752614,-1.6723628,-0.9174441,0.15394925,-1.029886,0.93452585,1.3628161],[0.738823,0.61842084,0.71415186,-0.6888037,0.3717006,-0.7639032,-0.1672679],[-0.1399503,-0.10095283,-0.25007892,0.39840633,-0.08607292,-0.25998384,0.64788043],[-0.40224734,-0.39391443,-1.0630914,0.5171268,0.2898641,0.81633,0.23264134],[0.609244,0.6181232,-0.078675106,-0.6184327,-0.21231276,-0.59661895,0.102545284],[-0.1669277,-0.58635,-1.1015649,0.32143387,0.4936339,0.83028847,-0.030035142],[-0.77541274,0.023090886,-0.23716073,-0.05367684,0.49773395,0.6787877,-0.16148227],[0.47024024,0.56257,0.45200762,-0.5773873,-0.18297487,0.20356469,-0.52002436],[-0.8596537,-0.06697396,-0.8024254,1.0830293,0.670211,0.6720701,-0.12708642],[-0.9127519,-0.6879708,-1.4161041,0.90650314,0.4792091,0.8929421,-0.01189748]],"activation":"σ","dense_2_b":[[-0.0045747017],[-0.077190444],[-0.013206014],[-0.31438816],[-0.02210615],[-0.08498061],[-0.032835722],[0.025921185],[-0.028608063],[-0.055094685],[-0.04353595],[-0.02340338],[0.2846957]]},{"dense_3_W":[[-0.2833135,0.49971643,0.15789203,-0.111222304,0.68173003,-0.12306065,-0.61054754,0.4364152,-0.17824891,-0.3612262,-0.08212228,0.32567462,-0.21418424],[0.30719173,0.6395363,0.45663902,-0.17605212,-0.032707606,0.09329482,-0.21607205,0.60278416,-0.2559459,-0.30606645,0.6160812,-0.65490466,-0.6537213],[-0.6911255,-0.28356558,0.35187447,0.69251335,-0.65796524,0.4204575,0.1600814,-0.36455095,0.5097029,0.23778544,0.05235907,0.61762905,-0.26800236]],"activation":"identity","dense_3_b":[[0.018074159],[0.02200104],[-0.036768977]]},{"dense_4_W":[[0.5857301,0.756474,-0.43159783]],"dense_4_b":[[0.022468269]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2022.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2022.json new file mode 100755 index 0000000000..7faefe92f7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 2022.json @@ -0,0 +1 @@ +{"input_std":[[8.322998],[1.4015561],[0.56837523],[0.047588255],[1.3709389],[1.3817663],[1.392611],[1.3754411],[1.3496559],[1.3185683],[1.2769405],[0.047354497],[0.047422595],[0.04747648],[0.047421742],[0.04731572],[0.04706673],[0.046611268]],"model_test_loss":0.009539897553622723,"input_size":18,"current_date_and_time":"2023-08-12_20-46-44","input_mean":[[22.711828],[-0.026689535],[0.0019039834],[-0.0023329535],[-0.024924988],[-0.026026027],[-0.027174095],[-0.025406003],[-0.025057424],[-0.02285188],[-0.021524802],[-0.002410757],[-0.0023985708],[-0.0023895558],[-0.0023493334],[-0.0024011184],[-0.0025043534],[-0.0025892218]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.5169857],[-0.019987362],[-3.749348],[0.010026661],[-0.07288319],[0.014374224],[0.010394186]],"dense_1_W":[[-1.2820761,0.20072974,0.28769934,-0.07435872,-0.10807912,0.6839909,-1.0163846,0.37361157,0.5963772,-0.31447622,0.15329885,-0.29130152,-0.0077871936,-0.13540648,0.14956757,0.20259517,0.4827459,-0.44082355],[-0.008706593,-0.7106983,0.03615078,0.13008897,0.39616287,-1.198108,0.67986196,0.049107697,-0.19745559,0.070653826,-0.037179824,-0.00992897,0.018150264,-0.28345117,0.20144904,0.027271744,-0.083591945,-0.0077789472],[-1.3841774,-0.2729697,-0.30312338,0.5021227,0.23227558,-0.45030138,0.8180279,-0.7582951,-0.41165656,0.3703149,-0.16755953,0.225867,0.30567566,-0.33227664,-0.07867405,-0.69357836,-0.29660326,0.48716295],[-0.0034431356,1.3253504,4.6872225,0.084131904,-0.59782314,-0.17502293,-0.47418714,-0.65568554,1.4080468,0.6040854,-0.9347265,0.4309358,0.28160667,0.031666335,-0.7668144,-0.26228446,-0.5334342,0.37789625],[-0.0055039516,-0.13755332,-0.12223849,-0.0004576334,0.25474504,-0.90248924,0.681393,0.083114035,-0.14821497,0.05615389,-0.06942857,0.052075684,-0.45403334,0.34004426,-0.10621758,0.33911383,0.07355,-0.19579107],[0.0022961085,0.30488324,-0.012825079,0.15088055,0.25583294,0.82652,-0.5459587,0.006714368,-0.06636212,-0.011478057,0.13315733,-0.13348693,0.26344913,-0.5412785,0.04283553,-0.078943126,-0.052557122,-0.14758898],[0.007984359,-0.050624616,-0.18312733,-0.16847509,0.16566466,0.73899466,-1.2472594,0.7888025,-0.095765956,0.24871819,-0.35101566,0.25908372,0.4248216,-0.13882114,-0.539588,0.09347688,0.009110203,0.12744854]],"activation":"σ"},{"dense_2_W":[[0.047095604,-0.786255,-0.43614712,-0.1504697,-0.13834186,-0.024430595,0.0504824],[0.2510971,0.02496833,-0.60852563,-0.27171785,-0.44349307,-0.37497228,0.2656754],[0.28042302,-0.2812965,-0.31852126,0.30789006,-0.85707706,0.3475367,0.22547512],[-0.6652303,0.2685998,0.56206954,-0.054037236,1.0446018,-0.94967777,-0.26615182],[0.23373616,0.18673655,-0.45725107,0.29477727,-0.89968127,0.6454618,-0.22106493],[0.054909028,0.77692455,0.18391721,-0.56115776,0.6095855,-1.0184323,-0.054039475],[-0.84752804,0.4618774,0.51274276,-0.06157674,0.38322848,-0.5445789,-0.17847438],[-0.8735806,0.71639836,0.74420905,0.16857065,0.51909196,-0.18970433,-0.87218684],[-0.09599941,-0.16308807,-0.72261167,0.5550224,-0.5297689,0.14774127,0.56100655],[0.30483237,0.093027264,0.029969638,0.47540987,-0.028077623,0.3474491,0.4557833],[0.60824394,-0.52072644,-0.110552855,0.2341221,-0.5425136,-0.15664087,0.18335746],[0.008110846,-0.3940828,-0.4749819,0.22577456,-0.6206534,0.53349996,0.64064765],[-0.74949837,1.0148553,0.08895356,-0.13594577,1.1833395,-0.5525545,-0.9272946]],"activation":"σ","dense_2_b":[[-0.1841836],[-0.052291494],[0.004210325],[0.03117083],[-0.052975487],[-0.009141316],[0.013354279],[-0.12768534],[0.007850721],[-0.096758544],[-0.02351333],[0.018209793],[0.07525378]]},{"dense_3_W":[[-0.0678166,0.21374278,0.4509247,-0.2507948,0.084760554,-0.25701937,-0.32002988,-0.6438867,0.6636694,-0.3464606,0.4619562,0.6215613,-0.7515956],[0.33497885,-0.19614214,0.75088036,-0.6965934,0.5644902,-0.62339765,-0.6473526,-0.04877687,-0.393787,0.60633105,0.18677856,0.23221537,-0.17749654],[0.24782819,0.56990445,0.7100961,-0.45507297,-0.18671395,-0.074338615,0.12664238,-0.111063465,-0.045501217,0.53268576,-0.52613497,0.3934995,-0.4127442]],"activation":"identity","dense_3_b":[[0.042554773],[0.03558463],[0.009918687]]},{"dense_4_W":[[0.7852306,0.58427215,0.16980867]],"dense_4_b":[[0.036531795]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42103x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42103x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..1b9584e460 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42103x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.390216],[0.84026754],[0.39660537],[0.037251078],[0.83123314],[0.8328986],[0.8354399],[0.822756],[0.8147103],[0.80181575],[0.78955364],[0.037153445],[0.037165854],[0.037180226],[0.03709188],[0.03697379],[0.036808748],[0.03657089]],"model_test_loss":0.007443552371114492,"input_size":18,"current_date_and_time":"2023-08-12_22-11-54","input_mean":[[24.564423],[-0.06033352],[0.0029696382],[-0.0023700444],[-0.06267781],[-0.062956646],[-0.063214496],[-0.06121789],[-0.061873104],[-0.061438877],[-0.056952965],[-0.0024559235],[-0.002469215],[-0.0024863363],[-0.0025515505],[-0.0025991164],[-0.002534291],[-0.0024238043]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.4287386],[0.019522702],[1.9977351],[-0.22490804],[-0.00035819423],[-1.3152059],[-2.3214567]],"dense_1_W":[[2.235888,-0.26963252,-0.03326692,-0.9078663,-0.48077253,0.22492908,-0.74574095,0.02163033,0.6287117,-0.25593862,0.09319266,0.390934,0.1455112,-0.0051882155,-0.2294125,0.2772641,0.3833548,-0.17655341],[0.004162867,-1.5029143,-5.1802254,1.005789,1.1220849,-0.0038114812,1.1423911,0.71593577,-1.1323463,-0.51543945,0.057678428,-1.4371938,-0.40754506,0.74080026,-0.4787524,-0.1676612,0.6316797,0.10258097],[0.61579907,1.0638666,0.04497473,0.09790652,-0.4580042,0.9214267,-0.55226237,0.22255155,-0.25152695,-0.018994743,-0.007784131,0.26833034,-0.3185435,-0.3745735,0.38645062,0.03690509,0.07226961,-0.15759337],[-0.0004868086,0.7452519,-0.03411571,-0.44577497,0.2982549,0.91406643,0.0184842,-0.18046862,-0.3266196,0.34877545,0.17070878,-0.03970848,-0.042621415,-0.27128893,0.15533158,0.07834085,0.19639981,-0.056854397],[-0.012567584,0.03624396,-0.022384563,-0.15523447,0.24661978,-1.2377284,1.1350765,-0.25249532,-0.41498,-0.020347659,0.095791966,-0.7473384,-0.26062834,0.5146696,0.54036754,0.4569565,0.22637187,-0.22997549],[-2.1634111,-0.916687,-0.03673605,-0.120667666,-0.4033444,0.7786477,-0.820325,-0.012360253,0.54780203,0.06107094,-0.004244052,0.3578701,0.32064012,-0.44154793,-0.6163029,0.25897467,-0.08404478,0.20366065],[-0.6153432,0.9540124,0.04409643,0.20857342,-0.50645894,1.0762684,-0.49672195,0.107468456,-0.2148415,0.042631213,-0.024798885,0.28167915,0.2179913,-1.0020694,0.40323436,-0.11873269,0.08794277,-0.07572256]],"activation":"σ"},{"dense_2_W":[[-0.20823282,0.30093265,-0.029201774,-0.5920709,0.8807932,0.014832234,-0.7206485],[-0.2707333,-0.5349684,0.03885923,0.4568763,-1.0975108,0.52590406,0.56699604],[-0.1763585,-0.044517048,-0.7223775,0.46382907,1.3813398,-0.90656126,-0.46228075],[0.4402428,-0.08579828,0.62238526,-0.026679713,-0.23692939,0.5986996,-0.044020038],[-0.11785757,0.55059844,0.21553627,-0.38685504,0.37269825,-0.05641884,-1.0433837],[-0.073115595,-0.13483381,-0.57452166,-0.34301227,1.1377032,0.18396655,-0.65384805],[-0.06759611,0.40847486,-0.54294467,-0.6230027,0.5551045,0.12885416,-0.6015846],[-0.1075689,-0.82133925,-0.4100264,-0.5740279,0.077124596,-0.84148127,-0.35156497],[0.43155265,-0.44616547,0.5199837,-0.24253757,-0.28942013,0.07995831,0.80747086],[0.5655305,-0.6049346,0.7769178,0.6401317,-0.036156356,0.12338241,-0.09606122],[-0.11682955,0.37032342,0.6814937,0.08761088,-1.1991022,0.3395861,0.4455738],[-0.061593946,-0.10245612,-1.1362522,-0.90115947,-0.10694025,0.27360564,-0.38288185],[-0.85389346,0.7123888,-0.9063807,-0.5282727,0.84775126,0.14558455,0.10813089]],"activation":"σ","dense_2_b":[[0.09443781],[-0.22529183],[0.0031277924],[-0.038756464],[0.06911136],[0.16423716],[0.047135442],[-0.06203192],[-0.09895892],[-0.08908262],[-0.30888662],[-0.045908593],[-0.13323098]]},{"dense_3_W":[[-0.28149396,-0.09962505,0.47546953,-0.31420928,0.2905342,0.266794,0.43754667,0.3859919,0.06822508,0.23275743,-0.6660929,0.19498697,0.3011593],[-0.13796176,0.40359095,0.29825932,0.018519647,-0.59591174,-0.73205596,-0.19215392,0.27951568,0.3280459,0.19260992,0.36450627,-0.50515145,-0.546314],[0.399765,-0.5717706,0.59745455,-0.24058248,0.049411856,-0.11578697,0.25948843,0.5037258,-0.33800462,-0.35749623,-0.026326528,0.09737147,-0.09119536]],"activation":"identity","dense_3_b":[[-0.10628814],[0.07634368],[-0.05583109]]},{"dense_4_W":[[-0.31794876,0.80048394,-0.76268446]],"dense_4_b":[[0.06573924]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42162x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42162x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..4c63096684 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42162x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.153396],[1.1424059],[0.5273411],[0.0418866],[1.1337891],[1.1363932],[1.139454],[1.1177284],[1.1015002],[1.0786083],[1.0526011],[0.04153589],[0.041622877],[0.04170686],[0.041838918],[0.04179161],[0.04151654],[0.041096594]],"model_test_loss":0.009716987609863281,"input_size":18,"current_date_and_time":"2023-08-12_22-38-30","input_mean":[[24.196396],[-0.016029745],[0.028096095],[-0.0038994509],[-0.022461733],[-0.0211682],[-0.018945228],[-0.009469113],[-0.006013518],[-0.0003690735],[0.00038850226],[-0.003962722],[-0.003939994],[-0.003924277],[-0.0039717006],[-0.004034121],[-0.004135311],[-0.0043619256]],"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.06441673],[2.26378],[-0.10552989],[0.33980003],[-0.04298246],[-0.098494254],[2.4262064]],"dense_1_W":[[-0.020790633,0.451921,-0.13652684,0.12763585,-0.031029783,1.2042981,-0.5776046,-0.1012677,0.17831358,-0.05581121,-0.06692354,0.54666835,0.40911138,-0.8721234,-0.39267784,-0.08157101,-0.4079901,-0.2989372],[0.5509748,0.9363097,0.059841122,-0.4140256,-0.41639903,0.33078,-0.40445128,0.36929476,0.018607832,0.00700337,-0.0038795248,0.7061042,-0.23580593,-0.48158726,0.12674259,-0.06382707,0.43820915,-0.17950895],[0.018348062,0.6468131,0.0042748065,0.16133198,-0.015959706,0.9301354,-0.20905271,-0.29754588,-0.28253144,-0.119799875,0.3632876,0.3290482,-0.18916254,-0.41337168,0.0010071574,-0.15450883,0.20074505,-0.026081141],[0.006989476,0.27034685,6.5836134,0.55647486,-1.4171077,-1.1925769,-1.0201753,0.29032436,1.358197,1.2209818,0.37050742,0.6416425,0.6711937,-0.31485364,-0.34857285,0.17685159,-0.7824757,-0.4657348],[-0.004080293,0.029588899,1.3128351,-0.36318135,-0.11356612,0.5806577,-0.36066183,0.4649574,0.5240905,-0.05959767,-0.91840315,0.62454647,0.050267532,-0.14082994,-0.2595877,-0.31785563,-0.02562985,0.34429887],[0.034001444,-1.9677832,0.15466869,-1.0032327,-0.30988127,0.71767926,-0.89187795,0.6676458,0.9369056,0.2786462,-0.53612363,0.7342473,0.12932669,-0.29018465,0.3984834,0.23467675,-0.1234937,0.84723073],[0.47908032,-0.5793737,-0.05230327,-0.0138418805,0.2010647,-0.5434213,0.59695786,-0.19498722,-0.2230812,-0.15169947,0.102158435,-0.18281807,-0.1266235,0.3866273,-0.04928129,0.37241444,-0.2728808,-0.01607883]],"activation":"σ"},{"dense_2_W":[[0.12734035,0.5242563,0.6692459,0.2905278,0.0014169036,0.29576495,-0.61192167],[-0.12615293,-1.2116686,-1.2169276,-0.08875717,0.3729457,-0.5249831,0.34974018],[-0.9393932,-0.38383678,-0.8133937,0.24458236,-0.24640957,0.16986968,0.9259673],[-0.28856096,-0.31797957,-0.9315826,0.04405637,-0.012435744,-0.11371028,0.5239803],[-0.17659293,0.15572147,0.07663236,0.62253284,0.64720607,0.19781266,-1.2869947],[-0.7894623,-0.90204525,-1.0353638,-0.03617179,0.39140046,-0.0017340467,1.1151788],[-0.32219446,-0.49881086,-0.56797916,-0.5200566,0.049211055,-0.27014527,-0.47646534],[0.3827617,0.09625169,0.6359473,0.20220737,0.0765475,0.69139665,-0.014074824],[-0.8888096,-0.9244012,-0.20213692,0.16941886,-0.42035094,-1.047354,0.65089625],[-0.073977485,-0.9904051,0.21814822,-0.85800076,-0.380841,-0.41185415,-0.34316978],[0.50580156,-0.14019777,0.41091344,0.45879292,0.5243499,0.04470857,-0.118686885],[-0.91301054,-0.10051312,-0.76313204,-0.36933228,0.123890385,-0.41707304,1.4737208],[0.48200563,0.30155873,0.6166662,-0.19214527,0.3604119,0.848134,-0.66118497]],"activation":"σ","dense_2_b":[[-0.06378894],[-0.063377954],[0.21705978],[-0.124884605],[-0.31138632],[0.15949029],[-0.06504713],[-0.06639504],[0.29782426],[-0.05916866],[-0.19573724],[0.39589995],[-0.13240384]]},{"dense_3_W":[[-0.4349006,0.30896667,-0.45529953,0.1588749,0.6099583,-0.048744787,0.14831127,-0.09553297,-0.5638598,0.47571346,0.3784129,-0.65802926,0.6003008],[-0.2129697,0.480156,-0.606263,0.4075848,-0.41933286,0.38288692,0.22861128,-0.4790269,0.32494992,0.45159003,0.52394915,-0.10827983,0.009361509],[0.5089469,-0.5202948,-0.5322368,-0.31337965,0.3283847,-0.80532163,-0.12003918,0.3517128,-0.7536064,-0.36008325,0.43078935,-0.49509677,0.43837455]],"activation":"identity","dense_3_b":[[-0.009116715],[0.03737127],[0.07403617]]},{"dense_4_W":[[0.08990676,0.013356972,1.3498625]],"dense_4_b":[[0.06698501]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42163x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42163x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..98c89380a7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017 b'8965B42163x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.507092],[1.2815679],[0.4975071],[0.04506459],[1.2720965],[1.2750745],[1.2772884],[1.2503124],[1.2223599],[1.1884838],[1.1560506],[0.045019273],[0.045028828],[0.045024503],[0.04477106],[0.04448406],[0.044080965],[0.04363627]],"model_test_loss":0.013042495585978031,"input_size":18,"current_date_and_time":"2023-08-12_23-07-05","input_mean":[[21.98877],[-0.12335238],[-0.016078657],[-0.0077544143],[-0.121013075],[-0.122396156],[-0.12400471],[-0.12926798],[-0.13365853],[-0.13634436],[-0.13445592],[-0.0078579085],[-0.007848383],[-0.007836665],[-0.007821644],[-0.007856283],[-0.00794595],[-0.00799864]],"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.41238108],[-0.15647191],[-3.19432],[1.3473346],[0.72033656],[0.011768298],[3.205428]],"dense_1_W":[[-0.027973145,1.7576972,4.767511,-0.4176633,-0.96818715,0.33926827,-1.0864245,-0.23734152,0.9877473,0.7952857,-0.8853347,0.93019867,0.32556108,-0.028436413,-0.0046930364,-0.50567764,-0.89116305,0.34441304],[-0.3286742,0.7296152,0.15975942,-0.23465723,0.054107532,1.2600936,-1.2999637,0.3027219,0.21823524,-0.3015546,0.21093197,0.35624585,0.20739715,-0.53436106,-0.06674817,0.018904384,0.45141223,-0.23347045],[-1.2369081,0.5949384,0.27328587,0.05338651,0.4156267,0.92539907,-0.40590262,0.5744456,0.15448196,0.049225725,0.112136096,0.061936796,0.36455524,-0.20739433,-0.5574245,0.020741934,0.3043354,-0.060525723],[1.3975302,-0.2660883,-0.2528151,0.12209471,-0.45779967,0.37982872,-1.2621626,-0.12645462,-0.08675239,-0.024192654,-0.16114336,0.3574039,0.14576891,-0.5411478,-0.4881046,0.29857686,0.3050295,-0.16263439],[0.0261585,-2.65415,0.1102068,-0.6355408,-0.6825635,-1.95765,-0.7815007,-0.8075244,-0.2593319,-0.6009522,-0.52111167,-0.20022257,0.03889839,0.62920535,0.33383593,-0.2175719,-0.4684548,0.3459961],[-0.0150678735,-0.58271044,0.0061610206,0.074883945,0.10804738,-1.421328,0.79250294,0.15533687,-0.24172942,-0.074691884,0.00076515594,-0.6798396,0.08621879,0.7514697,0.10140082,0.41893494,0.28425518,-0.33354664],[1.1115061,0.61985224,0.30767944,-0.09303943,-0.12909113,1.6447747,-0.4437529,0.77997494,0.2406031,0.19338164,-0.04269769,0.74130315,0.023670241,-0.60373497,-0.42885965,0.09291059,0.30503675,-0.0505794]],"activation":"σ"},{"dense_2_W":[[-0.03447381,0.61961925,0.46783054,0.008025974,0.034218326,-0.785008,-0.2436927],[-0.34576592,0.38208163,0.9075677,0.4188659,-0.6523994,-0.6328571,0.014269962],[-0.028170645,0.8463806,0.044915676,-0.021030001,-0.27790257,-0.61671126,-0.099155694],[-0.8248011,-0.376545,0.11962283,-0.8207945,-0.021737516,-0.06406078,-0.106754884],[0.424725,0.6510974,0.31296447,-0.26330495,0.11321596,-0.8308737,0.19026594],[0.16454563,-0.45808515,-0.61525315,-0.2313238,0.42379624,0.49528188,-0.15805322],[-0.74735767,0.06545445,0.26230517,-1.1391616,0.6482181,-0.25901437,-1.0564803],[-0.17673826,0.0071658455,-0.8479469,-0.26447105,0.51856095,0.9599089,-0.22698504],[0.07695655,-0.6020192,-1.0648273,0.57120943,-0.60580045,0.48599684,-0.74983746],[-0.18215203,-0.03673277,-0.69181716,-0.50174606,-0.3967317,1.0757489,0.10837832],[-0.2219305,0.5985485,0.3430551,0.27103543,-0.28647742,-1.2267803,0.3110115],[0.23252928,0.35021362,0.506134,0.11031795,0.09378154,-0.5229496,-0.49675792],[-0.894196,-0.11130605,-0.021763802,-0.79576594,0.048987858,-0.18540877,-0.7740312]],"activation":"σ","dense_2_b":[[0.059486043],[-0.29280654],[0.011379277],[-0.07390214],[-0.06469096],[-0.07824884],[-0.121937186],[-0.020077355],[-0.14607991],[0.071507566],[-0.04043437],[-0.32625166],[0.005049509]]},{"dense_3_W":[[-0.21808244,-0.08183334,-0.6193853,0.14346945,-0.64549166,0.034775525,0.62263674,0.60656494,0.05402613,0.4803536,-0.057502307,-0.57187694,0.48039675],[0.20010938,0.29857892,0.29031074,-0.4493723,-0.27534932,-0.4271697,-0.3127123,-0.31985202,-0.5051126,-0.20012727,0.63287383,-0.42268178,-0.5962557],[0.7221426,-0.17602918,-0.24287237,-0.1045422,0.59664446,-0.3091623,-0.07306638,-0.6027462,-0.04207753,0.22870076,0.12455155,-0.058088508,-0.5303505]],"activation":"identity","dense_3_b":[[-0.026025277],[0.054520532],[0.04151487]]},{"dense_4_W":[[-0.88442326,0.62185794,0.34921297]],"dense_4_b":[[0.04022765]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017.json new file mode 100755 index 0000000000..1499600029 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2017.json @@ -0,0 +1 @@ +{"input_std":[[8.89405],[1.3264774],[0.49399376],[0.04498591],[1.3162512],[1.3196412],[1.3221577],[1.2921615],[1.262814],[1.2265766],[1.1900893],[0.044859875],[0.044887066],[0.04489899],[0.044722132],[0.044534575],[0.044196904],[0.043708563]],"model_test_loss":0.013147538527846336,"input_size":18,"current_date_and_time":"2023-08-12_21-45-51","input_mean":[[22.843279],[-0.12455614],[-0.0014007707],[-0.0064704656],[-0.1233025],[-0.12350357],[-0.12400504],[-0.1251842],[-0.12609619],[-0.12369014],[-0.12037224],[-0.006532242],[-0.006518202],[-0.006506443],[-0.006487807],[-0.006539525],[-0.0065615526],[-0.0066139703]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.8076376],[-0.12330158],[0.8896142],[-0.13590556],[-4.1826344],[-0.77730286],[4.5746274]],"dense_1_W":[[-0.97973573,0.15226786,0.02845066,0.04827065,-0.025662262,1.7772363,-1.5355376,0.0989295,0.30149132,0.029098786,-0.074183464,0.39862457,-0.10540373,-0.14476654,-0.36632246,-0.3054467,0.15272646,0.07390829],[0.015743697,0.78862613,-0.019669378,-0.12546545,0.009684494,1.3956969,-1.2900923,0.19209127,0.14444686,-0.21074831,0.16892369,0.61990404,0.23663369,-0.8836119,-0.42096013,0.119372375,-0.07889601,0.09642731],[-1.1188109,-0.42021284,-0.027942661,0.14205936,-0.07868929,-0.7710287,0.73801935,0.014988501,-0.069595,-0.35983253,0.24104616,-0.45208368,0.057623267,0.5596988,-0.21029097,-0.045526307,0.32178107,-0.12184607],[-0.013647176,1.3307436,4.6095624,-0.34334475,-0.8587218,-0.12885869,-0.8174357,-0.11078273,1.2218881,0.6008918,-0.6915159,1.311084,0.16892083,-0.3056882,0.08437484,-0.63590443,-0.4589061,-0.0745741],[-1.9673253,-1.4414742,-0.2586987,0.2226021,0.5694981,-1.5805218,0.5769138,-0.00886291,-0.060155656,-0.100935824,-0.13228646,-0.39160243,-0.40697894,0.7586441,0.09374963,0.055745218,-0.22303872,-0.037225552],[0.010619068,2.72878,-0.1893567,-0.27490807,0.50076294,1.516001,0.3651039,0.7132457,0.22416064,0.38899446,0.33117044,0.3081755,0.3069668,-0.8289943,-0.08180179,0.6579218,0.3046304,-0.066973075],[1.9517641,-1.27614,-0.25992838,0.26618478,0.082289934,-0.697544,0.0861543,-0.04430833,-0.1666379,-0.06128522,-0.12283561,-0.34772325,0.10666418,-0.18634178,0.41480446,0.21883197,-0.314464,-0.09010557]],"activation":"σ"},{"dense_2_W":[[-0.6846211,-1.4150484,0.62999135,0.3430101,1.278193,-0.7957307,1.0221282],[0.16265254,-0.2179754,-0.03812709,-0.97449124,-0.69266665,-0.13029383,-0.6855177],[0.67744255,0.7218722,-0.15119076,-0.36107507,-0.6168378,0.3564611,-0.14333059],[0.44798878,0.054440223,-0.12721358,0.11809645,-0.061688833,0.04752611,0.13841292],[0.22670254,0.36689356,-0.44299468,0.53176785,0.3255846,-0.5087834,-0.24648738],[-1.1769708,-1.0265867,1.0046444,0.3265467,1.2754724,-0.6967977,1.0338258],[-0.07486774,-0.5789648,0.18375583,0.08036335,0.17746748,0.4459745,-0.28357828],[-0.98316115,-0.82948774,1.1131235,-0.30703646,0.70785904,-0.18001986,0.71042156],[0.10901459,0.64697224,-0.36924043,0.8418233,-0.18619084,-0.3438453,-0.58111745],[-0.13789596,-0.28369164,-0.24692981,-0.6745289,-0.83434075,0.4034985,-0.2338089],[0.5772887,-0.30526567,-0.8162497,0.44525668,0.23674823,0.12436892,-0.7137595],[-0.59163356,-0.21955788,0.26342097,-1.3260666,1.5348077,-0.15188397,-0.24587795],[-0.864029,-0.23358338,-0.21427485,-0.45828933,-0.8476076,0.7652582,0.07033687]],"activation":"σ","dense_2_b":[[-0.2084633],[-0.3401461],[0.03563889],[-0.019227123],[0.033816546],[-0.21475661],[-0.108693056],[0.0054793637],[-0.055306572],[-0.3065528],[-0.067040265],[-0.22550777],[-0.33363193]]},{"dense_3_W":[[-0.27252012,0.28291574,0.104386985,-0.27400178,0.03230503,-0.36361536,0.03550164,-0.098785385,0.5028087,0.15802625,0.25782102,-0.3110525,0.3512787],[-0.35834575,-0.20253947,0.08262887,0.49909568,0.40528995,-0.21334086,0.27457196,-0.6656153,-0.24731882,0.07225506,0.18140426,0.56584823,-0.53368413],[0.44071397,0.39182287,-0.45943233,-0.42492127,-0.5459261,0.56124943,0.37052932,0.3689143,-0.69441694,0.41806287,-0.031108733,0.5795106,0.5095399]],"activation":"identity","dense_3_b":[[0.044206124],[0.04141924],[-0.087050036]]},{"dense_4_W":[[0.7859495,0.4201428,-0.711207]],"dense_4_b":[[0.048112456]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42170x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42170x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..3009213f5c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42170x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.505826],[1.3050952],[0.6105025],[0.049911283],[1.2774526],[1.2882336],[1.2985959],[1.2796075],[1.2540187],[1.2308307],[1.2028455],[0.049641605],[0.049726453],[0.049802125],[0.049885124],[0.049843974],[0.049564064],[0.048945032]],"model_test_loss":0.008349043317139149,"input_size":18,"current_date_and_time":"2023-08-13_00-13-34","input_mean":[[23.119398],[-0.014665721],[0.002875712],[0.0022761677],[-0.016781015],[-0.015601292],[-0.015216634],[-0.012974441],[-0.008985644],[-0.0026411372],[-0.0011595195],[0.0021324658],[0.002156456],[0.0021819477],[0.0022379826],[0.0022811887],[0.0022112585],[0.0020355321]],"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.04593338],[-0.40499118],[-1.7993592],[-0.11991043],[2.4969063],[-0.08359504],[0.15138367]],"dense_1_W":[[-0.0020456694,-0.15232417,-0.05632091,-0.37705573,0.022051271,-0.8565281,0.39108163,0.056849197,0.05130677,-0.05407012,0.001970357,-0.22110374,-0.05739019,-0.06787392,0.8160874,0.24165699,0.05984952,-0.26877397],[-0.059527796,-1.783515,-5.029247,0.35492274,0.46516266,-0.4962219,0.74547374,-0.1391693,-0.44948098,0.77305996,0.5585137,0.21553893,-0.4055475,-0.05447692,0.26631886,0.058942422,-0.016789235,-0.27207494],[-0.76922256,0.6301251,0.22935481,-0.025813706,-0.33578226,0.67003363,-0.88640255,0.46430328,0.027061734,-0.1746217,-0.0022712015,0.16300617,0.0046104635,-0.4206955,0.33701143,0.087930895,0.08343968,-0.18054911],[0.0011171654,-0.58213556,-0.021455938,0.26902542,0.37316513,-1.3450648,1.1398438,0.1091337,-0.28341073,-0.118193135,0.124231465,0.05864356,-0.6355348,0.1833971,0.3096016,0.34548208,-0.011865895,-0.18107612],[0.87095094,0.6937185,0.29325077,0.020749068,-0.025415676,0.699841,-1.3742945,0.7242314,-0.06749853,-0.070331104,-0.0636034,0.06533873,-0.16280279,0.042507485,-0.029019153,0.26980522,-0.09153442,-0.093001485],[-0.31021908,-1.142416,0.11011055,0.43387893,0.5260836,-1.5303199,0.5066911,-0.27706015,0.39043495,0.15309733,-0.28572637,-0.22430675,0.061929535,-0.06383185,0.13644171,-0.50511664,0.041031726,0.31161213],[1.0897267,1.1825744,-0.14236324,0.063672036,0.06294053,-0.3706379,1.0601782,0.5527051,-0.27595088,-0.113671936,0.13686246,0.17960225,0.20145352,-0.13296105,-0.40037417,-0.01056886,-0.13461137,-0.055430967]],"activation":"σ"},{"dense_2_W":[[-0.19825721,-1.1104169,0.98295814,-0.30515158,-0.34692875,-0.6190782,-1.297581],[0.24416888,0.3588734,0.103677236,0.240873,-0.813537,0.07612628,-0.08107244],[-0.5474003,-0.28213567,0.1666674,-0.42624155,0.64944845,-0.26346406,-0.14706588],[0.1518272,-0.21466658,-0.17855105,0.013723676,-0.58607084,0.6483515,0.43216375],[-0.6230994,-0.08837661,0.33257806,-0.85847354,0.36574784,0.04634162,0.05514991],[-0.8296199,0.77100873,-0.939359,-0.8922866,0.084815726,-0.6143975,-0.10045844],[0.4623184,0.1270895,-0.16754854,0.15027253,-0.4147221,0.39358157,0.57891953],[-0.08295878,0.5129586,0.06648533,0.40620163,0.24548061,0.40838754,0.21267301],[-0.23169038,0.43309572,-0.070394635,0.019800762,-0.65996474,0.6055871,-0.12044358],[-1.0342672,-1.0465121,3.6257296,-0.50793505,0.29782388,-1.7741984,-1.0927168],[-0.19204512,-0.32931063,0.18198438,0.8573456,0.06693234,0.6510411,-0.32572392],[-0.4673864,0.10762463,0.07421527,-0.38329086,0.7058981,-0.927119,0.115484424],[-0.42056227,-0.11796782,0.49156794,-0.7097843,0.6934195,-0.5626611,-0.34439513]],"activation":"σ","dense_2_b":[[0.11909162],[-0.07600877],[0.10223283],[-0.031305008],[0.09945486],[-0.17963581],[-0.061995212],[-0.07555241],[-0.102682784],[-0.05191523],[0.024158236],[0.076784156],[0.23109515]]},{"dense_3_W":[[-0.14342636,-0.72422844,0.40396285,0.1636829,0.18247479,0.0045734644,0.057036284,0.36054525,0.31516632,0.5773821,-0.34730205,0.015506951,0.8143722],[-0.22141175,0.0249754,0.18519108,-0.5960891,0.10534475,-0.34004185,0.30922064,-0.64269876,-0.39353377,0.61196244,-0.6038087,-0.2218613,0.8060632],[-0.8372558,0.52254903,-0.14625306,0.0066804006,-0.65099746,-0.46298012,0.46928817,0.3031862,0.21476059,-0.113657326,0.57816565,-0.66892457,-0.68522847]],"activation":"identity","dense_3_b":[[-0.08646373],[-0.0014501116],[0.010766292]]},{"dense_4_W":[[0.20907876,0.4356881,-1.1967267]],"dense_4_b":[[-0.009264721]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42171x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42171x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..ba9f61741d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42171x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.125968],[1.2157676],[0.56877077],[0.046634678],[1.1819986],[1.1939226],[1.2050095],[1.1772536],[1.1490384],[1.1173652],[1.0877764],[0.046458516],[0.0464915],[0.046519432],[0.046424575],[0.04630696],[0.045947377],[0.045457695]],"model_test_loss":0.012017198838293552,"input_size":18,"current_date_and_time":"2023-08-13_00-43-28","input_mean":[[23.038973],[-0.011042334],[0.015974972],[-0.0052252584],[-0.012621144],[-0.012206042],[-0.011473829],[-0.00436382],[0.0011708968],[0.011603617],[0.018078573],[-0.0053275926],[-0.0052903076],[-0.0052520954],[-0.00510947],[-0.005104932],[-0.005200319],[-0.0053668055]],"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.16457097],[-0.11783356],[-0.16341795],[3.2603662],[-0.11788801],[1.6720974],[-1.0769079]],"dense_1_W":[[-0.008061046,-0.295763,-0.04102052,-0.44582197,0.39850467,-1.5092795,0.88803405,-0.14117628,0.17673199,0.06661456,-0.08764483,-0.07910116,0.064918116,-0.28363875,0.80435836,-0.029273244,0.083623365,-0.0926666],[0.011789304,-0.77010036,0.030322142,0.47716776,0.3228661,-0.5643698,-0.085420124,-0.41520515,0.04144654,0.18603072,-0.072190225,-0.2096561,0.25008512,0.047287993,0.78376484,-0.09255421,-0.073869705,-0.38755554],[0.006866006,-0.39707738,0.047982275,-0.09235436,0.2033491,-1.5095443,0.76461095,0.12706165,0.05459054,-0.31473687,0.017124869,-0.15846905,0.28620297,-0.29356283,0.010996088,-0.26782978,0.30223924,0.19818383],[1.3136203,0.7605802,0.22921574,0.06950313,-0.27827767,0.22789046,-1.1831415,0.2888181,0.45472026,0.30679116,-0.029124122,0.3591454,-0.12775579,-0.19236758,0.06478377,-0.32875076,0.39650252,-0.22568668],[0.021136647,-0.8797861,-3.4817855,0.9336127,-0.29945964,-0.40648848,1.0025306,-0.4041235,-0.4894749,0.32140172,0.98608655,-0.13395874,-0.5486662,0.09900147,0.16774903,-0.088785864,-0.46660814,0.12422624],[0.9725118,-0.5041138,-0.16343966,0.08840967,0.2979326,-0.2553426,0.70889497,-0.26950783,-0.24307638,-0.10193795,-0.11072658,0.07021681,-0.61530876,0.015428448,0.33534184,0.2460765,-0.04016938,-0.10249991],[-1.8274829,-0.48919293,0.2956331,0.39662004,0.3197019,-0.5691079,0.461544,0.13920702,0.03986025,0.75838494,0.20281333,-0.204162,0.19350567,-0.25525728,0.18195486,0.062684454,-0.19634059,-0.13966343]],"activation":"σ"},{"dense_2_W":[[-0.46026543,-0.608524,0.043432627,0.47561055,0.066570684,-0.41968626,-0.6702784],[-0.25002444,0.014399548,-0.84623957,0.022399414,-0.2874369,-0.7324391,0.20420226],[0.36980322,0.15331481,-0.09735177,-0.85721236,0.24727485,0.24951531,0.50254786],[-0.8673788,-0.17667994,-0.68422544,-0.1418402,0.18743204,-0.44421887,-0.13782015],[0.04130671,0.52854437,0.24590105,-0.88267916,0.22531076,0.38659257,-0.17606324],[0.47478884,0.31884965,0.3388871,-0.9468022,0.5066021,0.0700175,-0.5095112],[-0.113112666,0.25730982,-0.9881957,-0.13247137,-0.033958793,-0.93955487,-0.48982602],[-0.04127802,0.087856285,0.5223571,0.24392658,0.39105633,0.49048007,-0.34004813],[-0.31157398,-0.13790639,0.34548154,0.029981874,-0.55449915,-1.4152876,0.07108483],[0.53556556,-0.18784468,0.8590173,0.0057014013,-0.19763845,-0.011888355,0.5876402],[-0.48912835,-0.36501917,0.115229115,0.32207936,-0.6014716,-0.7109084,0.3919979],[0.55365634,0.6837242,0.3347094,0.0687382,-0.3462548,-0.11737208,0.63489527],[-0.256118,0.059573215,-0.7375444,0.06857301,-0.15573148,-0.7817235,-0.32100102]],"activation":"σ","dense_2_b":[[0.14656128],[0.087247714],[-0.28482375],[0.10210237],[-0.26355878],[-0.3669566],[0.15538138],[-0.17240496],[0.09014895],[-0.113779716],[0.14317818],[-0.071496926],[0.0718679]]},{"dense_3_W":[[0.6229111,0.31968972,-0.28705767,0.11074303,-0.087110974,-0.48348424,0.6785927,-0.21872982,0.61053604,-0.4666131,0.5098173,-0.06363553,0.3394026],[0.084205516,-0.3369105,0.17392462,0.37095436,-0.38174987,0.6008199,-0.80774736,0.06431271,-0.50171995,-0.010040611,-0.4184066,-0.22164747,-0.5402119],[0.7551455,0.14914666,-0.12843245,0.7057249,-0.5243644,-0.43565202,-0.35526338,-0.08234922,-0.33515534,-0.21625134,-0.07045235,-0.556805,-0.119567014]],"activation":"identity","dense_3_b":[[0.0821533],[-0.058999702],[0.09296355]]},{"dense_4_W":[[1.1875242,-0.45130086,0.9210134]],"dense_4_b":[[0.08483955]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42181x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42181x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..c5393c2cfd --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'8965B42181x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.851226],[1.0239326],[0.42911518],[0.03646196],[1.0106101],[1.0142277],[1.0175295],[1.0065211],[0.9916179],[0.9649314],[0.936436],[0.036384404],[0.036382284],[0.0363779],[0.03632052],[0.036259472],[0.036110133],[0.035911527]],"model_test_loss":0.014339322224259377,"input_size":18,"current_date_and_time":"2023-08-13_01-37-39","input_mean":[[18.550402],[0.06708315],[-0.003807479],[-0.0036194513],[0.068546236],[0.06752569],[0.067004055],[0.06809232],[0.0652104],[0.06113437],[0.0540162],[-0.0034877174],[-0.00351821],[-0.0035523246],[-0.0035503684],[-0.00347457],[-0.0034314597],[-0.003328863]],"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.058229167],[0.03463576],[0.4540118],[1.0585605],[0.82972604],[0.01061339],[-0.5384203]],"dense_1_W":[[-0.0014019154,0.37237298,6.008196,0.10171012,-1.7093086,0.036843814,-0.20425557,0.1546206,1.5322132,0.7762833,-0.7004276,0.312089,0.124471225,-0.10561013,-0.39252156,-0.061603494,0.14343801,0.048062187],[0.0053725736,0.83909684,-0.0058439635,-0.038102146,-0.6833011,1.3762548,-0.708113,-0.18666978,0.28403822,0.08537209,-0.20133755,-0.044063088,-0.053310566,0.03235708,0.1398986,-0.097352564,0.09996585,-0.05572039],[-0.009760258,1.0888057,-0.07141774,-0.47450888,-0.5601016,-0.01604505,-0.34092116,-1.0678765,-0.96493465,-0.7642926,0.8836851,0.19161814,0.06547918,-0.6535186,0.62695867,-1.0349063,-2.439145,-2.184206],[0.38358867,0.6065362,0.0034230966,-0.3828624,-0.75266975,0.75344396,0.07208741,-0.2282329,0.0915009,-0.26476312,0.2233056,0.0923892,0.22786996,-0.26453176,0.20961368,-0.105665825,0.098848045,-0.0052204602],[0.381848,-0.5390429,-0.00251121,0.20975311,0.26914105,-0.78149796,0.5001158,-0.06125975,0.40894818,-0.08970213,-0.18330403,-0.053460885,-0.57413,0.7126597,0.09718345,-0.40182889,0.18284002,-0.04926136],[0.0041610664,1.9413497,-0.9496216,-0.33759737,-0.95122117,-1.5848461,1.3404186,-0.7097838,-0.8721945,-0.06395329,0.80500317,-0.93806756,-0.47362727,0.22262034,1.3678228,0.64397407,-0.2728229,-0.33648926],[0.07239537,-2.7810628,-0.00035733246,-0.39048576,-1.7811499,-1.8262695,-1.4524763,-1.5749454,-1.0985239,-0.97433126,-0.9762156,0.10516947,0.041831885,0.557803,-0.3139855,-0.11231197,-0.24730888,0.28285852]],"activation":"σ"},{"dense_2_W":[[0.88501614,0.7960339,-0.0854282,1.473172,0.73403573,-0.030489994,-1.0748231],[-0.012086651,-0.61050624,0.18473598,-0.7041298,0.37165922,0.31777894,0.18531682],[0.3662147,-0.029098487,0.76151365,-0.13395014,-0.36695877,-0.49297136,0.38819385],[-0.35389823,-0.3027185,0.12915866,-0.13196456,-0.059434127,0.3337308,-0.5366898],[-0.68380296,0.7094547,0.3467085,0.62269133,-0.8350407,-0.20502584,0.26055062],[-0.34221599,0.09894911,-0.22930774,-0.48179337,0.20150964,-0.77290064,0.09458423],[-0.36280394,-0.65553576,0.14078282,-0.3023727,0.36085516,0.2819732,-0.43386218],[-0.19083975,-0.34192124,-0.43045238,-0.62081045,0.30931103,0.030700095,0.38528338],[-0.12913164,-0.05824346,-0.19918932,-0.6585686,0.64329416,-0.39228633,0.38834023],[-0.06803785,-0.71117616,-0.09132568,-0.98075783,0.06334288,0.49681652,0.34164643],[0.2180745,0.36604738,0.06154819,0.24362233,-0.8302129,-0.26283228,-0.009614421],[0.90993303,0.8324408,-0.153028,-0.3565887,-2.4188988,-0.39102378,-0.83334637],[0.49228296,1.0891999,0.14682251,0.06525131,-2.3566296,-0.27929735,-0.59872884]],"activation":"σ","dense_2_b":[[0.026272422],[-0.027382316],[-0.06374873],[-0.0018913196],[-0.10611498],[-0.28934753],[0.048449446],[-0.029426448],[0.03910206],[-0.061729193],[-0.17011756],[-0.19914334],[-0.35818344]]},{"dense_3_W":[[0.24681666,-0.43185285,0.43248656,0.446498,0.33516178,0.33663905,-0.33765137,0.12410014,-0.0055404617,-0.5735319,0.17945813,0.35185724,-0.14598772],[0.53883415,-0.66247576,0.09985266,-0.6038839,0.5757858,-0.11846804,-0.5524721,-0.14494437,-0.50289154,-0.5902578,0.45613047,0.08691653,0.45961568],[-0.016912147,-0.4347032,-0.2132421,0.42222002,0.053901196,0.26849094,-0.52274466,0.45093128,0.11547074,0.5519499,0.23178731,-0.7015563,-0.14213508]],"activation":"identity","dense_3_b":[[-0.047897134],[-0.038441896],[0.028599853]]},{"dense_4_W":[[0.7028314,1.0645722,-0.27114505]],"dense_4_b":[[-0.04197308]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01200x00x00x00x008965B0R02200x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01200x00x00x00x008965B0R02200x00x00x00x00'.json new file mode 100755 index 0000000000..d92c39429b --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01200x00x00x00x008965B0R02200x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.6717544],[1.0947602],[0.46523303],[0.04071385],[1.0781838],[1.0831677],[1.0886382],[1.0836236],[1.0735654],[1.0567871],[1.0353881],[0.040535703],[0.04058452],[0.04062954],[0.040666204],[0.040554516],[0.040246446],[0.03986381]],"model_test_loss":0.006968128960579634,"input_size":18,"current_date_and_time":"2023-08-13_02-03-42","input_mean":[[25.24135],[0.03279265],[-0.008847487],[0.006320684],[0.035298277],[0.03512001],[0.033641964],[0.029695673],[0.029064743],[0.02506108],[0.02039471],[0.00622451],[0.0062250104],[0.0062315515],[0.006241794],[0.006244377],[0.00616693],[0.0059778835]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.4494311],[-0.19496632],[-0.26350814],[-0.56510746],[-0.21877296],[-1.3355609],[-0.29426798]],"dense_1_W":[[0.5206159,0.10576821,-0.11247911,0.20491163,0.33990794,-1.2525518,1.0583574,-0.34753868,-0.06646643,-0.14601575,-0.14929412,-0.29487255,-0.06879391,0.50932205,0.11869424,-0.58628404,-0.042017702,0.17407125],[-0.031322703,0.5768025,-0.0025023601,-0.21647467,-0.082024425,0.88715947,-0.71050763,-0.072764166,-0.051216543,0.09057434,0.05977775,0.19192873,0.29378706,-0.26843268,0.13159594,-0.41493884,-0.08635731,0.19498013],[-0.035252336,-0.9459374,-4.970837,-0.084247485,0.27099663,-0.059329633,0.52409726,0.007877367,-1.1663415,-0.26411596,1.3571975,-0.31273174,-0.3185127,0.23015912,0.062651314,-0.25624627,0.57898873,-0.027787916],[-0.0215698,-0.50061035,-0.0036015501,0.046023894,0.2602722,-0.871437,0.46986884,0.06857351,0.1074371,0.086234815,-0.19308428,-0.04312489,0.029021757,-0.003684175,0.14100845,0.042754482,-0.21663295,0.14043325],[-0.9751645,-0.12289358,-0.1406582,0.13687797,-0.35888916,0.6194974,-0.6489919,0.38132963,-0.07326873,0.23100159,-0.6815848,-0.007814461,0.26971263,-0.07363272,-0.1855483,-0.18125555,-0.049100105,0.115237534],[-0.50956905,0.48556384,-0.10785587,-0.2540192,-0.032906525,-0.49255675,0.41026026,-0.14745457,-0.5306201,-0.008835799,-0.08571492,-0.25413102,-0.05079176,0.53850764,0.27346227,-0.18674931,-0.07856052,0.025163196],[-1.0250858,-0.32162967,0.13932756,0.28023055,0.23404084,-0.4745412,0.6844042,0.0050328784,-0.06439692,0.17258103,0.4165711,-0.16924205,-0.4714274,0.1771986,0.08547189,-0.1035464,0.5452405,-0.35472986]],"activation":"σ"},{"dense_2_W":[[1.1859789,-0.51215285,0.9208667,0.011160324,-0.26782367,0.1654521,-0.27158707],[-0.12362681,-1.2787738,0.076242216,0.5843017,-0.26689935,1.0748321,-0.3880148],[-0.40252876,1.0881231,0.25295937,-0.93297756,0.32773137,-0.5535702,-0.67666596],[-0.7580509,0.71760464,-1.0216886,-0.1978493,0.4836637,-0.17133161,0.036033805],[-0.75000304,0.63558036,0.32057714,-1.0511792,-0.3177557,-0.044755217,-0.11034487],[-0.5645773,0.27898332,0.47402716,-0.738025,0.3021792,-0.9873278,-0.7891343],[0.11762674,0.73939085,-0.3103913,-0.98226845,0.64397097,-0.80232793,-0.652079],[-0.9045628,0.8587723,0.80991477,-0.8700875,-0.65929556,-0.4393104,-0.4573712],[-0.8187899,0.97374254,-0.38434175,-0.96596724,0.19627793,0.10464935,-0.12969106],[-0.04873503,0.14666314,-0.10507614,-0.78823173,-0.57198745,-0.65050966,-0.39800155],[-1.3525742,0.27251542,-0.61843866,0.19277906,0.55250853,-0.57587695,-0.25846016],[0.09460951,-1.0067326,0.18680768,0.6701155,-0.7826965,1.0157732,0.62720263],[-0.056878928,-0.9902501,0.07337474,0.5947333,-0.14998591,0.9698875,-0.47638628]],"activation":"σ","dense_2_b":[[-0.08574547],[-0.25192508],[-0.1600956],[-0.2021993],[-0.12500837],[-0.014394304],[0.12166485],[-0.097488604],[-0.09498941],[-0.23732203],[-0.0033244065],[-0.18101275],[-0.42470968]]},{"dense_3_W":[[0.70182776,0.90544015,-0.27932724,-0.49617624,-0.51897824,-0.6904145,-0.59277976,-0.5324393,-0.26049465,0.16030513,-0.42422092,0.3099378,0.20038018],[0.46004465,0.14226505,-0.016798219,0.26416388,-0.23000899,-0.043261927,-0.18217951,-0.56936485,0.18854964,-0.40769655,-0.5120887,0.026711667,0.48702645],[-0.44730246,0.035538714,0.6696084,0.078126684,-0.28074992,0.32122174,0.87967885,0.15473741,0.48827088,0.37981582,0.6514756,-0.90970725,-0.3196454]],"activation":"identity","dense_3_b":[[0.14994316],[-0.13599911],[-0.09733387]]},{"dense_4_W":[[-0.89249825,-0.056084827,0.3851996]],"dense_4_b":[[-0.14319709]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01300x00x00x00x008965B0R02300x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01300x00x00x00x008965B0R02300x00x00x00x00'.json new file mode 100755 index 0000000000..23317a11ef --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01300x00x00x00x008965B0R02300x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[9.1625595],[1.2922298],[0.62139535],[0.04567073],[1.2632741],[1.2715808],[1.280602],[1.2693822],[1.2542087],[1.2247165],[1.1909277],[0.045397192],[0.045449946],[0.04549305],[0.04545042],[0.045387167],[0.045147583],[0.044744927]],"model_test_loss":0.007525489199906588,"input_size":18,"current_date_and_time":"2023-08-13_02-31-54","input_mean":[[23.119978],[-0.008106127],[-0.0062186965],[-0.0048029637],[-0.007028825],[-0.0070267622],[-0.007759125],[-0.008229643],[-0.0065412563],[-0.0032345948],[-0.0015808723],[-0.0049269847],[-0.004904426],[-0.004871379],[-0.0047452976],[-0.0047200844],[-0.0047071795],[-0.004768657]],"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.01577489],[-0.036651418],[-0.53623146],[-0.43403396],[4.226777],[0.031024184],[-4.773621]],"dense_1_W":[[0.005327244,-0.8355596,-5.362093,-0.048572045,0.7178633,0.06106064,0.8468096,-0.2571259,-1.327196,-0.44217587,1.058469,0.056455363,0.14608839,-0.098923415,-0.23918279,0.04020538,0.23786233,-0.12770446],[-0.010223876,-0.72655255,0.016186269,-0.11808472,0.2876596,-1.2712218,0.5667468,-0.06084051,0.22512656,0.3755652,-0.40249628,-0.25125036,-0.21778338,0.5746524,0.078327455,-0.24237496,0.3175813,-0.17065156],[-0.6298655,-0.17408815,0.042584803,-0.12974305,-0.13674054,-0.59153414,1.1252804,-0.2748757,-0.054158274,-0.23418744,0.4553317,-0.65346336,0.012844898,0.62550545,0.32781297,0.10481739,-0.13386554,-0.13798119],[0.114467114,0.24316245,-0.021615224,0.023694778,-0.035225637,-0.8642168,0.8294254,-0.25606933,-0.040379446,-0.3500701,0.15988775,-0.56249446,-0.18230355,0.151895,0.51403975,0.42919087,0.06891423,-0.40883803],[1.7820107,-0.8729092,-0.18928063,0.09309557,0.3607095,-0.41220948,1.5652144,-0.46717206,-0.41226682,0.0013491283,-0.41942984,-0.089314334,0.004005952,-0.0747852,0.009556638,-0.010365505,-0.1098569,0.17348874],[0.0044284705,0.6163098,0.00083640264,-0.094127156,-0.18054871,0.9881279,-1.0137135,0.20937717,0.24207658,-0.08428015,-0.07552825,0.14980052,0.254931,-0.3509042,-0.14109994,-0.101399794,0.15016933,-0.14891316],[-1.9707493,-1.1365594,-0.2105259,0.37518528,0.6739353,-0.65524983,1.7848158,-0.51781315,-0.5952709,0.22437507,-0.5128836,-0.91568863,0.3721105,0.59358186,-0.64745224,0.10847048,-0.029750574,0.1424494]],"activation":"σ"},{"dense_2_W":[[0.1586283,0.49743327,-0.28523076,0.49164057,0.5328539,-0.36973375,0.12624636],[-0.48587608,-0.2487463,-0.402463,-0.3060397,0.36550063,0.62413186,-0.34166646],[-0.061889086,0.13580354,-0.05768418,0.19577123,0.74825233,-1.5275799,0.7398382],[-0.065775804,-0.68621314,0.34632745,-0.27306333,0.108429216,0.30584174,0.09895851],[0.062699154,-0.16094007,0.20373204,0.34869027,-0.24647439,-0.14964825,0.15067333],[-0.52050513,-0.28144282,-0.36549205,0.21830845,0.17705248,0.3885603,-0.4208156],[0.65049803,-0.7067532,-1.0366768,-0.71617734,-0.26613158,0.028896019,-0.6025038],[0.040614616,-0.5860749,0.0055378075,0.17320454,-0.3445164,-0.19920291,-0.76159173],[0.022094827,0.30371666,0.29163453,0.4747085,0.30273658,-0.80259377,0.18885104],[-0.5191858,-0.3626201,0.04160303,-0.24516961,0.25270674,0.3344741,-0.085464925],[-0.51586235,0.04108749,0.4809453,-0.68286794,0.22329661,0.64296246,-0.6787596],[0.71542096,0.24909717,0.18110462,-0.456406,1.59483,-0.40047887,-0.29970673],[0.09926485,-0.012050363,-0.00902432,-0.5706574,-0.62320197,0.99470526,-0.5348278]],"activation":"σ","dense_2_b":[[-0.28907308],[0.14058612],[-0.22265932],[-0.031506367],[0.011181118],[0.09338642],[-0.19179444],[0.025182663],[-0.16790742],[0.019717962],[0.025871284],[-0.48104918],[0.13777581]]},{"dense_3_W":[[0.39214996,-0.45933616,0.5931434,-0.14438477,0.025445614,-0.21986714,-0.4073649,-0.526483,0.32142904,-0.43845606,-0.5522683,-0.45861238,-0.23599972],[0.3541214,-0.12390408,0.65992594,-0.17913954,0.17470582,0.14348052,-0.46156922,0.09727183,0.47791806,-0.44638395,-0.35680237,0.28284937,-0.6322599],[-0.53958935,0.40429562,-0.25718197,-0.016856665,0.27269888,0.5572323,-0.11033956,0.29808432,-0.63412243,-0.18738142,-0.13287298,-0.55771834,0.74253505]],"activation":"identity","dense_3_b":[[-0.011752912],[-0.028205017],[0.029930305]]},{"dense_4_W":[[-0.4310748,-0.71519667,0.99503374]],"dense_4_b":[[0.028201103]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01400x00x00x00x008965B0R02400x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01400x00x00x00x008965B0R02400x00x00x00x00'.json new file mode 100755 index 0000000000..854e30f3d9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019 b'x028965B0R01400x00x00x00x008965B0R02400x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.595562],[1.3557196],[0.6436131],[0.045093063],[1.3374771],[1.3439865],[1.3497798],[1.3293898],[1.3081594],[1.2773685],[1.2442381],[0.044867057],[0.044940565],[0.04499815],[0.04493182],[0.04476657],[0.044359777],[0.043740414]],"model_test_loss":0.00823762733489275,"input_size":18,"current_date_and_time":"2023-08-13_02-59-30","input_mean":[[22.373413],[-0.041675597],[0.0139935],[-0.0017189209],[-0.04186074],[-0.041701995],[-0.04159802],[-0.031264056],[-0.02419872],[-0.014140531],[-0.0053126486],[-0.0018288051],[-0.0017968336],[-0.0017687711],[-0.0016978089],[-0.0016784823],[-0.0017457763],[-0.0018253779]],"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.2825171],[0.29270795],[-0.14191557],[4.8880744],[4.643753],[-0.022068096],[0.0074948124]],"dense_1_W":[[0.0032524515,-1.6502666,-5.143319,-0.08653302,0.74940306,0.079409406,1.0887363,0.55024517,-1.8755168,-0.37473255,1.0061337,-0.0072490247,-0.48503035,0.05145903,0.46511993,0.12256152,0.18945718,-0.26970908],[-0.5688282,0.3378242,-0.0820345,-0.35314164,-0.569916,-0.80707407,0.8573667,-0.4934631,-0.2502392,-0.106414326,0.23248182,-0.14921708,-0.1386045,0.47708175,0.50700176,0.44248942,0.027855754,-0.38461936],[0.21959259,-0.71326935,-0.07979012,0.34530672,0.636172,-1.2988864,0.6678013,-0.25917116,0.09184474,-0.032171894,0.1220121,-0.3971508,-0.46033743,0.8975076,0.10354636,0.072543696,-0.05976872,-0.14628923],[1.9510422,0.3866497,0.3618337,-0.12621135,0.20156476,0.15090744,-0.80365545,0.43618965,0.8912262,-0.21278769,0.53434885,0.22536062,0.21662591,-0.8340567,0.9400496,-0.24009539,-0.18682937,0.011327647],[1.9101932,-0.09988753,-0.35090855,-0.0016594501,-0.08788997,-0.25584847,0.5387623,-0.55900645,-0.7354033,0.11941465,-0.518064,-0.06519748,-0.0017339309,0.3745017,-0.6524051,0.06342098,0.34091005,-0.067744955],[-0.006107121,-0.09839651,-0.012231088,0.30222625,0.07460135,1.6269959,-1.7014208,0.03040909,0.22550346,0.044197246,0.0017101751,0.50942785,-0.16438055,-0.020442167,-0.1508841,-0.29599234,0.049566567,-0.19760182],[-0.020232651,-1.0527381,0.08056227,0.20597994,0.33630684,-1.5990256,0.97233945,-0.28341347,0.16153534,0.3039094,-0.3701453,-0.06703333,-0.18289685,0.3205004,0.21156645,-0.1997296,0.00204575,-0.10895797]],"activation":"σ"},{"dense_2_W":[[-0.57049316,-0.47958663,0.20998815,0.5900954,0.1954957,1.0093216,-0.37459356],[0.0711123,-0.05547968,0.24755229,-0.36353877,0.09672807,-0.2401484,0.6095298],[0.51119304,0.41856906,0.05460875,-0.19852686,0.20700233,-0.63960356,-0.03614955],[-0.44700778,0.22197174,-0.80856746,0.64109397,-0.5748055,0.7630393,-0.5093563],[-0.119287774,0.29882818,0.78802735,-0.5391423,-0.01341688,-0.67587036,0.41711807],[0.18750283,-0.7311276,-0.3832002,0.37338614,-0.50132436,0.13879292,-0.27468982],[0.2099454,0.06710706,0.49674693,-0.27869275,-0.057731844,-0.3134266,0.05398349],[-0.34767157,0.12649035,-0.82919586,0.03299373,-0.30653405,0.2602203,0.034945954],[-0.19299687,0.18560947,0.3825491,-0.08262691,-0.022920206,-0.03981069,0.5391385],[0.06231773,-0.6864966,-0.21304713,0.72882277,-0.8002371,0.68702626,-0.5636007],[-1.1283545,0.66055053,-0.60280657,-0.44466072,-1.1954936,-0.02034466,0.1492789],[0.054777786,0.22702163,-0.23401575,0.25109196,-0.7091251,-0.12651615,-0.074743904],[-0.23125705,-0.038868073,-0.0094622,-0.45092142,-0.56356156,0.11221505,-0.08776925]],"activation":"σ","dense_2_b":[[0.1788275],[-0.029162887],[-0.05410552],[0.14040445],[-0.05081904],[0.03014496],[-0.0008108878],[-0.2395291],[-0.0013514905],[0.25322255],[0.14901285],[-0.2634512],[-0.23830526]]},{"dense_3_W":[[-0.5489028,0.18956307,0.20569573,-0.6213917,0.7467413,-0.54990596,0.4036336,-0.026636245,0.5315489,-0.5165829,-0.7388474,-0.1318045,-0.034361653],[0.380212,0.4771973,-0.44244605,-0.54885596,-0.39711758,0.59357476,0.23979527,0.008609023,0.44370395,0.27729112,0.04513358,0.52764195,-0.15440719],[-0.27805048,0.48927543,0.31558773,-0.2270046,0.21011017,0.098380476,0.47707695,-0.25754115,0.26487526,0.0036550455,-0.24167007,0.37545148,0.19212462]],"activation":"identity","dense_3_b":[[0.028461946],[0.00041110683],[0.007205736]]},{"dense_4_W":[[-1.1770037,-0.121750355,-0.17705767]],"dense_4_b":[[-0.025750196]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019.json new file mode 100755 index 0000000000..771d0d0b45 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2019.json @@ -0,0 +1 @@ +{"input_std":[[9.56172],[1.5150591],[0.61463565],[0.048025005],[1.4822352],[1.4941419],[1.505296],[1.4785786],[1.4448495],[1.4001503],[1.3552352],[0.047890753],[0.047929697],[0.047957852],[0.0478742],[0.047784578],[0.047500774],[0.04700782]],"model_test_loss":0.013011353090405464,"input_size":18,"current_date_and_time":"2023-08-12_23-45-39","input_mean":[[22.329546],[-0.045605175],[0.01592502],[-0.0018784865],[-0.045549437],[-0.045191955],[-0.044704963],[-0.035537414],[-0.026267633],[-0.0157286],[-0.00838497],[-0.001896298],[-0.0018774128],[-0.0018634307],[-0.0018498951],[-0.0018851961],[-0.0019609453],[-0.0019896321]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-4.30314],[-0.14142546],[-0.013767572],[1.194878],[-1.2208039],[-4.3557434],[0.08794612]],"dense_1_W":[[-1.8972677,0.9672059,0.25824386,0.0828847,0.3341447,0.69297504,-1.9695483,0.038245548,1.0612612,0.13501422,0.27874982,-0.09969699,0.0374315,0.48933214,-0.011004679,0.017130712,-0.2716565,-0.23346075],[-0.007528385,2.1774812,-0.114808366,-0.39051452,0.7741447,1.1673083,0.13397868,0.44196582,0.9315971,0.6791667,0.5054393,0.15570343,0.23017462,-0.031832017,-0.076586366,0.25111264,0.24159965,-0.33496174],[0.0030608005,1.4381056,0.11511048,-0.7743296,-0.7203884,1.597554,-0.99584186,0.5960368,-0.19229466,-0.2975349,-0.011686272,0.49059817,0.1897865,-0.60492635,-0.6754905,0.101577304,0.31291947,0.25055414],[-1.0824282,-0.3043732,0.008584764,-0.018848956,-0.2089088,-1.0749328,1.0982482,-0.045640092,0.044488285,-0.11731847,-0.026736904,-0.57326096,-0.046581715,0.0950547,0.23073886,0.3822833,-0.2204155,0.1618918],[1.0632011,0.031152897,0.009230802,-0.39440817,0.18390684,-1.6168276,0.77715576,-0.050903037,0.16450162,0.124611534,-0.24373147,0.17009573,-0.5080612,-0.038760606,0.6419307,-0.1795093,0.24181002,0.07538436],[-1.9245406,-1.2917063,-0.26165596,0.39217517,-0.32974318,-0.9253293,2.608757,0.04103854,-1.2233304,-0.3679585,-0.086496115,-0.66351557,0.284825,-0.11610917,-0.6876215,0.44495583,0.12274311,0.21472873],[-0.0011509256,1.924439,4.888321,-0.34858927,-1.0936936,-0.2615667,-0.22090028,0.51795596,1.1996402,-0.060851824,-1.5311006,0.81339735,-0.17505,-0.25228173,-0.29199755,-0.48492575,0.2323905,0.3359508]],"activation":"σ"},{"dense_2_W":[[-0.04723237,-0.5713439,-0.44814402,-0.3774354,0.23023804,-0.20165691,-0.4617632],[0.81059057,-0.33529666,0.6886719,-0.47035518,-0.55307055,-0.28818864,0.12439424],[-0.11119899,0.1494808,-0.64621824,-0.3822803,-0.10293467,-0.13095938,-0.5011403],[-0.7855487,-0.074596755,-0.277924,0.6098594,0.39072365,0.54389304,-0.04757158],[-1.0348403,-0.13555157,-0.79879016,0.699813,0.8297562,0.72075176,-0.1580287],[-0.12593223,-0.5242968,0.0027506559,-0.9838703,-0.14292116,-0.21127757,-0.4181084],[0.6277679,-0.06471201,0.2519138,-0.44575757,0.0035869328,-0.8165587,-0.14451581],[0.60958606,0.1644053,0.5917127,-0.34198347,-0.19222917,-0.6290825,0.20473154],[-0.29616356,-0.008838329,-0.56584114,-0.01621055,0.6894716,0.5036691,-0.23140316],[0.3176332,0.55119896,0.49262676,-0.6794437,-0.6079304,-0.71099347,0.47087783],[-0.001160002,0.21010941,0.29942355,-0.37181187,0.101982266,-0.29694918,0.7613698],[-0.57210505,-0.40474287,0.14816071,0.5515802,0.71525896,0.29420164,-0.41057208],[-0.031878855,0.1834812,-0.557275,-0.16315645,0.73640525,0.5667018,-0.106642045]],"activation":"σ","dense_2_b":[[-0.28198278],[-0.031724684],[-0.2700433],[-0.14344712],[-0.0712461],[-0.207197],[-0.1985745],[-0.07992782],[-0.09112537],[0.012330677],[0.035785448],[0.029941175],[-0.07723248]]},{"dense_3_W":[[-0.41012377,-0.0750153,-0.51992136,-0.575433,-0.15829727,0.14711393,-0.2113123,0.6098498,0.2744829,-0.19297485,0.11055155,0.11664247,-0.42073438],[-0.42603567,-0.2637008,-0.4624474,0.37126887,0.3297134,-0.24870478,-0.71104676,-0.42295957,0.09491146,-0.68906903,-0.06497983,0.4588389,0.36360323],[0.0015361789,-0.27568248,0.044544894,-0.35505277,0.5103815,0.18121512,0.29294804,0.0725655,0.60120976,-0.026808323,-0.29816794,0.5696804,-0.28550223]],"activation":"identity","dense_3_b":[[0.050192077],[-0.035694942],[-0.053834025]]},{"dense_4_W":[[0.8585161,-1.0563794,-0.6090095]],"dense_4_b":[[0.04216754]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'8965B42172x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'8965B42172x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..f40d2fa792 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'8965B42172x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.412672],[1.1979997],[0.6317731],[0.044134922],[1.1613084],[1.1757178],[1.1884606],[1.1675756],[1.1450535],[1.1208285],[1.0900035],[0.043903794],[0.043967567],[0.04402576],[0.044101108],[0.044096585],[0.043959502],[0.04365427]],"model_test_loss":0.009366453625261784,"input_size":18,"current_date_and_time":"2023-08-13_04-00-19","input_mean":[[22.805677],[0.042888522],[-0.002057468],[-0.017817942],[0.045564543],[0.04457066],[0.04343476],[0.04418247],[0.042020433],[0.034090705],[0.033118203],[-0.017768152],[-0.017786173],[-0.017803175],[-0.01795426],[-0.017958898],[-0.018003935],[-0.018080201]],"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.110753275],[-3.7608747],[0.0069373823],[-0.4614981],[-3.301801],[-0.014949581],[0.13146858]],"dense_1_W":[[-0.0036052228,-0.9134565,0.011775863,-0.104338825,0.50702333,-1.3347127,0.43979335,0.32727206,-0.3549518,0.1707619,-0.06355575,-0.42169005,0.11168042,0.32078785,0.16003191,0.22976972,-0.3087875,0.02821579],[-1.5740833,-0.5183325,-0.25200287,-0.1016893,0.21293215,-0.26341066,0.8987055,-0.7441156,-0.34343657,0.10333513,0.015100161,-0.025416875,-0.34263033,0.3139959,0.31424755,-0.0986391,-0.1432429,0.2556411],[0.012172019,0.7366857,4.0765634,0.5199466,0.5682854,0.4320513,-1.0643913,-0.4115053,0.25080773,0.15999946,-0.6883774,0.4775558,-0.14264597,0.25075626,-0.79590684,-0.5458843,0.14667971,0.2089872],[-0.006554994,-0.65382326,-0.0152408695,0.45012295,0.43787235,-1.2492634,0.96254647,-0.0071797133,0.20040128,0.052020404,-0.12437481,-0.55438083,-0.17110933,0.1521984,0.3463892,-0.29791614,0.38824236,-0.24384183],[-1.5182815,0.36061874,0.24495271,-0.28876624,-0.054025646,0.09653467,-0.6130963,0.58099127,0.13013393,0.15593274,-0.05823013,0.42072526,0.30042237,-0.8197303,0.4167901,0.12898338,-0.19402294,-0.1354475],[-0.0022215121,-0.35342693,0.05437431,0.07748616,0.15085074,-0.74330544,0.8852311,-0.09556112,0.18634337,-0.15945065,-0.00033352937,-0.1618802,-0.19378874,0.112232834,-0.2201298,0.32024163,-0.07431912,0.20214744],[-0.012104868,0.06879351,0.20518698,-0.3500171,-0.54368746,0.8862013,-0.4934571,0.2377762,0.40319738,-0.15937808,-0.36041725,0.014896415,-0.16455528,-0.76308006,0.1687108,0.33528942,0.39151073,0.23726699]],"activation":"σ"},{"dense_2_W":[[0.40863213,1.09518,-0.25529328,0.31099716,-0.23821151,-0.1252298,-0.5552002],[-0.42047146,-0.4827329,0.2864231,-0.765981,0.47332808,-0.15582423,0.40268713],[0.63550895,-0.029280502,0.17191784,1.1201406,0.10288998,0.7509795,-0.70378363],[0.15874045,0.1510755,-0.3895043,0.6858349,0.16745095,0.3997049,-0.4700419],[-0.29952693,0.22967328,0.2863864,-0.810409,0.6171967,-0.8057256,0.08393511],[-0.6486345,-0.023099914,0.4675164,-0.6659177,0.25236258,-0.71584076,0.3096002],[0.71282494,0.33055237,-0.11847034,0.60865057,-0.772154,0.49154654,-0.5714387],[-0.78605217,-0.00037871118,-0.3303249,-0.6224991,-0.14092278,-0.09522645,-0.30699593],[0.8150833,-0.19859204,-0.2607902,0.5500899,-0.53263944,-0.09620078,-0.07882722],[-0.6767907,0.010670528,0.32155117,-0.08829821,0.5477537,-0.07313992,-0.5654307],[-0.09579456,-0.42669368,0.27080974,-0.6856269,0.4908146,-0.70633966,0.13399492],[0.45092934,-1.0722996,-0.5651186,-0.8076614,-0.44906232,-0.43937942,-0.30797964],[0.330296,-0.6318943,0.30196452,0.08447742,0.35562196,-0.72430176,-0.7196764]],"activation":"σ","dense_2_b":[[-0.10103021],[-0.07237988],[-0.10848336],[-0.036251254],[-0.06057428],[0.2591175],[-0.13453443],[0.038662404],[-0.03901396],[-0.10080519],[0.21275711],[-0.16303454],[-0.122491874]]},{"dense_3_W":[[-0.438746,-0.2728812,0.045525227,-0.3864609,0.36935923,0.21368839,-0.5939579,0.16156128,0.114174105,0.013049866,-0.008147875,-0.4032706,0.18928905],[-0.54620934,0.5383141,-0.4279512,-0.4393462,0.6210919,0.52767473,-0.47722214,0.66437435,-0.2349947,0.24046247,0.7181641,0.4821915,0.1510222],[0.63923234,0.064001255,0.62742436,0.21747853,-0.37516952,-0.08939772,-0.07508889,-0.52245426,-0.36398694,0.08213987,-0.6971847,-0.47528505,0.28324062]],"activation":"identity","dense_3_b":[[-0.016175348],[-0.045647956],[-0.029259264]]},{"dense_4_W":[[0.4314022,1.2294345,-0.15208964]],"dense_4_b":[[-0.03797295]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'8965B42182x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'8965B42182x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..7e99b3ee34 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'8965B42182x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[7.038209],[1.09115],[0.58841705],[0.04120297],[1.0650965],[1.0757538],[1.0846869],[1.0705407],[1.0502529],[1.0200819],[0.9942558],[0.041278385],[0.041227303],[0.041172404],[0.04093896],[0.04077007],[0.040474173],[0.04011864]],"model_test_loss":0.008322028443217278,"input_size":18,"current_date_and_time":"2023-08-13_04-26-29","input_mean":[[19.35511],[0.030055698],[-0.016438086],[0.010118738],[0.034582045],[0.03268271],[0.030520633],[0.024380086],[0.01949945],[0.009070484],[0.0008187817],[0.010378993],[0.0103315525],[0.010291569],[0.0102992],[0.010390825],[0.010437563],[0.010471735]],"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.71080106],[-0.39767665],[-1.0195663],[-2.4454567],[2.2261577],[-0.09989114],[0.12794948]],"dense_1_W":[[-0.6734729,-0.28932476,0.0138231935,0.6177876,-0.15232189,-1.1696538,0.730194,0.022715418,0.6191517,-0.14222449,-0.26050287,-0.4294454,-0.33338618,0.43053976,0.0796189,-0.26277167,0.2849497,-0.15557633],[-0.05414103,-2.266047,0.00613671,0.03952902,-1.5264792,-1.9569396,-0.6220431,-1.4173054,-0.75115013,-0.51321524,0.081751466,-0.010653298,-0.18178755,0.30361202,0.1966698,0.10920531,-0.1763718,0.46204364],[0.59744245,-0.45304865,0.01262204,0.17445521,-0.24134386,-1.0839043,0.67658186,0.4959112,0.036302716,0.21944934,-0.37493265,0.031681668,-0.380639,-0.016364183,0.47792554,0.2549743,-0.2674703,-0.011161444],[-0.6851998,-0.400606,-0.49484125,-0.214028,-0.1954561,-0.20455971,0.19458835,-0.62406296,-0.24194877,-0.17115325,0.3458003,-0.38039616,-0.19315414,0.7750066,0.27001703,-0.032702632,0.17871174,-0.09447013],[0.68511105,-0.46930492,-0.49280137,0.10116556,-0.2338568,-0.67072135,0.66908896,-0.36548007,-0.45608816,-0.055914342,0.27099574,-0.15043867,-0.3710818,0.33710575,0.39674795,-0.10886804,0.23883794,-0.13643274],[0.029596586,-1.8378116,-4.835868,-0.117306955,0.68529356,-0.2723494,0.8876275,-0.08609639,-0.17212754,-0.0016869277,0.6372433,-0.34045476,-0.32072458,0.5590455,0.019711575,0.08534893,0.22889003,-0.008147916],[0.12550998,-0.5612814,-0.015401064,-0.12878568,1.311814,-1.4296403,1.0471376,-0.05140145,-0.37987107,0.057461046,0.23428072,0.10266636,-0.17472467,0.22596104,-0.0015113074,-0.029831069,-0.23511468,0.16630976]],"activation":"σ"},{"dense_2_W":[[-0.16429533,-0.37868544,-0.86968327,0.038888782,-0.6123927,0.0023984741,-0.057672873],[-0.8476257,-0.29583248,-0.67205304,-0.36270946,0.27317914,0.37164906,-0.2357329],[0.4565083,-0.055655904,0.442506,0.36896625,0.50816137,-0.031650446,-0.08521712],[0.9475783,-0.42539543,0.16942857,0.6493747,-0.1678662,0.084014334,0.41585678],[0.19024913,-0.35226712,-0.28252858,0.41698533,-0.87595725,-0.58208317,-1.0035533],[0.7211048,0.63076013,0.3922959,1.2696142,-0.70998734,-0.14198317,0.2581067],[-0.83778936,-0.04513129,-0.14693034,-0.14507426,-0.40756947,0.13452101,-0.7361817],[-0.29602185,0.040760204,-0.41493273,-0.40465754,-0.08350711,-0.33569443,0.19498646],[-0.15095061,0.33132613,0.5001891,-0.11200301,0.5794387,0.57178,0.43034536],[-0.67328364,-0.6793664,-0.3576356,0.018860316,-0.34526905,0.2174788,-0.77950203],[0.3714874,0.3679473,-0.5132016,-0.37143388,-0.82780284,-0.5017991,-0.6383511],[-0.10127275,0.23966174,-0.2606357,-0.6428221,-0.50568867,-0.20557041,-0.23762174],[0.020065116,-0.2712377,0.249374,-0.14273904,-0.64751804,-0.7200119,-0.34964135]],"activation":"σ","dense_2_b":[[0.012003523],[0.0066150334],[-0.19111954],[-0.22128096],[-0.17908531],[-0.7933061],[-0.027471995],[0.122777395],[-0.33527485],[0.06287324],[0.14836572],[0.06252556],[0.09372547]]},{"dense_3_W":[[-0.23665334,0.723523,-0.63925576,-0.6986978,-0.17180254,0.12065741,0.11170402,0.09213536,-0.72547287,-0.060505576,-0.07866674,0.598629,0.61649084],[-0.5524962,-0.6655416,0.49857664,0.40452972,-0.23933083,0.37202802,-0.18277252,-0.3782749,0.18721648,-0.7559194,-0.61349714,-0.63339907,-0.47192994],[-0.59970725,-0.032464698,0.5048768,0.3264773,-0.12589443,0.22296196,-0.11026481,-0.4933927,0.17230077,0.19409345,-0.5158414,-0.41455555,-0.16241634]],"activation":"identity","dense_3_b":[[-0.030606706],[0.07558715],[-0.078843266]]},{"dense_4_W":[[0.48447892,-1.2192938,-0.18857154]],"dense_4_b":[[-0.0684882]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'x028965B0R01500x00x00x00x008965B0R02500x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'x028965B0R01500x00x00x00x008965B0R02500x00x00x00x00'.json new file mode 100755 index 0000000000..e44065aaf6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022 b'x028965B0R01500x00x00x00x008965B0R02500x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.7215185],[1.5296972],[0.6329213],[0.048140034],[1.5023713],[1.5115433],[1.5213315],[1.4992337],[1.4733845],[1.4334533],[1.382772],[0.047901835],[0.047970153],[0.04804064],[0.048103515],[0.048074424],[0.04788978],[0.047572568]],"model_test_loss":0.007313914597034454,"input_size":18,"current_date_and_time":"2023-08-13_04-58-50","input_mean":[[24.426073],[0.0035376903],[0.010450098],[-0.0058580884],[-0.0003155768],[0.0006170886],[0.000841817],[0.008119883],[0.013678599],[0.016964255],[0.018914642],[-0.005899203],[-0.0058827517],[-0.0058742235],[-0.00586261],[-0.005887352],[-0.006023831],[-0.006199134]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.9262018],[0.6111764],[-0.21979779],[-0.08344832],[0.022952111],[2.2652647],[-0.055222925]],"dense_1_W":[[0.9477257,-0.010930782,0.2693092,-0.45176712,0.17638065,1.0103005,-1.1566194,0.1956058,0.48887056,-0.27086145,0.17099643,0.25299495,0.017165674,0.022744065,-0.2071281,0.51604414,-0.05360476,-0.08305532],[1.0653174,-0.19370075,-0.025619261,-0.07976432,0.21888945,-0.01620505,1.3145335,0.19960856,-0.16116017,-0.078303546,0.18846263,-0.4369984,0.07841701,0.5242291,0.21971513,-0.06500557,-0.6251961,0.35055155],[-0.010343126,-1.5992315,-5.575023,0.1296738,0.96921855,0.65707296,0.41981772,-0.39755943,-0.6237099,-0.5377202,0.82652205,-0.46393546,-0.0025167326,0.041792773,0.53836185,-0.20812295,0.23478688,-0.22422998],[-0.06835915,-0.6826863,-0.015550686,-0.1606268,0.49856377,-1.4255869,0.9663564,-0.13549313,0.11399871,-0.09810915,0.016424825,-0.27376917,0.32651708,-0.062065434,0.25883147,0.07828936,-0.12748928,-0.020732597],[0.1960928,0.63389885,-0.03986251,-0.14436735,0.3994569,1.0923187,-1.275591,-0.005756016,-0.022560176,0.09950554,0.08471099,0.21786727,0.053738844,0.26008365,-0.37622976,-0.28200307,-0.0041179312,0.25905907],[0.88009626,-0.059545647,-0.22990677,0.07681021,-0.3075392,-0.30781925,0.5865939,-0.20266494,-0.2824905,0.08512942,-0.08384962,-0.23466583,0.10275819,0.017015647,0.14026842,-0.11592076,0.022960545,-0.014085652],[-0.0016292254,-0.029161997,0.011123573,0.08816466,0.2067326,-1.0287801,0.82265383,-0.50439996,-0.41555846,0.018268801,0.21765414,-0.426295,0.08660844,0.20978588,0.32856998,-0.16593574,0.3182436,0.065723486]],"activation":"σ"},{"dense_2_W":[[-0.661899,0.42421028,0.1291513,0.5268525,0.27374566,0.14350797,0.048248857],[-0.11925823,0.11275892,-0.41860747,0.54141617,-0.53575426,0.08692167,0.5685374],[-0.47604066,0.40048516,-0.20540014,0.2697244,-0.59070647,0.4921443,0.2070969],[-0.32401973,-0.38705194,0.27830896,0.67634106,-0.7964134,-0.31952748,0.38753203],[0.24913147,-0.6288573,-0.30587563,-0.6941863,0.49562398,-1.0631434,0.14025775],[0.38366526,0.10850745,-0.16820778,-0.61344117,0.7374608,-0.6747489,-0.4225247],[-0.92967755,-0.35374784,0.19986466,-0.42288387,0.06183304,0.25832188,-0.25597203],[0.37240422,-0.8985459,-0.7266072,-0.50966,0.232016,-1.608445,-0.05613529],[-0.48152244,-0.6014514,0.05382254,-0.49254656,-0.49155635,-0.2361675,-0.46588454],[0.1545446,-0.4907671,0.5083054,-0.2939329,-0.4241678,-0.30181906,0.023612102],[0.5494282,-0.58802557,0.2443711,-0.25153464,1.2320807,-0.1922564,-1.3002108],[1.0176622,-0.21668118,-0.57886964,0.23822442,0.5329754,-0.22148608,-0.86639875],[-0.64741355,-0.27867457,-0.3316186,0.47602695,-0.22179708,0.23058596,-0.22336796]],"activation":"σ","dense_2_b":[[-0.014282428],[-0.015652178],[-0.049183264],[-0.036203776],[-0.056914896],[0.044381518],[-0.24765426],[0.18313628],[-0.24192591],[-0.027628785],[0.10131799],[0.16464141],[-0.029622875]]},{"dense_3_W":[[-0.30585924,-0.29776183,0.017245587,-0.13364966,-0.03414496,-0.038568087,-0.4033021,0.49503553,-0.28328845,0.058581755,-0.52184415,-0.048386358,0.3499786],[-0.4463572,-0.28294104,-0.3023481,-0.6776053,0.3948947,0.5377114,-0.4929832,0.6458604,-0.41316226,-0.25560462,-0.017290222,0.52392954,-0.13529858],[-0.31588498,-0.4325672,0.013085138,-0.35966408,0.3466711,0.64089996,0.41701752,0.48426676,0.4087031,-0.117455825,0.54724884,0.014698518,0.3365335]],"activation":"identity","dense_3_b":[[0.03199178],[-0.015016341],[-0.030428993]]},{"dense_4_W":[[-0.47214445,1.2712222,0.7399426]],"dense_4_b":[[-0.017716983]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022.json b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022.json new file mode 100755 index 0000000000..07bdba6c47 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA RAV4 HYBRID 2022.json @@ -0,0 +1 @@ +{"input_std":[[9.080224],[1.5475338],[0.6496774],[0.04879169],[1.5158907],[1.5278002],[1.5390717],[1.5098101],[1.4782969],[1.4340739],[1.3853667],[0.04868462],[0.048710395],[0.048738956],[0.048690505],[0.048625976],[0.048370127],[0.047957957]],"model_test_loss":0.008909840136766434,"input_size":18,"current_date_and_time":"2023-08-13_03-33-40","input_mean":[[23.622572],[0.010716067],[0.014080395],[-0.00545363],[0.00681623],[0.008023216],[0.008976955],[0.015593329],[0.018596267],[0.022246595],[0.02417008],[-0.0054850946],[-0.0054803547],[-0.0054753944],[-0.0054708053],[-0.005519239],[-0.005560871],[-0.005648205]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5925863],[0.6910273],[0.0029014468],[0.043235566],[-0.055107236],[3.6387718],[3.6793168]],"dense_1_W":[[0.24347192,0.0785397,-0.030702522,0.19405046,-0.09431407,1.6046176,-1.1419742,0.19336075,-0.062058806,0.14076506,-0.0068204296,0.27706286,0.0753339,-0.4532859,-0.35606033,0.21351701,-0.18941605,0.044432733],[-0.45700783,-0.062406845,-0.031097766,-0.5659944,0.024210662,1.39045,-0.9837826,0.11537844,0.2825425,0.046704102,-0.061710272,0.50674444,0.19582161,-0.10567522,-0.08106667,-0.1992534,-0.21138985,0.24457377],[0.007203359,-1.2377197,-4.586871,-0.11203177,0.5719472,0.0427435,0.5389759,0.26149252,-0.57496494,-0.524192,0.57842165,-0.22961466,-0.37423873,0.35315713,-0.10196228,0.2160896,0.4271714,0.017925069],[-0.0054053566,1.579078,-0.06120463,-0.20971349,0.046022303,0.93902045,-0.78088397,0.02447776,-0.07060164,-0.06981518,0.1699867,0.10647593,-0.24200302,0.018979385,-0.0083929775,0.18985271,0.13718374,-0.088825986],[0.095188886,0.6861187,0.10568597,-0.1301086,-0.7698879,0.83482885,-0.5525881,0.38867232,0.224815,-0.09360383,-0.16623642,0.5329297,-0.023406014,0.19236702,-0.75461245,-0.46940014,0.32178688,0.16902733],[1.5707638,0.61578625,0.23603536,-0.10848588,-0.02725563,0.6388082,-0.88916034,0.20878781,0.15096506,-0.07481069,0.050539907,0.08200025,0.027791992,-0.33376747,0.32451573,0.21383548,-0.019029131,-0.1541287],[1.5059847,-0.55344844,-0.24463375,0.061645243,0.0208355,-0.6283204,1.0164922,-0.39539093,-0.3376693,0.14381117,0.014864233,0.15729472,-0.36920083,0.09105627,0.22073188,-0.3185754,0.1361389,0.0030957134]],"activation":"σ"},{"dense_2_W":[[0.8278061,0.00944368,-0.47221076,0.5170837,0.5817161,-0.28623572,-1.3400604],[-1.1041138,-0.63026905,0.07870919,-0.08548198,-0.400506,-0.27927935,0.3597091],[0.27548513,0.17060155,-0.43422616,0.46099278,0.14646465,0.4412418,0.29597026],[-0.19179592,0.59959507,-0.45964202,-0.03809237,0.574291,0.57724786,-0.9947663],[0.9136712,0.04980523,-0.6333211,0.30888626,0.3298961,-0.24825113,-0.99664354],[0.3825098,0.8290921,0.63622355,0.5099953,-0.3108262,0.32984248,-0.41125965],[0.2868915,0.2814047,-0.35160798,0.19865306,0.22140126,0.53437257,-0.19641446],[-1.1109287,0.3453166,0.32968,-1.0854727,-0.5026547,-0.061587382,1.7998439],[0.098573364,0.6721182,-0.35533735,-0.09068599,0.18878801,1.0343286,0.09213373],[-0.23218085,-0.16048461,0.6798084,-0.64267206,-0.8845718,-1.8911213,0.5121272],[-0.54387015,-0.23149288,-0.30668664,-0.20229974,-0.30891183,-0.5950911,-0.1115899],[-0.25720352,-0.55898094,-1.0450321,-0.4148398,-0.31979793,-0.07070874,-0.10942721],[0.34567067,0.8965103,0.050285354,-0.1771556,0.119312696,0.3056499,-0.6886853]],"activation":"σ","dense_2_b":[[-0.39942527],[0.30935934],[-0.16508539],[-0.13897029],[-0.5619027],[-0.24792555],[-0.107184075],[0.5673597],[-0.21446894],[0.51320654],[0.042424392],[-0.15152127],[-0.24059872]]},{"dense_3_W":[[0.4104882,-0.23413022,0.5933587,0.5129894,-0.017641984,0.35903862,0.13990471,-0.6462935,0.53985685,0.037760712,-0.46011966,-0.48272845,-0.33265826],[-0.56515414,0.7211797,0.3708711,0.09521525,-0.016219772,-0.7927581,0.04320575,0.08196957,-0.177058,0.63587785,-0.34107837,0.37444627,-0.13801615],[0.5979246,-0.8661764,0.29252937,0.59611315,0.30349368,-0.11060929,0.22178161,-0.45007005,0.12280302,-1.1837198,-0.28847334,0.091526695,0.4002503]],"activation":"identity","dense_3_b":[[-0.1171355],[0.0760098],[-0.07621718]]},{"dense_4_W":[[0.17640126,-0.5432617,0.8457692]],"dense_4_b":[[-0.072637506]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45070x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45070x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..1d00c216e5 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45070x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.280848],[1.1441286],[0.49247316],[0.043405242],[1.1318773],[1.1372043],[1.1416951],[1.1172512],[1.0926574],[1.0570114],[1.0212463],[0.043282885],[0.0433304],[0.04336672],[0.043335043],[0.043221824],[0.042944487],[0.042431764]],"model_test_loss":0.016205428168177605,"input_size":18,"current_date_and_time":"2023-08-13_05-56-46","input_mean":[[22.453661],[-0.009690426],[0.0065032323],[-0.011651958],[-0.011165308],[-0.010400566],[-0.010001306],[-0.006500233],[-0.0026201021],[-0.00101425],[0.0021699886],[-0.011677432],[-0.011668723],[-0.011660133],[-0.011728811],[-0.011773433],[-0.011841056],[-0.011894497]],"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.45916697],[0.17990263],[2.2869246],[-0.1486742],[2.143754],[-0.3825331],[0.16539572]],"dense_1_W":[[0.10585518,-0.46735394,-0.009863335,-0.021381542,-0.4244482,-1.2823756,1.3433533,-0.017593514,0.100421146,0.03068365,-0.19143356,-0.8520446,0.08467846,0.82457775,0.26455942,-0.011366051,0.06678089,-0.16026749],[-0.06685822,-1.7700669,0.11150118,-0.28181335,-1.0776445,-2.2213879,0.06633769,-0.15360656,-0.8972572,-0.9021122,0.29181656,-0.7535559,0.32498777,0.30637822,-0.28905466,-0.0010783104,-0.22794016,0.15364477],[1.2818815,0.109987624,0.2811549,-0.068773136,0.79602146,1.4748589,-1.2838098,0.6895842,0.17164242,-0.20557097,-0.15411322,0.64261883,-0.10280259,-1.076077,0.26151523,-0.14356074,0.22765741,-0.1712026],[0.00041574636,-0.8197861,-7.5684586,-0.20047867,1.8402718,1.5231626,1.8098993,-0.22563997,-3.465762,-1.2912288,0.45179537,-1.9075481,-0.4387407,0.33126295,0.9639218,0.17788078,0.9106507,0.21989372],[1.3135848,-0.7858198,-0.29094377,0.46257696,-0.6470547,-1.1060529,0.93220985,-0.29039016,-0.13737987,0.22807792,0.091788515,-0.4748053,0.29867622,0.10891013,0.1858073,-0.2401894,0.0743765,0.03681374],[0.17066078,0.8237773,0.015143466,-0.29137167,0.4125562,0.54849124,-1.2481003,0.22669321,0.16218764,0.29865333,-0.25207785,0.55817974,0.21856284,-0.39747208,-0.28270063,-0.124221325,-0.20349917,0.31628203],[0.009792184,1.0716915,2.69444,-0.35925958,-0.23096997,0.36079913,-0.89602,0.5258335,0.7044103,0.23169777,-1.0493258,1.1821613,0.088788554,-0.035593744,-0.9683611,-0.04424868,-0.010434928,-0.043576322]],"activation":"σ"},{"dense_2_W":[[0.88951546,-0.42895758,0.10749227,-0.3381338,0.09804924,-0.3220585,-0.34573475],[-0.17474814,-0.7170482,-0.4465272,-0.64623255,-0.80796534,0.3396964,0.07690326],[-0.5762065,-0.6574665,-0.29811725,-0.5354601,-0.6161121,-0.66814727,-0.2610467],[-1.3073108,0.15640761,-0.30923235,-0.17911297,-0.16084199,0.69541067,-0.20413654],[0.90569836,0.4278247,-0.25071362,-0.5082455,0.06064604,-0.63132465,0.46831772],[-0.094200686,-0.14353256,-0.27645656,-0.27311286,-0.14429812,0.091689125,-0.28688306],[-1.1108559,-2.1028638,2.165349,-0.4345446,1.483305,1.620506,0.45829046],[0.09066979,0.10443071,-0.6832421,0.356451,-0.74987555,-0.29007706,-0.6587826],[-1.3760568,0.9482072,-0.18900378,-1.0709974,0.0681376,1.1254492,0.5331122],[-0.07830287,-0.39997748,-0.14344335,0.5135632,-0.47504225,0.22800393,0.12365315],[0.63020027,0.13533631,-0.3766346,0.527763,-0.6002866,-0.6792991,-0.053642306],[-1.2443005,-0.5468849,-0.62122345,0.013166506,-0.86239994,0.025351316,0.6255306],[-0.8236448,-0.8727682,-0.48299453,-0.04941957,-0.7763088,0.8878766,-0.12215169]],"activation":"σ","dense_2_b":[[0.0247172],[-0.06766249],[-0.24181516],[0.13942689],[-0.0052647507],[-0.0077950996],[0.6178939],[-0.27566597],[0.032193415],[0.014206651],[-0.071907036],[-0.05319885],[-0.047229856]]},{"dense_3_W":[[0.47991514,-0.21854271,-0.1804915,-0.48911753,-0.10791347,0.23705998,-0.4666875,-0.48106343,0.2307863,-0.26415148,0.40653455,-0.6642067,0.26701903],[-0.28657764,0.53769946,-0.40891734,-0.02096517,0.2780794,0.44527766,-0.24414495,0.3990269,0.20819953,-0.3683124,-0.29138583,-0.5663968,0.52042514],[-0.3011377,0.5968053,-0.0044070026,0.30039677,-0.6778224,-0.44649825,0.21434684,-0.3961862,0.7583285,-0.32607108,-0.66463107,0.40846905,0.67910755]],"activation":"identity","dense_3_b":[[0.035978876],[-0.011928141],[-0.029860198]]},{"dense_4_W":[[-0.5814999,0.06673667,1.1037177]],"dense_4_b":[[-0.030712485]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45080x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45080x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..fcae3d72da --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45080x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[8.146588],[0.95418143],[0.43340117],[0.03905011],[0.9479113],[0.9499558],[0.9510725],[0.94235235],[0.9326399],[0.91747427],[0.90183586],[0.039001305],[0.03900259],[0.03900094],[0.03879979],[0.0386242],[0.038319785],[0.037957985]],"model_test_loss":0.011259999126195908,"input_size":18,"current_date_and_time":"2023-08-13_06-22-55","input_mean":[[24.366568],[0.0021789675],[0.0025915417],[-0.0051793563],[0.00033371797],[0.000241019],[0.00014475512],[0.0025261848],[0.007706368],[0.008204942],[0.0068165124],[-0.0052624918],[-0.0052542],[-0.0052515985],[-0.0052647493],[-0.0052907555],[-0.005419828],[-0.0056095705]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.7336471],[0.02469658],[0.35684168],[-0.3532868],[-1.130788],[-0.080318995],[-1.5789121]],"dense_1_W":[[-0.64860713,-0.5713194,-0.0010171949,-0.8196765,0.5477699,0.7899214,0.23730105,0.33738092,0.032365516,0.044066656,0.112801746,0.04844126,0.52755666,-0.16293125,0.2042048,0.385338,-0.20983423,0.022781417],[0.01108318,0.46447736,0.031032741,-0.6179811,0.24768326,0.91782635,-1.3839803,0.19786762,0.18436638,0.3508326,-0.30270633,0.1014005,0.5165744,0.25080827,-0.654024,-0.83023304,-0.030366233,0.38658044],[1.1167343,-0.5371559,8.987758e-6,-0.21433865,-0.07572796,0.5795516,-1.3121548,-0.58627963,0.30778974,-0.009247612,-0.023929322,0.62669486,-0.02801999,-0.54888064,-0.2571279,0.40885362,0.01660022,-0.031134106],[-0.07193165,1.1033614,4.970244,-0.30471626,-1.0119324,-0.46201298,-0.7883615,-0.069143996,1.3630129,0.77040046,-0.84834325,1.7408925,-0.05897951,-0.097375624,-0.20112686,-1.0965652,-0.44313067,0.49282008],[-1.170487,-0.874422,-0.00026626769,-0.28228784,-0.088807434,0.43260026,-1.0325773,-0.096812546,0.17837521,0.109854095,-0.14968073,0.12017141,0.53054005,-0.51490897,0.024915364,0.15639779,-0.2467258,0.1595003],[0.022389904,1.0608602,-0.00092857826,0.28875074,0.21020184,0.5167493,-0.5882544,0.021157121,0.032180592,-0.2136807,0.19360738,0.55395454,-0.30576155,-0.51958877,-0.11451182,0.04725566,0.11142395,-0.04842062],[-0.7362178,-1.3755006,0.00096091843,-0.22289632,-0.1438102,-0.9025203,1.0324214,-0.18327402,0.08280124,0.023658695,-0.08867019,0.047302973,0.25789154,0.040970705,0.12989049,-0.39808056,-0.12234827,0.25104594]],"activation":"σ"},{"dense_2_W":[[0.78154695,0.21511142,-0.43714777,-0.030767908,-0.009173835,0.7183903,-0.14342828],[-0.54066896,-0.20156115,-0.35385814,-0.26441637,-0.02107599,-0.84845865,0.29214594],[0.3124417,0.21180186,0.063465446,-0.20406622,0.40963924,0.59125894,-0.7869325],[-0.7548771,-0.43420765,-0.02560193,0.41974467,-0.51081544,-0.7608768,0.20380737],[0.1265696,-0.17943808,-0.43707883,-0.28236973,-0.8968599,-0.34403643,-0.035097532],[-0.101388685,0.3316813,-1.1519573,-1.6520184,0.3636926,-0.7423692,1.2117586],[0.15023874,0.345581,-0.46650666,0.11859452,-0.2518907,0.79158175,0.23256831],[-0.10569177,0.5604173,0.68333226,0.8951173,0.042214226,0.38135228,-0.8231335],[-0.8847682,-0.68416154,0.4569707,0.47695133,-0.38582966,-0.57144934,0.7719593],[0.27912247,0.13382833,-0.7093698,-0.68917704,-0.6986833,-0.71800274,0.44724673],[-0.24284345,-0.20109548,-1.1195686,-0.67754227,-0.48026723,-0.24137561,-0.04529532],[-0.038835,-0.9078514,0.17316182,0.119565316,-0.9398113,-0.016460646,-0.50889707],[-0.50108016,-0.11253731,0.23106413,0.06696553,-0.15908737,-1.1488036,0.34958452]],"activation":"σ","dense_2_b":[[-0.1418599],[-0.19710542],[-0.110050105],[0.1076101],[-0.12195556],[-0.021285616],[-0.07804289],[-0.14162357],[0.061964434],[-0.079768986],[0.12962815],[-0.0064196354],[-0.016493268]]},{"dense_3_W":[[-0.72732776,0.14124086,-0.20111452,0.42510116,0.15858391,0.57676667,-0.5278801,-0.6789197,0.5398626,0.54049456,0.6322282,0.3313076,-0.17548639],[-0.21989414,-0.5007377,0.73611426,-0.5268293,-0.031320885,-0.20501229,0.061116677,0.49025694,-0.24863736,0.5271555,-0.5499532,-0.14880382,-0.44022956],[-0.7556335,-0.42262074,0.31918573,-0.032287117,0.20668483,0.54373014,0.04109339,-0.082154974,0.545164,0.57818425,0.51500225,0.51791734,0.3929478]],"activation":"identity","dense_3_b":[[-0.06250194],[0.06764598],[-0.09165578]]},{"dense_4_W":[[-0.7602953,0.7817076,-0.72182196]],"dense_4_b":[[0.06962905]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45082x00x00x00x00x00x00'.json b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45082x00x00x00x00x00x00'.json new file mode 100755 index 0000000000..d639277c31 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018 b'8965B45082x00x00x00x00x00x00'.json @@ -0,0 +1 @@ +{"input_std":[[6.3108945],[0.9977488],[0.42284822],[0.037617117],[1.0103788],[1.0064898],[1.0015848],[0.96092135],[0.9357677],[0.9055774],[0.8795561],[0.037663084],[0.037589002],[0.037515257],[0.037092976],[0.03673727],[0.03622884],[0.03562327]],"model_test_loss":0.015439342707395554,"input_size":18,"current_date_and_time":"2023-08-13_06-49-13","input_mean":[[29.371658],[0.12545165],[-0.0012615778],[0.0063813236],[0.12261632],[0.12388965],[0.12581488],[0.12562975],[0.12590235],[0.12706079],[0.12586853],[0.0063036233],[0.0063308002],[0.006360097],[0.00641069],[0.0063860607],[0.006380691],[0.0061025573]],"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.0672929],[-0.002385034],[0.046296448],[0.73421615],[-0.6588893],[-1.5203205],[1.178525]],"dense_1_W":[[0.0065662013,-0.6906884,-8.1669035,-0.22963533,1.287303,0.5623414,0.97596943,0.16876543,-1.4308753,-1.2607023,0.13512084,-2.2520604,-1.0734065,-0.38555807,1.2478017,1.5954043,1.0332317,0.11683866],[-0.0008281875,-0.12043914,0.46533456,-0.1880658,0.27793694,0.32328263,-0.9494933,0.4474304,0.47546932,0.075196765,-0.5856884,0.67132443,-0.33427218,-0.5053345,0.52054983,-0.190718,-0.0054882555,0.030913128],[0.004268137,0.87534344,-0.0032283473,-0.4999181,0.051706053,1.3251885,-1.0996927,-0.11573633,0.022052824,0.030778117,0.095333256,1.2366601,0.09371897,-0.86040866,-0.4691007,0.45319134,-0.14319059,0.20172225],[-1.4501123,-0.6050599,0.0043176105,0.12684159,0.17847362,-0.49170303,0.61515486,0.041966554,-0.15754142,-0.12259134,-0.02399008,-0.122417435,-0.5506387,-0.10183553,0.4896619,0.68033147,0.18162476,-0.11971624],[1.4376184,-0.5808021,0.004164574,0.04148571,0.017012099,-0.06272477,0.43186155,-0.13221015,-0.15635422,-0.038162798,-0.035955418,-0.5861744,-0.56593215,0.43877664,0.59369725,0.7450232,0.041334633,-0.12955528],[-0.1895313,0.7552585,-0.0040314286,-0.048676625,0.5563838,1.239188,-0.71320075,0.004504845,0.09257285,0.088156074,0.09986293,0.47695497,-0.39355606,-0.7343243,-0.06684374,0.1638444,-0.09659141,0.051680643],[0.14741042,0.5720669,-0.0017892478,0.07270701,0.6063258,0.8279095,-0.346793,-0.025372941,0.23078395,-0.065968886,0.13636668,0.4493458,-0.5984418,-0.52184445,-0.11649629,0.032802615,0.11504312,-0.050546043]],"activation":"σ"},{"dense_2_W":[[-0.8641727,0.50495005,0.40094075,-0.34386104,-0.5465309,1.390671,-0.37600058],[0.11031162,-0.6909326,-0.5312116,0.61976224,0.24802525,-0.16967447,-0.14283815],[-0.8193451,-0.1972297,-0.214771,-0.73892933,-0.30986032,0.15499435,-0.501575],[0.5308305,-0.24228737,-0.016963648,-0.43746594,0.35429764,0.046517015,-0.042451978],[-0.22441098,-0.120023474,-0.49286667,-0.018089095,0.29138842,-0.5673456,-0.48546997],[0.13753492,-0.1153832,-0.55610204,0.15406573,0.006365648,0.17939411,-0.6658586],[-0.65625983,0.09770354,0.78839475,-0.38033855,-0.27879944,0.659594,-0.27876693],[-0.3875123,0.5326739,0.75927013,-0.44852605,-0.32855642,-0.25641,0.7448988],[0.5429655,-0.13947411,-0.4124438,0.27981234,0.3692258,-0.5504224,-0.14990781],[0.106620625,-0.45364022,-0.6481817,0.6618234,-0.06181281,-0.22667481,-0.30472475],[-0.5421591,-0.2735785,0.92352885,-0.058677003,0.48104942,0.3428449,2.177085],[-0.1457072,-0.10735246,0.016251013,0.42414185,0.43490586,-0.6780911,-0.6813793],[0.06390021,0.47467482,0.009300271,-0.14595152,-1.045413,0.53024256,0.597365]],"activation":"σ","dense_2_b":[[-0.6563135],[0.040393732],[-0.24838637],[-0.0036740543],[0.15817301],[-0.25935638],[-0.4186771],[-0.058852207],[0.024473231],[0.120795585],[0.114583485],[0.12427014],[-0.21818934]]},{"dense_3_W":[[0.46204138,0.5743686,0.6254067,0.2262725,0.5390763,0.086523645,0.22651961,-0.07199567,0.16185366,0.031094545,-0.34022743,-0.4233551,-0.067053996],[-0.2599459,0.352036,-0.20220354,0.19399881,0.23690616,-0.14081447,-0.55412626,-0.6064963,0.34574237,0.33883986,-0.18335809,0.6122457,-0.54077035],[0.77093464,-0.4317505,-0.47253096,0.28200352,-0.36024985,-0.5413245,-0.50765145,0.5250093,-0.31016317,-0.49643394,0.35564622,0.0021692468,0.07358482]],"activation":"identity","dense_3_b":[[0.007873758],[0.034414034],[-0.0254829]]},{"dense_4_W":[[-0.17727825,-1.1712774,0.5170622]],"dense_4_b":[[-0.03209859]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018.json b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018.json new file mode 100755 index 0000000000..b4434402e6 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/TOYOTA SIENNA 2018.json @@ -0,0 +1 @@ +{"input_std":[[8.918778],[1.18101],[0.4847478],[0.043674015],[1.1728041],[1.1765499],[1.1794695],[1.1464957],[1.1177075],[1.0766566],[1.0377958],[0.043550335],[0.043581747],[0.043604773],[0.043512594],[0.043391723],[0.043109246],[0.04262905]],"model_test_loss":0.019605522975325584,"input_size":18,"current_date_and_time":"2023-08-13_05-28-32","input_mean":[[23.596626],[0.013376228],[-0.0037806714],[-0.008489553],[0.016799761],[0.015916478],[0.014968346],[0.017682353],[0.020881005],[0.020992402],[0.023326145],[-0.008438655],[-0.008450099],[-0.008462553],[-0.008476181],[-0.008486343],[-0.008576075],[-0.008670038]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.91207904],[0.7103613],[0.30726305],[0.11740969],[0.12186458],[-0.089792214],[0.06848248]],"dense_1_W":[[0.020942407,1.0916185,-0.035626575,-0.19509457,-0.0901391,1.0375599,-0.89480263,0.027181128,0.114876896,-0.20307554,0.19653901,0.8226537,-0.28726602,-0.47241193,-0.02529027,-0.009867712,0.20832253,-0.0335081],[0.38768068,-0.9086627,0.040084302,0.06681411,-0.5178006,-0.611777,0.92066157,-0.1505088,0.074445166,0.11541756,-0.24584451,-0.81897855,0.51056355,0.27303597,0.1812634,-0.22068554,0.071845666,-0.07549679],[1.3191843,-0.43101233,0.051205434,0.2787163,-0.4157239,0.42948318,-0.72137564,-0.8753717,0.10624811,0.19340889,-0.15060128,0.2269076,0.03174035,-0.31100953,-0.19166663,-0.011060635,-0.3349901,0.2901877],[-0.0024979762,0.3740953,-0.026280953,-0.15654075,0.37215605,0.7620479,-1.0498856,0.13035084,0.13929886,0.05248367,-0.013822444,0.7085953,-0.03154278,-0.29324126,-0.62358975,-0.16771367,-0.21831672,0.22877951],[0.044033404,-0.99224085,-6.7608223,0.09225139,0.9311651,0.447325,0.42661807,0.63310313,-1.7500018,-0.85278213,0.90037066,-1.4607582,-0.38572705,-0.10530333,0.5061062,1.1270607,0.23219815,-0.09795198],[0.016819429,-0.0675717,0.115480825,0.07103152,0.17985629,1.1815296,-1.396273,0.18709117,0.09204313,0.37937552,-0.3416136,0.28142554,0.1835832,-0.75639856,0.27877346,0.049574222,-0.23444256,0.09973523],[-0.06906837,0.8551471,2.6089625,-0.38896835,0.3064237,0.04883363,-0.6118971,-0.37577873,0.916318,0.8206204,-0.8979492,0.18177088,0.34715304,-0.33680785,0.031479146,-0.49667355,-0.33899838,-0.04839657]],"activation":"σ"},{"dense_2_W":[[0.7524287,-0.05320505,0.6631399,0.29110217,-0.3867475,0.48622686,-0.00068926124],[0.6857002,-0.98820657,-0.2477931,0.8487134,-0.008759584,0.8539056,-0.70714766],[-0.191401,-1.1044568,-0.17453948,0.28428176,-0.27107534,0.52109903,0.5684942],[-0.72152793,9.4716466e-5,0.25969005,-0.29246745,-0.27407894,-0.5809119,-0.1386064],[-0.28868115,0.3303369,-0.19686596,-0.14941077,0.08329269,-0.49868903,0.2623254],[-0.47855794,0.38120317,0.15302673,-0.45370772,-0.0976872,-0.2544275,-0.22887231],[0.8629054,-1.2646538,0.13799493,0.40030012,0.16298352,0.30507365,-0.035486612],[-0.1548037,0.88181823,-0.19526346,-0.6244504,0.5790799,-0.7090568,0.17455493],[-0.4086325,0.8128156,-0.02595779,-0.8348639,0.1865987,-0.23320554,0.21458188],[-0.70075643,0.18467374,-0.39847013,0.20729409,0.4069853,-1.0749724,-0.23987985],[-0.19175854,-1.101704,0.658868,0.8334482,-0.007937357,0.06116572,0.35555303],[0.899429,-0.23285869,0.36268023,0.2628838,-0.41170016,0.18388364,0.59954256],[0.42720664,-0.1498553,1.1578981,0.16925347,-0.97467273,0.46834058,0.34074527]],"activation":"σ","dense_2_b":[[-0.1311147],[-0.4101757],[-0.33761725],[0.06426192],[0.026971094],[0.075724326],[-0.34481454],[0.16628559],[0.10305307],[0.049283274],[-0.24880186],[-0.16108623],[-0.10672651]]},{"dense_3_W":[[-0.47907722,-0.21759209,0.3713241,0.39441383,-0.44695204,0.17124303,0.11321267,0.3969347,0.1906832,-0.40338823,0.12479244,-0.50514024,0.5594875],[-0.5839251,-0.25829744,-0.427433,0.4940799,0.6102448,0.6181168,-0.3990338,0.7514002,0.44554126,0.50229466,-0.51888025,-0.38270754,-0.26896998],[0.21696098,-0.24028769,-0.43294132,-0.49181503,0.07244864,-0.15500332,-0.39558488,0.5280436,0.6300974,0.096077316,-0.16075748,0.3209584,-0.61387634]],"activation":"identity","dense_3_b":[[0.021643605],[0.047753386],[0.053921573]]},{"dense_4_W":[[-0.0368371,-1.1304644,-0.17004102]],"dense_4_b":[[-0.049882997]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567B0020800'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567B0020800'.json new file mode 100755 index 0000000000..aee9fbdaff --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567B0020800'.json @@ -0,0 +1 @@ +{"input_std":[[8.774439],[0.68836546],[0.39663407],[0.035043336],[0.67726237],[0.6812185],[0.6851642],[0.67571765],[0.6658719],[0.65097946],[0.6362429],[0.034919888],[0.034944225],[0.034970142],[0.034958802],[0.035017386],[0.035055906],[0.03502549]],"model_test_loss":0.007673596031963825,"input_size":18,"current_date_and_time":"2023-08-13_08-08-06","input_mean":[[26.031902],[-0.060294222],[0.00040313246],[-0.011659955],[-0.05902993],[-0.060128476],[-0.06107497],[-0.059999887],[-0.05612731],[-0.05281684],[-0.044799715],[-0.011695448],[-0.011712971],[-0.011732531],[-0.011664448],[-0.011644356],[-0.01155927],[-0.011499585]],"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.049030554],[-0.10284916],[2.1669703],[-0.7598165],[-1.5671357],[-1.0467316],[-0.21518126]],"dense_1_W":[[0.0015833939,0.3628037,-1.1379211,0.41206348,-0.3174675,-1.0719817,0.55315006,0.16118664,-0.72761345,0.085280344,0.51755583,-0.20497443,-0.31990555,0.07199009,-0.022201924,0.29279125,0.027291393,-0.22479561],[-0.22103259,-2.2058318,0.0018786002,-0.12338179,0.040423285,-0.77381456,-0.7999449,-0.89398247,-0.15317886,-0.14315447,0.18191607,-0.29653367,0.16505532,0.51925987,-0.23665445,0.14255223,-0.024358846,-0.018557316],[0.71575314,0.8240314,0.008927517,-0.42483628,-0.3114511,1.1394252,-0.5804155,0.11425652,0.18163292,0.13206053,-0.13476585,-0.11367035,0.26001,-0.5135676,0.54607356,0.48701724,0.28660864,-0.51631993],[0.66036284,0.59087783,-0.00230013,-0.2067205,-0.6735332,1.4597267,-0.45294723,-0.19073394,-0.2648436,-0.03875138,0.19050239,0.4679514,0.035935957,-0.15239997,-0.27455324,-0.70898926,-0.09578253,0.44405428],[-0.45520136,1.0866009,-0.0010808597,-0.14738974,0.096503034,0.46348053,-0.5462861,-0.075428344,-0.10546405,0.13248663,0.0108337905,0.44465065,-0.50142854,-0.17432131,0.08642302,0.38780424,0.2626273,-0.33542085],[0.7531839,-0.15485106,-0.00046390522,0.49195373,0.10571833,-0.8325452,0.35377154,-0.08773462,0.0057901233,-0.033657778,-0.024466574,-4.581234e-7,-0.05356497,-0.40087822,0.60264814,-0.18609272,0.31572378,-0.23848133],[0.06056683,-0.64557314,-8.907912,0.30529982,-0.09389138,-0.5915903,0.25837407,-0.05178803,0.11875724,0.40244415,1.1496543,-0.26229003,-0.46595177,-0.2651267,0.81698227,0.4063907,0.031472377,-0.27899668]],"activation":"σ"},{"dense_2_W":[[0.3929737,0.3355438,-0.24939334,-0.8681119,-0.47513258,0.7011935,-0.2938572],[-0.19074927,0.28745645,0.5773505,0.73283035,0.6470788,-0.24172986,-0.268829],[0.29614463,-0.3138745,-0.28980806,-0.0015691076,-0.111617155,0.232167,-0.67932785],[-0.7735293,0.051889855,1.011741,1.6678485,0.8912051,0.70964855,-1.0375358],[-0.5269584,-1.0374653,-0.4922506,-0.34657186,1.5273697,-1.3772768,-0.5722175],[0.615394,-0.06539898,-0.45568255,-0.20143689,-0.47749588,0.86022294,-0.21714544],[0.38749975,-0.022513922,-0.14868331,-0.25780904,-0.23281977,0.06569774,-0.25363374],[0.5056675,-0.32965812,0.019247672,-0.17208679,0.2147651,-0.095847994,0.45504293],[-0.16795017,0.27483287,-0.67279655,-0.41054696,-0.32219192,-0.067795895,-0.111805394],[-0.6812337,-1.2262623,0.059217807,0.2936333,0.25215864,-0.6689207,0.5118572],[-0.7462057,0.03548215,-0.48534322,-0.59371406,0.69966376,-1.1789167,-1.1984698],[0.066431336,0.2048392,-0.46290568,-0.10662247,-0.66402173,-0.15764749,-0.41801584],[-0.4591004,0.023616942,-0.31438425,-0.7513188,-0.28229564,-0.5397509,-0.2550711]],"activation":"σ","dense_2_b":[[0.14723389],[-0.13598567],[-0.113603],[0.3382584],[-0.26982328],[0.071502306],[-0.027666062],[-0.09013021],[0.0439448],[-0.4045584],[-0.16309273],[0.021524023],[-0.31809625]]},{"dense_3_W":[[-0.37160635,0.6519445,-0.2852499,0.3879301,0.13172154,-0.12497152,-0.57542557,-0.17398404,-0.6902231,-0.038447704,0.6596773,-0.16343056,-0.37051415],[-0.29400083,-0.2377071,0.08535129,0.26676917,-0.5493988,-0.351432,0.47058952,0.5485086,0.056337833,0.5403655,0.17921905,-0.11200504,0.41892666],[0.69202274,-0.34028688,-0.19272918,-0.38122672,-0.43775746,0.66532624,-0.38657436,-0.32455662,0.3592691,-0.45225328,-0.18025218,0.19789042,-0.41285962]],"activation":"identity","dense_3_b":[[-0.019216945],[-0.0018677257],[0.040205568]]},{"dense_4_W":[[0.8999063,-0.10676796,-0.8298675]],"dense_4_b":[[-0.022871539]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875WA907145M xf1x891051xf1x82x002MB4092M7N'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875WA907145M xf1x891051xf1x82x002MB4092M7N'.json new file mode 100755 index 0000000000..d0890c1ab4 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875WA907145M xf1x891051xf1x82x002MB4092M7N'.json @@ -0,0 +1 @@ +{"input_std":[[7.2229753],[0.7611405],[0.44096765],[0.032897122],[0.7546119],[0.75747573],[0.7597603],[0.74507344],[0.73157114],[0.7157408],[0.70553976],[0.03276775],[0.032820396],[0.032851215],[0.0328969],[0.032961197],[0.03302519],[0.03315028]],"model_test_loss":0.014566068537533283,"input_size":18,"current_date_and_time":"2023-08-13_08-33-26","input_mean":[[24.0553],[0.05153281],[0.015448316],[-0.014650657],[0.04650553],[0.04824544],[0.049862176],[0.0546265],[0.053556256],[0.05162971],[0.04806687],[-0.014739772],[-0.014722749],[-0.014703085],[-0.014610224],[-0.014595721],[-0.014765067],[-0.014981542]],"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.16389364],[-0.09017541],[-1.1647506],[-0.6587049],[-0.060985837],[-0.21915653],[-0.11024977]],"dense_1_W":[[0.001650034,-0.92548645,0.0649104,0.028528351,0.5250701,-0.5574239,0.38432446,0.10459642,-0.35498068,-1.078298,0.8481259,-0.27305496,0.002911391,0.3782357,-0.14095218,0.0827578,0.32712424,-0.23005211],[0.0902557,0.32735464,-2.28293,-0.66071206,1.7252614,-0.43295604,0.38447145,-1.2641565,-1.1254754,0.601649,-0.22029242,-0.06569076,0.2504662,-0.36702126,0.3171216,0.8626499,0.028089207,-0.43380517],[0.5821453,0.15223487,2.6885037,-0.17222582,0.15152413,-0.9019428,0.38670883,-0.23797712,0.06278605,0.09316208,0.33182064,-0.1686998,-0.39460248,0.06328239,0.59990156,0.52030545,-0.05340852,-0.37717444],[0.38206068,-0.0565225,-2.2878838,0.27850866,-0.07075595,0.79982686,-0.42363936,0.40338862,-0.26033697,-0.11626149,-0.30429554,0.26288483,-0.033476517,-0.5080968,-0.3249822,0.20929106,0.270843,-0.18540776],[0.023973651,-1.1213268,2.1238108,-0.024581453,1.0142306,0.6209359,-1.075154,0.48566073,0.18506725,0.013205165,-0.1463418,0.35358152,-0.15770157,-0.08743086,-0.30606773,-0.042505883,0.46283403,-0.18692932],[-0.0021915815,-1.1354867,-0.06360406,0.447425,0.4746199,-0.28277287,-0.023870196,0.34384865,0.21172099,0.1064795,-0.13672785,-0.19995657,0.14958183,-0.23914275,0.06216524,-0.12911916,-0.055552065,0.043550123],[0.0017299546,0.8092503,0.05173706,-0.16951394,-0.479756,1.210766,-0.70967305,-0.10443872,-0.42421815,-0.4633462,0.4819916,0.41747493,-0.20445484,-0.2810944,0.10567981,0.15402447,-0.109205164,0.025440434]],"activation":"σ"},{"dense_2_W":[[-0.39135623,0.27202022,-0.6013986,-0.64582634,-0.6761625,-0.034833696,-0.47770235],[-0.6643015,-0.07582451,0.28175977,-0.17720482,-0.13394056,-0.57026803,-0.20838319],[-0.76068735,-0.03635872,-0.32094952,0.3875149,0.0033950128,-0.11746398,0.11166597],[0.09897547,0.34849387,0.34470668,0.32905695,-0.39746615,0.6536501,-0.73582923],[0.3257729,0.8186221,0.462827,0.206003,-0.791141,0.5543548,-0.55780596],[-0.59339374,-0.5604979,-0.37463582,0.15022774,0.08227588,-0.12084131,-0.72836936],[-0.10631841,0.64733845,-0.19081868,-0.8196671,-0.5185302,0.57588714,-0.8418388],[-0.28855416,-0.40788642,-0.22638142,0.039785244,0.42720664,0.08895065,-0.114857286],[0.7554024,0.09335394,-0.038691644,-0.51206696,-0.6964066,0.79751784,-0.5822203],[-0.36288157,-0.37563536,0.41425094,0.264427,0.41743213,-0.2764543,0.64417255],[-0.8176743,-0.010832012,-0.41458604,0.18923777,0.2012841,0.009667026,0.6762643],[0.11934642,-0.5864817,0.16600628,0.28051364,-0.13105674,0.22044942,-0.019528905],[0.5533989,0.66445804,0.31221595,-0.68456656,-0.24079095,0.7768225,-1.3347878]],"activation":"σ","dense_2_b":[[-0.31197193],[-0.031413633],[0.03965752],[-0.061369944],[-0.108691074],[-0.34241664],[-0.31260058],[0.0052420176],[-0.0034803348],[-0.009040426],[0.032145865],[-0.013744207],[-0.12510912]]},{"dense_3_W":[[0.2274993,0.5665878,0.22904979,-0.31244048,-0.177466,0.39304316,0.46666682,0.5655463,-0.40834668,0.123042084,0.28890088,0.24861963,-0.33083183],[0.5515104,0.4236585,-0.41383946,0.38279107,0.3648294,0.033724736,0.594795,-0.03362508,0.5668787,-0.33538687,-0.6832093,0.13241947,0.26189715],[-0.57273656,-0.6574504,-0.62127274,0.5114571,-0.2834754,0.5221384,0.058243714,-0.15925437,0.34103858,0.34175843,-0.36275822,-0.4356808,0.04839572]],"activation":"identity","dense_3_b":[[0.039760787],[-0.06425814],[-0.035501104]]},{"dense_4_W":[[0.95254374,-1.5316479,-0.5766585]],"dense_4_b":[[0.0464274]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875WA907145M xf1x891051xf1x82x002NB4202N7N'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875WA907145M xf1x891051xf1x82x002NB4202N7N'.json new file mode 100755 index 0000000000..f93202e113 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN b'xf1x875WA907145M xf1x891051xf1x82x002NB4202N7N'.json @@ -0,0 +1 @@ +{"input_std":[[11.96429],[0.48755237],[0.3202853],[0.016136056],[0.47789466],[0.4800027],[0.4825725],[0.4900211],[0.4979344],[0.50082195],[0.509806],[0.015823891],[0.015903281],[0.015982913],[0.016349215],[0.016593793],[0.016913936],[0.017299606]],"model_test_loss":0.006491394247859716,"input_size":18,"current_date_and_time":"2023-08-13_08-58-34","input_mean":[[23.908133],[-0.009390707],[-0.004253836],[-0.025968479],[-0.00612068],[-0.007160293],[-0.007376146],[-0.009109003],[-0.0076243],[-0.0026939402],[0.0045118434],[-0.026125945],[-0.026092473],[-0.026057927],[-0.025872864],[-0.02570859],[-0.025540205],[-0.025320645]],"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.41294238],[-2.7690372],[-0.18349741],[-0.10760971],[-2.6992774],[0.32752463],[-0.67742026]],"dense_1_W":[[-1.3586515,-0.43871593,-0.060125872,0.14131355,0.91296524,-0.27596986,0.2190367,0.41157725,0.029709097,-0.2607309,-0.050010905,-0.11755934,-0.22254317,0.17312372,-0.3761272,-0.45554724,-0.2239468,-0.2360416],[-1.5048568,-0.7412387,-0.104529426,0.18972115,-0.04966916,-0.31632864,1.5387456,-0.68554825,-0.047455277,-0.09145563,0.011231757,0.1552257,0.14442553,-0.19027676,-0.3082216,-0.048122175,-0.08658755,0.17344293],[-0.06806865,-0.28421763,-0.061045542,0.29776254,0.017410226,-0.6256607,0.3693766,0.09203255,-0.20777148,0.16598798,-0.031423636,-0.14880905,-0.050573036,-0.18030158,0.34338558,-0.010559312,-0.1716994,0.0015558694],[-0.021257099,0.4201582,0.10567662,0.098136276,-0.5245343,1.1510786,-0.21176715,0.25107303,-0.10454084,0.2301715,-0.24894434,0.3596001,-0.34517595,0.058510073,0.0818201,-0.26276216,-0.14658763,0.21273282],[-1.5012898,0.6668104,0.10121657,-0.25168574,-0.0037740553,-0.2010022,-0.75998825,0.4218689,0.24208617,0.044093963,-0.037556846,0.1966981,-0.110668525,-0.14782344,0.35860345,-0.21139877,0.30253902,-0.16673942],[-1.2461659,-0.7911809,0.035795726,0.73150784,0.696571,0.49404347,0.11756719,0.5757391,0.09980145,0.16326262,-0.19388047,-0.6046584,0.21638776,-0.4022077,-0.12755662,-0.10812808,-0.34516883,0.16070507],[-0.19035971,-1.7321862,-5.0254865,0.22558816,0.1942134,-0.44183806,0.40744686,0.513804,-0.21384099,0.681004,0.10350117,0.047648296,-0.14447348,-0.0847752,0.09760403,-0.26012734,0.45971102,0.06473803]],"activation":"σ"},{"dense_2_W":[[-0.34405056,0.87975556,-0.11178791,-0.9415903,-0.22488657,0.38250393,-0.22682497],[0.6375331,-0.9361189,-1.0352612,0.23702581,-1.3226422,-0.70677704,0.60978687],[0.59013045,0.67570806,0.65553236,-0.24382202,-1.3824764,-0.136895,-0.021328399],[-0.91779196,-0.4002371,0.15189488,-0.1415177,-0.14752227,0.1649123,-0.6430806],[-0.25153294,0.27459243,-0.054157175,-0.5623544,-0.3548548,0.07935024,0.17336936],[-0.2654553,-0.39781526,-0.39670828,0.5024505,0.8163613,0.09423658,-0.06174219],[-0.439626,-0.122389056,-0.4051925,0.7102208,0.21351016,-0.21359682,-0.043064147],[-0.24681723,-0.75991267,-0.5213269,0.61109763,0.6579795,0.31300342,-0.19012727],[-0.32835272,0.27643317,0.80610013,-0.48940447,-0.6658583,-0.08905346,0.40121162],[0.014117802,1.0277611,0.9433537,-0.52780867,0.21137868,0.18057697,-0.51537097],[0.4187044,-0.18805541,-0.8279012,-0.13557853,0.1907715,0.12131266,-0.30106992],[0.16725653,0.75205564,0.8238714,-0.19580607,-1.0709527,-0.43005282,-0.1344186],[0.4120912,-0.67633796,-0.3733059,0.31897324,0.7961127,-0.1235923,-0.5691213]],"activation":"σ","dense_2_b":[[0.0015434292],[-0.42678097],[-0.12843466],[-0.2722911],[-0.17105557],[-0.11514613],[-0.06279293],[-0.019363822],[-0.009035881],[0.106273174],[-0.05945216],[-0.123012476],[-0.058660183]]},{"dense_3_W":[[0.6179223,0.6908968,0.23002878,0.16771492,-0.38249567,0.44911724,0.23442027,-0.46552494,-0.45699558,-0.35989794,-0.40735313,-0.31366763,-0.05994278],[0.32953018,-0.25569904,0.31176892,-0.058506478,0.055031825,-0.5803407,-0.41470534,-0.7076998,0.7423508,0.2604255,-0.3739903,0.5488002,-0.43356815],[-0.05421326,-0.34172624,0.28983295,-0.522155,0.034952227,0.36832595,0.34097177,0.4830782,-0.7160004,-0.70392597,0.16239382,0.029896518,0.6162823]],"activation":"identity","dense_3_b":[[0.12146979],[0.06732302],[-0.06318822]]},{"dense_4_W":[[0.04596985,-1.108794,0.22253986]],"dense_4_b":[[-0.060146004]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN.json new file mode 100755 index 0000000000..af5a0b3058 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ARTEON 1ST GEN.json @@ -0,0 +1 @@ +{"input_std":[[8.971252],[0.79798824],[0.43347803],[0.037114248],[0.78899115],[0.7920018],[0.7952441],[0.7838899],[0.7732425],[0.75980055],[0.74578863],[0.037029333],[0.03706021],[0.03708885],[0.03716895],[0.037208397],[0.03723585],[0.037244312]],"model_test_loss":0.012649175710976124,"input_size":18,"current_date_and_time":"2023-08-13_07-16-53","input_mean":[[24.854122],[-0.006721379],[0.0023459543],[-0.006867375],[-0.0071832123],[-0.007095632],[-0.007283813],[-0.004851204],[-0.0015341335],[-0.0011585834],[0.0014295956],[-0.0069056926],[-0.0069126263],[-0.0069173565],[-0.0070006466],[-0.007102198],[-0.007207536],[-0.0073172078]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.10305949],[0.5548119],[0.8664678],[-0.04213392],[-1.4110198],[3.2694256],[-1.438837]],"dense_1_W":[[-0.017599747,-0.22520265,0.0010882277,-0.21759078,0.043246184,-0.9120944,0.44394338,-0.012739085,0.17955783,0.3519492,-0.3748205,-0.29586455,0.36217418,0.21715508,-0.045080207,0.10746157,0.16058546,-0.12644011],[1.4859476,-0.13243331,-0.072786994,-0.09156684,0.026185557,0.30754617,-0.07915964,-0.33238035,0.29930684,-0.59904677,-0.40220875,0.34915185,0.2151253,-0.12978148,-1.0024906,0.4784506,-0.08319207,0.21361434],[0.61979795,0.1759033,-3.648246,-0.18301606,-0.7338996,-0.6487156,0.8492735,-0.7052067,-0.86969215,0.2841932,1.4843231,0.25467336,-0.34080935,-0.18149482,0.70439994,-0.26088372,0.11387163,-0.1455975],[0.00995094,-1.2382029,0.0006843731,0.328307,0.8130543,-1.2957187,0.8368335,0.20426522,-0.19153069,-0.4943369,0.41151458,-0.014479602,-0.4382999,0.10004458,0.060025815,0.16917846,0.09463592,-0.21017851],[-0.8206324,0.8908584,0.037517052,-0.49712715,-0.40263394,0.24845587,-0.85499966,0.26955003,-0.06266273,0.28861195,0.12733743,0.31250095,0.119576685,-0.04005291,-0.029234378,0.02662434,0.2687243,-0.1394794],[1.2793154,1.0802419,0.059386734,-0.3855319,-0.78512937,0.15505423,-0.8329386,0.6772395,-0.1311195,0.51412123,0.050203018,-0.037745327,0.38920268,-0.41889575,0.17929426,0.54237133,0.14844449,-0.3822895],[-0.93515563,0.036150783,-4.184579,0.31975636,-0.5608153,-0.832857,0.39901984,-0.45331565,-0.5904826,0.33153397,1.4625467,-0.1966311,-0.35478687,0.13788807,0.2924618,-0.15482849,0.01944506,-0.113643706]],"activation":"σ"},{"dense_2_W":[[0.90550905,-0.2773451,0.060318053,0.78804654,-1.0699619,-0.84802955,0.44153836],[0.77794725,-0.38085982,-0.0049121855,0.35357663,0.00038228062,0.18574685,0.04339034],[-0.92243797,0.38560665,0.09517251,-0.9013531,0.2996133,0.54987377,-0.028735504],[-1.1287217,0.640262,-0.5085255,-1.4166275,1.5218314,0.056655124,0.33818102],[0.15446381,0.38593677,0.3441797,0.98853666,-0.9087163,-0.0742472,0.46354288],[-0.55011004,-0.019922681,-0.18926652,-0.6645979,0.6695093,0.7484288,-0.16677399],[-0.7513268,-0.72154254,-0.3784182,-0.16664356,0.09576955,0.08568184,-0.4769783],[0.08747015,-0.46323332,-0.20250341,-0.7033233,-0.48815915,-0.43857226,-0.20034243],[0.16640607,-0.19463709,-0.041607287,0.30393028,-0.33860773,0.13123538,0.19249742],[-0.6888612,0.1613833,-0.42137414,-0.5399623,0.5414041,0.16113918,0.10748585],[-0.86522615,0.59193206,-0.37166557,-1.1033491,0.8927235,0.81606954,-0.031116843],[0.28607032,0.24378045,-0.021820918,0.6145389,0.15344414,0.019805284,-0.16341789],[-1.0509629,0.058839537,0.22750644,-0.6949402,0.3670632,0.044007428,0.0669319]],"activation":"σ","dense_2_b":[[-0.18253872],[-0.0115240505],[-0.06430214],[0.2490044],[-0.2796968],[0.0028060132],[-0.09268421],[-0.28672373],[-0.080230884],[0.03859358],[0.14165422],[-0.12646787],[-0.1059743]]},{"dense_3_W":[[0.8398946,-0.07856656,0.1706828,-0.86333686,0.59561944,0.03616052,0.18146847,0.4525631,-0.08213228,0.131641,-0.49378744,-0.44430527,-0.12233779],[-0.06611764,0.49632278,0.2623391,0.49564347,0.11883829,-0.49934706,-0.13390465,-0.6451669,-0.45365545,-0.0060165436,0.45882273,-0.38588116,-0.08209023],[0.85171545,0.69498104,-0.5135337,-0.30856863,0.22390914,-0.47711673,-0.21191199,-0.21027334,0.047864415,-0.4271364,-0.27338186,0.08179979,-0.39165765]],"activation":"identity","dense_3_b":[[0.04059178],[-0.05657044],[0.08936293]]},{"dense_4_W":[[-0.1893341,0.2177843,-1.285145]],"dense_4_b":[[-0.08146231]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x873QF909144B xf1x891582xf1x82x0571B60924A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x873QF909144B xf1x891582xf1x82x0571B60924A1'.json new file mode 100755 index 0000000000..aed7db5c78 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x873QF909144B xf1x891582xf1x82x0571B60924A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.683442],[0.98865986],[0.47218922],[0.03871906],[0.9749567],[0.97964174],[0.9846377],[0.96558553],[0.9452397],[0.9233499],[0.8986563],[0.038632676],[0.038636968],[0.038635172],[0.038416203],[0.03809765],[0.03765577],[0.03724798]],"model_test_loss":0.012059486471116543,"input_size":18,"current_date_and_time":"2023-08-13_09-53-13","input_mean":[[24.93752],[-0.045939222],[-0.016389137],[-0.004302249],[-0.041963723],[-0.043094873],[-0.044972997],[-0.049667895],[-0.05290968],[-0.058309894],[-0.05893371],[-0.004446903],[-0.0044335183],[-0.004419059],[-0.0043945634],[-0.0043718517],[-0.004439213],[-0.0045372355]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.1140616],[0.025871063],[0.2243207],[-0.46016932],[-1.4698206],[-0.71150887],[0.21343042]],"dense_1_W":[[0.50331783,0.11694233,-1.5816242,-0.32721916,-0.41283622,-1.0465689,0.7585539,-0.07061255,0.17088029,0.16865654,0.27171412,-0.29783547,0.005930493,0.8796375,-0.18076001,-0.22494902,0.14086941,0.02350371],[0.39964604,-0.06841097,1.284112,0.081528254,0.715496,0.9111793,-1.1611114,0.26898384,-0.17206313,-0.35275218,-0.06688733,0.2690601,0.17759158,-0.6246783,0.03650214,0.11638598,-0.18206348,0.107519194],[0.24504289,0.89508206,0.016166057,-0.112143464,-0.7020446,1.0947877,-0.17686859,-0.15869354,0.05293,0.12103868,-0.0552494,0.031484745,0.34501955,-0.08349311,-0.5022218,-0.09982318,0.2693678,-0.010383809],[0.007931579,3.6076553,0.031299092,-0.0632944,-0.36807698,0.44875357,0.65344036,1.8584886,2.0649836,0.52160025,-1.4293678,0.3685855,-0.015850615,-0.6611801,-0.09302336,0.15269071,-0.34181482,0.22311872],[0.27789986,0.4345057,1.7105428,0.3809664,0.23606543,-0.53605545,0.77079517,-0.18572022,0.029536983,-0.08425826,-0.53436494,-0.47137046,-0.49002567,0.6303357,-0.05725936,0.14865646,-0.024520583,-0.13768268],[-0.24115954,1.279325,0.006372729,0.082450144,-0.51617074,0.56547415,-0.2152657,-0.20878896,0.27892676,0.005575542,-0.08203108,0.26797956,-0.1609261,-0.31879193,0.0687177,-0.12210038,-0.02824459,0.04868769],[0.5532259,-0.31703275,-1.3693326,-0.39785337,-0.45586273,0.51413405,-0.8438991,0.35914817,0.0845233,0.27229154,0.1630712,0.5866208,0.14001441,-0.53064567,0.0022326964,0.3564542,-0.22063065,0.098910645]],"activation":"σ"},{"dense_2_W":[[0.07933149,0.24055447,0.4976298,0.04625589,0.39628196,-0.31187287,0.10486112],[0.16486526,-0.4745025,-0.41495293,-0.58882856,0.45950136,-1.0270692,-0.14418496],[-0.2165068,-0.40877748,0.31806844,-0.43342555,-0.16252048,-0.20286933,-0.24733812],[0.6930096,-0.32642758,-0.89015126,0.17958382,0.9937355,-1.6690918,-0.038145885],[-0.7482682,0.5658933,0.9042878,0.021569345,-0.48649457,0.5340851,-0.027348604],[0.67918,-1.904818,-0.8380397,-0.051741455,-0.28229547,-0.7634411,-1.8948066],[0.3247175,0.31701854,-0.2781933,0.43401104,0.49560198,-0.2726791,0.032593645],[-0.37467694,-0.03656642,-0.33198854,-0.31007978,-0.43297952,-0.59289163,-0.22284593],[1.024911,-0.6805027,-0.19422202,-0.32719725,0.83347833,-1.039209,0.82521194],[0.36815783,-0.5916512,-0.83911014,0.0574501,0.110373095,-0.5765434,-0.51522857],[-0.62331885,-0.17632262,0.8677081,-0.0120098395,-0.27507105,0.591978,0.29510972],[-0.2604249,0.23846155,0.89924765,0.49570164,-0.570918,0.73513013,0.07734572],[-0.08252068,-0.20023943,-0.6037063,-0.68478596,-0.30307132,-0.5236618,-0.34129605]],"activation":"σ","dense_2_b":[[-0.037471402],[0.020133492],[-0.030062372],[0.18862785],[-0.16345033],[0.6310636],[-0.04814403],[-0.13305083],[0.30672064],[0.09021095],[-0.015109793],[-0.09782],[-0.08616344]]},{"dense_3_W":[[0.00968849,-0.4974434,0.057221804,-0.05612671,0.44181606,-0.7102969,-0.08313611,-0.41528141,-0.5589184,-0.6598731,0.27019504,0.59793496,-0.1394197],[-0.18780659,0.013776527,0.097994566,0.082103886,-0.21989425,-0.19045697,0.17197673,-0.5449254,0.16991271,-0.09662889,-0.60549957,-0.5836056,0.31347692],[0.12937143,0.41864458,0.19149177,-0.6325805,-0.38940874,0.26463097,0.3983454,0.44313705,-0.57387125,-0.6276399,0.22248751,0.2585914,-0.04698139]],"activation":"identity","dense_3_b":[[0.031332195],[-0.011427722],[0.02366233]]},{"dense_4_W":[[1.1474994,-0.26583225,0.42394185]],"dense_4_b":[[0.028095849]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x873QF909144B xf1x891582xf1x82x0571B6G920A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x873QF909144B xf1x891582xf1x82x0571B6G920A1'.json new file mode 100755 index 0000000000..8635448275 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x873QF909144B xf1x891582xf1x82x0571B6G920A1'.json @@ -0,0 +1 @@ +{"input_std":[[7.9049487],[0.8561191],[0.4504596],[0.038353253],[0.84595364],[0.8492535],[0.8529379],[0.8561067],[0.85435045],[0.85641384],[0.85120344],[0.038395345],[0.038383085],[0.038364075],[0.038244415],[0.038174238],[0.038057357],[0.037874334]],"model_test_loss":0.007408166769891977,"input_size":18,"current_date_and_time":"2023-08-13_10-20-32","input_mean":[[22.704159],[-0.05434947],[-0.028899634],[-0.014197077],[-0.047043595],[-0.04961061],[-0.051511772],[-0.064129874],[-0.073261425],[-0.082883425],[-0.0892596],[-0.013961674],[-0.014019979],[-0.014073931],[-0.014204705],[-0.014272569],[-0.014375915],[-0.014562678]],"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.120744884],[-2.1077828],[-0.06055612],[0.39443776],[-0.22368135],[-0.65588754],[-2.6387818]],"dense_1_W":[[-0.88690495,-0.25811425,0.008988815,0.13833122,-0.08116928,-0.4481129,0.35815176,0.26801386,0.28154677,-0.40463963,0.053177662,-0.24901138,0.1963489,-0.17850944,0.4205931,-0.2479545,-0.09116836,0.04012526],[-1.2232169,0.21496952,-0.34511173,0.2337797,0.55760974,-1.4960742,0.57970977,0.05764135,0.00652666,-0.002710308,-0.022491196,-0.34730065,0.12834378,0.3231942,-0.5951289,-0.18041079,0.5969328,-0.17919765],[-0.013577242,0.72050744,0.043851886,0.08763659,-0.10938563,0.81028354,-0.49421427,-0.055606507,0.39534506,-0.21660888,-0.0038955023,0.6321912,-0.21082307,-0.73846775,-0.11770506,-0.23157798,0.33104023,0.0045754346],[-0.10664416,-3.9566016,-0.095965914,-0.019330999,-0.4638217,-1.5822362,-1.4879117,-1.5428027,-2.3343623,-0.8989189,0.15379162,-0.52634346,0.4945621,0.47638455,0.3022711,-0.2961842,-0.044219077,-0.15859331],[-0.8310568,-0.15923229,0.006822003,-0.018409794,-0.23237298,1.0993366,-0.29199913,-0.24162076,-0.079320475,-0.057994813,0.19191225,0.16130863,0.2252312,-0.2553471,-0.032364585,-0.12529343,-0.24044278,0.2582998],[-0.109629534,0.32457277,3.9654276,0.21012852,0.3246289,0.68227553,-0.13658419,0.3768019,-0.07727444,-0.74666935,-0.5759585,0.04406303,0.19795617,0.018164791,-0.26933455,0.050561618,-0.20878446,-0.047754884],[-1.363271,0.06545215,0.3758413,0.06491672,0.084676765,0.35959658,-0.32623026,-0.20922486,0.069487125,0.08547648,-0.04262586,0.3544595,-0.12652668,-0.37254444,0.21089934,0.008135089,-0.105872564,-0.008318545]],"activation":"σ"},{"dense_2_W":[[-0.72054654,-0.6050417,-0.7220704,-0.44005063,-1.0284771,0.8106998,0.014414875],[-0.058226008,-1.1631503,-1.027209,-0.75974965,-1.2817178,1.113419,-0.65957123],[0.50055337,0.83895123,-0.6208208,-0.57039124,0.28612334,-1.0834124,-0.38909918],[-0.99643636,-0.39019206,0.3543918,-1.5282012,1.0121741,0.5773511,1.208323],[0.12123124,-0.62592685,-1.1137303,-0.14054954,-1.0746346,0.25387576,0.21012427],[-0.028134568,-0.41023138,1.1109024,-0.29490876,-0.104959935,-0.028684778,-0.014831031],[0.3203809,0.69519943,-0.8536804,0.34720927,-0.41844305,-0.70005876,0.2783357],[0.65279526,0.26307833,-0.09818812,-0.14922686,0.0068492573,-0.6803769,-0.6562028],[-0.9916566,-0.746977,1.2095876,-0.28206152,0.77202094,0.09917717,0.53519136],[0.5871799,0.5488787,-0.85902935,0.29927683,-0.41470188,-0.034725975,-0.4221715],[0.8082283,0.6814313,-0.9875302,0.07708959,-0.33729747,-0.6126396,-0.3882399],[0.10397777,-0.37797046,0.6114876,0.4482404,0.23890285,-0.09893929,0.30193642],[0.65473473,0.6695784,-1.1461365,-0.09873656,-0.4201835,-0.4659413,-0.021572102]],"activation":"σ","dense_2_b":[[-0.22703657],[0.015636627],[-0.28062612],[-0.46867597],[-0.42662266],[0.10531475],[-0.27268052],[-0.117583275],[-0.03751292],[-0.21399282],[-0.15614581],[0.0078853285],[-0.041914072]]},{"dense_3_W":[[0.39234796,0.62153774,0.51387525,-0.25627816,-0.22709092,-0.7633196,0.4101854,0.35565174,-0.8346539,0.39193448,0.17382623,-0.03400133,0.12321009],[-0.29410705,-0.38960123,-0.062432252,0.44320828,-0.18776551,0.4824824,-0.18968157,-0.42845276,-0.26182756,-0.26892537,-0.3521713,0.6616498,-0.546959],[0.16058823,-0.86594164,-0.13168101,1.0188407,-0.5159865,0.19459534,-0.15246914,0.059648626,0.26894704,-0.32199717,-1.2184755,0.24150649,-1.0980307]],"activation":"identity","dense_3_b":[[-0.115189165],[0.12497786],[0.049071394]]},{"dense_4_W":[[-0.6646698,0.30865747,0.50033504]],"dense_4_b":[[0.12551612]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820528B6080105'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820528B6080105'.json new file mode 100755 index 0000000000..48341be495 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820528B6080105'.json @@ -0,0 +1 @@ +{"input_std":[[8.46098],[0.5805504],[0.4286228],[0.027327532],[0.5625607],[0.5664083],[0.572346],[0.55758566],[0.55044997],[0.53875524],[0.5324083],[0.027238432],[0.027249781],[0.027267734],[0.027059836],[0.026759954],[0.02641711],[0.026055066]],"model_test_loss":0.00871726218611002,"input_size":18,"current_date_and_time":"2023-08-13_10-46-07","input_mean":[[22.35009],[0.03588671],[0.030875545],[-0.009168813],[0.023282468],[0.025879717],[0.030697377],[0.036618296],[0.039199185],[0.036285438],[0.027312003],[-0.009021863],[-0.009056173],[-0.009087383],[-0.00929402],[-0.009451607],[-0.009612639],[-0.009819853]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.034004],[-0.89401245],[0.9897701],[-0.3193278],[1.1259059],[-0.15454224],[3.3354394]],"dense_1_W":[[0.44570363,-0.7825432,-0.061906625,-0.026865548,0.2508251,-0.017034708,0.3547928,-0.310705,-0.09453543,0.070832364,0.09877715,0.2973578,-0.35449862,-0.18486549,0.30955637,0.21419896,-0.4893967,0.23366004],[0.69126964,-0.25657803,-0.030580372,-0.6565601,0.2661697,0.9771365,-0.048998043,-0.5814566,-0.13185975,0.25074315,0.15406479,-0.01448358,0.6794868,0.028108925,-0.545066,0.20658419,0.050444037,-0.016133675],[-0.6743554,-0.028887114,-0.032645535,0.25018308,0.006226353,1.0695997,-0.18894264,-0.24792102,-0.1595514,-0.059550885,0.26033223,-0.07776964,-0.13275231,-0.08301031,-0.06557147,0.015360838,-0.14179525,-0.02958493],[-0.00023020334,-2.5403516,0.103054345,-0.036754318,-0.37462926,-1.2828135,-0.78215855,-0.5872427,-0.23358877,0.8133214,-1.7763032,-0.11175946,-0.5391298,0.14259054,0.08525794,0.6968644,1.1772321,-1.3956367],[0.4643646,1.0727947,0.06773056,-0.1627986,-0.44790077,0.43600535,-0.83087605,0.3373429,0.035555895,-0.039930362,-0.11480868,0.34158143,0.086424485,-0.3963858,0.077727064,0.026601842,0.16779198,-0.14299323],[-0.01659432,0.18239553,-2.4434328,0.4596415,-1.3727697,-0.45394266,1.580408,-0.23654598,-0.03745976,0.0920622,0.5134545,-0.4865392,0.24464038,0.4678696,-0.32076362,-0.84693116,0.43715867,0.037381206],[-0.011063157,-0.9861401,-0.049675927,-0.730512,-0.29446808,0.047909494,-1.549821,1.0472431,0.20591155,-1.2257841,0.35139507,-0.9356053,-0.8952574,-1.3479776,-0.92216295,-0.5816112,-2.177031,-2.7402952]],"activation":"σ"},{"dense_2_W":[[-0.9175717,0.7838937,0.18961704,-0.21025512,0.049619257,0.1847999,-0.13175379],[-1.3712368,-0.22107592,0.8426797,-0.54940265,0.37827617,-0.7331404,0.3816527],[0.879834,-0.07275896,-0.15078747,-0.084817156,-0.5905503,-0.0077536167,-0.026412051],[-0.16437627,0.7776934,0.16704066,-0.81203943,0.714978,-0.38184956,0.5668494],[0.36693972,-0.71004605,-0.4970682,0.41367897,-0.26275557,0.04859335,0.0019217964],[-1.1874106,0.44417366,0.4221658,-0.459451,0.9441592,0.028537316,0.44670618],[0.06823978,0.053194616,-0.32906988,-0.040382143,-0.74561256,-0.3759315,0.52331495],[-0.16486976,-0.63236946,0.17065576,0.6424932,-1.2657642,0.19909996,-0.30308995],[0.44445,-0.5825901,-0.4318686,-0.37460575,-1.2127082,0.11012628,0.7677005],[-0.46705374,0.7579557,0.43045595,-0.14844555,0.81806993,-0.3961867,0.082349285],[0.9047916,-0.027479485,-0.21539336,-0.26026043,-0.56305844,0.23231633,0.24555749],[-0.13455963,-0.793142,0.16952343,0.31437233,-1.4577682,0.7650801,-0.17605627],[0.78401864,-0.40363696,-0.7288144,-0.4528122,0.13153328,-0.089454,-0.4570649]],"activation":"σ","dense_2_b":[[-0.03731149],[-0.25853628],[-0.22449726],[0.050002333],[-0.07679642],[-0.27620718],[-0.040895026],[-0.17041162],[-0.12874831],[-0.1850663],[-0.06403408],[-0.31963417],[0.010012412]]},{"dense_3_W":[[0.43035418,0.62377286,-0.04799687,0.37535116,-0.2510285,0.435108,-0.4777117,-0.42720693,-0.16901441,0.34647202,-0.5691831,-0.47436827,-0.56257755],[0.50507265,0.812848,-0.0652019,-0.037624083,-0.2630056,-0.063649006,-0.17664024,0.6002492,0.23068571,0.061552785,-0.5704422,-0.3373628,-0.5592467],[0.020316904,0.6937366,-0.266464,0.46094483,-0.045586474,0.38334998,0.41075394,-0.3045877,-0.63142675,-0.3368865,0.11822097,-0.1788716,-0.461762]],"activation":"identity","dense_3_b":[[0.058974706],[0.07503411],[-0.08209236]]},{"dense_4_W":[[1.1198002,0.17802396,0.12900992]],"dense_4_b":[[0.055657092]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820528B6090105'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820528B6090105'.json new file mode 100755 index 0000000000..ed370ac904 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN b'xf1x875Q0909143P xf1x892051xf1x820528B6090105'.json @@ -0,0 +1 @@ +{"input_std":[[8.303951],[1.1061448],[0.45519033],[0.03890334],[1.081259],[1.0887367],[1.0969497],[1.092481],[1.0865434],[1.0689224],[1.0470375],[0.038625997],[0.038678918],[0.038709994],[0.038684364],[0.03853108],[0.03823509],[0.037891388]],"model_test_loss":0.0091054392978549,"input_size":18,"current_date_and_time":"2023-08-13_11-14-36","input_mean":[[24.991106],[-0.052309062],[0.0040966566],[-0.011176246],[-0.052617952],[-0.052739866],[-0.053076603],[-0.053221803],[-0.052702937],[-0.052821293],[-0.04823078],[-0.01125922],[-0.0112718595],[-0.011276353],[-0.011362061],[-0.011423353],[-0.011574674],[-0.011701717]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.2000623],[-1.0601752],[0.02134417],[0.34618574],[-0.41577217],[-0.1728919],[-0.61339724]],"dense_1_W":[[0.6945757,-0.32359305,1.5179125,0.061160147,0.2037475,0.6379559,-0.12414423,0.0059865746,0.13593642,0.34044787,-0.6639205,0.08353744,-0.077323966,-0.28454944,0.04639403,0.20414786,0.3709197,-0.3463716],[0.05652898,4.1764426,-0.006069666,-0.7129519,1.8937668,1.5178504,0.3519152,1.7854784,0.39515916,0.91557574,0.47060627,0.37094897,0.3413073,0.2681898,-0.31728673,0.20122348,-0.028086334,0.15455683],[0.14809841,-0.17917761,-0.00034424284,-0.124425046,-0.1850857,-0.74427736,0.15511078,-0.120926015,-0.012820842,-0.117898285,-0.016289195,0.27818105,-0.09533491,-0.03304152,-0.04132924,0.0033757824,0.35598698,-0.11256063],[1.1169398,0.49344513,-1.6779064,0.31510845,-0.165833,-0.52853584,-1.2107238,0.38685435,0.2492109,0.36423388,-0.026242055,-0.092144534,0.22960894,-0.3682959,-0.17427671,-0.15931715,0.31591633,-0.12631632],[-0.09261426,-0.44354674,0.0025963027,0.11725519,0.5170039,-1.6007098,0.409791,-0.18131912,0.0033203233,0.25904283,-0.21513839,-0.4170825,-0.15698108,0.47902456,0.53502494,-0.31782442,-0.03569762,0.051992897],[0.0042456975,-0.47560015,-0.0026210295,0.031245418,-0.012764861,-0.92874646,0.6509197,0.33344513,-0.012610092,0.18168646,-0.2557554,-0.44327387,-0.13764408,0.42211333,0.23698005,0.37390047,-0.073409125,-0.17985323],[-0.8177616,0.6893316,1.3907503,-0.0023526286,-0.5415417,0.801563,-0.40723026,0.18662976,0.07481949,0.11865076,-0.6322875,0.23950732,-0.17827813,-0.16382805,-0.084146835,0.39538124,-0.09231756,-0.06298284]],"activation":"σ"},{"dense_2_W":[[0.30893767,-0.21597238,0.34375098,-0.25055024,0.3330617,0.38276237,-0.71425796],[-0.31416908,0.19624454,0.84980524,-0.6247502,1.137116,0.7904554,-0.74953896],[0.10519312,0.14832982,-0.26275882,0.2762413,-0.35890564,-1.246903,0.25022545],[-0.3228544,-0.06965771,0.24511589,-0.09088025,0.87480575,0.8223658,-1.0762371],[-0.6225081,-0.79335475,-0.77840954,-0.5098249,0.62632555,0.2364035,-0.94132584],[-0.26544946,0.19669403,0.33992356,-0.021165801,0.5467231,0.35932502,-0.86759907],[-1.9278108,-3.4194539,-1.5747315,-1.8566562,1.757728,0.4785611,0.38245028],[0.00854604,0.22411391,-0.98446316,0.5888375,-1.1318563,-0.63558984,0.21114045],[-0.042795878,-0.25286025,0.9120754,-0.47074848,0.21183152,0.8286851,-0.5500911],[-0.048500616,-0.39560843,0.108169064,0.030019483,-0.2797118,-0.8024904,1.1825333],[0.24435245,0.30188617,-0.8876096,0.32955825,-1.0187839,-0.70859,0.41195366],[0.2961078,0.036369283,-0.173866,0.25641084,-0.7356608,-0.51908946,0.9349239],[-0.8808378,-0.3808547,-0.36999512,-0.77035606,0.5030658,0.36325094,0.39363125]],"activation":"σ","dense_2_b":[[-0.07842559],[-0.09987076],[0.010018767],[-0.2822568],[-0.35917684],[-0.44091773],[0.33568865],[0.07248511],[0.07309797],[0.10989416],[-0.003620754],[0.0024933761],[-0.2047217]]},{"dense_3_W":[[0.26641047,0.5025841,-0.5746309,0.72528905,0.4545447,0.14570309,0.58782375,-0.8174622,0.7011326,-0.37532592,-0.8499182,-0.5160384,-0.10076714],[0.42193347,-0.2640134,-0.09260018,-0.47143674,-0.31873474,-0.070022374,0.0072793798,0.21706063,0.47843012,-0.12351305,0.057239983,-0.37678227,0.3790527],[0.31047106,0.072491184,-0.26496214,0.28195223,0.43037447,-0.17418887,0.37405774,0.15594256,-0.030484399,-0.10081656,-0.36806333,0.17099544,-0.57947606]],"activation":"identity","dense_3_b":[[-0.035134505],[0.035389643],[-0.0024598911]]},{"dense_4_W":[[-0.88231134,0.03782195,-0.036473993]],"dense_4_b":[[0.026110955]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN.json new file mode 100755 index 0000000000..f3cf6c0895 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN ATLAS 1ST GEN.json @@ -0,0 +1 @@ +{"input_std":[[8.807038],[1.1578474],[0.462717],[0.04096329],[1.1326288],[1.1411434],[1.150276],[1.1401542],[1.1256609],[1.1028374],[1.0771434],[0.040799636],[0.040834032],[0.04086527],[0.040849086],[0.040718287],[0.040424738],[0.040075604]],"model_test_loss":0.011358999647200108,"input_size":18,"current_date_and_time":"2023-08-13_09-26-52","input_mean":[[24.574387],[-0.042787574],[-0.0084383935],[-0.008247784],[-0.04005291],[-0.04116906],[-0.04206258],[-0.04518047],[-0.045766264],[-0.047523264],[-0.048847865],[-0.008307315],[-0.008303847],[-0.008298328],[-0.008317524],[-0.008355838],[-0.00843378],[-0.008587674]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.5398485],[0.25783718],[0.41557038],[-1.7976782],[0.53406316],[-0.63385665],[-1.917262]],"dense_1_W":[[-0.4253817,0.22663599,1.0573925,-0.003105988,-0.096334025,0.6529197,-1.1694652,0.3467033,0.24922119,-0.3803986,0.08890094,0.061100043,-0.017730042,-0.11883982,0.13428102,-0.0348934,-0.0068453453,-0.007779446],[-0.008402637,-3.3132567,-0.21813557,0.071411654,-1.1415226,-1.6578175,-0.637207,-1.3461175,-0.6741953,0.16755764,0.2779039,0.11480545,-0.1803503,0.34613702,0.0859196,-0.29474613,-0.042490523,-0.01820469],[-0.4971483,0.098119624,-1.0920941,0.16022453,0.21241802,0.6172494,-0.9755981,0.035779636,0.0041822596,0.31914288,-0.18518393,-0.26218906,0.23453258,0.014359854,-0.06966559,-0.0034770474,-0.26081735,0.17178555],[-0.25480956,1.3900709,-0.0011070514,-0.06342647,-0.10887336,0.7041751,0.2328101,0.04183806,-0.033468023,0.028824355,0.071826614,0.098379195,0.32470608,-0.19180217,-0.5554726,-0.2217316,0.10789431,0.07102663],[-0.49687034,-0.6059788,1.1368431,0.11400577,0.4183632,-0.9394553,0.7815931,0.067233406,0.1662752,-0.13292359,0.051417153,-0.7103316,0.24026254,0.35937056,0.45720938,-0.5001579,0.1221688,-0.060943875],[-0.44913447,-0.4765777,-1.0624616,0.50197846,0.086886585,-0.17574842,0.9428897,-0.32340288,-0.06547519,-0.04256699,0.15002339,-0.5190985,0.11296826,0.2678741,-0.4129183,-0.016196959,0.10317533,-0.04792584],[-0.25692594,-1.3502828,-0.0009460109,-0.0050777984,0.46374944,-1.0939615,-0.40397272,0.14855485,-0.0076834555,-0.08402314,-0.048022572,-0.3868957,-0.03253632,0.29881552,0.5705721,0.1640352,-0.11509783,-0.05596482]],"activation":"σ"},{"dense_2_W":[[-0.16952407,0.08702787,0.6493835,0.27430746,-0.0071199476,-0.19580856,-0.2091579],[-0.1470845,-0.33079877,-0.5467495,0.41160226,-0.4971588,-0.5109554,-0.123111665],[0.7788407,0.12949619,0.46349248,0.13599767,-0.5738747,-0.20808762,-0.06685508],[0.87942976,-0.68710035,0.46623912,0.08075862,-0.31713346,-0.69495225,-0.42125878],[-0.5606583,0.49643534,-0.51900244,-0.48461094,0.31940943,0.18362813,0.8575088],[-0.2532001,-0.51093,0.25305697,-0.54165125,0.53601104,0.9598262,0.9526221],[-0.5665034,0.62428737,-0.07754291,-1.1295077,0.024450528,0.5505611,0.527919],[-0.17602344,-0.28039378,0.020311655,0.22711796,-0.68551284,-0.7996287,-0.6079852],[0.43893847,-0.7567556,0.10027089,-0.15151227,0.014879642,-0.31855884,-0.34122738],[-0.7633393,-0.07543374,-0.3050713,-0.97557557,0.37339172,0.8250897,0.7215346],[-1.2275901,0.62176853,0.03411873,-0.5092338,0.25704694,0.53235847,0.22089346],[0.23248282,-0.26544097,0.5072489,0.94194096,-0.44382775,-0.7462538,-1.0142152],[-1.2566365,0.09855355,-0.39514026,-1.0510743,0.48289242,0.4580382,0.30374187]],"activation":"σ","dense_2_b":[[0.013570737],[-0.17418918],[0.028351136],[0.12490911],[-0.16577649],[0.042069126],[-0.035789013],[-0.13899207],[-0.08848456],[-0.07905907],[-0.19632997],[0.038965493],[-0.12647548]]},{"dense_3_W":[[0.24081455,-0.44363257,-0.55115354,-0.030922456,-0.008375877,-0.123510234,0.2126219,-0.46798712,0.2711133,0.56804013,0.1574471,0.33433697,0.38691574],[-0.4032797,0.39321384,-0.3401627,-0.7603349,0.47812653,0.23157345,0.78344727,0.15922022,0.17650013,0.6928251,0.6137232,-0.7369166,-0.103489414],[-0.24215305,-0.40328485,-0.6077818,-0.28876036,0.56822276,0.63360524,-0.08002663,-0.23342833,-0.5187577,0.4915526,-0.17775443,-0.78564095,0.31357977]],"activation":"identity","dense_3_b":[[-0.07463631],[-0.05884157],[-0.03089778]]},{"dense_4_W":[[-0.15029056,-0.63581127,-0.55734146]],"dense_4_b":[[0.04723571]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144F xf1x895043xf1x82x0561A01612A0'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144F xf1x895043xf1x82x0561A01612A0'.json new file mode 100755 index 0000000000..4d03bacbb7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144F xf1x895043xf1x82x0561A01612A0'.json @@ -0,0 +1 @@ +{"input_std":[[6.393678],[0.9507211],[0.515524],[0.03579411],[0.92671007],[0.9349327],[0.94223416],[0.93390805],[0.91419286],[0.9005691],[0.8817757],[0.035967667],[0.035894528],[0.03581829],[0.035463523],[0.035266362],[0.034894552],[0.034437038]],"model_test_loss":0.007279031444340944,"input_size":18,"current_date_and_time":"2023-08-13_12-09-05","input_mean":[[18.321695],[0.026961222],[-0.0035306585],[0.0042126137],[0.026481297],[0.025289914],[0.02407461],[0.022458786],[0.02010773],[0.01840629],[0.010958715],[0.004338949],[0.004328805],[0.004322178],[0.004482345],[0.0045845066],[0.0045210808],[0.0044681383]],"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.23433709],[-0.18828739],[-0.18552896],[-0.5719115],[-0.22013229],[-1.4444673],[-1.5718764]],"dense_1_W":[[-1.2401875,0.3811429,0.22920376,0.17823632,0.38709855,-0.66355306,0.8482343,0.49103037,0.5053358,-0.24420182,-0.092417374,-0.23246154,-0.050690368,-0.08148075,0.24395947,0.33181128,-0.24565633,-0.08007848],[-0.033186838,-0.018208645,5.2053638,0.40082926,0.12013276,1.3642305,-0.066606104,-0.2109344,0.056820087,-0.49343818,-0.73463804,0.0054429434,0.30579343,0.2644848,-1.104032,-0.3646586,0.40208718,0.09694821],[0.013673816,1.5230023,0.03033682,-0.35785833,-0.47244158,1.1692531,-1.2142229,0.21123275,0.20759322,-0.12557651,-0.024190914,0.18843181,0.42164597,-0.41802365,-0.1273723,0.11422493,-0.3571295,0.24296899],[-1.2805165,-0.03634216,-0.2315571,-0.33567777,-0.15831298,0.46170834,-1.3284832,-0.35208622,-0.3114747,-0.14607859,0.23413593,0.42039818,0.100040615,-0.11651754,-0.25472957,-0.18363725,0.25635332,0.046210147],[-0.1223163,0.39836767,2.1085758,-0.83522975,0.93836105,1.1645079,0.5623019,0.803997,1.619908,0.69255054,0.006743934,-0.027720656,0.22808708,-0.50816184,1.2988809,0.82322896,-0.54477817,-0.36819857],[-0.7315945,0.4780022,0.1772432,0.4104992,0.08421316,0.9401301,-0.49227592,-0.009742048,0.11372556,0.104266785,-0.019224092,0.4900326,-0.47639382,-0.6323555,0.24357527,-0.0516575,0.23969004,-0.19771135],[-0.76657575,-0.4302957,-0.18278445,-0.14294477,0.019147635,-0.83321804,0.18196133,0.0027990995,-0.101887345,-0.09481852,0.02363611,-0.10652451,0.29024073,0.12037951,-0.19053681,-0.002771024,-0.18999992,0.19319752]],"activation":"σ"},{"dense_2_W":[[1.1674703,-1.0795661,-0.83592135,-1.2450091,0.39534637,-0.23755772,0.6893884],[-0.8306515,0.5932858,-2.246159,-0.60801744,0.89207256,-1.3776426,-0.87655],[0.06655564,-0.3241597,0.68319845,0.5761408,0.07908217,0.17945948,0.24506673],[0.68613476,0.19972438,-1.3021669,-0.6668362,-0.6518976,-0.24746297,1.2003715],[-0.8004638,0.5167141,1.1191069,0.013375394,-0.2572823,0.93613464,-1.1853722],[-0.21710496,-0.35993806,-0.07203962,-0.6938927,0.18984064,-0.09594037,-0.2881428],[-0.6179966,0.46525648,0.5319194,-0.16893135,0.60552096,1.0496196,-0.51345116],[0.37096095,-0.56000143,-1.0920874,-0.23331793,0.05436759,-1.0298152,1.2464622],[-0.75719625,0.636631,0.13826808,0.05155059,0.22594887,0.8592017,-0.037603486],[0.20930098,-0.55796367,-1.2967436,0.6157302,-0.9854021,-1.511364,1.3654305],[-0.7381424,0.45607466,0.6661581,0.7688956,-0.33832595,1.0015503,-0.6602416],[0.2261951,-0.15274303,-1.3926961,-0.2749363,-0.19298306,-0.8495188,0.6840784],[-0.06774882,0.43374217,-0.59146774,-0.98507404,-0.005510673,-0.63316214,0.44423348]],"activation":"σ","dense_2_b":[[0.25605625],[-0.27236927],[-0.026778517],[0.31539285],[-0.36685586],[-0.16439182],[-0.1343443],[0.3629454],[-0.13780022],[0.39224806],[-0.23516674],[0.24514045],[0.062903486]]},{"dense_3_W":[[0.5346557,0.3789998,-0.2614574,0.4879767,-0.46347272,0.18811665,-0.5559382,0.5217684,-0.6780195,0.568179,-0.20284745,0.40725482,0.25554204],[-0.30582777,-0.6364137,-0.2515572,-0.53830695,0.23051241,0.7431814,0.15372244,-0.14764914,-0.21156888,0.0260592,0.5506795,-0.36910096,-0.12995946],[0.1502716,-0.7994257,0.5153921,-0.6199781,0.056621913,0.29504618,0.005925515,0.060055684,-0.36957523,-0.3707947,0.71017915,-0.45440555,-0.37977552]],"activation":"identity","dense_3_b":[[-0.04320616],[0.24266042],[0.06822999]]},{"dense_4_W":[[-0.8555905,0.09768048,0.3667474]],"dense_4_b":[[0.03568016]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566A01613A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566A01613A1'.json new file mode 100755 index 0000000000..d71ba156c3 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566A01613A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.674182],[0.8655689],[0.57967585],[0.040321745],[0.84932566],[0.85650927],[0.86215264],[0.87139815],[0.87453574],[0.874555],[0.8716648],[0.03994974],[0.040019948],[0.040080216],[0.04002835],[0.03998725],[0.03991318],[0.039837524]],"model_test_loss":0.007650585845112801,"input_size":18,"current_date_and_time":"2023-08-13_12-35-04","input_mean":[[23.87158],[-0.1436498],[-0.028368313],[0.009035347],[-0.13046499],[-0.13379243],[-0.13699822],[-0.1480593],[-0.15190914],[-0.15157087],[-0.14864737],[0.009231746],[0.009238965],[0.00924779],[0.00920954],[0.009201414],[0.009255218],[0.00909153]],"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.09592608],[0.9918901],[-1.2113507],[0.8661807],[0.05155025],[0.3214984],[-1.153684]],"dense_1_W":[[-0.017169934,1.1931341,-1.1062534,-0.19596136,-0.81572723,-1.2010746,1.5714276,-0.57053953,-0.8263804,0.052935984,0.73478985,-0.2280826,-0.21767642,0.2753641,0.1326998,0.45369527,0.07199933,-0.30603126],[2.1590579,-1.4124492,0.009337138,-0.21821123,0.84495044,-0.61482656,1.1536438,0.7080137,-0.04427048,0.10480956,-0.022087824,0.2886762,-0.07587974,0.070064016,0.14185634,-0.0007030371,-0.38303795,0.27994344],[-0.40794194,1.153379,-0.0024999902,-0.6986611,-0.20693888,0.6483961,-0.701288,0.039575372,-0.047968443,-0.08190851,0.07021685,0.14132965,0.2368701,0.14922713,-0.22505046,0.28357986,-0.06247636,0.056652017],[0.52197176,1.2478426,0.0009211915,-0.4745136,-0.1614392,0.40458196,-0.48290923,0.053574517,-0.095450394,-0.017885987,0.032721847,-0.090606876,0.14145781,0.2679699,-0.1473115,0.18667473,-0.008584987,-0.005414795],[-0.022690998,0.6585079,-0.005586868,-0.6780271,0.19687867,-1.1014344,-0.2943398,0.36450255,0.03506954,-0.08123903,-0.15920855,0.0505067,0.058525577,0.36120212,-0.21424536,0.46626067,-0.017863052,-0.085303724],[0.00013837297,-0.25373533,-6.435928,1.58516,0.6184224,-0.2115976,0.2892219,-0.71608067,-0.6071019,-0.20726296,0.9175523,-0.47211647,-0.2097295,0.15351994,-0.7116983,-0.63811296,0.23258395,0.08622454],[-2.0628932,-0.7452186,0.008288695,-0.31313533,0.67136544,-0.5808361,0.9877969,0.1444861,0.15634331,0.030246384,0.014997267,0.043635026,0.062175572,0.28663024,-0.13891469,0.3720139,-0.38673353,0.17359486]],"activation":"σ"},{"dense_2_W":[[-0.16763338,-0.47461554,0.10763972,-0.2838411,-0.52468586,0.44780418,-0.66006994],[0.5267072,0.10084127,-0.0030579919,-0.43386367,-0.58511466,-0.099385306,-0.19599876],[-0.0906234,-0.83193815,-0.66303736,-0.8964175,-0.2003442,0.35760805,-0.058140375],[-0.190499,0.07829508,-0.08322553,0.012610012,-0.15027554,0.07325327,-0.22076952],[-0.65134853,-0.6751714,0.38901326,-0.20597398,-0.49264622,-0.6020643,0.38099632],[0.3904269,0.8117801,-4.0269456,-2.344315,0.987539,1.1614928,1.1175928],[0.26499394,0.7727802,-0.99474823,-0.9302356,0.3447509,-0.4111184,0.08102163],[0.35695434,0.33521402,-1.2582849,-1.6280061,0.4927368,-0.14476238,0.5757368],[-0.37491873,0.25197625,0.22271682,-0.491189,-0.52316636,0.4666745,-0.10067969],[-0.34871188,0.033361014,0.14734446,0.31006506,-0.27586716,0.06688171,-0.3405154],[0.5929227,0.8162524,-0.9812328,-0.5239229,0.5872333,0.020790983,0.31533986],[0.24348359,0.39312568,-0.0214521,0.6143711,0.016012145,-0.42566973,-0.118630745],[0.1463825,0.07799967,-0.6324735,0.25962767,-0.5155253,0.076581135,-0.6227099]],"activation":"σ","dense_2_b":[[-0.27831843],[-0.0112905],[-0.27060327],[0.007902096],[-0.05577947],[0.6268199],[-0.053876836],[-0.049551494],[-0.029292142],[0.031467807],[-0.027137926],[0.055927135],[-0.26256073]]},{"dense_3_W":[[0.060232863,-0.5037746,0.018263955,-0.5830695,-0.23065938,0.7206465,0.25052637,0.66073346,-0.34804803,-0.2457851,0.56354797,0.1584851,0.14229323],[-0.017081043,-0.36273557,-0.21656403,-0.05546782,-0.48246115,0.02398911,0.24811241,-0.15399784,-0.1066594,-0.53166276,0.27734274,-0.5389266,-0.5232047],[-0.21170785,0.5739519,0.58981717,0.07041403,0.24331552,0.2217054,0.16948755,0.14839208,0.30543324,0.059965707,0.58376944,-0.4667308,0.47962144]],"activation":"identity","dense_3_b":[[-0.034093823],[-0.02758039],[-0.049317274]]},{"dense_4_W":[[-1.1292782,-1.1194721,-0.71209276]],"dense_4_b":[[0.03250581]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144K xf1x895072xf1x82x0571A0J714A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144K xf1x895072xf1x82x0571A0J714A1'.json new file mode 100755 index 0000000000..ea8bf79c9c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144K xf1x895072xf1x82x0571A0J714A1'.json @@ -0,0 +1 @@ +{"input_std":[[7.261855],[1.0054495],[0.44603008],[0.04906136],[0.9972159],[0.9997243],[1.0025296],[0.99329203],[0.98267734],[0.9657255],[0.9471463],[0.04888154],[0.048943646],[0.04899115],[0.04890786],[0.04878479],[0.04839674],[0.047833208]],"model_test_loss":0.007453115191310644,"input_size":18,"current_date_and_time":"2023-08-13_13-00-57","input_mean":[[25.69152],[0.10401062],[-0.019496834],[0.008966865],[0.10911976],[0.10757787],[0.10587171],[0.097837746],[0.09283788],[0.085548356],[0.07863567],[0.008932414],[0.008952776],[0.0089605255],[0.008813915],[0.008735177],[0.00846132],[0.00794868]],"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.13713238],[0.20321627],[0.7490122],[-0.38984767],[-0.015705755],[-0.5183053],[-1.6598694]],"dense_1_W":[[-0.016463742,-0.80616003,0.0065253316,0.830898,0.64298636,-0.5656381,-0.06751878,-0.63732654,-0.96067095,-0.42503732,-0.027717927,0.40051052,0.05184687,0.17363398,-0.085222274,-0.19231836,-0.08309723,-0.16269061],[-0.009811768,-0.65155673,-5.564333,0.506703,0.65423405,-0.3767845,-0.07368195,-0.62674314,-0.17415152,0.25860035,1.2521535,-0.79924744,-0.017620802,0.29095054,0.30994758,-0.4196323,-0.16702113,0.057845533],[-0.96295756,-0.31182382,0.00043095846,-0.058392283,-0.584871,-0.98906785,0.44015396,1.2223701,0.6097256,-0.030337319,-0.65342844,0.082843415,-0.2627854,0.36388263,0.5306976,0.18281356,0.38318297,-0.35831112],[-0.045849763,1.0797496,-0.00030220754,-0.07059503,-0.75782734,1.1085478,-0.84971356,0.5044923,0.2171235,-0.035467442,-0.21155863,0.10211848,0.19065809,0.15918909,-0.3584042,0.042742535,-0.10781619,0.071901545],[0.0019713347,-0.10772645,-1.2357202,0.10401833,-0.59948766,-0.6267504,0.51822174,-0.38673958,-0.18886894,0.34199828,0.7218928,-0.07034036,0.009723587,0.39160627,-0.32980394,-0.08204679,-0.2102608,0.20249581],[0.9227928,-0.69833463,0.001716081,0.3443532,-0.20834416,-1.1405655,0.5173991,1.1539986,0.6729235,0.12514886,-0.70969516,0.14161992,-0.40097812,-0.17782708,1.0813764,0.10388947,-0.08262546,-0.17301287],[-0.16219285,-1.3139731,-0.005380759,-0.11242274,0.21998426,0.14689903,0.20139551,-0.46337608,-0.41527465,0.06917474,0.2767211,0.0030106166,-0.27788752,0.102582745,0.1434504,0.07394607,-0.071815714,0.09023541]],"activation":"σ"},{"dense_2_W":[[-0.09534758,-0.20494337,-0.3384321,0.50142735,-0.2070578,-0.17975266,-0.47026268],[-0.080807835,-0.7693725,-0.33129126,-0.6481296,0.2961305,0.59115857,0.29982796],[-0.67640305,0.10868651,-0.40651622,1.251038,-0.35252488,0.069079645,-0.4344765],[-0.405377,0.46910697,-0.648163,0.5376939,-0.4130663,-0.20368347,0.10605837],[0.07806083,0.13273892,0.59590846,-1.2799983,-0.14798646,0.5163046,0.71807456],[0.2771363,0.0771471,-0.88079923,0.19846076,0.33752158,-0.63239664,-0.73708975],[0.384604,0.10437411,0.23125851,-1.506182,-0.06421899,0.8640644,0.4960929],[0.008516661,-0.14540984,-0.039332498,0.3648482,-0.4843125,-0.26544338,-0.19283234],[0.5896814,0.479453,0.07903197,-1.3779969,0.44292685,0.57847136,-0.047437504],[-0.109293275,-0.42078793,-0.39426482,1.4202753,-0.35743013,0.16971365,-0.7200603],[-0.5129918,-0.20219454,0.102802396,0.71803844,-0.24758278,-0.5028839,-0.4083767],[-0.5097355,-0.21850984,-0.28750372,0.014024571,0.07086597,-0.24340022,0.23649839],[-0.72368366,0.15557946,-0.2388718,-0.084316276,0.37256187,-0.16913413,-0.93164635]],"activation":"σ","dense_2_b":[[-0.16169836],[-0.42624626],[0.103336595],[0.09075817],[-0.34198973],[-0.17581685],[-0.73661387],[-0.029041702],[-0.36334386],[0.27201274],[0.079298005],[-0.038892936],[-0.31755415]]},{"dense_3_W":[[-0.32185918,0.23010239,-0.29461142,-0.20029086,0.09440893,0.6768535,-0.5149668,0.37832007,-0.40137282,-0.01920188,0.09111374,0.13883176,0.5203541],[0.4970465,-0.45029837,0.5610221,0.36681646,-0.7023499,0.60753286,-0.027918534,-0.16638023,-0.62392753,0.674149,-0.17300312,-0.16632567,0.13502161],[0.22802192,-0.10680726,0.023894504,-0.37220314,0.5496468,0.25617206,0.49781597,-0.38562778,0.7652926,-0.52234906,-0.40956378,-0.2859582,-0.0064916024]],"activation":"identity","dense_3_b":[[-0.017725911],[-0.009221329],[-0.0017763044]]},{"dense_4_W":[[0.06679463,0.77652645,-0.89682037]],"dense_4_b":[[0.003297589]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144L xf1x895081xf1x82x0571A0JA15A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144L xf1x895081xf1x82x0571A0JA15A1'.json new file mode 100755 index 0000000000..d28c64acc3 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144L xf1x895081xf1x82x0571A0JA15A1'.json @@ -0,0 +1 @@ +{"input_std":[[5.9609013],[0.68010557],[0.3328183],[0.030046908],[0.67651325],[0.6776699],[0.67907083],[0.6744121],[0.6666261],[0.6520554],[0.6380237],[0.030044695],[0.03003401],[0.030022014],[0.030028066],[0.03002876],[0.03002293],[0.030003896]],"model_test_loss":0.008286223746836185,"input_size":18,"current_date_and_time":"2023-08-13_13-27-29","input_mean":[[27.427336],[-0.053844143],[-0.0010561344],[-0.0085596135],[-0.05380778],[-0.05453289],[-0.054989513],[-0.055681985],[-0.059845272],[-0.063087784],[-0.068856664],[-0.008624959],[-0.008624049],[-0.008617082],[-0.0086126095],[-0.008567826],[-0.008474123],[-0.008392853]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.5761452],[0.04077484],[-0.10482081],[-0.6708523],[0.021307532],[-0.9310431],[-0.00019539302]],"dense_1_W":[[0.72231996,0.18390898,2.4203904,-0.0030663384,0.18403961,-0.82045245,0.51870364,0.1788108,-0.06536024,-0.075233705,-0.018536722,-0.026407123,-0.017022373,-0.1641255,0.08881735,0.3791095,0.15368912,-0.30361718],[0.00531365,-0.94260526,0.019553717,0.16079119,0.6135709,-1.1629479,0.25475162,0.16275546,0.23717655,-0.7684713,0.269077,0.4080043,-0.31144062,0.070601925,0.010450419,-0.22756179,-0.16736664,0.18631667],[-0.03383979,0.58095545,1.7085242,0.07134275,-0.48016626,0.043425214,-0.5469088,0.44866776,0.65664923,-0.30118445,-0.3005833,0.13361159,-0.11855819,-0.35175917,0.46242264,0.1385892,-0.29124546,0.018451372],[2.3314073,-0.7370475,-0.1599346,-0.112356625,-0.1908801,0.16796266,-0.05533258,-0.10605465,0.0662108,0.10284821,-0.3036309,0.17438193,0.003727518,-0.38027525,-0.23749365,-0.8124727,-1.1274155,-1.5589621],[-0.0006869782,-0.042528924,0.05025561,-0.031743184,-0.22178772,1.016933,-0.50708455,-0.30513486,0.16629063,-0.23337619,0.21578076,0.41531077,0.26406106,-0.24498649,-0.53471065,-0.36644122,0.11139245,0.2798891],[0.5800486,0.17213458,-2.2770967,0.13273536,-0.15001313,0.24997446,-0.7256148,0.33752334,0.053435106,0.18205637,-0.21749948,0.3237458,-0.31033078,0.13797231,-0.37041757,-0.13781188,-0.038840763,0.20394051],[0.0049984013,-0.35607442,-0.30905604,0.40517208,-0.19288664,-1.2281868,0.16647166,0.44088066,0.40701556,0.12298187,-0.08295799,-0.07647913,-0.38256118,-0.048575446,0.47953144,-0.019423949,-0.0798172,-0.15896548]],"activation":"σ"},{"dense_2_W":[[0.17072913,0.5787543,0.16908416,-0.15344563,0.21352929,0.1036233,-0.16814779],[-0.04280792,-0.8720339,0.5860262,0.17910767,0.05812723,0.43166825,-0.40927374],[-0.25224444,-0.32741183,0.5557173,0.2577443,0.27441007,0.024975402,-0.18134333],[-0.17902452,0.7218189,-0.24128178,0.08938652,-0.5499739,-0.2853039,0.6032645],[-0.012645399,-0.10678161,-0.2497543,0.12273038,-0.2995278,-0.5155403,-0.12064403],[-0.05483617,-0.61829835,-0.024198718,0.29385313,-0.05762493,-0.13852271,-1.0283959],[-0.17513163,0.5525871,-0.34557396,0.40270397,-0.4239708,-0.36327696,0.22318624],[-0.3050681,-0.5609769,0.6848509,-0.14485584,0.41891348,0.23840618,-0.42206725],[0.3968867,-0.00579093,-0.7550544,0.1985394,-0.41320163,-0.6388418,0.68250275],[0.13954934,0.31490627,-0.79896843,0.12518695,-0.46648943,-0.10224329,0.8570033],[0.40961888,0.4413134,-0.67998093,0.32758147,-0.30693418,-0.39162624,0.6029714],[-0.39057493,0.04696759,0.76041484,0.46441597,0.06613202,0.19455153,-0.84763706],[-0.1115568,-0.48450366,0.6582964,0.43812597,0.7578292,-0.45037985,-0.6380507]],"activation":"σ","dense_2_b":[[0.022194395],[-0.03836468],[-0.058703274],[-0.013638688],[-0.012889619],[-0.117961474],[0.015166406],[-0.040138457],[-0.011272022],[-0.012204604],[-0.062101785],[-0.09131032],[-0.06450806]]},{"dense_3_W":[[0.29413998,-0.24403282,-0.21639973,0.017811967,0.28033993,0.18735097,0.23800737,-0.61772835,0.47691423,0.2947574,0.39353845,-0.30080277,-0.573409],[-0.59557885,0.16263157,-0.33032954,0.27123576,0.30058095,0.14316729,-0.57262224,-0.010264795,0.5258702,0.31621447,-0.29535997,0.38230023,0.18332578],[0.54958236,-0.64796954,-0.5860492,0.4647252,0.25805357,-0.39067873,0.6433446,-0.62534493,0.2620962,0.22722915,0.31812868,-0.29690334,-0.6393193]],"activation":"identity","dense_3_b":[[0.02814165],[-0.050614122],[0.03127771]]},{"dense_4_W":[[-0.7580981,-0.00726576,-0.8432115]],"dense_4_b":[[-0.029448459]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144M xf1x895082xf1x82x0571A0JA16A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144M xf1x895082xf1x82x0571A0JA16A1'.json new file mode 100755 index 0000000000..9f716a09ec --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873Q0909144M xf1x895082xf1x82x0571A0JA16A1'.json @@ -0,0 +1 @@ +{"input_std":[[7.415863],[0.8583176],[0.3856797],[0.031867158],[0.84238064],[0.8479653],[0.85318357],[0.8488065],[0.84401506],[0.83682716],[0.8221359],[0.03176191],[0.031782564],[0.03180224],[0.031836487],[0.03187497],[0.03179108],[0.031642724]],"model_test_loss":0.006253075320273638,"input_size":18,"current_date_and_time":"2023-08-13_13-54-43","input_mean":[[27.552174],[-0.011369959],[0.0032041054],[-0.005240609],[-0.0099758925],[-0.009811709],[-0.010034873],[-0.008717237],[-0.008171778],[-0.009641522],[-0.009617026],[-0.005033958],[-0.005085749],[-0.00514212],[-0.0053138044],[-0.005393524],[-0.005487565],[-0.0055648554]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-2.9255316],[-1.3106222],[-0.28385758],[-0.005533128],[0.8718399],[0.13129508],[0.65529805]],"dense_1_W":[[-1.3177696,0.19991967,-2.7236588,0.47501546,-0.20533472,-1.0557586,0.17047773,0.009924321,0.06776284,0.115778096,-0.17705421,0.32459033,-0.0209746,0.12562141,-1.2017485,-0.427539,0.047930263,0.45157415],[0.14440672,-0.63587517,0.04897055,-0.22241928,0.012585529,-0.9856927,0.060655825,0.10771243,-0.11834612,-0.2647466,0.041776862,-0.005160143,0.4143384,-0.08409255,0.38516775,-0.06466858,0.4800853,0.116947636],[-0.048163578,-0.15507038,0.10709546,0.05433569,-0.78400093,-0.10471941,-0.687971,0.24902299,-0.28871644,-0.15858674,-0.15051886,-0.07557398,-0.21722956,0.19256075,0.9204932,-0.025876911,0.377379,0.11786139],[-0.0023113806,-1.1656983,-0.016276661,0.3712625,0.26083446,-0.8202079,0.7635671,0.12174111,-0.3810017,-0.4706684,0.476022,-0.1495595,-0.17617117,-0.0334313,0.34056324,-0.12129183,-0.18112142,0.0017632246],[0.36963087,-0.08762645,-1.6472614,0.58248544,0.099876635,-0.68770367,0.1060096,0.01555146,0.21880303,-0.07295039,-0.04888322,0.11901441,-0.3384761,0.6579154,-1.1264246,-0.25798565,-0.2051824,0.49036825],[-0.001395127,0.31909215,0.038826507,-0.16812363,-0.41808403,0.78146785,-0.12594081,-0.050199978,-0.0973126,-0.31068856,0.23852174,0.42455164,-0.08920052,0.24407244,-0.54622006,-0.2538641,0.038934287,0.26070222],[-0.1450647,-0.5672448,0.046273015,-0.3383503,-0.18226248,-0.75000846,0.22487456,-0.1403406,-0.19991998,0.040012,-0.07465593,-0.30669475,0.20688607,0.35658067,0.7150998,-0.056518137,0.2800083,0.09291142]],"activation":"σ"},{"dense_2_W":[[-0.26085964,0.3516763,-0.17330408,0.661693,0.17870913,-0.16493158,0.19355819],[-0.13368994,0.024639409,-0.57033145,0.5646507,0.3874018,-0.6424429,0.5143024],[0.36197537,-0.4894154,0.86991316,-1.0450212,-0.8808762,1.005693,-0.50344414],[0.037066706,-0.30221042,0.07532641,0.059567153,0.41288042,-0.6703966,0.5937009],[-0.3279511,-0.5896927,0.04172026,-0.25627023,0.311046,0.46807423,-0.7380045],[-0.17663476,-0.15280105,0.25481316,0.22980238,0.32853058,0.026288528,0.4474023],[-0.6216895,-0.43472454,0.16474614,0.24401735,-0.009333907,-0.55698293,-0.4658436],[0.64419144,-0.21330142,0.9627268,-1.1507334,-1.3168378,0.21035595,-0.22476402],[-0.22558647,-0.076528445,0.7357744,-0.89835054,-0.7661023,0.90134853,-0.07517657],[0.35094383,0.18648076,0.03390864,0.4248296,0.04366893,-0.26929817,-0.26258168],[-0.62187046,-0.59535176,0.72753495,-0.94289756,0.049893454,1.2905704,-0.16296726],[-0.39337137,-0.90796244,0.8290803,-0.22699821,0.17312697,0.98712176,-0.73924625],[-0.27244756,-0.37847507,0.122294754,-0.34000623,-0.034100182,0.08922609,-0.2426594]],"activation":"σ","dense_2_b":[[0.101125225],[0.10885535],[0.20420383],[0.009535166],[0.31587136],[0.07603302],[-0.357305],[-0.0620017],[0.11676147],[-0.21882989],[0.2917003],[0.07597336],[0.053113062]]},{"dense_3_W":[[0.6511969,0.195776,-0.49096948,0.4126447,-0.74414754,0.26202098,0.05113331,0.17945053,-0.2824012,0.28811157,-0.43237004,-0.7557984,-0.2802274],[-0.087479815,-0.5842241,-0.22641535,0.16699481,0.14202616,-0.02455116,0.32574484,0.81653625,0.4594011,0.2965805,0.22684464,-0.10494171,-0.37137553],[0.40364054,-0.2642197,-0.114815384,-0.49680176,0.411435,-0.15565751,-0.42915186,0.5777007,-0.27192292,0.27795404,-0.49125576,-0.23119576,0.09542205]],"activation":"identity","dense_3_b":[[0.16922124],[-0.16786872],[-0.1235053]]},{"dense_4_W":[[-1.0848238,0.43780962,0.121263236]],"dense_4_b":[[-0.16589022]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873QM909144 xf1x895072xf1x82x0571A01714A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873QM909144 xf1x895072xf1x82x0571A01714A1'.json new file mode 100755 index 0000000000..c60cfc778d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x873QM909144 xf1x895072xf1x82x0571A01714A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.499129],[0.6601068],[0.37126893],[0.035993777],[0.64755857],[0.650401],[0.6537066],[0.64798653],[0.6443389],[0.6342998],[0.62037724],[0.035718568],[0.035768334],[0.0358108],[0.03556472],[0.035507064],[0.035144154],[0.034718994]],"model_test_loss":0.008825271390378475,"input_size":18,"current_date_and_time":"2023-08-13_14-51-36","input_mean":[[28.12371],[0.0065643145],[-0.012259348],[-0.0308991],[0.0035661163],[0.0040573454],[0.0040573636],[-0.0018063665],[-0.0031446684],[-0.006249773],[-0.007770399],[-0.03104693],[-0.031047331],[-0.03104868],[-0.03136646],[-0.03136208],[-0.03151733],[-0.031626265]],"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.6165265],[0.067915596],[-0.45316094],[-0.16899234],[-0.14808252],[-0.8624182],[0.7455331]],"dense_1_W":[[1.7688528,0.032614052,-0.04258705,-0.40471157,0.0026211264,0.14383507,-0.76273596,0.055630405,0.21549416,-0.10156934,-0.018276177,0.42286775,0.06321405,-0.048351847,-0.3251357,-0.13999832,0.014422678,0.20865417],[0.018235689,0.8150084,-0.011439717,-0.017960383,-1.0395502,0.4898895,-0.04454969,0.46327382,0.7437933,0.06830239,-0.4826564,0.1393547,0.14606072,-0.28793386,0.07896613,-0.26915878,0.061934475,0.10996908],[-1.7670835,-0.14292058,-0.04067935,-0.13737008,-0.11408217,0.34066078,-0.65927386,0.3707693,-0.08453015,-0.277993,0.15899399,0.19312033,0.12644269,0.0016063079,-0.3582613,-0.41488636,0.22687747,0.14989714],[0.009283532,0.21346128,3.842557,-0.18832086,-0.32320932,0.6712642,-0.56471795,1.146071,0.9314705,-0.6850848,-1.6761949,0.767423,0.09417577,-0.23689681,-0.81722146,0.2585955,-0.04035137,0.21729858],[-0.0062285685,-0.5146245,-0.082685284,0.0031572075,-0.20794849,-0.6622915,0.6452885,0.32985207,0.40914443,-0.13983616,-0.12780568,-0.17184584,-0.1486529,-0.25821346,0.536185,0.2092422,0.23474011,-0.40814623],[-0.2992245,-0.43034312,0.014492514,0.6396918,0.20689917,-1.0586469,0.6380456,0.111478046,-0.013004605,0.027720524,-0.11885847,-0.17448127,-0.22942995,0.3940829,-0.28098577,-0.49394473,0.062754326,0.16152045],[0.3649246,-0.45967793,0.026177378,0.034597564,0.104035355,-0.4483116,0.45026922,-0.26696894,-0.030676577,-0.16899553,0.11374246,-0.42508754,0.41004568,0.118722625,0.1094624,-0.045650996,-0.21261446,0.10205266]],"activation":"σ"},{"dense_2_W":[[0.29746833,-0.9805263,-0.20373926,-0.5810894,0.822015,0.78565085,0.774397],[-0.28532717,0.23769815,0.060819168,-0.18559076,-0.5988815,-0.6324048,-0.13228494],[-0.05379423,-0.6090431,-0.6882858,-0.38678372,1.2622792,0.5061005,0.806397],[0.016906988,0.8676961,0.13297725,0.07773776,-0.9471627,-0.23707166,-0.12722206],[-0.9656899,-0.52974796,-0.8884889,-0.18769741,0.20580004,0.088316336,-0.3275884],[-0.83929497,-1.3246149,0.20151234,-0.20800409,0.644204,0.73422116,0.37904078],[0.17644885,-0.17937113,0.7630181,0.23492537,-0.9941054,-0.087052345,-0.80296385],[0.5275903,0.15053748,0.26323977,-0.45628256,-0.904721,-0.13627163,-0.72142714],[-0.36794254,-0.36518982,-0.72322273,0.15947448,-0.5001212,0.09817367,0.2520628],[0.65508115,0.14115669,0.63049525,0.093293644,-0.15200832,0.26687813,-0.0647521],[-1.2376599,-1.0406941,0.35769528,-0.58431584,0.07535975,1.1416343,0.19291566],[-0.22289965,0.40572295,0.72577405,0.16881567,-1.15984,-0.6175091,-0.18357803],[-0.5811096,-0.95013314,-0.33011654,-0.15803374,0.7887948,0.29292244,-0.002783515]],"activation":"σ","dense_2_b":[[-0.049079053],[-0.08643912],[0.10503918],[0.04620607],[-0.24959993],[-0.29486987],[-0.07451853],[-0.15858883],[-0.246627],[0.022139506],[-0.26383835],[-0.27304852],[-0.11335464]]},{"dense_3_W":[[0.27437788,-0.13480587,0.4028967,0.26457673,-0.049248666,0.3107791,0.40147588,0.68062055,-0.32741368,-0.33465502,-0.38290545,0.34771603,-0.4449348],[-0.5136515,0.16504014,-0.69426614,0.69784516,-0.10840683,-0.53815,0.55030924,0.049842075,-0.043087877,0.37305754,-0.47518057,0.18190123,-0.0713615],[-0.09406427,-0.12237694,-0.71659255,0.42452714,-0.2178768,-0.44793212,0.5866718,0.52974296,0.42568213,-0.0633519,-0.74072903,0.77244145,-0.24008119]],"activation":"identity","dense_3_b":[[0.0077823168],[0.07439971],[0.038980033]]},{"dense_4_W":[[0.13538235,0.9460461,0.2892883]],"dense_4_b":[[0.06883352]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875Q0909144AAxf1x891081xf1x82x0521A00608A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875Q0909144AAxf1x891081xf1x82x0521A00608A1'.json new file mode 100755 index 0000000000..e04086d5e3 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875Q0909144AAxf1x891081xf1x82x0521A00608A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.057558],[0.9240797],[0.39042372],[0.04054577],[0.91198736],[0.91717815],[0.92098093],[0.91237575],[0.899855],[0.8780954],[0.86047786],[0.04041413],[0.04044436],[0.040472586],[0.040513117],[0.04048389],[0.04041956],[0.040282376]],"model_test_loss":0.009325800463557243,"input_size":18,"current_date_and_time":"2023-08-13_15-19-49","input_mean":[[22.28529],[-0.031808108],[0.0006169089],[0.0020743944],[-0.028572567],[-0.028636014],[-0.028830813],[-0.028213872],[-0.02719701],[-0.023936827],[-0.021230578],[0.0021741558],[0.0021642826],[0.0021512513],[0.002037396],[0.001988419],[0.0019436596],[0.0019510677]],"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.030092482],[-0.08966159],[0.7434682],[0.052508995],[-0.037241258],[-0.6811802],[0.08887462]],"dense_1_W":[[-0.016281815,-0.21513529,-0.5826629,-0.040725954,0.1220137,-0.74154484,0.22448872,-0.69602275,-0.044675313,-0.050951652,0.55438906,-0.14687209,0.10323754,0.10435016,0.28258827,-0.46545756,0.20151669,-0.041637793],[-0.038013637,0.4798638,0.035863526,-0.047271762,-0.3552868,0.736299,-0.44315857,0.093434595,0.026829336,0.022546915,-0.014716782,-0.2137455,0.72353894,0.13167273,-0.5572506,-0.17848228,-0.19980797,0.34290475],[-1.3190829,-0.16427143,0.03076943,0.18381341,-0.35874882,-0.6953364,0.63559276,0.56573445,0.12491954,0.34269994,-0.46494725,-0.57930934,-0.0077773347,0.29941487,0.49355614,0.52276766,0.039447572,-0.36896285],[0.0075827236,-1.8779591,0.07066059,0.09625603,0.42762265,-0.8998018,0.28209868,-0.30655807,-0.17634554,0.38442346,-0.3097632,0.15156893,-0.13291042,0.1254108,-0.11183744,0.33543125,-0.41085628,0.09713285],[0.02231647,0.4558223,0.04829613,-0.5974221,0.12706976,0.5712898,-1.1618217,0.004924739,0.25602806,0.34039888,-0.26809433,-0.13969776,0.005608404,-0.04935092,0.6085609,0.56621975,0.054403227,-0.41240177],[1.3177918,0.34837294,0.03489512,-0.1798878,0.07544648,-0.7564881,-0.25446817,0.41348827,0.38496748,0.18170023,-0.4120484,-0.012971901,-0.14837568,-0.11443646,0.6549086,0.7655774,0.095144756,-0.46527424],[0.003085306,-1.8520818,-5.775147,0.9801003,1.6440481,-0.41763654,0.0023244382,-0.368523,-0.5199194,0.19324827,1.0014604,-0.7281056,-0.59879243,0.4747877,0.2891212,0.09482188,0.009162863,-0.40084323]],"activation":"σ"},{"dense_2_W":[[0.7327416,-1.021178,0.6615702,-0.20163396,-0.3478265,0.22332166,-0.27881405],[-0.35193413,0.366607,-0.31837893,0.05043401,-0.12893029,-0.15935789,0.3549393],[0.21511331,-0.18085788,-0.40121323,0.32115334,-0.13333887,-0.5539215,-0.2487469],[0.0033335267,1.0552391,-0.62137043,-0.40063322,0.99995136,0.5781669,-0.58789635],[0.61077094,-0.3306075,-0.31027898,0.7346135,-0.8391994,0.847853,0.48013672],[-0.14262784,-0.741944,0.6622348,0.48902386,-1.3086324,0.098962665,0.45717558],[0.2415809,-0.84083027,0.5231141,0.65175545,-0.554833,-0.008785207,-0.17766568],[0.055044893,0.52781713,-0.5939338,-0.7540269,0.15011188,-0.420139,0.2981709],[-0.14237478,-0.29901835,-0.7485882,-0.21372531,-0.34447756,0.40902004,-1.1021607],[-0.54304063,0.012865376,0.31854355,0.17462453,0.26030272,-0.7394602,-0.7608907],[-0.44612113,0.36114553,-0.25402042,-0.0076143444,0.8201758,0.47841248,-0.45955038],[-0.004852833,0.57263273,-0.019337526,-0.75631505,0.4485348,-0.3326961,-0.3167996],[-0.15952389,0.4143726,-0.01947486,0.2718969,0.47909242,0.089936785,-0.45480072]],"activation":"σ","dense_2_b":[[-0.15473405],[-0.03545587],[0.011608688],[0.24255751],[0.028790355],[-0.44917503],[-0.07094555],[-0.062117405],[-0.16924906],[-0.10952014],[0.1554779],[-0.20075743],[-0.113302805]]},{"dense_3_W":[[0.3808469,-0.551099,-0.22391781,0.15603887,0.23546505,0.029905649,0.44500378,-0.19618921,0.22027779,-0.40315858,-0.14389955,-0.33602792,-0.12122436],[-0.59489226,0.2445008,0.11975124,0.48564222,-0.39224073,-0.272205,-0.54375273,0.009905357,-0.23434179,0.52072835,0.34248853,0.16348307,0.20279588],[-0.014571961,0.5323131,-0.5192708,-0.37823296,0.66229814,0.112855725,0.64537394,-0.30970648,0.31949428,0.11771956,-0.23411283,0.30479413,0.3693334]],"activation":"identity","dense_3_b":[[-0.037845407],[0.04069344],[-0.059178203]]},{"dense_4_W":[[-0.99151933,1.1575272,-0.65392774]],"dense_4_b":[[0.04349]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521A07B05A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521A07B05A1'.json new file mode 100755 index 0000000000..ce3c207e0e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521A07B05A1'.json @@ -0,0 +1 @@ +{"input_std":[[6.563397],[0.8385782],[0.38159406],[0.0343706],[0.82969534],[0.8327079],[0.8353158],[0.8362094],[0.8282918],[0.8180939],[0.80514234],[0.0341284],[0.03419915],[0.034257572],[0.034370307],[0.034313396],[0.034115147],[0.03375072]],"model_test_loss":0.011564328335225582,"input_size":18,"current_date_and_time":"2023-08-13_15-45-22","input_mean":[[21.38968],[-0.041864436],[0.016576989],[-0.021341346],[-0.045225102],[-0.044813316],[-0.04361269],[-0.034834445],[-0.031572755],[-0.024205465],[-0.018740682],[-0.021514442],[-0.021450149],[-0.021384653],[-0.021149829],[-0.021141373],[-0.020979993],[-0.020896269]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.5755177],[0.03428629],[-0.71415836],[0.22175552],[-0.09201754],[-2.8689044],[-0.1045704]],"dense_1_W":[[0.9483997,0.9610236,0.20808627,-0.30212918,0.053525597,0.5834779,-0.93940276,0.65561306,0.36549884,0.3216295,-0.21082531,0.44739217,-0.29857454,-0.11884895,-0.15256537,0.60311323,0.081600666,-0.23139988],[-0.005265079,1.3001031,3.8029873,-0.32444727,-2.6160483,0.2214184,0.058062643,1.1854216,1.1538562,0.15885483,-1.0735705,0.3265351,0.5016962,-0.4941123,0.016058635,-0.25360242,0.15720944,0.08846265],[0.0012037685,-0.65408915,-1.5829769,0.33530995,0.7700829,0.047827095,0.5908282,-0.17494035,-0.26473024,0.51929754,1.1789833,0.0807209,-0.24442843,0.60358465,0.003373896,0.6164561,0.045661986,-0.14974658],[-0.0006085811,-0.6465432,0.0034944871,-0.15468381,0.67403156,-0.93398803,-0.13589555,-0.35583574,-0.57860667,-0.21501748,0.385936,-0.3407401,0.20494653,0.20552959,0.12731454,0.0399628,-0.2351022,0.091997944],[-0.0065293787,0.7746981,0.51969033,-0.5453975,-0.051220566,0.95546484,-0.24264541,-0.19263709,0.3042942,-0.4307904,-0.4401109,0.31372312,0.5982625,-0.32563445,-0.3293053,-0.076774836,0.30764472,0.03080843],[-0.9222714,0.65885305,0.20200571,0.0613283,-0.12522168,0.3155805,-0.17339218,0.62215847,0.3577474,0.3287558,-0.23576994,0.2977285,0.15171073,-0.54179823,-0.20839736,0.14107114,0.29692984,-0.17770605],[0.0037967945,0.9581507,-0.0014370086,-0.49775982,-0.13051113,1.0137179,-1.1507403,0.24028304,-0.79054755,0.17817192,0.17676984,0.99630857,-0.077027574,-0.20737489,-0.5133581,0.0631313,-0.34999797,0.48768488]],"activation":"σ"},{"dense_2_W":[[-0.48959735,-0.59383065,0.068969965,0.4048074,-0.09356656,-0.22178447,-0.008503189],[-0.47465578,0.046973683,-0.30203333,0.7319351,0.37943313,-0.7515599,-0.7609684],[-0.7812694,-0.1668936,0.34998512,0.6032413,0.2552332,-0.07198844,-0.9453271],[-0.1400433,0.56433755,-0.28285316,-0.5249183,-0.061916184,0.5938611,0.43950254],[-0.19838578,-0.120480634,-0.2613999,0.040656477,-0.57329947,0.035204634,-0.23756325],[-0.31026715,-0.91703445,0.5292604,-0.6104651,-0.35656053,0.19026318,-0.33533737],[0.362478,-0.6857054,-0.061543047,0.14211811,0.38036314,-0.5977386,-0.6514936],[0.28820255,0.014584735,-0.5350505,-0.664403,0.6750804,0.35808724,0.39167216],[-0.82168514,-1.1079371,-0.18080051,-0.79870147,0.12686022,0.18076727,0.08958418],[0.2513723,0.17902936,-0.30011544,-0.714674,0.51919776,-0.23153323,0.7435418],[0.30748522,0.12669975,0.081522584,-0.5034588,0.030012246,-0.017879713,0.6410725],[0.26371044,0.34655178,-0.59103256,-0.43619967,-0.687298,-0.7533559,-0.3246515],[-0.38202673,-0.58601105,-0.24320982,0.69089496,-0.5146493,0.17502482,0.060758125]],"activation":"σ","dense_2_b":[[-0.03921857],[0.20950015],[0.05701196],[-0.24196394],[-0.043847077],[-0.09972506],[0.084566765],[-0.11199834],[-0.23634689],[-0.19677764],[-0.08626865],[-0.08511737],[0.08237302]]},{"dense_3_W":[[0.2521058,0.05273895,0.14777374,0.2316707,-0.03372719,0.37708887,-0.22231328,-0.14752237,0.024881583,0.14600374,-0.36284056,-0.053377006,0.15762502],[0.17785782,0.65084356,0.653211,-0.65019035,0.20140639,0.38871175,0.24968603,-0.6089574,0.30058384,-0.08686883,-0.49139014,0.17155631,0.48726168],[-0.11656486,0.2625412,-0.3139385,0.10613407,0.4817832,0.19348018,0.08415106,-0.6385824,-0.2113412,-0.5868329,0.1681216,0.33424532,0.14378552]],"activation":"identity","dense_3_b":[[0.046604935],[-0.0675065],[-0.049730938]]},{"dense_4_W":[[0.40339613,-1.2102003,-0.3411253]],"dense_4_b":[[0.061254077]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521A00442A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521A00442A1'.json new file mode 100755 index 0000000000..b3b8b8db24 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521A00442A1'.json @@ -0,0 +1 @@ +{"input_std":[[7.8480306],[0.96037143],[0.56644064],[0.031923212],[0.9592892],[0.9607283],[0.9606423],[0.9418574],[0.9194964],[0.8982176],[0.87986463],[0.03180112],[0.0318301],[0.031843536],[0.031923328],[0.0321031],[0.032251816],[0.032379184]],"model_test_loss":0.007998951710760593,"input_size":18,"current_date_and_time":"2023-08-13_18-46-40","input_mean":[[17.83718],[-0.021548323],[0.008896963],[-0.020022377],[-0.027599646],[-0.026774092],[-0.025805676],[-0.021180406],[-0.0172894],[-0.014156764],[-0.015430601],[-0.020131098],[-0.020135172],[-0.020142682],[-0.02023454],[-0.020377133],[-0.020592311],[-0.020893447]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-3.234378],[-1.0114365],[3.3278525],[-0.043438543],[0.09898487],[-1.1228223],[-0.09896681]],"dense_1_W":[[-1.4481235,1.14371,-0.18619996,-0.014011254,0.5418801,-0.8123825,0.04581224,-0.31140676,-0.219098,0.009256715,-0.20572591,-0.24179928,0.121151835,0.17432994,0.046270356,-0.42792895,0.08374407,0.2014057],[-0.35328487,0.87328243,0.23025416,0.041772332,-0.19766848,0.65253824,0.007881493,0.10688904,0.25050953,-0.28640047,0.124380134,0.41151407,-0.20547412,-0.38162622,0.022347001,0.017873542,0.005152273,0.04886075],[1.4722439,0.974171,-0.19161922,0.20244934,0.61558235,-0.8968513,0.16112171,-0.25674978,-0.22722203,0.058710273,-0.23509592,0.16444913,-0.2827588,-0.03489349,-0.18735917,0.00018917536,-0.18949887,0.27490872],[0.012972494,1.2556565,5.9566135,-0.15130961,-0.4523947,-0.37081477,-0.91552794,1.1574521,0.47152543,-0.47953206,-0.55489933,0.099222064,0.38702163,-0.29589957,0.041597135,-0.03547445,0.022571348,0.027354982],[-0.003863914,0.22050343,0.0120630115,-0.25257105,-0.10205844,0.9146121,-0.7968388,-0.29547405,-0.17439528,0.46752262,-0.08055068,0.17053045,0.18076906,-0.1516316,0.055936866,-0.17291713,-0.10852507,0.16824071],[-0.4190413,-0.857921,-0.25096828,-0.28255612,0.19289751,-0.8734456,0.28353396,-0.37122184,-0.11925379,0.19329911,-0.06972643,0.25552443,-0.35699388,0.26851597,0.43666807,-0.24304788,-0.09045897,0.055230238],[0.0012014257,-0.54465014,-0.4546114,0.0631211,-0.18529981,-0.94013214,0.40706542,-0.23528938,0.075760044,0.8153893,0.17362785,-0.39601672,0.18890578,0.48059973,0.10882803,-0.22344732,0.16269675,-0.24009374]],"activation":"σ"},{"dense_2_W":[[-0.8621162,0.6375523,-0.121657215,-0.34696895,0.51134723,-0.642076,-0.43340936],[-0.39562237,-0.241824,-0.12310841,-1.2114509,-0.89629316,-0.012759714,-0.58896196],[-0.69110984,-0.09870509,-0.3375854,-0.09505871,0.97829163,-0.6490481,0.1399663],[-0.010694462,0.022776525,0.82732725,-0.15266539,-0.25287274,0.39495268,-0.39242798],[-0.120031275,-0.71853244,0.37485296,0.45275152,-0.9226145,0.1723915,0.045272652],[-0.5235272,-0.4945377,-0.18775977,-0.8348921,-0.25558534,-0.26095316,0.2460929],[-0.2680453,0.7991849,-1.2544307,0.6096642,0.8758116,-0.66279304,-0.44246507],[0.24853848,-0.009198416,-0.3490367,-0.27431184,-1.1257328,0.35145393,-0.30193186],[1.1962029,-1.1290612,0.23949686,-0.20245065,-1.1434972,0.53818357,0.60230476],[0.6036199,-0.45529002,0.9213078,0.03841346,-0.73413646,0.1718995,-0.2821352],[0.864308,-0.6686404,0.9973249,-0.19549038,-0.8948997,-0.10574349,0.5035874],[1.9524418,-0.022500906,-0.4884547,-1.4554193,-1.1326776,1.0094995,0.33511108],[0.35033834,-0.5318131,-0.72255147,0.07995676,-0.35800278,-0.5116459,0.3332227]],"activation":"σ","dense_2_b":[[0.108086385],[-0.31281564],[0.13146636],[-0.17104536],[-0.24870978],[-0.31226832],[0.08884647],[-0.3376938],[-0.33002087],[-0.14730828],[-0.17783853],[-0.38552558],[-0.093307]]},{"dense_3_W":[[0.18446985,0.21522333,-0.28989294,0.35959074,-0.16474617,-0.16107476,-0.9634279,0.63884085,0.33368322,-0.14383645,0.6392969,0.88589066,-0.57898635],[0.26163533,0.40219304,-0.5289297,0.11495239,0.29818106,0.17250255,-0.12519145,0.31459266,-0.38456517,-0.12500696,0.17287982,0.0887632,0.10183194],[-0.71430176,-0.40297222,-0.52635926,-0.07720518,0.369048,-0.03566161,-0.9068424,-0.46042228,0.2392488,0.73106444,0.27735183,-0.16808154,0.38387048]],"activation":"identity","dense_3_b":[[0.009075719],[-0.0069753183],[0.029595045]]},{"dense_4_W":[[-0.8512863,-0.071502104,-1.0336823]],"dense_4_b":[[-0.021940688]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875QN909144B xf1x895082xf1x82x0571A01A18A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875QN909144B xf1x895082xf1x82x0571A01A18A1'.json new file mode 100755 index 0000000000..e5182951ae --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN b'xf1x875QN909144B xf1x895082xf1x82x0571A01A18A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.188053],[1.1657922],[0.53592527],[0.040702485],[1.1630709],[1.1658245],[1.165898],[1.1360451],[1.1134317],[1.0845132],[1.0600443],[0.04062425],[0.0406608],[0.040687334],[0.04069575],[0.040612057],[0.040392578],[0.040035486]],"model_test_loss":0.014063029550015926,"input_size":18,"current_date_and_time":"2023-08-13_20-26-43","input_mean":[[21.149807],[-0.10974744],[-0.0031464333],[9.495444e-5],[-0.108882815],[-0.11035729],[-0.11167806],[-0.11192071],[-0.10970605],[-0.1038049],[-0.09687886],[-8.529318e-5],[-5.421513e-5],[-1.24803355e-5],[0.00014361751],[0.00017423068],[0.0003317356],[0.0004546588]],"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.27552018],[0.90119773],[-1.3030006],[-2.1216948],[0.18355446],[-2.4107463],[0.16562456]],"dense_1_W":[[0.12652385,2.4475446,-0.022650752,-0.69291824,-1.0016218,0.91486317,0.6336902,0.14477217,0.2598121,-0.20517316,0.36350495,0.39227563,0.0074457154,0.07074344,-0.19992946,0.0991527,0.04138881,0.06528243],[1.3323559,-0.7597325,-0.043890204,0.09516193,0.5088217,-0.21222521,0.38730863,-0.10672117,0.12993167,-0.12611133,0.17683442,-0.29292497,0.28472096,0.31997505,-0.07029694,-0.24922556,-0.0124233235,0.112814486],[-0.36201748,1.4186722,0.0062952894,-0.037926484,-0.5666642,0.72316504,-0.46085364,0.035363074,0.118354574,-0.11634284,0.10892351,0.28690028,-0.25633323,0.11827332,-0.110319726,-0.052415002,-0.08695773,0.13403927],[-0.57906187,-2.1076198,0.00707048,0.124392234,0.9577161,-0.652618,0.11178688,0.08233431,-0.10934392,0.15851316,-0.16079995,-0.200316,0.02980312,0.16383933,-0.19201891,0.07208879,0.0134847,-0.026035026],[1.6250517,-0.2035624,0.050559063,-0.27959144,0.02131727,1.4500656,-1.1230069,-0.13204305,-0.20134674,0.109666,0.105381586,0.33672488,-0.054919533,0.1381979,-0.37668028,-0.44266343,0.40978658,0.055366118],[-0.48616406,-0.09577948,0.030225683,-0.054680806,-0.4930565,-0.22118689,1.1458802,0.32909223,-0.3652297,-0.28851825,0.21014541,0.24283552,-0.11504994,0.41478232,-0.77871186,-0.2583162,0.44575816,0.024779651],[-0.06703918,0.022096574,-3.0616148,0.19644247,-0.7936287,-1.3313962,1.0172884,-0.14775673,-0.6005079,0.41182107,0.7640057,-0.037669305,-0.43755364,0.21248876,0.25767666,0.08838868,-0.38727447,0.116036914]],"activation":"σ"},{"dense_2_W":[[-0.5774166,0.3788837,-1.1512787,0.6045041,-0.30563933,0.1520524,0.4747448],[0.026152905,-0.40509266,0.71000934,-0.4843991,-0.20758377,0.18950084,0.37816125],[-0.13815251,-0.8893696,0.23316386,-0.113908656,-0.4585042,-0.46166483,-0.22798917],[-0.542509,1.2547107,-1.8032401,0.2135292,0.4327131,0.6078487,1.2712867],[-0.041001927,0.16597806,0.39927384,-0.54332757,0.23889625,-0.45043373,0.19426684],[0.16223486,-0.64652383,0.4093884,-0.6869164,0.015826961,0.18224072,0.40522045],[0.5264121,-0.81645095,1.0303737,-0.7750668,0.53066015,-0.18214639,-0.09689465],[0.47082463,-0.62583274,0.64610606,-0.17833126,0.48148805,0.086845286,0.11682811],[-0.7040258,1.2640396,-2.4362037,1.873551,-1.8753885,1.3339359,1.0496316],[0.14156407,0.5989012,-0.23044766,-0.097144015,0.12927,-0.010738458,0.6056361],[0.26921788,-0.1284144,0.007066244,-0.04917847,0.5776498,-0.47206506,-0.36211184],[-0.2055914,-0.48159376,-0.024098463,0.103931576,0.50089693,-0.06848274,-0.09180179],[-1.3385345,-1.9117901,-0.0011972345,-0.7033701,-4.2961745,2.4796546,2.848627]],"activation":"σ","dense_2_b":[[0.19726445],[-0.06158395],[-0.14339806],[0.12678884],[-0.14894912],[-0.04651775],[-0.14024791],[-0.15321352],[0.08253985],[0.18063237],[-0.049321633],[-0.08920167],[-1.457004]]},{"dense_3_W":[[0.7081014,-0.30889422,-0.49976626,0.32896045,-0.40754297,-0.45574123,-0.6064694,-0.4691866,0.5265183,0.6408709,-0.32701582,-0.34626913,0.5192711],[-0.32945433,-0.2021828,-0.43582925,0.21351081,0.51058686,-0.33781144,0.7423047,0.3941001,-0.71700716,-0.26396632,-0.5284645,0.20918335,-0.71266997],[-0.623438,0.35574603,-0.042172,-0.2322551,-0.21975967,0.4599549,-0.24270838,0.4056575,0.46420303,-0.31508285,0.5513475,-0.24558863,-0.28036433]],"activation":"identity","dense_3_b":[[0.10075232],[0.1357436],[-0.02601655]]},{"dense_4_W":[[-1.0338233,0.175015,-0.0050515365]],"dense_4_b":[[-0.102083005]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN.json new file mode 100755 index 0000000000..e3d324afa7 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN GOLF 7TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[9.664428],[1.2828087],[0.5358907],[0.04414606],[1.2693248],[1.2751942],[1.279506],[1.249834],[1.2184678],[1.1758597],[1.1319114],[0.04403217],[0.0440777],[0.044111222],[0.044084232],[0.043969695],[0.043677997],[0.043272585]],"model_test_loss":0.016808032989501953,"input_size":18,"current_date_and_time":"2023-08-13_11-43-31","input_mean":[[22.16122],[-0.05841703],[-0.0061066514],[-0.0040392894],[-0.056604024],[-0.05809211],[-0.059522722],[-0.060071282],[-0.059294432],[-0.05636808],[-0.054283537],[-0.004062983],[-0.0040673376],[-0.00406957],[-0.0040102745],[-0.0040264064],[-0.003949198],[-0.003894113]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[4.512272],[0.8451728],[0.061952885],[0.07117082],[0.0969589],[0.23836812],[-0.029027848]],"dense_1_W":[[2.3165002,-0.7564795,1.4717923,-0.31413803,1.6675323,0.7277529,-1.1163065,-0.019299118,-0.1405304,0.8572948,0.56036603,-0.41108173,-0.12570381,-0.014715486,1.132798,1.0821382,-0.75086635,-0.35031655],[0.9444606,-0.09898757,-0.6954507,0.30675238,-0.08984852,-0.49343133,0.9157946,-0.5570431,-0.3888742,-0.38986117,0.12952603,0.028433489,-0.024435973,-0.1049456,-0.38290912,-0.05392889,-0.015835924,0.14950559],[0.004741928,-1.5810053,0.03134019,0.3235661,1.2505218,-0.083220154,-0.3910901,-0.8460092,-0.74598694,-0.37966868,0.34051073,-0.39719552,-0.07352532,-0.06360439,0.34146932,0.10839794,0.43644786,-0.45806086],[0.00825958,0.47619736,-0.0059394315,-0.06315062,0.3332019,0.8162596,-0.6886139,-0.8321713,-0.23199448,0.13788818,0.27222332,-0.018768186,0.12005634,-0.03360056,-0.010549495,-0.05684962,-0.19241822,0.1521788],[-0.047451854,-0.3197287,-5.9774647,0.67842066,-1.8699528,-1.0736765,-0.22953252,-0.1705645,0.69078326,0.7744919,1.5346897,-0.06659277,-0.33114743,0.1330023,-0.0021685867,-0.14816211,-0.12463087,-0.098877035],[1.5630089,-0.14997533,-1.073808,-0.1734846,-0.3877676,0.683071,-0.9419817,0.057117645,-0.025376081,-0.29716906,-0.39132732,-0.0028707278,0.16397685,-0.19498843,-0.21398357,-0.013821919,0.44912493,-0.16607592],[0.009814496,-2.0713215,-0.044856403,-0.038243193,1.7569181,-0.7712438,-0.08035733,-0.38236764,-0.58137965,0.6674234,0.14389913,-0.6378334,0.14240614,0.24506636,0.6603566,0.014824286,-0.12690313,-0.14285208]],"activation":"σ"},{"dense_2_W":[[-0.42124227,0.33840093,0.44210997,-0.70910984,0.262287,0.18302582,-0.18371895],[-0.29685995,0.5138454,0.755978,0.22568974,-0.43676186,-0.49223867,0.47472122],[-0.2976625,-0.5638202,-0.346919,0.40578872,-0.039912287,0.77207106,-0.8657158],[-0.16169663,0.5898756,0.15860432,-0.48896188,0.14635944,-0.5558217,0.42120898],[0.27724966,-0.5185015,0.32158753,0.6277213,0.057304412,0.3086919,0.21024327],[0.03701429,-0.23197533,-0.30162218,0.72801787,-0.17062007,0.009803557,-0.5481523],[0.4629019,0.4786117,-0.14833471,-0.23350595,-0.29458895,-0.19023602,0.39070475],[0.9625968,-0.97766685,-0.9581983,1.2819734,-0.6076433,0.37645784,-0.79039747],[-0.13950962,-0.20756534,-0.31952453,0.6251145,-0.0893907,0.340857,-0.70461744],[-0.064140044,0.67090803,0.27711052,-0.44350907,0.5274457,0.26619676,-0.29007584],[-0.6253565,-0.072836235,-0.04700242,-0.5451034,-0.37668335,-0.15641896,-0.3610751],[-0.41676444,-0.32975447,0.09918825,0.1933214,0.114000455,0.21399117,0.6502726],[-0.20933664,0.18370156,0.6303221,-0.34840557,0.10767048,-0.12880816,0.43370107]],"activation":"σ","dense_2_b":[[-0.03087346],[0.083590284],[-0.12312114],[-0.015689747],[-0.03287778],[0.07682254],[-0.065336995],[0.29234254],[-0.08852307],[-0.013764559],[-0.2412543],[-0.016014475],[-0.056882493]]},{"dense_3_W":[[-0.17269112,-0.5855207,0.30247316,-0.3700723,0.5919556,0.34082454,-0.5857902,0.71309996,0.2776839,-0.639282,0.30003944,-0.20085171,-0.20065042],[-0.45765534,0.2437524,0.1612162,-0.505311,-0.10535189,0.53285104,-0.035850286,0.6772977,0.32458842,-0.028878551,-0.14009416,-0.08665312,-0.637454],[-0.19389966,0.029339047,-0.64755374,-0.22215632,-0.07883323,-0.5064457,0.13198881,0.22710016,-0.51746994,-0.3380553,0.19166663,0.023132537,0.14991826]],"activation":"identity","dense_3_b":[[-0.007823971],[-0.0085836565],[0.026530033]]},{"dense_4_W":[[0.93978757,0.73359257,-0.55248207]],"dense_4_b":[[-0.011260626]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521A10A01A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521A10A01A1'.json new file mode 100755 index 0000000000..23d7c217e4 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521A10A01A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.369346],[1.0345815],[0.48595738],[0.038879942],[1.0224149],[1.0270526],[1.0309867],[1.0154411],[0.9946685],[0.9673825],[0.9462645],[0.038886003],[0.03886903],[0.038842827],[0.038692325],[0.038516246],[0.03829045],[0.038023546]],"model_test_loss":0.011551334522664547,"input_size":18,"current_date_and_time":"2023-08-13_21-17-35","input_mean":[[24.614252],[-0.027011419],[0.0014726992],[0.008945528],[-0.02214811],[-0.023875551],[-0.025268542],[-0.021144817],[-0.020492183],[-0.01736523],[-0.01178769],[0.009003565],[0.009013808],[0.009026339],[0.009184481],[0.009248184],[0.009236562],[0.00922171]],"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.3147287],[-1.6872499],[-0.42541492],[-2.6292078],[0.028035024],[0.03459358],[0.07949542]],"dense_1_W":[[0.047803342,-1.4541457,-7.672288,1.0376374,0.90106887,-0.5459878,0.30515322,-0.08935539,-1.0962652,0.29930526,0.7711765,-0.47839776,-0.067261726,-0.31026986,0.096002005,-0.19196555,0.049338873,0.037196536],[-0.9811775,-0.78911555,-2.1510236,0.50958246,-0.4388312,-0.96856743,0.28030896,0.1779042,0.0768994,-0.13534106,0.16211012,-0.5117382,-0.4880125,0.4930607,0.42255047,-0.427145,-0.016792877,0.04354907],[0.24651746,1.9175419,-0.001038614,0.4657561,-0.7955447,0.28141394,-0.21989036,0.7032182,0.021002548,0.054642107,-0.25775212,-0.18840952,-0.19194557,-0.11614515,-0.2208172,-0.18785909,-0.100455984,0.11671375],[-1.110365,1.4617373,2.5632505,-0.6936042,0.18904822,1.2634845,-0.7143399,0.43131736,-0.6782005,-0.11955076,0.014935311,-0.053061865,0.60653067,0.2520773,-0.5539984,0.37587786,0.38024148,-0.29947954],[-0.049056992,3.2711048,-0.0012738818,-0.9280159,0.06959995,1.3438661,2.1296465,1.5839107,1.2994887,0.2974056,-0.4331058,0.5643816,0.17077604,0.46159738,0.13453983,0.32876533,0.29972157,-0.19157079],[-0.002617311,-0.26627848,0.00035574558,0.15850249,-0.51069593,-0.9413688,1.3242084,0.36154234,-0.037687466,-0.12007863,-0.103309914,-0.08942667,-0.49348807,0.24432492,0.19013445,0.090723045,0.09632228,-0.19452243],[-0.3788624,1.6411204,0.0010042163,-0.7426254,-0.9095712,0.5644892,0.10306167,0.37586528,0.35857487,-0.26580176,-0.07742835,0.38095754,0.35132152,-0.26794037,-0.5125942,0.26599923,-0.07368752,0.14955874]],"activation":"σ"},{"dense_2_W":[[-1.1191249,-0.44653374,0.3957576,0.20264097,0.8131554,-0.8871739,0.76233166],[0.24396768,-0.11242304,0.11703958,0.23683518,0.26508585,-0.8381617,-0.010156824],[0.95748633,-0.8170791,0.91270953,-2.2128932,-1.7108568,-0.3102869,-0.51243025],[-1.0560807,-0.18680175,1.0978043,-0.1330585,0.50391763,-0.61881065,0.40257195],[0.13224883,0.33161446,-1.2939858,-0.86368215,0.25465244,0.41896132,-0.4954958],[-0.9718114,-1.1362193,0.12704434,-0.7889261,0.67179495,-0.025664078,-1.2435114],[-1.0912126,-1.4135875,0.87950945,-0.07909115,0.74423045,0.08346314,-1.4557395],[-0.47076926,-0.09556143,-0.26575336,0.30210772,-0.032517277,-0.6874358,-0.28881064],[0.91966176,0.10665701,-0.91860026,-0.33751714,-0.06834981,0.93626994,-0.6571628],[0.5642148,0.49901268,-1.3865877,-0.5038256,-0.77347946,0.10353698,0.12781042],[-0.13634703,-0.63548046,-0.12139281,-0.35569352,-0.15445279,-0.60711306,0.38474676],[0.45710889,0.071052924,-0.6941922,-0.40552536,-0.2624531,0.30862984,-0.21026665],[-0.17136033,0.13013878,-0.56358737,0.017554766,-0.8674639,0.5193747,0.404817]],"activation":"σ","dense_2_b":[[-0.24010156],[-0.03701659],[-0.11688351],[0.0057563568],[-0.2258239],[-0.12888032],[-0.04495887],[-0.19279772],[-0.024947112],[-0.24512185],[-0.06996539],[0.002301173],[-0.18535274]]},{"dense_3_W":[[-0.3262236,0.2867189,-0.46465525,-0.12294561,-0.09975732,0.6389669,-0.06613567,-0.6155315,0.5748487,0.5216139,-0.4668207,0.35530105,0.2609643],[-0.63311577,-0.7085013,-0.31479278,-0.63713,0.32777005,0.2345535,0.7747577,0.2789224,0.3357283,0.53898865,-0.15058397,0.20608704,0.49955884],[-0.72667474,-0.25321692,-0.17046283,-0.11438071,0.5548703,-0.008387027,0.6999693,0.052387122,-0.2282906,-0.32617927,0.025806168,0.50178117,0.5016455]],"activation":"identity","dense_3_b":[[-0.09833234],[-0.08791367],[0.020298293]]},{"dense_4_W":[[-0.5844458,-0.98398805,-0.08582402]],"dense_4_b":[[0.08352287]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521B00404A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521B00404A1'.json new file mode 100755 index 0000000000..d52b43b372 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144B xf1x891081xf1x82x0521B00404A1'.json @@ -0,0 +1 @@ +{"input_std":[[6.938926],[0.62772423],[0.29867607],[0.03094836],[0.6110426],[0.6159467],[0.62132204],[0.6395374],[0.64702064],[0.65667325],[0.65815526],[0.030817023],[0.030845646],[0.030863807],[0.030900748],[0.030872138],[0.030954026],[0.031025298]],"model_test_loss":0.02285374514758587,"input_size":18,"current_date_and_time":"2023-08-13_21-42-28","input_mean":[[23.255941],[-0.0039265477],[-0.0056222063],[-0.016524963],[-0.00218176],[-0.0024286949],[-0.0033278896],[-0.0040004114],[-0.0063022724],[-0.00994652],[-0.014132979],[-0.016437652],[-0.016452443],[-0.016481234],[-0.016730793],[-0.016982961],[-0.017188018],[-0.017422361]],"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.29317],[1.5267397],[0.08217149],[1.2452852],[-0.9688157],[-0.096829034],[0.39433828]],"dense_1_W":[[0.005915041,0.5450623,-0.0069149085,-0.46442664,-0.22601163,1.3387343,-0.7786973,-0.4650629,-0.40435264,-0.14188097,0.67670316,0.45593762,-0.2410964,-0.04123494,0.1702602,-0.18933693,-0.3188177,0.04489354],[0.47714752,0.6054337,0.13158876,-0.30294856,0.061013125,0.5564793,-1.1751397,0.35795754,0.6406297,0.2721367,-0.5613271,0.36031482,-0.25085223,-0.10549718,0.14662914,0.18818983,-0.24555802,0.12492779],[0.0003755121,-1.5311179,-4.3272233,-0.46309865,1.436148,-0.45119837,-0.93964314,0.4118978,-0.7870894,-0.7511141,2.7374241,-0.07799791,0.010225301,0.17858656,0.025200186,0.37682062,0.24588887,-0.32082075],[0.021538865,0.2234551,-0.05087945,-0.16210763,0.052253578,-0.5015178,0.86417854,0.56207055,0.14652875,-0.037124693,0.7986706,-0.625708,0.142645,0.052587703,-0.237036,-0.23684868,-0.4017891,-0.7608035],[-0.3722909,0.54145604,0.11193832,-0.41615248,-0.20452525,0.41731396,-0.56850874,0.445437,0.20962103,0.2034371,-0.38485476,0.40009347,0.0909534,-0.073908776,-0.31467494,0.08797947,0.012187805,0.13753214],[-0.07315742,-0.843601,-0.13284892,-0.21064427,0.813711,-0.6778223,0.09393603,-0.31476387,-0.33809435,0.31934786,0.11784876,-0.11346231,-0.50661373,0.81929815,0.41997102,-0.19574907,-0.10820584,-0.0013016728],[-0.0045597386,-1.876721,-0.6161992,0.29715562,-0.83337486,-2.280439,-2.1169722,-1.5114844,-1.9489485,-2.430094,-0.9096425,-0.92954713,-0.4385408,0.19880356,0.64660573,-0.46100757,0.17253575,-0.076600425]],"activation":"σ"},{"dense_2_W":[[1.009494,0.042049244,-0.7750519,-0.57728094,1.3917161,-0.9949108,-0.27987498],[-0.4912434,-0.22204591,-0.5417998,0.4574385,0.21495223,0.2710998,0.62334305],[-0.15153155,0.01599128,-0.45292535,0.012102149,0.23569047,0.4165612,-0.3426787],[-0.56857765,-0.48303458,0.17770454,-0.026586715,0.04770979,0.6940287,-0.04585979],[-0.6126955,0.12536684,0.023409514,-0.6668342,-0.094184265,0.01863304,-0.036869247],[0.37028855,-0.29489964,-0.3782998,0.44059175,0.4545478,-0.9325122,-0.28946736],[-0.5399863,-0.52101445,0.24559934,0.5746218,-1.1413286,0.71955156,0.4434971],[0.8772197,0.5362956,0.19421022,-1.0224069,0.7089293,-1.0749434,0.04264178],[-0.5255222,-0.03324677,-0.7210142,-0.38647947,0.19431087,-1.3739054,0.3249313],[1.1000354,1.0278201,-0.69191587,-0.50786847,0.5078231,-1.0587357,-0.24861221],[-0.2748495,-0.54516625,0.24361324,-0.37419957,-0.12278863,-0.0628238,0.17636348],[-1.0216668,0.054562744,-0.36077505,0.403067,-0.5215005,0.47245187,-0.31446433],[0.20261914,-0.18020427,-1.0289909,-0.08297991,-0.673349,-0.2813431,-0.43772835]],"activation":"σ","dense_2_b":[[-0.0071199946],[0.11808283],[0.012594512],[0.010172507],[-0.26932594],[-0.059178684],[-0.109771855],[-0.21241476],[-0.26554722],[0.051559977],[0.019238671],[0.06243583],[-0.2946492]]},{"dense_3_W":[[-0.09602511,-0.048682462,-0.18955606,0.4171001,0.066497065,-0.59586984,0.21584617,-0.37557873,0.27344728,-0.33525473,0.6279888,-0.39435863,0.46858945],[0.6317756,0.0002881869,0.19008896,-0.59359,0.3863359,-0.2528118,-0.1984929,0.5970809,0.3629511,0.3559985,-0.637736,-0.84007025,0.04686958],[0.750255,-0.24061574,-0.58244413,-0.24981315,-0.25377622,0.5355694,-0.30574042,0.5434507,-0.060648266,0.6019894,-0.6170493,-0.50975835,0.08353199]],"activation":"identity","dense_3_b":[[0.033729278],[-0.054734595],[-0.028816417]]},{"dense_4_W":[[-0.44288176,0.2882923,0.91610426]],"dense_4_b":[[-0.03074748]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A00642A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A00642A1'.json new file mode 100755 index 0000000000..1d20a774f4 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A00642A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.884762],[0.81607556],[0.46235383],[0.04137435],[0.8147813],[0.8158872],[0.8164004],[0.80351764],[0.78805685],[0.7781327],[0.7716266],[0.041138463],[0.041208826],[0.041283675],[0.041592937],[0.04169671],[0.041762512],[0.04168417]],"model_test_loss":0.007246986962854862,"input_size":18,"current_date_and_time":"2023-08-13_22-07-07","input_mean":[[20.607279],[0.1291296],[-0.0037803883],[-0.0014043924],[0.13077764],[0.13015877],[0.12909429],[0.12892099],[0.12536412],[0.123454005],[0.11908713],[-0.0013121094],[-0.0013442688],[-0.0013850179],[-0.0015709468],[-0.0017340528],[-0.0019103661],[-0.0019895914]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3721764],[0.084215105],[-0.055472832],[0.077813394],[-0.96163833],[1.1660722],[-1.6546477]],"dense_1_W":[[-0.58524305,0.029181788,-1.0521368,0.35033363,-0.39801714,-0.87713426,0.85987127,0.047615178,0.40549085,0.14911534,-0.2479689,-0.28950268,-0.14985971,0.07570249,-0.10249687,0.043796625,-0.07579884,0.10728671],[-0.001887957,1.4247402,0.0036300311,0.12278278,-0.2253377,0.36661762,-0.31705707,-0.45933437,-0.46282038,-0.053074382,0.29370224,-0.19806243,0.082440175,-0.45482296,-0.32952204,-0.011400758,0.10100219,0.10240154],[-0.059823256,-0.5745303,-4.452575,0.22918445,0.5550891,-0.79828143,0.61945033,-0.6684762,-0.09642584,0.21603544,0.6628456,-0.7397862,-0.2869019,0.0020030462,0.28633127,0.55959415,-0.33312178,0.28244367],[0.04614508,-0.11604671,-0.79724836,-0.491676,-0.14662114,0.52269655,-1.2130527,0.5618968,0.51555824,0.3292312,-0.45453092,0.42635924,-0.15188393,0.34045127,-0.57950723,0.22944026,-0.16212673,0.319651],[-0.2394283,1.0045947,-0.0012783561,-0.10012283,-0.3071191,0.7955691,-0.36835575,-0.008639509,0.3636069,-0.01755343,-0.10722917,0.19506188,-0.35370708,0.17400146,0.086988635,0.22335935,-0.32956237,0.11304717],[0.5236153,-0.15631859,-0.98424,-0.111111596,-0.60968053,-0.20851852,0.7218569,0.048679378,0.3039536,0.021387655,-0.09857831,-0.37517497,0.06802272,0.3579023,-0.045115247,0.09317572,-0.24613723,0.21383843],[-0.30168456,-1.2367435,-0.00061271444,-0.1381754,0.32092336,-0.6533606,0.5152246,-0.2438313,-0.31787005,-0.052657858,0.21278745,0.29981515,-0.35046533,0.14706951,0.1782125,-0.3582475,0.2180452,-0.01023163]],"activation":"σ"},{"dense_2_W":[[-0.4264956,-0.30409577,0.036205757,0.28041327,-0.17547563,0.22233264,-0.5563757],[-0.39062256,-0.8167799,0.66903347,-0.24326237,-0.939436,0.7294541,1.202365],[0.032040264,-0.06555011,-0.37881997,0.54659986,0.3044162,-0.0027152027,-0.30760282],[0.2730313,-0.7371839,-0.6369608,-0.0032412624,-0.6352998,-0.25697374,-0.6930982],[0.5224691,-0.3149151,-0.053694103,0.0010917719,-0.69223607,0.6271929,0.095157035],[0.3687945,-0.22422504,0.093919925,-0.06523741,-0.22843531,-0.14060488,0.26878905],[-0.04975786,0.3340523,-0.2715762,0.4248088,0.35888636,-0.35311514,-0.36247927],[-0.04869314,-0.50731874,-0.6262194,-0.68582696,-0.38477626,-0.62149537,-0.09445867],[0.50780857,-0.35911572,-0.28358296,-0.45811683,0.19999982,-0.47677487,0.1871591],[0.46753326,-0.48402148,-0.019163152,-0.4120921,-0.12853143,0.6621117,0.54874456],[1.0123298,-0.9825988,0.12905803,-0.8407654,-0.7416709,0.4597624,0.45862544],[-0.45890373,0.55880725,0.19543312,0.56986344,0.34912577,-0.1812731,-0.69188166],[-0.13247645,2.9199218e-5,-0.6082515,0.18595329,0.043651372,-0.49888754,0.29356086]],"activation":"σ","dense_2_b":[[0.0050273063],[0.13748644],[0.01580143],[-0.26208422],[-0.035189588],[-0.13114949],[-0.012246006],[-0.28205365],[-0.053524993],[-0.20919354],[-0.032046903],[-0.061223272],[-0.013682854]]},{"dense_3_W":[[-0.02703186,0.6016364,-0.45162404,0.15611896,0.50627923,0.51877177,-0.7800174,-0.054255366,0.33341834,-0.2897292,0.6872302,-0.0026089211,0.3239283],[-0.24794696,0.4848827,0.09518162,0.5067153,0.423029,-0.5145099,-0.12581715,-0.32483757,-0.06947478,0.23648755,0.5299817,-0.3650013,-0.47067726],[-0.06398943,0.0541899,-0.60453045,-0.51784617,0.38545498,0.32902572,-0.11962995,0.36440012,-0.1133295,0.17170249,0.073485106,-0.4394425,-0.34638456]],"activation":"identity","dense_3_b":[[-0.09188924],[-0.02956994],[-0.026732257]]},{"dense_4_W":[[-0.5402822,-0.8496468,-0.8664632]],"dense_4_b":[[0.03144883]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN.json new file mode 100755 index 0000000000..829cfc644e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN JETTA 7TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[9.103015],[1.0622845],[0.49049565],[0.040089965],[1.0459728],[1.0516889],[1.056568],[1.0408956],[1.019547],[0.99288225],[0.971193],[0.04002349],[0.040028628],[0.040033314],[0.040071882],[0.04004624],[0.039898124],[0.03964297]],"model_test_loss":0.017716435715556145,"input_size":18,"current_date_and_time":"2023-08-13_20-52-08","input_mean":[[23.148537],[0.033288945],[-0.0069383495],[0.006664864],[0.03740209],[0.036363255],[0.035049323],[0.035006184],[0.036647633],[0.039277017],[0.043880757],[0.006671388],[0.0066857547],[0.0066986936],[0.0067147585],[0.006739247],[0.0067356247],[0.006714203]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[0.6366688],[-0.56371534],[-0.14571653],[-1.4455271],[0.07993529],[-0.0736673],[-0.3548013]],"dense_1_W":[[-1.3113872,0.76172936,0.016918765,0.16224551,0.094115384,0.32684585,-0.19450265,-0.13789567,0.04242289,-0.15509766,0.13169524,-0.13143206,0.032396875,-0.3091977,-0.26571655,-0.13967507,-0.065433465,0.15276721],[-0.07811718,1.0454074,8.495185,-0.7922316,-0.51769626,0.1606819,0.13209969,0.20275009,0.09197654,0.39435092,-0.8629015,0.48206797,0.43022737,0.085256994,-0.39034274,-0.29939228,0.26249692,0.21062453],[-0.0062007825,2.1868382,0.015541467,-0.49308324,-1.4422244,1.0147123,-0.78595483,0.5242463,0.32791784,-0.008197891,-0.23073053,0.31578735,-0.15602784,0.14793761,-0.23083985,0.052981053,0.004748488,0.13156143],[1.2384007,0.6278066,-0.009660281,0.40833205,0.37839705,1.1528418,-1.1164012,-0.32824138,-0.30145752,0.3350114,0.0860737,0.07817285,-0.18830507,-0.33780572,-0.513321,-0.07987069,-0.20404594,0.2723732],[0.0037708185,1.6037707,-0.018128129,0.14369644,1.3666841,1.1831751,1.1010982,1.5845065,1.3880488,0.9383163,0.6016751,0.32569328,0.05112049,-0.3200393,0.6177238,0.070831224,-0.3571441,-0.025784306],[0.0020605826,0.40808862,-0.0019806053,-0.22798932,0.4128132,1.312186,-2.012465,-0.18998149,0.38222578,0.034227915,-0.007133824,0.09108775,0.41027293,-0.35144845,0.41214025,0.18282686,-0.1982243,-0.29242274],[-0.11462315,0.14389442,1.7229052,-0.49408183,0.8118903,0.98040986,-0.1475524,0.32353425,-0.4042175,-0.4816111,-0.08436794,0.30240852,0.011541781,-0.27904144,-0.16726047,0.13386558,0.13543732,0.051627796]],"activation":"σ"},{"dense_2_W":[[-0.30253688,0.01659866,-0.5824275,-0.55473965,-0.65702754,0.4192852,-0.11081115],[0.42800114,-0.20567572,0.73502725,-0.3303795,0.5659001,0.33262393,-0.20845625],[-0.3169161,0.124995895,0.15316603,-0.3496913,0.25013453,0.83376133,0.08400041],[-1.9621079,1.3082521,-0.8913488,0.17462318,0.90885985,-0.7408587,-0.09095186],[0.65295506,-1.0685686,-0.3590795,-1.0821314,0.52553105,-0.33879203,-0.70096666],[0.3209469,-0.25117752,-0.6676659,0.04474845,-0.34462446,-0.6437361,0.2751733],[-0.16672656,0.05766618,0.020867005,-0.14019237,0.19822632,0.58170456,0.371152],[-0.16170846,-0.28313425,-0.72305113,-0.21175383,-0.091973335,0.069761746,-0.13998356],[-0.121987164,0.051230323,0.6086433,0.0826418,0.3024844,0.36294287,0.11378607],[0.23916546,0.32369035,0.29166648,-0.5202349,-0.25274298,0.05645988,0.004484808],[0.476144,-0.20375697,0.7744821,-0.20136273,-0.1997987,0.5086857,-0.13244303],[-0.5018623,0.0039712084,-1.3228892,-0.35630298,0.5103365,0.29102045,-0.42318186],[0.47396633,-0.5094677,-0.7413271,-0.0389592,-1.0502282,0.050273117,0.13152136]],"activation":"σ","dense_2_b":[[0.08725935],[-0.07465063],[0.03314263],[-0.37226093],[-0.023633253],[0.1155244],[-0.035357073],[0.23985702],[-0.20116974],[-0.31014088],[-0.10752753],[0.28552514],[-0.040062964]]},{"dense_3_W":[[-0.6032763,0.62711155,-0.018731741,-0.4367009,-0.33474848,-0.5986305,0.3242449,-0.5550633,0.03024249,0.37429914,0.5477163,-0.11621696,-0.06627925],[0.57853127,-0.07147071,-0.45605588,0.090353325,0.6903964,-0.054210514,0.117629945,-0.07430856,-0.63455236,0.17655165,0.17357552,0.5822009,0.35904822],[0.017287904,-0.4711383,0.31602967,-0.5097068,0.18833941,0.2322238,0.6586847,-0.3739661,-0.35619813,-0.50459105,0.065162025,-0.047679372,-0.048519257]],"activation":"identity","dense_3_b":[[0.030126056],[-0.038708143],[0.07066878]]},{"dense_4_W":[[1.1202317,-1.0828689,0.09244317]],"dense_4_b":[[0.034058213]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566B00611A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566B00611A1'.json new file mode 100755 index 0000000000..1a1f451ac9 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x873Q0909144J xf1x895063xf1x82x0566B00611A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.962804],[0.7562036],[0.38428113],[0.033356115],[0.74190426],[0.7469579],[0.75150245],[0.7410608],[0.72982436],[0.7126891],[0.6949334],[0.033194255],[0.033214666],[0.03323774],[0.03321157],[0.033148184],[0.033052694],[0.0329442]],"model_test_loss":0.008441523648798466,"input_size":18,"current_date_and_time":"2023-08-13_23-24-03","input_mean":[[22.17462],[0.03106641],[-0.005453808],[-0.0050417427],[0.033787917],[0.03330055],[0.03320549],[0.03181684],[0.03000325],[0.026441913],[0.024252506],[-0.004972066],[-0.004947025],[-0.00493625],[-0.005049273],[-0.005097442],[-0.0051535596],[-0.0052144374]],"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.060010195],[-4.127207],[-0.025756951],[1.1371067],[-0.18480848],[-1.5460433],[-4.385164]],"dense_1_W":[[-0.012603463,1.2675081,0.26481828,-0.6390102,-1.312759,1.511266,-0.69735384,-0.42666143,1.017449,-0.5036708,-0.4066075,0.06250349,0.32637885,-0.21702744,0.29735997,0.16498649,0.032733943,-0.09865579],[-1.7240236,1.2846862,0.4235646,0.16218854,-0.0021448887,0.98084474,-0.9292698,0.3639735,-0.1823644,0.07235068,0.17636193,0.29514208,-0.5203855,-0.26677978,0.38333958,0.119583756,0.12173379,-0.24175833],[-0.009374525,1.6042166,4.722405,0.055045582,-0.5204036,0.028873047,-0.90108126,-0.09144464,0.5713409,-0.25763115,-0.5311292,0.15709037,0.37013984,-0.00975939,-0.2143132,-0.6385762,-0.13333312,0.44007307],[-0.9055522,-0.8628247,-0.040643092,0.3484062,-0.18693899,-1.1056893,1.3160697,0.010075687,0.14756401,-0.11564695,-0.025115244,-0.27166274,-0.19431637,0.1267001,0.09704567,0.5197097,0.03209645,-0.27001658],[-0.018839281,-1.290398,0.058688518,0.33156508,0.68419033,-2.4491622,1.7043401,-0.3630223,0.18457794,-0.2868806,0.049333274,-0.61860454,-0.14083372,0.66726494,0.33173916,-0.13214351,0.034108125,-0.08901106],[0.8751846,-0.28634623,-0.030397577,0.12990081,-0.330972,-0.9653466,0.7668182,0.37737978,-0.11113706,-0.35438588,0.10701755,-0.48095903,-0.12939374,0.6977727,0.16942686,0.02181331,0.10608403,-0.13171671],[-1.7585233,-1.5873438,-0.43496054,-0.2323169,-0.069673285,-0.9673478,1.2224542,-0.4760693,0.23799634,0.09720081,-0.27788097,0.12954445,-0.24112089,0.615078,-0.25901628,-0.25295392,0.00043022525,0.19755143]],"activation":"σ"},{"dense_2_W":[[-0.48768643,-0.13457146,-0.94332385,-0.015858617,0.3480726,0.09448187,0.10320337],[-0.20015644,0.5809371,0.22025663,-0.29464918,-0.39863232,-0.7891601,-0.33703023],[-0.14985067,-0.83543855,-0.5071646,-0.90759295,-0.3330416,-0.2905544,-0.27152473],[0.0032478045,-0.75732607,-0.82309675,-0.77273506,-0.13305809,0.10644364,-0.68221307],[-1.4204942,-2.3662848,-1.1431475,0.7174042,2.1057255,0.785913,2.2557228],[0.3001741,0.57693744,0.57035863,0.95958936,0.32337785,-0.09218264,0.13867925],[-0.5285859,0.3610803,-0.020290779,-0.2668336,-0.64541036,-0.09989579,-0.05994527],[-0.27520058,-0.7017016,-0.6802332,0.2792723,1.0755413,0.65584993,0.88514155],[0.05950802,0.12636684,-0.035091616,-0.32777858,0.28212768,-0.76370627,-0.5573967],[0.58700997,0.78871405,-0.10341003,-0.6230865,0.077733986,-0.7194054,-0.18458478],[-0.18768333,-0.49252254,0.027535807,-0.53566045,0.15138532,0.16044581,0.14787057],[0.6626681,0.8601064,0.60114187,-0.3327629,-0.58684623,-0.95519954,-0.5899526],[-1.0263729,-0.41759077,-1.0262698,0.040096123,0.08806692,-0.0133949425,0.72428477]],"activation":"σ","dense_2_b":[[-0.25272742],[0.14023453],[-0.014608332],[-0.33230057],[-0.40752354],[-0.041421413],[0.01844217],[-0.28299713],[0.06559437],[0.109856494],[-0.04810613],[-0.021127785],[-0.44977495]]},{"dense_3_W":[[-0.029548874,0.5103658,0.17107706,-0.29514194,-0.947415,-0.511465,0.32390937,-0.6248399,0.045778725,0.6936353,0.30394363,-0.10813219,0.36093238],[-0.02098016,0.3392484,-0.66028225,0.15492892,-0.023099247,0.008027363,-0.43149045,0.133276,-0.12618168,-0.120471604,-0.07336129,-0.116436034,0.08667111],[0.07088678,-0.26997882,-0.24363138,-0.67593896,0.42628843,0.19159117,0.115236744,0.18871395,-0.56831765,-0.28568426,0.27478302,-0.7448726,0.49073538]],"activation":"identity","dense_3_b":[[0.07825424],[-0.012723917],[-0.053086866]]},{"dense_4_W":[[0.73551875,-0.06301601,-0.56700844]],"dense_4_b":[[0.06256496]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143K xf1x892033xf1x820514B0060703'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143K xf1x892033xf1x820514B0060703'.json new file mode 100755 index 0000000000..14415e081e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143K xf1x892033xf1x820514B0060703'.json @@ -0,0 +1 @@ +{"input_std":[[9.666501],[0.8200595],[0.4267363],[0.029060148],[0.8098353],[0.81299865],[0.8158713],[0.80811334],[0.80471945],[0.79804546],[0.78982925],[0.02891173],[0.028966159],[0.029011153],[0.02911869],[0.029185541],[0.02921757],[0.029190162]],"model_test_loss":0.006315805949270725,"input_size":18,"current_date_and_time":"2023-08-13_23-50-23","input_mean":[[25.293772],[0.004106909],[-0.013306409],[-0.005250305],[0.005468495],[0.004553356],[0.0038011023],[-0.0017266939],[-0.003917628],[-0.010417055],[-0.014121405],[-0.0053853025],[-0.0053633936],[-0.0053434907],[-0.0053283866],[-0.0053414376],[-0.005541431],[-0.005723747]],"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.28580254],[-0.23432341],[1.1156756],[-0.86002725],[0.11221744],[-0.26342744],[-1.8761094]],"dense_1_W":[[-0.25975057,1.0925561,1.0103881,0.036238585,-0.3607785,0.08896782,-0.5181012,0.20072389,-0.038183834,0.09980021,-0.4068494,-0.17393062,0.330586,-0.23314619,0.034675427,0.07329598,-0.15636317,0.05865833],[0.017393583,0.3741976,0.0030892517,0.18871218,-0.42910495,-1.2822627,-0.05155862,0.53394276,0.22852045,0.12027069,-0.5230852,-0.115542546,0.23333092,-0.042271625,0.047717366,0.050503843,-0.0035985464,0.032520477],[0.35676572,-1.1685232,-0.011553547,-0.24975727,0.24694973,-0.6117383,0.4092684,-0.27288175,-0.33223516,0.16621913,0.025712943,0.42010584,-0.31489658,-0.052690785,0.054999806,0.18088785,0.006976741,0.021856777],[-0.44594803,-0.8409663,-1.1404896,0.41818568,0.058727153,-0.21626356,0.7575016,-0.19471127,-0.09616215,0.1518164,0.25844562,-0.8136779,0.20843573,0.6002283,-0.23000686,-0.19357574,-0.022530245,0.04392898],[0.8572372,0.025385775,1.2609717,0.042114303,0.399061,-0.19249442,0.51250815,-0.12575161,-0.28613088,-0.19633885,0.07607506,-0.4094928,0.11277618,0.2009149,0.4207984,-0.18763435,-0.3462443,0.16364828],[0.7268745,-0.18285611,-1.3299872,-0.09213111,-0.217109,0.36897022,-0.8693468,0.41960382,0.019098964,0.28840658,-0.03882476,0.4372806,0.08356159,-0.23352197,-0.20746002,-0.2340454,0.11242141,0.14783],[-0.5003176,-1.7298814,-0.025057396,-0.051110655,0.17657964,-0.8302932,1.1969275,-0.42902136,-0.28651416,0.049032684,0.12503019,-0.073111385,-0.11944735,0.09518251,0.1635864,0.0545354,0.05875944,-0.038880356]],"activation":"σ"},{"dense_2_W":[[-0.12937793,0.76093704,0.20176205,-0.08243198,0.4225252,-0.68954825,0.8347276],[0.6415931,-0.049831085,-0.36734578,-0.71415675,-0.57440925,-0.53335655,0.15256901],[-1.1228914,-0.120415226,-0.59729034,0.8767655,-0.12896578,0.18779756,0.8045126],[-0.30790147,0.6392956,0.040560763,-0.12412736,0.22901759,-0.6460633,0.89982486],[0.42736927,-0.94990593,-0.5395771,0.13554287,-0.49102458,0.94958186,-0.6974517],[0.5491617,-0.18928741,-0.50987816,-0.6287503,0.08691802,0.33302802,-0.36628336],[0.27155477,-0.27820358,-0.9777661,-1.1842451,-0.30412066,-0.6699264,0.41161236],[-0.59314966,0.4599474,-0.19772863,0.52712804,0.32302898,0.19360131,-0.09676147],[0.58557266,-0.6139606,-0.558897,-0.14769661,0.050115813,0.5432267,-0.5170338],[-0.17028296,-1.033602,-0.076122455,-0.40448987,0.052614305,0.1912033,-0.07015176],[-0.68916506,0.3962156,-0.1657399,0.687493,0.060366802,-0.10516932,0.01300196],[0.276943,-0.9250079,-0.7488696,0.13571858,-0.036271952,0.5265197,-0.15073454],[0.14400741,-0.11341286,-0.3804518,-0.8804317,-0.071586706,-0.43452612,-0.3208466]],"activation":"σ","dense_2_b":[[-0.040302996],[-0.11010342],[-0.20677158],[-0.048647635],[0.120229416],[-0.0054608714],[0.058483347],[-0.03004292],[0.05187668],[-0.076424606],[0.0038315326],[-0.022529595],[-0.2090887]]},{"dense_3_W":[[0.008394337,-0.30972952,0.39671507,0.6184598,0.12630114,0.32693958,-0.76353675,0.2980328,-0.48589507,-0.59280705,-0.35038635,0.3186341,0.26545805],[-0.7789929,0.55391824,-0.2314275,-0.1026219,0.7185184,0.6306864,0.6643669,-0.32594445,0.37869594,0.12729132,-0.6604259,0.43580285,0.17978954],[0.5019366,0.08632822,-0.5505618,0.14464153,-0.49149013,0.3130208,-0.37043464,0.14965,-0.7112207,-0.35579038,0.56159174,-0.23439313,0.24922566]],"activation":"identity","dense_3_b":[[0.027808271],[-0.068755515],[-0.07428425]]},{"dense_4_W":[[-0.25726643,1.2216649,-0.05311492]],"dense_4_b":[[-0.06435458]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143M xf1x892041xf1x820522B0080803'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143M xf1x892041xf1x820522B0080803'.json new file mode 100755 index 0000000000..c24501ec58 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143M xf1x892041xf1x820522B0080803'.json @@ -0,0 +1 @@ +{"input_std":[[7.117151],[0.8780721],[0.47055784],[0.03373205],[0.87878203],[0.87837523],[0.87788916],[0.8586185],[0.8462304],[0.8342321],[0.82547796],[0.033661477],[0.03367423],[0.03368023],[0.03354494],[0.033401415],[0.033237793],[0.033019036]],"model_test_loss":0.007191894110292196,"input_size":18,"current_date_and_time":"2023-08-14_00-15-11","input_mean":[[20.899157],[-0.01104718],[0.036451686],[-0.0037773221],[-0.015367436],[-0.014161936],[-0.012414819],[0.0024655054],[0.011132189],[0.024372566],[0.03227307],[-0.0040591834],[-0.003941466],[-0.003825588],[-0.0034224978],[-0.0032681874],[-0.0031958742],[-0.0031637321]],"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.030808564],[-0.7881302],[-0.31871074],[-0.7077137],[-0.6866325],[-1.4053191],[1.028521]],"dense_1_W":[[-0.004262297,0.26770896,-0.0056766947,0.30141094,-0.48577562,1.0045375,-0.2323648,0.115538254,0.115895815,-0.4666756,0.25802436,-0.31511456,-0.0127651235,-0.14158984,-0.2904196,-0.052200418,0.22780252,-0.14276873],[-0.78517354,0.22283344,1.9814899,-0.060622748,0.44862846,0.5629776,-0.95423114,-0.2534107,0.113122925,-0.19669883,-0.22316283,0.3763087,-0.52413887,0.08829021,0.5618185,-0.4974062,-0.003229953,0.104768366],[-0.0031356695,-0.3358509,-0.013187175,0.09005276,-0.33111897,-1.0076365,1.2956011,0.25053537,0.032162637,-0.24333534,-0.0034071796,-0.5057202,0.24314785,0.1808326,0.05994126,0.053177986,0.29184142,-0.2806042],[-0.7272065,0.2573282,1.7617868,0.29571036,0.37528726,-1.083522,1.3229558,-0.4182797,-0.345258,-0.5115551,0.17309518,-0.24578947,0.10943833,0.08469504,0.049101092,-0.08576649,-0.5060829,0.3355709],[-0.349624,-1.6453601,-3.26807,0.43909118,0.51051325,-0.17063986,0.21545473,0.34421232,0.03763902,-0.2049723,0.92357033,-0.18443908,-0.18679084,0.3117935,-0.44758165,-0.18143773,0.29891232,-0.08629131],[-0.39733958,-1.0273623,0.003442246,0.45654815,0.120703034,-0.7350454,0.44965222,-0.049190737,-0.05031882,-0.1817813,0.107058324,-0.41069368,0.04839138,-0.09612549,-0.040410392,0.035452463,-0.102408044,-0.01588105],[0.30539432,-1.042117,0.00010271933,0.334786,0.39255652,-0.9954019,0.59428906,-0.041689884,-0.055279892,-0.32039487,0.22644287,-0.5457353,0.09216463,0.07863109,0.07457668,-0.16325666,0.12002374,-0.11692654]],"activation":"σ"},{"dense_2_W":[[-0.4462192,0.006479972,0.16022606,0.08788203,0.4124234,0.20229541,-0.15212922],[-0.8229072,-0.6896271,0.41974926,-0.5126825,-0.5892288,0.36048502,0.08571766],[0.8743697,0.11519312,-0.8927151,-0.20659262,-0.03500918,-0.2431935,-0.21345907],[-0.7572373,-0.41277024,0.5602531,0.23260891,0.57976633,0.21060136,0.49044013],[0.10042878,0.032445718,-0.3576043,0.20940162,-0.27814117,-0.42059135,-0.65223837],[0.5351519,0.41956633,-0.3044747,-0.45954588,0.16867766,-0.4634547,-0.5968737],[-0.23816408,-0.48021644,0.838582,-0.21538194,0.18876094,0.5458715,0.61050403],[-0.924066,-0.3433875,0.57219464,-0.16153193,0.042738453,0.52251714,0.3991525],[0.48040503,0.1870807,-0.52080226,0.21046016,-0.45690414,-0.73420763,0.22072145],[-0.12941065,-0.44941613,0.5425607,0.59573215,-0.22534776,0.5405078,0.39194173],[0.36701992,0.34995168,-0.62530506,-0.6363552,-0.103005536,0.22475937,-0.7253444],[0.9647937,-0.056563377,-0.46448824,-0.22327216,-0.14012502,-0.011079587,-0.6820786],[-0.45136547,-0.14740916,-0.6345192,-0.46869496,0.26515964,-0.8063111,-0.36604276]],"activation":"σ","dense_2_b":[[-0.0016022231],[-0.27396354],[0.09004652],[-0.22539683],[-0.038415063],[0.06759769],[-0.14015342],[-0.26507622],[0.056926068],[-0.13300559],[0.012339802],[0.1285967],[-0.09678008]]},{"dense_3_W":[[-0.52442557,-0.68827885,0.539679,-0.5438538,0.61366826,0.63880235,0.08888519,-0.3074122,0.09701449,-0.6003877,0.45083877,0.22909275,-0.18219474],[-0.5755899,0.09211835,0.20371199,-0.5715788,0.15341173,0.6038049,-0.41338116,-0.23703997,0.5769859,-0.0016438926,0.50527227,0.20451528,0.42446515],[-0.5199198,0.16957249,0.45533246,0.34319803,0.32190958,0.35860723,-0.09089439,0.09584038,-0.17535931,-0.4608781,0.32986072,0.28507563,-0.44377762]],"activation":"identity","dense_3_b":[[-0.00831913],[-0.03343917],[-0.05860182]]},{"dense_4_W":[[0.48563462,1.1415706,0.1720984]],"dense_4_b":[[-0.028836345]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143P xf1x892051xf1x820526B0060905'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143P xf1x892051xf1x820526B0060905'.json new file mode 100755 index 0000000000..7182b5b664 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0909143P xf1x892051xf1x820526B0060905'.json @@ -0,0 +1 @@ +{"input_std":[[8.181382],[0.86813647],[0.5492334],[0.036760613],[0.8545429],[0.85885984],[0.86159694],[0.86050034],[0.85472816],[0.8523642],[0.8434543],[0.036624078],[0.036657],[0.03669113],[0.036766365],[0.03678054],[0.036892213],[0.036896084]],"model_test_loss":0.005091955419629812,"input_size":18,"current_date_and_time":"2023-08-14_00-41-09","input_mean":[[19.510765],[0.022819782],[-0.0037222924],[0.0013656311],[0.034109943],[0.033269133],[0.03193874],[0.030672757],[0.03303289],[0.039188243],[0.047165018],[0.0015104475],[0.0014863856],[0.001448786],[0.0013402464],[0.0011793213],[0.00095052656],[0.00085381255]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.24343],[0.036478233],[1.1406748],[-4.0893216],[0.010201278],[3.8922794],[-0.02359314]],"dense_1_W":[[0.5112725,1.2539926,0.08067997,0.40639907,-0.17453805,1.0416505,-0.12549862,0.027588852,-0.33463654,-0.05859373,0.17721942,0.25630853,0.1335248,-0.2872575,-0.39503282,-0.34860995,-0.06432243,0.31120285],[-0.0021122668,0.70218897,0.010622942,0.5508349,-0.090317965,1.2903326,-0.7231601,-0.18765782,0.09797428,0.046807405,0.059654005,-0.41199416,0.18483795,-0.29445493,-0.6740794,-0.12480136,-0.0430672,0.19277844],[0.5476078,-1.2119801,-0.08559349,0.19138788,0.28913566,-1.1168361,0.035099618,-0.35251448,0.7215318,-0.03543186,-0.19039832,-0.5274913,-0.07222603,-0.26130104,0.6166925,0.4533689,0.050027058,-0.4696203],[-2.058259,-1.0750265,-1.169345,-0.30267146,-0.20469314,-0.8867201,1.2159588,-0.41085604,-0.5082783,0.2776987,-0.050553918,-0.22321407,-0.0077316845,0.29300007,0.65865314,-0.85335296,0.25066155,0.18064624],[-0.035402827,-0.5353682,1.8089458,0.028881337,0.20666885,-1.1033194,1.6017944,0.9444415,-0.2323832,-0.15898483,-0.30815956,-0.26466683,-0.00038011433,0.79185253,0.45667037,-0.5028157,-0.73411787,0.21777979],[2.0663276,-0.9846567,-1.1721373,1.0919439,0.08992667,-1.567887,1.5389193,-0.3230045,-0.679468,0.26205733,0.0035511316,-0.049015433,-0.52897847,-0.1632392,0.10244833,-0.9965355,0.26675847,0.27428353],[0.022025522,-0.41033313,-2.2404602,1.1125531,0.046705477,-1.1841795,1.162694,-0.42915577,-0.19991426,0.050461024,0.4656523,-0.6310463,-0.12011685,-0.0015236506,-0.6044337,-0.5173836,0.33471113,0.43550345]],"activation":"σ"},{"dense_2_W":[[-0.04584096,-0.99214095,0.31622618,0.5777341,-0.045811962,-0.043618474,0.5721162],[0.38406098,0.47349882,-0.40502512,-0.3970886,-0.38640773,-0.19816592,-0.053756084],[0.6450702,0.7932687,-0.710186,-0.3985887,-0.034641393,-0.0185165,-0.69896996],[-0.7009559,-0.022874104,-0.08941493,0.64746475,0.15585321,-0.29219258,0.58332366],[-0.0010929473,0.33329758,-0.3808528,-0.153307,0.02534006,-0.62115765,-0.605843],[0.16988595,0.9742904,-0.6698165,-0.09701397,-0.5044086,-0.29125994,-0.4428076],[0.055143006,-0.80990934,-0.37862834,0.17991501,-0.71648,-0.9390392,-0.42016158],[-0.25731847,-0.42503363,0.3942715,-0.7323096,-0.22550054,-0.2743843,-0.7322862],[0.004696864,-0.25343058,-0.3075049,0.35224637,0.5207669,0.41676813,0.7068549],[-0.5403459,-0.7852185,0.27016988,0.13775401,0.28410533,0.067339934,0.6903914],[-0.3101071,-0.8646119,-0.2535561,0.53973216,0.16905892,0.40238792,0.2142207],[-0.29162455,0.53124887,0.004796835,-0.19279581,0.3287921,-0.025846375,0.0793902],[-0.6812329,-0.22995314,0.5113913,-0.24881253,0.21576783,0.48485595,0.28645903]],"activation":"σ","dense_2_b":[[-0.21589507],[0.10397086],[0.15712452],[-0.16989635],[0.26295224],[0.24404621],[-0.10845146],[-0.18922116],[-0.15020797],[-0.16395593],[-0.36227095],[0.0059039695],[-0.05891273]]},{"dense_3_W":[[-0.164952,0.5829566,0.5295758,-0.23809046,0.72228867,0.44742477,0.123699404,0.044092085,-0.6295931,-0.5918753,-0.40078494,-0.055157468,-0.23842782],[0.07521707,0.15951206,-0.03775708,0.3879158,-0.34177628,-0.2327042,-0.41371173,-0.009885026,-0.44009754,0.10016008,-0.43510032,0.24980222,0.13962166],[0.32187572,-0.6400992,-0.17281993,0.07402123,0.4694254,-0.2456943,-0.31591687,-0.15127994,0.4486657,-0.2195093,-0.47274616,-0.24562888,0.5684488]],"activation":"identity","dense_3_b":[[0.05258817],[0.07220977],[-0.044359814]]},{"dense_4_W":[[1.0103351,0.06551428,-0.5411557]],"dense_4_b":[[0.046632294]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0910143B xf1x892201xf1x82x0563B0000600'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0910143B xf1x892201xf1x82x0563B0000600'.json new file mode 100755 index 0000000000..58f060b313 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0910143B xf1x892201xf1x82x0563B0000600'.json @@ -0,0 +1 @@ +{"input_std":[[9.662233],[0.8113375],[0.4172554],[0.033643167],[0.79888594],[0.8028403],[0.80670947],[0.7995481],[0.7934126],[0.7891131],[0.782117],[0.033658788],[0.03365928],[0.03366303],[0.033584062],[0.033565614],[0.033572596],[0.03341478]],"model_test_loss":0.011067546904087067,"input_size":18,"current_date_and_time":"2023-08-14_01-06-44","input_mean":[[20.030537],[0.060196385],[-0.007738257],[-0.012284204],[0.062764056],[0.06089445],[0.05955253],[0.059412487],[0.059961364],[0.05963631],[0.05755611],[-0.012353351],[-0.012392538],[-0.012430977],[-0.012426002],[-0.012402114],[-0.012500397],[-0.012698062]],"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.011189804],[-1.8674326],[2.1096756],[0.26339114],[0.5535559],[-1.3430045],[0.54640424]],"dense_1_W":[[0.0008347146,-1.6734533,0.004123626,0.53035754,0.7637235,-0.9993929,-0.0076265903,-1.1400509,-0.25552282,0.5817568,0.0021680437,0.026432207,-0.22946344,-0.39117494,0.1184229,-0.031067535,-0.23829687,0.12487833],[-1.1671325,-1.5989091,2.0931304,-0.6706487,1.7253804,1.9009653,-1.0202484,0.31748152,-0.9233542,-0.087770805,0.3862745,0.24705102,0.082410954,0.15667558,0.30451232,-0.2267331,0.08866649,0.035475973],[1.4456624,-1.5619239,2.466439,-0.93418974,2.2984,1.5268502,-0.90133584,0.3620802,-1.2135332,-0.049564496,0.45319128,0.3234485,0.24712734,0.10689693,0.32506576,-0.07574348,-0.032787975,0.083121665],[0.03307216,-0.6489449,-0.0005701389,-0.13173494,0.8676245,1.2602453,-1.2616234,-0.95231324,0.2632026,0.24062945,0.18689358,0.09292445,-0.24533354,0.3599325,-0.7487064,0.46976736,0.56557786,-0.39855072],[0.05449837,1.5482326,0.0052019306,-0.15240818,-1.3306834,0.37130266,-0.34324887,0.44472352,0.7343325,0.0939915,-0.46491262,0.17091997,0.18282665,-0.13365027,-0.27148074,-0.36316878,-0.074748464,0.39142248],[-1.0103469,1.7473103,0.0042393715,-0.3335703,-1.3267844,1.0646676,-0.57885313,0.06908706,0.5133798,-0.09079333,-0.049777858,-0.17497323,-0.036685776,0.32865825,-0.20434003,-0.10280022,0.05871905,0.14388838],[1.725505,0.67823017,-0.015625048,0.80355895,-0.37574232,1.3815744,-1.3868164,-1.0791757,-1.0506003,-0.19924724,0.47507092,-0.6711824,-0.69669557,0.6993373,0.5932092,0.33117467,-0.40151066,-0.29909366]],"activation":"σ"},{"dense_2_W":[[0.4855691,0.9684355,-0.98692816,-0.31508428,-1.228063,-1.6463718,0.15983118],[-1.1735238,-0.09113564,1.2186227,1.0091687,1.0687741,0.07123165,1.6712769],[0.28951633,0.022773247,-0.3386379,-0.5069151,-0.77005637,-0.30232868,-0.56512755],[0.32825664,0.27628714,-0.42091107,-0.31968302,-0.5112418,-0.47919804,-0.43602708],[-1.2471062,0.785496,0.10179997,-0.31093064,0.5988123,0.70579207,-0.58402646],[-0.6930572,0.83520454,-0.7187977,0.08945707,-0.17269047,0.16038384,-0.48173437],[-1.0064458,-1.0428234,0.6521663,-0.39936963,-0.4934068,-0.6583212,-0.6813975],[-0.7038946,-0.691905,0.10873986,0.033401936,-0.05016936,-0.5048962,-0.7372117],[0.26728374,-0.6021571,-0.82455206,-1.0239568,-0.63041604,0.25164172,-1.5996319],[-0.306726,-0.64836156,-0.18564051,-0.24620682,-1.0371934,0.08292383,-0.1839289],[0.5721492,-0.16167684,-0.14333242,-0.23550391,-0.71259844,-0.46686116,0.045510437],[0.012533767,0.22610848,-0.13282865,0.48579726,0.46268955,0.31126258,0.3202859],[-0.31318545,-0.009125532,0.3056208,-0.08678949,-0.37333733,-0.55968124,-0.2400406]],"activation":"σ","dense_2_b":[[-0.048040356],[0.010551669],[-0.034002457],[-0.09350583],[-0.43931866],[-0.25840852],[0.30683145],[-0.17581052],[-0.207552],[-0.136824],[0.15877321],[-0.2822651],[-0.14438301]]},{"dense_3_W":[[0.1878037,0.7795191,-0.40910757,-0.39871213,0.119621195,-0.41886806,-0.7300552,0.4663937,-0.23213437,-0.34520158,-0.62860143,0.7035117,-0.17154448],[0.2195641,-0.6607046,0.3519602,0.567264,0.17038877,-0.36625072,-0.12122062,0.51718,-0.09198265,0.22301078,0.39600024,-0.23041521,0.023985038],[-0.6850335,0.000747365,-0.18778192,-0.05563331,0.5623896,0.27665734,-0.4172306,-0.26284721,-0.30182174,0.06609348,-0.59820837,-0.047604926,-0.10808185]],"activation":"identity","dense_3_b":[[0.010739073],[-0.028906258],[0.040689796]]},{"dense_4_W":[[0.66164374,-0.6622832,1.1909763]],"dense_4_b":[[0.033283826]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567B0020600'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567B0020600'.json new file mode 100755 index 0000000000..d61947e4ee --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN b'xf1x875Q0910143C xf1x892211xf1x82x0567B0020600'.json @@ -0,0 +1 @@ +{"input_std":[[9.53693],[0.8837301],[0.504074],[0.03892978],[0.8755903],[0.8769705],[0.8770567],[0.85198003],[0.83604085],[0.80722994],[0.7793083],[0.038844477],[0.038851265],[0.03885575],[0.038714577],[0.03858303],[0.03835089],[0.038112696]],"model_test_loss":0.008165956474840641,"input_size":18,"current_date_and_time":"2023-08-14_01-33-05","input_mean":[[18.900034],[-0.040913012],[-0.014206974],[-0.0010526397],[-0.042061422],[-0.043862846],[-0.045665625],[-0.049387835],[-0.04846715],[-0.049707115],[-0.049154304],[-0.0011701209],[-0.0012063662],[-0.0012323125],[-0.0014004245],[-0.0015620717],[-0.0018737207],[-0.0021513186]],"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.05034311],[-0.16049339],[-0.8387054],[0.026724432],[5.6924577],[-6.2590356],[0.09195408]],"dense_1_W":[[0.0013737448,-1.3723408,0.001342769,0.41604844,0.079518534,-1.0992196,0.69320405,-0.20007867,-0.242486,0.10413749,-0.012725727,-0.24533777,0.18676357,0.103152275,0.08449463,0.29623845,0.18195744,-0.28134367],[-0.016047297,-2.1172945,3.6351044,-0.9225221,2.4778526,1.9237944,-1.6851976,1.552848,0.48124325,-0.4579708,-0.9661728,0.5705856,0.2986973,-0.12730876,0.25481766,-0.104712516,-0.47604793,0.4647864],[-0.031255946,4.4344115,0.0115045,-2.06056,2.2306361,3.17809,2.2399688,1.7444073,2.2162871,0.0605305,-1.2824659,0.5707839,0.55752015,-0.3394804,1.3753946,0.6923126,-0.69295144,0.06596876],[0.014996965,-1.4983084,0.0074849236,-0.43667704,1.5386254,-0.71714413,0.8680148,0.0403995,0.1127605,-0.18272513,-0.65287465,0.038639955,0.18207908,-0.26570496,0.6805489,-0.008021424,-0.20940506,0.026279788],[3.619847,0.79453075,1.2752336,0.5329089,0.06674295,0.23762697,-1.6461107,1.7750511,0.34661958,-0.23756266,0.0066114087,-0.15820406,-0.015352938,-0.72475356,0.6494297,-0.19538523,0.06557879,-0.16827972],[-3.801798,1.7125183,1.3432858,0.7638726,-0.91818637,-0.41282243,-0.35768026,1.5054896,0.29776478,-0.27578938,-0.055791046,-0.032674264,-0.68724346,-0.17769502,0.05515912,0.1238052,0.30904874,-0.3660749],[0.040583555,-0.16267918,-0.0029201144,-0.076724455,0.8662686,1.1377587,-0.7607313,-0.54665464,-0.0014566372,-0.29003936,-0.69195867,-0.37417176,0.40961555,0.08589823,-0.49127874,0.55313677,0.120903105,-0.21122085]],"activation":"σ"},{"dense_2_W":[[-0.10612687,0.00028133072,0.10279292,-0.32244202,0.56135786,-0.3038803,0.6117771],[-0.8537405,1.0868497,1.517143,-1.7185221,-1.2330467,1.7012283,-0.35707718],[-0.34067577,-0.13233681,-0.6401421,-0.45288932,0.30520055,0.10491509,0.42614308],[0.21184444,-0.3464179,0.029474478,-0.17789295,0.34473762,0.20484819,-0.21357347],[0.5183205,-0.6048094,0.11201475,0.88285375,-0.5477966,-0.28368485,-0.37010878],[0.7407778,0.0031467904,0.564206,0.3737212,-0.42286292,-0.52992564,-0.5154023],[1.1209921,-0.3645087,0.04481938,0.35292685,0.29335323,-0.14295474,-0.7726177],[0.5309003,0.2573966,0.30485377,0.08541345,-0.1786945,-0.4923706,-0.433013],[0.492245,-0.085702844,-0.55991167,0.99195623,-0.7306447,0.15703674,-0.58475363],[0.1410831,0.33561346,-0.4702111,-0.042534262,-0.34679964,0.0015535586,-0.15639044],[1.221257,-0.62122816,-0.54385215,0.5745175,0.43091094,-0.73388636,-0.3718265],[-0.5161705,-0.109079786,-0.071408875,-0.38007596,-0.44005582,0.045142595,0.05468212],[-0.9730059,1.4277359,2.029946,-3.2277482,2.1687982,-1.6582972,0.904579]],"activation":"σ","dense_2_b":[[-0.0014250523],[-0.5932475],[0.021336202],[-0.016517289],[-0.062387757],[-0.072613515],[0.06306965],[0.019332306],[-0.09633628],[-0.05684373],[0.2125887],[-0.01661518],[0.17361407]]},{"dense_3_W":[[0.5674474,0.546337,0.3743424,-0.273058,-0.5405256,-0.2000324,-0.46903795,-0.5156394,-0.44108075,-0.060869083,-0.40524966,0.19688256,0.70918274],[0.3262551,0.58425474,0.5729054,-0.031375743,-0.041701257,-0.5766777,-0.16657038,-0.31636402,0.15437165,-0.24735309,0.12849659,0.55700594,0.046101455],[-0.097841896,-0.511152,-0.39260116,-0.28767872,0.15554437,-0.16604982,0.43458262,0.05001186,-0.11995932,-0.2560319,0.58787644,-0.45917046,-0.3966601]],"activation":"identity","dense_3_b":[[0.023453068],[0.012939301],[0.18564974]]},{"dense_4_W":[[0.8108035,0.47054186,-0.09254697]],"dense_4_b":[[0.02033851]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN.json new file mode 100755 index 0000000000..420f806e61 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT 8TH GEN.json @@ -0,0 +1 @@ +{"input_std":[[10.3052],[1.1070998],[0.5069369],[0.037658893],[1.0964528],[1.0996523],[1.102182],[1.0794489],[1.0610045],[1.0333265],[1.00464],[0.037511136],[0.03756209],[0.037611235],[0.037606418],[0.03751489],[0.037262734],[0.03702075]],"model_test_loss":0.012260119430720806,"input_size":18,"current_date_and_time":"2023-08-13_22-59-06","input_mean":[[21.415882],[0.017556097],[-0.004099798],[-0.003401093],[0.020456757],[0.019209672],[0.01819574],[0.01823048],[0.019393403],[0.02141286],[0.022404209],[-0.0034443606],[-0.0034451415],[-0.0034438162],[-0.00339113],[-0.003406753],[-0.003565579],[-0.0037500844]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-1.3709847],[-6.2942357],[0.09346686],[6.5184207],[-1.5861837],[-0.014835897],[0.027714923]],"dense_1_W":[[-0.5551179,2.6619074,-0.00640388,0.13290244,-1.037943,0.7656338,0.4283093,0.37328,0.26634002,-0.13999927,-0.15548675,0.097528294,-0.3680248,0.25233808,-0.08934639,-0.015347149,-0.11909841,0.111676104],[-3.5742025,-0.40220144,-1.3790281,0.5485811,-0.050429426,-0.45648634,0.7774281,-1.1217349,-0.6165576,0.1251687,-0.20120902,-0.4511548,-0.13060598,0.22547151,-0.016303696,-0.20157799,0.09675224,-0.07398645],[-0.0012344504,1.1922354,-0.0048953234,0.2634142,-0.6455366,1.3841971,-0.45204964,0.1695878,0.063574985,0.10271839,-0.10217061,-0.08847725,-0.13457958,-0.4961231,-0.5403963,-0.34123054,-0.017704021,0.515054],[3.7061737,-0.9532865,-1.424426,0.6954919,-0.022263907,-0.5896788,1.3645809,-1.1818194,-0.56429285,0.19767563,-0.25111258,0.020198058,-0.52572525,-0.16691986,0.31276083,-0.55734074,0.41006702,-0.19204228],[-0.60735714,-3.3537095,-0.0038090213,0.5654296,1.0198475,-0.6862546,0.08697712,-0.5121695,-0.3346962,0.17586575,0.22113432,-0.08847206,-0.3487319,-0.14522201,0.23490162,-0.18125007,0.10122172,-0.13981529],[0.0017254709,0.62618876,-0.0013352685,-0.0367472,0.040667597,1.5291207,-1.528107,-0.38684332,0.16372706,-0.2591873,0.28832328,0.3641689,-0.24908063,0.1472321,-0.119317986,-0.06420556,0.2222137,-0.2624101],[0.0055754874,-1.8040034,-3.361559,1.0961792,-0.3001131,-0.9308391,1.4269178,0.22353382,-0.4215277,-0.15384597,1.3272976,-0.34549853,-0.6220911,0.38486806,-0.33497638,-0.35858622,0.34940526,-0.16165465]],"activation":"σ"},{"dense_2_W":[[-0.5476146,1.6963724,-1.6546803,0.5176808,0.5235883,-0.97987354,0.7380813],[-0.36497906,-0.2612212,-0.016376352,0.10838414,0.073292136,0.0015826789,-0.50295585],[0.6298286,-0.46785268,-0.16137074,-0.07789413,0.27898172,0.3285615,0.4176234],[0.5922487,-0.34946433,-0.048434507,-0.0985068,-0.6583057,1.0643016,-0.46150544],[0.73731494,-0.6556301,0.81423277,-0.6606677,-0.36022863,0.2516511,-0.49312246],[-0.6430194,-0.41603965,-0.10390351,-0.49625757,0.10309995,-0.22808753,-0.30847374],[0.39266315,-0.15612036,-0.58519137,0.49023283,0.09567495,-1.016928,0.08579332],[0.34867492,0.1914456,-0.21379824,0.041593276,-0.5044442,0.9609127,-0.4119613],[0.37885004,-0.37522417,0.56330055,-0.53145355,-0.91467786,0.5687067,-0.043723527],[-0.57495284,0.46496224,-0.4232346,-0.3390447,0.03577091,0.086310275,-0.06801427],[0.37579545,-0.5779554,-0.16705948,-0.33729044,0.04347679,-0.5497756,-0.24243224],[0.5380365,-0.29537776,0.15974742,-0.5128796,-0.23003492,0.6015878,-0.20965582],[-0.9828622,0.75779086,-1.3404784,1.6249025,0.44636276,-0.6208371,0.7130451]],"activation":"σ","dense_2_b":[[-0.3861388],[0.0100793],[0.05162594],[-0.022311607],[-0.009086858],[-0.23065013],[-0.07641792],[-0.026186304],[-0.23643298],[-0.03883572],[0.021982284],[0.0043940307],[-0.09819139]]},{"dense_3_W":[[0.6619464,0.47387305,-0.55588114,-0.4830425,-0.53887093,0.47769704,0.343591,0.23760638,-0.19049422,0.46038502,0.3466442,-0.52039224,-0.02187165],[0.037034765,-0.5791299,-0.46348968,0.33793876,-0.1364937,-0.17524627,0.48086503,-0.31004375,0.11112415,0.4982084,0.36429304,-0.0013359467,0.5441025],[-0.3904947,0.44045958,-0.18596323,0.615597,-0.032387026,-0.014983241,-0.649624,0.26271734,0.26629633,-0.062090363,-0.37463444,0.5122715,-0.24724658]],"activation":"identity","dense_3_b":[[-0.02654226],[-0.035016984],[0.028202571]]},{"dense_4_W":[[-0.2911369,-0.77550566,0.7692582]],"dense_4_b":[[0.03128059]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT NMS.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT NMS.json new file mode 100755 index 0000000000..f80e89d1ee --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN PASSAT NMS.json @@ -0,0 +1 @@ +{"test_dict":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.835412,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.2336276,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.2189443,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0102171,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.030764546,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7043263,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0948871,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.23544258,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.63234776,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.85114586,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.5361517,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6150184,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.2294357,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-2.1777012,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1220803,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.256643,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.42655924,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.82392097,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.20633036,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8738396,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0698426,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0190142,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-2.2355235,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.11299175,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.7797719,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0755801,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.90929884,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1290616,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.9102107,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.63283235,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.2970404,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0833684,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-2.1911933,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.201447,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.9321379,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.098811716,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.22733232,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.4293779,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6842653,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.1035659,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.7793283,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.7686179,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.107880056,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0867288,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.86887354,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0619769,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1285523,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.69223654,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.7518216,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.0596709,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-2.11871,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.9609706,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.6211437,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.52062637,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2104128,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1836823,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.5248347,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.292731,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.138114,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.2132114,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.27300417,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.26868293,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.64426357,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.08701679,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.024351712,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1174083,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1745512,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.63085973,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.18953863,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.70560896,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.53338933,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-2.187799,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.9880617,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.1916934,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.0533769,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.7911664,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.34528437,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.00016171113,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-2.161565,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.75353914,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.97723967},"input_std":[[8.338225],[1.408846],[1.0394787],[0.03335341],[1.3959996],[1.4030461],[1.407399],[1.384101],[1.3516284],[1.3079585],[1.2541819],[0.033312354],[0.033323247],[0.033341203],[0.033303928],[0.033300698],[0.033334702],[0.0333457]],"model_test_loss":0.016627496108412743,"input_size":18,"current_date_and_time":"2023-07-17_12-56-04","input_mean":[[16.703712],[0.10588005],[-0.010265364],[-0.029445024],[0.10293076],[0.104083925],[0.105137445],[0.10571949],[0.10239706],[0.09606354],[0.09232913],[-0.02939694],[-0.029403588],[-0.02942391],[-0.02959834],[-0.029817479],[-0.030200344],[-0.030651137]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"test_dict_zero_bias":{"[0.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.0787524,"[0.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.35174394,"[0.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.41936088,"[40.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.2337253,"[40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.13621223,"[40.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.49109936,"[20.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.439525,"[40.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.13884512,"[20.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.53931737,"[40.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.73874366,"[40.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.35439628,"[40.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.8166686,"[0.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.47153878,"[0.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.9580405,"[0.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.36217993,"[0.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.5416738,"[20.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.2621055,"[40.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.131006,"[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.7893468,"[40.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.1926978,"[20.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.1279483,"[20.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.3684851,"[0.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3094211,"[40.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.3712977,"[0.0,-4.0,0.0,0.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.7667332,"[0.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.27987432,"[0.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.041331887,"[20.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.1544355,"[40.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.7870656,"[40.0,-4.0,4.0,0.0,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.43408832,"[40.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.23026863,"[40.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3094313,"[0.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.0644252,"[0.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.7976848,"[40.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.99903697,"[40.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.15177456,"[0.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.492374,"[20.0,0.0,-4.0,0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.3808361,"[40.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.9073831,"[0.0,4.0,0.0,0.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.32916206,"[0.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-0.106909096,"[40.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.6694711,"[40.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.2106556,"[20.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.4411385,"[40.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.9513951,"[20.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.412755,"[0.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.2576269,"[20.0,4.0,-4.0,-0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.36055696,"[0.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.6838698,"[20.0,4.0,0.0,-0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3918278,"[0.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-0.8520211,"[20.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.3348066,"[20.0,4.0,-4.0,0.0,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.29837233,"[40.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.697657,"[20.0,0.0,4.0,0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.1919205,"[0.0,4.0,4.0,0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.7850812,"[20.0,4.0,-4.0,0.2,5.2,4.8,4.4,2.8,1.6,0.0,-2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.21019909,"[40.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.42828774,"[20.0,-4.0,-4.0,0.0,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.4563662,"[0.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.8075129,"[20.0,0.0,0.0,-0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.7073532,"[20.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.047708154,"[20.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.3243128,"[40.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-0.003768146,"[20.0,0.0,-4.0,-0.2,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.211508,"[20.0,4.0,4.0,-0.2,2.8,3.2,3.6,5.2,6.4,8.0,10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":1.4588401,"[20.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.4644309,"[0.0,0.0,0.0,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0761973,"[20.0,0.0,-4.0,0.0,1.2,0.8,0.4,-1.2,-2.4,-4.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":-1.3106804,"[20.0,-4.0,4.0,0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":0.5213471,"[20.0,-4.0,4.0,-0.2,-5.2,-4.8,-4.4,-2.8,-1.6,0.0,2.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.5822113,"[0.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.9868801,"[20.0,-4.0,0.0,-0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.0855144,"[0.0,0.0,4.0,0.0,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.31297475,"[40.0,4.0,4.0,0.0,2.8,3.2,3.6,5.2,6.4,8.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":1.2781342,"[0.0,-4.0,0.0,0.2,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,-4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.8265104,"[40.0,0.0,4.0,-0.2,-1.2,-0.8,-0.4,1.2,2.4,4.0,6.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":0.6158317,"[20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]":0.37998584,"[0.0,-4.0,-4.0,-0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2,-0.2]":-1.9141586,"[40.0,4.0,0.0,0.2,4.0,4.0,4.0,4.0,4.0,4.0,4.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":1.0466149,"[40.0,-4.0,-4.0,0.2,-2.8,-3.2,-3.6,-5.2,-6.4,-8.0,-10.0,0.2,0.2,0.2,0.2,0.2,0.2,0.2]":-1.0325543},"layers":[{"dense_1_b":[[-2.837288],[-6.5732856],[-0.36112186],[-2.4264846],[-0.53084093],[-0.17624182],[5.4556284]],"dense_1_W":[[-2.3625484,0.70262957,-0.39007878,-0.52770585,0.35169983,-0.35000876,-0.12762427,-1.0095628,-0.83572966,-0.730048,0.6743538,-0.39424068,0.3901122,0.36599886,-0.011965084,0.045552857,0.4666889,-0.3256988],[-3.6053147,-0.31673837,0.66194737,0.3903138,0.98095685,1.2762904,-1.3785179,-1.296343,0.71970254,0.3438452,0.031964917,0.058328565,-0.058488294,-0.33832067,-0.12332722,0.165694,-0.020551614,-0.050333176],[-0.0041524894,0.520019,-0.04355893,-0.05094888,0.60922056,-1.3748976,0.3093316,-1.0256472,0.19658932,0.052907944,0.0067435564,-0.2945121,0.08360483,0.2436637,0.22430366,-0.12585463,0.044775117,-0.054093584],[-1.7719781,-1.0094852,0.5476492,0.15155911,-0.22202487,0.5499667,-0.17507018,1.3075997,0.97578096,0.32534385,-0.32253557,0.19911957,-0.004920554,-0.44574377,0.3794811,-0.23206042,-0.24507338,0.17988442],[-0.096019216,-2.8020802,0.1768002,-0.11615186,1.0867412,-0.4728857,-0.73343986,-1.899336,-1.1828195,1.287238,0.2246014,-0.3443722,0.40425447,0.11932455,0.0037963327,0.3826241,-0.32104075,0.03184444],[0.18515867,0.15802903,11.005427,0.41247886,-2.3798037,-0.84801793,-0.80931455,1.2942814,1.7535613,0.6347409,1.4362186,0.296623,-0.022977732,-0.60491437,0.034293108,-0.08022964,-0.004915833,-0.13788682],[3.219948,-0.5069822,0.39000142,0.34811074,0.6547,0.5350491,-0.30209413,-0.7547057,0.37530193,-0.46802387,0.3797982,0.29564524,-0.28160524,-0.464101,-0.055149645,0.29884568,-0.052221056,-0.08509861]],"activation":"σ"},{"dense_2_W":[[-0.6509598,0.29119527,0.4522418,0.67029077,0.31190413,0.24329087,-0.13738276],[-0.9829914,3.5774024,-1.8433813,1.6228933,-1.0542817,0.96605825,0.16334952],[-0.07484317,1.7878124,-1.9842395,1.3015918,-0.045502957,0.29070792,0.23896325],[-0.017372472,0.5585439,0.38864908,-0.11616016,0.5211495,0.2445178,-0.0821982],[-2.9980035,3.602488,-0.73448294,0.5120281,-1.5761098,1.7105227,2.7474566],[-1.0895693,-0.061832696,1.3823732,0.36133802,-0.51309395,0.6033679,0.18768047],[-0.8188117,0.44345558,1.1498142,0.86907035,-0.38104993,0.18720235,-0.23738712],[0.06584014,-0.61574376,-1.1880105,-0.40490726,-0.46003637,-0.014412597,0.44476265],[2.0212123,1.1144648,-1.0255187,0.9472248,-0.3807562,-3.1219852,-3.644532],[0.0436852,2.2160454,-1.5884769,1.0859653,-0.51730025,0.06356327,0.016509296],[-1.2976134,3.8786354,-1.172869,1.3448112,-1.3144706,1.0707655,0.20357744],[0.3019769,-0.77098906,0.3424374,-0.59369296,0.26005548,-0.20149492,-0.72477216],[0.31829432,0.14789248,-0.20679975,-1.3688983,0.721357,-1.155302,-0.35438472]],"activation":"σ","dense_2_b":[[-0.034817904],[-0.39495024],[-0.16561012],[0.023161512],[0.054840133],[-0.034001518],[-0.05686173],[-0.026203524],[-0.6473888],[0.28907722],[-0.38862142],[-0.091984995],[0.02006307]]},{"dense_3_W":[[-0.2560296,-0.47561207,-0.2180975,0.2697371,-0.28709534,-0.2907532,0.06514903,-0.08777709,0.07678251,-0.14984281,0.20281981,0.027406089,0.26574254],[0.30667484,0.5253529,0.52860755,0.22304007,0.63340044,-0.8269798,-0.36970806,-0.1585502,-1.241306,0.16619857,0.5249275,-0.19621038,0.32695386],[-0.64127594,0.27470827,0.028331403,-0.32301947,0.6665432,-0.8246224,-0.33862486,0.38033482,-1.4627537,0.2530845,0.40247354,-0.49841896,0.30732566]],"activation":"identity","dense_3_b":[[0.06380872],[-0.13593788],[-0.05554244]]},{"dense_4_W":[[-0.17066109,0.67130095,0.99185157]],"dense_4_b":[[-0.057568375]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521A60604A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521A60604A1'.json new file mode 100755 index 0000000000..7fb76b4823 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875Q0909144ABxf1x891082xf1x82x0521A60604A1'.json @@ -0,0 +1 @@ +{"input_std":[[7.3289046],[0.53865254],[0.34363064],[0.03131177],[0.5423575],[0.5418235],[0.5407688],[0.52266824],[0.5094745],[0.48748496],[0.4674636],[0.03126794],[0.03127153],[0.03128563],[0.031270076],[0.03110797],[0.03086513],[0.030758223]],"model_test_loss":0.0065342518500983715,"input_size":18,"current_date_and_time":"2023-08-14_02-51-07","input_mean":[[19.854994],[0.02852481],[-0.008394549],[0.003052669],[0.02878524],[0.02829884],[0.027643727],[0.02405635],[0.020893725],[0.016066605],[0.01561026],[0.0030796202],[0.003104916],[0.0031055945],[0.0029775568],[0.002796068],[0.0024804338],[0.002308984]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[2.6401606],[-0.041325524],[2.5215666],[-0.041392956],[-0.07687011],[-0.052842032],[0.6748459]],"dense_1_W":[[1.5242575,0.35627735,0.5635576,0.35448948,-0.3953701,0.3265091,-0.577471,0.6584769,0.71018475,0.10515297,-0.2427247,0.35898077,-0.40721607,0.08450537,-0.267958,0.29337814,0.22232342,-0.60763425],[-0.007026347,0.4657935,0.03749239,-0.34094924,-0.075710565,1.4064182,-0.8528577,-0.318615,-0.31381673,-0.27045733,0.42012632,0.26428086,0.100735106,0.08037723,-0.32698122,-0.06074372,0.10325446,0.084082514],[1.5156735,-0.47489092,-0.55053735,-0.40526438,0.23048405,-0.529619,1.1181229,-0.79596174,-0.5320006,-0.09871097,0.1812741,0.49836755,-0.17353886,-0.3646145,-0.006225405,0.0969328,-0.3082221,0.6313902],[0.0070438217,0.7177413,0.070641816,-0.64644647,-0.12578073,0.66291285,-0.6603725,0.18909127,0.08034264,-0.34289366,0.10820179,0.43800563,0.67992795,-0.8538587,0.0030815017,-0.07758179,-0.0855604,0.29938003],[-0.0004627711,-1.4414465,0.07495133,-0.05092367,1.1927464,-0.67879677,0.27852902,-0.583847,-0.81228834,-1.3539568,1.3550432,0.112276375,-0.4907178,0.40841964,0.12346382,-0.22612214,0.6329694,-0.4437507],[0.032261487,0.8911769,6.108131,-0.61734253,0.65491176,1.4899205,-0.34530422,-0.21132824,-1.4898846,-0.43324688,0.5005588,0.4327097,-0.017908085,-0.6668785,0.5833861,0.35305926,0.3997379,-0.51656204],[-0.0018498964,-2.6991417,0.16747902,2.187501,0.53372544,-0.109926574,0.43455476,0.45718986,1.8602107,0.25133002,-0.8681649,1.2997736,1.6204847,2.1496859,0.14778936,-0.49531916,-0.78723556,0.98850256]],"activation":"σ"},{"dense_2_W":[[0.24454884,0.35007536,0.2867137,0.09012383,-0.38733336,-0.49449205,-0.13559741],[0.23089275,-0.5370107,0.09162375,-0.51357645,-0.23495477,-0.06315045,0.11455118],[-0.0063527166,-0.053212985,-0.27540293,0.70994335,0.10962871,-0.14789675,-0.27231297],[-0.50261515,-0.46583286,0.3427541,-0.3748585,0.4016677,0.23851554,0.2952814],[0.06376815,0.26943728,-1.2382541,0.044812873,-0.28141838,0.35423744,0.5646739],[0.56663376,0.6105675,-0.81973964,0.83144623,-0.34869766,0.23554252,-0.2855648],[-0.06491405,0.21282296,-0.25241178,-0.5098676,0.40169764,-0.33915997,-0.37829182],[-0.058915704,-0.52073437,-0.3808913,-0.58914316,0.48207447,-0.14773318,-0.15192641],[-0.0054449504,-0.52427745,-0.17092238,-0.5706592,-0.35192126,0.19167943,0.4108363],[0.26346433,0.5781188,-0.20278165,0.68046784,-0.7055976,0.06091033,-0.2715019],[0.46802843,0.29305348,-0.48767036,0.76116073,-0.5743784,0.018987808,-0.2706612],[-0.35490564,-0.39351743,-0.22781888,-0.273698,-0.4345575,-0.21557479,-0.41541457],[0.8614721,0.42754713,-1.2491077,1.2331724,-1.1045619,0.7123346,-0.33662388]],"activation":"σ","dense_2_b":[[-0.01874273],[0.009371876],[-0.036509376],[0.0034165683],[-0.30991253],[-0.35229847],[0.10235407],[0.14266653],[0.034850482],[-0.112194695],[-0.09342103],[0.0710196],[-0.2241445]]},{"dense_3_W":[[-0.17080562,0.32143503,-0.17581414,0.56947404,-0.055805363,-0.20806669,0.13803789,0.5370566,0.37103105,-0.48028666,-0.10460543,0.6821912,-0.0842912],[0.30726758,0.058517847,-0.33661544,0.21711047,-0.37768382,-0.26146904,0.51983565,-0.07036411,-0.032129124,-0.37549922,-0.3525898,-0.053472064,-0.68903774],[0.16374777,0.41130075,0.054798886,-0.5551823,-0.10899548,-0.13250633,-0.39466566,-0.3571533,-0.1534892,0.39225924,0.6325772,-0.3902483,-0.3982242]],"activation":"identity","dense_3_b":[[0.05099233],[0.06483823],[-0.004630559]]},{"dense_4_W":[[-1.2006958,-0.80405784,0.03314714]],"dense_4_b":[[-0.055501234]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571A60634A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571A60634A1'.json new file mode 100755 index 0000000000..dea8295e8d --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571A60634A1'.json @@ -0,0 +1 @@ +{"input_std":[[5.0083737],[0.42046377],[0.20520201],[0.02763439],[0.42246833],[0.4221625],[0.4216298],[0.41341385],[0.40692678],[0.4022001],[0.40219635],[0.02748101],[0.027535422],[0.027579376],[0.027645623],[0.027637415],[0.027440004],[0.027380727]],"model_test_loss":0.004143005236983299,"input_size":18,"current_date_and_time":"2023-08-14_03-41-29","input_mean":[[25.47412],[0.19958466],[-0.017220736],[0.0033158686],[0.2047261],[0.20301075],[0.20060319],[0.19406201],[0.19408248],[0.19245343],[0.19168448],[0.0033969714],[0.0033646896],[0.003344533],[0.0033792283],[0.0033883466],[0.003463568],[0.003644856]],"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.1657069],[-1.9022597],[0.3573439],[-0.44420108],[-0.100230284],[-1.7269558],[1.1205612]],"dense_1_W":[[-0.00092326954,-0.422309,-0.17512406,0.5054023,0.14710678,-0.25678113,-0.20028122,0.06749457,-0.2863628,0.3886345,0.05361403,-0.08413107,-0.43366045,0.06432067,0.48437363,0.014648756,-0.0020482785,-0.14993115],[-1.1023697,0.34174618,-0.28158325,0.4212608,0.5830523,-1.0980513,-0.25991014,0.3546678,0.20719239,-0.46449193,-0.019278029,0.010792962,-0.7601846,0.5799624,-0.13653645,-0.17269216,0.084417485,-0.021036232],[0.00030671473,-0.39266655,0.29377759,-0.48246792,-0.38019815,1.1431502,0.58916605,-0.018903274,0.3098398,-0.035918158,-0.3678466,0.37013093,0.29870456,-0.03076149,-0.14486301,-0.084633216,-0.0988374,0.20422511],[-0.36138636,0.81817955,1.8987099,-1.1200192,-0.11336604,0.17895934,0.043662008,-0.21876605,0.45478925,-0.03689186,1.0078938,-0.30329502,-0.35860255,-0.62149346,0.022846708,0.12703322,0.18421635,0.35560572],[-0.5364841,0.1453418,-3.6584685,0.6151252,0.5582709,-0.2691487,0.023903158,0.5754364,-0.116071,0.37825516,-0.19200331,-0.2248982,-0.3850075,0.30770153,-0.17167693,-0.45830363,-0.046138637,0.21326888],[-1.162092,0.10568817,0.29473102,-0.27880898,-0.36157534,0.5742935,-0.0031682379,-0.08621305,-0.23101984,0.35677135,0.0148600945,-0.27795824,0.62892383,-0.46830806,0.3602908,0.03294911,0.27180216,-0.26759154],[-0.0180816,0.7662361,-0.22583437,-0.8438566,0.50242615,0.43400842,0.30508512,0.012276164,0.968684,0.8544783,0.46200368,-1.9207745,-1.1937202,-1.0721608,-0.21986486,-0.48469168,0.2959894,-0.856707]],"activation":"σ"},{"dense_2_W":[[-0.5470442,1.7217759,-0.1470755,-2.4646258,0.0037959144,1.3074782,-0.05712827],[-0.3711513,0.41745117,0.4496939,-0.20902565,-0.2925513,-0.26379028,0.41135114],[0.6467387,0.12482949,-0.6287757,0.12178349,0.19214922,-0.32433525,-0.4479245],[-0.23320459,-0.29114887,0.06960925,0.40295774,-0.38662457,0.1818995,0.5802863],[-0.66332686,-0.09888686,0.31044513,0.16627274,0.09730392,0.56536597,-0.31096095],[0.6163865,0.44544005,-0.5907308,0.33815238,-0.42669207,-0.7298953,0.19980703],[-0.5976602,-0.6812888,0.024319809,0.10030743,-0.078346655,0.2787135,0.20778744],[0.32584617,0.49106023,-1.2814318,-0.50078326,0.2115034,0.40731817,0.0049111852],[0.739966,-0.18427776,-0.57610196,0.009918123,0.18318374,-0.27952188,-0.073271],[-0.26890662,0.32813534,0.45242321,0.28769568,-0.1091229,0.36858273,-0.5646969],[0.065649405,-0.595555,0.6637816,-0.50877273,-0.025255747,0.29801172,-0.089912675],[-0.6580612,-0.53460723,0.64502347,-0.037672743,-0.38733548,0.35739285,0.37566775],[-0.26895392,-0.2532778,0.6466152,-0.32872054,0.4610569,0.42680815,-0.289281]],"activation":"σ","dense_2_b":[[-0.57801545],[-0.02487967],[0.046223283],[-0.011919688],[-0.023250999],[-0.0042634523],[-0.27497166],[-0.09866434],[0.012610335],[-0.08247934],[-0.036527302],[-0.05259078],[-0.031590052]]},{"dense_3_W":[[-0.16326903,0.5243444,-0.63081026,0.28322223,0.2934153,-0.31467402,-0.329545,-0.36580902,-0.37401882,0.12621103,0.3331115,0.6052953,0.48938477],[-0.09900888,-0.06063517,-0.17130663,0.1667584,0.16381904,-0.6082081,0.013274949,0.15247221,-0.03997433,0.18612197,0.2806802,-0.11156396,-0.3359548],[-0.2837178,-0.44840294,-0.004694435,0.29237515,0.55196846,-0.6161363,0.57095647,-0.11839446,-0.61730903,0.038825605,-0.19622047,-0.21944387,0.1243949]],"activation":"identity","dense_3_b":[[-0.00747683],[0.002752381],[0.0026605453]]},{"dense_4_W":[[0.95164365,0.30194584,0.58023304]],"dense_4_b":[[-0.005728339]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571A62A32A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571A62A32A1'.json new file mode 100755 index 0000000000..616751a758 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QF909144B xf1x895582xf1x82x0571A62A32A1'.json @@ -0,0 +1 @@ +{"input_std":[[4.626944],[1.0619773],[0.5539984],[0.03671154],[1.0561126],[1.0578535],[1.0594684],[1.0446345],[1.0212003],[0.9992795],[0.97770816],[0.036627006],[0.036641616],[0.036646295],[0.036549233],[0.036383647],[0.036169644],[0.035927355]],"model_test_loss":0.0056040422059595585,"input_size":18,"current_date_and_time":"2023-08-14_04-08-06","input_mean":[[18.489305],[0.07716587],[0.008159927],[0.014758759],[0.07426559],[0.07554208],[0.07664342],[0.07870349],[0.07942318],[0.08122073],[0.081623584],[0.01484478],[0.014833818],[0.014823983],[0.014814751],[0.014938193],[0.015166377],[0.015501372]],"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.036457997],[0.19156031],[-0.01508866],[-0.052175455],[-1.0038084],[-0.2074287],[0.15170857]],"dense_1_W":[[-0.004964838,-1.1980921,-0.029613819,0.28823835,0.7013706,-1.2906415,1.0065259,0.23381212,-0.046492662,0.120659865,-0.098360516,0.0062270476,-0.46386242,0.12284296,0.059551295,0.09112548,-0.055498406,0.0027111673],[-0.005198727,-0.6752965,-0.6080775,0.20275135,-0.29710057,-0.85021347,1.3533522,-0.21732911,-0.22854595,0.19577463,0.321285,0.06076337,-0.03275157,0.36474285,0.042674348,0.2598862,-0.103289686,-0.21956365],[0.0043494096,1.2409916,-0.01650288,-0.41806248,-0.08088325,0.98173875,-1.6316887,0.25142598,-0.23021263,0.13534379,-0.04843492,0.2575174,-0.08009086,0.22280405,-0.25962964,0.00019480381,0.12492345,-0.028998379],[-0.022095788,-1.111526,-1.9763997,0.3185457,0.14024144,-0.6664468,-0.16739945,0.08738434,-0.60685486,-0.28227818,-0.7769675,0.566913,-0.007644112,0.31493762,-0.40619445,-0.13403314,-0.16620153,0.035001427],[2.3655212,-0.5150374,0.31141245,0.065676264,0.18930423,-0.98876,0.43160492,-0.045166675,0.059209798,0.23501736,-0.13611424,-0.24918106,0.25709474,0.4468884,-0.01140312,-0.14684597,0.13040915,0.03804596],[-0.0047277273,-1.1999024,0.022677707,0.06893214,0.0034417252,-0.7617319,0.74206394,-0.28641677,0.043607976,-0.16808808,-0.11143388,-0.27479768,0.041559022,-0.29644537,0.16951554,0.16085929,-0.14372928,0.19972724],[0.0015725193,1.8013598,6.0048485,-0.31310147,-1.4716569,-0.32186383,-0.67218703,0.2699829,0.8223929,-0.39775306,-0.27570257,0.1735122,0.34330562,-0.11839002,0.112108946,0.0284751,-0.42073828,0.32494405]],"activation":"σ"},{"dense_2_W":[[-0.8274989,-0.26683718,1.1221086,-0.4967123,-0.15982957,-0.5157279,0.5409362],[-0.4282439,-0.28969744,-0.15959398,-0.31986535,0.06426711,0.045167804,-0.12751547],[0.75156754,0.5139446,-1.6046362,0.22225763,-0.17358594,0.4643068,-0.56141883],[-0.64656496,-0.31969824,-0.3383586,-0.24736834,-0.115212455,-0.28582263,-0.29819226],[0.02432829,0.59469664,-0.15138043,-0.5656801,-0.5094818,0.7270511,0.70142233],[0.8166905,0.17791738,-0.7938446,-0.41242573,0.15946935,0.010435327,-0.07871756],[-0.50170904,-0.70214444,-0.09667413,0.06173317,-0.34481144,-0.05702854,0.28547388],[-0.4316806,-0.69494605,0.35303894,-0.32337648,-0.11162086,0.16142549,0.046552487],[-0.47061762,-0.033296604,0.48481578,-0.1644464,-0.35995185,-0.9828825,0.48374155],[-1.1422112,-0.30554995,1.0520233,0.11161053,-0.34157068,-0.3464864,0.44715127],[0.32906184,0.24655321,-1.2441839,0.40368524,-0.26899955,0.26253235,-0.47163612],[0.89605176,0.21842143,-0.18375918,0.25550878,-0.17637666,0.18975225,-0.01678542],[0.015940731,-0.25979605,0.025350504,0.27074146,0.4475809,-0.68709433,-0.6171181]],"activation":"σ","dense_2_b":[[0.1036446],[-0.24618293],[-0.3107517],[-0.14251111],[-0.00010030766],[-0.22231226],[0.03811995],[-0.24698843],[-0.056234393],[-0.024014654],[-0.121909596],[-0.21749336],[-0.3809104]]},{"dense_3_W":[[-0.38996089,0.41667554,0.31174377,0.48924834,0.5464652,0.17986193,-0.29639804,-0.6972503,-0.61368924,-0.2425055,-0.19786963,0.30278218,-0.1469855],[0.6355902,0.08049979,0.111204624,0.19977798,-0.1947918,-0.59491324,0.29035076,-0.23108244,-0.28247926,0.31540954,-0.2722785,-0.37643728,0.39918077],[0.39822328,0.36373773,-0.40062055,0.33348098,0.038394526,0.16810612,0.16263756,-0.26843348,0.23122968,0.11646639,-0.6678012,-0.30025852,-0.23330888]],"activation":"identity","dense_3_b":[[-0.03313786],[0.042609334],[0.039157733]]},{"dense_4_W":[[-0.6706609,0.49312,0.83626646]],"dense_4_b":[[0.032975886]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM907144D xf1x891063xf1x82x002SA6092SOM'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM907144D xf1x891063xf1x82x002SA6092SOM'.json new file mode 100755 index 0000000000..9c07f0aa4c --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM907144D xf1x891063xf1x82x002SA6092SOM'.json @@ -0,0 +1 @@ +{"input_std":[[4.846948],[0.81105536],[0.41403648],[0.035652053],[0.8037867],[0.8062848],[0.8087894],[0.80610657],[0.8037343],[0.80183107],[0.7975248],[0.035562087],[0.035535168],[0.035516404],[0.03546272],[0.03543645],[0.035458043],[0.03562561]],"model_test_loss":0.007874921895563602,"input_size":18,"current_date_and_time":"2023-08-14_04-32-42","input_mean":[[25.956413],[0.047174964],[0.009190482],[0.0044681234],[0.04175229],[0.04260476],[0.04351004],[0.047875065],[0.04891037],[0.052666083],[0.061359685],[0.0043021124],[0.0042939777],[0.004301477],[0.0043947003],[0.0044108145],[0.004389884],[0.0046027442]],"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.059979655],[0.069013156],[-0.8281847],[-0.11142841],[0.03955072],[0.12549742],[0.783418]],"dense_1_W":[[0.0030481117,-1.0549505,-0.006972525,-0.15595584,0.7840362,-0.69210386,0.17925914,0.04507908,-0.14131218,0.34102848,-0.09225534,0.20323838,0.0819431,0.9120782,0.1297282,-0.11015781,-0.3067628,0.021845477],[-0.00080558297,0.73653907,-0.001798047,0.1313806,0.068776235,0.49522364,-0.2105799,-0.21456197,0.21042615,0.21957193,-0.11765698,0.51994056,-0.4339728,-0.023908615,-0.16695696,-0.176756,0.12341636,0.058519702],[0.7222947,-0.17934859,-0.003890196,0.09484328,-0.38000545,-0.3075813,0.13792701,0.11271669,-0.0005278281,0.12689501,-0.20993122,-0.44905135,0.33738986,0.07277459,0.38528377,0.106667824,-0.18891095,-0.019514121],[0.06560848,0.40144962,-0.12956662,-0.055643696,-0.049663123,0.86327803,0.34819037,-1.1415983,-0.24294508,0.45161903,0.5174569,-0.9724499,-1.1054265,-0.59140885,-0.121702924,0.53453803,0.77787405,-0.24458599],[-0.0030644669,0.26243958,2.1391315,0.06857931,0.5363525,0.25445628,-1.2047125,0.7697752,0.24485303,-0.06228338,-0.7510021,0.23437755,-0.09784092,-0.7235852,0.8837979,-0.17948864,-0.2157018,0.034686614],[-0.012706729,0.3920872,-0.010908032,0.7358326,-0.03599182,1.3597629,-0.43022266,0.15597473,-0.40719056,0.706777,-0.19327079,1.2462306,0.75319684,0.3395795,-0.40832612,-0.33334768,-0.996102,-0.89866537],[-0.7431401,-0.29369017,-0.000105630024,0.29781067,0.013087427,-0.94798666,0.5259348,0.116058856,-0.11235733,0.16232441,-0.17218283,-0.32375956,-0.22164673,0.4142412,0.20824604,0.059222106,0.097304516,-0.18275806]],"activation":"σ"},{"dense_2_W":[[0.97417414,-1.1549966,0.8853947,-0.26468486,-0.8227154,-0.09399993,0.6159557],[0.10204023,0.86626434,-0.28335205,-0.5750978,-0.302103,-0.27426735,0.01522395],[-0.6768031,0.79712826,-0.79459053,0.26956165,-0.17597227,0.324712,0.077839725],[-0.38779014,0.96340615,-0.12227216,0.28462237,0.7044941,0.4787453,-1.0882279],[-0.39657563,0.5794276,-0.7634172,0.18103188,0.61563504,0.50122654,-0.9383998],[-0.5073624,0.12485382,-1.1825857,-0.4041146,0.5108791,0.44801873,-0.51704717],[-0.6595412,0.6669609,-0.5334947,0.17545679,0.407928,0.019941911,-0.7399486],[0.09550178,0.2438875,-0.04877144,-0.0019337976,-0.019350123,0.43442073,-0.3072027],[0.80995226,-0.28730962,1.149432,-0.2670333,-0.55623615,-0.36270526,0.27021706],[0.09230979,-1.2384902,0.96683645,0.50837046,-0.8388565,-0.06853885,0.9245854],[1.0689826,-0.6658299,0.6486111,-0.6554747,-0.64078957,-0.24539684,0.73077625],[0.08056471,-0.6417475,0.4964616,-0.12449939,0.18329845,-0.2311192,0.6783663],[0.45767495,-0.28652194,0.19447622,-0.08870219,-0.18199718,0.025115477,0.29550073]],"activation":"σ","dense_2_b":[[-0.028785199],[0.06734204],[0.0311671],[0.090430334],[0.0499396],[-0.06613649],[0.1572726],[-0.0020371592],[0.04266869],[-0.13803189],[-0.3047031],[-0.07539335],[-0.12442536]]},{"dense_3_W":[[0.66223514,-0.1747075,-0.50954103,0.29728493,-0.46075493,0.13727571,-0.18393758,0.39366758,-0.47327036,-0.01879659,0.23903094,-0.32678747,0.30671299],[-0.28180516,0.2469839,0.22324938,-0.2998403,0.6316917,0.14390591,0.63533956,-0.254778,0.22968335,-0.3778501,-0.41270712,0.3120054,-0.44822124],[0.27459204,-0.42109582,-0.24014448,-0.592849,-0.33828726,-0.17524625,-0.42107752,-0.20445393,0.48335218,0.67310184,0.1951032,0.5667199,0.19647887]],"activation":"identity","dense_3_b":[[0.020020232],[-0.07193015],[-0.029508086]]},{"dense_4_W":[[-0.022750493,0.059219737,-1.015219]],"dense_4_b":[[0.02894119]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A60604A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A60604A1'.json new file mode 100755 index 0000000000..6ef36a3b0e --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A60604A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.254052],[0.9806163],[0.4231999],[0.04356696],[0.97200865],[0.97504586],[0.97775066],[0.9591673],[0.93643886],[0.9057191],[0.87526655],[0.043427564],[0.043460514],[0.04348194],[0.043345723],[0.04318236],[0.042914458],[0.042423796]],"model_test_loss":0.01540292613208294,"input_size":18,"current_date_and_time":"2023-08-14_04-58-24","input_mean":[[22.365421],[0.0019552947],[-0.026129048],[-0.010464547],[0.010480075],[0.008010973],[0.0055930708],[-0.003615944],[-0.008296312],[-0.0115947],[-0.015986588],[-0.010414467],[-0.010435414],[-0.010465159],[-0.0105609745],[-0.010642022],[-0.010804179],[-0.01103055]],"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.3185732],[-2.5867317],[-2.4119403],[0.28416687],[-0.02702185],[-0.16531649],[-1.1527723]],"dense_1_W":[[-0.022257918,0.8040401,1.287335,-0.23689313,0.4893548,0.8433865,-1.0691862,0.36647147,-0.24386124,-0.13633506,0.07477291,0.35244244,-0.43019938,-0.6580194,1.0880467,0.6347402,-0.6914378,-0.037980463],[-0.56894374,-1.8446071,-0.21028358,-0.47825742,0.16942668,-0.94593054,0.7141977,-0.758547,-0.13884988,0.05721294,0.30957872,-0.33949006,0.0921146,0.3615484,0.45655683,0.082172595,-0.034271725,-0.09097419],[-0.57559276,1.5042158,0.20520714,0.51569813,-0.5431699,1.0341207,-0.09032631,0.61960757,0.2701506,-0.12109735,-0.30678055,0.3720596,-0.1883834,-0.13189395,-0.6962025,-0.23011449,0.23485538,0.07106131],[1.9175196,-0.06870724,-0.009685604,-0.58994263,-0.77743906,3.5469222,-1.9311298,-1.4536422,0.6789666,0.19781737,0.060366552,0.70214975,0.28552058,-0.94600236,-0.61913157,-0.25661743,0.2521842,0.38764063],[0.015907988,-1.8861995,-0.12928374,-0.5463564,0.70329434,-0.4612843,-0.5395861,-0.92044824,-0.56931007,0.18662772,0.5002842,-0.6624107,0.047241144,0.21043116,0.9085904,0.34524617,0.17921534,-0.5345244],[-1.9607425,-0.17032151,-0.002710183,-0.49269548,0.46140772,1.5506655,-1.4574836,-0.75262254,0.28762928,0.4009911,-0.041949093,0.4422491,0.080314584,-0.4521053,-0.95743835,0.08831782,0.12635101,0.36157072],[-0.17528914,0.014480862,9.194567,-0.027118178,0.21340506,0.25479296,-0.08499456,-0.3819038,-0.08245096,0.14458492,0.012424778,0.1363471,-0.2180041,0.12804921,-0.06768428,-0.14581227,0.28676355,-0.40200242]],"activation":"σ"},{"dense_2_W":[[-0.13735515,-0.36693308,0.31717214,-0.16753168,-0.5315297,0.06383681,0.16398782],[0.5107664,-0.41147742,0.23399776,0.12284709,0.52509624,0.26873505,-0.84280556],[-0.5975781,-0.13184041,-0.43245456,-0.19741607,0.24153347,0.23864448,0.06348907],[0.44337207,-0.14361665,0.30699468,0.24923041,-0.5986253,0.55096453,-0.21386127],[-1.0883859,0.18649225,-0.14793696,-1.1706864,-0.18842566,0.8806919,-1.1581444],[-0.5192367,0.63482714,-0.30454943,-0.74983114,0.76898384,-0.29513043,-0.23884358],[-0.16692421,0.085194685,-0.57313204,-0.52969104,-0.35271636,-1.3866607,1.0940571],[-0.36982897,0.1070417,-0.7242904,-0.21129967,0.85419685,-0.09256855,-0.12815432],[0.37570813,-0.4983966,0.25351462,-0.5352563,-0.885784,0.38207167,0.55912787],[-0.17706849,-1.1736196,0.78014624,0.64170426,-1.0116245,0.13409959,0.2723705],[0.03780842,0.36266404,-0.056093358,0.700982,0.25742763,-0.730712,-0.10212599],[-0.043599892,-0.896462,0.67346543,0.49555147,-1.0908926,0.36215103,0.34307495],[-0.17067212,-0.19787733,0.29983255,-0.04538142,-0.62211144,0.052005216,-0.114241906]],"activation":"σ","dense_2_b":[[-0.17325053],[0.06832358],[-0.13694412],[-0.0011346783],[-0.34375873],[0.09270055],[-0.21357837],[0.020085877],[-0.38013837],[-0.26146224],[0.28615406],[-0.21359953],[-0.09619647]]},{"dense_3_W":[[-0.038358208,-0.31359997,0.20052825,-0.560843,0.7097384,0.6719386,0.36616954,0.36791024,-0.2366012,-0.4499782,0.6078685,-0.6232705,-0.3668057],[0.16431291,0.039036777,-0.11336356,-0.427402,0.681554,0.11661078,0.24273938,0.17969954,-0.42864278,-0.5946742,-0.076663315,-0.23562627,0.17208236],[-0.4079696,0.60386187,-0.0019695666,-0.55016863,-0.15872847,-0.4558569,-0.19035904,-0.2832483,-0.5238773,0.42874604,0.13831717,0.07666673,0.6144315]],"activation":"identity","dense_3_b":[[0.05688099],[0.09056785],[0.068805546]]},{"dense_4_W":[[-0.9861829,-0.23317513,-0.07935023]],"dense_4_b":[[-0.055984028]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A60804A1'.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A60804A1'.json new file mode 100755 index 0000000000..0b94ed5748 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN b'xf1x875QM909144C xf1x891082xf1x82x0521A60804A1'.json @@ -0,0 +1 @@ +{"input_std":[[8.714143],[0.9927753],[0.42477676],[0.03973602],[0.9727292],[0.9798503],[0.98615247],[0.97174776],[0.9597771],[0.9394966],[0.9168747],[0.03964375],[0.039681226],[0.039701194],[0.039581764],[0.03947426],[0.039269768],[0.039058764]],"model_test_loss":0.013159733265638351,"input_size":18,"current_date_and_time":"2023-08-14_05-25-10","input_mean":[[23.218801],[-0.033690505],[0.0024943613],[-0.0032879899],[-0.03312757],[-0.033911895],[-0.034462307],[-0.03274429],[-0.03286793],[-0.032002535],[-0.030374872],[-0.0032268409],[-0.0032460035],[-0.0032604784],[-0.0032413462],[-0.0033537117],[-0.003547709],[-0.0038500645]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[1.7959027],[0.55505973],[-2.3768406],[-0.16383298],[-1.7668463],[-0.4719505],[0.8295408]],"dense_1_W":[[1.0514657,0.4917108,6.960775,0.040523,-0.8114545,-0.42457384,-1.5367419,0.18918777,0.37774196,-0.3243656,-0.40481222,0.39827186,0.41831338,-0.6198045,0.4753863,0.48323017,-0.06107707,-0.16029453],[0.15152642,-2.5568774,-0.001119578,0.028153164,0.5115196,-0.57825077,0.49559352,-0.05674371,-0.0267328,-0.046980154,0.10357833,-0.18090251,-0.26617435,0.29677737,0.7249489,-0.03468213,-0.005596551,-0.18188117],[-1.5674329,-0.4283582,1.070279,-1.1344318,1.4361267,1.2410127,-1.8508538,0.25674936,0.4047672,-0.51887536,0.45543274,0.3743945,0.40804172,-0.96260333,1.0525509,0.5583048,0.18581861,-0.49588192],[-0.4904594,0.052873794,-0.54584765,-0.6538562,0.33124956,0.3054544,-1.2273709,-0.04424467,0.07750318,-0.052387144,0.023881147,0.7269529,0.48401436,-0.44175398,-0.3785952,-0.19174287,-0.05213665,0.36695448],[-1.3100109,0.08232854,-0.8303036,0.92385757,-0.83452135,-0.93788815,1.2850705,0.0645516,-0.5059019,0.36357152,-0.27048874,-0.8359992,0.10816168,0.91588885,-0.93813425,-0.54902464,0.11485201,0.2426489],[-0.27612093,0.5894454,6.7886415,-0.42007807,0.8136479,0.48477572,-0.015306809,0.33938614,0.8966847,0.118165955,-2.203581,0.19513792,0.51539826,-0.080586016,0.2052024,-0.5273732,-0.1945807,0.35707137],[0.25792342,1.6364664,-0.001792033,0.22856699,-0.13199906,0.77897304,-0.0359948,-0.20382008,0.035235707,0.025847819,0.08331019,0.11043304,-0.07570084,-0.11650494,-0.47634286,-0.33599797,0.118242994,0.15796357]],"activation":"σ"},{"dense_2_W":[[0.5116447,-0.092584796,-0.10705274,-0.17041756,-0.14934607,-0.12380058,-0.057289656],[-0.22088462,1.2812711,-0.46391612,-0.3160566,0.76806194,-0.5649681,-0.7918618],[0.045260437,-1.6188258,0.68774945,0.020580687,0.1319073,0.50655997,0.10069625],[-0.028886491,-0.22777122,-0.09551939,-0.4077626,-0.44366226,0.27823326,-0.3208229],[-0.7618065,-0.5159872,-0.7606131,0.15979978,-0.03456325,0.005977178,-0.45774835],[0.6098429,-0.79085386,-0.18997884,-0.008630259,-0.81565344,0.6787126,1.1412653],[-0.06353774,-0.79416084,0.293484,-0.120535955,-0.25111738,-0.113088645,-0.19914077],[0.2501803,-1.7164524,0.696637,-0.5307749,0.5375581,0.4207089,0.35805798],[-0.071142145,-0.6921994,0.23711675,0.17744231,0.16084164,-0.30682364,0.16035682],[0.9792056,-0.37842458,0.935338,-0.038432624,0.91073805,0.69246453,0.37750706],[0.396947,0.3347981,-0.5091141,-0.5149633,0.1858322,0.29677188,-0.43474185],[0.3491485,0.29401642,-0.36790296,0.42044657,-0.53512317,0.058706686,-0.50015694],[-0.4911135,0.646846,0.18155076,-0.2229118,0.31506446,0.36774144,-0.82843393]],"activation":"σ","dense_2_b":[[-0.03162165],[0.04077409],[-0.30135295],[-0.023840334],[-0.25210667],[0.012809456],[-0.23830907],[-0.36270756],[-0.10388676],[0.07296503],[-0.051522776],[-0.041601982],[-0.09325582]]},{"dense_3_W":[[-0.5250345,-0.22525242,0.2523494,0.3467854,0.015721213,-0.52880615,-0.24200426,0.5264877,-0.34023857,0.417793,0.018722747,-0.5499491,-0.30318102],[-0.19100182,0.2990618,-0.1496899,0.34770057,-0.08324218,0.5929635,0.57089233,0.1725288,0.56539565,-0.1898713,-0.5954888,-0.25292823,-0.49786177],[-0.0627163,0.61702037,-0.6596768,0.461395,-0.20111923,-0.6267803,0.3331113,-0.25044763,0.055209983,0.20798822,0.056768,-0.055646416,0.08195084]],"activation":"identity","dense_3_b":[[-0.007629902],[-0.0233827],[0.022168329]]},{"dense_4_W":[[0.20391291,1.0325449,-1.0948162]],"dense_4_b":[[-0.023781778]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN.json b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN.json new file mode 100755 index 0000000000..2f0c995417 --- /dev/null +++ b/selfdrive/car/torque_data/lat_models/VOLKSWAGEN TIGUAN 2ND GEN.json @@ -0,0 +1 @@ +{"input_std":[[8.782441],[1.1398275],[0.4609802],[0.04271673],[1.1238744],[1.1299343],[1.1346341],[1.1119426],[1.0859472],[1.0505929],[1.01332],[0.042612497],[0.042648252],[0.042672537],[0.042585343],[0.042469293],[0.042215183],[0.04179356]],"model_test_loss":0.018630679696798325,"input_size":18,"current_date_and_time":"2023-08-14_01-59-38","input_mean":[[22.468307],[-0.0059960946],[-0.008688168],[-0.003941978],[-0.004109974],[-0.0052409726],[-0.0066701453],[-0.010034277],[-0.013358513],[-0.011732898],[-0.0112503925],[-0.0039730547],[-0.0039907545],[-0.004007257],[-0.0040642004],[-0.004142748],[-0.004199409],[-0.0042553144]],"input_vars":["v_ego","lateral_accel","lateral_jerk","roll","lateral_accel_m03","lateral_accel_m02","lateral_accel_m01","lateral_accel_p03","lateral_accel_p06","lateral_accel_p10","lateral_accel_p15","roll_m03","roll_m02","roll_m01","roll_p03","roll_p06","roll_p10","roll_p15"],"output_size":1,"layers":[{"dense_1_b":[[-0.22421235],[0.022291217],[0.015709542],[-0.04664034],[-0.036350474],[-0.24544194],[-0.04896989]],"dense_1_W":[[-0.015455264,0.35899833,6.998555,0.81398284,0.34668404,0.50750834,-0.30584475,0.6416511,-0.5377552,-0.026296293,-0.6502898,0.43909717,-0.27295533,-0.76501244,-0.5884351,0.22982346,-0.26877192,0.26560456],[-0.01508568,1.8268416,0.00402336,0.2784217,-0.7716931,0.46446714,-0.11456723,0.10766974,0.30401927,-0.085616745,-0.15998937,0.44400185,-0.48933145,-0.23811713,-0.440158,-0.10242332,0.051594254,0.12977812],[-0.009739386,-2.6971612,0.001168384,-0.35022622,0.65414,-0.717214,-0.44903016,-0.49311733,-0.43150806,0.06219255,0.23182331,-0.44158918,-0.49226075,0.47947824,0.6467593,0.34515625,0.09018108,-0.47900265],[1.0840801,-0.7623997,-0.005088885,-0.52213657,-0.22831856,-0.6294846,-1.2465742,0.3222685,0.020507088,-0.024931427,-0.24259277,0.08206772,0.21676067,-0.41708487,0.50989604,0.33494267,-0.079637915,-0.14551927],[0.004391417,-0.10370217,0.0014306986,-0.072918385,-0.63637805,-1.1973468,0.5230291,-0.05261172,0.25703079,0.041062124,-0.34666935,0.0939909,-0.48456657,0.08325979,0.5252982,-0.10210225,-0.12507002,0.05711295],[-0.010150519,0.47018084,1.575968,-0.12638067,0.58264244,1.1620525,-0.6418302,-0.022278491,0.5091847,-0.16685116,0.074821465,0.22004989,-0.099773616,-0.5007223,-0.09964562,0.46015504,0.21582201,-0.23595089],[1.1357191,0.7709306,0.003718608,0.6016892,0.7352459,0.33387783,1.0426474,0.12312558,-0.49904007,0.032169387,0.37637976,-0.05813148,-0.49427262,0.49914685,-0.2028158,-0.5950836,0.2782391,0.028333709]],"activation":"σ"},{"dense_2_W":[[0.43099108,-0.40067255,0.15829495,-0.48378208,0.396984,-0.1558594,-0.1562694],[0.6452132,0.40809157,-0.5897283,1.2150947,-0.6793519,0.78984624,0.66217726],[-1.0487145,-0.15708125,0.48070663,-1.294668,0.44506454,-1.0924927,-1.3423347],[-0.0905496,-0.39283985,-0.560608,-0.4611327,-0.3925291,0.005858116,0.5098873],[-1.3053528,-0.17654762,1.1515645,1.4426079,1.0838766,-0.6442153,1.756127],[-0.34371176,1.1574818,0.017585738,0.20476972,-0.463017,-0.22401343,-0.5996214],[0.20533562,0.79994386,-0.8060774,0.17529243,-0.38612595,0.03759143,-0.22778784],[-0.10523058,1.0248777,-0.5244927,0.58016795,-0.48161384,0.2411753,-0.3102547],[0.041490827,-0.12094459,0.44139338,0.123947956,0.5913839,-0.50927347,0.82576096],[-0.17784683,-0.7949691,0.6407812,0.36980206,-0.045769464,-0.15805046,0.27670377],[0.13153441,-0.9403638,0.2306892,-0.18441507,0.34671855,-0.074668296,0.5032],[-0.04615598,0.71520805,-0.0030287886,-0.17552495,-0.19403128,0.21251689,0.24918763],[0.2859375,-0.5510105,0.31645826,-0.15235336,0.62049425,0.14673771,0.11173112]],"activation":"σ","dense_2_b":[[-0.20544042],[0.14436114],[-0.12040931],[-0.16554375],[0.36716554],[0.17168364],[-0.065600924],[-0.01176559],[-0.03528442],[0.037511505],[-0.11677802],[-0.035834227],[-0.17063564]]},{"dense_3_W":[[-0.3723276,0.4951858,-0.17594789,0.31653145,-0.09435181,0.45912716,-0.30004933,0.41055498,-0.21392249,0.35937718,-0.10425309,-0.2715391,-0.5834551],[-0.25541237,-0.58331114,0.4694298,-0.14703207,0.7632458,-0.35720977,-0.26993504,-0.5713957,0.020457853,0.012436012,-0.049483325,0.1666998,0.33925256],[0.45550138,0.12273135,0.51411545,0.43389788,0.0037848332,-0.41984108,-0.10243085,-0.56994265,0.24741924,0.44959965,0.5980098,-0.37595576,0.34953722]],"activation":"identity","dense_3_b":[[0.048041742],[-0.07375918],[-0.090859294]]},{"dense_4_W":[[0.09198451,-1.1679362,-0.9176557]],"dense_4_b":[[0.08128402]],"activation":"identity"}]} \ No newline at end of file diff --git a/selfdrive/car/torque_data/neural_ff_weights.json b/selfdrive/car/torque_data/neural_ff_weights.json new file mode 100644 index 0000000000..c526f07fa2 --- /dev/null +++ b/selfdrive/car/torque_data/neural_ff_weights.json @@ -0,0 +1 @@ +{"CHEVROLET BOLT EUV 2022": {"w_1": [[0.3452189564704895, -0.15614677965641022, -0.04062516987323761, -0.5960758328437805, 0.3211185932159424, 0.31732726097106934, -0.04430829733610153, -0.37327295541763306, -0.14118380844593048, 0.12712529301643372, 0.2641555070877075, -0.3451094627380371, -0.005127656273543835, 0.6185108423233032, 0.03725295141339302, 0.3763789236545563], [-0.0708412230014801, 0.3667356073856354, 0.031383827328681946, 0.1740853488445282, -0.04695861041545868, 0.018055908381938934, 0.009072160348296165, -0.23640218377113342, -0.10362917929887772, 0.022628149017691612, -0.224413201212883, 0.20718418061733246, -0.016947750002145767, -0.3872031271457672, -0.15500062704086304, -0.06375953555107117], [-0.0838046595454216, -0.0242826659232378, -0.07765661180019379, 0.028858814388513565, -0.09516210108995438, 0.008368706330657005, 0.1689300835132599, 0.015036891214549541, -0.15121428668498993, 0.1388195902109146, 0.11486363410949707, 0.0651545450091362, 0.13559958338737488, 0.04300367832183838, -0.13856294751167297, -0.058136988431215286], [-0.006249868310987949, 0.08809533715248108, -0.040690965950489044, 0.02359287068247795, -0.00766348373144865, 0.24816390872001648, -0.17360293865203857, -0.03676899895071983, -0.17564819753170013, 0.18998438119888306, -0.050583917647600174, -0.006488069426268339, 0.10649101436138153, -0.024557121098041534, -0.103276826441288, 0.18448011577129364]], "b_1": [0.2935388386249542, 0.10967712104320526, -0.014007942751049995, 0.211833655834198, 0.33605605363845825, 0.37722209095954895, -0.16615016758441925, 0.3134673535823822, 0.06695777177810669, 0.3425212800502777, 0.3769673705101013, 0.23186539113521576, 0.5770409107208252, -0.05929069593548775, 0.01839117519557476, 0.03828774020075798], "w_2": [[-0.06261160969734192, 0.010185074992477894, -0.06083013117313385, -0.04531499370932579, -0.08979734033346176, 0.3432150185108185, -0.019801849499344826, 0.3010321259498596], [0.19698476791381836, -0.009238275699317455, 0.08842222392559052, -0.09516377002000809, -0.05022778362035751, 0.13626104593276978, -0.052890390157699585, 0.15569131076335907], [0.0724768117070198, -0.09018408507108688, 0.06850195676088333, -0.025572121143341064, 0.0680626779794693, -0.07648195326328278, 0.07993496209383011, -0.059752143919467926], [1.267876386642456, -0.05755887180566788, -0.08429178595542908, 0.021366603672504425, -0.0006479775765910745, -1.4292563199996948, -0.08077696710824966, -1.414825439453125], [0.04535430669784546, 0.06555880606174469, -0.027145234867930412, -0.07661093026399612, -0.05702832341194153, 0.23650476336479187, 0.0024587824009358883, 0.20126521587371826], [0.006042032968252897, 0.042880818247795105, 0.002187949838116765, -0.017126334831118584, -0.08352015167474747, 0.19801731407642365, -0.029196614399552345, 0.23713473975658417], [-0.01644900068640709, -0.04358499124646187, 0.014584392309188843, 0.07155826687812805, -0.09354910999536514, -0.033351872116327286, 0.07138452678918839, -0.04755295440554619], [-1.1012420654296875, -0.03534531593322754, 0.02167935110628605, -0.01116552110761404, -0.08436500281095505, 1.1038788557052612, 0.027903547510504723, 1.0676132440567017], [0.03843916580080986, -0.0952216386795044, 0.039226632565259933, 0.002778085647150874, -0.020275786519050598, -0.07848760485649109, 0.04803166165947914, 0.015538203530013561], [0.018385495990514755, -0.025189843028783798, 0.0036680365446954966, -0.02105865254998207, 0.04808586835861206, 0.1575016975402832, 0.02703506126999855, 0.23039312660694122], [-0.0033881019335240126, -0.10210853815078735, -0.04877309128642082, 0.006989633198827505, 0.046798162162303925, 0.38676899671554565, -0.032304272055625916, 0.2345031052827835], [0.22092825174331665, -0.09642873704433441, 0.04499409720301628, 0.05108088254928589, -0.10191166400909424, 0.12818090617656708, -0.021021494641900063, 0.09440375864505768], [0.1212429478764534, -0.028194155544042587, -0.0981956496834755, 0.08226924389600754, 0.055346839129924774, 0.27067816257476807, -0.09064067900180817, 0.12580905854701996], [-1.6740131378173828, -0.02066155895590782, -0.05924689769744873, 0.06347910314798355, -0.07821853458881378, 1.2807466983795166, 0.04589352011680603, 1.310766577720642], [-0.09893272817134857, -0.04093599319458008, -0.02502273954451084, 0.09490344673395157, -0.0211324505507946, -0.09021010994911194, 0.07936318963766098, -0.03593116253614426], [-0.08490308374166489, -0.015558987855911255, -0.048692114651203156, -0.007421435788273811, -0.040531404316425323, 0.25889304280281067, 0.06012800335884094, 0.27946868538856506]], "b_2": [0.07973937690258026, -0.010446485131978989, -0.003066520905122161, -0.031895797699689865, 0.006032303906977177, 0.24106740951538086, -0.008969511836767197, 0.2872662842273712], "w_3": [[-1.364486813545227, -0.11682678014039993, 0.01764785870909691, 0.03926877677440643], [-0.05695437639951706, 0.05472218990325928, 0.1266128271818161, 0.09950875490903854], [0.11415273696184158, -0.10069356113672256, 0.0864749327301979, -0.043946366757154465], [-0.10138195008039474, -0.040128443390131, -0.08937158435583115, -0.0048376512713730335], [-0.0028251828625798225, -0.04743027314543724, 0.06340016424655914, 0.07277824729681015], [0.49482327699661255, -0.06410001963376999, -0.0999293103814125, -0.14250673353672028], [0.042802367359399796, 0.0015462725423276424, -0.05991362780332565, 0.1022040992975235], [0.3523194193840027, 0.07343732565641403, 0.04157765582203865, -0.12358107417821884]], "b_3": [0.2653026282787323, -0.058485131710767746, -0.0744510293006897, 0.012550175189971924], "w_4": [[0.5988775491714478, 0.09668736904859543], [-0.04360569268465042, 0.06491032242774963], [-0.11868984252214432, -0.09601487964391708], [-0.06554870307445526, -0.14189276099205017]], "b_4": [-0.08148707449436188, -2.8251802921295166], "input_norm_mat": [[-3.0, 3.0], [-3.0, 3.0], [0.0, 40.0], [-3.0, 3.0]], "output_norm_mat": [-1.0, 1.0], "temperature": 100.0}} \ No newline at end of file diff --git a/selfdrive/car/torque_data/override.toml b/selfdrive/car/torque_data/override.toml new file mode 100644 index 0000000000..a24fa624c5 --- /dev/null +++ b/selfdrive/car/torque_data/override.toml @@ -0,0 +1,77 @@ +legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] +### angle control +# Nissan appears to have torque +"NISSAN X-TRAIL 2017" = [nan, 1.5, nan] +"NISSAN ALTIMA 2020" = [nan, 1.5, nan] +"NISSAN LEAF 2018 Instrument Cluster" = [nan, 1.5, nan] +"NISSAN LEAF 2018" = [nan, 1.5, nan] +"NISSAN ROGUE 2019" = [nan, 1.5, nan] + +# New subarus angle based controllers +"SUBARU FORESTER 2022" = [nan, 3.0, nan] +"SUBARU OUTBACK 7TH GEN" = [nan, 3.0, nan] +"SUBARU ASCENT 2023" = [nan, 3.0, nan] + +# Toyota LTA also has torque +"TOYOTA RAV4 2023" = [nan, 3.0, nan] + +# Tesla has high torque +"TESLA AP1 MODEL S" = [nan, 2.5, nan] +"TESLA AP2 MODEL S" = [nan, 2.5, nan] + +# Guess +"FORD BRONCO SPORT 1ST GEN" = [nan, 1.5, nan] +"FORD ESCAPE 4TH GEN" = [nan, 1.5, nan] +"FORD EXPLORER 6TH GEN" = [nan, 1.5, nan] +"FORD F-150 14TH GEN" = [nan, 1.5, nan] +"FORD FOCUS 4TH GEN" = [nan, 1.5, nan] +"FORD MAVERICK 1ST GEN" = [nan, 1.5, nan] +"FORD F-150 LIGHTNING 1ST GEN" = [nan, 1.5, nan] +"FORD MUSTANG MACH-E 1ST GEN" = [nan, 1.5, nan] +### + +# No steering wheel +"COMMA BODY" = [nan, 1000, nan] + +# Totally new cars +"RAM 1500 5TH GEN" = [2.0, 2.0, 0.05] +"RAM HD 5TH GEN" = [1.4, 1.4, 0.05] +"SUBARU OUTBACK 6TH GEN" = [2.0, 2.0, 0.2] +"CADILLAC ESCALADE 2017" = [1.899999976158142, 1.842270016670227, 0.1120000034570694] +"CADILLAC ESCALADE ESV 2019" = [1.15, 1.3, 0.2] +"CHEVROLET BOLT EUV 2022" = [2.0, 2.0, 0.05] +"CHEVROLET SILVERADO 1500 2020" = [1.9, 1.9, 0.112] +"CHEVROLET TRAILBLAZER 2021" = [1.33, 1.9, 0.16] +"CHEVROLET EQUINOX 2019" = [2.0, 2.0, 0.05] +"VOLKSWAGEN PASSAT NMS" = [2.5, 2.5, 0.1] +"VOLKSWAGEN SHARAN 2ND GEN" = [2.5, 2.5, 0.1] +"HYUNDAI SANTA CRUZ 1ST GEN" = [2.7, 2.7, 0.1] +"KIA SPORTAGE 5TH GEN" = [2.6, 2.6, 0.1] +"GENESIS GV70 1ST GEN" = [2.42, 2.42, 0.1] +"GENESIS GV60 ELECTRIC 1ST GEN" = [2.5, 2.5, 0.1] +"KIA SORENTO 4TH GEN" = [2.5, 2.5, 0.1] +"KIA SORENTO HYBRID 4TH GEN" = [2.5, 2.5, 0.1] +"KIA NIRO HYBRID 2ND GEN" = [2.42, 2.5, 0.12] +"KIA NIRO EV 2ND GEN" = [2.05, 2.5, 0.14] +"GENESIS GV80 2023" = [2.5, 2.5, 0.1] +"KIA CARNIVAL 4TH GEN" = [1.75, 1.75, 0.15] +"GMC ACADIA DENALI 2018" = [1.6, 1.6, 0.2] +"LEXUS IS 2023" = [2.0, 2.0, 0.1] +"HYUNDAI KONA ELECTRIC 2ND GEN" = [2.5, 2.5, 0.1] +"HYUNDAI IONIQ 6 2023" = [2.5, 2.5, 0.1] +"HYUNDAI AZERA 6TH GEN" = [1.8, 1.8, 0.1] +"HYUNDAI AZERA HYBRID 6TH GEN" = [1.8, 1.8, 0.1] +"KIA K8 HYBRID 1ST GEN" = [2.5, 2.5, 0.1] +"HYUNDAI CUSTIN 1ST GEN" = [2.5, 2.5, 0.1] +"LEXUS GS F 2016" = [2.5, 2.5, 0.08] +"HYUNDAI STARIA 4TH GEN" = [1.8, 2.0, 0.15] + +# Dashcam or fallback configured as ideal car +"mock" = [10.0, 10, 0.0] + +# Manually checked +"HONDA CIVIC 2022" = [2.5, 1.2, 0.15] +"HONDA HR-V 2023" = [2.5, 1.2, 0.2] + +"HONDA ACCORD 4CYL 9TH GEN" = [1.7, 0.35, 0.21] +"HYUNDAI BAYON 1ST GEN NON-SCC" = [2.5, 2.5, 0.1] diff --git a/selfdrive/car/torque_data/override.yaml b/selfdrive/car/torque_data/override.yaml index 7ff7fad19a..e69de29bb2 100644 --- a/selfdrive/car/torque_data/override.yaml +++ b/selfdrive/car/torque_data/override.yaml @@ -1,69 +0,0 @@ -legend: [LAT_ACCEL_FACTOR, MAX_LAT_ACCEL_MEASURED, FRICTION] -### angle control -# Nissan appears to have torque -NISSAN X-TRAIL 2017: [.nan, 1.5, .nan] -NISSAN ALTIMA 2020: [.nan, 1.5, .nan] -NISSAN LEAF 2018 Instrument Cluster: [.nan, 1.5, .nan] -NISSAN LEAF 2018: [.nan, 1.5, .nan] -NISSAN ROGUE 2019: [.nan, 1.5, .nan] - -# New subarus angle based controllers -SUBARU FORESTER 2022: [.nan, 3.0, .nan] -SUBARU OUTBACK 7TH GEN: [.nan, 3.0, .nan] -SUBARU ASCENT 2023: [.nan, 3.0, .nan] - -# Tesla has high torque -TESLA AP1 MODEL S: [.nan, 2.5, .nan] -TESLA AP2 MODEL S: [.nan, 2.5, .nan] - -# Guess -FORD BRONCO SPORT 1ST GEN: [.nan, 1.5, .nan] -FORD ESCAPE 4TH GEN: [.nan, 1.5, .nan] -FORD EXPLORER 6TH GEN: [.nan, 1.5, .nan] -FORD F-150 14TH GEN: [.nan, 1.5, .nan] -FORD FOCUS 4TH GEN: [.nan, 1.5, .nan] -FORD MAVERICK 1ST GEN: [.nan, 1.5, .nan] -### - -# No steering wheel -COMMA BODY: [.nan, 1000, .nan] - -# Totally new cars -RAM 1500 5TH GEN: [2.0, 2.0, 0.05] -RAM HD 5TH GEN: [1.4, 1.4, 0.05] -SUBARU OUTBACK 6TH GEN: [2.0, 2.0, 0.2] -CADILLAC ESCALADE 2017: [1.899999976158142, 1.842270016670227, 0.1120000034570694] -CHEVROLET BOLT EUV 2022: [2.0, 2.0, 0.05] -CHEVROLET SILVERADO 1500 2020: [1.9, 1.9, 0.112] -CHEVROLET TRAILBLAZER 2021: [1.33, 1.9, 0.16] -CHEVROLET EQUINOX 2019: [2.0, 2.0, 0.05] -VOLKSWAGEN PASSAT NMS: [2.5, 2.5, 0.1] -VOLKSWAGEN SHARAN 2ND GEN: [2.5, 2.5, 0.1] -HYUNDAI SANTA CRUZ 1ST GEN: [2.7, 2.7, 0.1] -KIA SPORTAGE 5TH GEN: [2.7, 2.7, 0.1] -KIA SPORTAGE HYBRID 5TH GEN: [2.5, 2.5, 0.1] -GENESIS GV70 1ST GEN: [2.42, 2.42, 0.1] -KIA SORENTO PLUG-IN HYBRID 4TH GEN: [2.5, 2.5, 0.1] -GENESIS GV60 ELECTRIC 1ST GEN: [2.5, 2.5, 0.1] -KIA SORENTO 4TH GEN: [2.5, 2.5, 0.1] -KIA NIRO HYBRID 2ND GEN: [2.42, 2.5, 0.12] -KIA NIRO EV 2ND GEN: [2.05, 2.5, 0.14] -GENESIS GV80 2023: [2.5, 2.5, 0.1] -KIA CARNIVAL 4TH GEN: [1.75, 1.75, 0.15] -GMC ACADIA DENALI 2018: [1.6, 1.6, 0.2] -LEXUS IS 2023: [2.0, 2.0, 0.1] -KIA SORENTO HYBRID 4TH GEN: [2.5, 2.5, 0.1] -HYUNDAI KONA ELECTRIC 2ND GEN: [2.5, 2.5, 0.1] -HYUNDAI IONIQ 6 2023: [2.5, 2.5, 0.1] -HONDA ACCORD 4CYL 9TH GEN: [1.7, 0.35, 0.21] -HYUNDAI AZERA 6TH GEN: [1.8, 1.8, 0.1] -KIA K8 HYBRID 1ST GEN: [2.5, 2.5, 0.1] -TOYOTA RAV4 2023: [2.5, 2.5, 0.1] -TOYOTA RAV4 HYBRID 2023: [2.5, 2.5, 0.1] - -# Dashcam or fallback configured as ideal car -mock: [10.0, 10, 0.0] - -# Manually checked -HONDA CIVIC 2022: [2.5, 1.2, 0.15] -HONDA HR-V 2023: [2.5, 1.2, 0.2] diff --git a/selfdrive/car/torque_data/params.toml b/selfdrive/car/torque_data/params.toml new file mode 100644 index 0000000000..d703b0d10a --- /dev/null +++ b/selfdrive/car/torque_data/params.toml @@ -0,0 +1,87 @@ +legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] +"ACURA ILX 2016" = [1.524988973896102, 0.519011053086259, 0.34236219253028] +"ACURA RDX 2018" = [0.9987728568686902, 0.5323765166196301, 0.303218805715844] +"ACURA RDX 2020" = [1.4314459806646749, 0.33874701282109954, 0.18048847083897598] +"AUDI A3 3RD GEN" = [1.5122414863077502, 1.7443517531719404, 0.15194151892450905] +"AUDI Q3 2ND GEN" = [1.4439223359448605, 1.2254955789112076, 0.1413798895978097] +"CHEVROLET VOLT PREMIER 2017" = [1.5961527626411784, 1.8422651988094612, 0.1572393918005158] +"CHRYSLER PACIFICA 2018" = [2.07140, 1.3366521181047952, 0.13776367250652022] +"CHRYSLER PACIFICA 2020" = [1.86206, 1.509076559398423, 0.14328246159386085] +"CHRYSLER PACIFICA HYBRID 2017" = [1.79422, 1.06831764583744, 0.116237] +"CHRYSLER PACIFICA HYBRID 2018" = [2.08887, 1.2943025830995154, 0.114818] +"CHRYSLER PACIFICA HYBRID 2019" = [1.90120, 1.1958788168371808, 0.131520] +"GENESIS G70 2018" = [3.8520195946707947, 2.354697063349854, 0.06830285485626221] +"HONDA ACCORD 2018" = [1.7135052593468778, 0.3461280068322071, 0.21579936052863807] +"HONDA ACCORD HYBRID 2018" = [1.6651615004829625, 0.30322180951193245, 0.2083000440586149] +"HONDA CIVIC (BOSCH) 2019" = [1.691708637466905, 0.40132900729454185, 0.25460295304024094] +"HONDA CIVIC 2016" = [1.6528895627785531, 0.4018518740819229, 0.25458812851328544] +"HONDA CLARITY 2018" = [1.6528895627785531, 0.4018518740819229, 0.25458812851328544] +"HONDA CR-V 2016" = [0.7667141440182675, 0.5927571534745969, 0.40909087636157127] +"HONDA CR-V 2017" = [2.01323205142022, 0.2700612209345081, 0.2238412881331528] +"HONDA CR-V HYBRID 2019" = [2.072034634644233, 0.7152085160516978, 0.20237105008376083] +"HONDA FIT 2018" = [1.5719981427109775, 0.5712761407108976, 0.110773383324281] +"HONDA HRV 2019" = [2.0661212805710205, 0.7521343418694775, 0.17760375789242094] +"HONDA INSIGHT 2019" = [1.5201671214069354, 0.5660229120683284, 0.25808042580281876] +"HONDA ODYSSEY 2018" = [1.8774809275211801, 0.8394431662987996, 0.2096978613792822] +"HONDA PILOT 2017" = [1.7262026201812795, 0.9470005614967523, 0.21351430733218763] +"HONDA RIDGELINE 2017" = [1.4146525028237624, 0.7356572861629564, 0.23307177552211328] +"HYUNDAI ELANTRA 2021" = [3.169, 2.1259108157250735, 0.0819] +"HYUNDAI GENESIS 2015-2016" = [2.7807965280270794, 2.325, 0.0984484465421171] +"HYUNDAI IONIQ 5 2022" = [3.172929, 2.713050, 0.096019] +"HYUNDAI IONIQ ELECTRIC LIMITED 2019" = [1.7662975472852054, 1.613755614526594, 0.17087579756306276] +"HYUNDAI IONIQ PHEV 2020" = [3.2928700076638537, 2.1193482926455656, 0.12463700961468778] +"HYUNDAI IONIQ PLUG-IN HYBRID 2019" = [2.970807902012267, 1.6312321830002083, 0.1088964990357482] +"HYUNDAI KONA ELECTRIC 2019" = [3.078814714619148, 2.307336938253934, 0.12359762054065548] +"HYUNDAI PALISADE 2020" = [2.544642494803999, 1.8721703683337008, 0.1301424599248651] +"HYUNDAI SANTA FE 2019" = [3.0787027729757632, 2.6173437483495565, 0.1207019341823945] +"HYUNDAI SANTA FE HYBRID 2022" = [3.501877602644835, 2.729064118456137, 0.10384068104538963] +"HYUNDAI SANTA FE PlUG-IN HYBRID 2022" = [1.6953050513611045, 1.5837614296206861, 0.12672855941458458] +"HYUNDAI SONATA 2019" = [2.2200457811703953, 1.2967330275895228, 0.14039920986586393] +"HYUNDAI SONATA 2020" = [2.9638737459977467, 2.1259108157250735, 0.07813665616927593] +"HYUNDAI SONATA HYBRID 2021" = [2.8990264092395734, 2.061410192222139, 0.0899805488717382] +"HYUNDAI TUCSON 4TH GEN" = [2.960174, 2.860284, 0.108745] +"JEEP GRAND CHEROKEE 2019" = [2.30972, 1.289689569171081, 0.117048] +"JEEP GRAND CHEROKEE V6 2018" = [2.27116, 1.4057367824262523, 0.11725947414922003] +"KIA EV6 2022" = [3.2, 2.093457, 0.05] +"KIA K5 2021" = [2.405339728085138, 1.460032270828705, 0.11650989850813716] +"KIA NIRO EV 2020" = [2.9215954981365337, 2.1500583840260044, 0.09236802474810267] +"KIA SORENTO GT LINE 2018" = [2.464854685101844, 1.5335274218367956, 0.12056170567599558] +"KIA STINGER GT2 2018" = [2.7499043387418967, 1.849652021986449, 0.12048334239559202] +"LEXUS ES 2019" = [2.0357564999999997, 1.999082295195227, 0.101533] +"LEXUS NX 2018" = [2.3525924753753613, 1.9731412277641067, 0.15168101064205927] +"LEXUS NX 2020" = [2.4331999786982936, 2.1045680431705414, 0.14099899317761067] +"LEXUS RX 2016" = [1.6430539050086406, 1.181960058934143, 0.19768806040843034] +"LEXUS RX 2020" = [1.5375561442049257, 1.343166476215164, 0.1931062001527557] +"MAZDA CX-9 2021" = [1.7601682915983443, 1.0889677335154337, 0.17713792194297195] +"SKODA SUPERB 3RD GEN" = [1.166437404652981, 1.1686163012668165, 0.12194533036948708] +"SUBARU FORESTER 2019" = [3.6617001649776793, 2.342197172531713, 0.11075960785398745] +"SUBARU IMPREZA LIMITED 2019" = [1.0670704910352047, 0.8234374840709592, 0.20986563268614938] +"SUBARU IMPREZA SPORT 2020" = [2.6068223389108303, 2.134872342760203, 0.15261513193561627] +"TOYOTA AVALON 2016" = [2.5185770183845646, 1.7153346784214922, 0.10603968787111022] +"TOYOTA AVALON 2019" = [1.7036141952825095, 1.239619084240008, 0.08459830394899492] +"TOYOTA AVALON 2022" = [2.3154403649717357, 2.7777922854327124, 0.11453999639164605] +"TOYOTA C-HR 2018" = [1.5591084333664578, 1.271271459066948, 0.20259087058453193] +"TOYOTA C-HR 2021" = [1.7678810166088303, 1.3742176337919942, 0.2319674583741509] +"TOYOTA CAMRY 2018" = [2.0568162685952505, 1.7576185169559122, 0.108878753] +"TOYOTA CAMRY 2021" = [2.3548324999999997, 2.368900128946771, 0.118436] +"TOYOTA COROLLA 2017" = [3.117154369115421, 1.8438132575043773, 0.12289685869250652] +"TOYOTA COROLLA TSS2 2019" = [1.991132339206426, 1.868866242720403, 0.19570063298031432] +"TOYOTA HIGHLANDER 2017" = [1.8108348718624456, 1.6348421600679828, 0.15972686105120398] +"TOYOTA HIGHLANDER 2020" = [1.9617570834136164, 1.8611643317268927, 0.14519673256119725] +"TOYOTA MIRAI 2021" = [2.506899832157829, 1.7417213930750164, 0.20182618449440565] +"TOYOTA PRIUS 2017" = [1.60, 1.5023147650693636, 0.151515] +"TOYOTA PRIUS TSS2 2021" = [1.972600, 1.9104337425537743, 0.170968] +"TOYOTA RAV4 2017" = [2.085695074355425, 2.2142832316984733, 0.13339165270103975] +"TOYOTA RAV4 2019" = [2.279239424615458, 2.087101966779332, 0.13682208413446817] +"TOYOTA RAV4 2019 8965" = [2.3080951748210854, 2.1189367835820603, 0.12942102328134028] +"TOYOTA RAV4 2019 x02" = [2.762293266024922, 2.243615865975329, 0.11113568178327986] +"TOYOTA RAV4 HYBRID 2017" = [1.9796257271652042, 1.7503987331707576, 0.14628860048885406] +"TOYOTA RAV4 2022" = [2.241883248393209, 1.9304407208090029, 0.112174] +"TOYOTA RAV4 2022 x02" = [3.044930631831037, 2.3979189796380918, 0.14023209146703736] +"TOYOTA SIENNA 2018" = [1.689726, 1.3208264576110418, 0.140456] +"VOLKSWAGEN ARTEON 1ST GEN" = [1.45136518053819, 1.3639364049316804, 0.23806361745695032] +"VOLKSWAGEN ATLAS 1ST GEN" = [1.4677006726964945, 1.6733266634075656, 0.12959584092073367] +"VOLKSWAGEN GOLF 7TH GEN" = [1.3750394140491293, 1.5814743077200641, 0.2018321939386586] +"VOLKSWAGEN JETTA 7TH GEN" = [1.2271623034089392, 1.216955117387, 0.19437384688370712] +"VOLKSWAGEN PASSAT 8TH GEN" = [1.3432120736752917, 1.7087275587362314, 0.19444383787326647] +"VOLKSWAGEN TIGUAN 2ND GEN" = [0.9711965500094828, 1.0001565939459098, 0.1465626137072916] diff --git a/selfdrive/car/torque_data/params.yaml b/selfdrive/car/torque_data/params.yaml index d7163c9828..e69de29bb2 100644 --- a/selfdrive/car/torque_data/params.yaml +++ b/selfdrive/car/torque_data/params.yaml @@ -1,99 +0,0 @@ -ACURA ILX 2016: [1.524988973896102, 0.519011053086259, 0.34236219253028] -ACURA RDX 2018: [0.9987728568686902, 0.5323765166196301, 0.303218805715844] -ACURA RDX 2020: [1.4314459806646749, 0.33874701282109954, 0.18048847083897598] -AUDI A3 3RD GEN: [1.5122414863077502, 1.7443517531719404, 0.15194151892450905] -AUDI Q3 2ND GEN: [1.4439223359448605, 1.2254955789112076, 0.1413798895978097] -CHEVROLET VOLT PREMIER 2017: [1.5961527626411784, 1.8422651988094612, 0.1572393918005158] -CHRYSLER PACIFICA 2018: [2.07140, 1.3366521181047952, 0.13776367250652022] -CHRYSLER PACIFICA 2020: [1.86206, 1.509076559398423, 0.14328246159386085] -CHRYSLER PACIFICA HYBRID 2017: [1.79422, 1.06831764583744, 0.116237] -CHRYSLER PACIFICA HYBRID 2018: [2.08887, 1.2943025830995154, 0.114818] -CHRYSLER PACIFICA HYBRID 2019: [1.90120, 1.1958788168371808, 0.131520] -GENESIS G70 2018: [3.8520195946707947, 2.354697063349854, 0.06830285485626221] -HONDA ACCORD 2018: [1.7135052593468778, 0.3461280068322071, 0.21579936052863807] -HONDA ACCORD HYBRID 2018: [1.6651615004829625, 0.30322180951193245, 0.2083000440586149] -HONDA CIVIC (BOSCH) 2019: [1.691708637466905, 0.40132900729454185, 0.25460295304024094] -HONDA CIVIC 2016: [1.6528895627785531, 0.4018518740819229, 0.25458812851328544] -HONDA CLARITY 2018: [1.6528895627785531, 0.4018518740819229, 0.25458812851328544] -HONDA CR-V 2016: [0.7667141440182675, 0.5927571534745969, 0.40909087636157127] -HONDA CR-V 2017: [2.01323205142022, 0.2700612209345081, 0.2238412881331528] -HONDA CR-V HYBRID 2019: [2.072034634644233, 0.7152085160516978, 0.20237105008376083] -HONDA FIT 2018: [1.5719981427109775, 0.5712761407108976, 0.110773383324281] -HONDA HRV 2019: [2.0661212805710205, 0.7521343418694775, 0.17760375789242094] -HONDA INSIGHT 2019: [1.5201671214069354, 0.5660229120683284, 0.25808042580281876] -HONDA ODYSSEY 2018: [1.8774809275211801, 0.8394431662987996, 0.2096978613792822] -HONDA PILOT 2017: [1.7262026201812795, 0.9470005614967523, 0.21351430733218763] -HONDA RIDGELINE 2017: [1.4146525028237624, 0.7356572861629564, 0.23307177552211328] -HYUNDAI ELANTRA 2021: [3.169, 2.1259108157250735, 0.0819] -HYUNDAI GENESIS 2015-2016: [2.7807965280270794, 2.325, 0.0984484465421171] -HYUNDAI IONIQ 5 2022: [3.172929, 2.713050, 0.096019] -HYUNDAI IONIQ ELECTRIC LIMITED 2019: [1.7662975472852054, 1.613755614526594, 0.17087579756306276] -HYUNDAI IONIQ PHEV 2020: [3.2928700076638537, 2.1193482926455656, 0.12463700961468778] -HYUNDAI IONIQ PLUG-IN HYBRID 2019: [2.970807902012267, 1.6312321830002083, 0.1088964990357482] -HYUNDAI KONA ELECTRIC 2019: [3.078814714619148, 2.307336938253934, 0.12359762054065548] -HYUNDAI PALISADE 2020: [2.544642494803999, 1.8721703683337008, 0.1301424599248651] -HYUNDAI SANTA FE 2019: [3.0787027729757632, 2.6173437483495565, 0.1207019341823945] -HYUNDAI SANTA FE HYBRID 2022: [3.501877602644835, 2.729064118456137, 0.10384068104538963] -HYUNDAI SANTA FE PlUG-IN HYBRID 2022: [1.6953050513611045, 1.5837614296206861, 0.12672855941458458] -HYUNDAI SONATA 2019: [2.2200457811703953, 1.2967330275895228, 0.14039920986586393] -HYUNDAI SONATA 2020: [2.9638737459977467, 2.1259108157250735, 0.07813665616927593] -HYUNDAI SONATA HYBRID 2021: [2.8990264092395734, 2.061410192222139, 0.0899805488717382] -HYUNDAI TUCSON HYBRID 4TH GEN: [2.035545, 2.035545, 0.110272] -JEEP GRAND CHEROKEE 2019: [2.30972, 1.289689569171081, 0.117048] -JEEP GRAND CHEROKEE V6 2018: [2.27116, 1.4057367824262523, 0.11725947414922003] -KIA EV6 2022: [3.2, 2.093457, 0.05] -KIA K5 2021: [2.405339728085138, 1.460032270828705, 0.11650989850813716] -KIA NIRO EV 2020: [2.9215954981365337, 2.1500583840260044, 0.09236802474810267] -KIA SORENTO GT LINE 2018: [2.464854685101844, 1.5335274218367956, 0.12056170567599558] -KIA STINGER GT2 2018: [2.7499043387418967, 1.849652021986449, 0.12048334239559202] -LEXUS ES 2019: [1.935835, 2.134803912579666, 0.093439] -LEXUS ES HYBRID 2019: [2.135678, 1.863360677810788, 0.109627] -LEXUS NX 2018: [2.302625600642627, 2.1382378491466625, 0.14986840878892838] -LEXUS NX 2020: [2.4331999786982936, 2.1045680431705414, 0.14099899317761067] -LEXUS NX HYBRID 2018: [2.4025593501080955, 1.8080446063815507, 0.15349361249519017] -LEXUS RX 2016: [1.5876816543130423, 1.0427699298523752, 0.21334066732397142] -LEXUS RX 2020: [1.5228812994274734, 1.431102486563665, 0.164117] -LEXUS RX HYBRID 2017: [1.6984261557042386, 1.3211501880159107, 0.1820354534928893] -LEXUS RX HYBRID 2020: [1.5522309889823778, 1.255230465866663, 0.2220954003055114] -MAZDA CX-9 2021: [1.7601682915983443, 1.0889677335154337, 0.17713792194297195] -SKODA SUPERB 3RD GEN: [1.166437404652981, 1.1686163012668165, 0.12194533036948708] -SUBARU FORESTER 2019: [3.6617001649776793, 2.342197172531713, 0.11075960785398745] -SUBARU IMPREZA LIMITED 2019: [1.0670704910352047, 0.8234374840709592, 0.20986563268614938] -SUBARU IMPREZA SPORT 2020: [2.6068223389108303, 2.134872342760203, 0.15261513193561627] -TOYOTA AVALON 2016: [2.5185770183845646, 1.7153346784214922, 0.10603968787111022] -TOYOTA AVALON 2019: [1.7036141952825095, 1.239619084240008, 0.08459830394899492] -TOYOTA AVALON 2022: [2.3154403649717357, 2.7777922854327124, 0.11453999639164605] -TOYOTA C-HR 2018: [1.5591084333664578, 1.271271459066948, 0.20259087058453193] -TOYOTA C-HR 2021: [1.7678810166088303, 1.3742176337919942, 0.2319674583741509] -TOYOTA CAMRY 2018: [2.1172995371905015, 1.7156177222420887, 0.105192506] -TOYOTA CAMRY 2021: [2.446083, 2.3476510120007434, 0.121615] -TOYOTA CAMRY HYBRID 2018: [1.996333, 1.7996193116697359, 0.112565] -TOYOTA CAMRY HYBRID 2021: [2.263582, 2.3901492458927986, 0.115257] -TOYOTA COROLLA 2017: [3.117154369115421, 1.8438132575043773, 0.12289685869250652] -TOYOTA COROLLA HYBRID TSS2 2019: [1.9079729107361805, 1.8118712531729109, 0.22251440891543514] -TOYOTA COROLLA TSS2 2019: [2.0742917676766712, 1.9258612322678952, 0.16888685704519352] -TOYOTA HIGHLANDER 2017: [1.8696367437248915, 1.626293990451463, 0.17485372210240796] -TOYOTA HIGHLANDER 2020: [2.022340166827233, 1.6183134804881791, 0.14592306380054457] -TOYOTA HIGHLANDER HYBRID 2018: [1.752033, 1.6433903296845025, 0.144600] -TOYOTA HIGHLANDER HYBRID 2020: [1.901174, 2.104015182965606, 0.14447040132184993] -TOYOTA MIRAI 2021: [2.506899832157829, 1.7417213930750164, 0.20182618449440565] -TOYOTA PRIUS 2017: [1.60, 1.5023147650693636, 0.151515] -TOYOTA PRIUS TSS2 2021: [1.972600, 1.9104337425537743, 0.170968] -TOYOTA RAV4 2017: [2.085695074355425, 2.2142832316984733, 0.13339165270103975] -TOYOTA RAV4 2019: [2.331293, 2.0993589721530252, 0.129822] -TOYOTA RAV4 2019 8965: [2.5084506298290377, 2.4216520504763475, 0.11992835265067918] -TOYOTA RAV4 2019 x02: [2.7209621987605024, 2.2148637653781593, 0.10862567142268198] -TOYOTA RAV4 HYBRID 2017: [1.9796257271652042, 1.7503987331707576, 0.14628860048885406] -TOYOTA RAV4 HYBRID 2019: [2.2271858492309153, 2.074844961405639, 0.14382216826893632] -TOYOTA RAV4 HYBRID 2019 8965: [2.1077397198131336, 1.8162215166877735, 0.13891369391200137] -TOYOTA RAV4 HYBRID 2019 x02: [2.803624333289342, 2.272367966572498, 0.11364569214387774] -TOYOTA RAV4 HYBRID 2022: [2.241883248393209, 1.9304407208090029, 0.112174] -TOYOTA RAV4 HYBRID 2022 x02: [3.044930631831037, 2.3979189796380918, 0.14023209146703736] -TOYOTA SIENNA 2018: [1.689726, 1.3208264576110418, 0.140456] -VOLKSWAGEN ARTEON 1ST GEN: [1.45136518053819, 1.3639364049316804, 0.23806361745695032] -VOLKSWAGEN ATLAS 1ST GEN: [1.4677006726964945, 1.6733266634075656, 0.12959584092073367] -VOLKSWAGEN GOLF 7TH GEN: [1.3750394140491293, 1.5814743077200641, 0.2018321939386586] -VOLKSWAGEN JETTA 7TH GEN: [1.2271623034089392, 1.216955117387, 0.19437384688370712] -VOLKSWAGEN PASSAT 8TH GEN: [1.3432120736752917, 1.7087275587362314, 0.19444383787326647] -VOLKSWAGEN TIGUAN 2ND GEN: [0.9711965500094828, 1.0001565939459098, 0.1465626137072916] -legend: [LAT_ACCEL_FACTOR, MAX_LAT_ACCEL_MEASURED, FRICTION] diff --git a/selfdrive/car/torque_data/substitute.toml b/selfdrive/car/torque_data/substitute.toml new file mode 100644 index 0000000000..7d091bff1d --- /dev/null +++ b/selfdrive/car/torque_data/substitute.toml @@ -0,0 +1,90 @@ +legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] +"MAZDA 3" = "MAZDA CX-9 2021" +"MAZDA 6" = "MAZDA CX-9 2021" +"MAZDA CX-5" = "MAZDA CX-9 2021" +"MAZDA CX-5 2022" = "MAZDA CX-9 2021" +"MAZDA CX-9" = "MAZDA CX-9 2021" + +"TOYOTA ALPHARD 2020" = "TOYOTA SIENNA 2018" +"TOYOTA PRIUS v 2017" = "TOYOTA PRIUS 2017" +"LEXUS IS 2018" = "LEXUS NX 2018" +"LEXUS CT HYBRID 2018" = "LEXUS NX 2018" +"LEXUS ES 2018" = "TOYOTA CAMRY 2018" +"LEXUS RC 2020" = "LEXUS NX 2020" + +"KIA OPTIMA 4TH GEN" = "HYUNDAI SONATA 2020" +"KIA OPTIMA 4TH GEN FACELIFT" = "HYUNDAI SONATA 2020" +"KIA OPTIMA HYBRID 2017 & SPORTS 2019" = "HYUNDAI SONATA 2020" +"KIA OPTIMA HYBRID 4TH GEN FACELIFT" = "HYUNDAI SONATA 2020" +"KIA FORTE E 2018 & GT 2021" = "HYUNDAI SONATA 2020" +"KIA CEED INTRO ED 2019" = "HYUNDAI SONATA 2020" +"KIA SELTOS 2021" = "HYUNDAI SONATA 2020" +"KIA NIRO HYBRID 2019" = "KIA NIRO EV 2020" +"KIA NIRO PLUG-IN HYBRID 2022" = "KIA NIRO EV 2020" +"KIA NIRO HYBRID 2021" = "KIA NIRO EV 2020" +"HYUNDAI VELOSTER 2019" = "HYUNDAI SONATA 2019" +"HYUNDAI KONA 2020" = "HYUNDAI KONA ELECTRIC 2019" +"HYUNDAI KONA HYBRID 2020" = "HYUNDAI KONA ELECTRIC 2019" +"HYUNDAI KONA ELECTRIC 2022" = "HYUNDAI KONA ELECTRIC 2019" +"HYUNDAI IONIQ HYBRID 2017-2019" = "HYUNDAI IONIQ PLUG-IN HYBRID 2019" +"HYUNDAI IONIQ HYBRID 2020-2022" = "HYUNDAI IONIQ PLUG-IN HYBRID 2019" +"HYUNDAI IONIQ ELECTRIC 2020" = "HYUNDAI IONIQ PLUG-IN HYBRID 2019" +"HYUNDAI ELANTRA 2017" = "HYUNDAI SONATA 2019" +"HYUNDAI I30 N LINE 2019 & GT 2018 DCT" = "HYUNDAI SONATA 2019" +"HYUNDAI ELANTRA HYBRID 2021" = "HYUNDAI SONATA 2020" +"HYUNDAI TUCSON 2019" = "HYUNDAI SANTA FE 2019" +"HYUNDAI SANTA FE 2022" = "HYUNDAI SANTA FE HYBRID 2022" +"KIA K5 HYBRID 2020" = "KIA K5 2021" +"KIA STINGER 2022" = "KIA STINGER GT2 2018" +"GENESIS G90 2017" = "GENESIS G70 2018" +"GENESIS G80 2017" = "GENESIS G70 2018" +"GENESIS G70 2020" = "HYUNDAI SONATA 2020" + +"HONDA FREED 2020" = "HONDA ODYSSEY 2018" +"HONDA CR-V EU 2016" = "HONDA CR-V 2016" +"HONDA CIVIC SEDAN 1.6 DIESEL 2019" = "HONDA CIVIC (BOSCH) 2019" +"HONDA E 2020" = "HONDA CIVIC (BOSCH) 2019" +"HONDA ODYSSEY CHN 2019" = "HONDA ODYSSEY 2018" + +"BUICK LACROSSE 2017" = "CHEVROLET VOLT PREMIER 2017" +"BUICK REGAL ESSENCE 2018" = "CHEVROLET VOLT PREMIER 2017" +"CADILLAC ESCALADE ESV 2016" = "CHEVROLET VOLT PREMIER 2017" +"CADILLAC ATS Premium Performance 2018" = "CHEVROLET VOLT PREMIER 2017" +"CHEVROLET MALIBU PREMIER 2017" = "CHEVROLET VOLT PREMIER 2017" +"HOLDEN ASTRA RS-V BK 2017" = "CHEVROLET VOLT PREMIER 2017" + +"SKODA FABIA 4TH GEN" = "VOLKSWAGEN GOLF 7TH GEN" +"SKODA OCTAVIA 3RD GEN" = "SKODA SUPERB 3RD GEN" +"SKODA SCALA 1ST GEN" = "SKODA SUPERB 3RD GEN" +"SKODA KODIAQ 1ST GEN" = "SKODA SUPERB 3RD GEN" +"SKODA KAROQ 1ST GEN" = "SKODA SUPERB 3RD GEN" +"SKODA KAMIQ 1ST GEN" = "SKODA SUPERB 3RD GEN" +"VOLKSWAGEN CRAFTER 2ND GEN" = "VOLKSWAGEN TIGUAN 2ND GEN" +"VOLKSWAGEN T-ROC 1ST GEN" = "VOLKSWAGEN TIGUAN 2ND GEN" +"VOLKSWAGEN T-CROSS 1ST GEN" = "VOLKSWAGEN TIGUAN 2ND GEN" +"VOLKSWAGEN TOURAN 2ND GEN" = "VOLKSWAGEN TIGUAN 2ND GEN" +"VOLKSWAGEN TRANSPORTER T6.1" = "VOLKSWAGEN TIGUAN 2ND GEN" +"AUDI Q2 1ST GEN" = "VOLKSWAGEN TIGUAN 2ND GEN" +"VOLKSWAGEN TAOS 1ST GEN" = "VOLKSWAGEN TIGUAN 2ND GEN" +"VOLKSWAGEN POLO 6TH GEN" = "VOLKSWAGEN GOLF 7TH GEN" +"SEAT LEON 3RD GEN" = "VOLKSWAGEN GOLF 7TH GEN" +"SEAT ATECA 1ST GEN" = "VOLKSWAGEN GOLF 7TH GEN" + +"SUBARU CROSSTREK HYBRID 2020" = "SUBARU IMPREZA SPORT 2020" +"SUBARU FORESTER HYBRID 2020" = "SUBARU IMPREZA SPORT 2020" +"SUBARU LEGACY 7TH GEN" = "SUBARU OUTBACK 6TH GEN" + +# Old subarus don't have much data guessing it's like low torque impreza" +"SUBARU OUTBACK 2018 - 2019" = "SUBARU IMPREZA LIMITED 2019" +"SUBARU OUTBACK 2015 - 2017" = "SUBARU IMPREZA LIMITED 2019" +"SUBARU FORESTER 2017 - 2018" = "SUBARU IMPREZA LIMITED 2019" +"SUBARU LEGACY 2015 - 2018" = "SUBARU IMPREZA LIMITED 2019" +"SUBARU ASCENT LIMITED 2019" = "SUBARU FORESTER 2019" + +"KIA FORTE 2019 NON-SCC" = "HYUNDAI SONATA 2020" +"KIA FORTE LXS 2021 NON-SCC" = "HYUNDAI SONATA 2020" +"KIA SELTOS 2023 NON-SCC" = "HYUNDAI SONATA 2020" +"HYUNDAI KONA 2019 NON-SCC" = "HYUNDAI KONA ELECTRIC 2019" +"HYUNDAI ELANTRA SE 2022 NON-SCC" = "HYUNDAI ELANTRA 2021" +"GENESIS G70 2021 NON-SCC" = "HYUNDAI SONATA 2020" +"SKODA SUPERB 3RD GEN CC ONLY" = "SKODA SUPERB 3RD GEN" diff --git a/selfdrive/car/torque_data/substitute.yaml b/selfdrive/car/torque_data/substitute.yaml deleted file mode 100644 index 38fd35feb0..0000000000 --- a/selfdrive/car/torque_data/substitute.yaml +++ /dev/null @@ -1,92 +0,0 @@ -MAZDA 3: MAZDA CX-9 2021 -MAZDA 6: MAZDA CX-9 2021 -MAZDA CX-5: MAZDA CX-9 2021 -MAZDA CX-5 2022: MAZDA CX-9 2021 -MAZDA CX-9: MAZDA CX-9 2021 - -TOYOTA ALPHARD HYBRID 2021 : TOYOTA SIENNA 2018 -TOYOTA ALPHARD 2020: TOYOTA SIENNA 2018 -TOYOTA PRIUS v 2017 : TOYOTA PRIUS 2017 -TOYOTA RAV4 2022: TOYOTA RAV4 HYBRID 2022 -TOYOTA C-HR HYBRID 2018: TOYOTA C-HR 2018 -TOYOTA C-HR HYBRID 2022: TOYOTA C-HR 2021 -LEXUS IS 2018: LEXUS NX 2018 -LEXUS CT HYBRID 2018 : LEXUS NX 2018 -LEXUS ES 2018: TOYOTA CAMRY HYBRID 2018 -LEXUS ES HYBRID 2018: TOYOTA CAMRY HYBRID 2018 -LEXUS NX HYBRID 2020: LEXUS NX 2020 -LEXUS RC 2020: LEXUS NX 2020 -TOYOTA AVALON HYBRID 2019: TOYOTA AVALON 2019 -TOYOTA AVALON HYBRID 2022: TOYOTA AVALON 2022 - -KIA OPTIMA 4TH GEN: HYUNDAI SONATA 2020 -KIA OPTIMA 4TH GEN FACELIFT: HYUNDAI SONATA 2020 -KIA OPTIMA HYBRID 2017 & SPORTS 2019: HYUNDAI SONATA 2020 -KIA FORTE E 2018 & GT 2021: HYUNDAI SONATA 2020 -KIA FORTE 2019 NON-SCC: HYUNDAI SONATA 2020 -KIA FORTE LXS 2021 NON-SCC: HYUNDAI SONATA 2020 -KIA CEED INTRO ED 2019: HYUNDAI SONATA 2020 -KIA SELTOS 2021: HYUNDAI SONATA 2020 -KIA SELTOS 2023 NON-SCC: HYUNDAI SONATA 2020 -KIA NIRO HYBRID 2019: KIA NIRO EV 2020 -KIA NIRO HYBRID 2021: KIA NIRO EV 2020 -HYUNDAI VELOSTER 2019: HYUNDAI SONATA 2019 -HYUNDAI KONA 2020: HYUNDAI KONA ELECTRIC 2019 -HYUNDAI KONA HYBRID 2020: HYUNDAI KONA ELECTRIC 2019 -HYUNDAI KONA ELECTRIC 2022: HYUNDAI KONA ELECTRIC 2019 -HYUNDAI IONIQ HYBRID 2017-2019: HYUNDAI IONIQ PLUG-IN HYBRID 2019 -HYUNDAI IONIQ HYBRID 2020-2022: HYUNDAI IONIQ PLUG-IN HYBRID 2019 -HYUNDAI IONIQ ELECTRIC 2020: HYUNDAI IONIQ PLUG-IN HYBRID 2019 -HYUNDAI ELANTRA 2017: HYUNDAI SONATA 2019 -HYUNDAI ELANTRA HYBRID 2021: HYUNDAI SONATA 2020 -HYUNDAI ELANTRA SE 2022 NON-SCC: HYUNDAI ELANTRA 2021 -HYUNDAI TUCSON 2019: HYUNDAI SANTA FE 2019 -HYUNDAI TUCSON 4TH GEN: HYUNDAI TUCSON HYBRID 4TH GEN -HYUNDAI SANTA FE 2022: HYUNDAI SANTA FE HYBRID 2022 -KIA K5 HYBRID 2020: KIA K5 2021 -KIA STINGER 2022: KIA STINGER GT2 2018 -GENESIS G90 2017: GENESIS G70 2018 -GENESIS G80 2017: GENESIS G70 2018 -GENESIS G70 2020: HYUNDAI SONATA 2020 -GENESIS G70 2021 NON-SCC: HYUNDAI SONATA 2020 - -HONDA FREED 2020: HONDA ODYSSEY 2018 -HONDA CR-V EU 2016: HONDA CR-V 2016 -HONDA CIVIC SEDAN 1.6 DIESEL 2019: HONDA CIVIC (BOSCH) 2019 -HONDA E 2020: HONDA CIVIC (BOSCH) 2019 -HONDA ODYSSEY CHN 2019: HONDA ODYSSEY 2018 - -BUICK LACROSSE 2017: CHEVROLET VOLT PREMIER 2017 -BUICK REGAL ESSENCE 2018: CHEVROLET VOLT PREMIER 2017 -CADILLAC ESCALADE ESV 2016: CHEVROLET VOLT PREMIER 2017 -CADILLAC ATS Premium Performance 2018: CHEVROLET VOLT PREMIER 2017 -CHEVROLET MALIBU PREMIER 2017: CHEVROLET VOLT PREMIER 2017 -HOLDEN ASTRA RS-V BK 2017: CHEVROLET VOLT PREMIER 2017 - -SKODA FABIA 4TH GEN: VOLKSWAGEN GOLF 7TH GEN -SKODA OCTAVIA 3RD GEN: SKODA SUPERB 3RD GEN -SKODA SCALA 1ST GEN: SKODA SUPERB 3RD GEN -SKODA KODIAQ 1ST GEN: SKODA SUPERB 3RD GEN -SKODA KAROQ 1ST GEN: SKODA SUPERB 3RD GEN -SKODA KAMIQ 1ST GEN: SKODA SUPERB 3RD GEN -VOLKSWAGEN CRAFTER 2ND GEN: VOLKSWAGEN TIGUAN 2ND GEN -VOLKSWAGEN T-ROC 1ST GEN: VOLKSWAGEN TIGUAN 2ND GEN -VOLKSWAGEN T-CROSS 1ST GEN: VOLKSWAGEN TIGUAN 2ND GEN -VOLKSWAGEN TOURAN 2ND GEN: VOLKSWAGEN TIGUAN 2ND GEN -VOLKSWAGEN TRANSPORTER T6.1: VOLKSWAGEN TIGUAN 2ND GEN -AUDI Q2 1ST GEN: VOLKSWAGEN TIGUAN 2ND GEN -VOLKSWAGEN TAOS 1ST GEN: VOLKSWAGEN TIGUAN 2ND GEN -VOLKSWAGEN POLO 6TH GEN: VOLKSWAGEN GOLF 7TH GEN -SEAT LEON 3RD GEN: VOLKSWAGEN GOLF 7TH GEN -SEAT ATECA 1ST GEN: VOLKSWAGEN GOLF 7TH GEN - -SUBARU CROSSTREK HYBRID 2020: SUBARU IMPREZA SPORT 2020 -SUBARU FORESTER HYBRID 2020: SUBARU IMPREZA SPORT 2020 -SUBARU LEGACY 7TH GEN: SUBARU OUTBACK 6TH GEN - -# Old subarus don't have much data guessing it's like low torque impreza -SUBARU OUTBACK 2018 - 2019: SUBARU IMPREZA LIMITED 2019 -SUBARU OUTBACK 2015 - 2017: SUBARU IMPREZA LIMITED 2019 -SUBARU FORESTER 2017 - 2018: SUBARU IMPREZA LIMITED 2019 -SUBARU LEGACY 2015 - 2018: SUBARU IMPREZA LIMITED 2019 -SUBARU ASCENT LIMITED 2019: SUBARU FORESTER 2019 diff --git a/selfdrive/car/toyota/carcontroller.py b/selfdrive/car/toyota/carcontroller.py index 1dc7e3926a..a7637d11d2 100644 --- a/selfdrive/car/toyota/carcontroller.py +++ b/selfdrive/car/toyota/carcontroller.py @@ -22,8 +22,8 @@ MAX_USER_TORQUE = 500 # LTA limits # EPS ignores commands above this angle and causes PCS to fault -MAX_STEER_ANGLE = 94.9461 # deg -MAX_DRIVER_TORQUE_ALLOWANCE = 150 # slightly above steering pressed allows some resistance when changing lanes +MAX_LTA_ANGLE = 94.9461 # deg +MAX_LTA_DRIVER_TORQUE_ALLOWANCE = 150 # slightly above steering pressed allows some resistance when changing lanes class CarController: @@ -50,7 +50,7 @@ class CarController: actuators = CC.actuators hud_control = CC.hudControl pcm_cancel_cmd = CC.cruiseControl.cancel - lat_active = CC.latActive and abs(CS.out.steeringTorque) < MAX_USER_TORQUE + lat_active = CC.latActive and abs(CS.out.steeringTorque) < MAX_USER_TORQUE and abs(CS.out.steeringAngleDeg) < MAX_USER_TORQUE # *** control msgs *** can_sends = [] @@ -76,31 +76,38 @@ class CarController: apply_angle = actuators.steeringAngleDeg + CS.out.steeringAngleOffsetDeg # Angular rate limit based on speed - apply_angle = apply_std_steer_angle_limits(apply_angle, self.last_angle, CS.out.vEgo, self.params) + apply_angle = apply_std_steer_angle_limits(apply_angle, self.last_angle, CS.out.vEgoRaw, self.params) if not lat_active: apply_angle = CS.out.steeringAngleDeg + CS.out.steeringAngleOffsetDeg - self.last_angle = clip(apply_angle, -MAX_STEER_ANGLE, MAX_STEER_ANGLE) + self.last_angle = clip(apply_angle, -MAX_LTA_ANGLE, MAX_LTA_ANGLE) self.last_steer = apply_steer - # toyota can trace shows this message at 42Hz, with counter adding alternatively 1 and 2; + # toyota can trace shows STEERING_LKA at 42Hz, with counter adding alternatively 1 and 2; # sending it at 100Hz seem to allow a higher rate limit, as the rate limit seems imposed # on consecutive messages - can_sends.append(toyotacan.create_steer_command(self.packer, apply_steer, apply_steer_req)) + can_sends.append(toyotacan.create_steer_command(self.packer, apply_steer, apply_steer_req and lat_active)) + + # STEERING_LTA does not seem to allow more rate by sending faster, and may wind up easier if self.frame % 2 == 0 and self.CP.carFingerprint in TSS2_CAR: lta_active = lat_active and self.CP.steerControlType == SteerControlType.angle + # cut steering torque with TORQUE_WIND_DOWN when either EPS torque or driver torque is above + # the threshold, to limit max lateral acceleration and for driver torque blending respectively. full_torque_condition = (abs(CS.out.steeringTorqueEps) < self.params.STEER_MAX and - abs(CS.out.steeringTorque) < MAX_DRIVER_TORQUE_ALLOWANCE) - setme_x64 = 100 if lta_active and full_torque_condition else 0 - can_sends.append(toyotacan.create_lta_steer_command(self.packer, self.last_angle, lta_active, self.frame // 2, setme_x64)) + abs(CS.out.steeringTorque) < MAX_LTA_DRIVER_TORQUE_ALLOWANCE) + + # TORQUE_WIND_DOWN at 0 ramps down torque at roughly the max down rate of 1500 units/sec + torque_wind_down = 100 if lta_active and full_torque_condition else 0 + can_sends.append(toyotacan.create_lta_steer_command(self.packer, self.CP.steerControlType, self.last_angle, + lta_active, self.frame // 2, torque_wind_down)) # *** gas and brake *** if self.CP.enableGasInterceptor and CC.longActive: MAX_INTERCEPTOR_GAS = 0.5 # RAV4 has very sensitive gas pedal - if self.CP.carFingerprint in (CAR.RAV4, CAR.RAV4H, CAR.HIGHLANDER, CAR.HIGHLANDERH): + if self.CP.carFingerprint in (CAR.RAV4, CAR.RAV4H, CAR.HIGHLANDER): PEDAL_SCALE = interp(CS.out.vEgo, [0.0, MIN_ACC_SPEED, MIN_ACC_SPEED + PEDAL_TRANSITION], [0.15, 0.3, 0.0]) elif self.CP.carFingerprint in (CAR.COROLLA,): PEDAL_SCALE = interp(CS.out.vEgo, [0.0, MIN_ACC_SPEED, MIN_ACC_SPEED + PEDAL_TRANSITION], [0.3, 0.4, 0.0]) @@ -119,6 +126,9 @@ class CarController: if not (CC.enabled and CS.out.cruiseState.enabled) and CS.pcm_acc_status: pcm_cancel_cmd = 1 + if self.CP.pcmCruise and not CS.pcm_acc_status and CS.out.cruiseState.enabled and self.CP.carFingerprint not in UNSUPPORTED_DSU_CAR: + pcm_cancel_cmd = 1 + # on entering standstill, send standstill request if CS.out.standstill and not self.last_standstill and (self.CP.carFingerprint not in NO_STOP_TIMER_CAR or self.CP.enableGasInterceptor) and \ not self._sng_hack: @@ -170,7 +180,7 @@ class CarController: if self.frame % 20 == 0 or send_ui: can_sends.append(toyotacan.create_ui_command(self.packer, steer_alert, pcm_cancel_cmd, hud_control.leftLaneVisible, hud_control.rightLaneVisible, hud_control.leftLaneDepart, - hud_control.rightLaneDepart, CC.latActive, CS.lkas_hud, CS.madsEnabled)) + hud_control.rightLaneDepart, CC.latActive and lat_active, CS.lkas_hud, CS.madsEnabled)) if (self.frame % 100 == 0 or send_ui) and (self.CP.enableDsu or self.CP.flags & ToyotaFlags.DISABLE_RADAR.value): can_sends.append(toyotacan.create_fcw_command(self.packer, fcw_alert)) diff --git a/selfdrive/car/toyota/carstate.py b/selfdrive/car/toyota/carstate.py index 88c8123229..921cd36b68 100644 --- a/selfdrive/car/toyota/carstate.py +++ b/selfdrive/car/toyota/carstate.py @@ -65,6 +65,7 @@ class CarState(CarStateBase): self.zss_compute = False self.zss_cruise_active_last = False self.zss_angle_offset = 0. + self.zss_threshold_count = 0 def update(self, cp, cp_cam): ret = car.CarState.new_message() @@ -81,14 +82,12 @@ class CarState(CarStateBase): ret.brakePressed = cp.vl["BRAKE_MODULE"]["BRAKE_PRESSED"] != 0 ret.brakeHoldActive = cp.vl["ESP_CONTROL"]["BRAKE_HOLD_ACTIVE"] == 1 - ret.brakeLights = bool(cp.vl["ESP_CONTROL"]["BRAKE_LIGHTS_ACC"]) + ret.brakeLightsDEPRECATED = bool(cp.vl["ESP_CONTROL"]["BRAKE_LIGHTS_ACC"]) if self.CP.enableGasInterceptor: ret.gas = (cp.vl["GAS_SENSOR"]["INTERCEPTOR_GAS"] + cp.vl["GAS_SENSOR"]["INTERCEPTOR_GAS2"]) // 2 ret.gasPressed = ret.gas > 805 else: - # TODO: find a new, common signal - msg = "GAS_PEDAL_HYBRID" if (self.CP.flags & ToyotaFlags.HYBRID) else "GAS_PEDAL" - ret.gas = cp.vl[msg]["GAS_PEDAL"] + # TODO: find a common gas pedal percentage signal ret.gasPressed = cp.vl["PCM_CRUISE"]["GAS_RELEASED"] == 0 ret.wheelSpeeds = self.get_wheel_speeds( @@ -101,7 +100,7 @@ class CarState(CarStateBase): ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw) ret.vEgoCluster = ret.vEgo * 1.015 # minimum of all the cars - ret.standstill = ret.vEgoRaw == 0 + ret.standstill = abs(ret.vEgoRaw) < 1e-3 if self.CP.carFingerprint != CAR.PRIUS_V: self.lta_status = cp_cam.vl["LKAS_HUD"]["SET_ME_X02"] @@ -118,6 +117,7 @@ class CarState(CarStateBase): self.prev_lkas_enabled = self.lkas_enabled ret.steeringAngleDeg = cp.vl["STEER_ANGLE_SENSOR"]["STEER_ANGLE"] + cp.vl["STEER_ANGLE_SENSOR"]["STEER_FRACTION"] + ret.steeringRateDeg = cp.vl["STEER_ANGLE_SENSOR"]["STEER_RATE"] torque_sensor_angle_deg = cp.vl["STEER_TORQUE_SENSOR"]["STEER_ANGLE"] # On some cars, the angle measurement is non-zero while initializing @@ -125,8 +125,8 @@ class CarState(CarStateBase): self.accurate_steer_angle_seen = True if self.accurate_steer_angle_seen: - # Offset seems to be invalid for large steering angles - if abs(ret.steeringAngleDeg) < 90 and cp.can_valid: + # Offset seems to be invalid for large steering angles and high angle rates + if abs(ret.steeringAngleDeg) < 90 and abs(ret.steeringRateDeg) < 100 and cp.can_valid: self.angle_offset.update(torque_sensor_angle_deg - ret.steeringAngleDeg) if self.angle_offset.initialized: @@ -135,20 +135,27 @@ class CarState(CarStateBase): # ZSS support thanks to dragonpilot and ErichMoraga if self.CP.spFlags & ToyotaFlagsSP.SP_ZSS: - zorro_steer = cp.vl["SECONDARY_STEER_ANGLE"]["ZORRO_STEER"] - # Only compute ZSS offset when acc is active - if bool(cp.vl["PCM_CRUISE"]["CRUISE_ACTIVE"]) and not self.zss_cruise_active_last: - self.zss_compute = True # Cruise was just activated, so allow offset to be recomputed - self.zss_cruise_active_last = bool(cp.vl["PCM_CRUISE"]["CRUISE_ACTIVE"]) + if self.zss_threshold_count <= 10: + zorro_steer = cp.vl["SECONDARY_STEER_ANGLE"]["ZORRO_STEER"] + # Only compute ZSS offset when control is active + control_active = self.madsEnabled or bool(cp.vl["PCM_CRUISE"]["CRUISE_ACTIVE"]) + if control_active and not self.zss_cruise_active_last: + self.zss_threshold_count = 0 + self.zss_compute = True # Control was just activated, so allow offset to be recomputed + self.zss_cruise_active_last = control_active - # Compute ZSS offset - if self.zss_compute: - if abs(ret.steeringAngleDeg) > 1e-3 and abs(zorro_steer) > 1e-3: - self.zss_angle_offset = zorro_steer - ret.steeringAngleDeg - # Apply offset - ret.steeringAngleDeg = zorro_steer - self.zss_angle_offset + # Compute ZSS offset + if self.zss_compute: + if abs(ret.steeringAngleDeg) > 1e-3 and abs(zorro_steer) > 1e-3: + self.zss_compute = False + self.zss_angle_offset = zorro_steer - ret.steeringAngleDeg - ret.steeringRateDeg = cp.vl["STEER_ANGLE_SENSOR"]["STEER_RATE"] + # Safety checks + steering_angle_deg = zorro_steer - self.zss_angle_offset + if abs(ret.steeringAngleDeg - steering_angle_deg) > 4: + self.zss_threshold_count += 1 + else: + ret.steeringAngleDeg = steering_angle_deg can_gear = int(cp.vl["GEAR_PACKET"]["GEAR"]) ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(can_gear, None)) @@ -197,7 +204,8 @@ class CarState(CarStateBase): if self.CP.flags & ToyotaFlags.SMART_DSU: self.gap_dist_button = cp.vl["SDSU"]["FD_BUTTON"] - self.follow_distance = cp.vl["PCM_CRUISE_2"]["PCM_FOLLOW_DISTANCE"] + fd_src = "PCM_CRUISE_ALT" if self.CP.carFingerprint in UNSUPPORTED_DSU_CAR else "PCM_CRUISE_2" + self.follow_distance = cp.vl[fd_src]["PCM_FOLLOW_DISTANCE"] # some TSS2 cars have low speed lockout permanently set, so ignore on those cars # these cars are identified by an ACC_TYPE value of 2. @@ -328,11 +336,6 @@ class CarState(CarStateBase): ("STEER_TORQUE_SENSOR", 50), ] - if CP.flags & ToyotaFlags.HYBRID: - messages.append(("GAS_PEDAL_HYBRID", 33)) - else: - messages.append(("GAS_PEDAL", 33)) - if CP.carFingerprint in UNSUPPORTED_DSU_CAR: messages.append(("DSU_CRUISE", 5)) messages.append(("PCM_CRUISE_ALT", 1)) @@ -364,7 +367,7 @@ class CarState(CarStateBase): messages.append(("SDSU", 33)) if CP.spFlags & ToyotaFlagsSP.SP_ZSS: - messages.apend(("SECONDARY_STEER_ANGLE", 0)) + messages.append(("SECONDARY_STEER_ANGLE", 0)) return CANParser(DBC[CP.carFingerprint]["pt"], messages, 0) diff --git a/selfdrive/car/toyota/fingerprints.py b/selfdrive/car/toyota/fingerprints.py new file mode 100644 index 0000000000..fc24f0e72c --- /dev/null +++ b/selfdrive/car/toyota/fingerprints.py @@ -0,0 +1,1628 @@ +from cereal import car +from openpilot.selfdrive.car.toyota.values import CAR + +Ecu = car.CarParams.Ecu + +FW_VERSIONS = { + CAR.AVALON: { + (Ecu.abs, 0x7b0, None): [ + b'F152607060\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881510701300\x00\x00\x00\x00', + b'881510705100\x00\x00\x00\x00', + b'881510705200\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B41051\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0230721100\x00\x00\x00\x00\x00\x00\x00\x00A0C01000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230721200\x00\x00\x00\x00\x00\x00\x00\x00A0C01000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702000\x00\x00\x00\x00', + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F0701100\x00\x00\x00\x00', + b'8646F0703000\x00\x00\x00\x00', + ], + }, + CAR.AVALON_2019: { + (Ecu.abs, 0x7b0, None): [ + b'F152607110\x00\x00\x00\x00\x00\x00', + b'F152607140\x00\x00\x00\x00\x00\x00', + b'F152607171\x00\x00\x00\x00\x00\x00', + b'F152607180\x00\x00\x00\x00\x00\x00', + b'F152641040\x00\x00\x00\x00\x00\x00', + b'F152641050\x00\x00\x00\x00\x00\x00', + b'F152641061\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881510703200\x00\x00\x00\x00', + b'881510704200\x00\x00\x00\x00', + b'881514107100\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B07010\x00\x00\x00\x00\x00\x00', + b'8965B41070\x00\x00\x00\x00\x00\x00', + b'8965B41080\x00\x00\x00\x00\x00\x00', + b'8965B41090\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x700, None): [ + b'\x01896630725100\x00\x00\x00\x00', + b'\x01896630725200\x00\x00\x00\x00', + b'\x01896630725300\x00\x00\x00\x00', + b'\x01896630735100\x00\x00\x00\x00', + b'\x01896630738000\x00\x00\x00\x00', + b'\x02896630724000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x02896630728000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x02896630737000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F0702100\x00\x00\x00\x00', + ], + }, + CAR.AVALON_TSS2: { + (Ecu.abs, 0x7b0, None): [ + b'\x01F152607240\x00\x00\x00\x00\x00\x00', + b'\x01F152607250\x00\x00\x00\x00\x00\x00', + b'\x01F152607280\x00\x00\x00\x00\x00\x00', + b'F152641080\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B41110\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x700, None): [ + b'\x018966306Q6000\x00\x00\x00\x00', + b'\x01896630742000\x00\x00\x00\x00', + b'\x01896630743000\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F6201200\x00\x00\x00\x00', + b'\x018821F6201300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F4104100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + b'\x028646F4104100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + ], + }, + CAR.CAMRY: { + (Ecu.engine, 0x700, None): [ + b'\x018966306L3100\x00\x00\x00\x00', + b'\x018966306L4200\x00\x00\x00\x00', + b'\x018966306L5200\x00\x00\x00\x00', + b'\x018966306L9000\x00\x00\x00\x00', + b'\x018966306P8000\x00\x00\x00\x00', + b'\x018966306Q3100\x00\x00\x00\x00', + b'\x018966306Q4000\x00\x00\x00\x00', + b'\x018966306Q4100\x00\x00\x00\x00', + b'\x018966306Q4200\x00\x00\x00\x00', + b'\x018966306Q6000\x00\x00\x00\x00', + b'\x018966333N1100\x00\x00\x00\x00', + b'\x018966333N4300\x00\x00\x00\x00', + b'\x018966333P3100\x00\x00\x00\x00', + b'\x018966333P3200\x00\x00\x00\x00', + b'\x018966333P4200\x00\x00\x00\x00', + b'\x018966333P4300\x00\x00\x00\x00', + b'\x018966333P4400\x00\x00\x00\x00', + b'\x018966333P4500\x00\x00\x00\x00', + b'\x018966333P4700\x00\x00\x00\x00', + b'\x018966333P4900\x00\x00\x00\x00', + b'\x018966333Q6000\x00\x00\x00\x00', + b'\x018966333Q6200\x00\x00\x00\x00', + b'\x018966333Q6300\x00\x00\x00\x00', + b'\x018966333Q6500\x00\x00\x00\x00', + b'\x018966333Q9200\x00\x00\x00\x00', + b'\x018966333W6000\x00\x00\x00\x00', + b'\x018966333X0000\x00\x00\x00\x00', + b'\x018966333X4000\x00\x00\x00\x00', + b'\x01896633T16000\x00\x00\x00\x00', + b'\x028966306B2100\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306B2300\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306B2500\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306N8100\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306N8200\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306N8300\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306N8400\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306R5000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306R5000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x028966306R6000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966306R6000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x028966306S0000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x028966306S0100\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x028966306S1100\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x02333P1100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'8821F0601200 ', + b'8821F0601300 ', + b'8821F0601400 ', + b'8821F0601500 ', + b'8821F0602000 ', + b'8821F0603300 ', + b'8821F0603400 ', + b'8821F0604000 ', + b'8821F0604100 ', + b'8821F0604200 ', + b'8821F0605200 ', + b'8821F0606200 ', + b'8821F0607200 ', + b'8821F0608000 ', + b'8821F0608200 ', + b'8821F0609000 ', + b'8821F0609100 ', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152606210\x00\x00\x00\x00\x00\x00', + b'F152606230\x00\x00\x00\x00\x00\x00', + b'F152606270\x00\x00\x00\x00\x00\x00', + b'F152606290\x00\x00\x00\x00\x00\x00', + b'F152606410\x00\x00\x00\x00\x00\x00', + b'F152633214\x00\x00\x00\x00\x00\x00', + b'F152633540\x00\x00\x00\x00\x00\x00', + b'F152633660\x00\x00\x00\x00\x00\x00', + b'F152633712\x00\x00\x00\x00\x00\x00', + b'F152633713\x00\x00\x00\x00\x00\x00', + b'F152633A10\x00\x00\x00\x00\x00\x00', + b'F152633A20\x00\x00\x00\x00\x00\x00', + b'F152633B51\x00\x00\x00\x00\x00\x00', + b'F152633B60\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B33540\x00\x00\x00\x00\x00\x00', + b'8965B33542\x00\x00\x00\x00\x00\x00', + b'8965B33550\x00\x00\x00\x00\x00\x00', + b'8965B33551\x00\x00\x00\x00\x00\x00', + b'8965B33580\x00\x00\x00\x00\x00\x00', + b'8965B33581\x00\x00\x00\x00\x00\x00', + b'8965B33611\x00\x00\x00\x00\x00\x00', + b'8965B33621\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F0601200 ', + b'8821F0601300 ', + b'8821F0601400 ', + b'8821F0601500 ', + b'8821F0602000 ', + b'8821F0603300 ', + b'8821F0603400 ', + b'8821F0604000 ', + b'8821F0604100 ', + b'8821F0604200 ', + b'8821F0605200 ', + b'8821F0606200 ', + b'8821F0607200 ', + b'8821F0608000 ', + b'8821F0608200 ', + b'8821F0609000 ', + b'8821F0609100 ', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F0601200 ', + b'8646F0601300 ', + b'8646F0601400 ', + b'8646F0603400 ', + b'8646F0603500 ', + b'8646F0604100 ', + b'8646F0605000 ', + b'8646F0606000 ', + b'8646F0606100 ', + b'8646F0607000 ', + b'8646F0607100 ', + ], + }, + CAR.CAMRY_TSS2: { + (Ecu.eps, 0x7a1, None): [ + b'8965B33630\x00\x00\x00\x00\x00\x00', + b'8965B33640\x00\x00\x00\x00\x00\x00', + b'8965B33650\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F152606370\x00\x00\x00\x00\x00\x00', + b'\x01F152606390\x00\x00\x00\x00\x00\x00', + b'\x01F152606400\x00\x00\x00\x00\x00\x00', + b'\x01F152606431\x00\x00\x00\x00\x00\x00', + b'F152633310\x00\x00\x00\x00\x00\x00', + b'F152633D00\x00\x00\x00\x00\x00\x00', + b'F152633D60\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x700, None): [ + b'\x018966306Q5000\x00\x00\x00\x00', + b'\x018966306Q6000\x00\x00\x00\x00', + b'\x018966306Q7000\x00\x00\x00\x00', + b'\x018966306Q9000\x00\x00\x00\x00', + b'\x018966306R3000\x00\x00\x00\x00', + b'\x018966306R8000\x00\x00\x00\x00', + b'\x018966306T0000\x00\x00\x00\x00', + b'\x018966306T3100\x00\x00\x00\x00', + b'\x018966306T3200\x00\x00\x00\x00', + b'\x018966306T4000\x00\x00\x00\x00', + b'\x018966306T4100\x00\x00\x00\x00', + b'\x018966306V1000\x00\x00\x00\x00', + b'\x01896633T20000\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F6201200\x00\x00\x00\x00', + b'\x018821F6201300\x00\x00\x00\x00', + b'\x018821F6201400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F0602100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + b'\x028646F0602200\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + b'\x028646F0602300\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + b'\x028646F3305200\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + b'\x028646F3305200\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + b'\x028646F3305300\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + b'\x028646F3305300\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + b'\x028646F3305500\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + ], + }, + CAR.CHR: { + (Ecu.engine, 0x700, None): [ + b'\x01896631017100\x00\x00\x00\x00', + b'\x01896631017200\x00\x00\x00\x00', + b'\x01896631021100\x00\x00\x00\x00', + b'\x0189663F413100\x00\x00\x00\x00', + b'\x0189663F414100\x00\x00\x00\x00', + b'\x0189663F438000\x00\x00\x00\x00', + b'\x02896631013200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x0289663F405000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x0289663F405100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x0289663F418000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x0289663F423000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x0289663F431000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'8821F0W01000 ', + b'8821F0W01100 ', + b'8821FF401600 ', + b'8821FF402300 ', + b'8821FF402400 ', + b'8821FF404000 ', + b'8821FF404100 ', + b'8821FF405000 ', + b'8821FF405100 ', + b'8821FF406000 ', + b'8821FF407100 ', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152610012\x00\x00\x00\x00\x00\x00', + b'F152610013\x00\x00\x00\x00\x00\x00', + b'F152610014\x00\x00\x00\x00\x00\x00', + b'F152610020\x00\x00\x00\x00\x00\x00', + b'F152610040\x00\x00\x00\x00\x00\x00', + b'F152610153\x00\x00\x00\x00\x00\x00', + b'F152610190\x00\x00\x00\x00\x00\x00', + b'F152610200\x00\x00\x00\x00\x00\x00', + b'F152610210\x00\x00\x00\x00\x00\x00', + b'F152610220\x00\x00\x00\x00\x00\x00', + b'F152610230\x00\x00\x00\x00\x00\x00', + b'F1526F4034\x00\x00\x00\x00\x00\x00', + b'F1526F4044\x00\x00\x00\x00\x00\x00', + b'F1526F4073\x00\x00\x00\x00\x00\x00', + b'F1526F4121\x00\x00\x00\x00\x00\x00', + b'F1526F4122\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B10011\x00\x00\x00\x00\x00\x00', + b'8965B10020\x00\x00\x00\x00\x00\x00', + b'8965B10040\x00\x00\x00\x00\x00\x00', + b'8965B10050\x00\x00\x00\x00\x00\x00', + b'8965B10070\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0331024000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', + b'\x0331024000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', + b'\x0331036000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', + b'\x033F401100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203102\x00\x00\x00\x00', + b'\x033F401200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', + b'\x033F424000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', + b'\x033F424000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F0W01000 ', + b'8821F0W01100 ', + b'8821FF401600 ', + b'8821FF402300 ', + b'8821FF402400 ', + b'8821FF404000 ', + b'8821FF404100 ', + b'8821FF405000 ', + b'8821FF405100 ', + b'8821FF406000 ', + b'8821FF407100 ', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646FF401700 ', + b'8646FF401800 ', + b'8646FF402100 ', + b'8646FF404000 ', + b'8646FF406000 ', + b'8646FF407000 ', + b'8646FF407100 ', + ], + }, + CAR.CHR_TSS2: { + (Ecu.abs, 0x7b0, None): [ + b'F152610041\x00\x00\x00\x00\x00\x00', + b'F152610260\x00\x00\x00\x00\x00\x00', + b'F1526F4270\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B10091\x00\x00\x00\x00\x00\x00', + b'8965B10092\x00\x00\x00\x00\x00\x00', + b'8965B10110\x00\x00\x00\x00\x00\x00', + b'8965B10111\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x700, None): [ + b'\x0189663F438000\x00\x00\x00\x00', + b'\x0189663F459000\x00\x00\x00\x00', + b'\x02896631025000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x0289663F453000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0331014000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821FF410200\x00\x00\x00\x00', + b'\x018821FF410300\x00\x00\x00\x00', + b'\x018821FF410500\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646FF410200\x00\x00\x00\x008646GF408200\x00\x00\x00\x00', + b'\x028646FF411100\x00\x00\x00\x008646GF409000\x00\x00\x00\x00', + b'\x028646FF413100\x00\x00\x00\x008646GF411100\x00\x00\x00\x00', + ], + }, + CAR.COROLLA: { + (Ecu.engine, 0x7e0, None): [ + b'\x0230ZC2000\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZC2100\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZC2200\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZC2300\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZC3000\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZC3100\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZC3200\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZC3300\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0330ZC1200\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881510201100\x00\x00\x00\x00', + b'881510201200\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152602190\x00\x00\x00\x00\x00\x00', + b'F152602191\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B02181\x00\x00\x00\x00\x00\x00', + b'8965B02191\x00\x00\x00\x00\x00\x00', + b'8965B48150\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F0201101\x00\x00\x00\x00', + b'8646F0201200\x00\x00\x00\x00', + ], + }, + CAR.COROLLA_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x01896630A22000\x00\x00\x00\x00', + b'\x01896630ZG2000\x00\x00\x00\x00', + b'\x01896630ZG5000\x00\x00\x00\x00', + b'\x01896630ZG5100\x00\x00\x00\x00', + b'\x01896630ZG5200\x00\x00\x00\x00', + b'\x01896630ZG5300\x00\x00\x00\x00', + b'\x01896630ZJ1000\x00\x00\x00\x00', + b'\x01896630ZP1000\x00\x00\x00\x00', + b'\x01896630ZP2000\x00\x00\x00\x00', + b'\x01896630ZQ5000\x00\x00\x00\x00', + b'\x01896630ZU8000\x00\x00\x00\x00', + b'\x01896630ZU9000\x00\x00\x00\x00', + b'\x01896630ZX4000\x00\x00\x00\x00', + b'\x018966312L8000\x00\x00\x00\x00', + b'\x018966312M0000\x00\x00\x00\x00', + b'\x018966312M9000\x00\x00\x00\x00', + b'\x018966312P9000\x00\x00\x00\x00', + b'\x018966312P9100\x00\x00\x00\x00', + b'\x018966312P9200\x00\x00\x00\x00', + b'\x018966312P9300\x00\x00\x00\x00', + b'\x018966312Q2300\x00\x00\x00\x00', + b'\x018966312Q8000\x00\x00\x00\x00', + b'\x018966312R0000\x00\x00\x00\x00', + b'\x018966312R0100\x00\x00\x00\x00', + b'\x018966312R0200\x00\x00\x00\x00', + b'\x018966312R1000\x00\x00\x00\x00', + b'\x018966312R1100\x00\x00\x00\x00', + b'\x018966312R3100\x00\x00\x00\x00', + b'\x018966312S5000\x00\x00\x00\x00', + b'\x018966312S7000\x00\x00\x00\x00', + b'\x018966312W3000\x00\x00\x00\x00', + b'\x018966312W9000\x00\x00\x00\x00', + b'\x01896637621000\x00\x00\x00\x00', + b'\x01896637623000\x00\x00\x00\x00', + b'\x01896637624000\x00\x00\x00\x00', + b'\x01896637626000\x00\x00\x00\x00', + b'\x01896637639000\x00\x00\x00\x00', + b'\x01896637643000\x00\x00\x00\x00', + b'\x01896637644000\x00\x00\x00\x00', + b'\x01896637648000\x00\x00\x00\x00', + b'\x02896630A07000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630A21000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZJ5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZK8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZN8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZQ3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZR2000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZT8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZT9000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896630ZZ0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966312K6000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966312L0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966312Q3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966312Q3100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966312Q4000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x038966312L7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF1205001\x00\x00\x00\x00', + b'\x038966312N1000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', + b'\x038966312T3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF1205001\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0230A10000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230A11000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZN4000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230ZN5000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02312K4000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02312U5000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x03312K7000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', + b'\x03312M3000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', + b'\x03312N6000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', + b'\x03312N6000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', + b'\x03312N6000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', + b'\x03312N6100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', + b'\x03312N6100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', + b'\x03312N6200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', + b'\x03312N6200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', + b'\x03312N6200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'\x018965B12350\x00\x00\x00\x00\x00\x00', + b'\x018965B12470\x00\x00\x00\x00\x00\x00', + b'\x018965B12490\x00\x00\x00\x00\x00\x00', + b'\x018965B12500\x00\x00\x00\x00\x00\x00', + b'\x018965B12510\x00\x00\x00\x00\x00\x00', + b'\x018965B12520\x00\x00\x00\x00\x00\x00', + b'\x018965B12530\x00\x00\x00\x00\x00\x00', + b'\x018965B1254000\x00\x00\x00\x00', + b'\x018965B1255000\x00\x00\x00\x00', + b'\x018965B1256000\x00\x00\x00\x00', + b'8965B12361\x00\x00\x00\x00\x00\x00', + b'8965B12451\x00\x00\x00\x00\x00\x00', + b'8965B16011\x00\x00\x00\x00\x00\x00', + b'8965B16101\x00\x00\x00\x00\x00\x00', + b'8965B16170\x00\x00\x00\x00\x00\x00', + b'8965B76012\x00\x00\x00\x00\x00\x00', + b'8965B76050\x00\x00\x00\x00\x00\x00', + b'8965B76091\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F152602280\x00\x00\x00\x00\x00\x00', + b'\x01F152602470\x00\x00\x00\x00\x00\x00', + b'\x01F152602560\x00\x00\x00\x00\x00\x00', + b'\x01F152602590\x00\x00\x00\x00\x00\x00', + b'\x01F152602650\x00\x00\x00\x00\x00\x00', + b'\x01F15260A010\x00\x00\x00\x00\x00\x00', + b'\x01F15260A050\x00\x00\x00\x00\x00\x00', + b'\x01F15260A070\x00\x00\x00\x00\x00\x00', + b'\x01F152612641\x00\x00\x00\x00\x00\x00', + b'\x01F152612651\x00\x00\x00\x00\x00\x00', + b'\x01F152612862\x00\x00\x00\x00\x00\x00', + b'\x01F152612B10\x00\x00\x00\x00\x00\x00', + b'\x01F152612B51\x00\x00\x00\x00\x00\x00', + b'\x01F152612B60\x00\x00\x00\x00\x00\x00', + b'\x01F152612B61\x00\x00\x00\x00\x00\x00', + b'\x01F152612B62\x00\x00\x00\x00\x00\x00', + b'\x01F152612B70\x00\x00\x00\x00\x00\x00', + b'\x01F152612B71\x00\x00\x00\x00\x00\x00', + b'\x01F152612B81\x00\x00\x00\x00\x00\x00', + b'\x01F152612B90\x00\x00\x00\x00\x00\x00', + b'\x01F152612B91\x00\x00\x00\x00\x00\x00', + b'\x01F152612C00\x00\x00\x00\x00\x00\x00', + b'\x01F152676250\x00\x00\x00\x00\x00\x00', + b'F152612590\x00\x00\x00\x00\x00\x00', + b'F152612691\x00\x00\x00\x00\x00\x00', + b'F152612692\x00\x00\x00\x00\x00\x00', + b'F152612700\x00\x00\x00\x00\x00\x00', + b'F152612710\x00\x00\x00\x00\x00\x00', + b'F152612790\x00\x00\x00\x00\x00\x00', + b'F152612800\x00\x00\x00\x00\x00\x00', + b'F152612820\x00\x00\x00\x00\x00\x00', + b'F152612840\x00\x00\x00\x00\x00\x00', + b'F152612842\x00\x00\x00\x00\x00\x00', + b'F152612890\x00\x00\x00\x00\x00\x00', + b'F152612A00\x00\x00\x00\x00\x00\x00', + b'F152612A10\x00\x00\x00\x00\x00\x00', + b'F152612D00\x00\x00\x00\x00\x00\x00', + b'F152616011\x00\x00\x00\x00\x00\x00', + b'F152616030\x00\x00\x00\x00\x00\x00', + b'F152616060\x00\x00\x00\x00\x00\x00', + b'F152642540\x00\x00\x00\x00\x00\x00', + b'F152676293\x00\x00\x00\x00\x00\x00', + b'F152676303\x00\x00\x00\x00\x00\x00', + b'F152676304\x00\x00\x00\x00\x00\x00', + b'F152676371\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301100\x00\x00\x00\x00', + b'\x018821F3301200\x00\x00\x00\x00', + b'\x018821F3301300\x00\x00\x00\x00', + b'\x018821F3301400\x00\x00\x00\x00', + b'\x018821F6201400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F12010D0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F1201100\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F1201200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F1201300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F1201400\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', + b'\x028646F1202000\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F1202100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F1202200\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', + b'\x028646F1206000\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', + b'\x028646F1601100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F1601200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F1601300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F4203400\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F76020C0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F7603100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F7603200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F7603300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F7605100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + ], + }, + CAR.HIGHLANDER: { + (Ecu.engine, 0x700, None): [ + b'\x01896630E09000\x00\x00\x00\x00', + b'\x01896630E43000\x00\x00\x00\x00', + b'\x01896630E43100\x00\x00\x00\x00', + b'\x01896630E43200\x00\x00\x00\x00', + b'\x01896630E44200\x00\x00\x00\x00', + b'\x01896630E44400\x00\x00\x00\x00', + b'\x01896630E45000\x00\x00\x00\x00', + b'\x01896630E45100\x00\x00\x00\x00', + b'\x01896630E45200\x00\x00\x00\x00', + b'\x01896630E46000\x00\x00\x00\x00', + b'\x01896630E46200\x00\x00\x00\x00', + b'\x01896630E74000\x00\x00\x00\x00', + b'\x01896630E75000\x00\x00\x00\x00', + b'\x01896630E76000\x00\x00\x00\x00', + b'\x01896630E77000\x00\x00\x00\x00', + b'\x01896630E83000\x00\x00\x00\x00', + b'\x01896630E84000\x00\x00\x00\x00', + b'\x01896630E85000\x00\x00\x00\x00', + b'\x01896630E86000\x00\x00\x00\x00', + b'\x01896630E88000\x00\x00\x00\x00', + b'\x01896630EA0000\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0230E40000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230E40100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230E51000\x00\x00\x00\x00\x00\x00\x00\x0050E17000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230EA2000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0230EA2100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B48140\x00\x00\x00\x00\x00\x00', + b'8965B48150\x00\x00\x00\x00\x00\x00', + b'8965B48160\x00\x00\x00\x00\x00\x00', + b'8965B48210\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F15260E011\x00\x00\x00\x00\x00\x00', + b'F152648541\x00\x00\x00\x00\x00\x00', + b'F152648542\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881510E01100\x00\x00\x00\x00', + b'881510E01200\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F0E01200\x00\x00\x00\x00', + b'8646F0E01300\x00\x00\x00\x00', + ], + }, + CAR.HIGHLANDER_TSS2: { + (Ecu.eps, 0x7a1, None): [ + b'8965B48241\x00\x00\x00\x00\x00\x00', + b'8965B48310\x00\x00\x00\x00\x00\x00', + b'8965B48320\x00\x00\x00\x00\x00\x00', + b'8965B48400\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F15260E051\x00\x00\x00\x00\x00\x00', + b'\x01F15260E05300\x00\x00\x00\x00', + b'\x01F15260E061\x00\x00\x00\x00\x00\x00', + b'\x01F15260E110\x00\x00\x00\x00\x00\x00', + b'\x01F15260E170\x00\x00\x00\x00\x00\x00', + b'\x01F15264872300\x00\x00\x00\x00', + b'\x01F15264872400\x00\x00\x00\x00', + b'\x01F15264872500\x00\x00\x00\x00', + b'\x01F15264872600\x00\x00\x00\x00', + b'\x01F15264872700\x00\x00\x00\x00', + b'\x01F15264873500\x00\x00\x00\x00', + b'\x01F152648C6300\x00\x00\x00\x00', + b'\x01F152648J4000\x00\x00\x00\x00', + b'\x01F152648J5000\x00\x00\x00\x00', + b'\x01F152648J6000\x00\x00\x00\x00', + b'\x01F152648J7000\x00\x00\x00\x00', + b'\x01F152648L5000\x00\x00\x00\x00', + ], + (Ecu.engine, 0x700, None): [ + b'\x01896630E62100\x00\x00\x00\x00', + b'\x01896630E62200\x00\x00\x00\x00', + b'\x01896630E64100\x00\x00\x00\x00', + b'\x01896630E64200\x00\x00\x00\x00', + b'\x01896630E64400\x00\x00\x00\x00', + b'\x01896630E67000\x00\x00\x00\x00', + b'\x01896630EA1000\x00\x00\x00\x00', + b'\x01896630EB1000\x00\x00\x00\x00', + b'\x01896630EB1100\x00\x00\x00\x00', + b'\x01896630EB1200\x00\x00\x00\x00', + b'\x01896630EB2000\x00\x00\x00\x00', + b'\x01896630EB2100\x00\x00\x00\x00', + b'\x01896630EB2200\x00\x00\x00\x00', + b'\x01896630EC4000\x00\x00\x00\x00', + b'\x01896630ED9000\x00\x00\x00\x00', + b'\x01896630ED9100\x00\x00\x00\x00', + b'\x01896630EE1000\x00\x00\x00\x00', + b'\x01896630EE1100\x00\x00\x00\x00', + b'\x01896630EE4000\x00\x00\x00\x00', + b'\x01896630EE4100\x00\x00\x00\x00', + b'\x01896630EE5000\x00\x00\x00\x00', + b'\x01896630EE6000\x00\x00\x00\x00', + b'\x01896630EE7000\x00\x00\x00\x00', + b'\x01896630EF8000\x00\x00\x00\x00', + b'\x01896630EG3000\x00\x00\x00\x00', + b'\x01896630EG5000\x00\x00\x00\x00', + b'\x02896630E66000\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + b'\x02896630E66100\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + b'\x02896630EB3000\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + b'\x02896630EB3100\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301400\x00\x00\x00\x00', + b'\x018821F6201200\x00\x00\x00\x00', + b'\x018821F6201300\x00\x00\x00\x00', + b'\x018821F6201400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F0E02100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F4803000\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + b'\x028646F4803000\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + b'\x028646F4803200\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_IS: { + (Ecu.engine, 0x700, None): [ + b'\x018966353M7000\x00\x00\x00\x00', + b'\x018966353M7100\x00\x00\x00\x00', + b'\x018966353Q2000\x00\x00\x00\x00', + b'\x018966353Q2300\x00\x00\x00\x00', + b'\x018966353Q4000\x00\x00\x00\x00', + b'\x018966353R1100\x00\x00\x00\x00', + b'\x018966353R7100\x00\x00\x00\x00', + b'\x018966353R8000\x00\x00\x00\x00', + b'\x018966353R8100\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0232480000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02353P7000\x00\x00\x00\x00\x00\x00\x00\x00530J5000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02353P9000\x00\x00\x00\x00\x00\x00\x00\x00553C1000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152653300\x00\x00\x00\x00\x00\x00', + b'F152653301\x00\x00\x00\x00\x00\x00', + b'F152653310\x00\x00\x00\x00\x00\x00', + b'F152653330\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881515306200\x00\x00\x00\x00', + b'881515306400\x00\x00\x00\x00', + b'881515306500\x00\x00\x00\x00', + b'881515307400\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B53270\x00\x00\x00\x00\x00\x00', + b'8965B53271\x00\x00\x00\x00\x00\x00', + b'8965B53280\x00\x00\x00\x00\x00\x00', + b'8965B53281\x00\x00\x00\x00\x00\x00', + b'8965B53311\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F5301101\x00\x00\x00\x00', + b'8646F5301200\x00\x00\x00\x00', + b'8646F5301300\x00\x00\x00\x00', + b'8646F5301400\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_IS_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x018966353S1000\x00\x00\x00\x00', + b'\x018966353S2000\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F15265337200\x00\x00\x00\x00', + b'\x01F15265342000\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B53450\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F6201200\x00\x00\x00\x00', + b'\x018821F6201300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F5303300\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + b'\x028646F5303400\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + ], + }, + CAR.PRIUS: { + (Ecu.engine, 0x700, None): [ + b'\x02896634761000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634761100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634761200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634762000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634762100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634763000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634763100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634765000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634765100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634769000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634769100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634769200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634770000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634770100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634774000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634774100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634774200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634782000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x02896634784000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347A0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347A5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347A8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347B0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x03896634759100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', + b'\x03896634759200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', + b'\x03896634759200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', + b'\x03896634759300\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', + b'\x03896634759300\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', + b'\x03896634760000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701002\x00\x00\x00\x00', + b'\x03896634760000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', + b'\x03896634760000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', + b'\x03896634760100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', + b'\x03896634760200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', + b'\x03896634760200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', + b'\x03896634760300\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', + b'\x03896634768000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703001\x00\x00\x00\x00', + b'\x03896634768000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703002\x00\x00\x00\x00', + b'\x03896634768100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703002\x00\x00\x00\x00', + b'\x03896634785000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4705001\x00\x00\x00\x00', + b'\x03896634785000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', + b'\x03896634786000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4705001\x00\x00\x00\x00', + b'\x03896634786000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', + b'\x03896634789000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703002\x00\x00\x00\x00', + b'\x038966347A3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', + b'\x038966347A3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707001\x00\x00\x00\x00', + b'\x038966347B6000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', + b'\x038966347B7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B47021\x00\x00\x00\x00\x00\x00', + b'8965B47022\x00\x00\x00\x00\x00\x00', + b'8965B47023\x00\x00\x00\x00\x00\x00', + b'8965B47050\x00\x00\x00\x00\x00\x00', + b'8965B47060\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152647290\x00\x00\x00\x00\x00\x00', + b'F152647300\x00\x00\x00\x00\x00\x00', + b'F152647310\x00\x00\x00\x00\x00\x00', + b'F152647414\x00\x00\x00\x00\x00\x00', + b'F152647415\x00\x00\x00\x00\x00\x00', + b'F152647416\x00\x00\x00\x00\x00\x00', + b'F152647417\x00\x00\x00\x00\x00\x00', + b'F152647470\x00\x00\x00\x00\x00\x00', + b'F152647490\x00\x00\x00\x00\x00\x00', + b'F152647682\x00\x00\x00\x00\x00\x00', + b'F152647683\x00\x00\x00\x00\x00\x00', + b'F152647684\x00\x00\x00\x00\x00\x00', + b'F152647862\x00\x00\x00\x00\x00\x00', + b'F152647863\x00\x00\x00\x00\x00\x00', + b'F152647864\x00\x00\x00\x00\x00\x00', + b'F152647865\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881514702300\x00\x00\x00\x00', + b'881514702400\x00\x00\x00\x00', + b'881514703100\x00\x00\x00\x00', + b'881514704100\x00\x00\x00\x00', + b'881514706000\x00\x00\x00\x00', + b'881514706100\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702000\x00\x00\x00\x00', + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F4701300\x00\x00\x00\x00', + b'8646F4702001\x00\x00\x00\x00', + b'8646F4702100\x00\x00\x00\x00', + b'8646F4702200\x00\x00\x00\x00', + b'8646F4705000\x00\x00\x00\x00', + b'8646F4705200\x00\x00\x00\x00', + ], + }, + CAR.PRIUS_V: { + (Ecu.abs, 0x7b0, None): [ + b'F152647280\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0234781000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881514705100\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F4703300\x00\x00\x00\x00', + ], + }, + CAR.RAV4: { + (Ecu.engine, 0x7e0, None): [ + b'\x02342Q1000\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q1100\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q1200\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q1300\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q2000\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q2100\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q2200\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q4000\x00\x00\x00\x00\x00\x00\x00\x0054215000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B42063\x00\x00\x00\x00\x00\x00', + b'8965B42073\x00\x00\x00\x00\x00\x00', + b'8965B42082\x00\x00\x00\x00\x00\x00', + b'8965B42083\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F15260R102\x00\x00\x00\x00\x00\x00', + b'F15260R103\x00\x00\x00\x00\x00\x00', + b'F152642492\x00\x00\x00\x00\x00\x00', + b'F152642493\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881514201200\x00\x00\x00\x00', + b'881514201300\x00\x00\x00\x00', + b'881514201400\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702000\x00\x00\x00\x00', + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F4201100\x00\x00\x00\x00', + b'8646F4201200\x00\x00\x00\x00', + b'8646F4202001\x00\x00\x00\x00', + b'8646F4202100\x00\x00\x00\x00', + b'8646F4204000\x00\x00\x00\x00', + ], + }, + CAR.RAV4H: { + (Ecu.engine, 0x7e0, None): [ + b'\x02342N9000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342N9100\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342P0000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B42102\x00\x00\x00\x00\x00\x00', + b'8965B42103\x00\x00\x00\x00\x00\x00', + b'8965B42112\x00\x00\x00\x00\x00\x00', + b'8965B42162\x00\x00\x00\x00\x00\x00', + b'8965B42163\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152642090\x00\x00\x00\x00\x00\x00', + b'F152642110\x00\x00\x00\x00\x00\x00', + b'F152642120\x00\x00\x00\x00\x00\x00', + b'F152642400\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881514202200\x00\x00\x00\x00', + b'881514202300\x00\x00\x00\x00', + b'881514202400\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702000\x00\x00\x00\x00', + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F4201100\x00\x00\x00\x00', + b'8646F4201200\x00\x00\x00\x00', + b'8646F4202001\x00\x00\x00\x00', + b'8646F4202100\x00\x00\x00\x00', + b'8646F4204000\x00\x00\x00\x00', + ], + }, + CAR.RAV4_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x01896630R58000\x00\x00\x00\x00', + b'\x01896630R58100\x00\x00\x00\x00', + b'\x018966342E2000\x00\x00\x00\x00', + b'\x018966342M5000\x00\x00\x00\x00', + b'\x018966342M8000\x00\x00\x00\x00', + b'\x018966342S9000\x00\x00\x00\x00', + b'\x018966342T1000\x00\x00\x00\x00', + b'\x018966342T6000\x00\x00\x00\x00', + b'\x018966342T9000\x00\x00\x00\x00', + b'\x018966342U4000\x00\x00\x00\x00', + b'\x018966342U4100\x00\x00\x00\x00', + b'\x018966342U5100\x00\x00\x00\x00', + b'\x018966342V0000\x00\x00\x00\x00', + b'\x018966342V3000\x00\x00\x00\x00', + b'\x018966342V3100\x00\x00\x00\x00', + b'\x018966342V3200\x00\x00\x00\x00', + b'\x018966342W5000\x00\x00\x00\x00', + b'\x018966342W7000\x00\x00\x00\x00', + b'\x018966342W8000\x00\x00\x00\x00', + b'\x018966342X5000\x00\x00\x00\x00', + b'\x018966342X6000\x00\x00\x00\x00', + b'\x01896634A05000\x00\x00\x00\x00', + b'\x01896634A15000\x00\x00\x00\x00', + b'\x01896634A19000\x00\x00\x00\x00', + b'\x01896634A19100\x00\x00\x00\x00', + b'\x01896634A20000\x00\x00\x00\x00', + b'\x01896634A20100\x00\x00\x00\x00', + b'\x01896634A22000\x00\x00\x00\x00', + b'\x01896634A22100\x00\x00\x00\x00', + b'\x01896634A25000\x00\x00\x00\x00', + b'\x01896634A30000\x00\x00\x00\x00', + b'\x01896634A44000\x00\x00\x00\x00', + b'\x01896634A45000\x00\x00\x00\x00', + b'\x01896634A46000\x00\x00\x00\x00', + b'\x028966342M7000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', + b'\x028966342T0000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', + b'\x028966342V1000\x00\x00\x00\x00897CF1202001\x00\x00\x00\x00', + b'\x028966342W4001\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', + b'\x028966342Y8000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', + b'\x028966342Z8000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', + b'\x02896634A13000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02896634A13001\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + b'\x02896634A13101\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + b'\x02896634A14001\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', + b'\x02896634A14001\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + b'\x02896634A14101\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', + b'\x02896634A18000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', + b'\x02896634A18100\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', + b'\x02896634A23000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02896634A23001\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', + b'\x02896634A23101\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', + b'\x02896634A43000\x00\x00\x00\x00897CF4201001\x00\x00\x00\x00', + b'\x02896634A47000\x00\x00\x00\x00897CF4201001\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F15260R210\x00\x00\x00\x00\x00\x00', + b'\x01F15260R220\x00\x00\x00\x00\x00\x00', + b'\x01F15260R290\x00\x00\x00\x00\x00\x00', + b'\x01F15260R292\x00\x00\x00\x00\x00\x00', + b'\x01F15260R300\x00\x00\x00\x00\x00\x00', + b'\x01F15260R302\x00\x00\x00\x00\x00\x00', + b'\x01F152642551\x00\x00\x00\x00\x00\x00', + b'\x01F152642561\x00\x00\x00\x00\x00\x00', + b'\x01F152642601\x00\x00\x00\x00\x00\x00', + b'\x01F152642700\x00\x00\x00\x00\x00\x00', + b'\x01F152642701\x00\x00\x00\x00\x00\x00', + b'\x01F152642710\x00\x00\x00\x00\x00\x00', + b'\x01F152642711\x00\x00\x00\x00\x00\x00', + b'\x01F152642750\x00\x00\x00\x00\x00\x00', + b'\x01F152642751\x00\x00\x00\x00\x00\x00', + b'F152642290\x00\x00\x00\x00\x00\x00', + b'F152642291\x00\x00\x00\x00\x00\x00', + b'F152642322\x00\x00\x00\x00\x00\x00', + b'F152642330\x00\x00\x00\x00\x00\x00', + b'F152642331\x00\x00\x00\x00\x00\x00', + b'F152642520\x00\x00\x00\x00\x00\x00', + b'F152642521\x00\x00\x00\x00\x00\x00', + b'F152642531\x00\x00\x00\x00\x00\x00', + b'F152642532\x00\x00\x00\x00\x00\x00', + b'F152642540\x00\x00\x00\x00\x00\x00', + b'F152642541\x00\x00\x00\x00\x00\x00', + b'F152642542\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'\x028965B0R01200\x00\x00\x00\x008965B0R02200\x00\x00\x00\x00', + b'\x028965B0R01300\x00\x00\x00\x008965B0R02300\x00\x00\x00\x00', + b'\x028965B0R01400\x00\x00\x00\x008965B0R02400\x00\x00\x00\x00', + b'8965B42170\x00\x00\x00\x00\x00\x00', + b'8965B42171\x00\x00\x00\x00\x00\x00', + b'8965B42180\x00\x00\x00\x00\x00\x00', + b'8965B42181\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301100\x00\x00\x00\x00', + b'\x018821F3301200\x00\x00\x00\x00', + b'\x018821F3301300\x00\x00\x00\x00', + b'\x018821F3301400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F4203200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F4203300\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F4203400\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F4203500\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F4203700\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F4203800\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', + ], + }, + CAR.RAV4_TSS2_2022: { + (Ecu.abs, 0x7b0, None): [ + b'\x01F15260R350\x00\x00\x00\x00\x00\x00', + b'\x01F15260R361\x00\x00\x00\x00\x00\x00', + b'\x01F15264283100\x00\x00\x00\x00', + b'\x01F15264283200\x00\x00\x00\x00', + b'\x01F15264286100\x00\x00\x00\x00', + b'\x01F15264286200\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'\x028965B0R01500\x00\x00\x00\x008965B0R02500\x00\x00\x00\x00', + b'8965B42172\x00\x00\x00\x00\x00\x00', + b'8965B42182\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x700, None): [ + b'\x01896634A02001\x00\x00\x00\x00', + b'\x01896634A03000\x00\x00\x00\x00', + b'\x01896634A08000\x00\x00\x00\x00', + b'\x01896634A61000\x00\x00\x00\x00', + b'\x01896634A62000\x00\x00\x00\x00', + b'\x01896634A62100\x00\x00\x00\x00', + b'\x01896634A63000\x00\x00\x00\x00', + b'\x01896634A88000\x00\x00\x00\x00', + b'\x01896634A89000\x00\x00\x00\x00', + b'\x01896634A89100\x00\x00\x00\x00', + b'\x01896634AA0000\x00\x00\x00\x00', + b'\x01896634AA0100\x00\x00\x00\x00', + b'\x01896634AA1000\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F0R01100\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F0R02100\x00\x00\x00\x008646G0R01100\x00\x00\x00\x00', + ], + }, + CAR.RAV4_TSS2_2023: { + (Ecu.abs, 0x7b0, None): [ + b'\x01F15260R450\x00\x00\x00\x00\x00\x00', + b'\x01F15260R51000\x00\x00\x00\x00', + b'\x01F15264283200\x00\x00\x00\x00', + b'\x01F15264283300\x00\x00\x00\x00', + b'\x01F152642F1000\x00\x00\x00\x00', + b'\x01F152642F8000\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'\x028965B0R11000\x00\x00\x00\x008965B0R12000\x00\x00\x00\x00', + b'8965B42371\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x700, None): [ + b'\x01896634A88100\x00\x00\x00\x00', + b'\x01896634A89100\x00\x00\x00\x00', + b'\x01896634AE1001\x00\x00\x00\x00', + b'\x01896634AF0000\x00\x00\x00\x00', + b'\x01896634AJ2000\x00\x00\x00\x00', + b'\x01896634AL5000\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F0R03100\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F0R05100\x00\x00\x00\x008646G0R02100\x00\x00\x00\x00', + b'\x028646F0R05200\x00\x00\x00\x008646G0R02200\x00\x00\x00\x00', + b'\x028646F0R11000\x00\x00\x00\x008646G0R04000\x00\x00\x00\x00', + ], + }, + CAR.SIENNA: { + (Ecu.engine, 0x700, None): [ + b'\x01896630832100\x00\x00\x00\x00', + b'\x01896630832200\x00\x00\x00\x00', + b'\x01896630838000\x00\x00\x00\x00', + b'\x01896630838100\x00\x00\x00\x00', + b'\x01896630842000\x00\x00\x00\x00', + b'\x01896630843000\x00\x00\x00\x00', + b'\x01896630851000\x00\x00\x00\x00', + b'\x01896630851100\x00\x00\x00\x00', + b'\x01896630851200\x00\x00\x00\x00', + b'\x01896630852000\x00\x00\x00\x00', + b'\x01896630852100\x00\x00\x00\x00', + b'\x01896630859000\x00\x00\x00\x00', + b'\x01896630860000\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B45070\x00\x00\x00\x00\x00\x00', + b'8965B45080\x00\x00\x00\x00\x00\x00', + b'8965B45082\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152608130\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881510801100\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702200\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F0801100\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_CTH: { + (Ecu.dsu, 0x791, None): [ + b'881517601100\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152676144\x00\x00\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0237635000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F7601100\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_ES_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x018966306U6000\x00\x00\x00\x00', + b'\x018966333T5000\x00\x00\x00\x00', + b'\x018966333T5100\x00\x00\x00\x00', + b'\x018966333X6000\x00\x00\x00\x00', + b'\x01896633T07000\x00\x00\x00\x00', + b'\x01896633T38000\x00\x00\x00\x00', + b'\x01896633T58000\x00\x00\x00\x00', + b'\x028966333S8000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', + b'\x028966333S8000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x028966333T0100\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x028966333V4000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x028966333W1000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', + b'\x02896633T09000\x00\x00\x00\x00897CF3307001\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F152606281\x00\x00\x00\x00\x00\x00', + b'\x01F152606340\x00\x00\x00\x00\x00\x00', + b'\x01F152606461\x00\x00\x00\x00\x00\x00', + b'\x01F15260646200\x00\x00\x00\x00', + b'F152633423\x00\x00\x00\x00\x00\x00', + b'F152633680\x00\x00\x00\x00\x00\x00', + b'F152633681\x00\x00\x00\x00\x00\x00', + b'F152633F50\x00\x00\x00\x00\x00\x00', + b'F152633F51\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B33252\x00\x00\x00\x00\x00\x00', + b'8965B33590\x00\x00\x00\x00\x00\x00', + b'8965B33690\x00\x00\x00\x00\x00\x00', + b'8965B33721\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301100\x00\x00\x00\x00', + b'\x018821F3301200\x00\x00\x00\x00', + b'\x018821F3301300\x00\x00\x00\x00', + b'\x018821F3301400\x00\x00\x00\x00', + b'\x018821F6201200\x00\x00\x00\x00', + b'\x018821F6201300\x00\x00\x00\x00', + b'\x018821F6201400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F0610000\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + b'\x028646F33030D0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F3303100\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F3303200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F3304100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F3304200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F3304300\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', + b'\x028646F3309100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', + b'\x028646F3309100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_ES: { + (Ecu.engine, 0x7e0, None): [ + b'\x02333M4200\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02333R0000\x00\x00\x00\x00\x00\x00\x00\x00A0C01000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152606202\x00\x00\x00\x00\x00\x00', + b'F152633171\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881513309400\x00\x00\x00\x00', + b'881513309500\x00\x00\x00\x00', + b'881513310400\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B33502\x00\x00\x00\x00\x00\x00', + b'8965B33512\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4701100\x00\x00\x00\x00', + b'8821F4701200\x00\x00\x00\x00', + b'8821F4701300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F3302001\x00\x00\x00\x00', + b'8646F3302100\x00\x00\x00\x00', + b'8646F3302200\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_GS_F: { + (Ecu.engine, 0x7e0, None): [ + b'\x0233075200\x00\x00\x00\x00\x00\x00\x00\x00530B9000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152630700\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881513016200\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B30551\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702000\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F3002100\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_NX: { + (Ecu.engine, 0x700, None): [ + b'\x01896637850000\x00\x00\x00\x00', + b'\x01896637851000\x00\x00\x00\x00', + b'\x01896637852000\x00\x00\x00\x00', + b'\x01896637854000\x00\x00\x00\x00', + b'\x01896637873000\x00\x00\x00\x00', + b'\x01896637878000\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0237841000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0237842000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0237880000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0237882000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0237886000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152678130\x00\x00\x00\x00\x00\x00', + b'F152678140\x00\x00\x00\x00\x00\x00', + b'F152678160\x00\x00\x00\x00\x00\x00', + b'F152678170\x00\x00\x00\x00\x00\x00', + b'F152678171\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881517803100\x00\x00\x00\x00', + b'881517803300\x00\x00\x00\x00', + b'881517804100\x00\x00\x00\x00', + b'881517804300\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B78060\x00\x00\x00\x00\x00\x00', + b'8965B78080\x00\x00\x00\x00\x00\x00', + b'8965B78100\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702100\x00\x00\x00\x00', + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F7801100\x00\x00\x00\x00', + b'8646F7801300\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_NX_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x018966378B2000\x00\x00\x00\x00', + b'\x018966378B2100\x00\x00\x00\x00', + b'\x018966378B3000\x00\x00\x00\x00', + b'\x018966378B3100\x00\x00\x00\x00', + b'\x018966378B4100\x00\x00\x00\x00', + b'\x018966378G2000\x00\x00\x00\x00', + b'\x018966378G3000\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0237887000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02378A0000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02378F4000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F152678221\x00\x00\x00\x00\x00\x00', + b'F152678210\x00\x00\x00\x00\x00\x00', + b'F152678211\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B78120\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301200\x00\x00\x00\x00', + b'\x018821F3301300\x00\x00\x00\x00', + b'\x018821F3301400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F78030A0\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F7803100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_RC: { + (Ecu.engine, 0x700, None): [ + b'\x01896632461100\x00\x00\x00\x00', + b'\x01896632478100\x00\x00\x00\x00', + b'\x01896632478200\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x0232484000\x00\x00\x00\x00\x00\x00\x00\x0052422000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152624150\x00\x00\x00\x00\x00\x00', + b'F152624221\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881512404100\x00\x00\x00\x00', + b'881512407000\x00\x00\x00\x00', + b'881512409100\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B24081\x00\x00\x00\x00\x00\x00', + b'8965B24240\x00\x00\x00\x00\x00\x00', + b'8965B24320\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4702300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F2401100\x00\x00\x00\x00', + b'8646F2401200\x00\x00\x00\x00', + b'8646F2402200\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_RX: { + (Ecu.engine, 0x700, None): [ + b'\x01896630E36200\x00\x00\x00\x00', + b'\x01896630E36300\x00\x00\x00\x00', + b'\x01896630E37100\x00\x00\x00\x00', + b'\x01896630E37200\x00\x00\x00\x00', + b'\x01896630E37300\x00\x00\x00\x00', + b'\x01896630E41000\x00\x00\x00\x00', + b'\x01896630E41100\x00\x00\x00\x00', + b'\x01896630E41200\x00\x00\x00\x00', + b'\x01896630E41500\x00\x00\x00\x00', + b'\x01896630EA3100\x00\x00\x00\x00', + b'\x01896630EA3400\x00\x00\x00\x00', + b'\x01896630EA4100\x00\x00\x00\x00', + b'\x01896630EA4300\x00\x00\x00\x00', + b'\x01896630EA4400\x00\x00\x00\x00', + b'\x01896630EA6300\x00\x00\x00\x00', + b'\x018966348R1300\x00\x00\x00\x00', + b'\x018966348R8500\x00\x00\x00\x00', + b'\x018966348W1300\x00\x00\x00\x00', + b'\x018966348W2300\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x02348J7000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348N0000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348Q4000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348Q4100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348T1000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348T1100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348T1200\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348T3000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348V6000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348Z3000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152648361\x00\x00\x00\x00\x00\x00', + b'F152648472\x00\x00\x00\x00\x00\x00', + b'F152648473\x00\x00\x00\x00\x00\x00', + b'F152648474\x00\x00\x00\x00\x00\x00', + b'F152648492\x00\x00\x00\x00\x00\x00', + b'F152648493\x00\x00\x00\x00\x00\x00', + b'F152648494\x00\x00\x00\x00\x00\x00', + b'F152648501\x00\x00\x00\x00\x00\x00', + b'F152648502\x00\x00\x00\x00\x00\x00', + b'F152648504\x00\x00\x00\x00\x00\x00', + b'F152648630\x00\x00\x00\x00\x00\x00', + b'F152648740\x00\x00\x00\x00\x00\x00', + b'F152648A30\x00\x00\x00\x00\x00\x00', + ], + (Ecu.dsu, 0x791, None): [ + b'881514810300\x00\x00\x00\x00', + b'881514810500\x00\x00\x00\x00', + b'881514810700\x00\x00\x00\x00', + b'881514811300\x00\x00\x00\x00', + b'881514811500\x00\x00\x00\x00', + b'881514811700\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B0E011\x00\x00\x00\x00\x00\x00', + b'8965B0E012\x00\x00\x00\x00\x00\x00', + b'8965B48102\x00\x00\x00\x00\x00\x00', + b'8965B48111\x00\x00\x00\x00\x00\x00', + b'8965B48112\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'8821F4701000\x00\x00\x00\x00', + b'8821F4701100\x00\x00\x00\x00', + b'8821F4701200\x00\x00\x00\x00', + b'8821F4701300\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'8646F4801100\x00\x00\x00\x00', + b'8646F4801200\x00\x00\x00\x00', + b'8646F4802001\x00\x00\x00\x00', + b'8646F4802100\x00\x00\x00\x00', + b'8646F4802200\x00\x00\x00\x00', + b'8646F4809000\x00\x00\x00\x00', + ], + }, + CAR.LEXUS_RX_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x01896630EA9000\x00\x00\x00\x00', + b'\x01896630EB0000\x00\x00\x00\x00', + b'\x01896630EC9000\x00\x00\x00\x00', + b'\x01896630EC9100\x00\x00\x00\x00', + b'\x01896630ED0000\x00\x00\x00\x00', + b'\x01896630ED0100\x00\x00\x00\x00', + b'\x01896630ED5000\x00\x00\x00\x00', + b'\x01896630ED6000\x00\x00\x00\x00', + b'\x018966348R9200\x00\x00\x00\x00', + b'\x018966348T8000\x00\x00\x00\x00', + b'\x018966348W5100\x00\x00\x00\x00', + b'\x018966348W9000\x00\x00\x00\x00', + b'\x018966348X0000\x00\x00\x00\x00', + b'\x01896634D12000\x00\x00\x00\x00', + b'\x01896634D12100\x00\x00\x00\x00', + b'\x01896634D43000\x00\x00\x00\x00', + b'\x01896634D44000\x00\x00\x00\x00', + ], + (Ecu.engine, 0x7e0, None): [ + b'\x02348U2000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348X4000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348X5000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348X8000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02348Y3000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0234D14000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0234D16000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F15260E031\x00\x00\x00\x00\x00\x00', + b'\x01F15260E041\x00\x00\x00\x00\x00\x00', + b'\x01F152648781\x00\x00\x00\x00\x00\x00', + b'\x01F152648801\x00\x00\x00\x00\x00\x00', + b'F152648493\x00\x00\x00\x00\x00\x00', + b'F152648811\x00\x00\x00\x00\x00\x00', + b'F152648831\x00\x00\x00\x00\x00\x00', + b'F152648891\x00\x00\x00\x00\x00\x00', + b'F152648C80\x00\x00\x00\x00\x00\x00', + b'F152648D00\x00\x00\x00\x00\x00\x00', + b'F152648D60\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B48261\x00\x00\x00\x00\x00\x00', + b'8965B48271\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301100\x00\x00\x00\x00', + b'\x018821F3301300\x00\x00\x00\x00', + b'\x018821F3301400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F4810100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', + b'\x028646F4810200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F4810300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F4810400\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + ], + }, + CAR.PRIUS_TSS2: { + (Ecu.engine, 0x700, None): [ + b'\x028966347B1000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347C4000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347C6000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347C7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x028966347C8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', + b'\x038966347C0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710101\x00\x00\x00\x00', + b'\x038966347C1000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710101\x00\x00\x00\x00', + b'\x038966347C5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707101\x00\x00\x00\x00', + b'\x038966347C5100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707101\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152647500\x00\x00\x00\x00\x00\x00', + b'F152647510\x00\x00\x00\x00\x00\x00', + b'F152647520\x00\x00\x00\x00\x00\x00', + b'F152647521\x00\x00\x00\x00\x00\x00', + b'F152647531\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B47070\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F4707000\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646F4710000\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', + b'\x028646F4712000\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', + ], + }, + CAR.MIRAI: { + (Ecu.abs, 0x7d1, None): [ + b'\x01898A36203000\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'\x01F15266203200\x00\x00\x00\x00', + b'\x01F15266203500\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'\x028965B6204100\x00\x00\x00\x008965B6203100\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F6201200\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F6201400\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + ], + }, + CAR.ALPHARD_TSS2: { + (Ecu.engine, 0x7e0, None): [ + b'\x0235870000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0235879000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x0235883000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.eps, 0x7a1, None): [ + b'8965B58040\x00\x00\x00\x00\x00\x00', + b'8965B58052\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x7b0, None): [ + b'F152658320\x00\x00\x00\x00\x00\x00', + b'F152658341\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x750, 0xf): [ + b'\x018821F3301200\x00\x00\x00\x00', + b'\x018821F3301400\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F58010C0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', + b'\x028646F5803200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + b'\x028646FV201000\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', + ], + }, +} diff --git a/selfdrive/car/toyota/interface.py b/selfdrive/car/toyota/interface.py index c6bf4c8bd1..bb5f153c82 100644 --- a/selfdrive/car/toyota/interface.py +++ b/selfdrive/car/toyota/interface.py @@ -1,11 +1,11 @@ from cereal import car from openpilot.common.conversions import Conversions as CV from openpilot.common.numpy_fast import clip -from openpilot.common.params import Params, put_nonblocking +from openpilot.common.params import Params from panda import Panda from panda.python import uds from openpilot.selfdrive.car.toyota.values import Ecu, CAR, DBC, ToyotaFlags, ToyotaFlagsSP, CarControllerParams, TSS2_CAR, RADAR_ACC_CAR, NO_DSU_CAR, \ - MIN_ACC_SPEED, EPS_SCALE, EV_HYBRID_CAR, UNSUPPORTED_DSU_CAR, NO_STOP_TIMER_CAR, ANGLE_CONTROL_CAR + MIN_ACC_SPEED, EPS_SCALE, UNSUPPORTED_DSU_CAR, NO_STOP_TIMER_CAR, ANGLE_CONTROL_CAR from openpilot.selfdrive.car import create_button_events, get_safety_config, create_mads_event from openpilot.selfdrive.car.disable_ecu import disable_ecu from openpilot.selfdrive.car.interfaces import CarInterfaceBase @@ -34,22 +34,18 @@ class CarInterface(CarInterfaceBase): if DBC[candidate]["pt"] == "toyota_new_mc_pt_generated": ret.safetyConfigs[0].safetyParam |= Panda.FLAG_TOYOTA_ALT_BRAKE - # Allow angle control cars with whitelisted EPSs to use torque control (made in Japan) - # So far only hybrid RAV4 2023 has been seen with this FW version - angle_car_torque_fw = any(fw.ecu == "eps" and fw.fwVersion == b'8965B42371\x00\x00\x00\x00\x00\x00' for fw in car_fw) - if candidate not in ANGLE_CONTROL_CAR or (angle_car_torque_fw and candidate == CAR.RAV4H_TSS2_2023): - CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) - - ret.steerActuatorDelay = 0.12 # Default delay, Prius has larger delay - ret.steerLimitTimer = 0.4 - else: - ret.dashcamOnly = True + if candidate in ANGLE_CONTROL_CAR: ret.steerControlType = SteerControlType.angle ret.safetyConfigs[0].safetyParam |= Panda.FLAG_TOYOTA_LTA # LTA control can be more delayed and winds up more often - ret.steerActuatorDelay = 0.25 + ret.steerActuatorDelay = 0.18 ret.steerLimitTimer = 0.8 + else: + CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) + + ret.steerActuatorDelay = 0.12 # Default delay, Prius has larger delay + ret.steerLimitTimer = 0.4 if 0x23 in fingerprint[0]: # Detect if ZSS is present ret.spFlags |= ToyotaFlagsSP.SP_ZSS.value @@ -91,7 +87,7 @@ class CarInterface(CarInterfaceBase): ret.tireStiffnessFactor = 0.444 # not optimized yet ret.mass = 2860. * CV.LB_TO_KG # mean between normal and hybrid - elif candidate in (CAR.LEXUS_RX, CAR.LEXUS_RXH, CAR.LEXUS_RX_TSS2, CAR.LEXUS_RXH_TSS2): + elif candidate in (CAR.LEXUS_RX, CAR.LEXUS_RX_TSS2): stop_and_go = True ret.wheelbase = 2.79 ret.steerRatio = 16. # 14.8 is spec end-to-end @@ -99,28 +95,29 @@ class CarInterface(CarInterfaceBase): ret.tireStiffnessFactor = 0.5533 ret.mass = 4481. * CV.LB_TO_KG # mean between min and max - elif candidate in (CAR.CHR, CAR.CHRH, CAR.CHR_TSS2, CAR.CHRH_TSS2): + elif candidate in (CAR.CHR, CAR.CHR_TSS2): stop_and_go = True ret.wheelbase = 2.63906 ret.steerRatio = 13.6 ret.tireStiffnessFactor = 0.7933 ret.mass = 3300. * CV.LB_TO_KG - elif candidate in (CAR.CAMRY, CAR.CAMRYH, CAR.CAMRY_TSS2, CAR.CAMRYH_TSS2): + elif candidate in (CAR.CAMRY, CAR.CAMRY_TSS2): stop_and_go = True ret.wheelbase = 2.82448 ret.steerRatio = 13.7 ret.tireStiffnessFactor = 0.7933 ret.mass = 3400. * CV.LB_TO_KG # mean between normal and hybrid - elif candidate in (CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.HIGHLANDER_TSS2, CAR.HIGHLANDERH_TSS2): + elif candidate in (CAR.HIGHLANDER, CAR.HIGHLANDER_TSS2): + # TODO: TSS-P models can do stop and go, but unclear if it requires sDSU or unplugging DSU stop_and_go = True ret.wheelbase = 2.8194 # average of 109.8 and 112.2 in ret.steerRatio = 16.0 ret.tireStiffnessFactor = 0.8 ret.mass = 4516. * CV.LB_TO_KG # mean between normal and hybrid - elif candidate in (CAR.AVALON, CAR.AVALON_2019, CAR.AVALONH_2019, CAR.AVALON_TSS2, CAR.AVALONH_TSS2): + elif candidate in (CAR.AVALON, CAR.AVALON_2019, CAR.AVALON_TSS2): # starting from 2019, all Avalon variants have stop and go # https://engage.toyota.com/static/images/toyota_safety_sense/TSS_Applicability_Chart.pdf stop_and_go = candidate != CAR.AVALON @@ -129,41 +126,34 @@ class CarInterface(CarInterfaceBase): ret.tireStiffnessFactor = 0.7983 ret.mass = 3505. * CV.LB_TO_KG # mean between normal and hybrid - elif candidate in (CAR.RAV4_TSS2, CAR.RAV4_TSS2_2022, CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, - CAR.RAV4_TSS2_2023, CAR.RAV4H_TSS2_2023): + elif candidate in (CAR.RAV4_TSS2, CAR.RAV4_TSS2_2022, CAR.RAV4_TSS2_2023): ret.wheelbase = 2.68986 ret.steerRatio = 14.3 ret.tireStiffnessFactor = 0.7933 ret.mass = 3585. * CV.LB_TO_KG # Average between ICE and Hybrid + ret.lateralTuning.init('pid') + ret.lateralTuning.pid.kiBP = [0.0] + ret.lateralTuning.pid.kpBP = [0.0] + ret.lateralTuning.pid.kpV = [0.6] + ret.lateralTuning.pid.kiV = [0.1] + ret.lateralTuning.pid.kf = 0.00007818594 - # Only specific EPS FW accept torque on 2023 RAV4, so they likely are all the same - # TODO: revisit this disparity if there is a divide for 2023 - if candidate not in (CAR.RAV4_TSS2_2023, CAR.RAV4H_TSS2_2023): - ret.lateralTuning.init('pid') - ret.lateralTuning.pid.kiBP = [0.0] - ret.lateralTuning.pid.kpBP = [0.0] - ret.lateralTuning.pid.kpV = [0.6] - ret.lateralTuning.pid.kiV = [0.1] - ret.lateralTuning.pid.kf = 0.00007818594 + # 2019+ RAV4 TSS2 uses two different steering racks and specific tuning seems to be necessary. + # See https://github.com/commaai/openpilot/pull/21429#issuecomment-873652891 + for fw in car_fw: + if fw.ecu == "eps" and (fw.fwVersion.startswith(b'\x02') or fw.fwVersion in [b'8965B42181\x00\x00\x00\x00\x00\x00']): + ret.lateralTuning.pid.kpV = [0.15] + ret.lateralTuning.pid.kiV = [0.05] + ret.lateralTuning.pid.kf = 0.00004 + break - # 2019+ RAV4 TSS2 uses two different steering racks and specific tuning seems to be necessary. - # See https://github.com/commaai/openpilot/pull/21429#issuecomment-873652891 - for fw in car_fw: - if fw.ecu == "eps" and (fw.fwVersion.startswith(b'\x02') or fw.fwVersion in [b'8965B42181\x00\x00\x00\x00\x00\x00']): - ret.lateralTuning.pid.kpV = [0.15] - ret.lateralTuning.pid.kiV = [0.05] - ret.lateralTuning.pid.kf = 0.00004 - break - - elif candidate in (CAR.COROLLA_TSS2, CAR.COROLLAH_TSS2): + elif candidate == CAR.COROLLA_TSS2: ret.wheelbase = 2.67 # Average between 2.70 for sedan and 2.64 for hatchback ret.steerRatio = 13.9 ret.tireStiffnessFactor = 0.444 # not optimized yet ret.mass = 3060. * CV.LB_TO_KG - elif candidate in (CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_ES_TSS2, CAR.LEXUS_ESH_TSS2): - if candidate not in (CAR.LEXUS_ES,): # TODO: LEXUS_ES may have sng - stop_and_go = True + elif candidate in (CAR.LEXUS_ES, CAR.LEXUS_ES_TSS2): ret.wheelbase = 2.8702 ret.steerRatio = 16.0 # not optimized ret.tireStiffnessFactor = 0.444 # not optimized yet @@ -182,6 +172,12 @@ class CarInterface(CarInterfaceBase): ret.tireStiffnessFactor = 0.444 ret.mass = 3736.8 * CV.LB_TO_KG + elif candidate == CAR.LEXUS_GS_F: + ret.wheelbase = 2.84988 + ret.steerRatio = 13.3 + ret.tireStiffnessFactor = 0.444 + ret.mass = 4034. * CV.LB_TO_KG + elif candidate == CAR.LEXUS_CTH: stop_and_go = True ret.wheelbase = 2.60 @@ -189,7 +185,7 @@ class CarInterface(CarInterfaceBase): ret.tireStiffnessFactor = 0.517 ret.mass = 3108 * CV.LB_TO_KG # mean between min and max - elif candidate in (CAR.LEXUS_NX, CAR.LEXUS_NXH, CAR.LEXUS_NX_TSS2, CAR.LEXUS_NXH_TSS2): + elif candidate in (CAR.LEXUS_NX, CAR.LEXUS_NX_TSS2): stop_and_go = True ret.wheelbase = 2.66 ret.steerRatio = 14.7 @@ -209,7 +205,7 @@ class CarInterface(CarInterfaceBase): ret.tireStiffnessFactor = 0.8 ret.mass = 4300. * CV.LB_TO_KG - elif candidate in (CAR.ALPHARD_TSS2, CAR.ALPHARDH_TSS2): + elif candidate == CAR.ALPHARD_TSS2: ret.wheelbase = 3.00 ret.steerRatio = 14.2 ret.tireStiffnessFactor = 0.444 @@ -236,6 +232,9 @@ class CarInterface(CarInterfaceBase): and not (ret.flags & ToyotaFlags.SMART_DSU) ret.enableGasInterceptor = 0x201 in fingerprint[0] + if ret.enableGasInterceptor: + ret.safetyConfigs[0].safetyParam |= Panda.FLAG_TOYOTA_GAS_INTERCEPTOR + # if the smartDSU is detected, openpilot can send ACC_CONTROL and the smartDSU will block it from the DSU or radar. # since we don't yet parse radar on TSS2/TSS-P radar-based ACC cars, gate longitudinal behind experimental toggle use_sdsu = bool(ret.flags & ToyotaFlags.SMART_DSU) @@ -264,10 +263,8 @@ class CarInterface(CarInterfaceBase): if not ret.openpilotLongitudinalControl: ret.safetyConfigs[0].safetyParam |= Panda.FLAG_TOYOTA_STOCK_LONGITUDINAL - # we can't use the fingerprint to detect this reliably, since - # the EV gas pedal signal can take a couple seconds to appear - if candidate in EV_HYBRID_CAR: - ret.flags |= ToyotaFlags.HYBRID.value + if candidate in UNSUPPORTED_DSU_CAR: + ret.safetyConfigs[0].safetyParam |= Panda.FLAG_TOYOTA_UNSUPPORTED_DSU_CAR # min speed to enable ACC. if car can do stop and go, then set enabling speed # to a negative value, so it won't matter. @@ -330,7 +327,7 @@ class CarInterface(CarInterfaceBase): self.CS.gac_tr_cluster = 3 if self.CS.gac_tr != 2: self.CS.gac_tr = 2 - put_nonblocking("LongitudinalPersonality", "2") + self.param_s.put_nonblocking("LongitudinalPersonality", "2") else: gap_dist_button = bool(self.CS.gap_dist_button) if gap_dist_button: @@ -341,7 +338,7 @@ class CarInterface(CarInterfaceBase): follow_distance_converted = self.get_sp_gac_state(pre_calculated_distance, GAC_MIN, GAC_MAX, "+") gac_tr = self.get_sp_distance(follow_distance_converted, GAC_MAX, gac_dict=GAC_DICT) - 1 # always 1 lower if gac_tr != self.CS.gac_tr: - put_nonblocking("LongitudinalPersonality", str(gac_tr)) + self.param_s.put_nonblocking("LongitudinalPersonality", str(gac_tr)) self.CS.gac_tr = gac_tr else: self.gac_button_counter = 0 diff --git a/selfdrive/car/toyota/tests/print_platform_codes.py b/selfdrive/car/toyota/tests/print_platform_codes.py index 94badc5cde..9ec7a14cd3 100755 --- a/selfdrive/car/toyota/tests/print_platform_codes.py +++ b/selfdrive/car/toyota/tests/print_platform_codes.py @@ -1,11 +1,15 @@ #!/usr/bin/env python3 +from collections import defaultdict from cereal import car -from openpilot.selfdrive.car.toyota.values import FW_VERSIONS, PLATFORM_CODE_ECUS, get_platform_codes +from openpilot.selfdrive.car.toyota.values import PLATFORM_CODE_ECUS, get_platform_codes +from openpilot.selfdrive.car.toyota.fingerprints import FW_VERSIONS Ecu = car.CarParams.Ecu ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} if __name__ == "__main__": + parts_for_ecu: dict = defaultdict(set) + cars_for_code: dict = defaultdict(lambda: defaultdict(set)) for car_model, ecus in FW_VERSIONS.items(): print() print(car_model) @@ -14,8 +18,18 @@ if __name__ == "__main__": continue platform_codes = get_platform_codes(ecus[ecu]) - codes = {code for code, _ in platform_codes} - dates = {date for _, date in platform_codes if date is not None} + parts_for_ecu[ecu] |= {code.split(b'-')[0] for code in platform_codes if code.count(b'-') > 1} + for code in platform_codes: + cars_for_code[ecu][b'-'.join(code.split(b'-')[:2])] |= {car_model} print(f' (Ecu.{ECU_NAME[ecu[0]]}, {hex(ecu[1])}, {ecu[2]}):') - print(f' Codes: {codes}') - print(f' Versions: {dates}') + print(f' Codes: {platform_codes}') + + print('\nECU parts:') + for ecu, parts in parts_for_ecu.items(): + print(f' (Ecu.{ECU_NAME[ecu[0]]}, {hex(ecu[1])}, {ecu[2]}): {parts}') + + print('\nCar models vs. platform codes (no major versions):') + for ecu, codes in cars_for_code.items(): + print(f' (Ecu.{ECU_NAME[ecu[0]]}, {hex(ecu[1])}, {ecu[2]}):') + for code, cars in codes.items(): + print(f' {code!r}: {sorted(cars)}') diff --git a/selfdrive/car/toyota/tests/test_toyota.py b/selfdrive/car/toyota/tests/test_toyota.py index 0c503ebbf0..d9d4fe087f 100755 --- a/selfdrive/car/toyota/tests/test_toyota.py +++ b/selfdrive/car/toyota/tests/test_toyota.py @@ -3,7 +3,10 @@ from hypothesis import given, settings, strategies as st import unittest from cereal import car -from openpilot.selfdrive.car.toyota.values import CAR, DBC, TSS2_CAR, ANGLE_CONTROL_CAR, RADAR_ACC_CAR, FW_VERSIONS, \ +from openpilot.selfdrive.car.fw_versions import build_fw_dict +from openpilot.selfdrive.car.toyota.fingerprints import FW_VERSIONS +from openpilot.selfdrive.car.toyota.values import CAR, DBC, TSS2_CAR, ANGLE_CONTROL_CAR, RADAR_ACC_CAR, \ + FW_QUERY_CONFIG, PLATFORM_CODE_ECUS, FUZZY_EXCLUDED_PLATFORMS, \ get_platform_codes Ecu = car.CarParams.Ecu @@ -15,6 +18,10 @@ class TestToyotaInterfaces(unittest.TestCase): self.assertTrue(len(ANGLE_CONTROL_CAR - TSS2_CAR) == 0) self.assertTrue(len(RADAR_ACC_CAR - TSS2_CAR) == 0) + def test_lta_platforms(self): + # At this time, only RAV4 2023 is expected to use LTA/angle control + self.assertEqual(ANGLE_CONTROL_CAR, {CAR.RAV4_TSS2_2023}) + def test_tss2_dbc(self): # We make some assumptions about TSS2 platforms, # like looking up certain signals only in this DBC @@ -26,7 +33,7 @@ class TestToyotaInterfaces(unittest.TestCase): # Asserts standard ECUs exist for each platform common_ecus = {Ecu.fwdRadar, Ecu.fwdCamera} for car_model, ecus in FW_VERSIONS.items(): - with self.subTest(car_model=car_model): + with self.subTest(car_model=car_model.value): present_ecus = {ecu[0] for ecu in ecus} missing_ecus = common_ecus - present_ecus self.assertEqual(len(missing_ecus), 0) @@ -43,6 +50,17 @@ class TestToyotaInterfaces(unittest.TestCase): class TestToyotaFingerprint(unittest.TestCase): + def test_non_essential_ecus(self): + # Ensures only the cars that have multiple engine ECUs are in the engine non-essential ECU list + for car_model, ecus in FW_VERSIONS.items(): + with self.subTest(car_model=car_model.value): + engine_ecus = {ecu for ecu in ecus if ecu[0] == Ecu.engine} + self.assertEqual(len(engine_ecus) > 1, + car_model in FW_QUERY_CONFIG.non_essential_ecus[Ecu.engine], + f"Car model unexpectedly {'not ' if len(engine_ecus) > 1 else ''}in non-essential list") + + # Tests for part numbers, platform codes, and sub-versions which Toyota will use to fuzzy + # fingerprint in the absence of full FW matches: @settings(max_examples=100) @given(data=st.data()) def test_platform_codes_fuzzy_fw(self, data): @@ -50,13 +68,94 @@ class TestToyotaFingerprint(unittest.TestCase): fws = data.draw(fw_strategy) get_platform_codes(fws) - def test_fw_pattern(self): - """Asserts all ECUs can be parsed""" - for ecus in FW_VERSIONS.values(): - for fws in ecus.values(): - for fw in fws: - ret = get_platform_codes([fw]) - self.assertTrue(len(ret)) + def test_platform_code_ecus_available(self): + # Asserts ECU keys essential for fuzzy fingerprinting are available on all platforms + for car_model, ecus in FW_VERSIONS.items(): + with self.subTest(car_model=car_model.value): + for platform_code_ecu in PLATFORM_CODE_ECUS: + if platform_code_ecu == Ecu.eps and car_model in (CAR.PRIUS_V, CAR.LEXUS_CTH,): + continue + if platform_code_ecu == Ecu.abs and car_model in (CAR.ALPHARD_TSS2,): + continue + self.assertIn(platform_code_ecu, [e[0] for e in ecus]) + + def test_fw_format(self): + # Asserts: + # - every supported ECU FW version returns one platform code + # - every supported ECU FW version has a part number + # - expected parsing of ECU sub-versions + + for car_model, ecus in FW_VERSIONS.items(): + with self.subTest(car_model=car_model.value): + for ecu, fws in ecus.items(): + if ecu[0] not in PLATFORM_CODE_ECUS: + continue + + codes = dict() + for fw in fws: + result = get_platform_codes([fw]) + # Check only one platform code and sub-version + self.assertEqual(1, len(result), f"Unable to parse FW: {fw}") + self.assertEqual(1, len(list(result.values())[0]), f"Unable to parse FW: {fw}") + codes |= result + + # Toyota places the ECU part number in their FW versions, assert all parsable + # Note that there is only one unique part number per ECU across the fleet, so this + # is not important for identification, just a sanity check. + self.assertTrue(all(code.count(b"-") > 1 for code in codes), + f"FW does not have part number: {fw} {codes}") + + def test_platform_codes_spot_check(self): + # Asserts basic platform code parsing behavior for a few cases + results = get_platform_codes([ + b"F152607140\x00\x00\x00\x00\x00\x00", + b"F152607171\x00\x00\x00\x00\x00\x00", + b"F152607110\x00\x00\x00\x00\x00\x00", + b"F152607180\x00\x00\x00\x00\x00\x00", + ]) + self.assertEqual(results, {b"F1526-07-1": {b"10", b"40", b"71", b"80"}}) + + results = get_platform_codes([ + b"\x028646F4104100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00", + b"\x028646F4104100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00", + ]) + self.assertEqual(results, {b"8646F-41-04": {b"100"}}) + + # Short version has no part number + results = get_platform_codes([ + b"\x0235870000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00", + b"\x0235883000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00", + ]) + self.assertEqual(results, {b"58-70": {b"000"}, b"58-83": {b"000"}}) + + results = get_platform_codes([ + b"F152607110\x00\x00\x00\x00\x00\x00", + b"F152607140\x00\x00\x00\x00\x00\x00", + b"\x028646F4104100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00", + b"\x0235879000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00", + ]) + self.assertEqual(results, {b"F1526-07-1": {b"10", b"40"}, b"8646F-41-04": {b"100"}, b"58-79": {b"000"}}) + + def test_fuzzy_excluded_platforms(self): + # Asserts a list of platforms that will not fuzzy fingerprint with platform codes due to them being shared. + platforms_with_shared_codes = set() + for platform, fw_by_addr in FW_VERSIONS.items(): + car_fw = [] + for ecu, fw_versions in fw_by_addr.items(): + ecu_name, addr, sub_addr = ecu + for fw in fw_versions: + car_fw.append({"ecu": ecu_name, "fwVersion": fw, "address": addr, + "subAddress": 0 if sub_addr is None else sub_addr}) + + CP = car.CarParams.new_message(carFw=car_fw) + matches = FW_QUERY_CONFIG.match_fw_to_car_fuzzy(build_fw_dict(CP.carFw), FW_VERSIONS) + if len(matches) == 1: + self.assertEqual(list(matches)[0], platform) + else: + # If a platform has multiple matches, add it and its matches + platforms_with_shared_codes |= {str(platform), *matches} + + self.assertEqual(platforms_with_shared_codes, FUZZY_EXCLUDED_PLATFORMS, (len(platforms_with_shared_codes), len(FW_VERSIONS))) if __name__ == "__main__": diff --git a/selfdrive/car/toyota/toyotacan.py b/selfdrive/car/toyota/toyotacan.py index 07f6298839..cd7746f8ad 100644 --- a/selfdrive/car/toyota/toyotacan.py +++ b/selfdrive/car/toyota/toyotacan.py @@ -1,3 +1,8 @@ +from cereal import car + +SteerControlType = car.CarParams.SteerControlType + + def create_steer_command(packer, steer, steer_req): """Creates a CAN message for the Toyota Steer Command.""" @@ -9,15 +14,16 @@ def create_steer_command(packer, steer, steer_req): return packer.make_can_msg("STEERING_LKA", 0, values) -def create_lta_steer_command(packer, steer_angle, steer_req, frame, setme_x64): +def create_lta_steer_command(packer, steer_control_type, steer_angle, steer_req, frame, torque_wind_down): """Creates a CAN message for the Toyota LTA Steer Command.""" values = { "COUNTER": frame + 128, - "SETME_X1": 1, - "SETME_X3": 3, + "SETME_X1": 1, # suspected LTA feature availability + # 1 for TSS 2.5 cars, 3 for TSS 2.0. Send based on whether we're using LTA for lateral control + "SETME_X3": 1 if steer_control_type == SteerControlType.angle else 3, "PERCENTAGE": 100, - "SETME_X64": setme_x64, + "TORQUE_WIND_DOWN": torque_wind_down, "ANGLE": 0, "STEER_ANGLE_CMD": steer_angle, "STEER_REQUEST": steer_req, @@ -30,7 +36,7 @@ def create_lta_steer_command(packer, steer_angle, steer_req, frame, setme_x64): def create_accel_command(packer, accel, pcm_cancel, standstill_req, lead, acc_type, fcw_alert, reverse_acc, gac_send): # TODO: find the exact canceling bit that does not create a chime values = { - "ACCEL_CMD": accel, + "ACCEL_CMD": 0 if pcm_cancel else accel, "ACC_TYPE": acc_type, "DISTANCE": gac_send, "MINI_CAR": lead, diff --git a/selfdrive/car/toyota/values.py b/selfdrive/car/toyota/values.py index 07def65d37..33acb6963c 100644 --- a/selfdrive/car/toyota/values.py +++ b/selfdrive/car/toyota/values.py @@ -1,8 +1,8 @@ import re from collections import defaultdict from dataclasses import dataclass, field -from enum import Enum, IntFlag -from typing import Dict, List, Set, Tuple, Union +from enum import Enum, IntFlag, StrEnum +from typing import Dict, List, Set, Union from cereal import car from openpilot.common.conversions import Conversions as CV @@ -27,7 +27,8 @@ class CarControllerParams: # Assuming a steering ratio of 13.7: # Limit to ~2.0 m/s^3 up (7.5 deg/s), ~3.5 m/s^3 down (13 deg/s) at 75 mph # Worst case, the low speed limits will allow ~4.0 m/s^3 up (15 deg/s) and ~4.9 m/s^3 down (18 deg/s) at 75 mph, - # however the EPS has its own internal limits at all speeds which are less than that + # however the EPS has its own internal limits at all speeds which are less than that: + # Observed internal torque rate limit on TSS 2.5 Camry and RAV4 is ~1500 units/sec up and down when using LTA ANGLE_RATE_LIMIT_UP = AngleRateLimit(speed_bp=[5, 25], angle_v=[0.3, 0.15]) ANGLE_RATE_LIMIT_DOWN = AngleRateLimit(speed_bp=[5, 25], angle_v=[0.36, 0.26]) @@ -50,31 +51,21 @@ class ToyotaFlagsSP(IntFlag): SP_ZSS = 1 -class CAR: +class CAR(StrEnum): # Toyota ALPHARD_TSS2 = "TOYOTA ALPHARD 2020" - ALPHARDH_TSS2 = "TOYOTA ALPHARD HYBRID 2021" AVALON = "TOYOTA AVALON 2016" AVALON_2019 = "TOYOTA AVALON 2019" - AVALONH_2019 = "TOYOTA AVALON HYBRID 2019" AVALON_TSS2 = "TOYOTA AVALON 2022" # TSS 2.5 - AVALONH_TSS2 = "TOYOTA AVALON HYBRID 2022" CAMRY = "TOYOTA CAMRY 2018" - CAMRYH = "TOYOTA CAMRY HYBRID 2018" CAMRY_TSS2 = "TOYOTA CAMRY 2021" # TSS 2.5 - CAMRYH_TSS2 = "TOYOTA CAMRY HYBRID 2021" CHR = "TOYOTA C-HR 2018" CHR_TSS2 = "TOYOTA C-HR 2021" - CHRH = "TOYOTA C-HR HYBRID 2018" - CHRH_TSS2 = "TOYOTA C-HR HYBRID 2022" COROLLA = "TOYOTA COROLLA 2017" - COROLLA_TSS2 = "TOYOTA COROLLA TSS2 2019" # LSS2 Lexus UX Hybrid is same as a TSS2 Corolla Hybrid - COROLLAH_TSS2 = "TOYOTA COROLLA HYBRID TSS2 2019" + COROLLA_TSS2 = "TOYOTA COROLLA TSS2 2019" HIGHLANDER = "TOYOTA HIGHLANDER 2017" HIGHLANDER_TSS2 = "TOYOTA HIGHLANDER 2020" - HIGHLANDERH = "TOYOTA HIGHLANDER HYBRID 2018" - HIGHLANDERH_TSS2 = "TOYOTA HIGHLANDER HYBRID 2020" PRIUS = "TOYOTA PRIUS 2017" PRIUS_V = "TOYOTA PRIUS v 2017" PRIUS_TSS2 = "TOYOTA PRIUS TSS2 2021" @@ -83,29 +74,21 @@ class CAR: RAV4_TSS2 = "TOYOTA RAV4 2019" RAV4_TSS2_2022 = "TOYOTA RAV4 2022" RAV4_TSS2_2023 = "TOYOTA RAV4 2023" - RAV4H_TSS2 = "TOYOTA RAV4 HYBRID 2019" - RAV4H_TSS2_2022 = "TOYOTA RAV4 HYBRID 2022" - RAV4H_TSS2_2023 = "TOYOTA RAV4 HYBRID 2023" MIRAI = "TOYOTA MIRAI 2021" # TSS 2.5 SIENNA = "TOYOTA SIENNA 2018" # Lexus LEXUS_CTH = "LEXUS CT HYBRID 2018" LEXUS_ES = "LEXUS ES 2018" - LEXUS_ESH = "LEXUS ES HYBRID 2018" LEXUS_ES_TSS2 = "LEXUS ES 2019" - LEXUS_ESH_TSS2 = "LEXUS ES HYBRID 2019" LEXUS_IS = "LEXUS IS 2018" LEXUS_IS_TSS2 = "LEXUS IS 2023" LEXUS_NX = "LEXUS NX 2018" - LEXUS_NXH = "LEXUS NX HYBRID 2018" LEXUS_NX_TSS2 = "LEXUS NX 2020" - LEXUS_NXH_TSS2 = "LEXUS NX HYBRID 2020" LEXUS_RC = "LEXUS RC 2020" LEXUS_RX = "LEXUS RX 2016" - LEXUS_RXH = "LEXUS RX HYBRID 2017" LEXUS_RX_TSS2 = "LEXUS RX 2020" - LEXUS_RXH_TSS2 = "LEXUS RX HYBRID 2020" + LEXUS_GS_F = "LEXUS GS F 2016" class Footnote(Enum): @@ -122,40 +105,57 @@ class ToyotaCarInfo(CarInfo): CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = { # Toyota - CAR.ALPHARD_TSS2: ToyotaCarInfo("Toyota Alphard 2019-20"), - CAR.ALPHARDH_TSS2: ToyotaCarInfo("Toyota Alphard Hybrid 2021"), + CAR.ALPHARD_TSS2: [ + ToyotaCarInfo("Toyota Alphard 2019-20"), + ToyotaCarInfo("Toyota Alphard Hybrid 2021"), + ], CAR.AVALON: [ ToyotaCarInfo("Toyota Avalon 2016", "Toyota Safety Sense P"), ToyotaCarInfo("Toyota Avalon 2017-18"), ], - CAR.AVALON_2019: ToyotaCarInfo("Toyota Avalon 2019-21"), - CAR.AVALONH_2019: ToyotaCarInfo("Toyota Avalon Hybrid 2019-21"), - CAR.AVALON_TSS2: ToyotaCarInfo("Toyota Avalon 2022"), - CAR.AVALONH_TSS2: ToyotaCarInfo("Toyota Avalon Hybrid 2022"), - CAR.CAMRY: ToyotaCarInfo("Toyota Camry 2018-20", video_link="https://www.youtube.com/watch?v=fkcjviZY9CM", footnotes=[Footnote.CAMRY]), - CAR.CAMRYH: ToyotaCarInfo("Toyota Camry Hybrid 2018-20", video_link="https://www.youtube.com/watch?v=Q2DYY0AWKgk"), - CAR.CAMRY_TSS2: ToyotaCarInfo("Toyota Camry 2021-23", footnotes=[Footnote.CAMRY]), - CAR.CAMRYH_TSS2: ToyotaCarInfo("Toyota Camry Hybrid 2021-23"), - CAR.CHR: ToyotaCarInfo("Toyota C-HR 2017-20"), - CAR.CHR_TSS2: ToyotaCarInfo("Toyota C-HR 2021"), - CAR.CHRH: ToyotaCarInfo("Toyota C-HR Hybrid 2017-20"), - CAR.CHRH_TSS2: ToyotaCarInfo("Toyota C-HR Hybrid 2021-22"), + CAR.AVALON_2019: [ + ToyotaCarInfo("Toyota Avalon 2019-21"), + ToyotaCarInfo("Toyota Avalon Hybrid 2019-21"), + ], + CAR.AVALON_TSS2: [ + ToyotaCarInfo("Toyota Avalon 2022"), + ToyotaCarInfo("Toyota Avalon Hybrid 2022"), + ], + CAR.CAMRY: [ + ToyotaCarInfo("Toyota Camry 2018-20", video_link="https://www.youtube.com/watch?v=fkcjviZY9CM", footnotes=[Footnote.CAMRY]), + ToyotaCarInfo("Toyota Camry Hybrid 2018-20", video_link="https://www.youtube.com/watch?v=Q2DYY0AWKgk"), + ], + CAR.CAMRY_TSS2: [ + ToyotaCarInfo("Toyota Camry 2021-24", footnotes=[Footnote.CAMRY]), + ToyotaCarInfo("Toyota Camry Hybrid 2021-24"), + ], + CAR.CHR: [ + ToyotaCarInfo("Toyota C-HR 2017-20"), + ToyotaCarInfo("Toyota C-HR Hybrid 2017-20"), + ], + CAR.CHR_TSS2: [ + ToyotaCarInfo("Toyota C-HR 2021"), + ToyotaCarInfo("Toyota C-HR Hybrid 2021-22"), + ], CAR.COROLLA: ToyotaCarInfo("Toyota Corolla 2017-19"), CAR.COROLLA_TSS2: [ ToyotaCarInfo("Toyota Corolla 2020-22", video_link="https://www.youtube.com/watch?v=_66pXk0CBYA"), ToyotaCarInfo("Toyota Corolla Cross (Non-US only) 2020-23", min_enable_speed=7.5), ToyotaCarInfo("Toyota Corolla Hatchback 2019-22", video_link="https://www.youtube.com/watch?v=_66pXk0CBYA"), - ], - CAR.COROLLAH_TSS2: [ + # Hybrid platforms ToyotaCarInfo("Toyota Corolla Hybrid 2020-22"), ToyotaCarInfo("Toyota Corolla Hybrid (Non-US only) 2020-23", min_enable_speed=7.5), ToyotaCarInfo("Toyota Corolla Cross Hybrid (Non-US only) 2020-22", min_enable_speed=7.5), ToyotaCarInfo("Lexus UX Hybrid 2019-23"), ], - CAR.HIGHLANDER: ToyotaCarInfo("Toyota Highlander 2017-19", video_link="https://www.youtube.com/watch?v=0wS0wXSLzoo"), - CAR.HIGHLANDER_TSS2: ToyotaCarInfo("Toyota Highlander 2020-23"), - CAR.HIGHLANDERH: ToyotaCarInfo("Toyota Highlander Hybrid 2017-19"), - CAR.HIGHLANDERH_TSS2: ToyotaCarInfo("Toyota Highlander Hybrid 2020-23"), + CAR.HIGHLANDER: [ + ToyotaCarInfo("Toyota Highlander 2017-19", video_link="https://www.youtube.com/watch?v=0wS0wXSLzoo"), + ToyotaCarInfo("Toyota Highlander Hybrid 2017-19"), + ], + CAR.HIGHLANDER_TSS2: [ + ToyotaCarInfo("Toyota Highlander 2020-23"), + ToyotaCarInfo("Toyota Highlander Hybrid 2020-23"), + ], CAR.PRIUS: [ ToyotaCarInfo("Toyota Prius 2016", "Toyota Safety Sense P", video_link="https://www.youtube.com/watch?v=8zopPJI8XQ0"), ToyotaCarInfo("Toyota Prius 2017-20", video_link="https://www.youtube.com/watch?v=8zopPJI8XQ0"), @@ -174,74 +174,90 @@ CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = { ToyotaCarInfo("Toyota RAV4 Hybrid 2016", "Toyota Safety Sense P", video_link="https://youtu.be/LhT5VzJVfNI?t=26"), ToyotaCarInfo("Toyota RAV4 Hybrid 2017-18", video_link="https://youtu.be/LhT5VzJVfNI?t=26") ], - CAR.RAV4_TSS2: ToyotaCarInfo("Toyota RAV4 2019-21", video_link="https://www.youtube.com/watch?v=wJxjDd42gGA"), - CAR.RAV4_TSS2_2022: ToyotaCarInfo("Toyota RAV4 2022"), - CAR.RAV4_TSS2_2023: ToyotaCarInfo("Toyota RAV4 2023"), - CAR.RAV4H_TSS2: ToyotaCarInfo("Toyota RAV4 Hybrid 2019-21"), - CAR.RAV4H_TSS2_2022: ToyotaCarInfo("Toyota RAV4 Hybrid 2022", video_link="https://youtu.be/U0nH9cnrFB0"), - CAR.RAV4H_TSS2_2023: ToyotaCarInfo("Toyota RAV4 Hybrid 2023"), + CAR.RAV4_TSS2: [ + ToyotaCarInfo("Toyota RAV4 2019-21", video_link="https://www.youtube.com/watch?v=wJxjDd42gGA"), + ToyotaCarInfo("Toyota RAV4 Hybrid 2019-21"), + ], + CAR.RAV4_TSS2_2022: [ + ToyotaCarInfo("Toyota RAV4 2022"), + ToyotaCarInfo("Toyota RAV4 Hybrid 2022", video_link="https://youtu.be/U0nH9cnrFB0"), + ], + CAR.RAV4_TSS2_2023: [ + ToyotaCarInfo("Toyota RAV4 2023-24"), + ToyotaCarInfo("Toyota RAV4 Hybrid 2023-24"), + ], CAR.MIRAI: ToyotaCarInfo("Toyota Mirai 2021"), CAR.SIENNA: ToyotaCarInfo("Toyota Sienna 2018-20", video_link="https://www.youtube.com/watch?v=q1UPOo4Sh68", min_enable_speed=MIN_ACC_SPEED), # Lexus CAR.LEXUS_CTH: ToyotaCarInfo("Lexus CT Hybrid 2017-18", "Lexus Safety System+"), - CAR.LEXUS_ES: ToyotaCarInfo("Lexus ES 2017-18"), - CAR.LEXUS_ESH: ToyotaCarInfo("Lexus ES Hybrid 2017-18"), - CAR.LEXUS_ES_TSS2: ToyotaCarInfo("Lexus ES 2019-22"), - CAR.LEXUS_ESH_TSS2: ToyotaCarInfo("Lexus ES Hybrid 2019-23", video_link="https://youtu.be/BZ29osRVJeg?t=12"), + CAR.LEXUS_ES: [ + ToyotaCarInfo("Lexus ES 2017-18"), + ToyotaCarInfo("Lexus ES Hybrid 2017-18"), + ], + CAR.LEXUS_ES_TSS2: [ + ToyotaCarInfo("Lexus ES 2019-24"), + ToyotaCarInfo("Lexus ES Hybrid 2019-24", video_link="https://youtu.be/BZ29osRVJeg?t=12"), + ], CAR.LEXUS_IS: ToyotaCarInfo("Lexus IS 2017-19"), - CAR.LEXUS_IS_TSS2: ToyotaCarInfo("Lexus IS 2023"), - CAR.LEXUS_NX: ToyotaCarInfo("Lexus NX 2018-19"), - CAR.LEXUS_NXH: ToyotaCarInfo("Lexus NX Hybrid 2018-19"), - CAR.LEXUS_NX_TSS2: ToyotaCarInfo("Lexus NX 2020-21"), - CAR.LEXUS_NXH_TSS2: ToyotaCarInfo("Lexus NX Hybrid 2020-21"), + CAR.LEXUS_IS_TSS2: ToyotaCarInfo("Lexus IS 2022-23"), + CAR.LEXUS_GS_F: ToyotaCarInfo("Lexus GS F 2016"), + CAR.LEXUS_NX: [ + ToyotaCarInfo("Lexus NX 2018-19"), + ToyotaCarInfo("Lexus NX Hybrid 2018-19"), + ], + CAR.LEXUS_NX_TSS2: [ + ToyotaCarInfo("Lexus NX 2020-21"), + ToyotaCarInfo("Lexus NX Hybrid 2020-21"), + ], CAR.LEXUS_RC: ToyotaCarInfo("Lexus RC 2018-20"), CAR.LEXUS_RX: [ ToyotaCarInfo("Lexus RX 2016", "Lexus Safety System+"), ToyotaCarInfo("Lexus RX 2017-19"), - ], - CAR.LEXUS_RXH: [ + # Hybrid platforms ToyotaCarInfo("Lexus RX Hybrid 2016", "Lexus Safety System+"), ToyotaCarInfo("Lexus RX Hybrid 2017-19"), ], - CAR.LEXUS_RX_TSS2: ToyotaCarInfo("Lexus RX 2020-22"), - CAR.LEXUS_RXH_TSS2: ToyotaCarInfo("Lexus RX Hybrid 2020-22"), + CAR.LEXUS_RX_TSS2: [ + ToyotaCarInfo("Lexus RX 2020-22"), + ToyotaCarInfo("Lexus RX Hybrid 2020-22"), + ], } # (addr, cars, bus, 1/freq*100, vl) STATIC_DSU_MSGS = [ - (0x128, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.AVALON), 1, 3, b'\xf4\x01\x90\x83\x00\x37'), - (0x128, (CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH), 1, 3, b'\x03\x00\x20\x00\x00\x52'), - (0x141, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, - CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 1, 2, b'\x00\x00\x00\x46'), - (0x160, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, - CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 1, 7, b'\x00\x00\x08\x12\x01\x31\x9c\x51'), - (0x161, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.AVALON, CAR.LEXUS_RX, CAR.PRIUS_V, CAR.LEXUS_ES), + (0x128, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.AVALON), 1, 3, b'\xf4\x01\x90\x83\x00\x37'), + (0x128, (CAR.HIGHLANDER, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES), 1, 3, b'\x03\x00\x20\x00\x00\x52'), + (0x141, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.PRIUS_V), 1, 2, b'\x00\x00\x00\x46'), + (0x160, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.PRIUS_V), 1, 7, b'\x00\x00\x08\x12\x01\x31\x9c\x51'), + (0x161, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.AVALON, CAR.PRIUS_V), 1, 7, b'\x00\x1e\x00\x00\x00\x80\x07'), - (0X161, (CAR.HIGHLANDERH, CAR.HIGHLANDER, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ESH), 1, 7, b'\x00\x1e\x00\xd4\x00\x00\x5b'), - (0x283, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, - CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 3, b'\x00\x00\x00\x00\x00\x00\x8c'), - (0x2E6, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH), 0, 3, b'\xff\xf8\x00\x08\x7f\xe0\x00\x4e'), - (0x2E7, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH), 0, 3, b'\xa8\x9c\x31\x9c\x00\x00\x00\x02'), - (0x33E, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH), 0, 20, b'\x0f\xff\x26\x40\x00\x1f\x00'), - (0x344, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.AVALON, - CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 5, b'\x00\x00\x01\x00\x00\x00\x00\x50'), - (0x365, (CAR.PRIUS, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.HIGHLANDERH), 0, 20, b'\x00\x00\x00\x80\x03\x00\x08'), - (0x365, (CAR.RAV4, CAR.RAV4H, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, + (0X161, (CAR.HIGHLANDER, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES), 1, 7, b'\x00\x1e\x00\xd4\x00\x00\x5b'), + (0x283, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.PRIUS_V), 0, 3, b'\x00\x00\x00\x00\x00\x00\x8c'), + (0x2E6, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX), 0, 3, b'\xff\xf8\x00\x08\x7f\xe0\x00\x4e'), + (0x2E7, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX), 0, 3, b'\xa8\x9c\x31\x9c\x00\x00\x00\x02'), + (0x33E, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX), 0, 20, b'\x0f\xff\x26\x40\x00\x1f\x00'), + (0x344, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.PRIUS_V), 0, 5, b'\x00\x00\x01\x00\x00\x00\x00\x50'), + (0x365, (CAR.PRIUS, CAR.LEXUS_NX, CAR.HIGHLANDER), 0, 20, b'\x00\x00\x00\x80\x03\x00\x08'), + (0x365, (CAR.RAV4, CAR.RAV4H, CAR.COROLLA, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 20, b'\x00\x00\x00\x80\xfc\x00\x08'), - (0x366, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.HIGHLANDERH), 0, 20, b'\x00\x00\x4d\x82\x40\x02\x00'), - (0x366, (CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), + (0x366, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.HIGHLANDER), 0, 20, b'\x00\x00\x4d\x82\x40\x02\x00'), + (0x366, (CAR.RAV4, CAR.COROLLA, CAR.AVALON, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.PRIUS_V), 0, 20, b'\x00\x72\x07\xff\x09\xfe\x00'), - (0x366, (CAR.LEXUS_ES,), 0, 20, b'\x00\x95\x07\xfe\x08\x05\x00'), - (0x470, (CAR.PRIUS, CAR.LEXUS_RXH), 1, 100, b'\x00\x00\x02\x7a'), - (0x470, (CAR.HIGHLANDER, CAR.HIGHLANDERH, CAR.RAV4H, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.PRIUS_V), 1, 100, b'\x00\x00\x01\x79'), - (0x4CB, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RXH, CAR.LEXUS_NXH, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDERH, CAR.HIGHLANDER, CAR.AVALON, - CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.LEXUS_ESH, CAR.LEXUS_RX, CAR.PRIUS_V), 0, 100, b'\x0c\x00\x00\x00\x00\x00\x00\x00'), + (0x470, (CAR.PRIUS, CAR.LEXUS_RX), 1, 100, b'\x00\x00\x02\x7a'), + (0x470, (CAR.HIGHLANDER, CAR.RAV4H, CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.PRIUS_V), 1, 100, b'\x00\x00\x01\x79'), + (0x4CB, (CAR.PRIUS, CAR.RAV4H, CAR.LEXUS_RX, CAR.LEXUS_NX, CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.AVALON, + CAR.SIENNA, CAR.LEXUS_CTH, CAR.LEXUS_ES, CAR.PRIUS_V), 0, 100, b'\x0c\x00\x00\x00\x00\x00\x00\x00'), ] -def get_platform_codes(fw_versions: List[bytes]) -> Set[Tuple[bytes, bytes]]: - codes = set() # (Optional[part]-platform-major_version, minor_version) +def get_platform_codes(fw_versions: List[bytes]) -> Dict[bytes, Set[bytes]]: + # Returns sub versions in a dict so comparisons can be made within part-platform-major_version combos + codes = defaultdict(set) # Optional[part]-platform-major_version: set of sub_version for fw in fw_versions: # FW versions returned from UDS queries can return multiple fields/chunks of data (different ECU calibrations, different data?) # and are prefixed with a byte that describes how many chunks of data there are. @@ -266,43 +282,89 @@ def get_platform_codes(fw_versions: List[bytes]) -> Set[Tuple[bytes, bytes]]: fw_match = SHORT_FW_PATTERN.search(first_chunk) if fw_match is not None: platform, major_version, sub_version = fw_match.groups() - # codes.add((platform + b'-' + major_version, sub_version)) - codes.add((b'-'.join((platform, major_version)), sub_version)) + codes[b'-'.join((platform, major_version))].add(sub_version) elif len(first_chunk) == 10: fw_match = MEDIUM_FW_PATTERN.search(first_chunk) if fw_match is not None: part, platform, major_version, sub_version = fw_match.groups() - codes.add((b'-'.join((part, platform, major_version)), sub_version)) + codes[b'-'.join((part, platform, major_version))].add(sub_version) elif len(first_chunk) == 12: fw_match = LONG_FW_PATTERN.search(first_chunk) if fw_match is not None: part, platform, major_version, sub_version = fw_match.groups() - codes.add((b'-'.join((part, platform, major_version)), sub_version)) + codes[b'-'.join((part, platform, major_version))].add(sub_version) - return codes + return dict(codes) + + +def match_fw_to_car_fuzzy(live_fw_versions, offline_fw_versions) -> Set[str]: + candidates = set() + + for candidate, fws in offline_fw_versions.items(): + # Keep track of ECUs which pass all checks (platform codes, within sub-version range) + valid_found_ecus = set() + valid_expected_ecus = {ecu[1:] for ecu in fws if ecu[0] in PLATFORM_CODE_ECUS} + for ecu, expected_versions in fws.items(): + addr = ecu[1:] + # Only check ECUs expected to have platform codes + if ecu[0] not in PLATFORM_CODE_ECUS: + continue + + # Expected platform codes & versions + expected_platform_codes = get_platform_codes(expected_versions) + + # Found platform codes & versions + found_platform_codes = get_platform_codes(live_fw_versions.get(addr, set())) + + # Check part number + platform code + major version matches for any found versions + # Platform codes and major versions change for different physical parts, generation, API, etc. + # Sub-versions are incremented for minor recalls, do not need to be checked. + if not any(found_platform_code in expected_platform_codes for found_platform_code in found_platform_codes): + break + + valid_found_ecus.add(addr) + + # If all live ECUs pass all checks for candidate, add it as a match + if valid_expected_ecus.issubset(valid_found_ecus): + candidates.add(candidate) + + return {str(c) for c in (candidates - FUZZY_EXCLUDED_PLATFORMS)} # Regex patterns for parsing more general platform-specific identifiers from FW versions. # - Part number: Toyota part number (usually last character needs to be ignored to find a match). -# - Platform: usually multiple codes per an openpilot platform, however this has the less variability and +# Each ECU address has just one part number. +# - Platform: usually multiple codes per an openpilot platform, however this is the least variable and # is usually shared across ECUs and model years signifying this describes something about the specific platform. -# - Major version: second least variable part of the FW version. Seen splitting cars by model year such as RAV4 2022/2023 and Prius. +# This describes more generational changes (TSS-P vs TSS2), or manufacture region. +# - Major version: second least variable part of the FW version. Seen splitting cars by model year/API such as +# RAV4 2022/2023 and Avalon. Used to differentiate cars where API has changed slightly, but is not a generational change. # It is important to note that these aren't always consecutive, for example: -# Prius TSS-P has these major versions over 16 FW: 2, 3, 4, 6, 8 while Prius TSS2 has: 5 -# - Sub version: exclusive to major version, but shared with other cars. Should only be used for further filtering, -# more exploration is needed. -SHORT_FW_PATTERN = re.compile(b'(?P[A-Z0-9]{2})(?P[A-Z0-9]{2})(?P[A-Z0-9]{4})') +# Avalon 2016-18's fwdCamera has these major versions: 01, 03 while 2019 has: 02 +# - Sub version: exclusive to major version, but shared with other cars. Should only be used for further filtering. +# Seen bumped in TSB FW updates, and describes other minor differences. +SHORT_FW_PATTERN = re.compile(b'[A-Z0-9](?P[A-Z0-9]{2})(?P[A-Z0-9]{2})(?P[A-Z0-9]{3})') MEDIUM_FW_PATTERN = re.compile(b'(?P[A-Z0-9]{5})(?P[A-Z0-9]{2})(?P[A-Z0-9]{1})(?P[A-Z0-9]{2})') LONG_FW_PATTERN = re.compile(b'(?P[A-Z0-9]{5})(?P[A-Z0-9]{2})(?P[A-Z0-9]{2})(?P[A-Z0-9]{3})') -FW_LEN_CODE = re.compile(b'^[\x01-\x05]') # 5 chunks max. highest seen is 3 chunks, 16 bytes each +FW_LEN_CODE = re.compile(b'^[\x01-\x03]') # highest seen is 3 chunks, 16 bytes each FW_CHUNK_LEN = 16 -# List of ECUs expected to have platform codes -# TODO: use hybrid ECU, splits many similar ICE and hybrid variants -PLATFORM_CODE_ECUS = [Ecu.abs, Ecu.engine, Ecu.eps, Ecu.dsu, Ecu.fwdCamera, Ecu.fwdRadar] +# List of ECUs that are most unique across openpilot platforms +# - fwdCamera: describes actual features related to ADAS. For example, on the Avalon it describes +# when TSS-P became standard, whether the car supports stop and go, and whether it's TSS2. +# On the RAV4, it describes the move to the radar doing ACC, and the use of LTA for lane keeping. +# Note that the platform codes & major versions do not describe features in plain text, only with +# matching against other seen FW versions in the database they can describe features. +# - fwdRadar: sanity check against fwdCamera, commonly shares a platform code. +# For example the RAV4 2022's new radar architecture is shown for both with platform code. +# - abs: differentiates hybrid/ICE on most cars (Corolla TSS2 is an exception, not used due to hybrid platform combination) +# - eps: describes lateral API changes for the EPS, such as using LTA for lane keeping and rejecting LKA messages +PLATFORM_CODE_ECUS = (Ecu.fwdCamera, Ecu.fwdRadar, Ecu.eps) +# These platforms have at least one platform code for all ECUs shared with another platform. +FUZZY_EXCLUDED_PLATFORMS: set[CAR] = set() # Some ECUs that use KWP2000 have their FW versions on non-standard data identifiers. # Toyota diagnostic software first gets the supported data ids, then queries them one by one. @@ -317,7 +379,7 @@ FW_QUERY_CONFIG = FwQueryConfig( [StdQueries.SHORT_TESTER_PRESENT_REQUEST, TOYOTA_VERSION_REQUEST_KWP], [StdQueries.SHORT_TESTER_PRESENT_RESPONSE, TOYOTA_VERSION_RESPONSE_KWP], whitelist_ecus=[Ecu.fwdCamera, Ecu.fwdRadar, Ecu.dsu, Ecu.abs, Ecu.eps, Ecu.epb, Ecu.telematics, - Ecu.hybrid, Ecu.srs, Ecu.combinationMeter, Ecu.transmission, Ecu.gateway, Ecu.hvac], + Ecu.srs, Ecu.combinationMeter, Ecu.transmission, Ecu.gateway, Ecu.hvac], bus=0, ), Request( @@ -337,9 +399,10 @@ FW_QUERY_CONFIG = FwQueryConfig( ], non_essential_ecus={ # FIXME: On some models, abs can sometimes be missing - Ecu.abs: [CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.SIENNA, CAR.LEXUS_IS], + Ecu.abs: [CAR.RAV4, CAR.COROLLA, CAR.HIGHLANDER, CAR.SIENNA, CAR.LEXUS_IS, CAR.ALPHARD_TSS2], # On some models, the engine can show on two different addresses - Ecu.engine: [CAR.CAMRY, CAR.COROLLA_TSS2, CAR.CHR, CAR.CHR_TSS2, CAR.LEXUS_IS, CAR.LEXUS_RC], + Ecu.engine: [CAR.HIGHLANDER, CAR.CAMRY, CAR.COROLLA_TSS2, CAR.CHR, CAR.CHR_TSS2, CAR.LEXUS_IS, + CAR.LEXUS_RC, CAR.LEXUS_NX, CAR.LEXUS_NX_TSS2, CAR.LEXUS_RX, CAR.LEXUS_RX_TSS2], }, extra_ecus=[ # All known ECUs on a late-model Toyota vehicle not queried here: @@ -373,1952 +436,9 @@ FW_QUERY_CONFIG = FwQueryConfig( (Ecu.combinationMeter, 0x7c0, None), (Ecu.hvac, 0x7c4, None), ], + match_fw_to_car_fuzzy=match_fw_to_car_fuzzy, ) -FW_VERSIONS = { - CAR.AVALON: { - (Ecu.abs, 0x7b0, None): [ - b'F152607060\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881510701300\x00\x00\x00\x00', - b'881510705100\x00\x00\x00\x00', - b'881510705200\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B41051\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0230721100\x00\x00\x00\x00\x00\x00\x00\x00A0C01000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230721200\x00\x00\x00\x00\x00\x00\x00\x00A0C01000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702000\x00\x00\x00\x00', - b'8821F4702100\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0701100\x00\x00\x00\x00', - b'8646F0703000\x00\x00\x00\x00', - ], - }, - CAR.AVALON_2019: { - (Ecu.abs, 0x7b0, None): [ - b'F152607140\x00\x00\x00\x00\x00\x00', - b'F152607171\x00\x00\x00\x00\x00\x00', - b'F152607110\x00\x00\x00\x00\x00\x00', - b'F152607180\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881510703200\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B41080\x00\x00\x00\x00\x00\x00', - b'8965B07010\x00\x00\x00\x00\x00\x00', - b'8965B41090\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896630725200\x00\x00\x00\x00', - b'\x01896630725300\x00\x00\x00\x00', - b'\x01896630735100\x00\x00\x00\x00', - b'\x01896630738000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0702100\x00\x00\x00\x00', - ], - }, - CAR.AVALONH_2019: { - (Ecu.abs, 0x7b0, None): [ - b'F152641040\x00\x00\x00\x00\x00\x00', - b'F152641061\x00\x00\x00\x00\x00\x00', - b'F152641050\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881510704200\x00\x00\x00\x00', - b'881514107100\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B07010\x00\x00\x00\x00\x00\x00', - b'8965B41090\x00\x00\x00\x00\x00\x00', - b'8965B41070\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x02896630724000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x02896630737000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x02896630728000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0702100\x00\x00\x00\x00', - ], - }, - CAR.AVALON_TSS2: { - (Ecu.abs, 0x7b0, None): [ - b'\x01F152607240\x00\x00\x00\x00\x00\x00', - b'\x01F152607250\x00\x00\x00\x00\x00\x00', - b'\x01F152607280\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B41110\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896630742000\x00\x00\x00\x00', - b'\x01896630743000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F6201200\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F4104100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F4104100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.AVALONH_TSS2: { - (Ecu.abs, 0x7b0, None): [ - b'F152641080\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B41110\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x018966306Q6000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F6201200\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F4104100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F4104100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.CAMRY: { - (Ecu.engine, 0x700, None): [ - b'\x018966306L3100\x00\x00\x00\x00', - b'\x018966306L4200\x00\x00\x00\x00', - b'\x018966306L5200\x00\x00\x00\x00', - b'\x018966306P8000\x00\x00\x00\x00', - b'\x018966306Q3100\x00\x00\x00\x00', - b'\x018966306Q4000\x00\x00\x00\x00', - b'\x018966306Q4100\x00\x00\x00\x00', - b'\x018966306Q4200\x00\x00\x00\x00', - b'\x018966333Q9200\x00\x00\x00\x00', - b'\x018966333P3100\x00\x00\x00\x00', - b'\x018966333P3200\x00\x00\x00\x00', - b'\x018966333P4200\x00\x00\x00\x00', - b'\x018966333P4300\x00\x00\x00\x00', - b'\x018966333P4400\x00\x00\x00\x00', - b'\x018966333P4500\x00\x00\x00\x00', - b'\x018966333P4700\x00\x00\x00\x00', - b'\x018966333P4900\x00\x00\x00\x00', - b'\x018966333Q6000\x00\x00\x00\x00', - b'\x018966333Q6200\x00\x00\x00\x00', - b'\x018966333Q6300\x00\x00\x00\x00', - b'\x018966333Q6500\x00\x00\x00\x00', - b'\x018966333W6000\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x02333P1100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'8821F0601200 ', - b'8821F0601300 ', - b'8821F0602000 ', - b'8821F0603300 ', - b'8821F0604100 ', - b'8821F0605200 ', - b'8821F0607200 ', - b'8821F0608000 ', - b'8821F0608200 ', - b'8821F0609100 ', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152606210\x00\x00\x00\x00\x00\x00', - b'F152606230\x00\x00\x00\x00\x00\x00', - b'F152606270\x00\x00\x00\x00\x00\x00', - b'F152606290\x00\x00\x00\x00\x00\x00', - b'F152606410\x00\x00\x00\x00\x00\x00', - b'F152633540\x00\x00\x00\x00\x00\x00', - b'F152633A10\x00\x00\x00\x00\x00\x00', - b'F152633A20\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B33540\x00\x00\x00\x00\x00\x00', - b'8965B33542\x00\x00\x00\x00\x00\x00', - b'8965B33580\x00\x00\x00\x00\x00\x00', - b'8965B33581\x00\x00\x00\x00\x00\x00', - b'8965B33621\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ # Same as 0x791 - b'8821F0601200 ', - b'8821F0601300 ', - b'8821F0602000 ', - b'8821F0603300 ', - b'8821F0604100 ', - b'8821F0605200 ', - b'8821F0607200 ', - b'8821F0608000 ', - b'8821F0608200 ', - b'8821F0609100 ', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0601200 ', - b'8646F0601300 ', - b'8646F0601400 ', - b'8646F0603400 ', - b'8646F0604100 ', - b'8646F0605000 ', - b'8646F0606000 ', - b'8646F0606100 ', - b'8646F0607100 ', - ], - }, - CAR.CAMRYH: { - (Ecu.engine, 0x700, None): [ - b'\x018966306Q6000\x00\x00\x00\x00', - b'\x018966333N1100\x00\x00\x00\x00', - b'\x018966333N4300\x00\x00\x00\x00', - b'\x018966333X0000\x00\x00\x00\x00', - b'\x018966333X4000\x00\x00\x00\x00', - b'\x01896633T16000\x00\x00\x00\x00', - b'\x028966306B2100\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306B2300\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306B2500\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306N8100\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306N8200\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306N8300\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306N8400\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306R5000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306R5000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x028966306R6000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966306R6000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x028966306S0000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x028966306S0100\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x028966306S1100\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152633214\x00\x00\x00\x00\x00\x00', - b'F152633660\x00\x00\x00\x00\x00\x00', - b'F152633712\x00\x00\x00\x00\x00\x00', - b'F152633713\x00\x00\x00\x00\x00\x00', - b'F152633B51\x00\x00\x00\x00\x00\x00', - b'F152633B60\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'8821F0601200 ', - b'8821F0601300 ', - b'8821F0603400 ', - b'8821F0604000 ', - b'8821F0604100 ', - b'8821F0604200 ', - b'8821F0605200 ', - b'8821F0606200 ', - b'8821F0607200 ', - b'8821F0608000 ', - b'8821F0608200 ', - b'8821F0609000 ', - b'8821F0609100 ', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B33540\x00\x00\x00\x00\x00\x00', - b'8965B33542\x00\x00\x00\x00\x00\x00', - b'8965B33550\x00\x00\x00\x00\x00\x00', - b'8965B33551\x00\x00\x00\x00\x00\x00', - b'8965B33580\x00\x00\x00\x00\x00\x00', - b'8965B33581\x00\x00\x00\x00\x00\x00', - b'8965B33611\x00\x00\x00\x00\x00\x00', - b'8965B33621\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ # Same as 0x791 - b'8821F0601200 ', - b'8821F0601300 ', - b'8821F0603400 ', - b'8821F0604000 ', - b'8821F0604100 ', - b'8821F0604200 ', - b'8821F0605200 ', - b'8821F0606200 ', - b'8821F0607200 ', - b'8821F0608000 ', - b'8821F0608200 ', - b'8821F0609000 ', - b'8821F0609100 ', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0601200 ', - b'8646F0601300 ', - b'8646F0601400 ', - b'8646F0603400 ', - b'8646F0603500 ', - b'8646F0604100 ', - b'8646F0605000 ', - b'8646F0606000 ', - b'8646F0606100 ', - b'8646F0607000 ', - b'8646F0607100 ', - ], - }, - CAR.CAMRY_TSS2: { - (Ecu.eps, 0x7a1, None): [ - b'8965B33630\x00\x00\x00\x00\x00\x00', - b'8965B33640\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F152606370\x00\x00\x00\x00\x00\x00', - b'\x01F152606390\x00\x00\x00\x00\x00\x00', - b'\x01F152606400\x00\x00\x00\x00\x00\x00', - b'\x01F152606431\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x018966306Q5000\x00\x00\x00\x00', - b'\x018966306Q9000\x00\x00\x00\x00', - b'\x018966306R3000\x00\x00\x00\x00', - b'\x018966306R8000\x00\x00\x00\x00', - b'\x018966306T3100\x00\x00\x00\x00', - b'\x018966306T3200\x00\x00\x00\x00', - b'\x018966306T4000\x00\x00\x00\x00', - b'\x018966306T4100\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F6201200\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0602100\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F0602200\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F0602300\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - b'\x028646F3305200\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F3305200\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - b'\x028646F3305300\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F3305500\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.CAMRYH_TSS2: { - (Ecu.eps, 0x7a1, None): [ - b'8965B33630\x00\x00\x00\x00\x00\x00', - b'8965B33650\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152633D00\x00\x00\x00\x00\x00\x00', - b'F152633D60\x00\x00\x00\x00\x00\x00', - b'F152633310\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x018966306Q6000\x00\x00\x00\x00', - b'\x018966306Q7000\x00\x00\x00\x00', - b'\x018966306T0000\x00\x00\x00\x00', - b'\x018966306V1000\x00\x00\x00\x00', - b'\x01896633T20000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 15): [ - b'\x018821F6201200\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - b'\x018821F6201400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 109): [ - b'\x028646F3305200\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F3305300\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F3305300\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - b'\x028646F3305500\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.CHR: { - (Ecu.engine, 0x700, None): [ - b'\x01896631021100\x00\x00\x00\x00', - b'\x01896631017100\x00\x00\x00\x00', - b'\x01896631017200\x00\x00\x00\x00', - b'\x0189663F413100\x00\x00\x00\x00', - b'\x0189663F414100\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'8821F0W01000 ', - b'8821F0W01100 ', - b'8821FF401600 ', - b'8821FF404000 ', - b'8821FF404100 ', - b'8821FF405100 ', - b'8821FF406000 ', - b'8821FF407100 ', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152610020\x00\x00\x00\x00\x00\x00', - b'F152610153\x00\x00\x00\x00\x00\x00', - b'F152610210\x00\x00\x00\x00\x00\x00', - b'F1526F4034\x00\x00\x00\x00\x00\x00', - b'F1526F4044\x00\x00\x00\x00\x00\x00', - b'F1526F4073\x00\x00\x00\x00\x00\x00', - b'F1526F4121\x00\x00\x00\x00\x00\x00', - b'F1526F4122\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B10011\x00\x00\x00\x00\x00\x00', - b'8965B10040\x00\x00\x00\x00\x00\x00', - b'8965B10070\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0331024000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', - b'\x0331024000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', - b'\x0331036000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', - b'\x033F401100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203102\x00\x00\x00\x00', - b'\x033F401200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', - b'\x033F424000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', - b'\x033F424000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F0W01000 ', - b'8821FF401600 ', - b'8821FF404000 ', - b'8821FF404100 ', - b'8821FF405100 ', - b'8821FF406000 ', - b'8821FF407100 ', - b'8821F0W01100 ', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646FF401700 ', - b'8646FF401800 ', - b'8646FF404000 ', - b'8646FF406000 ', - b'8646FF407000 ', - ], - }, - CAR.CHR_TSS2: { - (Ecu.abs, 0x7b0, None): [ - b'F152610260\x00\x00\x00\x00\x00\x00', - b'F1526F4270\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B10091\x00\x00\x00\x00\x00\x00', - b'8965B10110\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x0189663F459000\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0331014000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821FF410200\x00\x00\x00\x00', - b'\x018821FF410300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646FF410200\x00\x00\x00\x008646GF408200\x00\x00\x00\x00', - b'\x028646FF411100\x00\x00\x00\x008646GF409000\x00\x00\x00\x00', - ], - }, - CAR.CHRH: { - (Ecu.engine, 0x700, None): [ - b'\x0289663F405100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896631013200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x0289663F405000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x0289663F418000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x0289663F423000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x0289663F431000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x0189663F438000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152610012\x00\x00\x00\x00\x00\x00', - b'F152610013\x00\x00\x00\x00\x00\x00', - b'F152610014\x00\x00\x00\x00\x00\x00', - b'F152610040\x00\x00\x00\x00\x00\x00', - b'F152610190\x00\x00\x00\x00\x00\x00', - b'F152610200\x00\x00\x00\x00\x00\x00', - b'F152610220\x00\x00\x00\x00\x00\x00', - b'F152610230\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'8821F0W01000 ', - b'8821FF402300 ', - b'8821FF402400 ', - b'8821FF404000 ', - b'8821FF404100 ', - b'8821FF405000 ', - b'8821FF406000 ', - b'8821FF407100 ', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B10011\x00\x00\x00\x00\x00\x00', - b'8965B10020\x00\x00\x00\x00\x00\x00', - b'8965B10040\x00\x00\x00\x00\x00\x00', - b'8965B10050\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F0W01000 ', - b'8821FF402300 ', - b'8821FF402400 ', - b'8821FF404000 ', - b'8821FF404100 ', - b'8821FF405000 ', - b'8821FF406000 ', - b'8821FF407100 ', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646FF401700 ', - b'8646FF402100 ', - b'8646FF404000 ', - b'8646FF406000 ', - b'8646FF407000 ', - b'8646FF407100 ', - ], - }, - CAR.CHRH_TSS2: { - (Ecu.eps, 0x7a1, None): [ - b'8965B10092\x00\x00\x00\x00\x00\x00', - b'8965B10091\x00\x00\x00\x00\x00\x00', - b'8965B10111\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152610041\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x0189663F438000\x00\x00\x00\x00', - b'\x02896631025000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x0289663F453000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 15): [ - b'\x018821FF410500\x00\x00\x00\x00', - b'\x018821FF410300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 109): [ - b'\x028646FF413100\x00\x00\x00\x008646GF411100\x00\x00\x00\x00', - b'\x028646FF411100\x00\x00\x00\x008646GF409000\x00\x00\x00\x00', - ], - }, - CAR.COROLLA: { - (Ecu.engine, 0x7e0, None): [ - b'\x0230ZC2000\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZC2100\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZC2200\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZC2300\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZC3000\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZC3100\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZC3200\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZC3300\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0330ZC1200\x00\x00\x00\x00\x00\x00\x00\x0050212000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881510201100\x00\x00\x00\x00', - b'881510201200\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152602190\x00\x00\x00\x00\x00\x00', - b'F152602191\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B02181\x00\x00\x00\x00\x00\x00', - b'8965B02191\x00\x00\x00\x00\x00\x00', - b'8965B48150\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0201101\x00\x00\x00\x00', - b'8646F0201200\x00\x00\x00\x00', - ], - }, - CAR.COROLLA_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x01896630A22000\x00\x00\x00\x00', - b'\x01896630ZG2000\x00\x00\x00\x00', - b'\x01896630ZG5000\x00\x00\x00\x00', - b'\x01896630ZG5100\x00\x00\x00\x00', - b'\x01896630ZG5200\x00\x00\x00\x00', - b'\x01896630ZG5300\x00\x00\x00\x00', - b'\x01896630ZP1000\x00\x00\x00\x00', - b'\x01896630ZP2000\x00\x00\x00\x00', - b'\x01896630ZQ5000\x00\x00\x00\x00', - b'\x01896630ZU9000\x00\x00\x00\x00', - b'\x01896630ZX4000\x00\x00\x00\x00', - b'\x018966312L8000\x00\x00\x00\x00', - b'\x018966312M0000\x00\x00\x00\x00', - b'\x018966312M9000\x00\x00\x00\x00', - b'\x018966312P9000\x00\x00\x00\x00', - b'\x018966312P9100\x00\x00\x00\x00', - b'\x018966312P9200\x00\x00\x00\x00', - b'\x018966312P9300\x00\x00\x00\x00', - b'\x018966312Q2300\x00\x00\x00\x00', - b'\x018966312Q8000\x00\x00\x00\x00', - b'\x018966312R0000\x00\x00\x00\x00', - b'\x018966312R0100\x00\x00\x00\x00', - b'\x018966312R0200\x00\x00\x00\x00', - b'\x018966312R1000\x00\x00\x00\x00', - b'\x018966312R1100\x00\x00\x00\x00', - b'\x018966312R3100\x00\x00\x00\x00', - b'\x018966312S5000\x00\x00\x00\x00', - b'\x018966312S7000\x00\x00\x00\x00', - b'\x018966312W3000\x00\x00\x00\x00', - b'\x018966312W9000\x00\x00\x00\x00', - b'\x01896637644000\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0230A10000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230A11000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230ZN4000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x03312K7000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', - b'\x03312M3000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', - b'\x03312N6000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', - b'\x03312N6000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', - b'\x03312N6000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', - b'\x03312N6100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', - b'\x03312N6100\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', - b'\x03312N6200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203202\x00\x00\x00\x00', - b'\x03312N6200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203302\x00\x00\x00\x00', - b'\x03312N6200\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00895231203402\x00\x00\x00\x00', - b'\x02312K4000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02312U5000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'\x018965B12350\x00\x00\x00\x00\x00\x00', - b'\x018965B12470\x00\x00\x00\x00\x00\x00', - b'\x018965B12490\x00\x00\x00\x00\x00\x00', - b'\x018965B12500\x00\x00\x00\x00\x00\x00', - b'\x018965B12520\x00\x00\x00\x00\x00\x00', - b'\x018965B12530\x00\x00\x00\x00\x00\x00', - b'\x018965B1255000\x00\x00\x00\x00', - b'8965B12361\x00\x00\x00\x00\x00\x00', - b'8965B16011\x00\x00\x00\x00\x00\x00', - b'8965B76012\x00\x00\x00\x00\x00\x00', - b'\x018965B12510\x00\x00\x00\x00\x00\x00', - b'\x018965B1256000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F152602280\x00\x00\x00\x00\x00\x00', - b'\x01F152602560\x00\x00\x00\x00\x00\x00', - b'\x01F152602590\x00\x00\x00\x00\x00\x00', - b'\x01F152602650\x00\x00\x00\x00\x00\x00', - b"\x01F15260A010\x00\x00\x00\x00\x00\x00", - b'\x01F15260A050\x00\x00\x00\x00\x00\x00', - b'\x01F152612641\x00\x00\x00\x00\x00\x00', - b'\x01F152612651\x00\x00\x00\x00\x00\x00', - b'\x01F152612B10\x00\x00\x00\x00\x00\x00', - b'\x01F152612B51\x00\x00\x00\x00\x00\x00', - b'\x01F152612B60\x00\x00\x00\x00\x00\x00', - b'\x01F152612B61\x00\x00\x00\x00\x00\x00', - b'\x01F152612B62\x00\x00\x00\x00\x00\x00', - b'\x01F152612B70\x00\x00\x00\x00\x00\x00', - b'\x01F152612B71\x00\x00\x00\x00\x00\x00', - b'\x01F152612B81\x00\x00\x00\x00\x00\x00', - b'\x01F152612B90\x00\x00\x00\x00\x00\x00', - b'\x01F152612C00\x00\x00\x00\x00\x00\x00', - b'\x01F152612862\x00\x00\x00\x00\x00\x00', - b'\x01F152612B91\x00\x00\x00\x00\x00\x00', - b'\x01F15260A070\x00\x00\x00\x00\x00\x00', - b'\x01F152676250\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301100\x00\x00\x00\x00', - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F12010D0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F1201100\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F1201200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F1201300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F1201400\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - b'\x028646F1202000\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F1202100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F1202200\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - b'\x028646F1601100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F1601300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, - CAR.COROLLAH_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x01896630ZJ1000\x00\x00\x00\x00', - b'\x01896630ZU8000\x00\x00\x00\x00', - b'\x01896637621000\x00\x00\x00\x00', - b'\x01896637623000\x00\x00\x00\x00', - b'\x01896637624000\x00\x00\x00\x00', - b'\x01896637626000\x00\x00\x00\x00', - b'\x01896637639000\x00\x00\x00\x00', - b'\x01896637648000\x00\x00\x00\x00', - b'\x01896637643000\x00\x00\x00\x00', - b'\x02896630A07000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630A21000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZJ5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZK8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZN8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZQ3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZR2000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZT8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZT9000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896630ZZ0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966312K6000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966312L0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966312Q3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966312Q3100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966312Q4000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x038966312L7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF1205001\x00\x00\x00\x00', - b'\x038966312N1000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', - b'\x038966312T3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF1205001\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B12361\x00\x00\x00\x00\x00\x00', - b'8965B12451\x00\x00\x00\x00\x00\x00', - b'8965B16011\x00\x00\x00\x00\x00\x00', - b'8965B16101\x00\x00\x00\x00\x00\x00', - b'8965B16170\x00\x00\x00\x00\x00\x00', - b'8965B76012\x00\x00\x00\x00\x00\x00', - b'8965B76050\x00\x00\x00\x00\x00\x00', - b'8965B76091\x00\x00\x00\x00\x00\x00', - b'\x018965B12350\x00\x00\x00\x00\x00\x00', - b'\x018965B12470\x00\x00\x00\x00\x00\x00', - b'\x018965B12490\x00\x00\x00\x00\x00\x00', - b'\x018965B12500\x00\x00\x00\x00\x00\x00', - b'\x018965B12510\x00\x00\x00\x00\x00\x00', - b'\x018965B12520\x00\x00\x00\x00\x00\x00', - b'\x018965B12530\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152612590\x00\x00\x00\x00\x00\x00', - b'F152612691\x00\x00\x00\x00\x00\x00', - b'F152612692\x00\x00\x00\x00\x00\x00', - b'F152612700\x00\x00\x00\x00\x00\x00', - b'F152612710\x00\x00\x00\x00\x00\x00', - b'F152612790\x00\x00\x00\x00\x00\x00', - b'F152612800\x00\x00\x00\x00\x00\x00', - b'F152612820\x00\x00\x00\x00\x00\x00', - b'F152612840\x00\x00\x00\x00\x00\x00', - b'F152612842\x00\x00\x00\x00\x00\x00', - b'F152612890\x00\x00\x00\x00\x00\x00', - b'F152612A00\x00\x00\x00\x00\x00\x00', - b'F152612A10\x00\x00\x00\x00\x00\x00', - b'F152612D00\x00\x00\x00\x00\x00\x00', - b'F152616011\x00\x00\x00\x00\x00\x00', - b'F152616060\x00\x00\x00\x00\x00\x00', - b'F152616030\x00\x00\x00\x00\x00\x00', - b'F152642540\x00\x00\x00\x00\x00\x00', - b'F152676293\x00\x00\x00\x00\x00\x00', - b'F152676303\x00\x00\x00\x00\x00\x00', - b'F152676304\x00\x00\x00\x00\x00\x00', - b'F152676371\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301100\x00\x00\x00\x00', - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - b'\x018821F6201400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F12010D0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F1201100\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F1201300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F1201400\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - b'\x028646F1202000\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F1202100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F1202200\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - b'\x028646F1601100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F1601200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b"\x028646F1601300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00", - b'\x028646F4203400\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F76020C0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F7603100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F7603200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F7605100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.HIGHLANDER: { - (Ecu.engine, 0x700, None): [ - b'\x01896630E09000\x00\x00\x00\x00', - b'\x01896630E43000\x00\x00\x00\x00', - b'\x01896630E43100\x00\x00\x00\x00', - b'\x01896630E43200\x00\x00\x00\x00', - b'\x01896630E44200\x00\x00\x00\x00', - b'\x01896630E45000\x00\x00\x00\x00', - b'\x01896630E45100\x00\x00\x00\x00', - b'\x01896630E45200\x00\x00\x00\x00', - b'\x01896630E46000\x00\x00\x00\x00', - b'\x01896630E46200\x00\x00\x00\x00', - b'\x01896630E74000\x00\x00\x00\x00', - b'\x01896630E75000\x00\x00\x00\x00', - b'\x01896630E76000\x00\x00\x00\x00', - b'\x01896630E77000\x00\x00\x00\x00', - b'\x01896630E83000\x00\x00\x00\x00', - b'\x01896630E84000\x00\x00\x00\x00', - b'\x01896630E85000\x00\x00\x00\x00', - b'\x01896630E86000\x00\x00\x00\x00', - b'\x01896630E88000\x00\x00\x00\x00', - b'\x01896630EA0000\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B48140\x00\x00\x00\x00\x00\x00', - b'8965B48150\x00\x00\x00\x00\x00\x00', - b'8965B48210\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [b'F15260E011\x00\x00\x00\x00\x00\x00'], - (Ecu.dsu, 0x791, None): [ - b'881510E01100\x00\x00\x00\x00', - b'881510E01200\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0E01200\x00\x00\x00\x00', - b'8646F0E01300\x00\x00\x00\x00', - ], - }, - CAR.HIGHLANDERH: { - (Ecu.eps, 0x7a1, None): [ - b'8965B48160\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152648541\x00\x00\x00\x00\x00\x00', - b'F152648542\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0230E40000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230E40100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230EA2000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0230EA2100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0E01200\x00\x00\x00\x00', - b'8646F0E01300\x00\x00\x00\x00', - ], - }, - CAR.HIGHLANDER_TSS2: { - (Ecu.eps, 0x7a1, None): [ - b'8965B48241\x00\x00\x00\x00\x00\x00', - b'8965B48310\x00\x00\x00\x00\x00\x00', - b'8965B48320\x00\x00\x00\x00\x00\x00', - b'8965B48400\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F15260E051\x00\x00\x00\x00\x00\x00', - b'\x01F15260E061\x00\x00\x00\x00\x00\x00', - b'\x01F15260E110\x00\x00\x00\x00\x00\x00', - b'\x01F15260E170\x00\x00\x00\x00\x00\x00', - b'\x01F15260E05300\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896630E62100\x00\x00\x00\x00', - b'\x01896630E62200\x00\x00\x00\x00', - b'\x01896630E64100\x00\x00\x00\x00', - b'\x01896630E64200\x00\x00\x00\x00', - b'\x01896630E64400\x00\x00\x00\x00', - b'\x01896630EB1000\x00\x00\x00\x00', - b'\x01896630EB1100\x00\x00\x00\x00', - b'\x01896630EB1200\x00\x00\x00\x00', - b'\x01896630EB2000\x00\x00\x00\x00', - b'\x01896630EB2100\x00\x00\x00\x00', - b'\x01896630EB2200\x00\x00\x00\x00', - b'\x01896630EC4000\x00\x00\x00\x00', - b'\x01896630ED9000\x00\x00\x00\x00', - b'\x01896630ED9100\x00\x00\x00\x00', - b'\x01896630EE1000\x00\x00\x00\x00', - b'\x01896630EE1100\x00\x00\x00\x00', - b'\x01896630EG3000\x00\x00\x00\x00', - b'\x01896630EG5000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301400\x00\x00\x00\x00', - b'\x018821F6201200\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0E02100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4803000\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F4803000\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - b'\x028646F4803200\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.HIGHLANDERH_TSS2: { - (Ecu.eps, 0x7a1, None): [ - b'8965B48241\x00\x00\x00\x00\x00\x00', - b'8965B48310\x00\x00\x00\x00\x00\x00', - b'8965B48400\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F15264872300\x00\x00\x00\x00', - b'\x01F15264872400\x00\x00\x00\x00', - b'\x01F15264872500\x00\x00\x00\x00', - b'\x01F15264872600\x00\x00\x00\x00', - b'\x01F15264873500\x00\x00\x00\x00', - b'\x01F152648C6300\x00\x00\x00\x00', - b'\x01F152648J4000\x00\x00\x00\x00', - b'\x01F152648J5000\x00\x00\x00\x00', - b'\x01F152648J6000\x00\x00\x00\x00', - b'\x01F15264872700\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896630E67000\x00\x00\x00\x00', - b'\x01896630EA1000\x00\x00\x00\x00', - b'\x01896630EE4000\x00\x00\x00\x00', - b'\x01896630EE4100\x00\x00\x00\x00', - b'\x01896630EE5000\x00\x00\x00\x00', - b'\x01896630EE6000\x00\x00\x00\x00', - b'\x01896630EF8000\x00\x00\x00\x00', - b'\x02896630E66000\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - b'\x02896630E66100\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - b'\x02896630EB3000\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - b'\x02896630EB3100\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301400\x00\x00\x00\x00', - b'\x018821F6201200\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0E02100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4803000\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', - b'\x028646F4803000\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - b'\x028646F4803200\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_IS: { - (Ecu.engine, 0x700, None): [ - b'\x018966353M7000\x00\x00\x00\x00', - b'\x018966353M7100\x00\x00\x00\x00', - b'\x018966353Q2000\x00\x00\x00\x00', - b'\x018966353Q2300\x00\x00\x00\x00', - b'\x018966353Q4000\x00\x00\x00\x00', - b'\x018966353R1100\x00\x00\x00\x00', - b'\x018966353R7100\x00\x00\x00\x00', - b'\x018966353R8100\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0232480000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02353P7000\x00\x00\x00\x00\x00\x00\x00\x00530J5000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02353P9000\x00\x00\x00\x00\x00\x00\x00\x00553C1000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152653300\x00\x00\x00\x00\x00\x00', - b'F152653301\x00\x00\x00\x00\x00\x00', - b'F152653310\x00\x00\x00\x00\x00\x00', - b'F152653330\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881515306200\x00\x00\x00\x00', - b'881515306400\x00\x00\x00\x00', - b'881515306500\x00\x00\x00\x00', - b'881515307400\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B53270\x00\x00\x00\x00\x00\x00', - b'8965B53271\x00\x00\x00\x00\x00\x00', - b'8965B53280\x00\x00\x00\x00\x00\x00', - b'8965B53281\x00\x00\x00\x00\x00\x00', - b'8965B53311\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702300\x00\x00\x00\x00', - b'8821F4702100\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F5301101\x00\x00\x00\x00', - b'8646F5301200\x00\x00\x00\x00', - b'8646F5301300\x00\x00\x00\x00', - b'8646F5301400\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_IS_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x018966353S1000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F15265342000\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B53450\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F5303400\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.PRIUS: { - (Ecu.engine, 0x700, None): [ - b'\x02896634761000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634761100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634761200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634762000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634763000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634763100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634765000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634765100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634769000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634769100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634769200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634770000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634774000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634774100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634774200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634782000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x02896634784000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347A0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347A5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347A8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347B0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x03896634759100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', - b'\x03896634759200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', - b'\x03896634759200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', - b'\x03896634759300\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', - b'\x03896634760000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701002\x00\x00\x00\x00', - b'\x03896634760000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', - b'\x03896634760000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', - b'\x03896634760100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', - b'\x03896634760200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', - b'\x03896634760200\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', - b'\x03896634760300\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701004\x00\x00\x00\x00', - b'\x03896634768000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703001\x00\x00\x00\x00', - b'\x03896634768000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703002\x00\x00\x00\x00', - b'\x03896634768100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703002\x00\x00\x00\x00', - b'\x03896634785000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4705001\x00\x00\x00\x00', - b'\x03896634785000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', - b'\x03896634786000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4705001\x00\x00\x00\x00', - b'\x03896634786000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', - b'\x03896634789000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4703002\x00\x00\x00\x00', - b'\x038966347A3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', - b'\x038966347A3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707001\x00\x00\x00\x00', - b'\x038966347B6000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', - b'\x038966347B7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B47021\x00\x00\x00\x00\x00\x00', - b'8965B47022\x00\x00\x00\x00\x00\x00', - b'8965B47023\x00\x00\x00\x00\x00\x00', - b'8965B47050\x00\x00\x00\x00\x00\x00', - b'8965B47060\x00\x00\x00\x00\x00\x00', # This is the EPS with good angle sensor - ], - (Ecu.abs, 0x7b0, None): [ - b'F152647290\x00\x00\x00\x00\x00\x00', - b'F152647300\x00\x00\x00\x00\x00\x00', - b'F152647310\x00\x00\x00\x00\x00\x00', - b'F152647414\x00\x00\x00\x00\x00\x00', - b'F152647415\x00\x00\x00\x00\x00\x00', - b'F152647416\x00\x00\x00\x00\x00\x00', - b'F152647417\x00\x00\x00\x00\x00\x00', - b'F152647470\x00\x00\x00\x00\x00\x00', - b'F152647490\x00\x00\x00\x00\x00\x00', - b'F152647682\x00\x00\x00\x00\x00\x00', - b'F152647683\x00\x00\x00\x00\x00\x00', - b'F152647684\x00\x00\x00\x00\x00\x00', - b'F152647862\x00\x00\x00\x00\x00\x00', - b'F152647863\x00\x00\x00\x00\x00\x00', - b'F152647864\x00\x00\x00\x00\x00\x00', - b'F152647865\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881514702300\x00\x00\x00\x00', - b'881514702400\x00\x00\x00\x00', - b'881514703100\x00\x00\x00\x00', - b'881514704100\x00\x00\x00\x00', - b'881514706000\x00\x00\x00\x00', - b'881514706100\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702000\x00\x00\x00\x00', - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F4701300\x00\x00\x00\x00', - b'8646F4702001\x00\x00\x00\x00', - b'8646F4702100\x00\x00\x00\x00', - b'8646F4702200\x00\x00\x00\x00', - b'8646F4705000\x00\x00\x00\x00', - b'8646F4705200\x00\x00\x00\x00', - ], - }, - CAR.PRIUS_V: { - (Ecu.abs, 0x7b0, None): [ - b'F152647280\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0234781000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881514705100\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F4703300\x00\x00\x00\x00', - ], - }, - CAR.RAV4: { - (Ecu.engine, 0x7e0, None): [ - b'\x02342Q1000\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342Q1100\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342Q1200\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342Q1300\x00\x00\x00\x00\x00\x00\x00\x0054212000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342Q2000\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342Q2100\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342Q2200\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342Q4000\x00\x00\x00\x00\x00\x00\x00\x0054215000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B42063\x00\x00\x00\x00\x00\x00', - b'8965B42073\x00\x00\x00\x00\x00\x00', - b'8965B42082\x00\x00\x00\x00\x00\x00', - b'8965B42083\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F15260R102\x00\x00\x00\x00\x00\x00', - b'F15260R103\x00\x00\x00\x00\x00\x00', - b'F152642493\x00\x00\x00\x00\x00\x00', - b'F152642492\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881514201200\x00\x00\x00\x00', - b'881514201300\x00\x00\x00\x00', - b'881514201400\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702000\x00\x00\x00\x00', - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F4201100\x00\x00\x00\x00', - b'8646F4201200\x00\x00\x00\x00', - b'8646F4202001\x00\x00\x00\x00', - b'8646F4202100\x00\x00\x00\x00', - b'8646F4204000\x00\x00\x00\x00', - ], - }, - CAR.RAV4H: { - (Ecu.engine, 0x7e0, None): [ - b'\x02342N9000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342N9100\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02342P0000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B42102\x00\x00\x00\x00\x00\x00', - b'8965B42103\x00\x00\x00\x00\x00\x00', - b'8965B42112\x00\x00\x00\x00\x00\x00', - b'8965B42162\x00\x00\x00\x00\x00\x00', - b'8965B42163\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152642090\x00\x00\x00\x00\x00\x00', - b'F152642110\x00\x00\x00\x00\x00\x00', - b'F152642120\x00\x00\x00\x00\x00\x00', - b'F152642400\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881514202200\x00\x00\x00\x00', - b'881514202300\x00\x00\x00\x00', - b'881514202400\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702000\x00\x00\x00\x00', - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F4201100\x00\x00\x00\x00', - b'8646F4201200\x00\x00\x00\x00', - b'8646F4202001\x00\x00\x00\x00', - b'8646F4202100\x00\x00\x00\x00', - b'8646F4204000\x00\x00\x00\x00', - ], - }, - CAR.RAV4_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x01896630R58000\x00\x00\x00\x00', - b'\x01896630R58100\x00\x00\x00\x00', - b'\x018966342E2000\x00\x00\x00\x00', - b'\x018966342M8000\x00\x00\x00\x00', - b'\x018966342S9000\x00\x00\x00\x00', - b'\x018966342T1000\x00\x00\x00\x00', - b'\x018966342T6000\x00\x00\x00\x00', - b'\x018966342T9000\x00\x00\x00\x00', - b'\x018966342U4000\x00\x00\x00\x00', - b'\x018966342U4100\x00\x00\x00\x00', - b'\x018966342U5100\x00\x00\x00\x00', - b'\x018966342V0000\x00\x00\x00\x00', - b'\x018966342V3000\x00\x00\x00\x00', - b'\x018966342V3100\x00\x00\x00\x00', - b'\x018966342V3200\x00\x00\x00\x00', - b'\x01896634A05000\x00\x00\x00\x00', - b'\x01896634A19000\x00\x00\x00\x00', - b'\x01896634A19100\x00\x00\x00\x00', - b'\x01896634A20000\x00\x00\x00\x00', - b'\x01896634A20100\x00\x00\x00\x00', - b'\x01896634A22000\x00\x00\x00\x00', - b'\x01896634A22100\x00\x00\x00\x00', - b'\x01896634A30000\x00\x00\x00\x00', - b'\x01896634A44000\x00\x00\x00\x00', - b'\x01896634A45000\x00\x00\x00\x00', - b'\x01896634A46000\x00\x00\x00\x00', - b'\x028966342M7000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', - b'\x028966342T0000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', - b'\x028966342V1000\x00\x00\x00\x00897CF1202001\x00\x00\x00\x00', - b'\x028966342Y8000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', - b'\x02896634A18000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', - b'\x02896634A18100\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', - b'\x02896634A43000\x00\x00\x00\x00897CF4201001\x00\x00\x00\x00', - b'\x02896634A47000\x00\x00\x00\x00897CF4201001\x00\x00\x00\x00', - b'\x028966342Z8000\x00\x00\x00\x00897CF1201001\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F15260R210\x00\x00\x00\x00\x00\x00', - b'\x01F15260R220\x00\x00\x00\x00\x00\x00', - b'\x01F15260R290\x00\x00\x00\x00\x00\x00', - b'\x01F15260R300\x00\x00\x00\x00\x00\x00', - b'\x01F15260R302\x00\x00\x00\x00\x00\x00', - b'\x01F152642551\x00\x00\x00\x00\x00\x00', - b'\x01F152642561\x00\x00\x00\x00\x00\x00', - b'\x01F152642601\x00\x00\x00\x00\x00\x00', - b'\x01F152642700\x00\x00\x00\x00\x00\x00', - b'\x01F152642701\x00\x00\x00\x00\x00\x00', - b'\x01F152642710\x00\x00\x00\x00\x00\x00', - b'\x01F152642711\x00\x00\x00\x00\x00\x00', - b'\x01F152642750\x00\x00\x00\x00\x00\x00', - b'\x01F152642751\x00\x00\x00\x00\x00\x00', - b'\x01F15260R292\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B42170\x00\x00\x00\x00\x00\x00', - b'8965B42171\x00\x00\x00\x00\x00\x00', - b'8965B42180\x00\x00\x00\x00\x00\x00', - b'8965B42181\x00\x00\x00\x00\x00\x00', - b'\x028965B0R01200\x00\x00\x00\x008965B0R02200\x00\x00\x00\x00', - b'\x028965B0R01300\x00\x00\x00\x008965B0R02300\x00\x00\x00\x00', - b'\x028965B0R01400\x00\x00\x00\x008965B0R02400\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301100\x00\x00\x00\x00', - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F4203200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F4203300\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F4203400\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4203500\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4203700\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F4203800\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - ], - }, - CAR.RAV4_TSS2_2022: { - (Ecu.abs, 0x7b0, None): [ - b'\x01F15260R350\x00\x00\x00\x00\x00\x00', - b'\x01F15260R361\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'\x028965B0R01500\x00\x00\x00\x008965B0R02500\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896634AA0000\x00\x00\x00\x00', - b'\x01896634AA0100\x00\x00\x00\x00', - b'\x01896634AA1000\x00\x00\x00\x00', - b'\x01896634A88000\x00\x00\x00\x00', - b'\x01896634A89000\x00\x00\x00\x00', - b'\x01896634A89100\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F0R01100\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0R02100\x00\x00\x00\x008646G0R01100\x00\x00\x00\x00', - ], - }, - CAR.RAV4_TSS2_2023: { - (Ecu.abs, 0x7b0, None): [ - b'\x01F15260R450\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'\x028965B0R11000\x00\x00\x00\x008965B0R12000\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896634A88100\x00\x00\x00\x00', - b'\x01896634AJ2000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F0R03100\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0R05100\x00\x00\x00\x008646G0R02100\x00\x00\x00\x00', - ], - }, - CAR.RAV4H_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x01896634A15000\x00\x00\x00\x00', - b'\x018966342M5000\x00\x00\x00\x00', - b'\x018966342W8000\x00\x00\x00\x00', - b'\x018966342X5000\x00\x00\x00\x00', - b'\x018966342X6000\x00\x00\x00\x00', - b'\x01896634A25000\x00\x00\x00\x00', - b'\x018966342W5000\x00\x00\x00\x00', - b'\x018966342W7000\x00\x00\x00\x00', - b'\x028966342W4001\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', - b'\x02896634A13000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02896634A13001\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - b'\x02896634A13101\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - b'\x02896634A14001\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', - b'\x02896634A23000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02896634A23001\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', - b'\x02896634A23101\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', - b'\x02896634A14001\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - b'\x02896634A14101\x00\x00\x00\x00897CF4801001\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152642291\x00\x00\x00\x00\x00\x00', - b'F152642290\x00\x00\x00\x00\x00\x00', - b'F152642322\x00\x00\x00\x00\x00\x00', - b'F152642330\x00\x00\x00\x00\x00\x00', - b'F152642331\x00\x00\x00\x00\x00\x00', - b'F152642531\x00\x00\x00\x00\x00\x00', - b'F152642532\x00\x00\x00\x00\x00\x00', - b'F152642520\x00\x00\x00\x00\x00\x00', - b'F152642521\x00\x00\x00\x00\x00\x00', - b'F152642540\x00\x00\x00\x00\x00\x00', - b'F152642541\x00\x00\x00\x00\x00\x00', - b'F152642542\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B42170\x00\x00\x00\x00\x00\x00', - b'8965B42171\x00\x00\x00\x00\x00\x00', - b'8965B42180\x00\x00\x00\x00\x00\x00', - b'8965B42181\x00\x00\x00\x00\x00\x00', - b'\x028965B0R01200\x00\x00\x00\x008965B0R02200\x00\x00\x00\x00', - b'\x028965B0R01300\x00\x00\x00\x008965B0R02300\x00\x00\x00\x00', - b'\x028965B0R01400\x00\x00\x00\x008965B0R02400\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301100\x00\x00\x00\x00', - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F4203200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F4203300\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F4203400\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4203500\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4203700\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F4203800\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - ], - }, - CAR.RAV4H_TSS2_2022: { - (Ecu.abs, 0x7b0, None): [ - b'\x01F15264283100\x00\x00\x00\x00', - b'\x01F15264286200\x00\x00\x00\x00', - b'\x01F15264286100\x00\x00\x00\x00', - b'\x01F15264283200\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'\x028965B0R01500\x00\x00\x00\x008965B0R02500\x00\x00\x00\x00', - b'8965B42182\x00\x00\x00\x00\x00\x00', - b'8965B42172\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896634A02001\x00\x00\x00\x00', - b'\x01896634A03000\x00\x00\x00\x00', - b'\x01896634A08000\x00\x00\x00\x00', - b'\x01896634A61000\x00\x00\x00\x00', - b'\x01896634A62000\x00\x00\x00\x00', - b'\x01896634A62100\x00\x00\x00\x00', - b'\x01896634A63000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F0R01100\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0R02100\x00\x00\x00\x008646G0R01100\x00\x00\x00\x00', - ], - }, - CAR.RAV4H_TSS2_2023: { - (Ecu.abs, 0x7b0, None): [ - b'\x01F15264283200\x00\x00\x00\x00', - b'\x01F15264283300\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'\x028965B0R11000\x00\x00\x00\x008965B0R12000\x00\x00\x00\x00', - b'8965B42371\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x700, None): [ - b'\x01896634AE1001\x00\x00\x00\x00', - b'\x01896634AF0000\x00\x00\x00\x00', - ], - (Ecu.hybrid, 0x7d2, None): [ - b'\x02899830R41000\x00\x00\x00\x00899850R20000\x00\x00\x00\x00', - b'\x028998342C0000\x00\x00\x00\x00899854224000\x00\x00\x00\x00', - b'\x02899830R39000\x00\x00\x00\x00899850R20000\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F0R03100\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0R05100\x00\x00\x00\x008646G0R02100\x00\x00\x00\x00', - ], - }, - CAR.SIENNA: { - (Ecu.engine, 0x700, None): [ - b'\x01896630832100\x00\x00\x00\x00', - b'\x01896630832200\x00\x00\x00\x00', - b'\x01896630838000\x00\x00\x00\x00', - b'\x01896630838100\x00\x00\x00\x00', - b'\x01896630842000\x00\x00\x00\x00', - b'\x01896630843000\x00\x00\x00\x00', - b'\x01896630851000\x00\x00\x00\x00', - b'\x01896630851100\x00\x00\x00\x00', - b'\x01896630851200\x00\x00\x00\x00', - b'\x01896630852000\x00\x00\x00\x00', - b'\x01896630852100\x00\x00\x00\x00', - b'\x01896630859000\x00\x00\x00\x00', - b'\x01896630860000\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B45070\x00\x00\x00\x00\x00\x00', - b'8965B45080\x00\x00\x00\x00\x00\x00', - b'8965B45082\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152608130\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881510801100\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702200\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F0801100\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_CTH: { - (Ecu.dsu, 0x791, None): [ - b'881517601100\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152676144\x00\x00\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0237635000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F7601100\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_ES_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x018966306U6000\x00\x00\x00\x00', - b'\x01896630EC9100\x00\x00\x00\x00', - b'\x018966333T5000\x00\x00\x00\x00', - b'\x018966333T5100\x00\x00\x00\x00', - b'\x018966333X6000\x00\x00\x00\x00', - b'\x01896633T07000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F152606281\x00\x00\x00\x00\x00\x00', - b'\x01F152606340\x00\x00\x00\x00\x00\x00', - b'\x01F152606461\x00\x00\x00\x00\x00\x00', - b'\x01F15260E031\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B33252\x00\x00\x00\x00\x00\x00', - b'8965B33590\x00\x00\x00\x00\x00\x00', - b'8965B33690\x00\x00\x00\x00\x00\x00', - b'8965B33721\x00\x00\x00\x00\x00\x00', - b'8965B48271\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301100\x00\x00\x00\x00', - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F33030D0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F3303200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F3304100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F3304300\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - b'\x028646F3309100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - b'\x028646F4810200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_ESH_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x028966333S8000\x00\x00\x00\x00897CF3302002\x00\x00\x00\x00', - b'\x028966333S8000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x028966333T0100\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x028966333V4000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x028966333W1000\x00\x00\x00\x00897CF3305001\x00\x00\x00\x00', - b'\x02896633T09000\x00\x00\x00\x00897CF3307001\x00\x00\x00\x00', - b'\x01896633T38000\x00\x00\x00\x00', - b'\x01896633T58000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152633423\x00\x00\x00\x00\x00\x00', - b'F152633680\x00\x00\x00\x00\x00\x00', - b'F152633681\x00\x00\x00\x00\x00\x00', - b'F152633F50\x00\x00\x00\x00\x00\x00', - b'F152633F51\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B33252\x00\x00\x00\x00\x00\x00', - b'8965B33590\x00\x00\x00\x00\x00\x00', - b'8965B33690\x00\x00\x00\x00\x00\x00', - b'8965B33721\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301100\x00\x00\x00\x00', - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - b'\x018821F6201300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F0610000\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - b'\x028646F33030D0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F3303100\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F3303200\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F3304100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F3304200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F3304300\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - b'\x028646F3309100\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_ES: { - (Ecu.engine, 0x7e0, None): [ - b'\x02333R0000\x00\x00\x00\x00\x00\x00\x00\x00A0C01000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152606202\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881513309500\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B33502\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4701200\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F3302200\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_ESH: { - (Ecu.engine, 0x7e0, None): [ - b'\x02333M4200\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152633171\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881513310400\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B33512\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4701100\x00\x00\x00\x00', - b'8821F4701300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F3302001\x00\x00\x00\x00', - b'8646F3302200\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_NX: { - (Ecu.engine, 0x700, None): [ - b'\x01896637850000\x00\x00\x00\x00', - b'\x01896637851000\x00\x00\x00\x00', - b'\x01896637852000\x00\x00\x00\x00', - b'\x01896637854000\x00\x00\x00\x00', - b'\x01896637878000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152678130\x00\x00\x00\x00\x00\x00', - b'F152678140\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881517803100\x00\x00\x00\x00', - b'881517803300\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B78060\x00\x00\x00\x00\x00\x00', - b'8965B78080\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702100\x00\x00\x00\x00', - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F7801100\x00\x00\x00\x00', - b'8646F7801300\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_NX_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x018966378B2100\x00\x00\x00\x00', - b'\x018966378B3000\x00\x00\x00\x00', - b'\x018966378B4100\x00\x00\x00\x00', - b'\x018966378G2000\x00\x00\x00\x00', - b'\x018966378G3000\x00\x00\x00\x00', - b'\x018966378B2000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F152678221\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B78120\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b"\x018821F3301400\x00\x00\x00\x00", - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F78030A0\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F7803100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_NXH_TSS2: { - (Ecu.engine, 0x7e0, None): [ - b'\x0237887000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02378A0000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02378F4000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152678210\x00\x00\x00\x00\x00\x00', - b'F152678211\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B78120\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301400\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F78030A0\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F7803100\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_NXH: { - (Ecu.engine, 0x7e0, None): [ - b'\x0237841000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0237842000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0237880000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0237882000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0237886000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152678160\x00\x00\x00\x00\x00\x00', - b'F152678170\x00\x00\x00\x00\x00\x00', - b'F152678171\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881517804300\x00\x00\x00\x00', - b'881517804100\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B78060\x00\x00\x00\x00\x00\x00', - b'8965B78080\x00\x00\x00\x00\x00\x00', - b'8965B78100\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702300\x00\x00\x00\x00', - b'8821F4702100\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F7801300\x00\x00\x00\x00', - b'8646F7801100\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_RC: { - (Ecu.engine, 0x700, None): [ - b'\x01896632478200\x00\x00\x00\x00', - ], - (Ecu.engine, 0x7e0, None): [ - b'\x0232484000\x00\x00\x00\x00\x00\x00\x00\x0052422000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152624150\x00\x00\x00\x00\x00\x00', - b'F152624221\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881512407000\x00\x00\x00\x00', - b'881512409100\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B24081\x00\x00\x00\x00\x00\x00', - b'8965B24320\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4702300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F2401200\x00\x00\x00\x00', - b'8646F2402200\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_RX: { - (Ecu.engine, 0x700, None): [ - b'\x01896630E36200\x00\x00\x00\x00', - b'\x01896630E36300\x00\x00\x00\x00', - b'\x01896630E37200\x00\x00\x00\x00', - b'\x01896630E37300\x00\x00\x00\x00', - b'\x01896630E41000\x00\x00\x00\x00', - b'\x01896630E41100\x00\x00\x00\x00', - b'\x01896630E41200\x00\x00\x00\x00', - b'\x01896630E41500\x00\x00\x00\x00', - b'\x01896630EA3100\x00\x00\x00\x00', - b'\x01896630EA3400\x00\x00\x00\x00', - b'\x01896630EA4100\x00\x00\x00\x00', - b'\x01896630EA4300\x00\x00\x00\x00', - b'\x01896630EA4400\x00\x00\x00\x00', - b'\x01896630EA6300\x00\x00\x00\x00', - b'\x018966348R1300\x00\x00\x00\x00', - b'\x018966348R8500\x00\x00\x00\x00', - b'\x018966348W1300\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152648472\x00\x00\x00\x00\x00\x00', - b'F152648473\x00\x00\x00\x00\x00\x00', - b'F152648492\x00\x00\x00\x00\x00\x00', - b'F152648493\x00\x00\x00\x00\x00\x00', - b'F152648474\x00\x00\x00\x00\x00\x00', - b'F152648630\x00\x00\x00\x00\x00\x00', - b'F152648494\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881514810300\x00\x00\x00\x00', - b'881514810500\x00\x00\x00\x00', - b'881514810700\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B0E011\x00\x00\x00\x00\x00\x00', - b'8965B0E012\x00\x00\x00\x00\x00\x00', - b'8965B48102\x00\x00\x00\x00\x00\x00', - b'8965B48111\x00\x00\x00\x00\x00\x00', - b'8965B48112\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4701000\x00\x00\x00\x00', - b'8821F4701100\x00\x00\x00\x00', - b'8821F4701200\x00\x00\x00\x00', - b'8821F4701300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F4801100\x00\x00\x00\x00', - b'8646F4801200\x00\x00\x00\x00', - b'8646F4802001\x00\x00\x00\x00', - b'8646F4802100\x00\x00\x00\x00', - b'8646F4802200\x00\x00\x00\x00', - b'8646F4809000\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_RXH: { - (Ecu.engine, 0x7e0, None): [ - b'\x02348J7000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348N0000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348Q4000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348Q4100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348T1100\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348T3000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348V6000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348Z3000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152648361\x00\x00\x00\x00\x00\x00', - b'F152648501\x00\x00\x00\x00\x00\x00', - b'F152648502\x00\x00\x00\x00\x00\x00', - b'F152648504\x00\x00\x00\x00\x00\x00', - b'F152648740\x00\x00\x00\x00\x00\x00', - b'F152648A30\x00\x00\x00\x00\x00\x00', - ], - (Ecu.dsu, 0x791, None): [ - b'881514811300\x00\x00\x00\x00', - b'881514811500\x00\x00\x00\x00', - b'881514811700\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B0E011\x00\x00\x00\x00\x00\x00', - b'8965B0E012\x00\x00\x00\x00\x00\x00', - b'8965B48111\x00\x00\x00\x00\x00\x00', - b'8965B48112\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'8821F4701000\x00\x00\x00\x00', - b'8821F4701100\x00\x00\x00\x00', - b'8821F4701200\x00\x00\x00\x00', - b'8821F4701300\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'8646F4801200\x00\x00\x00\x00', - b'8646F4802001\x00\x00\x00\x00', - b'8646F4802100\x00\x00\x00\x00', - b'8646F4802200\x00\x00\x00\x00', - b'8646F4809000\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_RX_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x01896630EA9000\x00\x00\x00\x00', - b'\x01896630EB0000\x00\x00\x00\x00', - b'\x01896630EC9000\x00\x00\x00\x00', - b'\x01896630ED0000\x00\x00\x00\x00', - b'\x01896630ED0100\x00\x00\x00\x00', - b'\x01896630ED6000\x00\x00\x00\x00', - b'\x018966348T8000\x00\x00\x00\x00', - b'\x018966348W5100\x00\x00\x00\x00', - b'\x018966348W9000\x00\x00\x00\x00', - b'\x01896634D12000\x00\x00\x00\x00', - b'\x01896634D12100\x00\x00\x00\x00', - b'\x01896634D43000\x00\x00\x00\x00', - b'\x01896634D44000\x00\x00\x00\x00', - b'\x018966348X0000\x00\x00\x00\x00', - b'\x01896630ED5000\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'\x01F15260E031\x00\x00\x00\x00\x00\x00', - b'\x01F15260E041\x00\x00\x00\x00\x00\x00', - b'\x01F152648781\x00\x00\x00\x00\x00\x00', - b'\x01F152648801\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B48261\x00\x00\x00\x00\x00\x00', - b'8965B48271\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301100\x00\x00\x00\x00', - b'\x018821F3301300\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F4810100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4810200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F4810300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F4810400\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, - CAR.LEXUS_RXH_TSS2: { - (Ecu.engine, 0x7e0, None): [ - b'\x02348X4000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348X5000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348X8000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x02348Y3000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0234D14000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0234D16000\x00\x00\x00\x00\x00\x00\x00\x00A4802000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152648831\x00\x00\x00\x00\x00\x00', - b'F152648891\x00\x00\x00\x00\x00\x00', - b'F152648D00\x00\x00\x00\x00\x00\x00', - b'F152648D60\x00\x00\x00\x00\x00\x00', - b'F152648811\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B48261\x00\x00\x00\x00\x00\x00', - b'8965B48271\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F4810100\x00\x00\x00\x008646G2601200\x00\x00\x00\x00', - b'\x028646F4810200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F4810300\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, - CAR.PRIUS_TSS2: { - (Ecu.engine, 0x700, None): [ - b'\x028966347B1000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347C4000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347C6000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347C7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x028966347C8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', - b'\x038966347C0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710101\x00\x00\x00\x00', - b'\x038966347C1000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710101\x00\x00\x00\x00', - b'\x038966347C5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707101\x00\x00\x00\x00', - b'\x038966347C5100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707101\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152647500\x00\x00\x00\x00\x00\x00', - b'F152647510\x00\x00\x00\x00\x00\x00', - b'F152647520\x00\x00\x00\x00\x00\x00', - b'F152647521\x00\x00\x00\x00\x00\x00', - b'F152647531\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B47070\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F4707000\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - b'\x028646F4710000\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - b'\x028646F4712000\x00\x00\x00\x008646G2601500\x00\x00\x00\x00', - ], - }, - CAR.MIRAI: { - (Ecu.abs, 0x7D1, None): [b'\x01898A36203000\x00\x00\x00\x00',], - (Ecu.abs, 0x7B0, None): [ # a second ABS ECU - b'\x01F15266203200\x00\x00\x00\x00', - b'\x01F15266203500\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7A1, None): [b'\x028965B6204100\x00\x00\x00\x008965B6203100\x00\x00\x00\x00',], - (Ecu.fwdRadar, 0x750, 0xf): [b'\x018821F6201200\x00\x00\x00\x00',], - (Ecu.fwdCamera, 0x750, 0x6d): [b'\x028646F6201400\x00\x00\x00\x008646G5301200\x00\x00\x00\x00',], - }, - CAR.ALPHARD_TSS2: { - (Ecu.engine, 0x7e0, None): [ - b'\x0235870000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - b'\x0235883000\x00\x00\x00\x00\x00\x00\x00\x00A0202000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B58040\x00\x00\x00\x00\x00\x00', - b'8965B58052\x00\x00\x00\x00\x00\x00', - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301200\x00\x00\x00\x00', - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646F58010C0\x00\x00\x00\x008646G26011A0\x00\x00\x00\x00', - b'\x028646F5803200\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, - CAR.ALPHARDH_TSS2: { - (Ecu.engine, 0x7e0, None): [ - b'\x0235879000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', - ], - (Ecu.eps, 0x7a1, None): [ - b'8965B58040\x00\x00\x00\x00\x00\x00', - ], - (Ecu.abs, 0x7b0, None): [ - b'F152658341\x00\x00\x00\x00\x00\x00' - ], - (Ecu.fwdRadar, 0x750, 0xf): [ - b'\x018821F3301400\x00\x00\x00\x00', - ], - (Ecu.fwdCamera, 0x750, 0x6d): [ - b'\x028646FV201000\x00\x00\x00\x008646G2601400\x00\x00\x00\x00', - ], - }, -} STEER_THRESHOLD = 100 @@ -2330,77 +450,52 @@ DBC = { CAR.COROLLA: dbc_dict('toyota_new_mc_pt_generated', 'toyota_adas'), CAR.LEXUS_RC: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.LEXUS_RX: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), - CAR.LEXUS_RXH: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.LEXUS_RX_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.LEXUS_RXH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.CHR: dbc_dict('toyota_nodsu_pt_generated', 'toyota_adas'), CAR.CHR_TSS2: dbc_dict('toyota_nodsu_pt_generated', None), - CAR.CHRH: dbc_dict('toyota_nodsu_pt_generated', 'toyota_adas'), - CAR.CHRH_TSS2: dbc_dict('toyota_nodsu_pt_generated', None), CAR.CAMRY: dbc_dict('toyota_nodsu_pt_generated', 'toyota_adas'), - CAR.CAMRYH: dbc_dict('toyota_nodsu_pt_generated', 'toyota_adas'), CAR.CAMRY_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.CAMRYH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.HIGHLANDER: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.HIGHLANDER_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.HIGHLANDERH: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), - CAR.HIGHLANDERH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.AVALON: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.AVALON_2019: dbc_dict('toyota_nodsu_pt_generated', 'toyota_adas'), - CAR.AVALONH_2019: dbc_dict('toyota_nodsu_pt_generated', 'toyota_adas'), CAR.AVALON_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.AVALONH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.RAV4_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.RAV4_TSS2_2022: dbc_dict('toyota_nodsu_pt_generated', None), CAR.RAV4_TSS2_2023: dbc_dict('toyota_nodsu_pt_generated', None), CAR.COROLLA_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.COROLLAH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.LEXUS_ES: dbc_dict('toyota_new_mc_pt_generated', 'toyota_adas'), CAR.LEXUS_ES_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.LEXUS_ESH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.LEXUS_ESH: dbc_dict('toyota_new_mc_pt_generated', 'toyota_adas'), CAR.SIENNA: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.LEXUS_IS: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.LEXUS_IS_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.LEXUS_CTH: dbc_dict('toyota_new_mc_pt_generated', 'toyota_adas'), - CAR.RAV4H_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.RAV4H_TSS2_2022: dbc_dict('toyota_nodsu_pt_generated', None), - CAR.RAV4H_TSS2_2023: dbc_dict('toyota_nodsu_pt_generated', None), - CAR.LEXUS_NXH: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.LEXUS_NX: dbc_dict('toyota_tnga_k_pt_generated', 'toyota_adas'), CAR.LEXUS_NX_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.LEXUS_NXH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.PRIUS_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.MIRAI: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), CAR.ALPHARD_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), - CAR.ALPHARDH_TSS2: dbc_dict('toyota_nodsu_pt_generated', 'toyota_tss2_adas'), + CAR.LEXUS_GS_F: dbc_dict('toyota_new_mc_pt_generated', 'toyota_adas'), } # These cars have non-standard EPS torque scale factors. All others are 73 EPS_SCALE = defaultdict(lambda: 73, {CAR.PRIUS: 66, CAR.COROLLA: 88, CAR.LEXUS_IS: 77, CAR.LEXUS_RC: 77, CAR.LEXUS_CTH: 100, CAR.PRIUS_V: 100}) # Toyota/Lexus Safety Sense 2.0 and 2.5 -TSS2_CAR = {CAR.RAV4_TSS2, CAR.RAV4_TSS2_2022, CAR.RAV4_TSS2_2023, CAR.COROLLA_TSS2, CAR.COROLLAH_TSS2, CAR.LEXUS_ES_TSS2, CAR.LEXUS_ESH_TSS2, - CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, CAR.RAV4H_TSS2_2023, CAR.LEXUS_RX_TSS2, CAR.LEXUS_RXH_TSS2, CAR.HIGHLANDER_TSS2, - CAR.HIGHLANDERH_TSS2, CAR.PRIUS_TSS2, CAR.CAMRY_TSS2, CAR.CAMRYH_TSS2, CAR.LEXUS_IS_TSS2, CAR.MIRAI, CAR.LEXUS_NX_TSS2, - CAR.LEXUS_NXH_TSS2, CAR.ALPHARD_TSS2, CAR.AVALON_TSS2, CAR.AVALONH_TSS2, CAR.ALPHARDH_TSS2, CAR.CHR_TSS2, CAR.CHRH_TSS2} +TSS2_CAR = {CAR.RAV4_TSS2, CAR.RAV4_TSS2_2022, CAR.RAV4_TSS2_2023, CAR.COROLLA_TSS2, CAR.LEXUS_ES_TSS2, + CAR.LEXUS_RX_TSS2, CAR.HIGHLANDER_TSS2, CAR.PRIUS_TSS2, CAR.CAMRY_TSS2, CAR.LEXUS_IS_TSS2, + CAR.MIRAI, CAR.LEXUS_NX_TSS2, CAR.ALPHARD_TSS2, CAR.AVALON_TSS2, CAR.CHR_TSS2} -NO_DSU_CAR = TSS2_CAR | {CAR.CHR, CAR.CHRH, CAR.CAMRY, CAR.CAMRYH} +NO_DSU_CAR = TSS2_CAR | {CAR.CHR, CAR.CAMRY} # the DSU uses the AEB message for longitudinal on these cars -UNSUPPORTED_DSU_CAR = {CAR.LEXUS_IS, CAR.LEXUS_RC} +UNSUPPORTED_DSU_CAR = {CAR.LEXUS_IS, CAR.LEXUS_RC, CAR.LEXUS_GS_F} # these cars have a radar which sends ACC messages instead of the camera -RADAR_ACC_CAR = {CAR.RAV4H_TSS2_2022, CAR.RAV4_TSS2_2022, CAR.RAV4H_TSS2_2023, CAR.RAV4_TSS2_2023, CAR.CHR_TSS2, CAR.CHRH_TSS2} +RADAR_ACC_CAR = {CAR.RAV4_TSS2_2022, CAR.RAV4_TSS2_2023, CAR.CHR_TSS2} -# these cars manufactured in U.S., Canada have EPSs that reject Lane Keep Assist (LKA, torque) messages and require -# Lane Tracing Assist (LTA, angle) to steer properly. cars manufactured in Japan still work with the older LKA messages which is detected -ANGLE_CONTROL_CAR = {CAR.RAV4H_TSS2_2023, CAR.RAV4_TSS2_2023} - -EV_HYBRID_CAR = {CAR.AVALONH_2019, CAR.AVALONH_TSS2, CAR.CAMRYH, CAR.CAMRYH_TSS2, CAR.CHRH, CAR.CHRH_TSS2, CAR.COROLLAH_TSS2, - CAR.HIGHLANDERH, CAR.HIGHLANDERH_TSS2, CAR.PRIUS, CAR.PRIUS_V, CAR.RAV4H, CAR.RAV4H_TSS2, CAR.RAV4H_TSS2_2022, - CAR.RAV4H_TSS2_2023, CAR.LEXUS_CTH, CAR.MIRAI, CAR.LEXUS_ESH, CAR.LEXUS_ESH_TSS2, CAR.LEXUS_NXH, CAR.LEXUS_RXH, - CAR.LEXUS_RXH_TSS2, CAR.LEXUS_NXH_TSS2, CAR.PRIUS_TSS2, CAR.ALPHARDH_TSS2} +# these cars use the Lane Tracing Assist (LTA) message for lateral control +ANGLE_CONTROL_CAR = {CAR.RAV4_TSS2_2023} # no resume button press required -NO_STOP_TIMER_CAR = TSS2_CAR | {CAR.PRIUS_V, CAR.RAV4H, CAR.HIGHLANDERH, CAR.HIGHLANDER, CAR.SIENNA, CAR.LEXUS_ESH} +NO_STOP_TIMER_CAR = TSS2_CAR | {CAR.PRIUS_V, CAR.RAV4H, CAR.HIGHLANDER, CAR.SIENNA} diff --git a/selfdrive/car/vin.py b/selfdrive/car/vin.py index 28edf157ae..f69771546f 100755 --- a/selfdrive/car/vin.py +++ b/selfdrive/car/vin.py @@ -4,8 +4,8 @@ import re import cereal.messaging as messaging from panda.python.uds import get_rx_addr_for_tx_addr, FUNCTIONAL_ADDRS from openpilot.selfdrive.car.isotp_parallel_query import IsoTpParallelQuery -from openpilot.selfdrive.car.fw_query_definitions import StdQueries -from openpilot.system.swaglog import cloudlog +from openpilot.selfdrive.car.fw_query_definitions import STANDARD_VIN_ADDRS, StdQueries +from openpilot.common.swaglog import cloudlog VIN_UNKNOWN = "0" * 17 VIN_RE = "[A-HJ-NPR-Z0-9]{17}" @@ -15,33 +15,41 @@ def is_valid_vin(vin: str): return re.fullmatch(VIN_RE, vin) is not None -def get_vin(logcan, sendcan, bus, timeout=0.1, retry=5, debug=False): - addrs = list(range(0x7e0, 0x7e8)) + list(range(0x18DA00F1, 0x18DB00F1, 0x100)) # addrs to process/wait for - valid_vin_addrs = [0x7e0, 0x7e2, 0x18da10f1, 0x18da0ef1] # engine, VMCU, 29-bit engine, PGM-FI +def get_vin(logcan, sendcan, buses, timeout=0.1, retry=3, debug=False): for i in range(retry): - for request, response in ((StdQueries.UDS_VIN_REQUEST, StdQueries.UDS_VIN_RESPONSE), (StdQueries.OBD_VIN_REQUEST, StdQueries.OBD_VIN_RESPONSE)): - try: - query = IsoTpParallelQuery(sendcan, logcan, bus, addrs, [request, ], [response, ], functional_addrs=FUNCTIONAL_ADDRS, debug=debug) - results = query.get_data(timeout) + for bus in buses: + for request, response, valid_buses, vin_addrs, functional_addrs, rx_offset in ( + (StdQueries.UDS_VIN_REQUEST, StdQueries.UDS_VIN_RESPONSE, (0, 1), STANDARD_VIN_ADDRS, FUNCTIONAL_ADDRS, 0x8), + (StdQueries.OBD_VIN_REQUEST, StdQueries.OBD_VIN_RESPONSE, (0, 1), STANDARD_VIN_ADDRS, FUNCTIONAL_ADDRS, 0x8), + (StdQueries.GM_VIN_REQUEST, StdQueries.GM_VIN_RESPONSE, (0,), [0x24b], None, 0x400), # Bolt fwdCamera + ): + if bus not in valid_buses: + continue - for addr in valid_vin_addrs: - vin = results.get((addr, None)) - if vin is not None: - # Ford pads with null bytes - if len(vin) == 24: - vin = re.sub(b'\x00*$', b'', vin) + try: + query = IsoTpParallelQuery(sendcan, logcan, bus, vin_addrs, [request, ], [response, ], response_offset=rx_offset, + functional_addrs=functional_addrs, debug=debug) + results = query.get_data(timeout) - # Honda Bosch response starts with a length, trim to correct length - if vin.startswith(b'\x11'): - vin = vin[1:18] + for addr in vin_addrs: + vin = results.get((addr, None)) + if vin is not None: + # Ford pads with null bytes + if len(vin) == 24: + vin = re.sub(b'\x00*$', b'', vin) - return get_rx_addr_for_tx_addr(addr), vin.decode() + # Honda Bosch response starts with a length, trim to correct length + if vin.startswith(b'\x11'): + vin = vin[1:18] - cloudlog.error(f"vin query retry ({i+1}) ...") - except Exception: - cloudlog.exception("VIN query exception") + cloudlog.warning(f"got vin with {request=}") + return get_rx_addr_for_tx_addr(addr), bus, vin.decode() + except Exception: + cloudlog.exception("VIN query exception") - return 0, VIN_UNKNOWN + cloudlog.error(f"vin query retry ({i+1}) ...") + + return -1, -1, VIN_UNKNOWN if __name__ == "__main__": @@ -59,5 +67,5 @@ if __name__ == "__main__": logcan = messaging.sub_sock('can') time.sleep(1) - vin_rx_addr, vin = get_vin(logcan, sendcan, args.bus, args.timeout, args.retry, debug=args.debug) - print(f'RX: {hex(vin_rx_addr)}, VIN: {vin}') + vin_rx_addr, vin_rx_bus, vin = get_vin(logcan, sendcan, (args.bus,), args.timeout, args.retry, debug=args.debug) + print(f'RX: {hex(vin_rx_addr)}, BUS: {vin_rx_bus}, VIN: {vin}') diff --git a/selfdrive/car/volkswagen/carcontroller.py b/selfdrive/car/volkswagen/carcontroller.py index a1bdb4dfe8..45686060a3 100644 --- a/selfdrive/car/volkswagen/carcontroller.py +++ b/selfdrive/car/volkswagen/carcontroller.py @@ -3,11 +3,11 @@ import cereal.messaging as messaging from opendbc.can.packer import CANPacker from openpilot.common.numpy_fast import clip from openpilot.common.conversions import Conversions as CV -from openpilot.common.params import Params, put_bool_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL from openpilot.selfdrive.car import apply_driver_steer_torque_limits from openpilot.selfdrive.car.volkswagen import mqbcan, pqcan -from openpilot.selfdrive.car.volkswagen.values import CANBUS, PQ_CARS, CarControllerParams +from openpilot.selfdrive.car.volkswagen.values import CANBUS, PQ_CARS, CarControllerParams, VolkswagenFlags from openpilot.selfdrive.controls.lib.drive_helpers import VOLKSWAGEN_V_CRUISE_MIN VisualAlert = car.CarControl.HUDControl.VisualAlert @@ -78,7 +78,7 @@ class CarController: self.m_tsc = self.sm['longitudinalPlanSP'].turnSpeed if self.frame % 200 == 0: - self.speed_limit_control_enabled = self.param_s.get_bool("SpeedLimitControl") + self.speed_limit_control_enabled = self.param_s.get_bool("EnableSlc") self.is_metric = self.param_s.get_bool("IsMetric") self.last_speed_limit_sign_tap = self.param_s.get_bool("LastSpeedLimitSignTap") self.v_cruise_min = VOLKSWAGEN_V_CRUISE_MIN[self.is_metric] * (CV.KPH_TO_MPH if not self.is_metric else 1) @@ -89,7 +89,7 @@ class CarController: if not self.CP.pcmCruiseSpeed: if not self.last_speed_limit_sign_tap_prev and self.last_speed_limit_sign_tap: self.sl_force_active_timer = self.frame - put_bool_nonblocking("LastSpeedLimitSignTap", False) + self.param_s.put_bool_nonblocking("LastSpeedLimitSignTap", False) self.last_speed_limit_sign_tap_prev = self.last_speed_limit_sign_tap sl_force_active = self.speed_limit_control_enabled and (self.frame < (self.sl_force_active_timer * DT_CTRL + 2.0)) @@ -134,13 +134,22 @@ class CarController: self.apply_steer_last = apply_steer can_sends.append(self.CCS.create_steering_control(self.packer_pt, CANBUS.pt, apply_steer, hca_enabled)) + if self.CP.flags & VolkswagenFlags.STOCK_HCA_PRESENT: + # Pacify VW Emergency Assist driver inactivity detection by changing its view of driver steering input torque + # to the greatest of actual driver input or 2x openpilot's output (1x openpilot output is not enough to + # consistently reset inactivity detection on straight level roads). See commaai/openpilot#23274 for background. + ea_simulated_torque = clip(apply_steer * 2, -self.CCP.STEER_MAX, self.CCP.STEER_MAX) + if abs(CS.out.steeringTorque) > abs(ea_simulated_torque): + ea_simulated_torque = CS.out.steeringTorque + can_sends.append(self.CCS.create_eps_update(self.packer_pt, CANBUS.cam, CS.eps_stock_values, ea_simulated_torque)) + # **** Acceleration Controls ******************************************** # if self.frame % self.CCP.ACC_CONTROL_STEP == 0 and self.CP.openpilotLongitudinalControl: acc_control = self.CCS.acc_control_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.longActive) accel = clip(actuators.accel, self.CCP.ACCEL_MIN, self.CCP.ACCEL_MAX) if CC.longActive else 0 stopping = actuators.longControlState == LongCtrlState.stopping - starting = actuators.longControlState == LongCtrlState.starting + starting = actuators.longControlState == LongCtrlState.pid and (CS.esp_hold_confirmation or CS.out.vEgo < self.CP.vEgoStopping) can_sends.extend(self.CCS.create_acc_accel_control(self.packer_pt, CANBUS.pt, CS.acc_type, CC.longActive, accel, acc_control, stopping, starting, CS.esp_hold_confirmation)) @@ -170,12 +179,9 @@ class CarController: can_sends.append(self.CCS.create_acc_buttons_control(self.packer_pt, ext_bus, CS.gra_stock_values, cancel=CC.cruiseControl.cancel, resume=CC.cruiseControl.resume)) if not (CC.cruiseControl.cancel or CC.cruiseControl.resume) and CS.out.cruiseState.enabled: - if gra_send_ready and not self.CP.pcmCruiseSpeed: + if not self.CP.pcmCruiseSpeed: self.cruise_button = self.get_cruise_buttons(CS, CC.vCruise) if self.cruise_button is not None: - send_freq = (self.frame % 10 == 0) - if not (self.v_tsc_state != 0 or self.m_tsc_state > 1) and abs(self.target_speed - self.v_set_dis) <= 2: - send_freq = (self.frame - self.last_button_frame) * DT_CTRL > 0.01 if self.acc_type == -1: if self.button_count >= 2 and self.v_set_dis_prev != self.v_set_dis: self.acc_type = 1 if abs(self.v_set_dis - self.v_set_dis_prev) >= 10 and self.last_cruise_button in (1, 2) else \ @@ -186,10 +192,9 @@ class CarController: self.cruise_button = 1 if self.cruise_button == 1 else 2 # accel, decel elif self.acc_type == 1: self.cruise_button = 3 if self.cruise_button == 1 else 4 # resume, set - if send_freq: - can_sends.append(self.CCS.create_acc_buttons_control(self.packer_pt, ext_bus, CS.gra_stock_values, - buttons=self.cruise_button)) - self.last_button_frame = self.frame + if self.frame % self.CCP.BTN_STEP == 0: + can_sends.append(self.CCS.create_acc_buttons_control(self.packer_pt, ext_bus, CS.gra_stock_values, frame=(self.frame // self.CCP.BTN_STEP), + buttons=self.cruise_button, custom_stock_long=True)) self.send_count += 1 else: self.send_count = 0 diff --git a/selfdrive/car/volkswagen/carstate.py b/selfdrive/car/volkswagen/carstate.py index 2e2cb50e79..2de49d1147 100644 --- a/selfdrive/car/volkswagen/carstate.py +++ b/selfdrive/car/volkswagen/carstate.py @@ -4,7 +4,7 @@ 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.volkswagen.values import DBC, CANBUS, PQ_CARS, NetworkLocation, TransmissionType, GearShifter, \ - CarControllerParams, BUTTON_STATES + CarControllerParams, VolkswagenFlags, BUTTON_STATES, VolkswagenFlagsSP class CarState(CarStateBase): @@ -14,6 +14,7 @@ class CarState(CarStateBase): self.button_states = {button.event_type: False for button in self.CCP.BUTTONS} self.esp_hold_confirmation = False self.upscale_lead_car_signal = False + self.eps_stock_values = False self.buttonStates = BUTTON_STATES.copy() self.buttonStatesPrev = BUTTON_STATES.copy() @@ -65,6 +66,11 @@ class CarState(CarStateBase): ret.steerFaultPermanent = hca_status in ("DISABLED", "FAULT") ret.steerFaultTemporary = hca_status in ("INITIALIZING", "REJECTED") + # VW Emergency Assist status tracking and mitigation + self.eps_stock_values = pt_cp.vl["LH_EPS_03"] + if self.CP.flags & VolkswagenFlags.STOCK_HCA_PRESENT: + ret.carFaultedNonCritical = bool(cam_cp.vl["HCA_01"]["EA_Ruckfreigabe"]) or cam_cp.vl["HCA_01"]["EA_ACC_Sollstatus"] > 0 + # Update gas, brakes, and gearshift. ret.gas = pt_cp.vl["Motor_20"]["MO_Fahrpedalrohwert_01"] / 100.0 ret.gasPressed = ret.gas > 0 @@ -73,7 +79,7 @@ class CarState(CarStateBase): brake_pressure_detected = bool(pt_cp.vl["ESP_05"]["ESP_Fahrer_bremst"]) ret.brakePressed = brake_pedal_pressed or brake_pressure_detected ret.parkingBrake = bool(pt_cp.vl["Kombi_01"]["KBI_Handbremse"]) # FIXME: need to include an EPB check as well - ret.brakeLights = bool(pt_cp.vl["ESP_05"]['ESP_Status_Bremsdruck']) + ret.brakeLightsDEPRECATED = bool(pt_cp.vl["ESP_05"]['ESP_Status_Bremsdruck']) # Update gear and/or clutch position data. if trans_type == TransmissionType.automatic: @@ -112,11 +118,14 @@ class CarState(CarStateBase): # braking release bits are set. # Refer to VW Self Study Program 890253: Volkswagen Driver Assistance # Systems, chapter on Front Assist with Braking: Golf Family for all MQB - ret.stockFcw = bool(ext_cp.vl["ACC_10"]["AWV2_Freigabe"]) - ret.stockAeb = bool(ext_cp.vl["ACC_10"]["ANB_Teilbremsung_Freigabe"]) or bool(ext_cp.vl["ACC_10"]["ANB_Zielbremsung_Freigabe"]) + if not self.CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY_NO_RADAR: + ret.stockFcw = bool(ext_cp.vl["ACC_10"]["AWV2_Freigabe"]) + ret.stockAeb = bool(ext_cp.vl["ACC_10"]["ANB_Teilbremsung_Freigabe"]) or bool(ext_cp.vl["ACC_10"]["ANB_Zielbremsung_Freigabe"]) # Update ACC radar status. - self.acc_type = ext_cp.vl["ACC_06"]["ACC_Typ"] + if not self.CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY_NO_RADAR or self.CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY: + _acc_type = 0 if self.CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY else ext_cp.vl["ACC_06"]["ACC_Typ"] + self.acc_type = _acc_type if pt_cp.vl["TSK_06"]["TSK_Status"] == 2: # ACC okay and enabled, but not currently engaged ret.cruiseState.available = True @@ -135,7 +144,7 @@ class CarState(CarStateBase): # Update ACC setpoint. When the setpoint is zero or there's an error, the # radar sends a set-speed of ~90.69 m/s / 203mph. - if self.CP.pcmCruise: + if self.CP.pcmCruise and not self.CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY_NO_RADAR: ret.cruiseState.speed = ext_cp.vl["ACC_02"]["ACC_Wunschgeschw_02"] * CV.KPH_TO_MS if ret.cruiseState.speed > 90: ret.cruiseState.speed = 0 @@ -201,7 +210,7 @@ class CarState(CarStateBase): ret.brake = pt_cp.vl["Bremse_5"]["Bremsdruck"] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects ret.brakePressed = bool(pt_cp.vl["Motor_2"]["Bremslichtschalter"]) ret.parkingBrake = bool(pt_cp.vl["Kombi_1"]["Bremsinfo"]) - ret.brakeLights = bool(pt_cp.vl["Motor_2"]['Bremstestschalter']) + ret.brakeLightsDEPRECATED = bool(pt_cp.vl["Motor_2"]['Bremstestschalter']) # Update gear and/or clutch position data. if trans_type == TransmissionType.automatic: @@ -310,7 +319,10 @@ class CarState(CarStateBase): if CP.networkLocation == NetworkLocation.fwdCamera: # Radars are here on CANBUS.pt - messages += MqbExtraSignals.fwd_radar_messages + if not CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY_NO_RADAR: + messages += MqbExtraSignals.fwd_radar_messages + if CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY: + messages.remove(("ACC_06", 50)) if CP.enableBsm: messages += MqbExtraSignals.bsm_radar_messages @@ -323,6 +335,11 @@ class CarState(CarStateBase): messages = [] + if CP.flags & VolkswagenFlags.STOCK_HCA_PRESENT: + messages += [ + ("HCA_01", 1), # From R242 Driver assistance camera, 50Hz if steering/1Hz if not + ] + if CP.networkLocation == NetworkLocation.fwdCamera: messages += [ # sig_address, frequency @@ -330,7 +347,10 @@ class CarState(CarStateBase): ] else: # Radars are here on CANBUS.cam - messages += MqbExtraSignals.fwd_radar_messages + if not CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY_NO_RADAR: + messages += MqbExtraSignals.fwd_radar_messages + if CP.spFlags & VolkswagenFlagsSP.SP_CC_ONLY: + messages.remove(("ACC_06", 50)) if CP.enableBsm: messages += MqbExtraSignals.bsm_radar_messages diff --git a/selfdrive/car/volkswagen/fingerprints.py b/selfdrive/car/volkswagen/fingerprints.py new file mode 100644 index 0000000000..dcdb2e62bf --- /dev/null +++ b/selfdrive/car/volkswagen/fingerprints.py @@ -0,0 +1,1157 @@ +from cereal import car +from openpilot.selfdrive.car.volkswagen.values import CAR + +Ecu = car.CarParams.Ecu + +# TODO: Sharan Mk2 EPS and DQ250 auto trans both require KWP2000 support for fingerprinting + + +FW_VERSIONS = { + CAR.ARTEON_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x873G0906259AH\xf1\x890001', + b'\xf1\x873G0906259F \xf1\x890004', + b'\xf1\x873G0906259G \xf1\x890004', + b'\xf1\x873G0906259G \xf1\x890005', + b'\xf1\x873G0906259M \xf1\x890003', + b'\xf1\x873G0906259N \xf1\x890004', + b'\xf1\x873G0906259P \xf1\x890001', + b'\xf1\x875NA907115H \xf1\x890002', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927158L \xf1\x893611', + b'\xf1\x870DL300014C \xf1\x893704', + b'\xf1\x870GC300011L \xf1\x891401', + b'\xf1\x870GC300014M \xf1\x892802', + b'\xf1\x870GC300019G \xf1\x892804', + b'\xf1\x870GC300040P \xf1\x891401', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e1616001613121157161111572900', + b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e1616001613121177161113772900', + b'\xf1\x873Q0959655CK\xf1\x890711\xf1\x82\x0e1712141712141105121122052900', + b'\xf1\x873Q0959655DA\xf1\x890720\xf1\x82\x0e1712141712141105121122052900', + b'\xf1\x873Q0959655DL\xf1\x890732\xf1\x82\x0e1812141812171105141123052J00', + b'\xf1\x875QF959655AP\xf1\x890755\xf1\x82\x1311110011111311111100110200--1611125F49', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571B41815A1', + b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571B00817A1', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567B0020800', + b'\xf1\x875WA907145M \xf1\x891051\xf1\x82\x002MB4092M7N', + b'\xf1\x875WA907145M \xf1\x891051\xf1\x82\x002NB4202N7N', + b'\xf1\x875WA907145Q \xf1\x891063\xf1\x82\x002KB4092KOM', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572T \xf1\x890383', + b'\xf1\x875Q0907572J \xf1\x890654', + b'\xf1\x875Q0907572R \xf1\x890771', + ], + }, + CAR.ATLAS_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8703H906026AA\xf1\x899970', + b'\xf1\x8703H906026AG\xf1\x899973', + b'\xf1\x8703H906026AJ\xf1\x890638', + b'\xf1\x8703H906026AJ\xf1\x891017', + b'\xf1\x8703H906026AT\xf1\x891922', + b'\xf1\x8703H906026BC\xf1\x892664', + b'\xf1\x8703H906026F \xf1\x896696', + b'\xf1\x8703H906026F \xf1\x899970', + b'\xf1\x8703H906026J \xf1\x896026', + b'\xf1\x8703H906026J \xf1\x899971', + b'\xf1\x8703H906026S \xf1\x896693', + b'\xf1\x8703H906026S \xf1\x899970', + b'\xf1\x873CN906259 \xf1\x890005', + b'\xf1\x873CN906259F \xf1\x890002', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927158A \xf1\x893387', + b'\xf1\x8709G927158DR\xf1\x893536', + b'\xf1\x8709G927158DR\xf1\x893742', + b'\xf1\x8709G927158EN\xf1\x893691', + b'\xf1\x8709G927158F \xf1\x893489', + b'\xf1\x8709G927158FT\xf1\x893835', + b'\xf1\x8709G927158GL\xf1\x893939', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655BC\xf1\x890503\xf1\x82\x0e1914151912001103111122031200', + b'\xf1\x873Q0959655BN\xf1\x890713\xf1\x82\x0e2214152212001105141122052900', + b'\xf1\x873Q0959655DB\xf1\x890720\xf1\x82\x0e1114151112001105111122052900', + b'\xf1\x873Q0959655DB\xf1\x890720\xf1\x82\x0e2214152212001105141122052900', + b'\xf1\x873Q0959655DM\xf1\x890732\xf1\x82\x0e1114151112001105161122052J00', + b'\xf1\x873Q0959655DM\xf1\x890732\xf1\x82\x0e1115151112001105171122052J00', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873QF909144B \xf1\x891582\xf1\x82\x0571B60924A1', + b'\xf1\x873QF909144B \xf1\x891582\xf1\x82\x0571B6G920A1', + b'\xf1\x873QF909144B \xf1\x891582\xf1\x82\x0571B6M921A1', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820528B6080105', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820528B6090105', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572R \xf1\x890372', + b'\xf1\x872Q0907572T \xf1\x890383', + b'\xf1\x875Q0907572H \xf1\x890620', + b'\xf1\x875Q0907572J \xf1\x890654', + b'\xf1\x875Q0907572P \xf1\x890682', + ], + }, + CAR.CRAFTER_MK2: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704L906056BP\xf1\x894729', + b'\xf1\x8704L906056EK\xf1\x896391', + b'\xf1\x8705L906023BC\xf1\x892688', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655AL\xf1\x890505\xf1\x82\x0e1411001413001203151311031100', + b'\xf1\x873Q0959655BG\xf1\x890703\xf1\x82\x0e16120016130012051G1313052900', + b'\xf1\x875QF959655AS\xf1\x890755\xf1\x82\x1315140015150011111100050200--1311120749', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x872N0909143D\x00\xf1\x897010\xf1\x82\x05183AZ306A2', + b'\xf1\x872N0909143E \xf1\x897021\xf1\x82\x05163AZ306A2', + b'\xf1\x872N0909144K \xf1\x897045\xf1\x82\x05233AZ810A2', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572J \xf1\x890156', + b'\xf1\x872Q0907572M \xf1\x890233', + ], + }, + CAR.GOLF_MK7: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906016A \xf1\x897697', + b'\xf1\x8704E906016AD\xf1\x895758', + b'\xf1\x8704E906016CE\xf1\x899096', + b'\xf1\x8704E906016CH\xf1\x899226', + b'\xf1\x8704E906016N \xf1\x899105', + b'\xf1\x8704E906023AG\xf1\x891726', + b'\xf1\x8704E906023BN\xf1\x894518', + b'\xf1\x8704E906024K \xf1\x896811', + b'\xf1\x8704E906024K \xf1\x899970', + b'\xf1\x8704E906027GR\xf1\x892394', + b'\xf1\x8704E906027HD\xf1\x892603', + b'\xf1\x8704E906027HD\xf1\x893742', + b'\xf1\x8704E906027MA\xf1\x894958', + b'\xf1\x8704L906021DT\xf1\x895520', + b'\xf1\x8704L906021DT\xf1\x898127', + b'\xf1\x8704L906021N \xf1\x895518', + b'\xf1\x8704L906021N \xf1\x898138', + b'\xf1\x8704L906026BN\xf1\x891197', + b'\xf1\x8704L906026BP\xf1\x897608', + b'\xf1\x8704L906026NF\xf1\x899528', + b'\xf1\x8704L906056CL\xf1\x893823', + b'\xf1\x8704L906056CR\xf1\x895813', + b'\xf1\x8704L906056HE\xf1\x893758', + b'\xf1\x8704L906056HN\xf1\x896590', + b'\xf1\x8704L906056HT\xf1\x896591', + b'\xf1\x870EA906016A \xf1\x898343', + b'\xf1\x870EA906016E \xf1\x894219', + b'\xf1\x870EA906016F \xf1\x894238', + b'\xf1\x870EA906016F \xf1\x895002', + b'\xf1\x870EA906016Q \xf1\x895993', + b'\xf1\x870EA906016S \xf1\x897207', + b'\xf1\x875G0906259 \xf1\x890007', + b'\xf1\x875G0906259D \xf1\x890002', + b'\xf1\x875G0906259J \xf1\x890002', + b'\xf1\x875G0906259L \xf1\x890002', + b'\xf1\x875G0906259N \xf1\x890003', + b'\xf1\x875G0906259Q \xf1\x890002', + b'\xf1\x875G0906259Q \xf1\x892313', + b'\xf1\x875G0906259T \xf1\x890003', + b'\xf1\x878V0906259H \xf1\x890002', + b'\xf1\x878V0906259J \xf1\x890003', + b'\xf1\x878V0906259K \xf1\x890001', + b'\xf1\x878V0906259K \xf1\x890003', + b'\xf1\x878V0906259P \xf1\x890001', + b'\xf1\x878V0906259Q \xf1\x890002', + b'\xf1\x878V0906259R \xf1\x890002', + b'\xf1\x878V0906264F \xf1\x890003', + b'\xf1\x878V0906264L \xf1\x890002', + b'\xf1\x878V0906264M \xf1\x890001', + b'\xf1\x878V09C0BB01 \xf1\x890001', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927749AP\xf1\x892943', + b'\xf1\x8709S927158A \xf1\x893585', + b'\xf1\x870CW300040H \xf1\x890606', + b'\xf1\x870CW300041D \xf1\x891004', + b'\xf1\x870CW300041H \xf1\x891010', + b'\xf1\x870CW300042F \xf1\x891604', + b'\xf1\x870CW300043B \xf1\x891601', + b'\xf1\x870CW300043E \xf1\x891603', + b'\xf1\x870CW300044S \xf1\x894530', + b'\xf1\x870CW300044T \xf1\x895245', + b'\xf1\x870CW300045 \xf1\x894531', + b'\xf1\x870CW300047D \xf1\x895261', + b'\xf1\x870CW300047E \xf1\x895261', + b'\xf1\x870CW300048J \xf1\x890611', + b'\xf1\x870CW300049H \xf1\x890905', + b'\xf1\x870CW300050G \xf1\x891905', + b'\xf1\x870D9300012 \xf1\x894904', + b'\xf1\x870D9300012 \xf1\x894913', + b'\xf1\x870D9300012 \xf1\x894937', + b'\xf1\x870D9300012 \xf1\x895045', + b'\xf1\x870D9300012 \xf1\x895046', + b'\xf1\x870D9300014M \xf1\x895004', + b'\xf1\x870D9300014Q \xf1\x895006', + b'\xf1\x870D9300020J \xf1\x894902', + b'\xf1\x870D9300020Q \xf1\x895201', + b'\xf1\x870D9300020S \xf1\x895201', + b'\xf1\x870D9300040A \xf1\x893613', + b'\xf1\x870D9300040S \xf1\x894311', + b'\xf1\x870D9300041H \xf1\x895220', + b'\xf1\x870D9300041P \xf1\x894507', + b'\xf1\x870DD300045K \xf1\x891120', + b'\xf1\x870DD300046F \xf1\x891601', + b'\xf1\x870GC300012A \xf1\x891401', + b'\xf1\x870GC300012A \xf1\x891403', + b'\xf1\x870GC300014B \xf1\x892401', + b'\xf1\x870GC300014B \xf1\x892403', + b'\xf1\x870GC300014B \xf1\x892405', + b'\xf1\x870GC300020G \xf1\x892401', + b'\xf1\x870GC300020G \xf1\x892403', + b'\xf1\x870GC300020G \xf1\x892404', + b'\xf1\x870GC300020N \xf1\x892804', + b'\xf1\x870GC300043T \xf1\x899999', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655AA\xf1\x890386\xf1\x82\x111413001113120043114317121C111C9113', + b'\xf1\x875Q0959655AA\xf1\x890386\xf1\x82\x111413001113120053114317121C111C9113', + b'\xf1\x875Q0959655AA\xf1\x890388\xf1\x82\x111413001113120043114317121C111C9113', + b'\xf1\x875Q0959655AA\xf1\x890388\xf1\x82\x111413001113120043114417121411149113', + b'\xf1\x875Q0959655AA\xf1\x890388\xf1\x82\x111413001113120053114317121C111C9113', + b'\xf1\x875Q0959655AR\xf1\x890317\xf1\x82\x13141500111233003142114A2131219333313100', + b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\x1314160011123300314211012230229333423100', + b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\x1314160011123300314211012230229333463100', + b'\xf1\x875Q0959655BS\xf1\x890403\xf1\x82\x1314160011123300314240012250229333463100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142404A2251229333463100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142404A2252229333463100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142405A2251229333463100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142405A2252229333463100', + b'\xf1\x875Q0959655C \xf1\x890361\xf1\x82\x111413001112120004110415121610169112', + b'\xf1\x875Q0959655CA\xf1\x890403\xf1\x82\x1314160011123300314240012250229333463100', + b'\xf1\x875Q0959655D \xf1\x890388\xf1\x82\x111413001113120006110417121A101A9113', + b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13271112111312--071104171825102591131211', + b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13271212111312--071104171838103891131211', + b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13272512111312--07110417182C102C91131211', + b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13341512112212--071104172328102891131211', + b'\xf1\x875Q0959655M \xf1\x890361\xf1\x82\x111413001112120041114115121611169112', + b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1315120011211200061104171717101791132111', + b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1315120011211200621143171717111791132111', + b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1324230011211200061104171724102491132111', + b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1324230011211200621143171724112491132111', + b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1324230011211200631143171724122491132111', + b'\xf1\x875Q0959655T \xf1\x890825\xf1\x82\x13271200111312--071104171837103791132111', + b'\xf1\x875Q0959655T \xf1\x890830\xf1\x82\x13271100111312--071104171826102691131211', + b'\xf1\x875QD959655 \xf1\x890388\xf1\x82\x111413001113120006110417121D101D9112', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144F \xf1\x895043\xf1\x82\x0561A01612A0', + b'\xf1\x873Q0909144H \xf1\x895061\xf1\x82\x0566A0J612A1', + b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A00514A1', + b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A01613A1', + b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A0J712A1', + b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571A0J714A1', + b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571A0JA15A1', + b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A01A18A1', + b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A02A16A1', + b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A0JA16A1', + b'\xf1\x873QM909144 \xf1\x895072\xf1\x82\x0571A01714A1', + b'\xf1\x875Q0909143K \xf1\x892033\xf1\x820519A9040203', + b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521A00441A1', + b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521A00608A1', + b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521A00641A1', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A00442A1', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A00642A1', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A07B05A1', + b'\xf1\x875Q0909144L \xf1\x891021\xf1\x82\x0521A00502A0', + b'\xf1\x875Q0909144L \xf1\x891021\xf1\x82\x0521A00602A0', + b'\xf1\x875Q0909144L \xf1\x891021\xf1\x82\x0522A00402A0', + b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\x0511A00403A0', + b'\xf1\x875Q0909144R \xf1\x891061\xf1\x82\x0516A00604A1', + b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A00404A1', + b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A00504A1', + b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A00604A1', + b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A07A02A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A00407A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A00507A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A07B04A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A20B03A1', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A2000400', + b'\xf1\x875QD909144B \xf1\x891072\xf1\x82\x0521A00507A1', + b'\xf1\x875QM909144A \xf1\x891072\xf1\x82\x0521A20B03A1', + b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A00442A1', + b'\xf1\x875QN909144A \xf1\x895081\xf1\x82\x0571A01A16A1', + b'\xf1\x875QN909144A \xf1\x895081\xf1\x82\x0571A01A17A1', + b'\xf1\x875QN909144A \xf1\x895081\xf1\x82\x0571A01A18A1', + b'\xf1\x875QN909144B \xf1\x895082\xf1\x82\x0571A01A18A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x875Q0907567G \xf1\x890390\xf1\x82\x0101', + b'\xf1\x875Q0907567J \xf1\x890396\xf1\x82\x0101', + b'\xf1\x875Q0907567L \xf1\x890098\xf1\x82\x0101', + b'\xf1\x875Q0907572A \xf1\x890141\xf1\x82\x0101', + b'\xf1\x875Q0907572B \xf1\x890200\xf1\x82\x0101', + b'\xf1\x875Q0907572C \xf1\x890210\xf1\x82\x0101', + b'\xf1\x875Q0907572D \xf1\x890304\xf1\x82\x0101', + b'\xf1\x875Q0907572E \xf1\x89X310\xf1\x82\x0101', + b'\xf1\x875Q0907572F \xf1\x890400\xf1\x82\x0101', + b'\xf1\x875Q0907572G \xf1\x890571', + b'\xf1\x875Q0907572H \xf1\x890620', + b'\xf1\x875Q0907572J \xf1\x890653', + b'\xf1\x875Q0907572J \xf1\x890654', + b'\xf1\x875Q0907572P \xf1\x890682', + b'\xf1\x875Q0907572R \xf1\x890771', + b'\xf1\x875Q0907572S \xf1\x890780', + ], + }, + CAR.JETTA_MK7: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906024AK\xf1\x899937', + b'\xf1\x8704E906024AS\xf1\x899912', + b'\xf1\x8704E906024B \xf1\x895594', + b'\xf1\x8704E906024BC\xf1\x899971', + b'\xf1\x8704E906024BG\xf1\x891057', + b'\xf1\x8704E906024C \xf1\x899970', + b'\xf1\x8704E906024L \xf1\x895595', + b'\xf1\x8704E906024L \xf1\x899970', + b'\xf1\x8704E906027MS\xf1\x896223', + b'\xf1\x875G0906259T \xf1\x890003', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927158BQ\xf1\x893545', + b'\xf1\x8709S927158BS\xf1\x893642', + b'\xf1\x8709S927158BS\xf1\x893694', + b'\xf1\x8709S927158CK\xf1\x893770', + b'\xf1\x8709S927158R \xf1\x893552', + b'\xf1\x8709S927158R \xf1\x893587', + b'\xf1\x870GC300020N \xf1\x892803', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655AG\xf1\x890336\xf1\x82\x1314171231313500314611011630169333463100', + b'\xf1\x875Q0959655AG\xf1\x890338\xf1\x82\x1314171231313500314611011630169333463100', + b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\x1314171231313500314642011650169333463100', + b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\x1314171231313500314643011650169333463100', + b'\xf1\x875Q0959655BR\xf1\x890403\xf1\x82\x1311170031313300314240011150119333433100', + b'\xf1\x875Q0959655BR\xf1\x890403\xf1\x82\x1319170031313300314240011550159333463100', + b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1314171231313500314642021650169333613100', + b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1314171231313500314643021650169333613100', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A10A11A1', + b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A10A01A1', + b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521B00404A1', + b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A00642A1', + b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A10A01A1', + b'\xf1\x875QN909144B \xf1\x895082\xf1\x82\x0571A10A11A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x875Q0907572N \xf1\x890681', + b'\xf1\x875Q0907572P \xf1\x890682', + b'\xf1\x875Q0907572R \xf1\x890771', + ], + }, + CAR.PASSAT_MK8: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8703N906026E \xf1\x892114', + b'\xf1\x8704E906023AH\xf1\x893379', + b'\xf1\x8704E906023BM\xf1\x894522', + b'\xf1\x8704L906026DP\xf1\x891538', + b'\xf1\x8704L906026ET\xf1\x891990', + b'\xf1\x8704L906026FP\xf1\x892012', + b'\xf1\x8704L906026GA\xf1\x892013', + b'\xf1\x8704L906026KD\xf1\x894798', + b'\xf1\x873G0906259 \xf1\x890004', + b'\xf1\x873G0906259B \xf1\x890002', + b'\xf1\x873G0906264 \xf1\x890004', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300042H \xf1\x891601', + b'\xf1\x870CW300042H \xf1\x891607', + b'\xf1\x870CW300043H \xf1\x891601', + b'\xf1\x870CW300048R \xf1\x890610', + b'\xf1\x870D9300013A \xf1\x894905', + b'\xf1\x870D9300014L \xf1\x895002', + b'\xf1\x870D9300018C \xf1\x895297', + b'\xf1\x870D9300041A \xf1\x894801', + b'\xf1\x870D9300042H \xf1\x894901', + b'\xf1\x870DD300045T \xf1\x891601', + b'\xf1\x870DD300046H \xf1\x891601', + b'\xf1\x870DL300011H \xf1\x895201', + b'\xf1\x870GC300042H \xf1\x891404', + b'\xf1\x870GC300043 \xf1\x892301', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655AE\xf1\x890195\xf1\x82\r56140056130012416612124111', + b'\xf1\x873Q0959655AF\xf1\x890195\xf1\x82\r56140056130012026612120211', + b'\xf1\x873Q0959655AN\xf1\x890305\xf1\x82\r58160058140013036914110311', + b'\xf1\x873Q0959655AN\xf1\x890306\xf1\x82\r58160058140013036914110311', + b'\xf1\x873Q0959655BA\xf1\x890195\xf1\x82\r56140056130012416612124111', + b'\xf1\x873Q0959655BA\xf1\x890195\xf1\x82\r56140056130012516612125111', + b'\xf1\x873Q0959655BB\xf1\x890195\xf1\x82\r56140056130012026612120211', + b'\xf1\x873Q0959655BG\xf1\x890712\xf1\x82\x0e5915005914001305701311052900', + b'\xf1\x873Q0959655BJ\xf1\x890703\xf1\x82\x0e5915005914001305701311052900', + b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e5915005914001344701311442900', + b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e5915005914001354701311542900', + b'\xf1\x873Q0959655CN\xf1\x890720\xf1\x82\x0e5915005914001305701311052900', + b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1315120011111200631145171716121691132111', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566B00611A1', + b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566B00711A1', + b'\xf1\x875Q0909143K \xf1\x892033\xf1\x820514B0060703', + b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522B0060803', + b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522B0080803', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820526B0060905', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521B00606A1', + b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516B00501A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521B00603A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521B00703A1', + b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563B0000600', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567B0020600', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x873Q0907572A \xf1\x890126', + b'\xf1\x873Q0907572A \xf1\x890130', + b'\xf1\x873Q0907572B \xf1\x890192', + b'\xf1\x873Q0907572B \xf1\x890194', + b'\xf1\x873Q0907572C \xf1\x890195', + b'\xf1\x873Q0907572C \xf1\x890196', + b'\xf1\x875Q0907572P \xf1\x890682', + b'\xf1\x875Q0907572R \xf1\x890771', + ], + }, + CAR.PASSAT_NMS: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8706K906016C \xf1\x899609', + b'\xf1\x8706K906016E \xf1\x899830', + b'\xf1\x8706K906016G \xf1\x891124', + b'\xf1\x8706K906071BJ\xf1\x894891', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927158AB\xf1\x893318', + b'\xf1\x8709G927158BD\xf1\x893121', + b'\xf1\x8709G927158DK\xf1\x893594', + b'\xf1\x8709G927158FQ\xf1\x893745', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x87561959655 \xf1\x890210\xf1\x82\x1212121111113000102011--121012--101312', + b'\xf1\x87561959655C \xf1\x890508\xf1\x82\x1215141111121100314919--153015--304831', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x87561907567A \xf1\x890132', + b'\xf1\x877N0907572C \xf1\x890211\xf1\x82\x0152', + ], + }, + CAR.POLO_MK6: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704C906025H \xf1\x895177', + b'\xf1\x8705C906032J \xf1\x891702', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300042D \xf1\x891612', + b'\xf1\x870CW300050D \xf1\x891908', + b'\xf1\x870CW300051G \xf1\x891909', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x872Q0959655AG\xf1\x890248\xf1\x82\x1218130411110411--04040404231811152H14', + b'\xf1\x872Q0959655AJ\xf1\x890250\xf1\x82\x1248130411110416--04040404784811152H14', + b'\xf1\x872Q0959655AS\xf1\x890411\xf1\x82\x1384830511110516041405820599841215391471', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x872Q1909144M \xf1\x896041', + b'\xf1\x872Q2909144AB\xf1\x896050', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572R \xf1\x890372', + ], + }, + CAR.SHARAN_MK2: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704L906016HE\xf1\x894635', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x877N0959655D \xf1\x890016\xf1\x82\x0801100705----10--', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x877N0907572C \xf1\x890211\xf1\x82\x0153', + ], + }, + CAR.TAOS_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906025CK\xf1\x892228', + b'\xf1\x8704E906027NJ\xf1\x891445', + b'\xf1\x8704E906027NP\xf1\x891286', + b'\xf1\x8705E906013BD\xf1\x892496', + b'\xf1\x8705E906013E \xf1\x891624', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927158EM\xf1\x893812', + b'\xf1\x8709S927158BL\xf1\x893791', + b'\xf1\x8709S927158CR\xf1\x893924', + b'\xf1\x8709S927158DN\xf1\x893946', + b'\xf1\x8709S927158FF\xf1\x893876', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1311111111333500314646021450149333613100', + b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1312111111333500314646021550159333613100', + b'\xf1\x875Q0959655CE\xf1\x890421\xf1\x82\x1311110011333300314240021350139333613100', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875QM907144D \xf1\x891063\xf1\x82\x001O06081OOM', + b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521060405A1', + b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521060605A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.TCROSS_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704C906025AK\xf1\x897053', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300050E \xf1\x891903', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x872Q0959655AJ\xf1\x890250\xf1\x82\x1212130411110411--04041104141311152H14', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x872Q1909144M \xf1\x896041', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.TIGUAN_MK2: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8703N906026D \xf1\x893680', + b'\xf1\x8704E906024AP\xf1\x891461', + b'\xf1\x8704E906027NB\xf1\x899504', + b'\xf1\x8704L906026EJ\xf1\x893661', + b'\xf1\x8704L906027G \xf1\x899893', + b'\xf1\x8705E906018BS\xf1\x890914', + b'\xf1\x875N0906259 \xf1\x890002', + b'\xf1\x875NA906259H \xf1\x890002', + b'\xf1\x875NA907115E \xf1\x890003', + b'\xf1\x875NA907115E \xf1\x890005', + b'\xf1\x875NA907115J \xf1\x890002', + b'\xf1\x875NA907115K \xf1\x890004', + b'\xf1\x8783A907115 \xf1\x890007', + b'\xf1\x8783A907115B \xf1\x890005', + b'\xf1\x8783A907115F \xf1\x890002', + b'\xf1\x8783A907115G \xf1\x890001', + b'\xf1\x8783A907115K \xf1\x890001', + b'\xf1\x8783A907115K \xf1\x890002', + b'\xf1\x8783A907115Q \xf1\x890001', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927158DT\xf1\x893698', + b'\xf1\x8709G927158FM\xf1\x893757', + b'\xf1\x8709G927158GC\xf1\x893821', + b'\xf1\x8709G927158GD\xf1\x893820', + b'\xf1\x8709G927158GM\xf1\x893936', + b'\xf1\x8709G927158GN\xf1\x893938', + b'\xf1\x8709G927158HB\xf1\x894069', + b'\xf1\x870D9300043 \xf1\x895202', + b'\xf1\x870DD300046K \xf1\x892302', + b'\xf1\x870DL300011N \xf1\x892001', + b'\xf1\x870DL300011N \xf1\x892012', + b'\xf1\x870DL300012M \xf1\x892107', + b'\xf1\x870DL300012P \xf1\x892103', + b'\xf1\x870DL300013A \xf1\x893005', + b'\xf1\x870DL300013G \xf1\x892119', + b'\xf1\x870DL300013G \xf1\x892120', + b'\xf1\x870DL300014C \xf1\x893703', + b'\xf1\x870GC300013P \xf1\x892401', + b'\xf1\x870GC300046Q \xf1\x892802', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655AG\xf1\x890336\xf1\x82\x1316143231313500314617011730179333423100', + b'\xf1\x875Q0959655AG\xf1\x890338\xf1\x82\x1316143231313500314617011730179333423100', + b'\xf1\x875Q0959655AR\xf1\x890317\xf1\x82\x1331310031333334313132573732379333313100', + b'\xf1\x875Q0959655BJ\xf1\x890336\xf1\x82\x1312110031333300314232583732379333423100', + b'\xf1\x875Q0959655BJ\xf1\x890339\xf1\x82\x1331310031333334313132013730379333423100', + b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\x1316143231313500314641011750179333423100', + b'\xf1\x875Q0959655BS\xf1\x890403\xf1\x82\x1312110031333300314240013750379333423100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1312110031333300314240583752379333423100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333334313140013750379333423100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333334313140573752379333423100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333336313140013950399333423100', + b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1316143231313500314647021750179333613100', + b'\xf1\x875Q0959655CD\xf1\x890421\xf1\x82\x13123112313333003145406F6154619333613100', + b'\xf1\x875Q0959655CG\xf1\x890421\xf1\x82\x1331310031333300314240024050409333613100', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820529A6060603', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527A6050705', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527A6070705', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A60604A1', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6000600', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6017A00', + b'\xf1\x875QF909144A \xf1\x895581\xf1\x82\x0571A60834A1', + b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571A60634A1', + b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571A62A32A1', + b'\xf1\x875QM907144D \xf1\x891063\xf1\x82\x002RA60A2ROM', + b'\xf1\x875QM907144D \xf1\x891063\xf1\x82\x002SA6092SOM', + b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A60604A1', + b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A60804A1', + b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A60604A1', + b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A60804A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572AB\xf1\x890397', + b'\xf1\x872Q0907572J \xf1\x890156', + b'\xf1\x872Q0907572M \xf1\x890233', + b'\xf1\x872Q0907572Q \xf1\x890342', + b'\xf1\x872Q0907572R \xf1\x890372', + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.TOURAN_MK2: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704L906026HM\xf1\x893017', + b'\xf1\x8705E906018CQ\xf1\x890808', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300041E \xf1\x891005', + b'\xf1\x870CW300051M \xf1\x891926', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655AS\xf1\x890318\xf1\x82\x13363500213533353141324C4732479333313100', + b'\xf1\x875Q0959655CH\xf1\x890421\xf1\x82\x1336350021353336314740025250529333613100', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820531B0062105', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A8090400', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x873Q0907572C \xf1\x890195', + ], + }, + CAR.TRANSPORTER_T61: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704L906056AG\xf1\x899970', + b'\xf1\x8704L906056AL\xf1\x899970', + b'\xf1\x8704L906057AP\xf1\x891186', + b'\xf1\x8704L906057N \xf1\x890413', + b'\xf1\x8705L906023E \xf1\x891352', + b'\xf1\x8705L906023MR\xf1\x892582', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870BT300012E \xf1\x893105', + b'\xf1\x870BT300012G \xf1\x893102', + b'\xf1\x870BT300046R \xf1\x893102', + b'\xf1\x870DV300012B \xf1\x893701', + b'\xf1\x870DV300012B \xf1\x893702', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x872Q0959655AE\xf1\x890506\xf1\x82\x1316170411110411--04041704161611152S1411', + b'\xf1\x872Q0959655AE\xf1\x890506\xf1\x82\x1316170411110411--04041704171711152S1411', + b'\xf1\x872Q0959655AF\xf1\x890506\xf1\x82\x1316171111110411--04041711121211152S1413', + b'\xf1\x872Q0959655AQ\xf1\x890511\xf1\x82\x1316170411110411--0404170426261215391421', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x877LA909144F \xf1\x897150\xf1\x82\x0532380518A2', + b'\xf1\x877LA909144F \xf1\x897150\xf1\x82\x05323A5519A2', + b'\xf1\x877LA909144G \xf1\x897160\xf1\x82\x05333A5519A2', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572R \xf1\x890372', + ], + }, + CAR.TROC_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8705E906018AT\xf1\x899640', + b'\xf1\x8705E906018CK\xf1\x890863', + b'\xf1\x8705E906018P \xf1\x896020', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300041S \xf1\x891615', + b'\xf1\x870CW300050J \xf1\x891911', + b'\xf1\x870CW300051M \xf1\x891925', + b'\xf1\x870CW300051M \xf1\x891928', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655BH\xf1\x890712\xf1\x82\x0e1111001111001105111111052900', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1311110012333300314240681152119333463100', + b'\xf1\x875Q0959655CF\xf1\x890421\xf1\x82\x1311110012333300314240021150119333613100', + b'\xf1\x875Q0959655CG\xf1\x890421\xf1\x82\x13111100123333003142404M1152119333613100', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521060403A1', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521060405A1', + b'\xf1\x875WA907144M \xf1\x891051\xf1\x82\x001T06081T7N', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572M \xf1\x890233', + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.AUDI_A3_MK3: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906023AN\xf1\x893695', + b'\xf1\x8704E906023AR\xf1\x893440', + b'\xf1\x8704E906023BL\xf1\x895190', + b'\xf1\x8704E906027CJ\xf1\x897798', + b'\xf1\x8704L997022N \xf1\x899459', + b'\xf1\x875G0906259A \xf1\x890004', + b'\xf1\x875G0906259D \xf1\x890002', + b'\xf1\x875G0906259L \xf1\x890002', + b'\xf1\x875G0906259Q \xf1\x890002', + b'\xf1\x878V0906259E \xf1\x890001', + b'\xf1\x878V0906259F \xf1\x890002', + b'\xf1\x878V0906259H \xf1\x890002', + b'\xf1\x878V0906259J \xf1\x890002', + b'\xf1\x878V0906259K \xf1\x890001', + b'\xf1\x878V0906264B \xf1\x890003', + b'\xf1\x878V0907115B \xf1\x890007', + b'\xf1\x878V0907404A \xf1\x890005', + b'\xf1\x878V0907404G \xf1\x890005', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300044T \xf1\x895245', + b'\xf1\x870CW300048 \xf1\x895201', + b'\xf1\x870D9300012 \xf1\x894912', + b'\xf1\x870D9300012 \xf1\x894931', + b'\xf1\x870D9300012K \xf1\x894513', + b'\xf1\x870D9300012L \xf1\x894521', + b'\xf1\x870D9300013B \xf1\x894902', + b'\xf1\x870D9300013B \xf1\x894931', + b'\xf1\x870D9300041N \xf1\x894512', + b'\xf1\x870D9300043T \xf1\x899699', + b'\xf1\x870DD300046 \xf1\x891604', + b'\xf1\x870DD300046A \xf1\x891602', + b'\xf1\x870DD300046F \xf1\x891602', + b'\xf1\x870DD300046G \xf1\x891601', + b'\xf1\x870DL300012E \xf1\x892012', + b'\xf1\x870DL300012H \xf1\x892112', + b'\xf1\x870GC300011 \xf1\x890403', + b'\xf1\x870GC300013M \xf1\x892402', + b'\xf1\x870GC300042J \xf1\x891402', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655AB\xf1\x890388\xf1\x82\x111111001111111206110412111321139114', + b'\xf1\x875Q0959655AM\xf1\x890315\xf1\x82\x1311111111111111311411011231129321212100', + b'\xf1\x875Q0959655AM\xf1\x890318\xf1\x82\x1311111111111112311411011531159321212100', + b'\xf1\x875Q0959655AR\xf1\x890315\xf1\x82\x1311110011131115311211012331239321212100', + b'\xf1\x875Q0959655BJ\xf1\x890339\xf1\x82\x1311110011131100311111011731179321342100', + b'\xf1\x875Q0959655J \xf1\x890825\xf1\x82\x13111112111111--171115141112221291163221', + b'\xf1\x875Q0959655J \xf1\x890825\xf1\x82\x13111112111111--241115141112221291163221', + b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13111112111111--241115141112221291163221', + b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13121111111111--341117141212231291163221', + b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13121111111211--261117141112231291163221', + b'\xf1\x875Q0959655N \xf1\x890361\xf1\x82\x111212001112110004110411111421149114', + b'\xf1\x875Q0959655N \xf1\x890361\xf1\x82\x111212001112111104110411111521159114', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144F \xf1\x895043\xf1\x82\x0561G01A13A0', + b'\xf1\x873Q0909144H \xf1\x895061\xf1\x82\x0566G0HA14A1', + b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566G0HA14A1', + b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571G01A16A1', + b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571G0HA16A1', + b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571G0JA13A1', + b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571G0JA14A1', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521G0G809A1', + b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\x0503G00303A0', + b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\x0503G00803A0', + b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\x0503G0G803A0', + b'\xf1\x875Q0909144R \xf1\x891061\xf1\x82\x0516G00804A1', + b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516G00804A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521G00807A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x875Q0907567M \xf1\x890398\xf1\x82\x0101', + b'\xf1\x875Q0907567N \xf1\x890400\xf1\x82\x0101', + b'\xf1\x875Q0907572D \xf1\x890304\xf1\x82\x0101', + b'\xf1\x875Q0907572F \xf1\x890400\xf1\x82\x0101', + b'\xf1\x875Q0907572G \xf1\x890571', + b'\xf1\x875Q0907572H \xf1\x890620', + b'\xf1\x875Q0907572P \xf1\x890682', + ], + }, + CAR.AUDI_Q2_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906027JT\xf1\x894145', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300041F \xf1\x891006', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655BD\xf1\x890336\xf1\x82\x1311111111111100311211011231129321312111', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571F60511A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572M \xf1\x890233', + ], + }, + CAR.AUDI_Q3_MK2: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8705E906018N \xf1\x899970', + b'\xf1\x8705L906022M \xf1\x890901', + b'\xf1\x8783A906259 \xf1\x890001', + b'\xf1\x8783A906259 \xf1\x890005', + b'\xf1\x8783A906259C \xf1\x890002', + b'\xf1\x8783A906259D \xf1\x890001', + b'\xf1\x8783A906259F \xf1\x890001', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x8709G927158CN\xf1\x893608', + b'\xf1\x8709G927158FL\xf1\x893758', + b'\xf1\x8709G927158GG\xf1\x893825', + b'\xf1\x8709G927158GP\xf1\x893937', + b'\xf1\x870GC300045D \xf1\x892802', + b'\xf1\x870GC300046F \xf1\x892701', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655BF\xf1\x890403\xf1\x82\x1321211111211200311121232152219321422111', + b'\xf1\x875Q0959655BQ\xf1\x890421\xf1\x82\x132121111121120031112124218A219321532111', + b'\xf1\x875Q0959655BQ\xf1\x890421\xf1\x82\x132121111121120031112124218C219321532111', + b'\xf1\x875Q0959655CC\xf1\x890421\xf1\x82\x131111111111120031111224118A119321532111', + b'\xf1\x875Q0959655CC\xf1\x890421\xf1\x82\x131111111111120031111237116A119321532111', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567G6000300', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567G6000800', + b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571G60533A1', + b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571G60733A1', + b'\xf1\x875TA907145D \xf1\x891051\xf1\x82\x001PG60A1P7N', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572R \xf1\x890372', + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.SEAT_ATECA_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906027KA\xf1\x893749', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870D9300014S \xf1\x895202', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e1212001211001305121211052900', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571N60511A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572M \xf1\x890233', + ], + }, + CAR.SEAT_LEON_MK3: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704L906021EL\xf1\x897542', + b'\xf1\x8704L906026BP\xf1\x891198', + b'\xf1\x8704L906026BP\xf1\x897608', + b'\xf1\x8704L906056CR\xf1\x892181', + b'\xf1\x8704L906056CR\xf1\x892797', + b'\xf1\x8705E906018AS\xf1\x899596', + b'\xf1\x878V0906264H \xf1\x890005', + b'\xf1\x878V0907115E \xf1\x890002', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300041D \xf1\x891004', + b'\xf1\x870CW300041G \xf1\x891003', + b'\xf1\x870CW300050J \xf1\x891908', + b'\xf1\x870D9300042M \xf1\x895016', + b'\xf1\x870GC300043A \xf1\x892304', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655AC\xf1\x890189\xf1\x82\r11110011110011021511110200', + b'\xf1\x873Q0959655AS\xf1\x890200\xf1\x82\r11110011110011021511110200', + b'\xf1\x873Q0959655AS\xf1\x890200\xf1\x82\r12110012120012021612110200', + b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e1312001313001305171311052900', + b'\xf1\x873Q0959655BH\xf1\x890712\xf1\x82\x0e1312001313001305171311052900', + b'\xf1\x873Q0959655CM\xf1\x890720\xf1\x82\x0e1312001313001305171311052900', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521N01842A1', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521N01342A1', + b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\x0511N01805A0', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521N01309A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521N05808A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x875Q0907572B \xf1\x890200\xf1\x82\x0101', + b'\xf1\x875Q0907572H \xf1\x890620', + b'\xf1\x875Q0907572K \xf1\x890402\xf1\x82\x0101', + b'\xf1\x875Q0907572P \xf1\x890682', + b'\xf1\x875Q0907572R \xf1\x890771', + ], + }, + CAR.SKODA_FABIA_MK4: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8705E906018CF\xf1\x891905', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300051M \xf1\x891936', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875QF959655AT\xf1\x890755\xf1\x82\x1311110011110011111100110200--1111120749', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x872Q1909144S \xf1\x896042', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + ], + }, + CAR.SKODA_KAMIQ_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8705C906032M \xf1\x891333', + b'\xf1\x8705E906013CK\xf1\x892540', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300020 \xf1\x891906', + b'\xf1\x870CW300020T \xf1\x892204', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x872Q0959655AM\xf1\x890351\xf1\x82\x122221042111042121040404042E2711152H14', + b'\xf1\x872Q0959655BJ\xf1\x890412\xf1\x82\x132223042111042121040404042B251215391423', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x872Q1909144AB\xf1\x896050', + b'\xf1\x872Q1909144M \xf1\x896041', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.SKODA_KAROQ_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8705E906013H \xf1\x892407', + b'\xf1\x8705E906018P \xf1\x895472', + b'\xf1\x8705E906018P \xf1\x896020', + b'\xf1\x8705L906022BS\xf1\x890913', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300020T \xf1\x892202', + b'\xf1\x870CW300041S \xf1\x891615', + b'\xf1\x870GC300014L \xf1\x892802', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e1213001211001101131112012100', + b'\xf1\x873Q0959655BH\xf1\x890712\xf1\x82\x0e1213001211001101131122012100', + b'\xf1\x873Q0959655DE\xf1\x890731\xf1\x82\x0e1213001211001101131121012J00', + b'\xf1\x875QF959655AT\xf1\x890755\xf1\x82\x1312110012120011111100010200--2521210749', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563T6090500', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T6100500', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T6100700', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572AB\xf1\x890397', + b'\xf1\x872Q0907572M \xf1\x890233', + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.SKODA_KODIAQ_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906027DD\xf1\x893123', + b'\xf1\x8704E906027LD\xf1\x893433', + b'\xf1\x8704E906027NB\xf1\x896517', + b'\xf1\x8704E906027NB\xf1\x899504', + b'\xf1\x8704L906026DE\xf1\x895418', + b'\xf1\x8704L906026EJ\xf1\x893661', + b'\xf1\x8704L906026HT\xf1\x893617', + b'\xf1\x8705E906018DJ\xf1\x890915', + b'\xf1\x8705E906018DJ\xf1\x891903', + b'\xf1\x875NA906259E \xf1\x890003', + b'\xf1\x875NA907115E \xf1\x890003', + b'\xf1\x875NA907115E \xf1\x890005', + b'\xf1\x8783A907115E \xf1\x890001', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870D9300014S \xf1\x895201', + b'\xf1\x870D9300043 \xf1\x895202', + b'\xf1\x870DL300011N \xf1\x892014', + b'\xf1\x870DL300012M \xf1\x892107', + b'\xf1\x870DL300012N \xf1\x892110', + b'\xf1\x870DL300013G \xf1\x892119', + b'\xf1\x870GC300014N \xf1\x892801', + b'\xf1\x870GC300019H \xf1\x892806', + b'\xf1\x870GC300046Q \xf1\x892802', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655AP\xf1\x890306\xf1\x82\r11110011110011421111314211', + b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e1213001211001205212111052100', + b'\xf1\x873Q0959655BJ\xf1\x890703\xf1\x82\x0e1213001211001205212111052100', + b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e1213001211001244212111442100', + b'\xf1\x873Q0959655CN\xf1\x890720\xf1\x82\x0e1213001211001205212112052100', + b'\xf1\x873Q0959655CQ\xf1\x890720\xf1\x82\x0e1213111211001205212112052111', + b'\xf1\x873Q0959655DJ\xf1\x890731\xf1\x82\x0e1513001511001205232113052J00', + b'\xf1\x875QF959655AT\xf1\x890755\xf1\x82\x1311110011110011111100010200--1121240749', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527T6050405', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527T6060405', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527T6070405', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T600G500', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T600G600', + b'\xf1\x875TA907145F \xf1\x891063\xf1\x82\x002LT61A2LOM', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572AB\xf1\x890397', + b'\xf1\x872Q0907572M \xf1\x890233', + b'\xf1\x872Q0907572Q \xf1\x890342', + b'\xf1\x872Q0907572R \xf1\x890372', + b'\xf1\x872Q0907572T \xf1\x890383', + ], + }, + CAR.SKODA_OCTAVIA_MK3: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704C906025L \xf1\x896198', + b'\xf1\x8704E906016ER\xf1\x895823', + b'\xf1\x8704E906027HD\xf1\x893742', + b'\xf1\x8704E906027MH\xf1\x894786', + b'\xf1\x8704L906021DT\xf1\x898127', + b'\xf1\x8704L906026BP\xf1\x897608', + b'\xf1\x8704L906026BS\xf1\x891541', + b'\xf1\x875G0906259C \xf1\x890002', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300041L \xf1\x891601', + b'\xf1\x870CW300041N \xf1\x891605', + b'\xf1\x870CW300043B \xf1\x891601', + b'\xf1\x870CW300043P \xf1\x891605', + b'\xf1\x870D9300041C \xf1\x894936', + b'\xf1\x870D9300041H \xf1\x895220', + b'\xf1\x870D9300041J \xf1\x894902', + b'\xf1\x870D9300041P \xf1\x894507', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x873Q0959655AC\xf1\x890200\xf1\x82\r11120011100010022212110200', + b'\xf1\x873Q0959655AP\xf1\x890305\xf1\x82\r11110011110011213331312131', + b'\xf1\x873Q0959655AQ\xf1\x890200\xf1\x82\r11120011100010312212113100', + b'\xf1\x873Q0959655AS\xf1\x890200\xf1\x82\r11120011100010022212110200', + b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e3221003221002105755331052100', + b'\xf1\x873Q0959655CM\xf1\x890720\xf1\x82\x0e3221003221002105755331052100', + b'\xf1\x873Q0959655CN\xf1\x890720\xf1\x82\x0e3221003221002105755331052100', + b'\xf1\x875QD959655 \xf1\x890388\xf1\x82\x111101000011110006110411111111119111', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A01513A1', + b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521T00403A1', + b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521T00403A1', + b'\xf1\x875Q0909144R \xf1\x891061\xf1\x82\x0516A00604A1', + b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521T00601A1', + b'\xf1\x875QD909144E \xf1\x891081\xf1\x82\x0521T00503A1', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x875Q0907572D \xf1\x890304\xf1\x82\x0101', + b'\xf1\x875Q0907572F \xf1\x890400\xf1\x82\x0101', + b'\xf1\x875Q0907572J \xf1\x890654', + b'\xf1\x875Q0907572K \xf1\x890402\xf1\x82\x0101', + b'\xf1\x875Q0907572P \xf1\x890682', + b'\xf1\x875Q0907572R \xf1\x890771', + ], + }, + CAR.SKODA_SCALA_MK1: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704C906025AK\xf1\x897053', + b'\xf1\x8705C906032M \xf1\x892365', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300020 \xf1\x891907', + b'\xf1\x870CW300050 \xf1\x891709', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x872Q0959655AJ\xf1\x890250\xf1\x82\x1211110411110411--04040404131111112H14', + b'\xf1\x872Q0959655AM\xf1\x890351\xf1\x82\x12111104111104112104040404111111112H14', + b'\xf1\x872Q0959655AS\xf1\x890411\xf1\x82\x1311150411110411210404040417151215391413', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x872Q1909144AB\xf1\x896050', + b'\xf1\x872Q1909144M \xf1\x896041', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907572AA\xf1\x890396', + b'\xf1\x872Q0907572R \xf1\x890372', + ], + }, + CAR.SKODA_SUPERB_MK3: { + (Ecu.engine, 0x7e0, None): [ + b'\xf1\x8704E906027BS\xf1\x892887', + b'\xf1\x8704E906027BT\xf1\x899042', + b'\xf1\x8704L906026ET\xf1\x891343', + b'\xf1\x8704L906026ET\xf1\x891990', + b'\xf1\x8704L906026FP\xf1\x891196', + b'\xf1\x8704L906026KA\xf1\x896014', + b'\xf1\x8704L906026KB\xf1\x894071', + b'\xf1\x8704L906026KD\xf1\x894798', + b'\xf1\x8704L906026MT\xf1\x893076', + b'\xf1\x8705L906022BK\xf1\x899971', + b'\xf1\x873G0906259 \xf1\x890004', + b'\xf1\x873G0906259B \xf1\x890002', + b'\xf1\x873G0906259L \xf1\x890003', + b'\xf1\x873G0906264A \xf1\x890002', + ], + (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x870CW300042H \xf1\x891601', + b'\xf1\x870CW300043B \xf1\x891603', + b'\xf1\x870CW300049Q \xf1\x890906', + b'\xf1\x870D9300011T \xf1\x894801', + b'\xf1\x870D9300012 \xf1\x894940', + b'\xf1\x870D9300013A \xf1\x894905', + b'\xf1\x870D9300014K \xf1\x895006', + b'\xf1\x870D9300041H \xf1\x894905', + b'\xf1\x870D9300042M \xf1\x895013', + b'\xf1\x870D9300043F \xf1\x895202', + b'\xf1\x870GC300013K \xf1\x892403', + b'\xf1\x870GC300014M \xf1\x892801', + b'\xf1\x870GC300019G \xf1\x892803', + b'\xf1\x870GC300043 \xf1\x892301', + b'\xf1\x870GC300046D \xf1\x892402', + ], + (Ecu.srs, 0x715, None): [ + b'\xf1\x875Q0959655AE\xf1\x890130\xf1\x82\x12111200111121001121110012211292221111', + b'\xf1\x875Q0959655AE\xf1\x890130\xf1\x82\x12111200111121001121118112231292221111', + b'\xf1\x875Q0959655AK\xf1\x890130\xf1\x82\x12111200111121001121110012211292221111', + b'\xf1\x875Q0959655AS\xf1\x890317\xf1\x82\x1331310031313100313131823133319331313100', + b'\xf1\x875Q0959655AT\xf1\x890317\xf1\x82\x1331310031313100313131013131319331313100', + b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\x1331310031313100313131013141319331413100', + b'\xf1\x875Q0959655BK\xf1\x890336\xf1\x82\x1331310031313100313131013141319331413100', + b'\xf1\x875Q0959655BS\xf1\x890403\xf1\x82\x1333310031313100313152015351539331423100', + b'\xf1\x875Q0959655CA\xf1\x890403\xf1\x82\x1331310031313100313151013141319331423100', + b'\xf1\x875Q0959655CA\xf1\x890403\xf1\x82\x1331310031313100313151823143319331423100', + b'\xf1\x875Q0959655CH\xf1\x890421\xf1\x82\x1333310031313100313152025350539331463100', + b'\xf1\x875Q0959655CH\xf1\x890421\xf1\x82\x1333310031313100313152855372539331463100', + ], + (Ecu.eps, 0x712, None): [ + b'\xf1\x875Q0909143K \xf1\x892033\xf1\x820514UZ070203', + b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522UZ050303', + b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522UZ070303', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820526UZ060505', + b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820526UZ070505', + b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563UZ060600', + b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563UZ060700', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567UZ070500', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567UZ070600', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567UZ070700', + ], + (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x873Q0907572B \xf1\x890192', + b'\xf1\x873Q0907572B \xf1\x890194', + b'\xf1\x873Q0907572C \xf1\x890195', + b'\xf1\x875Q0907572R \xf1\x890771', + b'\xf1\x875Q0907572S \xf1\x890780', + ], + }, +} diff --git a/selfdrive/car/volkswagen/interface.py b/selfdrive/car/volkswagen/interface.py index 5787a678c2..f46c0ce5e2 100644 --- a/selfdrive/car/volkswagen/interface.py +++ b/selfdrive/car/volkswagen/interface.py @@ -1,9 +1,11 @@ from cereal import car from panda import Panda from openpilot.common.conversions import Conversions as CV +from openpilot.common.params import Params from openpilot.selfdrive.car import get_safety_config, create_mads_event from openpilot.selfdrive.car.interfaces import CarInterfaceBase -from openpilot.selfdrive.car.volkswagen.values import CAR, PQ_CARS, CANBUS, NetworkLocation, TransmissionType, GearShifter, BUTTON_STATES +from openpilot.selfdrive.car.volkswagen.values import CAR, PQ_CARS, CANBUS, NetworkLocation, TransmissionType, GearShifter, VolkswagenFlags, \ + BUTTON_STATES, VolkswagenFlagsSP ButtonType = car.CarState.ButtonEvent.Type EventName = car.CarEvent.EventName @@ -69,6 +71,9 @@ class CarInterface(CarInterfaceBase): else: ret.networkLocation = NetworkLocation.fwdCamera + if 0x126 in fingerprint[2]: # HCA_01 + ret.flags |= VolkswagenFlags.STOCK_HCA_PRESENT.value + # Global lateral tuning defaults, can be overridden per-vehicle ret.steerActuatorDelay = 0.1 @@ -90,14 +95,19 @@ class CarInterface(CarInterfaceBase): if ret.transmissionType == TransmissionType.manual: ret.minEnableSpeed = 4.5 + if Params().get_bool("VwCCOnly"): + if car_fw is not None and not any(fw.ecu == "fwdRadar" for fw in car_fw): + ret.spFlags |= VolkswagenFlagsSP.SP_CC_ONLY_NO_RADAR.value + else: + ret.spFlags |= VolkswagenFlagsSP.SP_CC_ONLY.value + ret.openpilotLongitudinalControl = False + ret.pcmCruise = not ret.openpilotLongitudinalControl ret.customStockLongAvailable = True ret.stoppingControl = True - ret.startingState = True - ret.startAccel = 1.0 ret.stopAccel = -0.55 - ret.vEgoStarting = 1.0 - ret.vEgoStopping = 1.0 + ret.vEgoStarting = 0.1 + ret.vEgoStopping = 0.5 ret.longitudinalTuning.kpV = [0.1] ret.longitudinalTuning.kiV = [0.0] @@ -256,6 +266,7 @@ class CarInterface(CarInterfaceBase): ret, self.CS = self.toggle_gac(ret, self.CS, bool(self.CS.gap_dist_button), 1, 3, 3, "-") else: self.CS.madsEnabled = False + self.CS.madsEnabled = self.get_sp_started_mads(ret, self.CS) if not self.CP.pcmCruise or (self.CP.pcmCruise and self.CP.minEnableSpeed > 0) or not self.CP.pcmCruiseSpeed: if any(b.type == ButtonType.cancel for b in buttonEvents): diff --git a/selfdrive/car/volkswagen/mqbcan.py b/selfdrive/car/volkswagen/mqbcan.py index f633aae349..35542f9f6b 100644 --- a/selfdrive/car/volkswagen/mqbcan.py +++ b/selfdrive/car/volkswagen/mqbcan.py @@ -10,6 +10,24 @@ def create_steering_control(packer, bus, apply_steer, lkas_enabled): return packer.make_can_msg("HCA_01", bus, values) +def create_eps_update(packer, bus, eps_stock_values, ea_simulated_torque): + values = {s: eps_stock_values[s] for s in [ + "COUNTER", # Sync counter value to EPS output + "EPS_Lenkungstyp", # EPS rack type + "EPS_Berechneter_LW", # Absolute raw steering angle + "EPS_VZ_BLW", # Raw steering angle sign + "EPS_HCA_Status", # EPS HCA control status + ]} + + values.update({ + # Absolute driver torque input and sign, with EA inactivity mitigation + "EPS_Lenkmoment": abs(ea_simulated_torque), + "EPS_VZ_Lenkmoment": 1 if ea_simulated_torque < 0 else 0, + }) + + return packer.make_can_msg("LH_EPS_03", bus, values) + + def create_lka_hud_control(packer, bus, ldw_stock_values, enabled, lat_active, steering_pressed, hud_alert, hud_control): values = {} if len(ldw_stock_values): @@ -31,7 +49,7 @@ def create_lka_hud_control(packer, bus, ldw_stock_values, enabled, lat_active, s return packer.make_can_msg("LDW_02", bus, values) -def create_acc_buttons_control(packer, bus, gra_stock_values, buttons=0, cancel=False, resume=False): +def create_acc_buttons_control(packer, bus, gra_stock_values, frame=0, buttons=0, cancel=False, resume=False, custom_stock_long=False): values = {s: gra_stock_values[s] for s in [ "GRA_Hauptschalter", # ACC button, on/off "GRA_Typ_Hauptschalter", # ACC main button type @@ -46,7 +64,7 @@ def create_acc_buttons_control(packer, bus, gra_stock_values, buttons=0, cancel= set_cruise = 1 if buttons == 4 else 0 values.update({ - "COUNTER": (gra_stock_values["COUNTER"] + 1) % 16, + "COUNTER": (frame + 1) % 0x10 if custom_stock_long else (gra_stock_values["COUNTER"] + 1) % 16, "GRA_Abbrechen": cancel, "GRA_Tip_Wiederaufnahme": resume or resume_cruise, "GRA_Tip_Setzen": set_cruise, @@ -102,7 +120,7 @@ def create_acc_accel_control(packer, bus, acc_type, acc_enabled, accel, acc_cont acc_hold_type = 0 acc_07_values = { - "ACC_Anhalteweg": 0.75 if stopping else 20.46, # Distance to stop (stopping coordinator handles terminal roll-out) + "ACC_Anhalteweg": 0.3 if stopping else 20.46, # Distance to stop (stopping coordinator handles terminal roll-out) "ACC_Freilauf_Info": 2 if acc_enabled else 0, "ACC_Folgebeschl": 3.02, # Not using secondary controller accel unless and until we understand its impact "ACC_Sollbeschleunigung_02": accel if acc_enabled else 3.01, diff --git a/selfdrive/car/volkswagen/pqcan.py b/selfdrive/car/volkswagen/pqcan.py index f1f4d1dc20..b5be66e957 100644 --- a/selfdrive/car/volkswagen/pqcan.py +++ b/selfdrive/car/volkswagen/pqcan.py @@ -31,7 +31,7 @@ def create_lka_hud_control(packer, bus, ldw_stock_values, enabled, lat_active, s return packer.make_can_msg("LDW_Status", bus, values) -def create_acc_buttons_control(packer, bus, gra_stock_values, buttons=0, cancel=False, resume=False): +def create_acc_buttons_control(packer, bus, gra_stock_values, frame=0, buttons=0, cancel=False, resume=False, custom_stock_long=False): values = {s: gra_stock_values[s] for s in [ "GRA_Hauptschalt", # ACC button, on/off "GRA_Typ_Hauptschalt", # ACC button, momentary vs latching @@ -45,7 +45,7 @@ def create_acc_buttons_control(packer, bus, gra_stock_values, buttons=0, cancel= set_cruise = 1 if buttons == 4 else 0 values.update({ - "COUNTER": (gra_stock_values["COUNTER"] + 1) % 16, + "COUNTER": (frame + 1) % 0x10 if custom_stock_long else (gra_stock_values["COUNTER"] + 1) % 16, "GRA_Abbrechen": cancel, "GRA_Recall": resume or resume_cruise, "GRA_Neu_Setzen": set_cruise, diff --git a/selfdrive/car/volkswagen/values.py b/selfdrive/car/volkswagen/values.py index 891e92c15f..7871471671 100644 --- a/selfdrive/car/volkswagen/values.py +++ b/selfdrive/car/volkswagen/values.py @@ -1,6 +1,6 @@ from collections import defaultdict, namedtuple from dataclasses import dataclass, field -from enum import Enum +from enum import Enum, IntFlag, StrEnum from typing import Dict, List, Union from cereal import car @@ -46,6 +46,7 @@ class CarControllerParams: self.STEER_DRIVER_ALLOWANCE = 80 # Driver intervention threshold 0.8 Nm self.STEER_DELTA_UP = 6 # Max HCA reached in 1.00s (STEER_MAX / (50Hz * 1.00)) self.STEER_DELTA_DOWN = 10 # Min HCA reached in 0.60s (STEER_MAX / (50Hz * 0.60)) + self.BTN_STEP = 2 if CP.transmissionType == TransmissionType.automatic: self.shifter_values = can_define.dv["Getriebe_1"]["Waehlhebelposition__Getriebe_1_"] @@ -75,6 +76,7 @@ class CarControllerParams: self.STEER_DRIVER_ALLOWANCE = 80 # Driver intervention threshold 0.8 Nm self.STEER_DELTA_UP = 4 # Max HCA reached in 1.50s (STEER_MAX / (50Hz * 1.50)) self.STEER_DELTA_DOWN = 10 # Min HCA reached in 0.60s (STEER_MAX / (50Hz * 0.60)) + self.BTN_STEP = 3 if CP.transmissionType == TransmissionType.automatic: self.shifter_values = can_define.dv["Getriebe_11"]["GE_Fahrstufe"] @@ -109,6 +111,15 @@ class CANBUS: cam = 2 +class VolkswagenFlags(IntFlag): + STOCK_HCA_PRESENT = 1 + + +class VolkswagenFlagsSP(IntFlag): + SP_CC_ONLY = 1 + SP_CC_ONLY_NO_RADAR = 2 + + BUTTON_STATES = { "accelCruise": False, "decelCruise": False, @@ -124,7 +135,7 @@ BUTTON_STATES = { # FW_VERSIONS for that existing CAR. # Exception: SEAT Leon and SEAT Ateca share a chassis code -class CAR: +class CAR(StrEnum): ARTEON_MK1 = "VOLKSWAGEN ARTEON 1ST GEN" # Chassis AN, Mk1 VW Arteon and variants ATLAS_MK1 = "VOLKSWAGEN ATLAS 1ST GEN" # Chassis CA, Mk1 VW Atlas and Atlas Cross Sport CRAFTER_MK2 = "VOLKSWAGEN CRAFTER 2ND GEN" # Chassis SY/SZ, Mk2 VW Crafter, VW Grand California, MAN TGE @@ -171,7 +182,7 @@ class Footnote(Enum): Column.MODEL) SKODA_HEATED_WINDSHIELD = CarFootnote( "Some Škoda vehicles are equipped with heated windshields, which are known " + - "to block GPS signal needed for some comma three functionality.", + "to block GPS signal needed for some comma 3X functionality.", Column.MODEL) VW_EXP_LONG = CarFootnote( "Only available for vehicles using a gateway (J533) harness. At this time, vehicles using a camera harness " + @@ -194,7 +205,7 @@ class VWCarInfo(CarInfo): self.footnotes.append(Footnote.SKODA_HEATED_WINDSHIELD) if CP.carFingerprint in (CAR.CRAFTER_MK2, CAR.TRANSPORTER_T61): - self.car_parts = CarParts([Device.three_angled_mount, CarHarness.j533]) + self.car_parts = CarParts([Device.threex_angled_mount, CarHarness.j533]) CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = { @@ -206,7 +217,7 @@ CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = { ], CAR.ATLAS_MK1: [ VWCarInfo("Volkswagen Atlas 2018-23"), - VWCarInfo("Volkswagen Atlas Cross Sport 2021-22"), + VWCarInfo("Volkswagen Atlas Cross Sport 2020-22"), VWCarInfo("Volkswagen Teramont 2018-22"), VWCarInfo("Volkswagen Teramont Cross Sport 2021-22"), VWCarInfo("Volkswagen Teramont X 2021-22"), @@ -249,15 +260,15 @@ CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = { CAR.TAOS_MK1: VWCarInfo("Volkswagen Taos 2022-23"), CAR.TCROSS_MK1: VWCarInfo("Volkswagen T-Cross 2021", footnotes=[Footnote.VW_MQB_A0]), CAR.TIGUAN_MK2: [ - VWCarInfo("Volkswagen Tiguan 2018-23"), + VWCarInfo("Volkswagen Tiguan 2018-24"), VWCarInfo("Volkswagen Tiguan eHybrid 2021-23"), ], CAR.TOURAN_MK2: VWCarInfo("Volkswagen Touran 2016-23"), CAR.TRANSPORTER_T61: [ VWCarInfo("Volkswagen Caravelle 2020"), - VWCarInfo("Volkswagen California 2021"), + VWCarInfo("Volkswagen California 2021-23"), ], - CAR.TROC_MK1: VWCarInfo("Volkswagen T-Roc 2021", footnotes=[Footnote.VW_MQB_A0]), + CAR.TROC_MK1: VWCarInfo("Volkswagen T-Roc 2018-22", footnotes=[Footnote.VW_MQB_A0]), CAR.AUDI_A3_MK3: [ VWCarInfo("Audi A3 2014-19"), VWCarInfo("Audi A3 Sportback e-tron 2017-18"), @@ -269,7 +280,7 @@ CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = { CAR.SEAT_ATECA_MK1: VWCarInfo("SEAT Ateca 2018"), CAR.SEAT_LEON_MK3: VWCarInfo("SEAT Leon 2014-20"), CAR.SKODA_FABIA_MK4: VWCarInfo("Škoda Fabia 2022-23", footnotes=[Footnote.VW_MQB_A0]), - CAR.SKODA_KAMIQ_MK1: VWCarInfo("Škoda Kamiq 2021", footnotes=[Footnote.VW_MQB_A0, Footnote.KAMIQ]), + CAR.SKODA_KAMIQ_MK1: VWCarInfo("Škoda Kamiq 2021-23", footnotes=[Footnote.VW_MQB_A0, Footnote.KAMIQ]), CAR.SKODA_KAROQ_MK1: VWCarInfo("Škoda Karoq 2019-23"), CAR.SKODA_KODIAQ_MK1: VWCarInfo("Škoda Kodiaq 2017-23"), CAR.SKODA_SCALA_MK1: VWCarInfo("Škoda Scala 2020-23", footnotes=[Footnote.VW_MQB_A0]), @@ -313,1081 +324,3 @@ FW_QUERY_CONFIG = FwQueryConfig( ), ], ) - -FW_VERSIONS = { - CAR.ARTEON_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x873G0906259AH\xf1\x890001', - b'\xf1\x873G0906259F \xf1\x890004', - b'\xf1\x873G0906259G \xf1\x890004', - b'\xf1\x873G0906259G \xf1\x890005', - b'\xf1\x873G0906259M \xf1\x890003', - b'\xf1\x873G0906259N \xf1\x890004', - b'\xf1\x873G0906259P \xf1\x890001', - b'\xf1\x875NA907115H \xf1\x890002', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927158L \xf1\x893611', - b'\xf1\x870DL300014C \xf1\x893704', - b'\xf1\x870GC300011L \xf1\x891401', - b'\xf1\x870GC300014M \xf1\x892802', - b'\xf1\x870GC300019G \xf1\x892804', - b'\xf1\x870GC300040P \xf1\x891401', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e1616001613121157161111572900', - b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e1616001613121177161113772900', - b'\xf1\x873Q0959655CK\xf1\x890711\xf1\x82\x0e1712141712141105121122052900', - b'\xf1\x873Q0959655DA\xf1\x890720\xf1\x82\x0e1712141712141105121122052900', - b'\xf1\x873Q0959655DL\xf1\x890732\xf1\x82\x0e1812141812171105141123052J00', - b'\xf1\x875QF959655AP\xf1\x890755\xf1\x82\x1311110011111311111100110200--1611125F49', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571B41815A1', - b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571B00817A1', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567B0020800', - b'\xf1\x875WA907145M \xf1\x891051\xf1\x82\x002MB4092M7N', - b'\xf1\x875WA907145M \xf1\x891051\xf1\x82\x002NB4202N7N', - b'\xf1\x875WA907145Q \xf1\x891063\xf1\x82\x002KB4092KOM', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572T \xf1\x890383', - b'\xf1\x875Q0907572J \xf1\x890654', - b'\xf1\x875Q0907572R \xf1\x890771', - ], - }, - CAR.ATLAS_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8703H906026AA\xf1\x899970', - b'\xf1\x8703H906026AJ\xf1\x890638', - b'\xf1\x8703H906026AJ\xf1\x891017', - b'\xf1\x8703H906026AT\xf1\x891922', - b'\xf1\x8703H906026BC\xf1\x892664', - b'\xf1\x8703H906026F \xf1\x896696', - b'\xf1\x8703H906026F \xf1\x899970', - b'\xf1\x8703H906026J \xf1\x896026', - b'\xf1\x8703H906026J \xf1\x899971', - b'\xf1\x8703H906026S \xf1\x896693', - b'\xf1\x8703H906026S \xf1\x899970', - b'\xf1\x873CN906259 \xf1\x890005', - b'\xf1\x873CN906259F \xf1\x890002', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927158A \xf1\x893387', - b'\xf1\x8709G927158DR\xf1\x893536', - b'\xf1\x8709G927158DR\xf1\x893742', - b'\xf1\x8709G927158EN\xf1\x893691', - b'\xf1\x8709G927158F \xf1\x893489', - b'\xf1\x8709G927158FT\xf1\x893835', - b'\xf1\x8709G927158GL\xf1\x893939', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655BC\xf1\x890503\xf1\x82\0161914151912001103111122031200', - b'\xf1\x873Q0959655BN\xf1\x890713\xf1\x82\0162214152212001105141122052900', - b'\xf1\x873Q0959655DB\xf1\x890720\xf1\x82\0162214152212001105141122052900', - b'\xf1\x873Q0959655DM\xf1\x890732\xf1\x82\x0e1114151112001105161122052J00', - b'\xf1\x873Q0959655DM\xf1\x890732\xf1\x82\x0e1115151112001105171122052J00', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873QF909144B \xf1\x891582\xf1\x82\00571B60924A1', - b'\xf1\x873QF909144B \xf1\x891582\xf1\x82\x0571B6G920A1', - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820528B6080105', - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820528B6090105', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572R \xf1\x890372', - b'\xf1\x872Q0907572T \xf1\x890383', - b'\xf1\x875Q0907572H \xf1\x890620', - b'\xf1\x875Q0907572J \xf1\x890654', - b'\xf1\x875Q0907572P \xf1\x890682', - ], - }, - CAR.CRAFTER_MK2: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704L906056EK\xf1\x896391', - b'\xf1\x8705L906023BC\xf1\x892688', - ], - # Only current upstreamed vehicle has a manual transmission - #(Ecu.transmission, 0x7e1, None): [ - #], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655BG\xf1\x890703\xf1\x82\x0e16120016130012051G1313052900', - b'\xf1\x875QF959655AS\xf1\x890755\xf1\x82\x1315140015150011111100050200--1311120749', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x872N0909143E \xf1\x897021\xf1\x82\x05163AZ306A2', - b'\xf1\x872N0909144K \xf1\x897045\xf1\x82\x05233AZ810A2', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572M \xf1\x890233', - ], - }, - CAR.GOLF_MK7: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906016A \xf1\x897697', - b'\xf1\x8704E906016N \xf1\x899105', - b'\xf1\x8704E906016AD\xf1\x895758', - b'\xf1\x8704E906016CE\xf1\x899096', - b'\xf1\x8704E906016CH\xf1\x899226', - b'\xf1\x8704E906023AG\xf1\x891726', - b'\xf1\x8704E906023BN\xf1\x894518', - b'\xf1\x8704E906024K \xf1\x896811', - b'\xf1\x8704E906027GR\xf1\x892394', - b'\xf1\x8704E906027HD\xf1\x892603', - b'\xf1\x8704E906027HD\xf1\x893742', - b'\xf1\x8704E906027MA\xf1\x894958', - b'\xf1\x8704L906021DT\xf1\x895520', - b'\xf1\x8704L906021DT\xf1\x898127', - b'\xf1\x8704L906021N \xf1\x895518', - b'\xf1\x8704L906021N \xf1\x898138', - b'\xf1\x8704L906026BN\xf1\x891197', - b'\xf1\x8704L906026BP\xf1\x897608', - b'\xf1\x8704L906026NF\xf1\x899528', - b'\xf1\x8704L906056CL\xf1\x893823', - b'\xf1\x8704L906056CR\xf1\x895813', - b'\xf1\x8704L906056HE\xf1\x893758', - b'\xf1\x8704L906056HN\xf1\x896590', - b'\xf1\x8704L906056HT\xf1\x896591', - b'\xf1\x870EA906016A \xf1\x898343', - b'\xf1\x870EA906016E \xf1\x894219', - b'\xf1\x870EA906016F \xf1\x894238', - b'\xf1\x870EA906016F \xf1\x895002', - b'\xf1\x870EA906016Q \xf1\x895993', - b'\xf1\x870EA906016S \xf1\x897207', - b'\xf1\x875G0906259 \xf1\x890007', - b'\xf1\x875G0906259D \xf1\x890002', - b'\xf1\x875G0906259J \xf1\x890002', - b'\xf1\x875G0906259L \xf1\x890002', - b'\xf1\x875G0906259N \xf1\x890003', - b'\xf1\x875G0906259Q \xf1\x890002', - b'\xf1\x875G0906259Q \xf1\x892313', - b'\xf1\x875G0906259T \xf1\x890003', - b'\xf1\x878V0906259H \xf1\x890002', - b'\xf1\x878V0906259J \xf1\x890003', - b'\xf1\x878V0906259K \xf1\x890001', - b'\xf1\x878V0906259K \xf1\x890003', - b'\xf1\x878V0906259P \xf1\x890001', - b'\xf1\x878V0906259Q \xf1\x890002', - b'\xf1\x878V0906259R \xf1\x890002', - b'\xf1\x878V0906264F \xf1\x890003', - b'\xf1\x878V0906264L \xf1\x890002', - b'\xf1\x878V0906264M \xf1\x890001', - b'\xf1\x878V09C0BB01 \xf1\x890001', - b'\xf1\x8704E906024K \xf1\x899970', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927749AP\xf1\x892943', - b'\xf1\x8709S927158A \xf1\x893585', - b'\xf1\x870CW300040H \xf1\x890606', - b'\xf1\x870CW300041D \xf1\x891004', - b'\xf1\x870CW300041H \xf1\x891010', - b'\xf1\x870CW300042F \xf1\x891604', - b'\xf1\x870CW300043B \xf1\x891601', - b'\xf1\x870CW300043E \xf1\x891603', - b'\xf1\x870CW300044S \xf1\x894530', - b'\xf1\x870CW300044T \xf1\x895245', - b'\xf1\x870CW300045 \xf1\x894531', - b'\xf1\x870CW300047D \xf1\x895261', - b'\xf1\x870CW300047E \xf1\x895261', - b'\xf1\x870CW300048J \xf1\x890611', - b'\xf1\x870CW300049H \xf1\x890905', - b'\xf1\x870D9300012 \xf1\x894904', - b'\xf1\x870D9300012 \xf1\x894913', - b'\xf1\x870D9300012 \xf1\x894937', - b'\xf1\x870D9300012 \xf1\x895045', - b'\xf1\x870D9300012 \xf1\x895046', - b'\xf1\x870D9300014M \xf1\x895004', - b'\xf1\x870D9300014Q \xf1\x895006', - b'\xf1\x870D9300020J \xf1\x894902', - b'\xf1\x870D9300020Q \xf1\x895201', - b'\xf1\x870D9300020S \xf1\x895201', - b'\xf1\x870D9300040A \xf1\x893613', - b'\xf1\x870D9300040S \xf1\x894311', - b'\xf1\x870D9300041H \xf1\x895220', - b'\xf1\x870D9300041P \xf1\x894507', - b'\xf1\x870DD300045K \xf1\x891120', - b'\xf1\x870DD300046F \xf1\x891601', - b'\xf1\x870GC300012A \xf1\x891401', - b'\xf1\x870GC300012A \xf1\x891403', - b'\xf1\x870GC300014B \xf1\x892401', - b'\xf1\x870GC300014B \xf1\x892403', - b'\xf1\x870GC300014B \xf1\x892405', - b'\xf1\x870GC300020G \xf1\x892401', - b'\xf1\x870GC300020G \xf1\x892403', - b'\xf1\x870GC300020G \xf1\x892404', - b'\xf1\x870GC300020N \xf1\x892804', - b'\xf1\x870GC300043T \xf1\x899999', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655AA\xf1\x890386\xf1\x82\x111413001113120043114317121C111C9113', - b'\xf1\x875Q0959655AA\xf1\x890386\xf1\x82\x111413001113120053114317121C111C9113', - b'\xf1\x875Q0959655AA\xf1\x890388\xf1\x82\x111413001113120043114317121C111C9113', - b'\xf1\x875Q0959655AA\xf1\x890388\xf1\x82\x111413001113120043114417121411149113', - b'\xf1\x875Q0959655AA\xf1\x890388\xf1\x82\x111413001113120053114317121C111C9113', - b'\xf1\x875Q0959655AR\xf1\x890317\xf1\x82\x13141500111233003142114A2131219333313100', - b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\x1314160011123300314211012230229333423100', - b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\x1314160011123300314211012230229333463100', - b'\xf1\x875Q0959655BS\xf1\x890403\xf1\x82\x1314160011123300314240012250229333463100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142404A2251229333463100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142404A2252229333463100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142405A2251229333463100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142405A2252229333463100', - b'\xf1\x875Q0959655C \xf1\x890361\xf1\x82\x111413001112120004110415121610169112', - b'\xf1\x875Q0959655D \xf1\x890388\xf1\x82\x111413001113120006110417121A101A9113', - b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13271112111312--071104171825102591131211', - b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13271212111312--071104171838103891131211', - b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13341512112212--071104172328102891131211', - b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13272512111312--07110417182C102C91131211', - b'\xf1\x875Q0959655M \xf1\x890361\xf1\x82\x111413001112120041114115121611169112', - b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1315120011211200621143171717111791132111', - b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1324230011211200061104171724102491132111', - b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1324230011211200621143171724112491132111', - b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1315120011211200061104171717101791132111', - b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\x1324230011211200631143171724122491132111', - b'\xf1\x875Q0959655T \xf1\x890825\xf1\x82\x13271200111312--071104171837103791132111', - b'\xf1\x875Q0959655T \xf1\x890830\xf1\x82\x13271100111312--071104171826102691131211', - b'\xf1\x875QD959655 \xf1\x890388\xf1\x82\x111413001113120006110417121D101D9112', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144F \xf1\x895043\xf1\x82\x0561A01612A0', - b'\xf1\x873Q0909144H \xf1\x895061\xf1\x82\x0566A0J612A1', - b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A00514A1', - b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A01613A1', - b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A0J712A1', - b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571A0J714A1', - b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571A0JA15A1', - b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A01A18A1', - b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A02A16A1', - b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A0JA16A1', - b'\xf1\x873QM909144 \xf1\x895072\xf1\x82\x0571A01714A1', - b'\xf1\x875Q0909143K \xf1\x892033\xf1\x820519A9040203', - b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521A00441A1', - b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521A00608A1', - b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521A00641A1', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A00442A1', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A00642A1', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A07B05A1', - b'\xf1\x875Q0909144L \xf1\x891021\xf1\x82\x0521A00602A0', - b'\xf1\x875Q0909144L \xf1\x891021\xf1\x82\x0522A00402A0', - b'\xf1\x875Q0909144L \xf1\x891021\xf1\x82\x0521A00502A0', - b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\x0511A00403A0', - b'\xf1\x875Q0909144R \xf1\x891061\xf1\x82\x0516A00604A1', - b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A00404A1', - b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A00504A1', - b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A00604A1', - b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516A07A02A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A00407A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A00507A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A07B04A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A20B03A1', - b'\xf1\x875QD909144B \xf1\x891072\xf1\x82\x0521A00507A1', - b'\xf1\x875QM909144A \xf1\x891072\xf1\x82\x0521A20B03A1', - b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A00442A1', - b'\xf1\x875QN909144A \xf1\x895081\xf1\x82\x0571A01A16A1', - b'\xf1\x875QN909144A \xf1\x895081\xf1\x82\x0571A01A18A1', - b'\xf1\x875QN909144A \xf1\x895081\xf1\x82\x0571A01A17A1', - b'\xf1\x875QN909144B \xf1\x895082\xf1\x82\x0571A01A18A1', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A2000400', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x875Q0907567G \xf1\x890390\xf1\x82\x0101', - b'\xf1\x875Q0907567J \xf1\x890396\xf1\x82\x0101', - b'\xf1\x875Q0907567L \xf1\x890098\xf1\x82\x0101', - b'\xf1\x875Q0907572A \xf1\x890141\xf1\x82\x0101', - b'\xf1\x875Q0907572B \xf1\x890200\xf1\x82\x0101', - b'\xf1\x875Q0907572C \xf1\x890210\xf1\x82\x0101', - b'\xf1\x875Q0907572D \xf1\x890304\xf1\x82\x0101', - b'\xf1\x875Q0907572E \xf1\x89X310\xf1\x82\x0101', - b'\xf1\x875Q0907572F \xf1\x890400\xf1\x82\x0101', - b'\xf1\x875Q0907572G \xf1\x890571', - b'\xf1\x875Q0907572H \xf1\x890620', - b'\xf1\x875Q0907572J \xf1\x890653', - b'\xf1\x875Q0907572J \xf1\x890654', - b'\xf1\x875Q0907572P \xf1\x890682', - b'\xf1\x875Q0907572R \xf1\x890771', - b'\xf1\x875Q0907572S \xf1\x890780', - ], - }, - CAR.JETTA_MK7: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906024AK\xf1\x899937', - b'\xf1\x8704E906024AS\xf1\x899912', - b'\xf1\x8704E906024BC\xf1\x899971', - b'\xf1\x8704E906024BG\xf1\x891057', - b'\xf1\x8704E906024B \xf1\x895594', - b'\xf1\x8704E906024C \xf1\x899970', - b'\xf1\x8704E906024L \xf1\x895595', - b'\xf1\x8704E906024L \xf1\x899970', - b'\xf1\x8704E906027MS\xf1\x896223', - b'\xf1\x875G0906259T \xf1\x890003', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927158BQ\xf1\x893545', - b'\xf1\x8709S927158BS\xf1\x893642', - b'\xf1\x8709S927158BS\xf1\x893694', - b'\xf1\x8709S927158CK\xf1\x893770', - b'\xf1\x8709S927158R \xf1\x893552', - b'\xf1\x8709S927158R \xf1\x893587', - b'\xf1\x870GC300020N \xf1\x892803', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655AG\xf1\x890336\xf1\x82\02314171231313500314611011630169333463100', - b'\xf1\x875Q0959655AG\xf1\x890338\xf1\x82\x1314171231313500314611011630169333463100', - b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\02314171231313500314642011650169333463100', - b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\02314171231313500314643011650169333463100', - b'\xf1\x875Q0959655BR\xf1\x890403\xf1\x82\02311170031313300314240011150119333433100', - b'\xf1\x875Q0959655BR\xf1\x890403\xf1\x82\02319170031313300314240011550159333463100', - b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1314171231313500314643021650169333613100', - b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1314171231313500314642021650169333613100', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A10A11A1', - b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\00521A10A01A1', - b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521B00404A1', - b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\00521A00642A1', - b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\00521A10A01A1', - b'\xf1\x875QN909144B \xf1\x895082\xf1\x82\00571A10A11A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x875Q0907572N \xf1\x890681', - b'\xf1\x875Q0907572P \xf1\x890682', - b'\xf1\x875Q0907572R \xf1\x890771', - ], - }, - CAR.PASSAT_MK8: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8703N906026E \xf1\x892114', - b'\xf1\x8704E906023AH\xf1\x893379', - b'\xf1\x8704L906026DP\xf1\x891538', - b'\xf1\x8704L906026ET\xf1\x891990', - b'\xf1\x8704L906026FP\xf1\x892012', - b'\xf1\x8704L906026GA\xf1\x892013', - b'\xf1\x8704L906026KD\xf1\x894798', - b'\xf1\x873G0906259B \xf1\x890002', - b'\xf1\x873G0906264 \xf1\x890004', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300043H \xf1\x891601', - b'\xf1\x870CW300048R \xf1\x890610', - b'\xf1\x870D9300013A \xf1\x894905', - b'\xf1\x870D9300014L \xf1\x895002', - b'\xf1\x870D9300041A \xf1\x894801', - b'\xf1\x870DD300045T \xf1\x891601', - b'\xf1\x870DL300011H \xf1\x895201', - b'\xf1\x870CW300042H \xf1\x891601', - b'\xf1\x870CW300042H \xf1\x891607', - b'\xf1\x870GC300042H \xf1\x891404', - b'\xf1\x870D9300018C \xf1\x895297', - b'\xf1\x870GC300043 \xf1\x892301', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655AE\xf1\x890195\xf1\x82\r56140056130012416612124111', - b'\xf1\x873Q0959655AF\xf1\x890195\xf1\x82\r56140056130012026612120211', - b'\xf1\x873Q0959655AN\xf1\x890305\xf1\x82\r58160058140013036914110311', - b'\xf1\x873Q0959655AN\xf1\x890306\xf1\x82\r58160058140013036914110311', - b'\xf1\x873Q0959655BA\xf1\x890195\xf1\x82\r56140056130012516612125111', - b'\xf1\x873Q0959655BB\xf1\x890195\xf1\x82\r56140056130012026612120211', - b'\xf1\x873Q0959655BJ\xf1\x890703\xf1\x82\x0e5915005914001305701311052900', - b'\xf1\x873Q0959655BG\xf1\x890712\xf1\x82\x0e5915005914001305701311052900', - b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\0165915005914001344701311442900', - b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e5915005914001354701311542900', - b'\xf1\x873Q0959655CN\xf1\x890720\xf1\x82\x0e5915005914001305701311052900', - b'\xf1\x875Q0959655S \xf1\x890870\xf1\x82\02315120011111200631145171716121691132111', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566B00611A1', - b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566B00711A1', - b'\xf1\x875Q0909143K \xf1\x892033\xf1\x820514B0060703', - b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522B0060803', - b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522B0080803', - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820526B0060905', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\00521B00606A1', - b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\00516B00501A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\00521B00703A1', - b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563B0000600', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567B0020600', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x873Q0907572A \xf1\x890126', - b'\xf1\x873Q0907572A \xf1\x890130', - b'\xf1\x873Q0907572B \xf1\x890192', - b'\xf1\x873Q0907572C \xf1\x890195', - b'\xf1\x873Q0907572C \xf1\x890196', - b'\xf1\x875Q0907572P \xf1\x890682', - b'\xf1\x875Q0907572R \xf1\x890771', - ], - }, - CAR.PASSAT_NMS: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8706K906016C \xf1\x899609', - b'\xf1\x8706K906016G \xf1\x891124', - b'\xf1\x8706K906071BJ\xf1\x894891', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927158AB\xf1\x893318', - b'\xf1\x8709G927158BD\xf1\x893121', - b'\xf1\x8709G927158FQ\xf1\x893745', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x87561959655 \xf1\x890210\xf1\x82\02212121111113000102011--121012--101312', - b'\xf1\x87561959655C \xf1\x890508\xf1\x82\02215141111121100314919--153015--304831', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x87561907567A \xf1\x890132', - b'\xf1\x877N0907572C \xf1\x890211\xf1\x82\00152', - ], - }, - CAR.POLO_MK6: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704C906025H \xf1\x895177', - b'\xf1\x8705C906032J \xf1\x891702', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300042D \xf1\x891612', - b'\xf1\x870CW300050D \xf1\x891908', - b'\xf1\x870CW300051G \xf1\x891909', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x872Q0959655AG\xf1\x890248\xf1\x82\x1218130411110411--04040404231811152H14', - b'\xf1\x872Q0959655AJ\xf1\x890250\xf1\x82\x1248130411110416--04040404784811152H14', - b'\xf1\x872Q0959655AS\xf1\x890411\xf1\x82\x1384830511110516041405820599841215391471', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x872Q1909144M \xf1\x896041', - b'\xf1\x872Q2909144AB\xf1\x896050', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572R \xf1\x890372', - ], - }, - CAR.SHARAN_MK2: { - # TODO: Sharan Mk2 EPS and DQ250 auto trans both require KWP2000 support for fingerprinting - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704L906016HE\xf1\x894635', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x877N0959655D \xf1\x890016\xf1\x82\x0801100705----10--', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x877N0907572C \xf1\x890211\xf1\x82\x0153', - ], - }, - CAR.TAOS_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906027NJ\xf1\x891445', - b'\xf1\x8704E906027NP\xf1\x891286', - b'\xf1\x8705E906013E \xf1\x891624', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927158EM\xf1\x893812', - b'\xf1\x8709S927158BL\xf1\x893791', - b'\xf1\x8709S927158FF\xf1\x893876', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1311111111333500314646021450149333613100', - b'\xf1\x875Q0959655CE\xf1\x890421\xf1\x82\x1311110011333300314240021350139333613100', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875QM907144D \xf1\x891063\xf1\x82\x001O06081OOM', - b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521060405A1', - b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521060605A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572T \xf1\x890383', - ], - }, - CAR.TCROSS_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704C906025AK\xf1\x897053', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300050E \xf1\x891903', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x872Q0959655AJ\xf1\x890250\xf1\x82\02212130411110411--04041104141311152H14', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x872Q1909144M \xf1\x896041', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572T \xf1\x890383', - ], - }, - CAR.TIGUAN_MK2: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8703N906026D \xf1\x893680', - b'\xf1\x8704E906027NB\xf1\x899504', - b'\xf1\x8704L906026EJ\xf1\x893661', - b'\xf1\x8704L906027G \xf1\x899893', - b'\xf1\x875N0906259 \xf1\x890002', - b'\xf1\x875NA906259H \xf1\x890002', - b'\xf1\x875NA907115E \xf1\x890003', - b'\xf1\x875NA907115E \xf1\x890005', - b'\xf1\x8783A907115B \xf1\x890005', - b'\xf1\x8783A907115F \xf1\x890002', - b'\xf1\x8783A907115G \xf1\x890001', - b'\xf1\x8783A907115K \xf1\x890001', - b'\xf1\x8704E906024AP\xf1\x891461', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927158DT\xf1\x893698', - b'\xf1\x8709G927158FM\xf1\x893757', - b'\xf1\x8709G927158GC\xf1\x893821', - b'\xf1\x8709G927158GD\xf1\x893820', - b'\xf1\x8709G927158GM\xf1\x893936', - b'\xf1\x870D9300043 \xf1\x895202', - b'\xf1\x870DL300011N \xf1\x892001', - b'\xf1\x870DL300011N \xf1\x892012', - b'\xf1\x870DL300012M \xf1\x892107', - b'\xf1\x870DL300012P \xf1\x892103', - b'\xf1\x870DL300013A \xf1\x893005', - b'\xf1\x870DL300013G \xf1\x892119', - b'\xf1\x870DL300013G \xf1\x892120', - b'\xf1\x870DL300014C \xf1\x893703', - b'\xf1\x870DD300046K \xf1\x892302', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655AR\xf1\x890317\xf1\x82\02331310031333334313132573732379333313100', - b'\xf1\x875Q0959655BJ\xf1\x890336\xf1\x82\x1312110031333300314232583732379333423100', - b'\xf1\x875Q0959655BJ\xf1\x890339\xf1\x82\x1331310031333334313132013730379333423100', - b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\02316143231313500314641011750179333423100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\02312110031333300314240583752379333423100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\02331310031333336313140013950399333423100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333334313140013750379333423100', - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333334313140573752379333423100', - b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1316143231313500314647021750179333613100', - b'\xf1\x875Q0959655CG\xf1\x890421\xf1\x82\x1331310031333300314240024050409333613100', - b'\xf1\x875Q0959655CD\xf1\x890421\xf1\x82\x13123112313333003145406F6154619333613100', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820529A6060603', - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527A6050705', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A60604A1', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6000600', - b'\xf1\x875QF909144A \xf1\x895581\xf1\x82\x0571A60834A1', - b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\00571A60634A1', - b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571A62A32A1', - b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A60604A1', - b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A60604A1', - b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\00521A60804A1', - b'\xf1\x875QM907144D \xf1\x891063\xf1\x82\x002SA6092SOM', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6017A00', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572J \xf1\x890156', - b'\xf1\x872Q0907572M \xf1\x890233', - b'\xf1\x872Q0907572Q \xf1\x890342', - b'\xf1\x872Q0907572R \xf1\x890372', - b'\xf1\x872Q0907572T \xf1\x890383', - ], - }, - CAR.TOURAN_MK2: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704L906026HM\xf1\x893017', - b'\xf1\x8705E906018CQ\xf1\x890808', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300041E \xf1\x891005', - b'\xf1\x870CW300051M \xf1\x891926', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655AS\xf1\x890318\xf1\x82\023363500213533353141324C4732479333313100', - b'\xf1\x875Q0959655CH\xf1\x890421\xf1\x82\x1336350021353336314740025250529333613100', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820531B0062105', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A8090400', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x873Q0907572C \xf1\x890195', - b'\xf1\x872Q0907572AA\xf1\x890396', - ], - }, - CAR.TRANSPORTER_T61: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704L906056AG\xf1\x899970', - b'\xf1\x8704L906056AL\xf1\x899970', - b'\xf1\x8704L906057AP\xf1\x891186', - b'\xf1\x8704L906057N \xf1\x890413', - b'\xf1\x8705L906023E \xf1\x891352', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870BT300012G \xf1\x893102', - b'\xf1\x870BT300012E \xf1\x893105', - b'\xf1\x870BT300046R \xf1\x893102', - b'\xf1\x870DV300012B \xf1\x893701', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x872Q0959655AE\xf1\x890506\xf1\x82\x1316170411110411--04041704161611152S1411', - b'\xf1\x872Q0959655AE\xf1\x890506\xf1\x82\x1316170411110411--04041704171711152S1411', - b'\xf1\x872Q0959655AF\xf1\x890506\xf1\x82\x1316171111110411--04041711121211152S1413', - b'\xf1\x872Q0959655AQ\xf1\x890511\xf1\x82\x1316170411110411--0404170426261215391421', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x877LA909144F \xf1\x897150\xf1\x82\x0532380518A2', - b'\xf1\x877LA909144G \xf1\x897160\xf1\x82\x05333A5519A2', - b'\xf1\x877LA909144F \xf1\x897150\xf1\x82\x05323A5519A2', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572R \xf1\x890372', - b'\xf1\x872Q0907572AA\xf1\x890396', - ], - }, - CAR.TROC_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8705E906018AT\xf1\x899640', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300050J \xf1\x891911', - b'\xf1\x870CW300051M \xf1\x891925', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1311110012333300314240681152119333463100', - b'\xf1\x875Q0959655CG\xf1\x890421\xf1\x82\x13111100123333003142404M1152119333613100', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521060405A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572T \xf1\x890383', - ], - }, - CAR.AUDI_A3_MK3: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906023AN\xf1\x893695', - b'\xf1\x8704E906023AR\xf1\x893440', - b'\xf1\x8704E906023BL\xf1\x895190', - b'\xf1\x8704E906027CJ\xf1\x897798', - b'\xf1\x8704L997022N \xf1\x899459', - b'\xf1\x875G0906259A \xf1\x890004', - b'\xf1\x875G0906259D \xf1\x890002', - b'\xf1\x875G0906259L \xf1\x890002', - b'\xf1\x875G0906259Q \xf1\x890002', - b'\xf1\x878V0906259E \xf1\x890001', - b'\xf1\x878V0906259F \xf1\x890002', - b'\xf1\x878V0906259H \xf1\x890002', - b'\xf1\x878V0906259J \xf1\x890002', - b'\xf1\x878V0906259K \xf1\x890001', - b'\xf1\x878V0906264B \xf1\x890003', - b'\xf1\x878V0907115B \xf1\x890007', - b'\xf1\x878V0907404A \xf1\x890005', - b'\xf1\x878V0907404G \xf1\x890005', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300044T \xf1\x895245', - b'\xf1\x870CW300048 \xf1\x895201', - b'\xf1\x870D9300012 \xf1\x894912', - b'\xf1\x870D9300012 \xf1\x894931', - b'\xf1\x870D9300012L \xf1\x894521', - b'\xf1\x870D9300012K \xf1\x894513', - b'\xf1\x870D9300013B \xf1\x894902', - b'\xf1\x870D9300013B \xf1\x894931', - b'\xf1\x870D9300041N \xf1\x894512', - b'\xf1\x870D9300043T \xf1\x899699', - b'\xf1\x870DD300046 \xf1\x891604', - b'\xf1\x870DD300046A \xf1\x891602', - b'\xf1\x870DD300046F \xf1\x891602', - b'\xf1\x870DD300046G \xf1\x891601', - b'\xf1\x870DL300012E \xf1\x892012', - b'\xf1\x870DL300012H \xf1\x892112', - b'\xf1\x870GC300011 \xf1\x890403', - b'\xf1\x870GC300013M \xf1\x892402', - b'\xf1\x870GC300042J \xf1\x891402', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655AB\xf1\x890388\xf1\x82\0211111001111111206110412111321139114', - b'\xf1\x875Q0959655AM\xf1\x890315\xf1\x82\x1311111111111111311411011231129321212100', - b'\xf1\x875Q0959655AM\xf1\x890318\xf1\x82\x1311111111111112311411011531159321212100', - b'\xf1\x875Q0959655AR\xf1\x890315\xf1\x82\x1311110011131115311211012331239321212100', - b'\xf1\x875Q0959655BJ\xf1\x890339\xf1\x82\x1311110011131100311111011731179321342100', - b'\xf1\x875Q0959655J \xf1\x890825\xf1\x82\x13111112111111--241115141112221291163221', - b'\xf1\x875Q0959655J \xf1\x890825\xf1\x82\023111112111111--171115141112221291163221', - b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13111112111111--241115141112221291163221', - b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13121111111111--341117141212231291163221', - b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13121111111211--261117141112231291163221', - b'\xf1\x875Q0959655N \xf1\x890361\xf1\x82\0211212001112110004110411111421149114', - b'\xf1\x875Q0959655N \xf1\x890361\xf1\x82\0211212001112111104110411111521159114', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144F \xf1\x895043\xf1\x82\x0561G01A13A0', - b'\xf1\x873Q0909144H \xf1\x895061\xf1\x82\00566G0HA14A1', - b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566G0HA14A1', - b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571G01A16A1', - b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571G0HA16A1', - b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571G0JA13A1', - b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571G0JA14A1', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\00521G0G809A1', - b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\00503G00303A0', - b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\00503G00803A0', - b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\x0503G0G803A0', - b'\xf1\x875Q0909144R \xf1\x891061\xf1\x82\00516G00804A1', - b'\xf1\x875Q0909144S \xf1\x891063\xf1\x82\x0516G00804A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\00521G00807A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x875Q0907567M \xf1\x890398\xf1\x82\x0101', - b'\xf1\x875Q0907567N \xf1\x890400\xf1\x82\x0101', - b'\xf1\x875Q0907572F \xf1\x890400\xf1\x82\x0101', - b'\xf1\x875Q0907572D \xf1\x890304\xf1\x82\x0101', - b'\xf1\x875Q0907572G \xf1\x890571', - b'\xf1\x875Q0907572H \xf1\x890620', - b'\xf1\x875Q0907572P \xf1\x890682', - ], - }, - CAR.AUDI_Q2_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906027JT\xf1\x894145', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300041F \xf1\x891006', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655BD\xf1\x890336\xf1\x82\x1311111111111100311211011231129321312111', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571F60511A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572M \xf1\x890233', - ], - }, - CAR.AUDI_Q3_MK2: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8705E906018N \xf1\x899970', - b'\xf1\x8705L906022M \xf1\x890901', - b'\xf1\x8783A906259 \xf1\x890001', - b'\xf1\x8783A906259 \xf1\x890005', - b'\xf1\x8783A906259F \xf1\x890001', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x8709G927158CN\xf1\x893608', - b'\xf1\x8709G927158GP\xf1\x893937', - b'\xf1\x870GC300045D \xf1\x892802', - b'\xf1\x870GC300046F \xf1\x892701', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655BF\xf1\x890403\xf1\x82\x1321211111211200311121232152219321422111', - b'\xf1\x875Q0959655BQ\xf1\x890421\xf1\x82\x132121111121120031112124218C219321532111', - b'\xf1\x875Q0959655CC\xf1\x890421\xf1\x82\x131111111111120031111224118A119321532111', - b'\xf1\x875Q0959655CC\xf1\x890421\xf1\x82\x131111111111120031111237116A119321532111', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567G6000300', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567G6000800', - b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571G60533A1', - b'\xf1\x875TA907145D \xf1\x891051\xf1\x82\x001PG60A1P7N', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572R \xf1\x890372', - b'\xf1\x872Q0907572T \xf1\x890383', - ], - }, - CAR.SEAT_ATECA_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906027KA\xf1\x893749', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870D9300014S \xf1\x895202', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\0161212001211001305121211052900', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\00571N60511A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572M \xf1\x890233', - ], - }, - CAR.SEAT_LEON_MK3: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704L906021EL\xf1\x897542', - b'\xf1\x8704L906026BP\xf1\x891198', - b'\xf1\x8704L906026BP\xf1\x897608', - b'\xf1\x8704L906056CR\xf1\x892181', - b'\xf1\x8704L906056CR\xf1\x892797', - b'\xf1\x8705E906018AS\xf1\x899596', - b'\xf1\x878V0906264H \xf1\x890005', - b'\xf1\x878V0907115E \xf1\x890002', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300041D \xf1\x891004', - b'\xf1\x870CW300041G \xf1\x891003', - b'\xf1\x870CW300050J \xf1\x891908', - b'\xf1\x870D9300042M \xf1\x895016', - b'\xf1\x870GC300043A \xf1\x892304', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655AC\xf1\x890189\xf1\x82\r11110011110011021511110200', - b'\xf1\x873Q0959655AS\xf1\x890200\xf1\x82\r11110011110011021511110200', - b'\xf1\x873Q0959655AS\xf1\x890200\xf1\x82\r12110012120012021612110200', - b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e1312001313001305171311052900', - b'\xf1\x873Q0959655BH\xf1\x890712\xf1\x82\x0e1312001313001305171311052900', - b'\xf1\x873Q0959655CM\xf1\x890720\xf1\x82\0161312001313001305171311052900', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521N01842A1', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\00521N01342A1', - b'\xf1\x875Q0909144P \xf1\x891043\xf1\x82\00511N01805A0', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521N01309A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\00521N05808A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x875Q0907572B \xf1\x890200\xf1\x82\00101', - b'\xf1\x875Q0907572H \xf1\x890620', - b'\xf1\x875Q0907572K \xf1\x890402\xf1\x82\x0101', - b'\xf1\x875Q0907572P \xf1\x890682', - b'\xf1\x875Q0907572R \xf1\x890771', - ], - }, - CAR.SKODA_FABIA_MK4: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8705E906018CF\xf1\x891905', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300051M \xf1\x891936', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875QF959655AT\xf1\x890755\xf1\x82\x1311110011110011111100110200--1111120749', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x872Q1909144S \xf1\x896042', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - ], - }, - CAR.SKODA_KAMIQ_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8705C906032M \xf1\x891333', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300020 \xf1\x891906', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x872Q0959655AM\xf1\x890351\xf1\x82\0222221042111042121040404042E2711152H14', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x872Q1909144M \xf1\x896041', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572T \xf1\x890383', - ], - }, - CAR.SKODA_KAROQ_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8705E906013H \xf1\x892407', - b'\xf1\x8705E906018P \xf1\x895472', - b'\xf1\x8705E906018P \xf1\x896020', - b'\xf1\x8705L906022BS\xf1\x890913', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300020T \xf1\x892202', - b'\xf1\x870CW300041S \xf1\x891615', - b'\xf1\x870GC300014L \xf1\x892802', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875QF959655AT\xf1\x890755\xf1\x82\x1312110012120011111100010200--2521210749', - b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\x0e1213001211001101131112012100', - b'\xf1\x873Q0959655BH\xf1\x890712\xf1\x82\0161213001211001101131122012100', - b'\xf1\x873Q0959655DE\xf1\x890731\xf1\x82\x0e1213001211001101131121012J00', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563T6090500', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T6100500', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T6100700', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572AB\xf1\x890397', - b'\xf1\x872Q0907572M \xf1\x890233', - b'\xf1\x872Q0907572T \xf1\x890383', - ], - }, - CAR.SKODA_KODIAQ_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906027DD\xf1\x893123', - b'\xf1\x8704E906027NB\xf1\x899504', - b'\xf1\x8704E906027NB\xf1\x896517', - b'\xf1\x8704L906026DE\xf1\x895418', - b'\xf1\x8704L906026EJ\xf1\x893661', - b'\xf1\x8704L906026HT\xf1\x893617', - b'\xf1\x8783A907115E \xf1\x890001', - b'\xf1\x8705E906018DJ\xf1\x890915', - b'\xf1\x8705E906018DJ\xf1\x891903', - b'\xf1\x875NA907115E \xf1\x890003', - b'\xf1\x875NA907115E \xf1\x890005', - b'\xf1\x875NA906259E \xf1\x890003', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870D9300043 \xf1\x895202', - b'\xf1\x870DL300011N \xf1\x892014', - b'\xf1\x870DL300012M \xf1\x892107', - b'\xf1\x870DL300012N \xf1\x892110', - b'\xf1\x870DL300013G \xf1\x892119', - b'\xf1\x870GC300014N \xf1\x892801', - b'\xf1\x870GC300019H \xf1\x892806', - b'\xf1\x870GC300046Q \xf1\x892802', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655AP\xf1\x890306\xf1\x82\r11110011110011421111314211', - b'\xf1\x873Q0959655BJ\xf1\x890703\xf1\x82\x0e1213001211001205212111052100', - b'\xf1\x873Q0959655BK\xf1\x890703\xf1\x82\x0e1213001211001244212111442100', - b'\xf1\x873Q0959655CN\xf1\x890720\xf1\x82\x0e1213001211001205212112052100', - b'\xf1\x873Q0959655CQ\xf1\x890720\xf1\x82\x0e1213111211001205212112052111', - b'\xf1\x873Q0959655DJ\xf1\x890731\xf1\x82\x0e1513001511001205232113052J00', - b'\xf1\x875QF959655AT\xf1\x890755\xf1\x82\x1311110011110011111100010200--1121240749', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527T6050405', - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527T6060405', - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527T6070405', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T600G500', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567T600G600', - b'\xf1\x875TA907145F \xf1\x891063\xf1\x82\x002LT61A2LOM', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572Q \xf1\x890342', - b'\xf1\x872Q0907572R \xf1\x890372', - b'\xf1\x872Q0907572T \xf1\x890383', - b'\xf1\x872Q0907572AA\xf1\x890396', - b'\xf1\x872Q0907572AB\xf1\x890397', - ], - }, - CAR.SKODA_OCTAVIA_MK3: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704C906025L \xf1\x896198', - b'\xf1\x8704E906016ER\xf1\x895823', - b'\xf1\x8704E906027HD\xf1\x893742', - b'\xf1\x8704E906027MH\xf1\x894786', - b'\xf1\x8704L906021DT\xf1\x898127', - b'\xf1\x8704L906026BP\xf1\x897608', - b'\xf1\x8704L906026BS\xf1\x891541', - b'\xf1\x875G0906259C \xf1\x890002', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300041L \xf1\x891601', - b'\xf1\x870CW300041N \xf1\x891605', - b'\xf1\x870CW300043B \xf1\x891601', - b'\xf1\x870CW300043P \xf1\x891605', - b'\xf1\x870D9300041C \xf1\x894936', - b'\xf1\x870D9300041H \xf1\x895220', - b'\xf1\x870D9300041J \xf1\x894902', - b'\xf1\x870D9300041P \xf1\x894507', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x873Q0959655AC\xf1\x890200\xf1\x82\r11120011100010022212110200', - b'\xf1\x873Q0959655AP\xf1\x890305\xf1\x82\r11110011110011213331312131', - b'\xf1\x873Q0959655AQ\xf1\x890200\xf1\x82\r11120011100010312212113100', - b'\xf1\x873Q0959655AS\xf1\x890200\xf1\x82\r11120011100010022212110200', - b'\xf1\x873Q0959655BH\xf1\x890703\xf1\x82\0163221003221002105755331052100', - b'\xf1\x873Q0959655CM\xf1\x890720\xf1\x82\x0e3221003221002105755331052100', - b'\xf1\x873Q0959655CN\xf1\x890720\xf1\x82\x0e3221003221002105755331052100', - b'\xf1\x875QD959655 \xf1\x890388\xf1\x82\x111101000011110006110411111111119111', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\00566A01513A1', - b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\00521T00403A1', - b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521T00403A1', - b'\xf1\x875Q0909144R \xf1\x891061\xf1\x82\x0516A00604A1', - b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521T00601A1', - b'\xf1\x875QD909144E \xf1\x891081\xf1\x82\x0521T00503A1', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x875Q0907572D \xf1\x890304\xf1\x82\x0101', - b'\xf1\x875Q0907572F \xf1\x890400\xf1\x82\00101', - b'\xf1\x875Q0907572J \xf1\x890654', - b'\xf1\x875Q0907572K \xf1\x890402\xf1\x82\x0101', - b'\xf1\x875Q0907572P \xf1\x890682', - b'\xf1\x875Q0907572R \xf1\x890771', - ], - }, - CAR.SKODA_SCALA_MK1: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704C906025AK\xf1\x897053', - b'\xf1\x8705C906032M \xf1\x892365', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300020 \xf1\x891907', - b'\xf1\x870CW300050 \xf1\x891709', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x872Q0959655AJ\xf1\x890250\xf1\x82\x1211110411110411--04040404131111112H14', - b'\xf1\x872Q0959655AM\xf1\x890351\xf1\x82\022111104111104112104040404111111112H14', - b'\xf1\x872Q0959655AS\xf1\x890411\xf1\x82\x1311150411110411210404040417151215391413', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x872Q1909144M \xf1\x896041', - b'\xf1\x872Q1909144AB\xf1\x896050', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x872Q0907572R \xf1\x890372', - b'\xf1\x872Q0907572AA\xf1\x890396', - ], - }, - CAR.SKODA_SUPERB_MK3: { - (Ecu.engine, 0x7e0, None): [ - b'\xf1\x8704E906027BT\xf1\x899042', - b'\xf1\x8704L906026ET\xf1\x891343', - b'\xf1\x8704L906026FP\xf1\x891196', - b'\xf1\x8704L906026KA\xf1\x896014', - b'\xf1\x8704L906026KB\xf1\x894071', - b'\xf1\x8704L906026KD\xf1\x894798', - b'\xf1\x8704L906026MT\xf1\x893076', - b'\xf1\x873G0906259 \xf1\x890004', - b'\xf1\x873G0906259B \xf1\x890002', - b'\xf1\x873G0906259L \xf1\x890003', - b'\xf1\x873G0906264A \xf1\x890002', - ], - (Ecu.transmission, 0x7e1, None): [ - b'\xf1\x870CW300042H \xf1\x891601', - b'\xf1\x870CW300049Q \xf1\x890906', - b'\xf1\x870D9300011T \xf1\x894801', - b'\xf1\x870D9300012 \xf1\x894940', - b'\xf1\x870D9300013A \xf1\x894905', - b'\xf1\x870D9300014K \xf1\x895006', - b'\xf1\x870D9300041H \xf1\x894905', - b'\xf1\x870D9300043F \xf1\x895202', - b'\xf1\x870GC300013K \xf1\x892403', - b'\xf1\x870GC300014M \xf1\x892801', - b'\xf1\x870GC300019G \xf1\x892803', - b'\xf1\x870GC300043 \xf1\x892301', - ], - (Ecu.srs, 0x715, None): [ - b'\xf1\x875Q0959655AE\xf1\x890130\xf1\x82\x12111200111121001121110012211292221111', - b'\xf1\x875Q0959655AE\xf1\x890130\xf1\x82\022111200111121001121118112231292221111', - b'\xf1\x875Q0959655AK\xf1\x890130\xf1\x82\022111200111121001121110012211292221111', - b'\xf1\x875Q0959655AS\xf1\x890317\xf1\x82\x1331310031313100313131823133319331313100', - b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\02331310031313100313131013141319331413100', - b'\xf1\x875Q0959655BK\xf1\x890336\xf1\x82\x1331310031313100313131013141319331413100', - b'\xf1\x875Q0959655CA\xf1\x890403\xf1\x82\x1331310031313100313151013141319331423100', - b'\xf1\x875Q0959655CA\xf1\x890403\xf1\x82\x1331310031313100313151823143319331423100', - b'\xf1\x875Q0959655CH\xf1\x890421\xf1\x82\x1333310031313100313152025350539331463100', - b'\xf1\x875Q0959655CH\xf1\x890421\xf1\x82\x1333310031313100313152855372539331463100', - ], - (Ecu.eps, 0x712, None): [ - b'\xf1\x875Q0909143K \xf1\x892033\xf1\x820514UZ070203', - b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522UZ050303', - b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820522UZ070303', - b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820526UZ070505', - b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\00563UZ060700', - b'\xf1\x875Q0910143B \xf1\x892201\xf1\x82\x0563UZ060600', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567UZ070600', - b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567UZ070700', - ], - (Ecu.fwdRadar, 0x757, None): [ - b'\xf1\x873Q0907572B \xf1\x890192', - b'\xf1\x873Q0907572B \xf1\x890194', - b'\xf1\x873Q0907572C \xf1\x890195', - b'\xf1\x875Q0907572R \xf1\x890771', - b'\xf1\x875Q0907572S \xf1\x890780', - ], - }, -} diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 248400dfc4..2498444c26 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -1,25 +1,25 @@ #!/usr/bin/env python3 import os import math +import numpy as np import time +import threading from typing import SupportsFloat from cereal import car, log from openpilot.common.numpy_fast import clip from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper, DT_CTRL -from openpilot.common.profiler import Profiler -from openpilot.common.params import Params, put_nonblocking, put_bool_nonblocking +from openpilot.common.params import Params import cereal.messaging as messaging from cereal.visionipc import VisionIpcClient, VisionStreamType from openpilot.common.conversions import Conversions as CV from panda import ALTERNATIVE_EXPERIENCE -from openpilot.system.swaglog import cloudlog -from openpilot.system.version import is_release_branch, get_short_branch +from openpilot.common.swaglog import cloudlog +from openpilot.system.version import get_short_branch from openpilot.selfdrive.athena.registration import is_registered_device from openpilot.selfdrive.boardd.boardd import can_list_to_can_capnp from openpilot.selfdrive.car.car_helpers import get_car, get_startup_event, get_one_can -from openpilot.selfdrive.controls.lib.lane_planner import CAMERA_OFFSET -from openpilot.selfdrive.controls.lib.drive_helpers import VCruiseHelper, get_lag_adjusted_curvature +from openpilot.selfdrive.controls.lib.drive_helpers import VCruiseHelper, clip_curvature, get_lag_adjusted_curvature from openpilot.selfdrive.controls.lib.latcontrol import LatControl, MIN_LATERAL_CONTROL_SPEED from openpilot.selfdrive.controls.lib.longcontrol import LongControl from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID @@ -28,27 +28,29 @@ from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque from openpilot.selfdrive.controls.lib.events import Events, ET from openpilot.selfdrive.controls.lib.alertmanager import AlertManager, set_offroad_alert from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel +from openpilot.selfdrive.sunnypilot import get_model_generation from openpilot.system.hardware import HARDWARE SOFT_DISABLE_TIME = 3 # seconds LDW_MIN_SPEED = 31 * CV.MPH_TO_MS LANE_DEPARTURE_THRESHOLD = 0.1 +CAMERA_OFFSET = 0.04 REPLAY = "REPLAY" in os.environ SIMULATION = "SIMULATION" in os.environ TESTING_CLOSET = "TESTING_CLOSET" in os.environ -NOSENSOR = "NOSENSOR" in os.environ IGNORE_PROCESSES = {"loggerd", "encoderd", "statsd", "mapd", "gpxd", "gpxd_uploader", "mapd", "otisserv", "fleet_manager"} ThermalStatus = log.DeviceState.ThermalStatus State = log.ControlsState.OpenpilotState PandaType = log.PandaState.PandaType -Desire = log.LateralPlan.Desire -LaneChangeState = log.LateralPlan.LaneChangeState -LaneChangeDirection = log.LateralPlan.LaneChangeDirection +Desire = log.Desire +LaneChangeState = log.LaneChangeState +LaneChangeDirection = log.LaneChangeDirection EventName = car.CarEvent.EventName ButtonType = car.CarState.ButtonEvent.Type SafetyModel = car.CarParams.SafetyModel +GearShifter = car.CarState.GearShifter IGNORED_SAFETY_MODES = (SafetyModel.silent, SafetyModel.noOutput) CSID_MAP = {"1": EventName.roadCameraError, "2": EventName.wideRoadCameraError, "0": EventName.driverCameraError} @@ -58,26 +60,21 @@ ENABLED_STATES = (State.preEnabled, *ACTIVE_STATES) class Controls: - def __init__(self, sm=None, pm=None, can_sock=None, CI=None): + def __init__(self, CI=None): config_realtime_process(4, Priority.CTRL_HIGH) # Ensure the current branch is cached, otherwise the first iteration of controlsd lags self.branch = get_short_branch("") # Setup sockets - self.pm = pm - if self.pm is None: - self.pm = messaging.PubMaster(['sendcan', 'controlsState', 'carState', - 'carControl', 'carEvents', 'carParams', 'controlsStateSP']) + self.pm = messaging.PubMaster(['sendcan', 'controlsState', 'carState', + 'carControl', 'onroadEvents', 'carParams', 'controlsStateSP']) + self.sensor_packets = ["accelerometer", "gyroscope"] self.camera_packets = ["roadCameraState", "driverCameraState", "wideRoadCameraState"] - self.can_sock = can_sock - if can_sock is None: - can_timeout = None if os.environ.get('NO_CAN_TIMEOUT', False) else 20 - self.can_sock = messaging.sub_sock('can', timeout=can_timeout) - self.log_sock = messaging.sub_sock('androidLog') + self.can_sock = messaging.sub_sock('can', timeout=20) self.params = Params() @@ -86,18 +83,17 @@ class Controls: IGNORE_PROCESSES.update({"dmonitoringd", "dmonitoringmodeld"}) self.camera_packets.remove("driverCameraState") - self.sm = sm - if self.sm is None: - ignore = ['testJoystick'] - if SIMULATION: - ignore += ['driverCameraState', 'managerState'] - if self.d_camera_hardware_missing: - ignore += ['driverMonitoringState'] - self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration', - 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman', - 'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters', 'testJoystick', - 'longitudinalPlanSP', 'lateralPlanSP'] + self.camera_packets, - ignore_alive=ignore, ignore_avg_freq=['radarState', 'testJoystick']) + ignore = self.sensor_packets + ['testJoystick'] + if SIMULATION: + ignore += ['driverCameraState', 'managerState'] + if self.d_camera_hardware_missing: + ignore += ['driverMonitoringState'] + lateral_plan_svs = ['lateralPlanDEPRECATED', 'lateralPlanSPDEPRECATED'] + self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration', + 'driverMonitoringState', 'longitudinalPlan', 'liveLocationKalman', + 'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters', + 'testJoystick', 'longitudinalPlanSP', 'modelV2SP'] + self.camera_packets + self.sensor_packets + lateral_plan_svs, + ignore_alive=ignore, ignore_avg_freq=['radarState', 'testJoystick'], ignore_valid=['testJoystick', ]) if CI is None: # wait for one pandaState and one CAN packet @@ -105,12 +101,12 @@ class Controls: get_one_can(self.can_sock) num_pandas = len(messaging.recv_one_retry(self.sm.sock['pandaStates']).pandaStates) - experimental_long_allowed = self.params.get_bool("ExperimentalLongitudinalEnabled") and not is_release_branch() + experimental_long_allowed = self.params.get_bool("ExperimentalLongitudinalEnabled") self.CI, self.CP = get_car(self.can_sock, self.pm.sock['sendcan'], experimental_long_allowed, num_pandas) else: self.CI, self.CP = CI, CI.CP - self.joystick_mode = self.params.get_bool("JoystickDebugMode") or self.CP.notCar + self.joystick_mode = self.params.get_bool("JoystickDebugMode") # set alternative experiences from parameters self.disengage_on_accelerator = self.params.get_bool("DisengageOnAccelerator") @@ -133,28 +129,32 @@ class Controls: self.is_metric = self.params.get_bool("IsMetric") self.is_ldw_enabled = self.params.get_bool("IsLdwEnabled") openpilot_enabled_toggle = self.params.get_bool("OpenpilotEnabledToggle") - passive = self.params.get_bool("Passive") or not openpilot_enabled_toggle # detect sound card presence and ensure successful init sounds_available = HARDWARE.get_sound_card_online() car_recognized = self.CP.carName != 'mock' - controller_available = self.CI.CC is not None and not passive and not self.CP.dashcamOnly - self.read_only = not car_recognized or not controller_available or self.CP.dashcamOnly - if self.read_only: + controller_available = self.CI.CC is not None and openpilot_enabled_toggle and not self.CP.dashcamOnly + self.CP.passive = not car_recognized or not controller_available or self.CP.dashcamOnly + if self.CP.passive: safety_config = car.CarParams.SafetyConfig.new_message() safety_config.safetyModel = car.CarParams.SafetyModel.noOutput self.CP.safetyConfigs = [safety_config] + # Write previous route's CarParams + prev_cp = self.params.get("CarParamsPersistent") + if prev_cp is not None: + self.params.put("CarParamsPrevRoute", prev_cp) + # Write CarParams for radard cp_bytes = self.CP.to_bytes() self.params.put("CarParams", cp_bytes) - put_nonblocking("CarParamsCache", cp_bytes) - put_nonblocking("CarParamsPersistent", cp_bytes) + self.params.put_nonblocking("CarParamsCache", cp_bytes) + self.params.put_nonblocking("CarParamsPersistent", cp_bytes) # cleanup old params - if not self.CP.experimentalLongitudinalAvailable or is_release_branch(): + if not self.CP.experimentalLongitudinalAvailable: self.params.remove("ExperimentalLongitudinalEnabled") if not self.CP.openpilotLongitudinalControl: self.params.remove("ExperimentalMode") @@ -196,21 +196,24 @@ class Controls: self.last_actuators = car.CarControl.Actuators.new_message() self.steer_limited = False self.desired_curvature = 0.0 - self.desired_curvature_rate = 0.0 self.experimental_mode = False self.v_cruise_helper = VCruiseHelper(self.CP) self.recalibrating_seen = False + self.nn_alert_shown = False + self.enable_nnff = self.params.get_bool("NNFF") self.lane_change_set_timer = int(self.params.get("AutoLaneChangeTimer", encoding="utf8")) self.reverse_acc_change = False + self.dynamic_experimental_control = False self.live_torque = self.params.get_bool("LiveTorque") self.torqued_override = self.params.get_bool("TorquedOverride") self.process_not_running = False - # TODO: no longer necessary, aside from process replay - self.sm['liveParameters'].valid = True + self.custom_model, self.model_gen = get_model_generation(self.params) + self.model_use_lateral_planner = self.custom_model and self.model_gen == 1 + self.can_log_mono_time = 0 self.startup_event = get_startup_event(car_recognized, controller_available, len(self.CP.carFw) > 0) @@ -223,15 +226,11 @@ class Controls: set_offroad_alert("Offroad_CarUnrecognized", True) else: set_offroad_alert("Offroad_NoFirmware", True) - elif self.read_only: + elif self.CP.passive: self.events.add(EventName.dashcamMode, static=True) - elif self.joystick_mode: - self.events.add(EventName.joystickDebug, static=True) - self.startup_event = None # controlsd is driven by can recv, expected at 100Hz self.rk = Ratekeeper(100, print_delay_threshold=None) - self.prof = Profiler(False) # off by default def set_initial_state(self): if REPLAY: @@ -243,11 +242,44 @@ class Controls: if any(ps.controlsAllowed for ps in self.sm['pandaStates']): self.state = State.enabled + def get_road_edge(self, carstate, model_v2): + # Lane detection by FrogAi + one_blinker = carstate.leftBlinker != carstate.rightBlinker + if not self.edge_toggle: + self.road_edge = False + elif one_blinker: + # Set the minimum lane threshold to 3.0 meters + min_lane_threshold = 3.0 + # Set the blinker index based on which signal is on + blinker_index = 0 if carstate.leftBlinker else 1 + desired_edge = model_v2.roadEdges[blinker_index] + current_lane = model_v2.laneLines[blinker_index + 1] + # Check if both the desired lane and the current lane have valid x and y values + if all([desired_edge.x, desired_edge.y, current_lane.x, current_lane.y]) and len(desired_edge.x) == len(current_lane.x): + # Interpolate the x and y values to the same length + x = np.linspace(desired_edge.x[0], desired_edge.x[-1], num=len(desired_edge.x)) + lane_y = np.interp(x, current_lane.x, current_lane.y) + desired_y = np.interp(x, desired_edge.x, desired_edge.y) + # Calculate the width of the lane we're wanting to change into + lane_width = np.abs(desired_y - lane_y) + # Set road_edge to False if the lane width is not larger than the threshold + self.road_edge = not (np.amax(lane_width) > min_lane_threshold) + else: + self.road_edge = True + else: + # Default to setting "road_edge" to False + self.road_edge = False + def update_events(self, CS): - """Compute carEvents from carState""" + """Compute onroadEvents from carState""" self.events.clear() + # Add joystick event, static on cars, dynamic on nonCars + if self.joystick_mode: + self.events.add(EventName.joystickDebug) + self.startup_event = None + # Add startup event if self.startup_event is not None: self.events.add(self.startup_event) @@ -259,9 +291,15 @@ class Controls: return # no more events while in dashcam mode - if self.read_only: + if self.CP.passive: return + # show alert to indicate whether NNFF is loaded + if self.enable_nnff and not self.nn_alert_shown and self.sm.frame % 1000 == 0 and \ + self.CP.lateralTuning.which() == 'torque': + self.nn_alert_shown = True + self.events.add(EventName.torqueNNLoad) + # Block resume if cruise never previously enabled resume_pressed = any(be.type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be in CS.buttonEvents) if not self.CP.pcmCruise and not self.v_cruise_helper.v_cruise_initialized and resume_pressed: @@ -328,22 +366,21 @@ class Controls: self.events.add(EventName.calibrationInvalid) # Handle lane change - if self.sm['lateralPlanSP'].laneChangeEdgeBlock: + lane_change_edge_block = self.sm['lateralPlanSPDEPRECATED'].laneChangeEdgeBlockDEPRECATED if self.model_use_lateral_planner else self.sm['modelV2SP'].laneChangeEdgeBlock + lane_change_svs = self.sm['lateralPlanDEPRECATED'] if self.model_use_lateral_planner else self.sm['modelV2'].meta + if lane_change_svs.laneChangeState == LaneChangeState.preLaneChange and lane_change_edge_block: self.events.add(EventName.laneChangeRoadEdge) - elif self.sm['lateralPlan'].laneChangeState == LaneChangeState.preLaneChange: - direction = self.sm['lateralPlan'].laneChangeDirection - lc_prev = self.sm['lateralPlanSP'].laneChangePrev + elif lane_change_svs.laneChangeState == LaneChangeState.preLaneChange: + direction = lane_change_svs.laneChangeDirection if (CS.leftBlindspot and direction == LaneChangeDirection.left) or \ (CS.rightBlindspot and direction == LaneChangeDirection.right): self.events.add(EventName.laneChangeBlocked) else: if direction == LaneChangeDirection.left: - self.events.add(EventName.preLaneChangeLeft) if self.lane_change_set_timer == 0 or lc_prev else \ - self.events.add(EventName.laneChange) + self.events.add(EventName.preLaneChangeLeft) else: - self.events.add(EventName.preLaneChangeRight) if self.lane_change_set_timer == 0 or lc_prev else \ - self.events.add(EventName.laneChange) - elif self.sm['lateralPlan'].laneChangeState in (LaneChangeState.laneChangeStarting, + self.events.add(EventName.preLaneChangeRight) + elif lane_change_svs.laneChangeState in (LaneChangeState.laneChangeStarting, LaneChangeState.laneChangeFinishing): self.events.add(EventName.laneChange) @@ -380,7 +417,7 @@ class Controls: self.events.add(EventName.cameraMalfunction) if not self.sm.all_alive(['driverCameraState']) and not self.d_camera_hardware_missing: self.d_camera_hardware_missing = True - put_bool_nonblocking("DriverCameraHardwareMissing", True) + self.params.put_bool_nonblocking("DriverCameraHardwareMissing", True) elif not self.sm.all_freq_ok(self.camera_packets): self.events.add(EventName.cameraFrameRate) self.process_not_running = False @@ -419,19 +456,22 @@ class Controls: else: self.logged_comm_issue = None - if not self.sm['lateralPlan'].mpcSolutionValid: - self.events.add(EventName.plannerError) - if not self.sm['liveLocationKalman'].posenetOK: - self.events.add(EventName.posenetInvalid) - if not self.sm['liveLocationKalman'].deviceStable: - self.events.add(EventName.deviceFalling) - if not (self.sm['liveParameters'].sensorValid or self.sm['liveLocationKalman'].sensorsOK): - if self.sm.frame > 5 / DT_CTRL: # Give locationd some time to receive sensor inputs - self.events.add(EventName.sensorDataInvalid) - if not self.sm['liveLocationKalman'].inputsOK: - self.events.add(EventName.locationdTemporaryError) - if not self.sm['liveParameters'].valid and not TESTING_CLOSET and (not SIMULATION or REPLAY): - self.events.add(EventName.paramsdTemporaryError) + if not (self.CP.notCar and self.joystick_mode): + if self.model_use_lateral_planner: + if not self.sm['lateralPlanDEPRECATED'].mpcSolutionValid: + self.events.add(EventName.plannerErrorDEPRECATED) + if not self.sm['liveLocationKalman'].posenetOK: + self.events.add(EventName.posenetInvalid) + if not self.sm['liveLocationKalman'].deviceStable: + self.events.add(EventName.deviceFalling) + if not self.sm['liveLocationKalman'].inputsOK: + self.events.add(EventName.locationdTemporaryError) + if not self.sm['liveParameters'].valid and not TESTING_CLOSET and (not SIMULATION or REPLAY): + self.events.add(EventName.paramsdTemporaryError) + + # conservative HW alert. if the data or frequency are off, locationd will throw an error + if any((self.sm.frame - self.sm.rcv_frame[s])*DT_CTRL > 10. for s in self.sensor_packets): + self.events.add(EventName.sensorDataInvalid) if not REPLAY: # Check for mismatch between openpilot and car's PCM @@ -460,10 +500,9 @@ class Controls: # TODO: fix simulator if not SIMULATION or REPLAY: - if not NOSENSOR: - if not self.sm['liveLocationKalman'].gpsOK and self.sm['liveLocationKalman'].inputsOK and (self.distance_traveled > 1000): - # Not show in first 1 km to allow for driving out of garage. This event shows after 5 minutes - self.events.add(EventName.noGps) + if not self.sm['liveLocationKalman'].gpsOK and self.sm['liveLocationKalman'].inputsOK and (self.distance_traveled > 1000): + # Not show in first 1 km to allow for driving out of garage. This event shows after 5 minutes + self.events.add(EventName.noGps) if self.sm['modelV2'].frameDropPerc > 20: self.events.add(EventName.modeldLagging) @@ -489,12 +528,12 @@ class Controls: if VisionStreamType.VISION_STREAM_WIDE_ROAD not in available_streams: self.sm.ignore_alive.append('wideRoadCameraState') - if not self.read_only: + if not self.CP.passive: self.CI.init(self.CP, self.can_sock, self.pm.sock['sendcan']) self.initialized = True self.set_initial_state() - put_bool_nonblocking("ControlsReady", True) + self.params.put_bool_nonblocking("ControlsReady", True) # Check for CAN timeout if not can_strs: @@ -522,7 +561,7 @@ class Controls: def state_transition(self, CS): """Compute conditional state transitions and execute actions on state transitions""" - self.v_cruise_helper.update_v_cruise(CS, self.enabled_long, self.is_metric, self.reverse_acc_change) + self.v_cruise_helper.update_v_cruise(CS, self.enabled_long, self.is_metric, self.reverse_acc_change, self.sm['longitudinalPlanSP']) # decrement the soft disable timer at every step, as it's reset on # entrance in SOFT_DISABLING state @@ -539,14 +578,14 @@ class Controls: elif self.events.contains(ET.IMMEDIATE_DISABLE): self.state = State.disabled - if CS.gearShifter != 1: # CS.gearShifter == 1 park gear + if CS.gearShifter != GearShifter.park: self.current_alert_types.append(ET.IMMEDIATE_DISABLE) else: # ENABLED if self.state == State.enabled: if CS.cruiseState.enabled and not self.CS_prev.cruiseState.enabled: - self.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode, self.is_metric) + self.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode, self.is_metric, self.dynamic_experimental_control) # Block resume if cruise never previously enabled resume_pressed = any(be.type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be in CS.buttonEvents) if not self.CP.pcmCruise and not self.v_cruise_helper.v_cruise_initialized and resume_pressed: @@ -590,7 +629,7 @@ class Controls: else: self.current_alert_types += [ET.OVERRIDE_LATERAL, ET.OVERRIDE_LONGITUDINAL] if CS.cruiseState.enabled and not self.CS_prev.cruiseState.enabled: - self.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode, self.is_metric) + self.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode, self.is_metric, self.dynamic_experimental_control) # DISABLED elif self.state == State.disabled: @@ -607,7 +646,7 @@ class Controls: self.state = State.enabled self.current_alert_types.append(ET.ENABLE) if CS.cruiseState.enabled: - self.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode, self.is_metric) + self.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode, self.is_metric, self.dynamic_experimental_control) # Check if openpilot is engaged and actuators are enabled self.enabled = self.state in ENABLED_STATES @@ -632,8 +671,10 @@ class Controls: self.LaC.update_live_torque_params(torque_params.latAccelFactorFiltered, torque_params.latAccelOffsetFiltered, torque_params.frictionCoefficientFiltered) - lat_plan = self.sm['lateralPlan'] + lat_plan = self.sm['lateralPlanDEPRECATED'] long_plan = self.sm['longitudinalPlan'] + model_v2 = self.sm['modelV2'] + blinker_svs = lat_plan if self.model_use_lateral_planner else model_v2.meta CC = car.CarControl.new_message() CC.enabled = self.enabled @@ -651,9 +692,9 @@ class Controls: actuators.longControlState = self.LoC.long_control_state # Enable blinkers while lane changing - if self.sm['lateralPlan'].laneChangeState != LaneChangeState.off: - CC.leftBlinker = self.sm['lateralPlan'].laneChangeDirection == LaneChangeDirection.left - CC.rightBlinker = self.sm['lateralPlan'].laneChangeDirection == LaneChangeDirection.right + if blinker_svs.laneChangeState != LaneChangeState.off: + CC.leftBlinker = blinker_svs.laneChangeDirection == LaneChangeDirection.left + CC.rightBlinker = blinker_svs.laneChangeDirection == LaneChangeDirection.right if CS.leftBlinker or CS.rightBlinker: self.last_blinker_frame = self.sm.frame @@ -672,24 +713,34 @@ class Controls: actuators.accel = self.LoC.update(CC.longActive, CS, long_plan, pid_accel_limits, t_since_plan) # Steering PID loop and lateral MPC - self.desired_curvature, self.desired_curvature_rate = get_lag_adjusted_curvature(self.CP, CS.vEgo, - lat_plan.psis, - lat_plan.curvatures, - lat_plan.curvatureRates) - actuators.steer, actuators.steeringAngleDeg, lac_log = self.LaC.update(CC.latActive, CS, self.VM, lp, - self.last_actuators, self.steer_limited, self.desired_curvature, - self.desired_curvature_rate, self.sm['liveLocationKalman']) + if self.model_use_lateral_planner: + self.desired_curvature = get_lag_adjusted_curvature(self.CP, CS.vEgo, lat_plan.psis, lat_plan.curvatures) + else: + self.desired_curvature = clip_curvature(CS.vEgo, self.desired_curvature, model_v2.action.desiredCurvature) actuators.curvature = self.desired_curvature + actuators.steer, actuators.steeringAngleDeg, lac_log = self.LaC.update(CC.latActive, CS, self.VM, lp, + self.steer_limited, self.desired_curvature, + self.sm['liveLocationKalman'], + model_data=model_v2) + if self.model_use_lateral_planner: + actuators.curvature = self.desired_curvature else: lac_log = log.ControlsState.LateralDebugState.new_message() if self.sm.rcv_frame['testJoystick'] > 0: + # reset joystick if it hasn't been received in a while + should_reset_joystick = (self.sm.frame - self.sm.rcv_frame['testJoystick'])*DT_CTRL > 0.2 + if not should_reset_joystick: + joystick_axes = self.sm['testJoystick'].axes + else: + joystick_axes = [0.0, 0.0] + if CC.longActive: - actuators.accel = 4.0*clip(self.sm['testJoystick'].axes[0], -1, 1) + actuators.accel = 4.0*clip(joystick_axes[0], -1, 1) if CC.latActive: - steer = clip(self.sm['testJoystick'].axes[1], -1, 1) - # max angle is 45 for angle-based cars - actuators.steer, actuators.steeringAngleDeg = steer, steer * 45. + steer = clip(joystick_axes[1], -1, 1) + # max angle is 45 for angle-based cars, max curvature is 0.02 + actuators.steer, actuators.steeringAngleDeg, actuators.curvature = steer, steer * 90., steer * -0.02 lac_log.active = self.active lac_log.steeringAngleDeg = CS.steeringAngleDeg @@ -710,7 +761,8 @@ class Controls: if undershooting and turning and good_speed and max_torque: lac_log.active and self.events.add(EventName.steerSaturated) elif lac_log.saturated: - dpath_points = lat_plan.dPathPoints + # TODO probably should not use dpath_points but curvature + dpath_points = lat_plan.dPathPoints if self.model_use_lateral_planner else model_v2.position.y if len(dpath_points): # Check if we deviated from the path # TODO use desired vs actual curvature @@ -802,7 +854,7 @@ class Controls: if current_alert: hudControl.visualAlert = current_alert.visual_alert - if not self.read_only and self.initialized: + if not self.CP.passive and self.initialized: # send car controls over can now_nanos = self.can_log_mono_time if REPLAY else int(time.monotonic() * 1e9) self.last_actuators, can_sends = self.CI.apply(CC, now_nanos) @@ -819,6 +871,7 @@ class Controls: # Curvature & Steering angle lp = self.sm['liveParameters'] + lp_mono_time_svs = 'lateralPlanDEPRECATED' if self.model_use_lateral_planner else 'modelV2' steer_angle_without_offset = math.radians(CS.steeringAngleDeg - lp.angleOffsetDeg) curvature = -self.VM.calc_curvature(steer_angle_without_offset, CS.vEgo, lp.roll) @@ -837,12 +890,11 @@ class Controls: controlsState.alertSound = current_alert.audible_alert controlsState.longitudinalPlanMonoTime = self.sm.logMonoTime['longitudinalPlan'] - controlsState.lateralPlanMonoTime = self.sm.logMonoTime['lateralPlan'] - controlsState.enabled = not (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)) and (self.enabled or CS.cruiseState.enabled) + controlsState.lateralPlanMonoTime = self.sm.logMonoTime[lp_mono_time_svs] + controlsState.enabled = not (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)) and (self.enabled or CS.cruiseState.enabled) and CS.gearShifter not in [GearShifter.park, GearShifter.reverse] controlsState.active = not (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)) and (self.active or CS.cruiseState.enabled) controlsState.curvature = curvature controlsState.desiredCurvature = self.desired_curvature - controlsState.desiredCurvatureRate = self.desired_curvature_rate controlsState.state = self.state controlsState.engageable = not self.events.contains(ET.NO_ENTRY) controlsState.longControlState = self.LoC.long_control_state @@ -875,6 +927,9 @@ class Controls: controlsStateSP.lateralState = lat_tuning + if self.enable_nnff and lat_tuning == 'torque': + controlsStateSP.lateralControlState.torqueState = self.LaC.pid_long_sp + self.pm.send('controlsStateSP', dat_sp) # carState @@ -885,16 +940,18 @@ class Controls: cs_send.carState.events = car_events self.pm.send('carState', cs_send) - # carEvents - logged every second or on change + # onroadEvents - logged every second or on change if (self.sm.frame % int(1. / DT_CTRL) == 0) or (self.events.names != self.events_prev): - ce_send = messaging.new_message('carEvents', len(self.events)) - ce_send.carEvents = car_events - self.pm.send('carEvents', ce_send) + ce_send = messaging.new_message('onroadEvents', len(self.events)) + ce_send.valid = True + ce_send.onroadEvents = car_events + self.pm.send('onroadEvents', ce_send) self.events_prev = self.events.names.copy() # carParams - logged every 50 seconds (> 1 per segment) if (self.sm.frame % int(50. / DT_CTRL) == 0): cp_send = messaging.new_message('carParams') + cp_send.valid = True cp_send.carParams = self.CP self.pm.send('carParams', cp_send) @@ -909,13 +966,10 @@ class Controls: def step(self): start_time = time.monotonic() - self.prof.checkpoint("Ratekeeper", ignore=True) - - self.is_metric = self.params.get_bool("IsMetric") - self.experimental_mode = self.params.get_bool("ExperimentalMode") and self.CP.openpilotLongitudinalControl self.lane_change_set_timer = int(self.params.get("AutoLaneChangeTimer", encoding="utf8")) self.reverse_acc_change = self.params.get_bool("ReverseAccChange") + self.dynamic_experimental_control = self.params.get_bool("DynamicExperimentalControl") if self.sm.frame % int(2.5 / DT_CTRL) == 0: self.live_torque = self.params.get_bool("LiveTorque") @@ -923,36 +977,45 @@ class Controls: # Sample data from sockets and get a carState CS = self.data_sample() cloudlog.timestamp("Data sampled") - self.prof.checkpoint("Sample") self.update_events(CS) cloudlog.timestamp("Events updated") - if not self.read_only and self.initialized: + if not self.CP.passive and self.initialized: # Update control state self.state_transition(CS) - self.prof.checkpoint("State transition") # Compute actuators (runs PID loops and lateral MPC) CC, lac_log = self.state_control(CS) - self.prof.checkpoint("State Control") - # Publish data self.publish_logs(CS, start_time, CC, lac_log) - self.prof.checkpoint("Sent") self.CS_prev = CS + def params_thread(self, evt): + while not evt.is_set(): + self.is_metric = self.params.get_bool("IsMetric") + self.experimental_mode = self.params.get_bool("ExperimentalMode") and self.CP.openpilotLongitudinalControl + if self.CP.notCar: + self.joystick_mode = self.params.get_bool("JoystickDebugMode") + time.sleep(0.1) + def controlsd_thread(self): - while True: - self.step() - self.rk.monitor_time() - self.prof.display() + e = threading.Event() + t = threading.Thread(target=self.params_thread, args=(e, )) + try: + t.start() + while True: + self.step() + self.rk.monitor_time() + except SystemExit: + e.set() + t.join() -def main(sm=None, pm=None, logcan=None): - controls = Controls(sm, pm, logcan) +def main(): + controls = Controls() controls.controlsd_thread() diff --git a/selfdrive/controls/lib/alerts_offroad.json b/selfdrive/controls/lib/alerts_offroad.json index 35446ca22b..e08d67f43b 100644 --- a/selfdrive/controls/lib/alerts_offroad.json +++ b/selfdrive/controls/lib/alerts_offroad.json @@ -52,5 +52,9 @@ "Offroad_Recalibration": { "text": "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.", "severity": 0 + }, + "Offroad_OSMUpdateRequired": { + "text": "OpenStreetMap database is out of date. New maps must be downloaded if you wish to continue using OpenStreetMap data for Enhanced Speed Control and road name display.\n\n%1", + "severity": 0 } } diff --git a/selfdrive/controls/lib/desire_helper.py b/selfdrive/controls/lib/desire_helper.py index 2fbc38db58..bd4decbb80 100644 --- a/selfdrive/controls/lib/desire_helper.py +++ b/selfdrive/controls/lib/desire_helper.py @@ -1,33 +1,34 @@ -import numpy as np from cereal import log from openpilot.common.conversions import Conversions as CV from openpilot.common.params import Params from openpilot.common.realtime import DT_MDL +from openpilot.selfdrive.controls.lib.drive_helpers import get_road_edge +from openpilot.selfdrive.sunnypilot import get_model_generation -LaneChangeState = log.LateralPlan.LaneChangeState -LaneChangeDirection = log.LateralPlan.LaneChangeDirection +LaneChangeState = log.LaneChangeState +LaneChangeDirection = log.LaneChangeDirection LANE_CHANGE_SPEED_MIN = 20 * CV.MPH_TO_MS LANE_CHANGE_TIME_MAX = 10. DESIRES = { LaneChangeDirection.none: { - LaneChangeState.off: log.LateralPlan.Desire.none, - LaneChangeState.preLaneChange: log.LateralPlan.Desire.none, - LaneChangeState.laneChangeStarting: log.LateralPlan.Desire.none, - LaneChangeState.laneChangeFinishing: log.LateralPlan.Desire.none, + LaneChangeState.off: log.Desire.none, + LaneChangeState.preLaneChange: log.Desire.none, + LaneChangeState.laneChangeStarting: log.Desire.none, + LaneChangeState.laneChangeFinishing: log.Desire.none, }, LaneChangeDirection.left: { - LaneChangeState.off: log.LateralPlan.Desire.none, - LaneChangeState.preLaneChange: log.LateralPlan.Desire.none, - LaneChangeState.laneChangeStarting: log.LateralPlan.Desire.laneChangeLeft, - LaneChangeState.laneChangeFinishing: log.LateralPlan.Desire.laneChangeLeft, + LaneChangeState.off: log.Desire.none, + LaneChangeState.preLaneChange: log.Desire.none, + LaneChangeState.laneChangeStarting: log.Desire.laneChangeLeft, + LaneChangeState.laneChangeFinishing: log.Desire.laneChangeLeft, }, LaneChangeDirection.right: { - LaneChangeState.off: log.LateralPlan.Desire.none, - LaneChangeState.preLaneChange: log.LateralPlan.Desire.none, - LaneChangeState.laneChangeStarting: log.LateralPlan.Desire.laneChangeRight, - LaneChangeState.laneChangeFinishing: log.LateralPlan.Desire.laneChangeRight, + LaneChangeState.off: log.Desire.none, + LaneChangeState.preLaneChange: log.Desire.none, + LaneChangeState.laneChangeStarting: log.Desire.laneChangeRight, + LaneChangeState.laneChangeFinishing: log.Desire.laneChangeRight, }, } @@ -48,11 +49,12 @@ class DesireHelper: self.lane_change_ll_prob = 1.0 self.keep_pulse_timer = 0.0 self.prev_one_blinker = False - self.desire = log.LateralPlan.Desire.none + self.desire = log.Desire.none self.param_s = Params() self.lane_change_wait_timer = 0 self.prev_lane_change = False + self.prev_brake_pressed = False self.road_edge = False self.param_read_counter = 0 self.read_param() @@ -60,12 +62,15 @@ class DesireHelper: self.lane_change_set_timer = int(self.param_s.get("AutoLaneChangeTimer", encoding="utf8")) self.lane_change_bsm_delay = self.param_s.get_bool("AutoLaneChangeBsmDelay") + self.custom_model, self.model_gen = get_model_generation(self.param_s) + self.model_use_lateral_planner = self.custom_model and self.model_gen == 1 + def read_param(self): self.edge_toggle = self.param_s.get_bool("RoadEdge") self.lane_change_set_timer = int(self.param_s.get("AutoLaneChangeTimer", encoding="utf8")) self.lane_change_bsm_delay = self.param_s.get_bool("AutoLaneChangeBsmDelay") - def update(self, carstate, lateral_active, lane_change_prob, model_data): + def update(self, carstate, lateral_active, lane_change_prob, model_data=None, lat_plan_sp=None): if self.param_read_counter % 50 == 0: self.read_param() self.param_read_counter += 1 @@ -74,45 +79,23 @@ class DesireHelper: one_blinker = carstate.leftBlinker != carstate.rightBlinker below_lane_change_speed = v_ego < LANE_CHANGE_SPEED_MIN - # Lane detection by FrogAi - if not self.edge_toggle: - self.road_edge = False - elif one_blinker: - # Set the minimum lane threshold to 3.0 meters - min_lane_threshold = 3.0 - # Set the blinker index based on which signal is on - blinker_index = 0 if carstate.leftBlinker else 1 - desired_edge = model_data.roadEdges[blinker_index] - current_lane = model_data.laneLines[blinker_index + 1] - # Check if both the desired lane and the current lane have valid x and y values - if all([desired_edge.x, desired_edge.y, current_lane.x, current_lane.y]) and len(desired_edge.x) == len(current_lane.x): - # Interpolate the x and y values to the same length - x = np.linspace(desired_edge.x[0], desired_edge.x[-1], num=len(desired_edge.x)) - lane_y = np.interp(x, current_lane.x, current_lane.y) - desired_y = np.interp(x, desired_edge.x, desired_edge.y) - # Calculate the width of the lane we're wanting to change into - lane_width = np.abs(desired_y - lane_y) - # Set road_edge to False if the lane width is not larger than the threshold - self.road_edge = not (np.amax(lane_width) > min_lane_threshold) - else: - self.road_edge = True - else: - # Default to setting "road_edge" to False - self.road_edge = False + if self.model_use_lateral_planner: + self.road_edge = get_road_edge(carstate, model_data, self.edge_toggle) if not carstate.madsEnabled or self.lane_change_timer > LANE_CHANGE_TIME_MAX: self.lane_change_state = LaneChangeState.off self.lane_change_direction = LaneChangeDirection.none self.prev_lane_change = False + self.prev_brake_pressed = False else: # LaneChangeState.off - if self.lane_change_state == LaneChangeState.off and one_blinker and not self.prev_one_blinker and not below_lane_change_speed and not carstate.brakePressed: + if self.lane_change_state == LaneChangeState.off and one_blinker and not self.prev_one_blinker and not below_lane_change_speed: self.lane_change_state = LaneChangeState.preLaneChange self.lane_change_ll_prob = 1.0 self.lane_change_wait_timer = 0 # LaneChangeState.preLaneChange - elif self.lane_change_state == LaneChangeState.preLaneChange and self.road_edge: + elif self.lane_change_state == LaneChangeState.preLaneChange and (self.road_edge if self.model_use_lateral_planner else lat_plan_sp.laneChangeEdgeBlockDEPRECATED): self.lane_change_direction = LaneChangeDirection.none elif self.lane_change_state == LaneChangeState.preLaneChange: # Set lane change direction @@ -134,11 +117,17 @@ class DesireHelper: else: self.lane_change_wait_timer = lane_change_auto_timer - 1 + auto_lane_change_allowed = lane_change_auto_timer and self.lane_change_wait_timer > lane_change_auto_timer + + if carstate.brakePressed and not self.prev_brake_pressed: + self.prev_brake_pressed = carstate.brakePressed + if not one_blinker or below_lane_change_speed: self.lane_change_state = LaneChangeState.off self.lane_change_direction = LaneChangeDirection.none self.prev_lane_change = False - elif (torque_applied or ((lane_change_auto_timer and self.lane_change_wait_timer > lane_change_auto_timer) and not self.prev_lane_change)) and \ + self.prev_brake_pressed = False + elif (torque_applied or (auto_lane_change_allowed and not self.prev_lane_change and not self.prev_brake_pressed)) and \ not blindspot_detected: self.lane_change_state = LaneChangeState.laneChangeStarting self.prev_lane_change = True @@ -164,6 +153,7 @@ class DesireHelper: else: self.lane_change_state = LaneChangeState.off self.prev_lane_change = False + self.prev_brake_pressed = False if self.lane_change_state in (LaneChangeState.off, LaneChangeState.preLaneChange): self.lane_change_timer = 0.0 @@ -181,5 +171,5 @@ class DesireHelper: self.keep_pulse_timer += DT_MDL if self.keep_pulse_timer > 1.0: self.keep_pulse_timer = 0.0 - elif self.desire in (log.LateralPlan.Desire.keepLeft, log.LateralPlan.Desire.keepRight): - self.desire = log.LateralPlan.Desire.none + elif self.desire in (log.Desire.keepLeft, log.Desire.keepRight): + self.desire = log.Desire.none diff --git a/selfdrive/controls/lib/drive_helpers.py b/selfdrive/controls/lib/drive_helpers.py index 744629d1b7..61edf7aade 100644 --- a/selfdrive/controls/lib/drive_helpers.py +++ b/selfdrive/controls/lib/drive_helpers.py @@ -1,10 +1,11 @@ import math +import numpy as np -from cereal import car, log +from cereal import car, log, custom from openpilot.common.conversions import Conversions as CV from openpilot.common.numpy_fast import clip, interp -from openpilot.common.realtime import DT_MDL -from openpilot.selfdrive.modeld.constants import T_IDXS +from openpilot.common.realtime import DT_MDL, DT_CTRL +from openpilot.selfdrive.modeld.constants import ModelConstants # WARNING: this value was determined based on the model's training distribution, # model predictions above this speed can be unpredictable @@ -22,7 +23,6 @@ CAR_ROTATION_RADIUS = 0.0 # EU guidelines MAX_LATERAL_JERK = 5.0 - MAX_VEL_ERR = 5.0 ButtonEvent = car.CarState.ButtonEvent @@ -66,6 +66,8 @@ VOLKSWAGEN_V_CRUISE_MIN = { False: int(20 * CV.MPH_TO_KPH), } +SpeedLimitControlState = custom.LongitudinalPlanSP.SpeedLimitControlState + class VCruiseHelper: def __init__(self, CP): @@ -76,17 +78,28 @@ class VCruiseHelper: self.button_timers = {ButtonType.decelCruise: 0, ButtonType.accelCruise: 0} self.button_change_states = {btn: {"standstill": False, "enabled": False} for btn in self.button_timers} + self.is_metric_prev = None + self.v_cruise_min = V_CRUISE_MIN + self.slc_state = SpeedLimitControlState.inactive + self.slc_state_prev = SpeedLimitControlState.inactive + self.slc_speed_limit_offsetted = 0 + @property def v_cruise_initialized(self): return self.v_cruise_kph != V_CRUISE_UNSET - def update_v_cruise(self, CS, enabled, is_metric, reverse_acc): + def update_v_cruise(self, CS, enabled, is_metric, reverse_acc, long_plan_sp): self.v_cruise_kph_last = self.v_cruise_kph + self.slc_state = long_plan_sp.speedLimitControlState + + if not self.CP.pcmCruiseSpeed: + self._update_v_cruise_min(is_metric) if CS.cruiseState.available: if not self.CP.pcmCruise or not self.CP.pcmCruiseSpeed: # if stock cruise is completely disabled, then we can use our own set speed logic self._update_v_cruise_non_pcm(CS, enabled, is_metric, reverse_acc) + self._update_v_cruise_slc(long_plan_sp) self.v_cruise_cluster_kph = self.v_cruise_kph self.update_button_timers(CS, enabled) else: @@ -102,6 +115,9 @@ class VCruiseHelper: if not enabled: return + if self.slc_state == SpeedLimitControlState.active and self.slc_state_prev == SpeedLimitControlState.preActive: + return + long_press = False button_type = None @@ -150,20 +166,7 @@ class VCruiseHelper: if CS.gasPressed and button_type in (ButtonType.decelCruise, ButtonType.setCruise): self.v_cruise_kph = max(self.v_cruise_kph, CS.vEgo * CV.MS_TO_KPH) - v_cruise_min = V_CRUISE_MIN - if not self.CP.pcmCruiseSpeed: - if self.CP.carName == "honda": - v_cruise_min = HONDA_V_CRUISE_MIN[is_metric] - elif self.CP.carName == "hyundai": - v_cruise_min = HYUNDAI_V_CRUISE_MIN[is_metric] - elif self.CP.carName == "chrysler": - v_cruise_min = FCA_V_CRUISE_MIN[is_metric] - elif self.CP.carName == "mazda": - v_cruise_min = MAZDA_V_CRUISE_MIN[is_metric] - elif self.CP.carName == "volkswagen": - v_cruise_min = VOLKSWAGEN_V_CRUISE_MIN[is_metric] - - self.v_cruise_kph = clip(round(self.v_cruise_kph, 1), v_cruise_min, V_CRUISE_MAX) + self.v_cruise_kph = clip(round(self.v_cruise_kph, 1), self.v_cruise_min, V_CRUISE_MAX) def update_button_timers(self, CS, enabled): # increment timer for buttons still pressed @@ -177,12 +180,12 @@ class VCruiseHelper: self.button_timers[b.type.raw] = 1 if b.pressed else 0 self.button_change_states[b.type.raw] = {"standstill": CS.cruiseState.standstill, "enabled": enabled} - def initialize_v_cruise(self, CS, experimental_mode: bool, is_metric) -> None: + def initialize_v_cruise(self, CS, experimental_mode: bool, is_metric, dynamic_experimental_control: bool) -> None: # initializing is handled by the PCM if self.CP.pcmCruise and self.CP.pcmCruiseSpeed: return - initial = V_CRUISE_INITIAL_EXPERIMENTAL_MODE if experimental_mode else V_CRUISE_INITIAL + initial = V_CRUISE_INITIAL_EXPERIMENTAL_MODE if experimental_mode and not dynamic_experimental_control else V_CRUISE_INITIAL resume_buttons = (ButtonType.accelCruise, ButtonType.resumeCruise) @@ -208,6 +211,31 @@ class VCruiseHelper: self.v_cruise_cluster_kph = self.v_cruise_kph + def _update_v_cruise_slc(self, long_plan_sp): + if self.slc_state == SpeedLimitControlState.active and self.slc_state_prev != SpeedLimitControlState.preActive: + return + + self.slc_speed_limit_offsetted = (long_plan_sp.speedLimit + long_plan_sp.speedLimitOffset) * CV.MS_TO_KPH + + if self.slc_state == SpeedLimitControlState.active and self.slc_state_prev == SpeedLimitControlState.preActive: + self.v_cruise_kph = clip(round(self.slc_speed_limit_offsetted, 1), self.v_cruise_min, V_CRUISE_MAX) + + self.slc_state_prev = self.slc_state + + def _update_v_cruise_min(self, is_metric): + if is_metric != self.is_metric_prev: + if self.CP.carName == "honda": + self.v_cruise_min = HONDA_V_CRUISE_MIN[is_metric] + elif self.CP.carName == "hyundai": + self.v_cruise_min = HYUNDAI_V_CRUISE_MIN[is_metric] + elif self.CP.carName == "chrysler": + self.v_cruise_min = FCA_V_CRUISE_MIN[is_metric] + elif self.CP.carName == "mazda": + self.v_cruise_min = MAZDA_V_CRUISE_MIN[is_metric] + elif self.CP.carName == "volkswagen": + self.v_cruise_min = VOLKSWAGEN_V_CRUISE_MIN[is_metric] + self.is_metric_prev = is_metric + def apply_deadzone(error, deadzone): if error > deadzone: @@ -229,11 +257,20 @@ def rate_limit(new_value, last_value, dw_step, up_step): return clip(new_value, last_value + dw_step, last_value + up_step) -def get_lag_adjusted_curvature(CP, v_ego, psis, curvatures, curvature_rates): +def clip_curvature(v_ego, prev_curvature, new_curvature): + v_ego = max(MIN_SPEED, v_ego) + max_curvature_rate = MAX_LATERAL_JERK / (v_ego**2) # inexact calculation, check https://github.com/commaai/openpilot/pull/24755 + safe_desired_curvature = clip(new_curvature, + prev_curvature - max_curvature_rate * DT_CTRL, + prev_curvature + max_curvature_rate * DT_CTRL) + + return safe_desired_curvature + + +def get_lag_adjusted_curvature(CP, v_ego, psis, curvatures): if len(psis) != CONTROL_N: psis = [0.0]*CONTROL_N curvatures = [0.0]*CONTROL_N - curvature_rates = [0.0]*CONTROL_N v_ego = max(MIN_SPEED, v_ego) # TODO this needs more thought, use .2s extra for now to estimate other delays @@ -243,21 +280,17 @@ def get_lag_adjusted_curvature(CP, v_ego, psis, curvatures, curvature_rates): # in high delay cases some corrections never even get commanded. So just use # psi to calculate a simple linearization of desired curvature current_curvature_desired = curvatures[0] - psi = interp(delay, T_IDXS[:CONTROL_N], psis) + psi = interp(delay, ModelConstants.T_IDXS[:CONTROL_N], psis) average_curvature_desired = psi / (v_ego * delay) desired_curvature = 2 * average_curvature_desired - current_curvature_desired # This is the "desired rate of the setpoint" not an actual desired rate - desired_curvature_rate = curvature_rates[0] max_curvature_rate = MAX_LATERAL_JERK / (v_ego**2) # inexact calculation, check https://github.com/commaai/openpilot/pull/24755 - safe_desired_curvature_rate = clip(desired_curvature_rate, - -max_curvature_rate, - max_curvature_rate) safe_desired_curvature = clip(desired_curvature, current_curvature_desired - max_curvature_rate * DT_MDL, current_curvature_desired + max_curvature_rate * DT_MDL) - return safe_desired_curvature, safe_desired_curvature_rate + return safe_desired_curvature def get_friction(lateral_accel_error: float, lateral_accel_deadzone: float, friction_threshold: float, @@ -277,3 +310,34 @@ def get_speed_error(modelV2: log.ModelDataV2, v_ego: float) -> float: vel_err = clip(modelV2.temporalPose.trans[0] - v_ego, -MAX_VEL_ERR, MAX_VEL_ERR) return float(vel_err) return 0.0 + + +def get_road_edge(carstate, model_v2, toggle): + # Lane detection by FrogAi + one_blinker = carstate.leftBlinker != carstate.rightBlinker + if not toggle: + road_edge = False + elif one_blinker: + # Set the minimum lane threshold to 3.0 meters + min_lane_threshold = 3.0 + # Set the blinker index based on which signal is on + blinker_index = 0 if carstate.leftBlinker else 1 + desired_edge = model_v2.roadEdges[blinker_index] + current_lane = model_v2.laneLines[blinker_index + 1] + # Check if both the desired lane and the current lane have valid x and y values + if all([desired_edge.x, desired_edge.y, current_lane.x, current_lane.y]) and len(desired_edge.x) == len(current_lane.x): + # Interpolate the x and y values to the same length + x = np.linspace(desired_edge.x[0], desired_edge.x[-1], num=len(desired_edge.x)) + lane_y = np.interp(x, current_lane.x, current_lane.y) + desired_y = np.interp(x, desired_edge.x, desired_edge.y) + # Calculate the width of the lane we're wanting to change into + lane_width = np.abs(desired_y - lane_y) + # Set road_edge to False if the lane width is not larger than the threshold + road_edge = not (np.amax(lane_width) > min_lane_threshold) + else: + road_edge = True + else: + # Default to setting "road_edge" to False + road_edge = False + + return road_edge diff --git a/selfdrive/controls/lib/dynamic_experimental_controller.py b/selfdrive/controls/lib/dynamic_experimental_controller.py new file mode 100644 index 0000000000..aa2e239b38 --- /dev/null +++ b/selfdrive/controls/lib/dynamic_experimental_controller.py @@ -0,0 +1,290 @@ +#!/usr/bin/env python3 +# The MIT License +# +# Copyright (c) 2019-, Rick Lan, dragonpilot community, and a number of other of contributors. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# Version = 2023-12-13 +from common.numpy_fast import interp +from openpilot.selfdrive.controls.lib.lateral_planner import TRAJECTORY_SIZE + +LEAD_WINDOW_SIZE = 5 +LEAD_PROB = 0.6 + +SLOW_DOWN_WINDOW_SIZE = 5 +SLOW_DOWN_PROB = 0.6 +SLOW_DOWN_BP = [0., 10., 20., 30., 40., 50., 55.] +SLOW_DOWN_DIST = [10, 30., 50., 70., 80., 90., 120.] + +SLOWNESS_WINDOW_SIZE = 20 +SLOWNESS_PROB = 0.6 +SLOWNESS_CRUISE_OFFSET = 1.05 + +DANGEROUS_TTC_WINDOW_SIZE = 5 +DANGEROUS_TTC = 2.0 + +HIGHWAY_CRUISE_KPH = 75 + +STOP_AND_GO_FRAME = 60 + +SET_MODE_TIMEOUT = 10 + +MPC_FCW_WINDOW_SIZE = 5 +MPC_FCW_PROB = 0.6 + + +class SNG_State: + off = 0 + stopped = 1 + going = 2 + + +class GenericMovingAverageCalculator: + def __init__(self, window_size): + self.window_size = window_size + self.data = [] + self.total = 0 + + def add_data(self, value): + if len(self.data) == self.window_size: + self.total -= self.data.pop(0) + self.data.append(value) + self.total += value + + def get_moving_average(self): + if len(self.data) == 0: + return None + return self.total / len(self.data) + + def reset_data(self): + self.data = [] + self.total = 0 + + +class DynamicExperimentalController: + def __init__(self): + self._is_enabled = False + self._mode = 'acc' + self._mode_prev = 'acc' + self._frame = 0 + + self._lead_gmac = GenericMovingAverageCalculator(window_size=LEAD_WINDOW_SIZE) + self._has_lead_filtered = False + self._has_lead_filtered_prev = False + + self._slow_down_gmac = GenericMovingAverageCalculator(window_size=SLOW_DOWN_WINDOW_SIZE) + self._has_slow_down = False + + self._has_blinkers = False + + self._slowness_gmac = GenericMovingAverageCalculator(window_size=SLOWNESS_WINDOW_SIZE) + self._has_slowness = False + + self._has_nav_enabled = False + + self._dangerous_ttc_gmac = GenericMovingAverageCalculator(window_size=DANGEROUS_TTC_WINDOW_SIZE) + self._has_dangerous_ttc = False + + self._v_ego_kph = 0. + self._v_cruise_kph = 0. + + self._has_lead = False + + self._has_standstill = False + self._has_standstill_prev = False + + self._sng_transit_frame = 0 + self._sng_state = SNG_State.off + + self._mpc_fcw_gmac = GenericMovingAverageCalculator(window_size=MPC_FCW_WINDOW_SIZE) + self._has_mpc_fcw = False + self._mpc_fcw_crash_cnt = 0 + + self._set_mode_timeout = 0 + pass + + def _update(self, car_state, lead_one, md, controls_state): + self._v_ego_kph = car_state.vEgo * 3.6 + self._v_cruise_kph = controls_state.vCruise + self._has_lead = lead_one.status + self._has_standstill = car_state.standstill + + # fcw detection + self._mpc_fcw_gmac.add_data(self._mpc_fcw_crash_cnt > 0) + self._has_mpc_fcw = self._mpc_fcw_gmac.get_moving_average() >= MPC_FCW_PROB + + # nav enable detection + self._has_nav_enabled = md.navEnabled + + # lead detection + self._lead_gmac.add_data(lead_one.status) + self._has_lead_filtered = self._lead_gmac.get_moving_average() >= LEAD_PROB + + # slow down detection + self._slow_down_gmac.add_data(len(md.orientation.x) == len(md.position.x) == TRAJECTORY_SIZE and md.position.x[TRAJECTORY_SIZE - 1] < interp(self._v_ego_kph, SLOW_DOWN_BP, SLOW_DOWN_DIST)) + self._has_slow_down = self._slow_down_gmac.get_moving_average() >= SLOW_DOWN_PROB + + # blinker detection + self._has_blinkers = car_state.leftBlinker or car_state.rightBlinker + + # sng detection + if self._has_standstill: + self._sng_state = SNG_State.stopped + self._sng_transit_frame = 0 + else: + if self._sng_transit_frame == 0: + if self._sng_state == SNG_State.stopped: + self._sng_state = SNG_State.going + self._sng_transit_frame = STOP_AND_GO_FRAME + elif self._sng_state == SNG_State.going: + self._sng_state = SNG_State.off + elif self._sng_transit_frame > 0: + self._sng_transit_frame -= 1 + + # slowness detection + if not self._has_standstill: + self._slowness_gmac.add_data(self._v_ego_kph <= (self._v_cruise_kph*SLOWNESS_CRUISE_OFFSET)) + self._has_slowness = self._slowness_gmac.get_moving_average() >= SLOWNESS_PROB + + # dangerous TTC detection + if not self._has_lead_filtered and self._has_lead_filtered_prev: + self._dangerous_ttc_gmac.reset_data() + self._has_dangerous_ttc = False + + if self._has_lead and car_state.vEgo >= 0.01: + self._dangerous_ttc_gmac.add_data(lead_one.dRel/car_state.vEgo) + + self._has_dangerous_ttc = self._dangerous_ttc_gmac.get_moving_average() is not None and self._dangerous_ttc_gmac.get_moving_average() <= DANGEROUS_TTC + + # keep prev values + self._has_standstill_prev = self._has_standstill + self._has_lead_filtered_prev = self._has_lead_filtered + self._frame += 1 + + def _blended_priority_mode(self): + # when mpc fcw crash prob is high + # use blended to slow down quickly + if self._has_mpc_fcw: + self._set_mode('blended') + return + + # when blinker is on and speed is driving below highway cruise speed: blended + # we dont want it to switch mode at higher speed, blended may trigger hard brake + if self._has_blinkers and self._v_ego_kph < HIGHWAY_CRUISE_KPH: + self._set_mode('blended') + return + + # when at highway cruise and SNG: blended + # ensuring blended mode is used because acc is bad at catching SNG lead car + # especially those who accel very fast and then brake very hard. + if self._sng_state == SNG_State.going and self._v_cruise_kph >= HIGHWAY_CRUISE_KPH: + self._set_mode('blended') + return + + # when standstill: blended + # in case of lead car suddenly move away under traffic light, acc mode wont brake at traffic light. + if self._has_standstill: + self._set_mode('blended') + return + + # when detecting slow down scenario: blended + # e.g. traffic light, curve, stop sign etc. + if self._has_slow_down: + self._set_mode('blended') + return + + # when detecting lead slow down: blended + # use blended for higher braking capability + if self._has_dangerous_ttc: + self._set_mode('blended') + return + + # car driving at speed lower than set speed: acc + if self._has_slowness: + self._set_mode('acc') + return + + self._set_mode('blended') + + def _acc_priority_mode(self): + # when mpc fcw crash prob is high + # use blended to slow down quickly + if self._has_mpc_fcw: + self._set_mode('blended') + return + + # If there is a filtered lead, the vehicle is not in standstill, and the lead vehicle's yRel meets the condition, + #if self._has_lead_filtered and not self._has_standstill: + # self._set_mode('acc') + # return + + # when blinker is on and speed is driving below highway cruise speed: blended + # we dont want it to switch mode at higher speed, blended may trigger hard brake + if self._has_blinkers and self._v_ego_kph < HIGHWAY_CRUISE_KPH: + self._set_mode('blended') + return + + # when standstill: blended + # in case of lead car suddenly move away under traffic light, acc mode wont brake at traffic light. + if self._has_standstill: + self._set_mode('blended') + return + + # when detecting slow down scenario: blended + # e.g. traffic light, curve, stop sign etc. + if self._has_slow_down: + self._set_mode('blended') + return + + # car driving at speed lower than set speed: acc + if self._has_slowness: + self._set_mode('acc') + return + + self._set_mode('acc') + + def get_mpc_mode(self, radar_unavailable, car_state, lead_one, md, controls_state): + if self._is_enabled: + self._update(car_state, lead_one, md, controls_state) + if radar_unavailable: + self._blended_priority_mode() + else: + self._acc_priority_mode() + + self._mode_prev = self._mode + return self._mode + + def set_enabled(self, enabled): + self._is_enabled = enabled + + def is_enabled(self): + return self._is_enabled + + def set_mpc_fcw_crash_cnt(self, crash_cnt): + self._mpc_fcw_crash_cnt = crash_cnt + + def _set_mode(self, mode): + if self._set_mode_timeout == 0: + self._mode = mode + if mode == "blended": + self._set_mode_timeout = SET_MODE_TIMEOUT + + if self._set_mode_timeout > 0: + self._set_mode_timeout -= 1 diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index 16b929b367..9b650a4df3 100755 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -258,6 +258,27 @@ def no_gps_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, m AlertStatus.normal, AlertSize.mid, Priority.LOWER, VisualAlert.none, AudibleAlert.none, .2, creation_delay=300.) + +def torque_nn_load_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int) -> Alert: + model_name = CP.lateralTuning.torque.nnModelName + if model_name in ("", "mock"): + return Alert( + "NN Lateral Controller Not Loaded", + '⚙️ -> "sunnypilot" for more details', + AlertStatus.userPrompt, AlertSize.mid, + Priority.LOW, VisualAlert.none, AudibleAlert.prompt, 6.0) + else: + fuzzy = CP.lateralTuning.torque.nnModelFuzzyMatch + alert_text_2 = '⚙️ -> "sunnypilot" for more details [Match = Fuzzy]' if fuzzy else "" + alert_status = AlertStatus.userPrompt if fuzzy else AlertStatus.normal + alert_size = AlertSize.mid if fuzzy else AlertSize.small + audible_alert = AudibleAlert.prompt if fuzzy else AudibleAlert.none + return Alert( + "NN Lateral Controller Loaded", + alert_text_2, + alert_status, alert_size, + Priority.LOW, VisualAlert.none, audible_alert, 6.0) + # *** debug alerts *** def out_of_space_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int) -> Alert: @@ -657,10 +678,10 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { EventName.speedLimitActive: { ET.WARNING: Alert( - "Cruise set to speed limit", + "Set speed changed to match posted speed limit", "", AlertStatus.normal, AlertSize.small, - Priority.LOW, VisualAlert.none, AudibleAlert.none, 2.), + Priority.LOW, VisualAlert.none, AudibleAlert.none, 3.), }, EventName.speedLimitValueChange: { @@ -675,6 +696,22 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { Priority.MID, VisualAlert.none, AudibleAlert.promptStarting, 1.5), }, + EventName.speedLimitPreActive: { + ET.WARNING: Alert( + "", + "", + AlertStatus.normal, AlertSize.none, + Priority.MID, VisualAlert.none, AudibleAlert.promptSingleLow, .45), + }, + + EventName.speedLimitConfirmed: { + ET.WARNING: Alert( + "", + "", + AlertStatus.normal, AlertSize.none, + Priority.MID, VisualAlert.none, AudibleAlert.promptSingleHigh, .45), + }, + # ********** events that affect controls state transitions ********** EventName.pcmEnable: { @@ -797,7 +834,7 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { EventName.sensorDataInvalid: { ET.PERMANENT: Alert( "Sensor Data Invalid", - "Ensure device is mounted securely", + "Possible Hardware Issue", AlertStatus.normal, AlertSize.mid, Priority.LOWER, VisualAlert.none, AudibleAlert.none, .2, creation_delay=1.), ET.NO_ENTRY: NoEntryAlert("Sensor Data Invalid"), @@ -1051,7 +1088,7 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { # For planning the trajectory Model Predictive Control (MPC) is used. This is # an optimization algorithm that is not guaranteed to find a feasible solution. # If no solution is found or the solution has a very high cost this alert is thrown. - EventName.plannerError: { + EventName.plannerErrorDEPRECATED: { ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Planner Solution Error"), ET.NO_ENTRY: NoEntryAlert("Planner Solution Error"), }, @@ -1100,37 +1137,37 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { ET.NO_ENTRY: NoEntryAlert("Vehicle Sensors Calibrating"), }, + EventName.torqueNNLoad: { + ET.PERMANENT: torque_nn_load_alert, + }, + } if __name__ == '__main__': # print all alerts by type and priority - from cereal.services import service_list - from collections import defaultdict, OrderedDict + from cereal.services import SERVICE_LIST + from collections import defaultdict event_names = {v: k for k, v in EventName.schema.enumerants.items()} - alerts_by_type: Dict[str, Dict[int, List[str]]] = defaultdict(lambda: defaultdict(list)) + alerts_by_type: Dict[str, Dict[Priority, List[str]]] = defaultdict(lambda: defaultdict(list)) CP = car.CarParams.new_message() CS = car.CarState.new_message() - sm = messaging.SubMaster(list(service_list.keys())) + sm = messaging.SubMaster(list(SERVICE_LIST.keys())) for i, alerts in EVENTS.items(): for et, alert in alerts.items(): if callable(alert): alert = alert(CP, CS, sm, False, 1) - priority = alert.priority - alerts_by_type[et][priority].append(event_names[i]) + alerts_by_type[et][alert.priority].append(event_names[i]) - all_alerts = {} + all_alerts: Dict[str, List[tuple[Priority, List[str]]]] = {} for et, priority_alerts in alerts_by_type.items(): - all_alerts[et] = OrderedDict([ - (str(priority), l) - for priority, l in sorted(priority_alerts.items(), key=lambda x: -int(x[0])) - ]) + all_alerts[et] = sorted(priority_alerts.items(), key=lambda x: x[0], reverse=True) for status, evs in sorted(all_alerts.items(), key=lambda x: x[0]): print(f"**** {status} ****") - for p, alert_list in evs.items(): - print(f" {p}:") + for p, alert_list in evs: + print(f" {repr(p)}:") print(" ", ', '.join(alert_list), "\n") diff --git a/selfdrive/controls/lib/lane_planner.py b/selfdrive/controls/lib/lane_planner.py index b32ccbd237..5032608dad 100644 --- a/selfdrive/controls/lib/lane_planner.py +++ b/selfdrive/controls/lib/lane_planner.py @@ -4,7 +4,7 @@ from openpilot.common.filter_simple import FirstOrderFilter from openpilot.common.numpy_fast import interp from openpilot.common.params import Params from openpilot.common.realtime import DT_MDL -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog TRAJECTORY_SIZE = 33 diff --git a/selfdrive/controls/lib/latcontrol.py b/selfdrive/controls/lib/latcontrol.py index 30e1918442..1e7c5aaf31 100644 --- a/selfdrive/controls/lib/latcontrol.py +++ b/selfdrive/controls/lib/latcontrol.py @@ -17,7 +17,7 @@ class LatControl(ABC): self.steer_max = 1.0 @abstractmethod - def update(self, active, CS, VM, params, last_actuators, steer_limited, desired_curvature, desired_curvature_rate, llk): + def update(self, active, CS, VM, params, steer_limited, desired_curvature, llk, model_data=None): pass def reset(self): diff --git a/selfdrive/controls/lib/latcontrol_angle.py b/selfdrive/controls/lib/latcontrol_angle.py index b13d41e51c..c532124385 100644 --- a/selfdrive/controls/lib/latcontrol_angle.py +++ b/selfdrive/controls/lib/latcontrol_angle.py @@ -11,7 +11,7 @@ class LatControlAngle(LatControl): super().__init__(CP, CI) self.sat_check_min_speed = 5. - def update(self, active, CS, VM, params, last_actuators, steer_limited, desired_curvature, desired_curvature_rate, llk): + def update(self, active, CS, VM, params, steer_limited, desired_curvature, llk, model_data=None): angle_log = log.ControlsState.LateralAngleState.new_message() if not active: diff --git a/selfdrive/controls/lib/latcontrol_pid.py b/selfdrive/controls/lib/latcontrol_pid.py index c41130af95..eb63588f0d 100644 --- a/selfdrive/controls/lib/latcontrol_pid.py +++ b/selfdrive/controls/lib/latcontrol_pid.py @@ -17,7 +17,7 @@ class LatControlPID(LatControl): super().reset() self.pid.reset() - def update(self, active, CS, VM, params, last_actuators, steer_limited, desired_curvature, desired_curvature_rate, llk): + def update(self, active, CS, VM, params, steer_limited, desired_curvature, llk, model_data=None): pid_log = log.ControlsState.LateralPIDState.new_message() pid_log.steeringAngleDeg = float(CS.steeringAngleDeg) pid_log.steeringRateDeg = float(CS.steeringRateDeg) diff --git a/selfdrive/controls/lib/latcontrol_torque.py b/selfdrive/controls/lib/latcontrol_torque.py index bde6989dcb..4e0d69a6ea 100644 --- a/selfdrive/controls/lib/latcontrol_torque.py +++ b/selfdrive/controls/lib/latcontrol_torque.py @@ -1,11 +1,17 @@ +from collections import deque import math +import numpy as np -from cereal import log +from cereal import log, custom +from openpilot.common.filter_simple import FirstOrderFilter from openpilot.common.numpy_fast import interp +from openpilot.selfdrive.car.interfaces import LatControlInputs from openpilot.common.params import Params +from openpilot.selfdrive.controls.lib.drive_helpers import CONTROL_N, apply_deadzone 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 +from openpilot.selfdrive.modeld.constants import ModelConstants # At higher speeds (25+mph) we can assume: # Lateral acceleration achieved by a specific car correlates to @@ -20,6 +26,46 @@ from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_G LOW_SPEED_X = [0, 10, 20, 30] LOW_SPEED_Y = [15, 13, 10, 5] +LOW_SPEED_Y_NN = [12, 3, 1, 0] + +LAT_PLAN_MIN_IDX = 5 + + +def get_predicted_lateral_jerk(lat_accels, t_diffs): + # compute finite difference between subsequent model_data.acceleration.y values + # this is just two calls of np.diff followed by an element-wise division + lat_accel_diffs = np.diff(lat_accels) + lat_jerk = lat_accel_diffs / t_diffs + # return as python list + return lat_jerk.tolist() + + +def sign(x): + return 1.0 if x > 0.0 else (-1.0 if x < 0.0 else 0.0) + + +def get_lookahead_value(future_vals, current_val): + if len(future_vals) == 0: + return current_val + + same_sign_vals = [v for v in future_vals if sign(v) == sign(current_val)] + + # if any future val has opposite sign of current val, return 0 + if len(same_sign_vals) < len(future_vals): + return 0.0 + + # otherwise return the value with minimum absolute value + min_val = min(same_sign_vals + [current_val], key=lambda x: abs(x)) + return min_val + + +# At a given roll, if pitch magnitude increases, the +# gravitational acceleration component starts pointing +# in the longitudinal direction, decreasing the lateral +# acceleration component. Here we do the same thing +# to the roll value itself, then passed to nnff. +def roll_pitch_adjust(roll, pitch): + return roll * math.cos(pitch) class LatControlTorque(LatControl): @@ -31,11 +77,59 @@ class LatControlTorque(LatControl): 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 + self._pid_long_sp = custom.ControlsStateSP.LateralTorqueState.new_message() self.param_s = Params() self.torqued_override = self.param_s.get_bool("TorquedOverride") self._frame = 0 + self.use_lateral_jerk = False # TODO: make this a parameter in the UI + + # Twilsonco's Lateral Neural Network Feedforward + self.use_nn = CI.has_lateral_torque_nn + + if self.use_nn or self.use_lateral_jerk: + # Instantaneous lateral jerk changes very rapidly, making it not useful on its own, + # however, we can "look ahead" to the future planned lateral jerk in order to guage + # whether the current desired lateral jerk will persist into the future, i.e. + # whether it's "deliberate" or not. This lets us simply ignore short-lived jerk. + # Note that LAT_PLAN_MIN_IDX is defined above and is used in order to prevent + # using a "future" value that is actually planned to occur before the "current" desired + # value, which is offset by the steerActuatorDelay. + self.friction_look_ahead_v = [1.4, 2.0] # how many seconds in the future to look ahead in [0, ~2.1] in 0.1 increments + self.friction_look_ahead_bp = [9.0, 30.0] # corresponding speeds in m/s in [0, ~40] in 1.0 increments + + # Scaling the lateral acceleration "friction response" could be helpful for some. + # Increase for a stronger response, decrease for a weaker response. + self.lat_jerk_friction_factor = 0.4 + self.lat_accel_friction_factor = 0.7 # in [0, 3], in 0.05 increments. 3 is arbitrary safety limit + + # precompute time differences between ModelConstants.T_IDXS + self.t_diffs = np.diff(ModelConstants.T_IDXS) + self.desired_lat_jerk_time = CP.steerActuatorDelay + 0.3 + if self.use_nn: + self.pitch = FirstOrderFilter(0.0, 0.5, 0.01) + # NN model takes current v_ego, lateral_accel, lat accel/jerk error, roll, and past/future/planned data + # of lat accel and roll + # Past value is computed using previous desired lat accel and observed roll + self.torque_from_nn = CI.get_ff_nn + self.nn_friction_override = CI.lat_torque_nn_model.friction_override + + # setup future time offsets + self.nn_time_offset = CP.steerActuatorDelay + 0.2 + future_times = [0.3, 0.6, 1.0, 1.5] # seconds in the future + self.nn_future_times = [i + self.nn_time_offset for i in future_times] + self.nn_future_times_np = np.array(self.nn_future_times) + + # setup past time offsets + self.past_times = [-0.3, -0.2, -0.1] + history_check_frames = [int(abs(i)*100) for i in self.past_times] + self.history_frame_offsets = [history_check_frames[0] - i for i in history_check_frames] + self.lateral_accel_desired_deque = deque(maxlen=history_check_frames[0]) + self.roll_deque = deque(maxlen=history_check_frames[0]) + self.error_deque = deque(maxlen=history_check_frames[0]) + self.past_future_len = len(self.past_times) + len(self.nn_future_times) + def update_live_torque_params(self, latAccelFactor, latAccelOffset, friction): self.torque_params.latAccelFactor = latAccelFactor self.torque_params.latAccelOffset = latAccelOffset @@ -52,19 +146,31 @@ class LatControlTorque(LatControl): self.torque_params.latAccelFactor = float(self.param_s.get("TorqueMaxLatAccel", encoding="utf8")) * 0.01 self.torque_params.friction = float(self.param_s.get("TorqueFriction", encoding="utf8")) * 0.01 - def update(self, active, CS, VM, params, last_actuators, steer_limited, desired_curvature, desired_curvature_rate, llk): + @property + def pid_long_sp(self): + return self._pid_long_sp + + def update(self, active, CS, VM, params, steer_limited, desired_curvature, llk, model_data=None): self.update_live_tune() pid_log = log.ControlsState.LateralTorqueState.new_message() + pid_log_sp = custom.ControlsStateSP.LateralTorqueState.new_message() + nn_log = None + if not active: output_torque = 0.0 pid_log.active = False else: + actual_curvature_vm = -VM.calc_curvature(math.radians(CS.steeringAngleDeg - params.angleOffsetDeg), CS.vEgo, params.roll) + roll_compensation = params.roll * ACCELERATION_DUE_TO_GRAVITY + actual_lateral_jerk = 0.0 if self.use_steering_angle: - actual_curvature = -VM.calc_curvature(math.radians(CS.steeringAngleDeg - params.angleOffsetDeg), CS.vEgo, params.roll) + actual_curvature = actual_curvature_vm curvature_deadzone = abs(VM.calc_curvature(math.radians(self.steering_angle_deadzone_deg), CS.vEgo, 0.0)) + if self.use_nn or self.use_lateral_jerk: + actual_curvature_rate = -VM.calc_curvature(math.radians(CS.steeringRateDeg), CS.vEgo, 0.0) + actual_lateral_jerk = actual_curvature_rate * CS.vEgo ** 2 else: - actual_curvature_vm = -VM.calc_curvature(math.radians(CS.steeringAngleDeg - params.angleOffsetDeg), CS.vEgo, params.roll) actual_curvature_llk = llk.angularVelocityCalibrated.value[2] / CS.vEgo actual_curvature = interp(CS.vEgo, [2.0, 5.0], [actual_curvature_vm, actual_curvature_llk]) curvature_deadzone = 0.0 @@ -75,18 +181,86 @@ class LatControlTorque(LatControl): actual_lateral_accel = actual_curvature * CS.vEgo ** 2 lateral_accel_deadzone = curvature_deadzone * CS.vEgo ** 2 - low_speed_factor = interp(CS.vEgo, LOW_SPEED_X, LOW_SPEED_Y)**2 + low_speed_factor = interp(CS.vEgo, LOW_SPEED_X, LOW_SPEED_Y if not self.use_nn else LOW_SPEED_Y_NN)**2 setpoint = desired_lateral_accel + low_speed_factor * desired_curvature measurement = actual_lateral_accel + low_speed_factor * actual_curvature - gravity_adjusted_lateral_accel = desired_lateral_accel - params.roll * ACCELERATION_DUE_TO_GRAVITY - torque_from_setpoint = self.torque_from_lateral_accel(setpoint, self.torque_params, setpoint, - lateral_accel_deadzone, friction_compensation=False) - torque_from_measurement = self.torque_from_lateral_accel(measurement, self.torque_params, measurement, - lateral_accel_deadzone, friction_compensation=False) - pid_log.error = torque_from_setpoint - torque_from_measurement - ff = self.torque_from_lateral_accel(gravity_adjusted_lateral_accel, self.torque_params, - desired_lateral_accel - actual_lateral_accel, - lateral_accel_deadzone, friction_compensation=True) + + lateral_jerk_setpoint = 0 + lateral_jerk_measurement = 0 + lookahead_lateral_jerk = 0 + + if self.use_nn or self.use_lateral_jerk: + # prepare "look-ahead" desired lateral jerk + lookahead = interp(CS.vEgo, self.friction_look_ahead_bp, self.friction_look_ahead_v) + friction_upper_idx = next((i for i, val in enumerate(ModelConstants.T_IDXS) if val > lookahead), 16) + predicted_lateral_jerk = get_predicted_lateral_jerk(model_data.acceleration.y, self.t_diffs) + desired_lateral_jerk = (interp(self.desired_lat_jerk_time, ModelConstants.T_IDXS, model_data.acceleration.y) - actual_lateral_accel) / self.desired_lat_jerk_time + lookahead_lateral_jerk = get_lookahead_value(predicted_lateral_jerk[LAT_PLAN_MIN_IDX:friction_upper_idx], desired_lateral_jerk) + if self.use_steering_angle or lookahead_lateral_jerk == 0.0: + lookahead_lateral_jerk = 0.0 + actual_lateral_jerk = 0.0 + self.lat_accel_friction_factor = 1.0 + lateral_jerk_setpoint = self.lat_jerk_friction_factor * lookahead_lateral_jerk + lateral_jerk_measurement = self.lat_jerk_friction_factor * actual_lateral_jerk + + model_good = model_data is not None and len(model_data.orientation.x) >= CONTROL_N + if self.use_nn and model_good: + # update past data + roll = params.roll + pitch = self.pitch.update(llk.calibratedOrientationNED.value[1]) + roll = roll_pitch_adjust(roll, pitch) + self.roll_deque.append(roll) + self.lateral_accel_desired_deque.append(desired_lateral_accel) + + # prepare past and future values + # adjust future times to account for longitudinal acceleration + adjusted_future_times = [t + 0.5*CS.aEgo*(t/max(CS.vEgo, 1.0)) for t in self.nn_future_times] + past_rolls = [self.roll_deque[min(len(self.roll_deque)-1, i)] for i in self.history_frame_offsets] + future_rolls = [roll_pitch_adjust(interp(t, ModelConstants.T_IDXS, model_data.orientation.x) + roll, interp(t, ModelConstants.T_IDXS, model_data.orientation.y) + pitch) for t in adjusted_future_times] + past_lateral_accels_desired = [self.lateral_accel_desired_deque[min(len(self.lateral_accel_desired_deque)-1, i)] for i in self.history_frame_offsets] + future_planned_lateral_accels = [interp(t, ModelConstants.T_IDXS[:CONTROL_N], model_data.acceleration.y) for t in adjusted_future_times] + + # compute NNFF error response + nnff_setpoint_input = [CS.vEgo, setpoint, lateral_jerk_setpoint, roll] \ + + [setpoint] * self.past_future_len \ + + past_rolls + future_rolls + # past lateral accel error shouldn't count, so use past desired like the setpoint input + nnff_measurement_input = [CS.vEgo, measurement, lateral_jerk_measurement, roll] \ + + [measurement] * self.past_future_len \ + + past_rolls + future_rolls + torque_from_setpoint = self.torque_from_nn(nnff_setpoint_input) + torque_from_measurement = self.torque_from_nn(nnff_measurement_input) + pid_log.error = torque_from_setpoint - torque_from_measurement + + # compute feedforward (same as nn setpoint output) + error = setpoint - measurement + friction_input = self.lat_accel_friction_factor * error + self.lat_jerk_friction_factor * lookahead_lateral_jerk + nn_input = [CS.vEgo, desired_lateral_accel, friction_input, roll] \ + + past_lateral_accels_desired + future_planned_lateral_accels \ + + past_rolls + future_rolls + ff = self.torque_from_nn(nn_input) + + # apply friction override for cars with low NN friction response + if self.nn_friction_override: + pid_log.error += self.torque_from_lateral_accel(LatControlInputs(0.0, 0.0, CS.vEgo, CS.aEgo), self.torque_params, + friction_input, + lateral_accel_deadzone, friction_compensation=True, gravity_adjusted=False) + nn_log = nn_input + nnff_setpoint_input + nnff_measurement_input + else: + gravity_adjusted_lateral_accel = desired_lateral_accel - roll_compensation + torque_from_setpoint = self.torque_from_lateral_accel(LatControlInputs(setpoint, roll_compensation, CS.vEgo, CS.aEgo), self.torque_params, + lateral_jerk_setpoint, lateral_accel_deadzone, friction_compensation=self.use_lateral_jerk, gravity_adjusted=False) + torque_from_measurement = self.torque_from_lateral_accel(LatControlInputs(measurement, roll_compensation, CS.vEgo, CS.aEgo), self.torque_params, + lateral_jerk_measurement, lateral_accel_deadzone, friction_compensation=self.use_lateral_jerk, gravity_adjusted=False) + pid_log.error = torque_from_setpoint - torque_from_measurement + error = desired_lateral_accel - actual_lateral_accel + if self.use_lateral_jerk: + friction_input = self.lat_accel_friction_factor * error + self.lat_jerk_friction_factor * lookahead_lateral_jerk + else: + friction_input = error + ff = self.torque_from_lateral_accel(LatControlInputs(gravity_adjusted_lateral_accel, roll_compensation, CS.vEgo, CS.aEgo), self.torque_params, + friction_input, lateral_accel_deadzone, friction_compensation=True, + gravity_adjusted=True) freeze_integrator = steer_limited or CS.steeringPressed or CS.vEgo < 5 output_torque = self.pid.update(pid_log.error, @@ -103,6 +277,9 @@ class LatControlTorque(LatControl): pid_log.actualLateralAccel = actual_lateral_accel pid_log.desiredLateralAccel = desired_lateral_accel pid_log.saturated = self._check_saturation(self.steer_max - abs(output_torque) < 1e-3, CS, steer_limited) + if nn_log is not None: + pid_log_sp.nnLog = nn_log + self._pid_long_sp = pid_log_sp # TODO left is positive in this convention return -output_torque, 0.0, pid_log diff --git a/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py b/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py index 5e6f884df4..83ec3b3a13 100755 --- a/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py +++ b/selfdrive/controls/lib/lateral_mpc_lib/lat_mpc.py @@ -5,7 +5,7 @@ import numpy as np from casadi import SX, vertcat, sin, cos # WARNING: imports outside of constants will not trigger a rebuild -from openpilot.selfdrive.modeld.constants import T_IDXS +from openpilot.selfdrive.modeld.constants import ModelConstants if __name__ == '__main__': # generating code from openpilot.third_party.acados.acados_template import AcadosModel, AcadosOcp, AcadosOcpSolver @@ -66,7 +66,7 @@ def gen_lat_ocp(): ocp = AcadosOcp() ocp.model = gen_lat_model() - Tf = np.array(T_IDXS)[N] + Tf = np.array(ModelConstants.T_IDXS)[N] # set dimensions ocp.dims.N = N @@ -122,7 +122,7 @@ def gen_lat_ocp(): # set prediction horizon ocp.solver_options.tf = Tf - ocp.solver_options.shooting_nodes = np.array(T_IDXS)[:N+1] + ocp.solver_options.shooting_nodes = np.array(ModelConstants.T_IDXS)[:N+1] ocp.code_export_directory = EXPORT_DIR return ocp diff --git a/selfdrive/controls/lib/lateral_planner.py b/selfdrive/controls/lib/lateral_planner.py index 00d528716a..c6e921c6df 100644 --- a/selfdrive/controls/lib/lateral_planner.py +++ b/selfdrive/controls/lib/lateral_planner.py @@ -4,12 +4,13 @@ from openpilot.common.conversions import Conversions as CV from openpilot.common.realtime import DT_MDL from openpilot.common.numpy_fast import interp from openpilot.common.params import Params -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.controls.lib.lateral_mpc_lib.lat_mpc import LateralMpc from openpilot.selfdrive.controls.lib.lateral_mpc_lib.lat_mpc import N as LAT_MPC_N from openpilot.selfdrive.controls.lib.lane_planner import LanePlanner, TRAJECTORY_SIZE -from openpilot.selfdrive.controls.lib.drive_helpers import CONTROL_N, MIN_SPEED, get_speed_error +from openpilot.selfdrive.controls.lib.drive_helpers import CONTROL_N, MIN_SPEED, get_speed_error, get_road_edge from openpilot.selfdrive.controls.lib.desire_helper import DesireHelper + import cereal.messaging as messaging from cereal import log @@ -28,8 +29,7 @@ STEERING_RATE_COST = 700.0 class LateralPlanner: - def __init__(self, CP, debug=False, use_lanelines=True): - self.use_lanelines = use_lanelines + def __init__(self, CP, debug=False, model_use_lateral_planner=False): self.LP = LanePlanner() self.DH = DesireHelper() @@ -46,7 +46,8 @@ class LateralPlanner: self.t_idxs = np.arange(TRAJECTORY_SIZE) self.y_pts = np.zeros((TRAJECTORY_SIZE,)) self.v_plan = np.zeros((TRAJECTORY_SIZE,)) - self.v_ego = 0.0 + self.x_sol = np.zeros((TRAJECTORY_SIZE, 4), dtype=np.float32) + self.v_ego = MIN_SPEED self.l_lane_change_prob = 0.0 self.r_lane_change_prob = 0.0 self.d_path_w_lines_xyz = np.zeros((TRAJECTORY_SIZE, 3)) @@ -57,7 +58,6 @@ class LateralPlanner: self.reset_mpc(np.zeros(4)) self.param_s = Params() - self.dynamic_lane_profile_enabled = self.param_s.get_bool("DynamicLaneProfileToggle") self.dynamic_lane_profile = int(self.param_s.get("DynamicLaneProfile", encoding="utf8")) self.dynamic_lane_profile_status = True self.dynamic_lane_profile_status_buffer = False @@ -67,14 +67,19 @@ class LateralPlanner: self.vision_curve_laneless = self.param_s.get_bool("VisionCurveLaneless") + self.road_edge = False + self.edge_toggle = self.param_s.get_bool("RoadEdge") + self.param_read_counter = 0 self.read_param() + self.model_use_lateral_planner = model_use_lateral_planner + def read_param(self): self.dynamic_lane_profile = int(self.param_s.get("DynamicLaneProfile", encoding='utf8')) if self.param_read_counter % 50 == 0: - self.dynamic_lane_profile_enabled = self.param_s.get_bool("DynamicLaneProfileToggle") self.vision_curve_laneless = self.param_s.get_bool("VisionCurveLaneless") + self.edge_toggle = self.param_s.get_bool("RoadEdge") self.param_read_counter += 1 def reset_mpc(self, x0=None): @@ -92,79 +97,88 @@ class LateralPlanner: # Parse model predictions md = sm['modelV2'] - self.LP.parse_model(md) - if len(md.position.x) == TRAJECTORY_SIZE and len(md.orientation.x) == TRAJECTORY_SIZE: - self.path_xyz = np.column_stack([md.position.x, md.position.y, md.position.z]) - self.t_idxs = np.array(md.position.t) - self.plan_yaw = np.array(md.orientation.z) - self.plan_yaw_rate = np.array(md.orientationRate.z) - self.velocity_xyz = np.column_stack([md.velocity.x, md.velocity.y, md.velocity.z]) - car_speed = np.linalg.norm(self.velocity_xyz, axis=1) - get_speed_error(md, v_ego_car) - self.v_plan = np.clip(car_speed, MIN_SPEED, np.inf) - self.v_ego = self.v_plan[0] - # Lane change logic - lane_change_prob = self.LP.l_lane_change_prob + self.LP.r_lane_change_prob - self.DH.update(sm['carState'], sm['carControl'].latActive, lane_change_prob, md) + if self.model_use_lateral_planner: + self.LP.parse_model(md) + if len(md.position.x) == TRAJECTORY_SIZE and (len(md.orientation.x) == TRAJECTORY_SIZE or + (len(md.velocity.x) == TRAJECTORY_SIZE and len(md.lateralPlannerSolutionDEPRECATED.x) == TRAJECTORY_SIZE)): + if len(md.orientation.x) == TRAJECTORY_SIZE: + self.t_idxs = np.array(md.position.t) + self.plan_yaw = np.array(md.orientation.z) + self.plan_yaw_rate = np.array(md.orientationRate.z) + if len(md.velocity.x) == TRAJECTORY_SIZE and len(md.lateralPlannerSolutionDEPRECATED.x) == TRAJECTORY_SIZE: + self.x_sol = np.column_stack([md.lateralPlannerSolutionDEPRECATED.x, md.lateralPlannerSolutionDEPRECATED.y, md.lateralPlannerSolutionDEPRECATED.yaw, md.lateralPlannerSolutionDEPRECATED.yawRate]) + self.path_xyz = np.column_stack([md.position.x, md.position.y, md.position.z]) + self.velocity_xyz = np.column_stack([md.velocity.x, md.velocity.y, md.velocity.z]) + car_speed = np.linalg.norm(self.velocity_xyz, axis=1) - get_speed_error(md, v_ego_car) + self.v_plan = np.clip(car_speed, MIN_SPEED, np.inf) + self.v_ego = self.v_plan[0] - # Turn off lanes during lane change - if self.DH.desire == log.LateralPlan.Desire.laneChangeRight or self.DH.desire == log.LateralPlan.Desire.laneChangeLeft: - self.LP.lll_prob *= self.DH.lane_change_ll_prob - self.LP.rll_prob *= self.DH.lane_change_ll_prob + # Lane change logic + lane_change_prob = self.LP.l_lane_change_prob + self.LP.r_lane_change_prob + self.DH.update(sm['carState'], sm['carControl'].latActive, lane_change_prob, model_data=md) - low_speed = v_ego_car < 10 * CV.MPH_TO_MS + # Turn off lanes during lane change + if self.DH.desire == log.LateralPlan.Desire.laneChangeRight or self.DH.desire == log.LateralPlan.Desire.laneChangeLeft: + self.LP.lll_prob *= self.DH.lane_change_ll_prob + self.LP.rll_prob *= self.DH.lane_change_ll_prob + self.d_path_w_lines_xyz = self.LP.get_d_path(self.v_ego, self.t_idxs, self.path_xyz) - if not self.get_dynamic_lane_profile(sm['longitudinalPlanSP']) and not low_speed: - self.path_xyz = self.LP.get_d_path(self.v_ego, self.t_idxs, self.path_xyz) - self.dynamic_lane_profile_status = False - else: - self.path_xyz[:, 1] += self.LP.path_offset - self.dynamic_lane_profile_status = True + low_speed = v_ego_car < 10 * CV.MPH_TO_MS - self.lat_mpc.set_weights(PATH_COST, LATERAL_MOTION_COST, - LATERAL_ACCEL_COST, LATERAL_JERK_COST, - STEERING_RATE_COST) + if not self.get_dynamic_lane_profile(sm['longitudinalPlanSP']) and not low_speed: + self.path_xyz = self.d_path_w_lines_xyz + self.dynamic_lane_profile_status = False + else: + self.path_xyz[:, 1] += self.LP.path_offset + self.dynamic_lane_profile_status = True - y_pts = self.path_xyz[:LAT_MPC_N+1, 1] - heading_pts = self.plan_yaw[:LAT_MPC_N+1] - yaw_rate_pts = self.plan_yaw_rate[:LAT_MPC_N+1] - self.y_pts = y_pts + if not self.dynamic_lane_profile_status: + self.lat_mpc.set_weights(PATH_COST, LATERAL_MOTION_COST, + LATERAL_ACCEL_COST, LATERAL_JERK_COST, + STEERING_RATE_COST) - assert len(y_pts) == LAT_MPC_N + 1 - assert len(heading_pts) == LAT_MPC_N + 1 - assert len(yaw_rate_pts) == LAT_MPC_N + 1 - lateral_factor = np.clip(self.factor1 - (self.factor2 * self.v_plan**2), 0.0, np.inf) - p = np.column_stack([self.v_plan, lateral_factor]) - self.lat_mpc.run(self.x0, - p, - y_pts, - heading_pts, - yaw_rate_pts) - # init state for next iteration - # mpc.u_sol is the desired second derivative of psi given x0 curv state. - # with x0[3] = measured_yaw_rate, this would be the actual desired yaw rate. - # instead, interpolate x_sol so that x0[3] is the desired yaw rate for lat_control. - self.x0[3] = interp(DT_MDL, self.t_idxs[:LAT_MPC_N + 1], self.lat_mpc.x_sol[:, 3]) + y_pts = self.path_xyz[:LAT_MPC_N+1, 1] + heading_pts = self.plan_yaw[:LAT_MPC_N+1] + yaw_rate_pts = self.plan_yaw_rate[:LAT_MPC_N+1] + self.y_pts = y_pts - # Check for infeasible MPC solution - mpc_nans = np.isnan(self.lat_mpc.x_sol[:, 3]).any() - t = time.monotonic() - if mpc_nans or self.lat_mpc.solution_status != 0: - self.reset_mpc() - self.x0[3] = measured_curvature * self.v_ego - if t > self.last_cloudlog_t + 5.0: - self.last_cloudlog_t = t - cloudlog.warning("Lateral mpc - nan: True") + assert len(y_pts) == LAT_MPC_N + 1 + assert len(heading_pts) == LAT_MPC_N + 1 + assert len(yaw_rate_pts) == LAT_MPC_N + 1 + lateral_factor = np.clip(self.factor1 - (self.factor2 * self.v_plan**2), 0.0, np.inf) + p = np.column_stack([self.v_plan, lateral_factor]) + self.lat_mpc.run(self.x0, + p, + y_pts, + heading_pts, + yaw_rate_pts) + # init state for next iteration + # mpc.u_sol is the desired second derivative of psi given x0 curv state. + # with x0[3] = measured_yaw_rate, this would be the actual desired yaw rate. + # instead, interpolate x_sol so that x0[3] is the desired yaw rate for lat_control. + self.x0[3] = interp(DT_MDL, self.t_idxs[:LAT_MPC_N + 1], self.lat_mpc.x_sol[:, 3]) - if self.lat_mpc.cost > 1e6 or mpc_nans: - self.solution_invalid_cnt += 1 - else: - self.solution_invalid_cnt = 0 + # Check for infeasible MPC solution + mpc_nans = np.isnan(self.lat_mpc.x_sol[:, 3]).any() + t = time.monotonic() + if mpc_nans or self.lat_mpc.solution_status != 0: + self.reset_mpc() + self.x0[3] = measured_curvature * self.v_ego + if t > self.last_cloudlog_t + 5.0: + self.last_cloudlog_t = t + cloudlog.warning("Lateral mpc - nan: True") + + if self.lat_mpc.cost > 1e6 or mpc_nans: + self.solution_invalid_cnt += 1 + else: + self.solution_invalid_cnt = 0 + + if not self.model_use_lateral_planner: + self.road_edge = get_road_edge(sm['carState'], md, self.edge_toggle) def get_dynamic_lane_profile(self, longitudinal_plan_sp): - if not self.dynamic_lane_profile_enabled: - return True - elif self.dynamic_lane_profile == 1: + if self.dynamic_lane_profile == 1: return True elif self.dynamic_lane_profile == 0: return False @@ -189,55 +203,52 @@ class LateralPlanner: def publish(self, sm, pm): plan_solution_valid = self.solution_invalid_cnt < 2 - plan_send = messaging.new_message('lateralPlan') + plan_send = messaging.new_message('lateralPlanDEPRECATED') plan_send.valid = sm.all_checks(service_list=['carState', 'controlsState', 'modelV2']) - lateralPlan = plan_send.lateralPlan - lateralPlan.modelMonoTime = sm.logMonoTime['modelV2'] - lateralPlan.dPathPoints = self.y_pts.tolist() - lateralPlan.psis = self.lat_mpc.x_sol[0:CONTROL_N, 2].tolist() + lateralPlanDEPRECATED = plan_send.lateralPlanDEPRECATED + lateralPlanDEPRECATED.modelMonoTime = sm.logMonoTime['modelV2'] + lateralPlanDEPRECATED.dPathPoints = self.path_xyz[:,1].tolist() if self.dynamic_lane_profile_status else self.y_pts.tolist() + lateralPlanDEPRECATED.psis = self.x_sol[0:CONTROL_N, 2].tolist() if self.dynamic_lane_profile_status else self.lat_mpc.x_sol[0:CONTROL_N, 2].tolist() - lateralPlan.curvatures = (self.lat_mpc.x_sol[0:CONTROL_N, 3]/self.v_ego).tolist() - lateralPlan.curvatureRates = [float(x.item() / self.v_ego) for x in self.lat_mpc.u_sol[0:CONTROL_N - 1]] + [0.0] + lateralPlanDEPRECATED.curvatures = (self.x_sol[0:CONTROL_N, 3]/self.v_ego).tolist() if self.dynamic_lane_profile_status else (self.lat_mpc.x_sol[0:CONTROL_N, 3]/self.v_ego).tolist() + lateralPlanDEPRECATED.curvatureRates = [float(0) for _ in range(CONTROL_N-1)] if self.dynamic_lane_profile_status else [float(x.item() / self.v_ego) for x in self.lat_mpc.u_sol[0:CONTROL_N - 1]] + [0.0] # TODO: unused - lateralPlan.mpcSolutionValid = bool(plan_solution_valid) - lateralPlan.solverExecutionTime = self.lat_mpc.solve_time + lateralPlanDEPRECATED.mpcSolutionValid = bool(1) if self.dynamic_lane_profile_status else bool(plan_solution_valid) + lateralPlanDEPRECATED.solverExecutionTime = 0.0 if self.dynamic_lane_profile_status else self.lat_mpc.solve_time if self.debug_mode: - lateralPlan.solverCost = self.lat_mpc.cost - lateralPlan.solverState = log.LateralPlan.SolverState.new_message() - lateralPlan.solverState.x = self.lat_mpc.x_sol.tolist() - lateralPlan.solverState.u = self.lat_mpc.u_sol.flatten().tolist() + lateralPlanDEPRECATED.solverState.x = self.x_sol.tolist() if self.dynamic_lane_profile_status else self.lat_mpc.x_sol.tolist() + if not self.dynamic_lane_profile_status: + lateralPlanDEPRECATED.solverCost = self.lat_mpc.cost + lateralPlanDEPRECATED.solverState = log.LateralPlan.SolverState.new_message() + lateralPlanDEPRECATED.solverState.u = self.lat_mpc.u_sol.flatten().tolist() - lateralPlan.desire = self.DH.desire - lateralPlan.useLaneLines = self.use_lanelines - lateralPlan.laneChangeState = self.DH.lane_change_state - lateralPlan.laneChangeDirection = self.DH.lane_change_direction + lateralPlanDEPRECATED.desire = self.DH.desire + lateralPlanDEPRECATED.useLaneLines = not self.dynamic_lane_profile_status + lateralPlanDEPRECATED.laneChangeState = self.DH.lane_change_state + lateralPlanDEPRECATED.laneChangeDirection = self.DH.lane_change_direction - pm.send('lateralPlan', plan_send) + pm.send('lateralPlanDEPRECATED', plan_send) - plan_sp_send = messaging.new_message('lateralPlanSP') + plan_sp_send = messaging.new_message('lateralPlanSPDEPRECATED') plan_sp_send.valid = sm.all_checks(service_list=['carState', 'controlsState', 'modelV2']) - lateralPlanSP = plan_sp_send.lateralPlanSP + lateralPlanSPDEPRECATED = plan_sp_send.lateralPlanSPDEPRECATED - lateralPlanSP.laneWidth = float(self.LP.lane_width) - lateralPlanSP.lProb = float(self.LP.lll_prob) - lateralPlanSP.rProb = float(self.LP.rll_prob) - lateralPlanSP.dProb = float(self.LP.d_prob) + lateralPlanSPDEPRECATED.laneWidth = float(self.LP.lane_width) + lateralPlanSPDEPRECATED.lProb = float(self.LP.lll_prob) + lateralPlanSPDEPRECATED.rProb = float(self.LP.rll_prob) + lateralPlanSPDEPRECATED.dProb = float(self.LP.d_prob) - lateralPlanSP.laneChangePrev = self.DH.prev_lane_change - lateralPlanSP.laneChangeEdgeBlock = bool((self.DH.lane_change_state == LaneChangeState.preLaneChange) and self.DH.road_edge) + lateralPlanSPDEPRECATED.dynamicLaneProfile = int(self.dynamic_lane_profile) + lateralPlanSPDEPRECATED.dynamicLaneProfileStatus = bool(self.dynamic_lane_profile_status) - lateralPlanSP.dynamicLaneProfile = int(self.dynamic_lane_profile) - lateralPlanSP.dynamicLaneProfileStatus = bool(self.dynamic_lane_profile_status) - - lateralPlanSP.dPathWLinesX = [float(x) for x in self.d_path_w_lines_xyz[:, 0]] - lateralPlanSP.dPathWLinesY = [float(y) for y in self.d_path_w_lines_xyz[:, 1]] + lateralPlanSPDEPRECATED.laneChangeEdgeBlockDEPRECATED = self.road_edge if self.standstill: self.standstill_elapsed += DT_MDL else: self.standstill_elapsed = 0.0 - lateralPlanSP.standstillElapsed = int(self.standstill_elapsed) + lateralPlanSPDEPRECATED.standstillElapsed = int(self.standstill_elapsed) - pm.send('lateralPlanSP', plan_sp_send) + pm.send('lateralPlanSPDEPRECATED', plan_sp_send) diff --git a/selfdrive/controls/lib/longcontrol.py b/selfdrive/controls/lib/longcontrol.py index 61c150aadc..ee65c4a69e 100644 --- a/selfdrive/controls/lib/longcontrol.py +++ b/selfdrive/controls/lib/longcontrol.py @@ -3,7 +3,7 @@ from openpilot.common.numpy_fast import clip, interp from openpilot.common.realtime import DT_CTRL from openpilot.selfdrive.controls.lib.drive_helpers import CONTROL_N, apply_deadzone from openpilot.selfdrive.controls.lib.pid import PIDController -from openpilot.selfdrive.modeld.constants import T_IDXS +from openpilot.selfdrive.modeld.constants import ModelConstants LongCtrlState = car.CarControl.Actuators.LongControlState @@ -70,19 +70,19 @@ class LongControl: # Interp control trajectory speeds = long_plan.speeds if len(speeds) == CONTROL_N: - v_target_now = interp(t_since_plan, T_IDXS[:CONTROL_N], speeds) - a_target_now = interp(t_since_plan, T_IDXS[:CONTROL_N], long_plan.accels) + v_target_now = interp(t_since_plan, ModelConstants.T_IDXS[:CONTROL_N], speeds) + a_target_now = interp(t_since_plan, ModelConstants.T_IDXS[:CONTROL_N], long_plan.accels) - v_target_lower = interp(self.CP.longitudinalActuatorDelayLowerBound + t_since_plan, T_IDXS[:CONTROL_N], speeds) + v_target_lower = interp(self.CP.longitudinalActuatorDelayLowerBound + t_since_plan, ModelConstants.T_IDXS[:CONTROL_N], speeds) a_target_lower = 2 * (v_target_lower - v_target_now) / self.CP.longitudinalActuatorDelayLowerBound - a_target_now - v_target_upper = interp(self.CP.longitudinalActuatorDelayUpperBound + t_since_plan, T_IDXS[:CONTROL_N], speeds) + v_target_upper = interp(self.CP.longitudinalActuatorDelayUpperBound + t_since_plan, ModelConstants.T_IDXS[:CONTROL_N], speeds) a_target_upper = 2 * (v_target_upper - v_target_now) / self.CP.longitudinalActuatorDelayUpperBound - a_target_now v_target = min(v_target_lower, v_target_upper) a_target = min(a_target_lower, a_target_upper) - v_target_1sec = interp(self.CP.longitudinalActuatorDelayUpperBound + t_since_plan + 1.0, T_IDXS[:CONTROL_N], speeds) + v_target_1sec = interp(self.CP.longitudinalActuatorDelayUpperBound + t_since_plan + 1.0, ModelConstants.T_IDXS[:CONTROL_N], speeds) else: v_target = 0.0 v_target_now = 0.0 diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py index d75289c6ad..f93cec3f62 100755 --- a/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py +++ b/selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py @@ -4,7 +4,7 @@ import time import numpy as np from cereal import custom from openpilot.common.numpy_fast import clip -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog # WARNING: imports outside of constants will not trigger a rebuild from openpilot.selfdrive.modeld.constants import index_function from openpilot.selfdrive.car.interfaces import ACCEL_MIN diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py index ee5766a723..295a7341b5 100755 --- a/selfdrive/controls/lib/longitudinal_planner.py +++ b/selfdrive/controls/lib/longitudinal_planner.py @@ -9,17 +9,19 @@ import cereal.messaging as messaging from openpilot.common.conversions import Conversions as CV from openpilot.common.filter_simple import FirstOrderFilter from openpilot.common.realtime import DT_MDL -from openpilot.selfdrive.modeld.constants import T_IDXS +from openpilot.selfdrive.modeld.constants import ModelConstants +from openpilot.selfdrive.controls.lib.sunnypilot.common import Source +from openpilot.selfdrive.controls.lib.sunnypilot.speed_limit_controller import SpeedLimitController from openpilot.selfdrive.car.interfaces import ACCEL_MIN, ACCEL_MAX from openpilot.selfdrive.controls.lib.longcontrol import LongCtrlState from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import LongitudinalMpc from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import T_IDXS as T_IDXS_MPC from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX, CONTROL_N, get_speed_error from openpilot.selfdrive.controls.lib.vision_turn_controller import VisionTurnController -from openpilot.selfdrive.controls.lib.speed_limit_controller import SpeedLimitController, SpeedLimitResolver from openpilot.selfdrive.controls.lib.turn_speed_controller import TurnSpeedController +from openpilot.selfdrive.controls.lib.dynamic_experimental_controller import DynamicExperimentalController from openpilot.selfdrive.controls.lib.events import Events -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog LON_MPC_STEP = 0.2 # first step is 0.2s A_CRUISE_MIN = -1.2 @@ -56,13 +58,14 @@ def limit_accel_in_turns(v_ego, angle_steers, a_target, CP): class LongitudinalPlanner: - def __init__(self, CP, init_v=0.0, init_a=0.0): + def __init__(self, CP, init_v=0.0, init_a=0.0, dt=DT_MDL): self.CP = CP self.mpc = LongitudinalMpc() self.fcw = False + self.dt = dt self.a_desired = init_a - self.v_desired_filter = FirstOrderFilter(init_v, 2.0, DT_MDL) + self.v_desired_filter = FirstOrderFilter(init_v, 2.0, self.dt) self.v_model_error = 0.0 self.v_desired_trajectory = np.zeros(CONTROL_N) @@ -76,11 +79,16 @@ class LongitudinalPlanner: self.cruise_source = 'cruise' self.vision_turn_controller = VisionTurnController(CP) - self.speed_limit_controller = SpeedLimitController() + self.speed_limit_controller = SpeedLimitController(CP) self.events = Events() self.turn_speed_controller = TurnSpeedController() + self.dynamic_experimental_controller = DynamicExperimentalController() def read_param(self): + try: + self.dynamic_experimental_controller.set_enabled(self.params.get_bool("DynamicExperimentalControl")) + except AttributeError: + self.dynamic_experimental_controller = DynamicExperimentalController() try: self.personality = int(self.params.get('LongitudinalPersonality')) except (ValueError, TypeError): @@ -91,9 +99,9 @@ class LongitudinalPlanner: if (len(model_msg.position.x) == 33 and len(model_msg.velocity.x) == 33 and len(model_msg.acceleration.x) == 33): - x = np.interp(T_IDXS_MPC, T_IDXS, model_msg.position.x) - model_error * T_IDXS_MPC - v = np.interp(T_IDXS_MPC, T_IDXS, model_msg.velocity.x) - model_error - a = np.interp(T_IDXS_MPC, T_IDXS, model_msg.acceleration.x) + x = np.interp(T_IDXS_MPC, ModelConstants.T_IDXS, model_msg.position.x) - model_error * T_IDXS_MPC + v = np.interp(T_IDXS_MPC, ModelConstants.T_IDXS, model_msg.velocity.x) - model_error + a = np.interp(T_IDXS_MPC, ModelConstants.T_IDXS, model_msg.acceleration.x) j = np.zeros(len(T_IDXS_MPC)) else: x = np.zeros(len(T_IDXS_MPC)) @@ -106,7 +114,10 @@ class LongitudinalPlanner: if self.param_read_counter % 50 == 0: self.read_param() self.param_read_counter += 1 - self.mpc.mode = 'blended' if sm['controlsState'].experimentalMode else 'acc' + if self.dynamic_experimental_controller.is_enabled() and sm['controlsState'].experimentalMode: + self.mpc.mode = self.dynamic_experimental_controller.get_mpc_mode(self.CP.radarUnavailable, sm['carState'], sm['radarState'].leadOne, sm['modelV2'], sm['controlsState']) + else: + self.mpc.mode = 'blended' if sm['controlsState'].experimentalMode else 'acc' v_ego = sm['carState'].vEgo v_cruise_kph = min(sm['controlsState'].vCruise, V_CRUISE_MAX) @@ -141,26 +152,26 @@ class LongitudinalPlanner: if force_slow_decel: v_cruise = 0.0 - # Get acceleration and active solutions for custom long mpc. - self.cruise_source, a_min_sol, v_cruise_sol = self.cruise_solutions( - not reset_state and (self.CP.openpilotLongitudinalControl or not self.CP.pcmCruiseSpeed), self.v_desired_filter.x, - self.a_desired, v_cruise, sm) + # Get active solutions for custom long mpc. + v_cruise = self.cruise_solutions( + not reset_state and (self.CP.openpilotLongitudinalControl or not self.CP.pcmCruiseSpeed), + self.v_desired_filter.x, self.a_desired, v_cruise, sm) # clip limits, cannot init MPC outside of bounds - accel_limits_turns[0] = min(accel_limits_turns[0], self.a_desired + 0.05, a_min_sol) + accel_limits_turns[0] = min(accel_limits_turns[0], self.a_desired + 0.05) accel_limits_turns[1] = max(accel_limits_turns[1], self.a_desired - 0.05) self.mpc.set_weights(prev_accel_constraint, personality=self.personality) self.mpc.set_accel_limits(accel_limits_turns[0], accel_limits_turns[1]) self.mpc.set_cur_state(self.v_desired_filter.x, self.a_desired) x, v, a, j = self.parse_model(sm['modelV2'], self.v_model_error) - self.mpc.update(sm['radarState'], v_cruise_sol, x, v, a, j, personality=self.personality) + self.mpc.update(sm['radarState'], v_cruise, x, v, a, j, personality=self.personality) - self.v_desired_trajectory_full = np.interp(T_IDXS, T_IDXS_MPC, self.mpc.v_solution) - self.a_desired_trajectory_full = np.interp(T_IDXS, T_IDXS_MPC, self.mpc.a_solution) + self.v_desired_trajectory_full = np.interp(ModelConstants.T_IDXS, T_IDXS_MPC, self.mpc.v_solution) + self.a_desired_trajectory_full = np.interp(ModelConstants.T_IDXS, T_IDXS_MPC, self.mpc.a_solution) self.v_desired_trajectory = self.v_desired_trajectory_full[:CONTROL_N] self.a_desired_trajectory = self.a_desired_trajectory_full[:CONTROL_N] - self.j_desired_trajectory = np.interp(T_IDXS[:CONTROL_N], T_IDXS_MPC[:-1], self.mpc.j_solution) + self.j_desired_trajectory = np.interp(ModelConstants.T_IDXS[:CONTROL_N], T_IDXS_MPC[:-1], self.mpc.j_solution) # TODO counter is only needed because radar is glitchy, remove once radar is gone self.fcw = self.mpc.crash_cnt > 2 and not sm['carState'].standstill @@ -169,8 +180,8 @@ class LongitudinalPlanner: # Interpolate 0.05 seconds and save as starting point for next iteration a_prev = self.a_desired - self.a_desired = float(interp(DT_MDL, T_IDXS[:CONTROL_N], self.a_desired_trajectory)) - self.v_desired_filter.x = self.v_desired_filter.x + DT_MDL * (self.a_desired + a_prev) / 2.0 + self.a_desired = float(interp(self.dt, ModelConstants.T_IDXS[:CONTROL_N], self.a_desired_trajectory)) + self.v_desired_filter.x = self.v_desired_filter.x + self.dt * (self.a_desired + a_prev) / 2.0 self.e2e_events(sm) @@ -207,7 +218,7 @@ class LongitudinalPlanner: longitudinalPlanSP.e2eX = self.mpc.e2e_x.tolist() longitudinalPlanSP.visionTurnControllerState = self.vision_turn_controller.state - longitudinalPlanSP.visionTurnSpeed = float(self.vision_turn_controller.v_turn) + longitudinalPlanSP.visionTurnSpeed = float(self.vision_turn_controller.v_target) longitudinalPlanSP.visionCurrentLatAcc = float(self.vision_turn_controller.current_lat_acc) longitudinalPlanSP.visionMaxPredLatAcc = float(self.vision_turn_controller.max_pred_lat_acc) @@ -215,44 +226,33 @@ class LongitudinalPlanner: longitudinalPlanSP.speedLimit = float(self.speed_limit_controller.speed_limit) longitudinalPlanSP.speedLimitOffset = float(self.speed_limit_controller.speed_limit_offset) longitudinalPlanSP.distToSpeedLimit = float(self.speed_limit_controller.distance) - longitudinalPlanSP.isMapSpeedLimit = bool(self.speed_limit_controller.source not in (SpeedLimitResolver.Source.none, SpeedLimitResolver.Source.nav)) + longitudinalPlanSP.isMapSpeedLimit = bool(self.speed_limit_controller.source not in (Source.none, Source.nav)) longitudinalPlanSP.events = self.events.to_msg() longitudinalPlanSP.turnSpeedControlState = self.turn_speed_controller.state - longitudinalPlanSP.turnSpeed = float(self.turn_speed_controller.speed_limit) - longitudinalPlanSP.distToTurn = float(self.turn_speed_controller.distance) - longitudinalPlanSP.turnSign = int(self.turn_speed_controller.turn_sign) + longitudinalPlanSP.turnSpeed = float(self.turn_speed_controller.v_target) longitudinalPlanSP.personality = self.personality + longitudinalPlanSP.e2eBlended = self.mpc.mode + pm.send('longitudinalPlanSP', plan_sp_send) def cruise_solutions(self, enabled, v_ego, a_ego, v_cruise, sm): # Update controllers - self.vision_turn_controller.update(enabled, v_ego, a_ego, v_cruise, sm) + self.vision_turn_controller.update(enabled, v_ego, v_cruise, sm) self.events = Events() self.speed_limit_controller.update(enabled, v_ego, a_ego, sm, v_cruise, self.events) - self.turn_speed_controller.update(enabled, v_ego, a_ego, sm) + self.turn_speed_controller.update(enabled, v_ego, sm, v_cruise) + + v_tsc_target = self.vision_turn_controller.v_target if self.vision_turn_controller.is_active else 255 + slc_target = self.speed_limit_controller.speed_limit_offseted if self.speed_limit_controller.is_active else 255 + m_tsc_target = self.turn_speed_controller.v_target if self.turn_speed_controller.is_active else 255 # Pick solution with the lowest velocity target. - a_solutions = {'cruise': float("inf")} - v_solutions = {'cruise': v_cruise} + v_solutions = min(v_cruise, v_tsc_target, slc_target, m_tsc_target) - if self.vision_turn_controller.is_active: - a_solutions['turn'] = self.vision_turn_controller.a_target - v_solutions['turn'] = self.vision_turn_controller.v_turn - - if self.speed_limit_controller.is_active: - a_solutions['limit'] = self.speed_limit_controller.a_target - v_solutions['limit'] = self.speed_limit_controller.speed_limit_offseted - - if self.turn_speed_controller.is_active: - a_solutions['turnlimit'] = self.turn_speed_controller.a_target - v_solutions['turnlimit'] = self.turn_speed_controller.speed_limit - - source = min(v_solutions, key=v_solutions.get) - - return source, a_solutions[source], v_solutions[source] + return v_solutions def e2e_events(self, sm): e2e_long_status = sm['e2eLongStateSP'].status diff --git a/selfdrive/controls/lib/speed_limit_controller.py b/selfdrive/controls/lib/speed_limit_controller.py deleted file mode 100644 index 14892d8add..0000000000 --- a/selfdrive/controls/lib/speed_limit_controller.py +++ /dev/null @@ -1,428 +0,0 @@ -import numpy as np -import time -from common.numpy_fast import interp -from enum import IntEnum -from cereal import custom, car -from common.conversions import Conversions as CV -from common.params import Params -from selfdrive.controls.lib.drive_helpers import LIMIT_ADAPT_ACC, LIMIT_MIN_ACC, LIMIT_MAX_ACC, LIMIT_SPEED_OFFSET_TH, \ - LIMIT_MAX_MAP_DATA_AGE, CONTROL_N -from selfdrive.controls.lib.events import Events, ET -from selfdrive.modeld.constants import T_IDXS - - -_PARAMS_UPDATE_PERIOD = 2. # secs. Time between parameter updates. -_TEMP_INACTIVE_GUARD_PERIOD = 1. # secs. Time to wait after activation before considering temp deactivation signal. - -# Lookup table for speed limit percent offset depending on speed. -_LIMIT_PERC_OFFSET_V = [0.1, 0.05, 0.038] # 55, 105, 135 km/h -_LIMIT_PERC_OFFSET_BP = [13.9, 27.8, 36.1] # 50, 100, 130 km/h - -SpeedLimitControlState = custom.LongitudinalPlanSP.SpeedLimitControlState -EventName = car.CarEvent.EventName - -_DEBUG = False - - -def _debug(msg): - if not _DEBUG: - return - print(msg) - - -def _description_for_state(speed_limit_control_state): - if speed_limit_control_state == SpeedLimitControlState.inactive: - return 'INACTIVE' - if speed_limit_control_state == SpeedLimitControlState.tempInactive: - return 'TEMP_INACTIVE' - if speed_limit_control_state == SpeedLimitControlState.adapting: - return 'ADAPTING' - if speed_limit_control_state == SpeedLimitControlState.active: - return 'ACTIVE' - - -class SpeedLimitResolver(): - class Source(IntEnum): - none = 0 - car_state = 1 - map_data = 2 - nav = 3 - - class Policy(IntEnum): - car_state_only = 0 - map_data_only = 1 - car_state_priority = 2 - map_data_priority = 3 - combined = 4 - nav_only = 5 - nav_priority = 6 - - def __init__(self, policy=Policy.nav_priority): - self._limit_solutions = {} # Store for speed limit solutions from different sources - self._distance_solutions = {} # Store for distance to current speed limit start for different sources - self._v_ego = 0. - self._current_speed_limit = 0. - self._policy = policy - self._next_speed_limit_prev = 0. - self.speed_limit = 0. - self.distance = 0. - self.source = SpeedLimitResolver.Source.none - - def resolve(self, v_ego, current_speed_limit, sm): - self._v_ego = v_ego - self._current_speed_limit = current_speed_limit - self._sm = sm - - self._get_from_car_state() - self._get_from_nav() - self._get_from_map_data() - self._consolidate() - - return self.speed_limit, self.distance, self.source - - def _get_from_car_state(self): - self._limit_solutions[SpeedLimitResolver.Source.car_state] = self._sm['carState'].cruiseState.speedLimit - self._distance_solutions[SpeedLimitResolver.Source.car_state] = 0. - - def _get_from_nav(self): - # Ignore if nav instruction is not alive - if not self._sm.alive['navInstruction']: - self._limit_solutions[SpeedLimitResolver.Source.nav] = 0. - self._distance_solutions[SpeedLimitResolver.Source.nav] = 0. - _debug('SL: No nav instruction for speed limit') - return - - # Load limits from nav instruction - self._limit_solutions[SpeedLimitResolver.Source.nav] = self._sm['navInstruction'].speedLimit - self._distance_solutions[SpeedLimitResolver.Source.nav] = 0. - - def _get_from_map_data(self): - # Ignore if no live map data - sock = 'liveMapDataSP' - if self._sm.logMonoTime[sock] is None: - self._limit_solutions[SpeedLimitResolver.Source.map_data] = 0. - self._distance_solutions[SpeedLimitResolver.Source.map_data] = 0. - _debug('SL: No map data for speed limit') - return - - # Load limits from map_data - map_data = self._sm[sock] - speed_limit = map_data.speedLimit if map_data.speedLimitValid else 0. - next_speed_limit = map_data.speedLimitAhead if map_data.speedLimitAheadValid else 0. - - # Calculate the age of the gps fix. Ignore if too old. - gps_fix_age = time.time() - map_data.lastGpsTimestamp * 1e-3 - if gps_fix_age > LIMIT_MAX_MAP_DATA_AGE: - self._limit_solutions[SpeedLimitResolver.Source.map_data] = 0. - self._distance_solutions[SpeedLimitResolver.Source.map_data] = 0. - _debug(f'SL: Ignoring map data as is too old. Age: {gps_fix_age}') - return - - # When we have no ahead speed limit to consider or it is greater than current speed limit - # or car has stopped, then provide current value and reset tracking. - if next_speed_limit == 0. or self._v_ego <= 0. or next_speed_limit > self._current_speed_limit: - self._limit_solutions[SpeedLimitResolver.Source.map_data] = speed_limit - self._distance_solutions[SpeedLimitResolver.Source.map_data] = 0. - self._next_speed_limit_prev = 0. - return - - # Calculate the actual distance to the speed limit ahead corrected by gps_fix_age - distance_since_fix = self._v_ego * gps_fix_age - distance_to_speed_limit_ahead = max(0., map_data.speedLimitAheadDistance - distance_since_fix) - - # When we have a next_speed_limit value that has not changed from a provided next speed limit value - # in previous resolutions, we keep providing it. - if next_speed_limit == self._next_speed_limit_prev: - self._limit_solutions[SpeedLimitResolver.Source.map_data] = next_speed_limit - self._distance_solutions[SpeedLimitResolver.Source.map_data] = distance_to_speed_limit_ahead - return - - # Reset tracking - self._next_speed_limit_prev = 0. - - # Calculated the time needed to adapt to the new limit and the corresponding distance. - adapt_time = (next_speed_limit - self._v_ego) / LIMIT_ADAPT_ACC - adapt_distance = self._v_ego * adapt_time + 0.5 * LIMIT_ADAPT_ACC * adapt_time**2 - - # When we detect we are close enough, we provide the next limit value and track it. - if distance_to_speed_limit_ahead <= adapt_distance: - self._limit_solutions[SpeedLimitResolver.Source.map_data] = next_speed_limit - self._distance_solutions[SpeedLimitResolver.Source.map_data] = distance_to_speed_limit_ahead - self._next_speed_limit_prev = next_speed_limit - return - - # Otherwise we just provide the map data speed limit. - self.distance_to_map_speed_limit = 0. - self._limit_solutions[SpeedLimitResolver.Source.map_data] = speed_limit - self._distance_solutions[SpeedLimitResolver.Source.map_data] = 0. - - def _consolidate(self): - limits = np.array([], dtype=float) - distances = np.array([], dtype=float) - sources = np.array([], dtype=int) - - if self._policy == SpeedLimitResolver.Policy.car_state_only or \ - self._policy == SpeedLimitResolver.Policy.car_state_priority or \ - self._policy == SpeedLimitResolver.Policy.combined: - limits = np.append(limits, self._limit_solutions[SpeedLimitResolver.Source.car_state]) - distances = np.append(distances, self._distance_solutions[SpeedLimitResolver.Source.car_state]) - sources = np.append(sources, SpeedLimitResolver.Source.car_state.value) - - if self._policy == SpeedLimitResolver.Policy.nav_only or \ - self._policy == SpeedLimitResolver.Policy.nav_priority or \ - self._policy == SpeedLimitResolver.Policy.combined: - limits = np.append(limits, self._limit_solutions[SpeedLimitResolver.Source.nav]) - distances = np.append(distances, self._distance_solutions[SpeedLimitResolver.Source.nav]) - sources = np.append(sources, SpeedLimitResolver.Source.nav.value) - - if self._policy == SpeedLimitResolver.Policy.map_data_only or \ - self._policy == SpeedLimitResolver.Policy.map_data_priority or \ - self._policy == SpeedLimitResolver.Policy.combined: - limits = np.append(limits, self._limit_solutions[SpeedLimitResolver.Source.map_data]) - distances = np.append(distances, self._distance_solutions[SpeedLimitResolver.Source.map_data]) - sources = np.append(sources, SpeedLimitResolver.Source.map_data.value) - - if np.amax(limits) == 0.: - if self._policy == SpeedLimitResolver.Policy.car_state_priority: - limits = np.append(limits, self._limit_solutions[SpeedLimitResolver.Source.map_data]) - distances = np.append(distances, self._distance_solutions[SpeedLimitResolver.Source.map_data]) - sources = np.append(sources, SpeedLimitResolver.Source.map_data.value) - - elif self._policy == SpeedLimitResolver.Policy.map_data_priority: - limits = np.append(limits, self._limit_solutions[SpeedLimitResolver.Source.car_state]) - distances = np.append(distances, self._distance_solutions[SpeedLimitResolver.Source.car_state]) - sources = np.append(sources, SpeedLimitResolver.Source.car_state.value) - - elif self._policy == SpeedLimitResolver.Policy.nav_priority: - limits = np.append(limits, self._limit_solutions[SpeedLimitResolver.Source.map_data]) - distances = np.append(distances, self._distance_solutions[SpeedLimitResolver.Source.map_data]) - sources = np.append(sources, SpeedLimitResolver.Source.map_data.value) - - if np.amax(limits) == 0.: - limits = np.append(limits, self._limit_solutions[SpeedLimitResolver.Source.car_state]) - distances = np.append(distances, self._distance_solutions[SpeedLimitResolver.Source.car_state]) - sources = np.append(sources, SpeedLimitResolver.Source.car_state.value) - - # Get all non-zero values and set the minimum if any, otherwise 0. - mask = limits > 0. - limits = limits[mask] - distances = distances[mask] - sources = sources[mask] - - if len(limits) > 0: - min_idx = np.argmin(limits) - self.speed_limit = limits[min_idx] - self.distance = distances[min_idx] - self.source = SpeedLimitResolver.Source(sources[min_idx]) - else: - self.speed_limit = 0. - self.distance = 0. - self.source = SpeedLimitResolver.Source.none - - _debug(f'SL: *** Speed Limit set: {self.speed_limit}, distance: {self.distance}, source: {self.source}') - - -class SpeedLimitController(): - def __init__(self): - self._params = Params() - self._resolver = SpeedLimitResolver() - self._last_params_update = 0.0 - self._last_op_enabled_time = 0.0 - self._is_metric = self._params.get_bool("IsMetric") - self._is_enabled = self._params.get_bool("SpeedLimitControl") - self._offset_enabled = self._params.get_bool("SpeedLimitPercOffset") - self._disengage_on_accelerator = self._params.get_bool("DisengageOnAccelerator") - self._op_enabled = False - self._op_enabled_prev = False - self._v_ego = 0. - self._a_ego = 0. - self._v_offset = 0. - self._v_cruise_setpoint = 0. - self._v_cruise_setpoint_prev = 0. - self._v_cruise_setpoint_changed = False - self._speed_limit = 0. - self._speed_limit_prev = 0. - self._speed_limit_changed = False - self._distance = 0. - self._source = SpeedLimitResolver.Source.none - self._state = SpeedLimitControlState.inactive - self._state_prev = SpeedLimitControlState.inactive - self._gas_pressed = False - self._a_target = 0. - - self._offset_type = int(self._params.get("SpeedLimitOffsetType", encoding='utf8')) - self._offset_value = float(self._params.get("SpeedLimitValueOffset", encoding='utf8')) - self._brake_pressed = False - self._brake_pressed_prev = False - - @property - def a_target(self): - return self._a_target if self.is_active else self._a_ego - - @property - def state(self): - return self._state - - @state.setter - def state(self, value): - if value != self._state: - _debug(f'Speed Limit Controller state: {_description_for_state(value)}') - - if value == SpeedLimitControlState.tempInactive: - # Reset previous speed limit to current value as to prevent going out of tempInactive in - # a single cycle when the speed limit changes at the same time the user has temporarily deactivate it. - self._speed_limit_prev = self._speed_limit - - self._state = value - - @property - def is_active(self): - return self.state > SpeedLimitControlState.tempInactive - - @property - def speed_limit_offseted(self): - return self._speed_limit + self.speed_limit_offset - - @property - def speed_limit_offset(self): - if self._offset_enabled: - if self._offset_type == 0: - return interp(self._speed_limit, _LIMIT_PERC_OFFSET_BP, _LIMIT_PERC_OFFSET_V) * self._speed_limit - elif self._offset_type == 1: - return self._offset_value * 0.01 * self._speed_limit - elif self._offset_type == 2: - return self._offset_value * (CV.KPH_TO_MS if self._is_metric else CV.MPH_TO_MS) - return 0. - - @property - def speed_limit(self): - return self._speed_limit - - @property - def distance(self): - return self._distance - - @property - def source(self): - return self._source - - def _update_params(self): - t = time.monotonic() - if t > self._last_params_update + _PARAMS_UPDATE_PERIOD: - self._is_enabled = self._params.get_bool("SpeedLimitControl") - self._offset_enabled = self._params.get_bool("SpeedLimitPercOffset") - self._offset_type = int(self._params.get("SpeedLimitOffsetType", encoding='utf8')) - self._offset_value = float(self._params.get("SpeedLimitValueOffset", encoding='utf8')) - _debug(f'Updated Speed limit params. enabled: {self._is_enabled}, with offset: {self._offset_enabled}') - self._last_params_update = t - - def _update_calculations(self): - # Update current velocity offset (error) - self._v_offset = self.speed_limit_offseted - self._v_ego - - # Track the time op becomes active to prevent going to tempInactive right away after - # op enabling since controlsd will change the cruise speed every time on enabling and this will - # cause a temp inactive transition if the controller is updated before controlsd sets actual cruise - # speed. - if not self._op_enabled_prev and self._op_enabled: - self._last_op_enabled_time = time.monotonic() - - # Update change tracking variables - self._speed_limit_changed = self._speed_limit != self._speed_limit_prev - self._v_cruise_setpoint_changed = self._v_cruise_setpoint != self._v_cruise_setpoint_prev - self._speed_limit_prev = self._speed_limit - self._v_cruise_setpoint_prev = self._v_cruise_setpoint - self._op_enabled_prev = self._op_enabled - self._brake_pressed_prev = self._brake_pressed - - def _state_transition(self): - self._state_prev = self._state - - # In any case, if op is disabled, or speed limit control is disabled - # or the reported speed limit is 0 or gas is pressed, deactivate. - if not self._op_enabled or not self._is_enabled or self._speed_limit == 0 or (self._gas_pressed and self._disengage_on_accelerator): - self.state = SpeedLimitControlState.inactive - return - - # In any case, we deactivate the speed limit controller temporarily if the user changes the cruise speed. - # Ignore if a minimum amount of time has not passed since activation. This is to prevent temp inactivations - # due to controlsd logic changing cruise setpoint when going active. - if self._v_cruise_setpoint_changed and \ - time.monotonic() > (self._last_op_enabled_time + _TEMP_INACTIVE_GUARD_PERIOD): - self.state = SpeedLimitControlState.tempInactive - return - - # inactive - if self.state == SpeedLimitControlState.inactive: - # If the limit speed offset is negative (i.e. reduce speed) and lower than threshold - # we go to adapting state to quickly reduce speed, otherwise we go directly to active - if self._v_offset < LIMIT_SPEED_OFFSET_TH: - self.state = SpeedLimitControlState.adapting - else: - self.state = SpeedLimitControlState.active - # tempInactive - elif self.state == SpeedLimitControlState.tempInactive: - # if speed limit changes, transition to inactive, - # proper active state will be set on next iteration. - if self._speed_limit_changed: - self.state = SpeedLimitControlState.inactive - # adapting - elif self.state == SpeedLimitControlState.adapting: - # Go to active once the speed offset is over threshold. - if self._v_offset >= LIMIT_SPEED_OFFSET_TH: - self.state = SpeedLimitControlState.active - # active - elif self.state == SpeedLimitControlState.active: - # Go to adapting if the speed offset goes below threshold. - if self._v_offset < LIMIT_SPEED_OFFSET_TH: - self.state = SpeedLimitControlState.adapting - - def _update_solution(self): - # inactive or tempInactive state - if self.state <= SpeedLimitControlState.tempInactive: - # Preserve current values - a_target = self._a_ego - # adapting - elif self.state == SpeedLimitControlState.adapting: - # When adapting we target to achieve the speed limit on the distance if not there yet, - # otherwise try to keep the speed constant around the control time horizon. - if self.distance > 0: - a_target = (self.speed_limit_offseted**2 - self._v_ego**2) / (2. * self.distance) - else: - a_target = self._v_offset / T_IDXS[CONTROL_N] - # active - elif self.state == SpeedLimitControlState.active: - # When active we are trying to keep the speed constant around the control time horizon. - a_target = self._v_offset / T_IDXS[CONTROL_N] - - # Keep solution limited. - self._a_target = np.clip(a_target, LIMIT_MIN_ACC, LIMIT_MAX_ACC) - - def _update_events(self, events): - if not self.is_active: - # no event while inactive - return - - if self._state_prev <= SpeedLimitControlState.tempInactive: - events.add(EventName.speedLimitActive) - elif self._speed_limit_changed != 0: - events.add(EventName.speedLimitValueChange) - - def update(self, enabled, v_ego, a_ego, sm, v_cruise_setpoint, events=Events()): - _car_state = sm['carState'] - self._op_enabled = enabled and sm['controlsState'].enabled and _car_state.cruiseState.enabled and \ - not (_car_state.brakePressed and (not self._brake_pressed_prev or not _car_state.standstill)) and \ - not events.contains(ET.OVERRIDE_LONGITUDINAL) - self._v_ego = v_ego - self._a_ego = a_ego - self._v_cruise_setpoint = v_cruise_setpoint - self._gas_pressed = _car_state.gasPressed - self._brake_pressed = _car_state.brakePressed - - self._speed_limit, self._distance, self._source = self._resolver.resolve(v_ego, self.speed_limit, sm) - - self._update_params() - self._update_calculations() - self._state_transition() - self._update_solution() - self._update_events(events) diff --git a/selfdrive/controls/lib/sunnypilot/__init__.py b/selfdrive/controls/lib/sunnypilot/__init__.py new file mode 100644 index 0000000000..27aef8996f --- /dev/null +++ b/selfdrive/controls/lib/sunnypilot/__init__.py @@ -0,0 +1,13 @@ +from cereal import custom, car + +DEBUG = False +PARAMS_UPDATE_PERIOD = 2. # secs. Time between parameter updates. +TEMP_INACTIVE_GUARD_PERIOD = 1. # secs. Time to wait after activation before considering temp deactivation signal. + +# Lookup table for speed limit percent offset depending on speed. +LIMIT_PERC_OFFSET_V = [0.1, 0.05, 0.038] # 55, 105, 135 km/h +LIMIT_PERC_OFFSET_BP = [13.9, 27.8, 36.1] # 50, 100, 130 km/h + +SpeedLimitControlState = custom.LongitudinalPlanSP.SpeedLimitControlState +EventName = car.CarEvent.EventName + diff --git a/selfdrive/controls/lib/sunnypilot/common.py b/selfdrive/controls/lib/sunnypilot/common.py new file mode 100644 index 0000000000..731cc413c6 --- /dev/null +++ b/selfdrive/controls/lib/sunnypilot/common.py @@ -0,0 +1,29 @@ +from enum import IntEnum + + +class Source(IntEnum): + none = 0 + car_state = 1 + map_data = 2 + nav = 3 + + +class Policy(IntEnum): + nav_only = 0 + map_data_only = 1 + car_state_only = 2 + nav_priority = 3 + map_data_priority = 4 + car_state_priority = 5 + combined = 6 + + +class Engage(IntEnum): + auto = 0 + user_confirm = 1 + + +class OffsetType(IntEnum): + default = 0 + fixed = 1 + percentage = 2 diff --git a/selfdrive/controls/lib/sunnypilot/helpers.py b/selfdrive/controls/lib/sunnypilot/helpers.py new file mode 100644 index 0000000000..e84856418d --- /dev/null +++ b/selfdrive/controls/lib/sunnypilot/helpers.py @@ -0,0 +1,19 @@ +from openpilot.selfdrive.controls.lib.sunnypilot import DEBUG, SpeedLimitControlState +from openpilot.common.swaglog import cloudlog + + +def debug(msg): + if not DEBUG: + return + cloudlog.debug(msg) + + +def description_for_state(speed_limit_control_state): + if speed_limit_control_state == SpeedLimitControlState.inactive: + return 'INACTIVE' + if speed_limit_control_state == SpeedLimitControlState.tempInactive: + return 'TEMP_INACTIVE' + if speed_limit_control_state == SpeedLimitControlState.adapting: + return 'ADAPTING' + if speed_limit_control_state == SpeedLimitControlState.active: + return 'ACTIVE' diff --git a/selfdrive/controls/lib/sunnypilot/speed_limit_controller.py b/selfdrive/controls/lib/sunnypilot/speed_limit_controller.py new file mode 100644 index 0000000000..d3e966bfb1 --- /dev/null +++ b/selfdrive/controls/lib/sunnypilot/speed_limit_controller.py @@ -0,0 +1,313 @@ +import time +from openpilot.common.conversions import Conversions as CV +from openpilot.common.numpy_fast import clip, interp +from openpilot.common.params import Params +from openpilot.selfdrive.controls.lib.sunnypilot import LIMIT_PERC_OFFSET_BP, LIMIT_PERC_OFFSET_V, \ + PARAMS_UPDATE_PERIOD, TEMP_INACTIVE_GUARD_PERIOD, EventName, SpeedLimitControlState +from openpilot.selfdrive.controls.lib.drive_helpers import LIMIT_SPEED_OFFSET_TH, CONTROL_N +from openpilot.selfdrive.controls.lib.events import Events, ET +from openpilot.selfdrive.controls.lib.sunnypilot.common import Source, Policy, Engage, OffsetType +from openpilot.selfdrive.controls.lib.sunnypilot.helpers import description_for_state, debug +from openpilot.selfdrive.controls.lib.sunnypilot.speed_limit_resolver import SpeedLimitResolver +from openpilot.selfdrive.modeld.constants import ModelConstants + +ACTIVE_STATES = (SpeedLimitControlState.active, SpeedLimitControlState.adapting) + + +class SpeedLimitController: + def __init__(self, CP): + self._params = Params() + self._CP = CP + self._policy = Policy(int(self._params.get("SpeedLimitControlPolicy", encoding='utf8'))) + self._resolver = SpeedLimitResolver(self._policy) + self._last_params_update = 0.0 + self._last_op_enabled_time = 0.0 + self._is_metric = self._params.get_bool("IsMetric") + self._is_enabled = self._params.get_bool("EnableSlc") + self._disengage_on_accelerator = self._params.get_bool("DisengageOnAccelerator") + self._op_enabled = False + self._op_enabled_prev = False + self._v_ego = 0. + self._a_ego = 0. + self._v_offset = 0. + self._v_cruise_setpoint = 0. + self._v_cruise_setpoint_prev = 0. + self._v_cruise_setpoint_changed = False + self._speed_limit = 0. + self._speed_limit_prev = 0. + self._speed_limit_changed = False + self._distance = 0. + self._source = Source.none + self._state = SpeedLimitControlState.inactive + self._state_prev = SpeedLimitControlState.inactive + self._gas_pressed = False + self._pcm_cruise_op_long = CP.openpilotLongitudinalControl and CP.pcmCruise + + self._offset_type = int(self._params.get("SpeedLimitOffsetType", encoding='utf8')) + self._offset_value = float(self._params.get("SpeedLimitValueOffset", encoding='utf8')) + self._warning_type_type = int(self._params.get("SpeedLimitWarningType", encoding='utf8')) + self._warning_offset_type = int(self._params.get("SpeedLimitWarningOffsetType", encoding='utf8')) + self._warning_offset_value = float(self._params.get("SpeedLimitWarningValueOffset", encoding='utf8')) + self._engage_type = clip(int(self._params.get("SpeedLimitEngageType", encoding='utf8')), Engage.auto, Engage.user_confirm) + self._brake_pressed = False + self._brake_pressed_prev = False + self._current_time = 0. + self._v_cruise_rounded = 0. + self._v_cruise_prev_rounded = 0. + self._speed_limit_offsetted_rounded = 0. + self._speed_limit_warning_offsetted_rounded = 0. + self._ms_to_local = CV.MS_TO_KPH if self._is_metric else CV.MS_TO_MPH + + # Mapping functions to state transitions + self.state_transition_strategy = { + # Transition functions for each state + SpeedLimitControlState.inactive: self.transition_state_from_inactive, + SpeedLimitControlState.tempInactive: self.transition_state_from_temp_inactive, + SpeedLimitControlState.adapting: self.transition_state_from_adapting, + SpeedLimitControlState.active: self.transition_state_from_active, + SpeedLimitControlState.preActive: self.transition_state_from_pre_active, + } + + # Solution functions mapped to respective states + self.acceleration_solutions = { + # Solution functions for each state + SpeedLimitControlState.tempInactive: self.get_current_acceleration_as_target, + SpeedLimitControlState.inactive: self.get_current_acceleration_as_target, + SpeedLimitControlState.adapting: self.get_adapting_state_target_acceleration, + SpeedLimitControlState.active: self.get_active_state_target_acceleration, + SpeedLimitControlState.preActive: self.get_current_acceleration_as_target, + } + + @property + def state(self): + return self._state + + @state.setter + def state(self, value): + if value != self._state: + debug(f'Speed Limit Controller state: {description_for_state(value)}') + + if value == SpeedLimitControlState.tempInactive: + # Reset previous speed limit to current value as to prevent going out of tempInactive in + # a single cycle when the speed limit changes at the same time the user has temporarily deactivated it. + self._speed_limit_prev = self._speed_limit + + self._state = value + + @property + def is_active(self): + return self.state in ACTIVE_STATES and self._is_enabled + + @property + def speed_limit_offseted(self): + return self._speed_limit + self.speed_limit_offset + + @property + def speed_limit_offset(self): + if self._offset_type == OffsetType.default: + return interp(self._speed_limit, LIMIT_PERC_OFFSET_BP, LIMIT_PERC_OFFSET_V) * self._speed_limit + elif self._offset_type == OffsetType.fixed: + return self._offset_value * (CV.KPH_TO_MS if self._is_metric else CV.MPH_TO_MS) + elif self._offset_type == OffsetType.percentage: + return self._offset_value * 0.01 * self._speed_limit + return 0. + + @property + def speed_limit_warning_offset(self): + if self._warning_offset_type == OffsetType.default: + return interp(self._speed_limit, LIMIT_PERC_OFFSET_BP, LIMIT_PERC_OFFSET_V) * self._speed_limit + elif self._warning_offset_type == OffsetType.fixed: + return self._warning_offset_value * (CV.KPH_TO_MS if self._is_metric else CV.MPH_TO_MS) + elif self._warning_offset_type == OffsetType.percentage: + return self._warning_offset_value * 0.01 * self._speed_limit + return 0. + + @property + def speed_limit(self): + return self._speed_limit + + @property + def distance(self): + return self._distance + + @property + def source(self): + return self._source + + def _update_v_cruise_setpoint_prev(self): + self._v_cruise_setpoint_prev = self._v_cruise_setpoint + + def _update_params(self): + if self._current_time > self._last_params_update + PARAMS_UPDATE_PERIOD: + self._is_enabled = self._params.get_bool("EnableSlc") + self._offset_type = int(self._params.get("SpeedLimitOffsetType", encoding='utf8')) + self._offset_value = float(self._params.get("SpeedLimitValueOffset", encoding='utf8')) + self._warning_type_type = int(self._params.get("SpeedLimitWarningType", encoding='utf8')) + self._warning_offset_type = int(self._params.get("SpeedLimitWarningOffsetType", encoding='utf8')) + self._warning_offset_value = float(self._params.get("SpeedLimitWarningValueOffset", encoding='utf8')) + self._policy = Policy(int(self._params.get("SpeedLimitControlPolicy", encoding='utf8'))) + self._is_metric = self._params.get_bool("IsMetric") + self._ms_to_local = CV.MS_TO_KPH if self._is_metric else CV.MS_TO_MPH + self._resolver.change_policy(self._policy) + self._engage_type = Engage.auto if self._pcm_cruise_op_long else clip(int(self._params.get("SpeedLimitEngageType", encoding='utf8')), Engage.auto, Engage.user_confirm) + debug(f'Updated Speed limit params. enabled: {self._is_enabled}, with offset: {self._offset_type}') + self._last_params_update = self._current_time + + def _update_calculations(self): + # Update current velocity offset (error) + self._v_offset = self.speed_limit_offseted - self._v_ego + + # Track the time op becomes active to prevent going to tempInactive right away after + # op enabling since controlsd will change the cruise speed every time on enabling and this will + # cause a temp inactive transition if the controller is updated before controlsd sets actual cruise + # speed. + if not self._op_enabled_prev and self._op_enabled: + self._last_op_enabled_time = self._current_time + + # Update change tracking variables + self._speed_limit_changed = self._speed_limit != self._speed_limit_prev + self._v_cruise_setpoint_changed = self._v_cruise_setpoint != self._v_cruise_setpoint_prev + self._speed_limit_prev = self._speed_limit + if self._engage_type != Engage.user_confirm: + self._update_v_cruise_setpoint_prev() + self._op_enabled_prev = self._op_enabled + self._brake_pressed_prev = self._brake_pressed + + self._v_cruise_rounded = int(round(self._v_cruise_setpoint * self._ms_to_local)) + self._v_cruise_prev_rounded = int(round(self._v_cruise_setpoint_prev * self._ms_to_local)) + self._speed_limit_offsetted_rounded = int(0) if self._speed_limit == 0 else int(round((self._speed_limit + self.speed_limit_offset) * self._ms_to_local)) + self._speed_limit_warning_offsetted_rounded = int(0) if self._speed_limit == 0 else int(round((self._speed_limit + self.speed_limit_warning_offset) * self._ms_to_local)) + + def transition_state_from_inactive(self): + """ Make state transition from inactive state """ + if self._engage_type == Engage.user_confirm: + if (((self._last_op_enabled_time + 7.) >= self._current_time >= (self._last_op_enabled_time + 2.)) or + self._speed_limit_changed): + if self._speed_limit_changed: + self._last_op_enabled_time = self._current_time - 2. # immediately prompt confirmation + self.state = SpeedLimitControlState.preActive + elif self._engage_type == Engage.auto: + if self._v_offset < LIMIT_SPEED_OFFSET_TH: + self.state = SpeedLimitControlState.adapting + else: + self.state = SpeedLimitControlState.active + + def transition_state_from_temp_inactive(self): + """ Make state transition from temporary inactive state """ + if self._speed_limit_changed: + if self._engage_type == Engage.user_confirm: + self._last_op_enabled_time = self._current_time - 2. # immediately prompt confirmation + self.state = SpeedLimitControlState.preActive + elif self._engage_type == Engage.auto: + self.state = SpeedLimitControlState.inactive + + def transition_state_from_pre_active(self): + """ Make state transition from preActive state """ + if self._current_time >= (self._last_op_enabled_time + 7.): + self.state = SpeedLimitControlState.inactive + elif (self._last_op_enabled_time + 7.) > self._current_time > (self._last_op_enabled_time + 2.): + if self._speed_limit_changed: + self._last_op_enabled_time = self._current_time - 2. # immediately prompt confirmation + elif self._v_cruise_prev_rounded < self._speed_limit_offsetted_rounded: + if self._v_cruise_setpoint > self._v_cruise_setpoint_prev: + self.state = SpeedLimitControlState.active + elif self._v_cruise_prev_rounded > self._speed_limit_offsetted_rounded: + if self._v_cruise_setpoint < self._v_cruise_setpoint_prev: + self.state = SpeedLimitControlState.active + elif self._v_cruise_prev_rounded == self._speed_limit_offsetted_rounded: + self.state = SpeedLimitControlState.active + + def transition_state_from_adapting(self): + """ Make state transition from adapting state """ + if self._v_offset >= LIMIT_SPEED_OFFSET_TH: + self.state = SpeedLimitControlState.active + + def transition_state_from_active(self): + """ Make state transition from active state """ + if self._engage_type == Engage.user_confirm: + if self._state_prev == SpeedLimitControlState.active: + if self._v_cruise_setpoint_changed and self._v_cruise_rounded != self._speed_limit_offsetted_rounded: + self.state = SpeedLimitControlState.tempInactive + elif self._speed_limit_changed: + self._last_op_enabled_time = self._current_time - 2. # immediately prompt confirmation + self.state = SpeedLimitControlState.preActive + elif self._engage_type == Engage.auto: + if self._v_offset < LIMIT_SPEED_OFFSET_TH: + self.state = SpeedLimitControlState.adapting + + def _state_transition(self): + self._state_prev = self._state + + # In any case, if op is disabled, or speed limit control is disabled + # or the reported speed limit is 0 or gas is pressed, deactivate. + if not self._op_enabled or not self._is_enabled or self._speed_limit == 0 or \ + (self._gas_pressed and self._disengage_on_accelerator): + self.state = SpeedLimitControlState.inactive + return + + # In any case, we deactivate the speed limit controller temporarily if the user changes the cruise speed. + # Ignore if a minimum amount of time has not passed since activation. This is to prevent temp inactivations + # due to controlsd logic changing cruise setpoint when going active. + if self._engage_type == Engage.auto and self._v_cruise_setpoint_changed and \ + self._current_time > (self._last_op_enabled_time + TEMP_INACTIVE_GUARD_PERIOD): + self.state = SpeedLimitControlState.tempInactive + return + + self.state_transition_strategy[self.state]() + + if self._engage_type == Engage.user_confirm: + self._update_v_cruise_setpoint_prev() + + def get_current_acceleration_as_target(self): + """ When state is inactive or tempInactive, preserve current acceleration """ + return self._a_ego + + def get_adapting_state_target_acceleration(self): + """ In adapting state, calculate target acceleration based on speed limit and current velocity """ + if self.distance > 0: + return (self.speed_limit_offseted**2 - self._v_ego**2) / (2. * self.distance) + + return self._v_offset / ModelConstants.T_IDXS[CONTROL_N] + + def get_active_state_target_acceleration(self): + """ In active state, aim to keep speed constant around control time horizon """ + return self._v_offset / ModelConstants.T_IDXS[CONTROL_N] + + def _update_events(self, events): + if self._speed_limit > 0 and self._warning_type_type == 2 and \ + self._speed_limit_warning_offsetted_rounded < int(round(self._v_ego * self._ms_to_local)): + events.add(EventName.speedLimitPreActive) + + if not self.is_active: + if self._state == SpeedLimitControlState.preActive and self._state_prev != SpeedLimitControlState.preActive and \ + self._v_cruise_rounded != self._speed_limit_offsetted_rounded: + events.add(EventName.speedLimitPreActive) + else: + if self._engage_type == Engage.user_confirm: + if self._state_prev == SpeedLimitControlState.preActive: + events.add(EventName.speedLimitConfirmed) + events.add(EventName.speedLimitActive) + elif self._engage_type == Engage.auto: + if self._state_prev not in ACTIVE_STATES: + events.add(EventName.speedLimitActive) + elif self._speed_limit_changed != 0: + events.add(EventName.speedLimitValueChange) + + def update(self, enabled, v_ego, a_ego, sm, v_cruise_setpoint, events=Events()): + _car_state = sm['carState'] + self._op_enabled = sm['controlsState'].enabled and _car_state.cruiseState.enabled and \ + not (_car_state.brakePressed and (not self._brake_pressed_prev or not _car_state.standstill)) and \ + not (events.contains(ET.OVERRIDE_LONGITUDINAL) and self._disengage_on_accelerator) + self._v_ego = v_ego + self._a_ego = a_ego + self._v_cruise_setpoint = v_cruise_setpoint + self._gas_pressed = _car_state.gasPressed + self._brake_pressed = _car_state.brakePressed + self._current_time = time.monotonic() + + self._speed_limit, self._distance, self._source = self._resolver.resolve(v_ego, self.speed_limit, sm) + + self._update_params() + self._update_calculations() + self._state_transition() + self._update_events(events) diff --git a/selfdrive/controls/lib/sunnypilot/speed_limit_resolver.py b/selfdrive/controls/lib/sunnypilot/speed_limit_resolver.py new file mode 100644 index 0000000000..c604f024fa --- /dev/null +++ b/selfdrive/controls/lib/sunnypilot/speed_limit_resolver.py @@ -0,0 +1,132 @@ +import time +import numpy as np + +from openpilot.selfdrive.controls.lib.drive_helpers import LIMIT_MAX_MAP_DATA_AGE, LIMIT_ADAPT_ACC +from openpilot.selfdrive.controls.lib.sunnypilot.common import Source, Policy +from openpilot.selfdrive.controls.lib.sunnypilot.helpers import debug + + +class SpeedLimitResolver: + def __init__(self, policy=Policy.nav_priority): + self._limit_solutions = {} # Store for speed limit solutions from different sources + self._distance_solutions = {} # Store for distance to current speed limit start for different sources + + self._policy = policy + self._policy_to_sources_map = { + Policy.car_state_only: [Source.car_state], + Policy.car_state_priority: [Source.car_state, Source.nav, Source.map_data], + Policy.map_data_priority: [Source.map_data, Source.nav, Source.car_state], + Policy.nav_priority: [Source.nav, Source.map_data, Source.car_state], + Policy.map_data_only: [Source.map_data], + Policy.combined: [Source.car_state, Source.nav, Source.map_data], + Policy.nav_only: [Source.nav] + } + for source in Source: + self._reset_limit_sources(source) + + def change_policy(self, policy: Policy): + self._policy = policy + + def _reset_limit_sources(self, source): + self._limit_solutions[source] = 0. + self._distance_solutions[source] = 0. + + def _is_sock_updated(self, sock): + return self._sm.alive[sock] and self._sm.updated[sock] + + def resolve(self, v_ego, current_speed_limit, sm): + self._v_ego = v_ego + self._current_speed_limit = current_speed_limit + self._sm = sm + + self._resolve_limit_sources() + return self._consolidate() + + def _resolve_limit_sources(self): + """Get limit solutions from each data source""" + self._get_from_car_state() + self._get_from_nav() + self._get_from_map_data() + + def _get_from_car_state(self): + if not self._is_sock_updated('carState'): + debug('SL: No carState instruction for speed limit') + return + + self._reset_limit_sources(Source.car_state) + self._limit_solutions[Source.car_state] = self._sm['carState'].cruiseState.speedLimit + self._distance_solutions[Source.car_state] = 0. + + def _get_from_nav(self): + if not self._is_sock_updated('navInstruction'): + debug('SL: No nav instruction for speed limit') + return + + # Load limits from nav instruction + self._reset_limit_sources(Source.nav) + self._limit_solutions[Source.nav] = self._sm['navInstruction'].speedLimit + self._distance_solutions[Source.nav] = 0. + + def _get_from_map_data(self): + sock = 'liveMapDataSP' + + if not self._is_sock_updated(sock): + debug('SL: No map data for speed limit') + return + + # Load limits from map_data + self._reset_limit_sources(Source.map_data) + self._process_map_data(self._sm[sock]) + + def _process_map_data(self, map_data): + gps_fix_age = time.time() - map_data.lastGpsTimestamp * 1e-3 + if gps_fix_age > LIMIT_MAX_MAP_DATA_AGE: + debug(f'SL: Ignoring map data as is too old. Age: {gps_fix_age}') + return + + speed_limit = map_data.speedLimit if map_data.speedLimitValid else 0. + next_speed_limit = map_data.speedLimitAhead if map_data.speedLimitAheadValid else 0. + + self._calculate_map_data_limits(speed_limit, next_speed_limit, map_data) + + def _calculate_map_data_limits(self, speed_limit, next_speed_limit, map_data): + distance_since_fix = self._v_ego * (time.time() - map_data.lastGpsTimestamp * 1e-3) + distance_to_speed_limit_ahead = max(0., map_data.speedLimitAheadDistance - distance_since_fix) + + self._limit_solutions[Source.map_data] = speed_limit + self._distance_solutions[Source.map_data] = 0. + + if 0. < next_speed_limit < self._v_ego: + adapt_time = (next_speed_limit - self._v_ego) / LIMIT_ADAPT_ACC + adapt_distance = self._v_ego * adapt_time + 0.5 * LIMIT_ADAPT_ACC * adapt_time**2 + + if distance_to_speed_limit_ahead <= adapt_distance: + self._limit_solutions[Source.map_data] = next_speed_limit + self._distance_solutions[Source.map_data] = distance_to_speed_limit_ahead + + def _consolidate(self): + source = self._get_source_solution_according_to_policy() + self.speed_limit = self._limit_solutions[source] if source else 0. + self.distance = self._distance_solutions[source] if source else 0. + self.source = source or Source.none + + debug(f'SL: *** Speed Limit set: {self.speed_limit}, distance: {self.distance}, source: {self.source}') + return self.speed_limit, self.distance, self.source + + def _get_source_solution_according_to_policy(self) -> Source | None: + sources_for_policy = self._policy_to_sources_map[self._policy] + + if self._policy != Policy.combined: + # They are ordered in the order of preference, so we pick the first that's non zero + for source in sources_for_policy: + if self._limit_solutions[source] > 0.: + return source + + limits = np.array([self._limit_solutions[source] for source in sources_for_policy], dtype=float) + sources = np.array([source.value for source in sources_for_policy], dtype=int) + + if len(limits) > 0: + min_idx = np.argmin(limits) + return sources[min_idx] + + return None diff --git a/selfdrive/controls/lib/sunnypilot/tests/test_speed_limit_resolver.py b/selfdrive/controls/lib/sunnypilot/tests/test_speed_limit_resolver.py new file mode 100644 index 0000000000..2903f98c23 --- /dev/null +++ b/selfdrive/controls/lib/sunnypilot/tests/test_speed_limit_resolver.py @@ -0,0 +1,132 @@ +import random +import time + +import pytest +from unittest.mock import MagicMock + +from openpilot.selfdrive.controls.lib.drive_helpers import LIMIT_MAX_MAP_DATA_AGE + +# from selfdrive.controls.lib.speed_limit_controller_tbd import SpeedLimitResolver as OriginalSpeedLimitResolver +from selfdrive.controls.lib.sunnypilot.speed_limit_resolver import SpeedLimitResolver as RefactoredSpeedLimitResolver +from openpilot.selfdrive.controls.lib.sunnypilot.common import Source +from openpilot.selfdrive.controls.lib.sunnypilot.common import Policy + + +def create_mock(properties): + mock = MagicMock() + for property, value in properties.items(): + setattr(mock, property, value) + return mock + + +def setup_sm_mock(): + cruise_speed_limit = random.uniform(0, 120) + nav_instruction_limit = random.uniform(0, 120) + live_map_data_limit = random.uniform(0, 120) + + cruise_state = create_mock({'speedLimit': cruise_speed_limit}) + car_state = create_mock({ + 'cruiseState': cruise_state, + 'gasPressed': False, + 'brakePressed': False, + 'standstill': False, + }) + nav_instruction = create_mock({'speedLimit': nav_instruction_limit}) + live_map_data = create_mock({ + 'speedLimit': live_map_data_limit, + 'speedLimitValid': True, + 'speedLimitAhead': 0., + 'speedLimitAheadValid': 0., + 'speedLimitAheadDistance': 0., + 'lastGpsTimestamp': time.time() * 1e3, + }) + sm_mock = MagicMock() + sm_mock.__getitem__.side_effect = lambda key: { + 'carState': car_state, + 'navInstruction': nav_instruction, + 'liveMapDataSP': live_map_data, + }[key] + return sm_mock + + +parametrized_policies = pytest.mark.parametrize( + "policy, sm_key, function_key", [ + (Policy.car_state_only, 'carState', 'car_state'), + (Policy.car_state_priority, 'carState', 'car_state'), + (Policy.map_data_only, 'liveMapDataSP', 'map_data'), + (Policy.map_data_priority, 'liveMapDataSP', 'map_data'), + (Policy.nav_only, 'navInstruction', 'nav'), + (Policy.nav_priority, 'navInstruction', 'nav'), + ], + ids=lambda val: val.name if hasattr(val, 'name') else str(val) +) + + +@pytest.mark.parametrize("resolver_class", [RefactoredSpeedLimitResolver], ids=["Refactored"]) +class TestSpeedLimitResolverValidation: + + @pytest.mark.parametrize("policy", list(Policy), ids=lambda policy: policy.name) + def test_initial_state(self, resolver_class, policy): + resolver = resolver_class(policy) + for source in Source: + if source in resolver._limit_solutions: + assert resolver._limit_solutions[source] == 0. + assert resolver._distance_solutions[source] == 0. + + @parametrized_policies + def test_resolver(self, resolver_class, policy, sm_key, function_key): + resolver = resolver_class(policy) + sm_mock = setup_sm_mock() + source_speed_limit = sm_mock[sm_key].cruiseState.speedLimit if sm_key == 'carState' else sm_mock[sm_key].speedLimit + + # Assert the resolver + speed_limit, _, source = resolver.resolve(source_speed_limit, 0, sm_mock) + assert speed_limit == source_speed_limit + assert source == Source[function_key] + + def test_resolver_combined(self, resolver_class): + resolver = resolver_class(Policy.combined) + sm_mock = setup_sm_mock() + socket_to_source = {'carState': Source.car_state, 'liveMapDataSP': Source.map_data, 'navInstruction': Source.nav} + minimum_key, minimum_speed_limit = min( + ((key, sm_mock[key].cruiseState.speedLimit) if key == 'carState' else (key, sm_mock[key].speedLimit) for key in + socket_to_source.keys()), key=lambda x: x[1]) + + # Assert the resolver + speed_limit, _, source = resolver.resolve(minimum_speed_limit, 0, sm_mock) + assert speed_limit == minimum_speed_limit + assert source == socket_to_source[minimum_key] + + @parametrized_policies + def test_parser(self, resolver_class, policy, sm_key, function_key): + resolver = resolver_class(policy) + sm_mock = setup_sm_mock() + source_speed_limit = sm_mock[sm_key].cruiseState.speedLimit if sm_key == 'carState' else sm_mock[sm_key].speedLimit + + # Assert the parsing + speed_limit, _, source = resolver.resolve(source_speed_limit, 0, sm_mock) + assert resolver._limit_solutions[Source[function_key]] == source_speed_limit + assert resolver._distance_solutions[Source[function_key]] == 0. + + @pytest.mark.parametrize("policy", list(Policy), ids=lambda policy: policy.name) + def test_resolve_interaction_in_update(self, resolver_class, policy): + v_ego = 50 + resolver = resolver_class(policy) + + sm_mock = setup_sm_mock() + _speed_limit, _distance, _source = resolver.resolve(v_ego, 0, sm_mock) + + # After resolution + assert _speed_limit is not None + assert _distance is not None + assert _source is not None + + @pytest.mark.parametrize("policy", list(Policy), ids=lambda policy: policy.name) + def test_old_map_data_ignored(self, resolver_class, policy): + resolver = resolver_class(policy) + sm_mock = MagicMock() + sm_mock['liveMapDataSP'].lastGpsTimestamp = (time.time() - 2 * LIMIT_MAX_MAP_DATA_AGE) * 1e3 + resolver._sm = sm_mock + resolver._get_from_map_data() + assert resolver._limit_solutions[Source.map_data] == 0. + assert resolver._distance_solutions[Source.map_data] == 0. diff --git a/selfdrive/controls/lib/tests/test_latcontrol.py b/selfdrive/controls/lib/tests/test_latcontrol.py index 9580e604ff..866270ca60 100755 --- a/selfdrive/controls/lib/tests/test_latcontrol.py +++ b/selfdrive/controls/lib/tests/test_latcontrol.py @@ -12,7 +12,7 @@ from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque from openpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel -from openpilot.selfdrive.navd.tests.test_map_renderer import gen_llk +from openpilot.common.mock.generators import generate_liveLocationKalman class TestLatControl(unittest.TestCase): @@ -30,13 +30,11 @@ class TestLatControl(unittest.TestCase): CS.vEgo = 30 CS.steeringPressed = False - last_actuators = car.CarControl.Actuators.new_message() - params = log.LiveParametersData.new_message() - llk = gen_llk() + llk = generate_liveLocationKalman() for _ in range(1000): - _, _, lac_log = controller.update(True, CS, VM, params, last_actuators, False, 1, 0, llk) + _, _, lac_log = controller.update(True, CS, VM, params, False, 1, llk) self.assertTrue(lac_log.saturated) diff --git a/selfdrive/controls/lib/turn_speed_controller.py b/selfdrive/controls/lib/turn_speed_controller.py index 5612b8720b..28ecf10593 100644 --- a/selfdrive/controls/lib/turn_speed_controller.py +++ b/selfdrive/controls/lib/turn_speed_controller.py @@ -1,62 +1,63 @@ -import numpy as np +import json +import math import time -from common.params import Params from cereal import custom -from selfdrive.controls.lib.drive_helpers import LIMIT_ADAPT_ACC, LIMIT_MIN_SPEED, LIMIT_MAX_MAP_DATA_AGE, \ - LIMIT_SPEED_OFFSET_TH, CONTROL_N, LIMIT_MIN_ACC, LIMIT_MAX_ACC -from selfdrive.modeld.constants import T_IDXS +from openpilot.common.params import Params +from openpilot.system.version import is_release_sp_branch + +R = 6373000.0 # approximate radius of earth in meters +TO_RADIANS = math.pi / 180 +TO_DEGREES = 180 / math.pi +TARGET_JERK = -0.6 # m/s^3 There's some jounce limits that are not consistent so we're fudging this some +TARGET_ACCEL = -1.2 # m/s^2 should match up with the long planner limit +TARGET_OFFSET = 1.0 # seconds - This controls how soon before the curve you reach the target velocity. It also helps + # reach the target velocity when innacuracies in the distance modeling logic would cause overshoot. + # The value is multiplied against the target velocity to determine the additional distance. This is + # done to keep the distance calculations consistent but results in the offset actually being less + # time than specified depending on how much of a speed diffrential there is between v_ego and the + # target velocity. -_ACTIVE_LIMIT_MIN_ACC = -0.5 # m/s^2 Maximum deceleration allowed while active. -_ACTIVE_LIMIT_MAX_ACC = 0.5 # m/s^2 Maximum acelration allowed while active. +def calculate_accel(t, target_jerk, a_ego): + return a_ego + target_jerk * t -_DEBUG = False +def calculate_velocity(t, target_jerk, a_ego, v_ego): + return v_ego + a_ego * t + target_jerk/2 * (t ** 2) + + +def calculate_distance(t, target_jerk, a_ego, v_ego): + return t * v_ego + a_ego/2 * (t ** 2) + target_jerk/6 * (t ** 3) + + +PARAMS_UPDATE_PERIOD = 5. TurnSpeedControlState = custom.LongitudinalPlanSP.SpeedLimitControlState -def _debug(msg): - if not _DEBUG: - return - print(msg) +# points should be in radians +# output is meters +def distance_to_point(ax, ay, bx, by): + a = math.sin((bx-ax)/2)*math.sin((bx-ax)/2) + math.cos(ax) * math.cos(bx)*math.sin((by-ay)/2)*math.sin((by-ay)/2) + c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a)) + + return R * c # in meters -def _description_for_state(turn_speed_control_state): - if turn_speed_control_state == TurnSpeedControlState.inactive: - return 'INACTIVE' - if turn_speed_control_state == TurnSpeedControlState.tempInactive: - return 'TEMP INACTIVE' - if turn_speed_control_state == TurnSpeedControlState.adapting: - return 'ADAPTING' - if turn_speed_control_state == TurnSpeedControlState.active: - return 'ACTIVE' - - -class TurnSpeedController(): +class TurnSpeedController: def __init__(self): - self._params = Params() - self._last_params_update = 0. - self._is_enabled = self._params.get_bool("TurnSpeedControl") + self.params = Params() + self.mem_params = Params("/dev/shm/params") + self.enabled = self.params.get_bool("TurnSpeedControl") and not is_release_sp_branch() + self.last_params_update = 0 self._op_enabled = False - self._v_ego = 0. - self._a_ego = 0. - self._v_cruise_setpoint = 0. - - self._v_offset = 0. - self._speed_limit = 0. - self._speed_limit_temp_inactive = 0. - self._distance = 0. - self._turn_sign = 0 + self._gas_pressed = False self._state = TurnSpeedControlState.inactive - - self._next_speed_limit_prev = 0. - - self._a_target = 0. - - @property - def a_target(self): - return self._a_target if self.is_active else self._a_ego + self._v_cruise = 0 + self._min_v = 0 + self.target_lat = 0.0 + self.target_lon = 0.0 + self.target_v = 0.0 @property def state(self): @@ -64,180 +65,163 @@ class TurnSpeedController(): @state.setter def state(self, value): - if value != self._state: - _debug(f'Turn Speed Controller state: {_description_for_state(value)}') - - if value == TurnSpeedControlState.adapting: - _debug('TSC: Enteriing Adapting as speed offset is below threshold') - _debug(f'_v_offset: {self._v_offset * 3.6}\nspeed_limit: {self.speed_limit * 3.6}') - _debug(f'_v_ego: {self._v_ego * 3.6}\ndistance: {self.distance}') - - if value == TurnSpeedControlState.tempInactive: - # Track the speed limit value when controller was set to temp inactive. - self._speed_limit_temp_inactive = self._speed_limit - self._state = value @property def is_active(self): - return self.state > TurnSpeedControlState.tempInactive + return self.state > TurnSpeedControlState.tempInactive and self.enabled @property - def speed_limit(self): - return max(self._speed_limit, LIMIT_MIN_SPEED) if self._speed_limit > 0. else 0. + def v_target(self): + return self._min_v - @property - def distance(self): - return max(self._distance, 0.) - - @property - def turn_sign(self): - return self._turn_sign - - def _get_limit_from_map_data(self, sm): - """Provides the speed limit, distance and turn sign to it for turns based on map data. - """ - # Ignore if no live map data - sock = 'liveMapDataSP' - if sm.logMonoTime[sock] is None: - _debug('TS: No map data for turn speed limit') - return 0., 0., 0 - - # Load map_data and initialize - map_data = sm[sock] - speed_limit = 0. - - # Calculate the age of the gps fix. Ignore if too old. - gps_fix_age = time.time() - map_data.lastGpsTimestamp * 1e-3 - if gps_fix_age > LIMIT_MAX_MAP_DATA_AGE: - _debug(f'TS: Ignoring map data as is too old. Age: {gps_fix_age}') - return 0., 0., 0 - - # Load turn ahead sections info from map_data with distances corrected by gps_fix_age - distance_since_fix = self._v_ego * gps_fix_age - distances_to_sections_ahead = np.maximum(0., np.array(map_data.turnSpeedLimitsAheadDistances) - distance_since_fix) - speed_limit_in_sections_ahead = map_data.turnSpeedLimitsAhead - turn_signs_in_sections_ahead = map_data.turnSpeedLimitsAheadSigns - - # Ensure current speed limit is considered only if we are inside the section. - if map_data.turnSpeedLimitValid and self._v_ego > 0.: - speed_limit_end_time = (map_data.turnSpeedLimitEndDistance / self._v_ego) - gps_fix_age - if speed_limit_end_time > 0.: - speed_limit = map_data.turnSpeedLimit - - # When we have no ahead speed limit to consider or all are greater than current speed limit - # or car has stopped, then provide current value and reset tracking. - turn_sign = map_data.turnSpeedLimitSign if map_data.turnSpeedLimitValid else 0 - if len(speed_limit_in_sections_ahead) == 0 or self._v_ego <= 0. or \ - (speed_limit > 0 and np.amin(speed_limit_in_sections_ahead) > speed_limit): - self._next_speed_limit_prev = 0. - return speed_limit, 0., turn_sign - - # Calculated the time needed to adapt to the limits ahead and the corresponding distances. - adapt_times = (np.maximum(speed_limit_in_sections_ahead, LIMIT_MIN_SPEED) - self._v_ego) / LIMIT_ADAPT_ACC - adapt_distances = self._v_ego * adapt_times + 0.5 * LIMIT_ADAPT_ACC * adapt_times**2 - distance_gaps = distances_to_sections_ahead - adapt_distances - - # We select as next speed limit, the one that have the lowest distance gap. - next_idx = np.argmin(distance_gaps) - next_speed_limit = speed_limit_in_sections_ahead[next_idx] - distance_to_section_ahead = distances_to_sections_ahead[next_idx] - next_turn_sign = turn_signs_in_sections_ahead[next_idx] - distance_gap = distance_gaps[next_idx] - - # When we have a next_speed_limit value that has not changed from a provided next speed limit value - # in previous resolutions, we keep providing it along with the updated distance to it. - if next_speed_limit == self._next_speed_limit_prev: - return next_speed_limit, distance_to_section_ahead, next_turn_sign - - # Reset tracking - self._next_speed_limit_prev = 0. - - # When we detect we are close enough, we provide the next limit value and track it. - if distance_gap <= 0.: - self._next_speed_limit_prev = next_speed_limit - return next_speed_limit, distance_to_section_ahead, next_turn_sign - - # Otherwise we just provide the calculated speed_limit - return speed_limit, 0., turn_sign - - def _update_params(self): + def update_params(self): t = time.monotonic() - if t > self._last_params_update + 5.0: - self._is_enabled = self._params.get_bool("TurnSpeedControl") - self._last_params_update = t + if t > self.last_params_update + PARAMS_UPDATE_PERIOD: + self.enabled = self.params.get_bool("TurnSpeedControl") and not is_release_sp_branch() + self.last_params_update = t - def _update_calculations(self): - # Update current velocity offset (error) - self._v_offset = self.speed_limit - self._v_ego + def target_speed(self, v_ego, a_ego) -> float: + if not self.enabled: + return 0.0 - def _state_transition(self, sm): - # In any case, if op is disabled, or turn speed limit control is disabled - # or the reported speed limit is 0, deactivate. - if not self._op_enabled or not self._is_enabled or self.speed_limit == 0.: + lat = 0.0 + lon = 0.0 + try: + position = json.loads(self.mem_params.get("LastGPSPosition")) + lat = position["latitude"] + lon = position["longitude"] + except: return 0.0 + + try: + target_velocities = json.loads(self.mem_params.get("MapTargetVelocities")) + except: return 0.0 + + min_dist = 1000 + min_idx = 0 + distances = [] + + # find our location in the path + for i in range(len(target_velocities)): + target_velocity = target_velocities[i] + tlat = target_velocity["latitude"] + tlon = target_velocity["longitude"] + d = distance_to_point(lat * TO_RADIANS, lon * TO_RADIANS, tlat * TO_RADIANS, tlon * TO_RADIANS) + distances.append(d) + if d < min_dist: + min_dist = d + min_idx = i + + # only look at values from our current position forward + forward_points = target_velocities[min_idx:] + forward_distances = distances[min_idx:] + + # find velocities that we are within the distance we need to adjust for + valid_velocities = [] + for i in range(len(forward_points)): + target_velocity = forward_points[i] + tlat = target_velocity["latitude"] + tlon = target_velocity["longitude"] + tv = target_velocity["velocity"] + if tv > v_ego: + continue + + d = forward_distances[i] + + a_diff = (a_ego - TARGET_ACCEL) + accel_t = abs(a_diff / TARGET_JERK) + min_accel_v = calculate_velocity(accel_t, TARGET_JERK, a_ego, v_ego) + + max_d = 0 + if tv > min_accel_v: + # calculate time needed based on target jerk + a = 0.5 * TARGET_JERK + b = a_ego + c = v_ego - tv + t_a = -1 * ((b**2 - 4 * a * c) ** 0.5 + b) / 2 * a + t_b = ((b**2 - 4 * a * c) ** 0.5 - b) / 2 * a + if not isinstance(t_a, complex) and t_a > 0: + t = t_a + else: + t = t_b + if isinstance(t, complex): + continue + + max_d = max_d + calculate_distance(t, TARGET_JERK, a_ego, v_ego) + else: + t = accel_t + max_d = calculate_distance(t, TARGET_JERK, a_ego, v_ego) + + # calculate additional time needed based on target accel + t = abs((min_accel_v - tv) / TARGET_ACCEL) + max_d += calculate_distance(t, 0, TARGET_ACCEL, min_accel_v) + + if d < max_d + tv * TARGET_OFFSET: + valid_velocities.append((float(tv), tlat, tlon)) + + # Find the smallest velocity we need to adjust for + min_v = 100.0 + target_lat = 0.0 + target_lon = 0.0 + for tv, lat, lon in valid_velocities: + if tv < min_v: + min_v = tv + target_lat = lat + target_lon = lon + + if self.target_v < min_v and not (self.target_lat == 0 and self.target_lon == 0): + for i in range(len(forward_points)): + target_velocity = forward_points[i] + tlat = target_velocity["latitude"] + tlon = target_velocity["longitude"] + tv = target_velocity["velocity"] + if tv > v_ego: + continue + + if tlat == self.target_lat and tlon == self.target_lon and tv == self.target_v: + return float(self.target_v) + # not found so lets reset + self.target_v = 0.0 + self.target_lat = 0.0 + self.target_lon = 0.0 + + self.target_v = min_v + self.target_lat = target_lat + self.target_lon = target_lon + + return min_v + + def _state_transition(self): + if not self._op_enabled or not self.enabled: self.state = TurnSpeedControlState.inactive return - # In any case, we deactivate the speed limit controller temporarily - # if gas is pressed (to support gas override implementations). - if sm['carState'].gasPressed: + if self._gas_pressed: self.state = TurnSpeedControlState.tempInactive return - # inactive + # INACTIVE if self.state == TurnSpeedControlState.inactive: - # If the limit speed offset is negative (i.e. reduce speed) and lower than threshold and distanct to turn limit - # is positive (not in turn yet) we go to adapting state to reduce speed, otherwise we go directly to active - if self._v_offset < LIMIT_SPEED_OFFSET_TH and self.distance > 0.: - self.state = TurnSpeedControlState.adapting - else: + if self._v_cruise > self._min_v != 0: self.state = TurnSpeedControlState.active - # tempInactive + + # TEMP INACTIVE elif self.state == TurnSpeedControlState.tempInactive: - # if the speed limit recorded when going to temp Inactive changes - # then set to inactive, activation will happen on next cycle - if self._speed_limit != self._speed_limit_temp_inactive: - self.state = TurnSpeedControlState.inactive - # adapting - elif self.state == TurnSpeedControlState.adapting: - # Go to active once the speed offset is over threshold or the distance to turn is now 0. - if self._v_offset >= LIMIT_SPEED_OFFSET_TH or self.distance == 0.: + if self._v_cruise > self._min_v != 0: self.state = TurnSpeedControlState.active - # active + else: + self.state = TurnSpeedControlState.inactive + + # ACTIVE elif self.state == TurnSpeedControlState.active: - # Go to adapting if the speed offset goes below threshold as long as the distance to turn is still positive. - if self._v_offset < LIMIT_SPEED_OFFSET_TH and self.distance > 0.: - self.state = TurnSpeedControlState.adapting + if not (self._v_cruise > self._min_v != 0): + self.state = TurnSpeedControlState.inactive - def _update_solution(self): - # inactive or tempInactive state - if self.state <= TurnSpeedControlState.tempInactive: - # Preserve current values - a_target = self._a_ego - # adapting - elif self.state == TurnSpeedControlState.adapting: - # When adapting we target to achieve the speed limit on the distance. - a_target = (self.speed_limit**2 - self._v_ego**2) / (2. * self.distance) - a_target = np.clip(a_target, LIMIT_MIN_ACC, LIMIT_MAX_ACC) - # active - elif self.state == TurnSpeedControlState.active: - # When active we are trying to keep the speed constant around the control time horizon. - # but under constrained acceleration limits since we are in a turn. - a_target = self._v_offset / T_IDXS[CONTROL_N] - a_target = np.clip(a_target, _ACTIVE_LIMIT_MIN_ACC, _ACTIVE_LIMIT_MAX_ACC) + def update(self, op_enabled, v_ego, sm, v_cruise): + self.update_params() + self._op_enabled = op_enabled + self._gas_pressed = sm['carState'].gasPressed + self._v_cruise = v_cruise + self._min_v = self.target_speed(v_ego, sm['carState'].aEgo) - # update solution values. - self._a_target = a_target - - def update(self, enabled, v_ego, a_ego, sm): - self._op_enabled = enabled - self._v_ego = v_ego - self._a_ego = a_ego - - # Get the speed limit from Map Data - self._speed_limit, self._distance, self._turn_sign = self._get_limit_from_map_data(sm) - - self._update_params() - self._update_calculations() - self._state_transition(sm) - self._update_solution() + self._state_transition() diff --git a/selfdrive/controls/lib/vision_turn_controller.py b/selfdrive/controls/lib/vision_turn_controller.py index e3e4286cc4..5d90a5578a 100644 --- a/selfdrive/controls/lib/vision_turn_controller.py +++ b/selfdrive/controls/lib/vision_turn_controller.py @@ -1,85 +1,26 @@ +# PFEIFER - VTSC + +# Acknowledgements: +# Past versions of this code were based on the move-fast teams vtsc +# implementation. (https://github.com/move-fast/openpilot) Huge thanks to them +# for their initial implementation. I also used sunnypilot as a reference. +# (https://github.com/sunnyhaibin/sunnypilot) Big thanks for sunny's amazing work + import numpy as np -import math import time from cereal import custom -from common.numpy_fast import interp -from common.params import Params -from common.conversions import Conversions as CV -from selfdrive.controls.lib.lateral_planner import TRAJECTORY_SIZE -from selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX +from openpilot.common.conversions import Conversions as CV +from openpilot.common.params import Params +from openpilot.selfdrive.controls.lib.sunnypilot.helpers import debug +TARGET_LAT_A = 1.9 # m/s^2 +MIN_TARGET_V = 5 # m/s -_MIN_V = 5.6 # Do not operate under 20km/h - -_ENTERING_PRED_LAT_ACC_TH = 1.3 # Predicted Lat Acc threshold to trigger entering turn state. -_ABORT_ENTERING_PRED_LAT_ACC_TH = 1.1 # Predicted Lat Acc threshold to abort entering state if speed drops. - -_TURNING_LAT_ACC_TH = 1.6 # Lat Acc threshold to trigger turning turn state. - -_LEAVING_LAT_ACC_TH = 1.3 # Lat Acc threshold to trigger leaving turn state. -_FINISH_LAT_ACC_TH = 1.1 # Lat Acc threshold to trigger end of turn cycle. - -_EVAL_STEP = 5. # mts. Resolution of the curvature evaluation. -_EVAL_START = 20. # mts. Distance ahead where to start evaluating vision curvature. -_EVAL_LENGHT = 150. # mts. Distance ahead where to stop evaluating vision curvature. -_EVAL_RANGE = np.arange(_EVAL_START, _EVAL_LENGHT, _EVAL_STEP) - -_A_LAT_REG_MAX = 2. # Maximum lateral acceleration - -_NO_OVERSHOOT_TIME_HORIZON = 4. # s. Time to use for velocity desired based on a_target when not overshooting. - -# Lookup table for the minimum smooth deceleration during the ENTERING state -# depending on the actual maximum absolute lateral acceleration predicted on the turn ahead. -_ENTERING_SMOOTH_DECEL_V = [-0.2, -1.] # min decel value allowed on ENTERING state -_ENTERING_SMOOTH_DECEL_BP = [1.3, 3.] # absolute value of lat acc ahead - -# Lookup table for the acceleration for the TURNING state -# depending on the current lateral acceleration of the vehicle. -_TURNING_ACC_V = [0.5, 0., -0.4] # acc value -_TURNING_ACC_BP = [1.5, 2.3, 3.] # absolute value of current lat acc - -_LEAVING_ACC = 0.5 # Confortble acceleration to regain speed while leaving a turn. - -_MIN_LANE_PROB = 0.6 # Minimum lanes probability to allow curvature prediction based on lanes. - -_DEBUG = False - - -def _debug(msg): - if not _DEBUG: - return - print(msg) - +PARAMS_UPDATE_PERIOD = 5. VisionTurnControllerState = custom.LongitudinalPlanSP.VisionTurnControllerState -def eval_curvature(poly, x_vals): - """ - This function returns a vector with the curvature based on path defined by `poly` - evaluated on distance vector `x_vals` - """ - # https://en.wikipedia.org/wiki/Curvature# Local_expressions - def curvature(x): - a = abs(2 * poly[1] + 6 * poly[0] * x) / (1 + (3 * poly[0] * x**2 + 2 * poly[1] * x + poly[2])**2)**(1.5) - return a - - return np.vectorize(curvature)(x_vals) - - -def eval_lat_acc(v_ego, x_curv): - """ - This function returns a vector with the lateral acceleration based - for the provided speed `v_ego` evaluated over curvature vector `x_curv` - """ - - def lat_acc(curv): - a = v_ego**2 * curv - return a - - return np.vectorize(lat_acc)(x_curv) - - def _description_for_state(turn_controller_state): if turn_controller_state == VisionTurnControllerState.disabled: return 'DISABLED' @@ -91,20 +32,19 @@ def _description_for_state(turn_controller_state): return 'LEAVING' -class VisionTurnController(): +class VisionTurnController: def __init__(self, CP): self._params = Params() self._CP = CP self._op_enabled = False self._gas_pressed = False self._is_enabled = self._params.get_bool("TurnVisionControl") - self._disengage_on_accelerator = self._params.get_bool("DisengageOnAccelerator") self._last_params_update = 0. - self._v_cruise_setpoint = 0. self._v_ego = 0. - self._a_ego = 0. - self._a_target = 0. - self._v_overshoot = 0. + self._v_target = MIN_TARGET_V + self._current_lat_acc = 0. + self._max_pred_lat_acc = 0. + self._v_cruise = 0. self._state = VisionTurnControllerState.disabled self._reset() @@ -116,25 +56,18 @@ class VisionTurnController(): @state.setter def state(self, value): if value != self._state: - _debug(f'TVC: TurnVisionController state: {_description_for_state(value)}') + debug(f"V-TSC: VisionTurnControllerState state: {_description_for_state(value)}") if value == VisionTurnControllerState.disabled: self._reset() self._state = value @property - def a_target(self): - return self._a_target if self.is_active else self._a_ego - - @property - def v_turn(self): - if not self.is_active: - return self._v_cruise_setpoint - return self._v_overshoot if self._lat_acc_overshoot_ahead \ - else self._v_ego + self._a_target * _NO_OVERSHOOT_TIME_HORIZON + def v_target(self): + return self._v_target @property def is_active(self): - return self._state != VisionTurnControllerState.disabled + return self._state != VisionTurnControllerState.disabled and self._is_enabled @property def current_lat_acc(self): @@ -146,156 +79,54 @@ class VisionTurnController(): def _reset(self): self._current_lat_acc = 0. - self._max_v_for_current_curvature = 0. self._max_pred_lat_acc = 0. - self._v_overshoot_distance = 200. - self._lat_acc_overshoot_ahead = False def _update_params(self): t = time.monotonic() - if t > self._last_params_update + 5.0: + if t > self._last_params_update + PARAMS_UPDATE_PERIOD: self._is_enabled = self._params.get_bool("TurnVisionControl") self._last_params_update = t def _update_calculations(self, sm): - # Get path polynomial approximation for curvature estimation from model data. - path_poly = None - model_data = sm['modelV2'] if sm.valid.get('modelV2', False) else None - lat_planner_data = sm['lateralPlanSP'] if sm.valid.get('lateralPlanSP', False) else None - - # 1. When the probability of lanes is good enough, compute polynomial from lanes as they are way more stable - # on current mode than drving path. - if model_data is not None and len(model_data.laneLines) == 4 and len(model_data.laneLines[0].t) == TRAJECTORY_SIZE: - ll_x = model_data.laneLines[1].x # left and right ll x is the same - lll_y = np.array(model_data.laneLines[1].y) - rll_y = np.array(model_data.laneLines[2].y) - l_prob = model_data.laneLineProbs[1] - r_prob = model_data.laneLineProbs[2] - lll_std = model_data.laneLineStds[1] - rll_std = model_data.laneLineStds[2] - - # Reduce reliance on lanelines that are too far apart or will be in a few seconds - width_pts = rll_y - lll_y - prob_mods = [] - for t_check in [0.0, 1.5, 3.0]: - width_at_t = interp(t_check * (self._v_ego + 7), ll_x, width_pts) - prob_mods.append(interp(width_at_t, [4.0, 5.0], [1.0, 0.0])) - mod = min(prob_mods) - l_prob *= mod - r_prob *= mod - - # Reduce reliance on uncertain lanelines - l_std_mod = interp(lll_std, [.15, .3], [1.0, 0.0]) - r_std_mod = interp(rll_std, [.15, .3], [1.0, 0.0]) - l_prob *= l_std_mod - r_prob *= r_std_mod - - # Find path from lanes as the average center lane only if min probability on both lanes is above threshold. - if l_prob > _MIN_LANE_PROB and r_prob > _MIN_LANE_PROB: - c_y = width_pts / 2 + lll_y - path_poly = np.polyfit(ll_x, c_y, 3) - - # 2. If not polynomial derived from lanes, then derive it from compensated driving path with lanes as - # provided by `lateralPlanner`. - if path_poly is None and lat_planner_data is not None and len(lat_planner_data.dPathWLinesX) > 0 \ - and lat_planner_data.dPathWLinesX[0] > 0: - path_poly = np.polyfit(lat_planner_data.dPathWLinesX, lat_planner_data.dPathWLinesY, 3) - - # 3. If no polynomial derived from lanes or driving path, then provide a straight line poly. - if path_poly is None: - path_poly = np.array([0., 0., 0., 0.]) + rate_plan = np.array(np.abs(sm['modelV2'].orientationRate.z)) + vel_plan = np.array(sm['modelV2'].velocity.x) current_curvature = abs( sm['carState'].steeringAngleDeg * CV.DEG_TO_RAD / (self._CP.steerRatio * self._CP.wheelbase)) self._current_lat_acc = current_curvature * self._v_ego**2 - self._max_v_for_current_curvature = math.sqrt(_A_LAT_REG_MAX / current_curvature) if current_curvature > 0 \ - else V_CRUISE_MAX * CV.KPH_TO_MS - pred_curvatures = eval_curvature(path_poly, _EVAL_RANGE) - max_pred_curvature = np.amax(pred_curvatures) - self._max_pred_lat_acc = self._v_ego**2 * max_pred_curvature + # get the maximum lat accel from the model + predicted_lat_accels = rate_plan * vel_plan + self._max_pred_lat_acc = np.amax(predicted_lat_accels) - max_curvature_for_vego = _A_LAT_REG_MAX / max(self._v_ego, 0.1)**2 - lat_acc_overshoot_idxs = np.nonzero(pred_curvatures >= max_curvature_for_vego)[0] - self._lat_acc_overshoot_ahead = len(lat_acc_overshoot_idxs) > 0 + # get the maximum curve based on the current velocity + v_ego = max(self._v_ego, 0.1) # ensure a value greater than 0 for calculations + max_curve = self.max_pred_lat_acc / (v_ego**2) - if self._lat_acc_overshoot_ahead: - self._v_overshoot = min(math.sqrt(_A_LAT_REG_MAX / max_pred_curvature), self._v_cruise_setpoint) - self._v_overshoot_distance = max(lat_acc_overshoot_idxs[0] * _EVAL_STEP + _EVAL_START, _EVAL_STEP) - _debug(f'TVC: High LatAcc. Dist: {self._v_overshoot_distance:.2f}, v: {self._v_overshoot * CV.MS_TO_KPH:.2f}') + # Get the target velocity for the maximum curve + self._v_target = (TARGET_LAT_A / max_curve) ** 0.5 + self._v_target = max(self._v_target, MIN_TARGET_V) def _state_transition(self): - # In any case, if system is disabled or the feature is disabeld or gas is pressed, disable. - if not self._op_enabled or not self._is_enabled or (self._gas_pressed and self._disengage_on_accelerator): + if not self._op_enabled or not self._is_enabled or self._gas_pressed or self._v_ego < MIN_TARGET_V: self.state = VisionTurnControllerState.disabled return # DISABLED if self.state == VisionTurnControllerState.disabled: - # Do not enter a turn control cycle if speed is low. - if self._v_ego <= _MIN_V: - pass - # If substantial lateral acceleration is predicted ahead, then move to Entering turn state. - elif self._max_pred_lat_acc >= _ENTERING_PRED_LAT_ACC_TH: - self.state = VisionTurnControllerState.entering - # ENTERING - elif self.state == VisionTurnControllerState.entering: - # Transition to Turning if current lateral acceleration is over the threshold. - if self._current_lat_acc >= _TURNING_LAT_ACC_TH: + if self._v_cruise > self._v_target: self.state = VisionTurnControllerState.turning - # Abort if the predicted lateral acceleration drops - elif self._max_pred_lat_acc < _ABORT_ENTERING_PRED_LAT_ACC_TH: - self.state = VisionTurnControllerState.disabled # TURNING elif self.state == VisionTurnControllerState.turning: - # Transition to Leaving if current lateral acceleration drops drops below threshold. - if self._current_lat_acc <= _LEAVING_LAT_ACC_TH: - self.state = VisionTurnControllerState.leaving - # LEAVING - elif self.state == VisionTurnControllerState.leaving: - # Transition back to Turning if current lateral acceleration goes back over the threshold. - if self._current_lat_acc >= _TURNING_LAT_ACC_TH: - self.state = VisionTurnControllerState.turning - # Finish if current lateral acceleration goes below threshold. - elif self._current_lat_acc < _FINISH_LAT_ACC_TH: + if not (self._v_cruise > self._v_target): self.state = VisionTurnControllerState.disabled - def _update_solution(self): - # DISABLED - if self.state == VisionTurnControllerState.disabled: - # when not overshooting, calculate v_turn as the speed at the prediction horizon when following - # the smooth deceleration. - a_target = self._a_ego - # ENTERING - elif self.state == VisionTurnControllerState.entering: - # when not overshooting, target a smooth deceleration in preparation for a sharp turn to come. - a_target = interp(self._max_pred_lat_acc, _ENTERING_SMOOTH_DECEL_BP, _ENTERING_SMOOTH_DECEL_V) - if self._lat_acc_overshoot_ahead: - # when overshooting, target the acceleration needed to achieve the overshoot speed at - # the required distance - a_target = min((self._v_overshoot**2 - self._v_ego**2) / (2 * self._v_overshoot_distance), a_target) - _debug(f'TVC Entering: Overshooting: {self._lat_acc_overshoot_ahead}') - _debug(f' Decel: {a_target:.2f}, target v: {self.v_turn * CV.MS_TO_KPH}') - # TURNING - elif self.state == VisionTurnControllerState.turning: - # When turning we provide a target acceleration that is comfortable for the lateral accelearation felt. - a_target = interp(self._current_lat_acc, _TURNING_ACC_BP, _TURNING_ACC_V) - # LEAVING - elif self.state == VisionTurnControllerState.leaving: - # When leaving we provide a comfortable acceleration to regain speed. - a_target = _LEAVING_ACC - - # update solution values. - self._a_target = a_target - - def update(self, enabled, v_ego, a_ego, v_cruise_setpoint, sm): + def update(self, enabled, v_ego, v_cruise, sm): self._op_enabled = enabled self._gas_pressed = sm['carState'].gasPressed self._v_ego = v_ego - self._a_ego = a_ego - self._v_cruise_setpoint = v_cruise_setpoint + self._v_cruise = v_cruise self._update_params() self._update_calculations(sm) self._state_transition() - self._update_solution() diff --git a/selfdrive/controls/plannerd.py b/selfdrive/controls/plannerd.py index 871bba52ab..3c1e8068c5 100755 --- a/selfdrive/controls/plannerd.py +++ b/selfdrive/controls/plannerd.py @@ -4,30 +4,36 @@ import numpy as np from cereal import car from openpilot.common.params import Params from openpilot.common.realtime import Priority, config_realtime_process -from openpilot.system.swaglog import cloudlog -from openpilot.selfdrive.modeld.constants import T_IDXS +from openpilot.common.swaglog import cloudlog +from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.controls.lib.longitudinal_planner import LongitudinalPlanner from openpilot.selfdrive.controls.lib.lateral_planner import LateralPlanner +from openpilot.selfdrive.sunnypilot import get_model_generation import cereal.messaging as messaging + def cumtrapz(x, t): return np.concatenate([[0], np.cumsum(((x[0:-1] + x[1:])/2) * np.diff(t))]) -def publish_ui_plan(sm, pm, lateral_planner, longitudinal_planner): - plan_odo = cumtrapz(longitudinal_planner.v_desired_trajectory_full, T_IDXS) - model_odo = cumtrapz(lateral_planner.v_plan, T_IDXS) +def publish_ui_plan(sm, pm, lateral_planner, longitudinal_planner, model_use_lateral_planner): + if model_use_lateral_planner: + plan_odo = cumtrapz(longitudinal_planner.v_desired_trajectory_full, ModelConstants.T_IDXS) + model_odo = cumtrapz(lateral_planner.v_plan, ModelConstants.T_IDXS) ui_send = messaging.new_message('uiPlan') ui_send.valid = sm.all_checks(service_list=['carState', 'controlsState', 'modelV2']) uiPlan = ui_send.uiPlan uiPlan.frameId = sm['modelV2'].frameId - uiPlan.position.x = np.interp(plan_odo, model_odo, lateral_planner.lat_mpc.x_sol[:,0]).tolist() - uiPlan.position.y = np.interp(plan_odo, model_odo, lateral_planner.lat_mpc.x_sol[:,1]).tolist() - uiPlan.position.z = np.interp(plan_odo, model_odo, lateral_planner.path_xyz[:,2]).tolist() + if model_use_lateral_planner: + x_fp = (lateral_planner.x_sol if lateral_planner.dynamic_lane_profile_status else lateral_planner.lat_mpc.x_sol)[:,0] + y_fp = (lateral_planner.x_sol if lateral_planner.dynamic_lane_profile_status else lateral_planner.lat_mpc.x_sol)[:,1] + uiPlan.position.x = np.interp(plan_odo, model_odo, x_fp).tolist() if model_use_lateral_planner else list(sm['modelV2'].position.x) + uiPlan.position.y = np.interp(plan_odo, model_odo, y_fp).tolist() if model_use_lateral_planner else list(sm['modelV2'].position.y) + uiPlan.position.z = np.interp(plan_odo, model_odo, lateral_planner.path_xyz[:,2]).tolist() if model_use_lateral_planner else list(sm['modelV2'].position.z) uiPlan.accel = longitudinal_planner.a_desired_trajectory_full.tolist() pm.send('uiPlan', ui_send) -def plannerd_thread(sm=None, pm=None): +def plannerd_thread(): config_realtime_process(5, Priority.CTRL_LOW) cloudlog.info("plannerd is waiting for CarParams") @@ -38,21 +44,18 @@ def plannerd_thread(sm=None, pm=None): debug_mode = bool(int(os.getenv("DEBUG", "0"))) - use_lanelines = False - - cloudlog.event("e2e mode", on=use_lanelines) - longitudinal_planner = LongitudinalPlanner(CP) - lateral_planner = LateralPlanner(CP, debug=debug_mode, use_lanelines=use_lanelines) - if sm is None: - sm = messaging.SubMaster(['carControl', 'carState', 'controlsState', 'radarState', 'modelV2', 'lateralPlan', - 'longitudinalPlan', 'navInstruction', 'lateralPlanSP', 'longitudinalPlanSP', - 'liveMapDataSP', 'e2eLongStateSP'], - poll=['radarState', 'modelV2'], ignore_avg_freq=['radarState']) + custom_model, model_gen = get_model_generation(params) + model_use_lateral_planner = custom_model and model_gen == 1 + lateral_planner = LateralPlanner(CP, debug=debug_mode, model_use_lateral_planner=model_use_lateral_planner) + lateral_planner_svs = ['lateralPlanDEPRECATED', 'lateralPlanSPDEPRECATED'] - if pm is None: - pm = messaging.PubMaster(['longitudinalPlan', 'lateralPlan', 'uiPlan', "longitudinalPlanSP", "lateralPlanSP"]) + pm = messaging.PubMaster(['longitudinalPlan', 'uiPlan', 'longitudinalPlanSP'] + lateral_planner_svs) + sm = messaging.SubMaster(['carControl', 'carState', 'controlsState', 'radarState', 'modelV2', + 'longitudinalPlan', 'navInstruction', 'longitudinalPlanSP', + 'liveMapDataSP', 'e2eLongStateSP'] + lateral_planner_svs, + poll=['radarState', 'modelV2'], ignore_avg_freq=['radarState']) while True: sm.update() @@ -62,10 +65,10 @@ def plannerd_thread(sm=None, pm=None): lateral_planner.publish(sm, pm) longitudinal_planner.update(sm) longitudinal_planner.publish(sm, pm) - publish_ui_plan(sm, pm, lateral_planner, longitudinal_planner) + publish_ui_plan(sm, pm, lateral_planner, longitudinal_planner, model_use_lateral_planner) -def main(sm=None, pm=None): - plannerd_thread(sm, pm) +def main(): + plannerd_thread() if __name__ == "__main__": diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py index 8be4a14f5d..89d09692b2 100755 --- a/selfdrive/controls/radard.py +++ b/selfdrive/controls/radard.py @@ -9,10 +9,10 @@ from cereal import messaging, log, car from openpilot.common.numpy_fast import interp from openpilot.common.params import Params from openpilot.common.realtime import Ratekeeper, Priority, config_realtime_process +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.car.hyundai.values import HyundaiFlagsSP -from openpilot.system.swaglog import cloudlog -from openpilot.common.kalman.simple_kalman import KF1D +from openpilot.common.simple_kalman import KF1D # Default lead acceleration decay set to 50% at 1s @@ -93,7 +93,7 @@ class Track: self.aLeadTau = aLeadTau def get_RadarState(self, CP: car.CarParams = None, lead_msg_y: float = 0.0, model_prob: float = 0.0): - y_rel_vision = False if CP is None else CP.spFlags & HyundaiFlagsSP.SP_CAMERA_SCC_LEAD + y_rel_vision = False if CP is None or CP.carName != "hyundai" else CP.spFlags & HyundaiFlagsSP.SP_CAMERA_SCC_LEAD return { "dRel": float(self.dRel), "yRel": float(-lead_msg_y) if y_rel_vision else float(self.yRel), @@ -274,6 +274,7 @@ class RadarD: # publish tracks for UI debugging (keep last) tracks_msg = messaging.new_message('liveTracks', len(self.tracks)) + tracks_msg.valid = self.radar_state_valid for index, tid in enumerate(sorted(self.tracks.keys())): tracks_msg.liveTracks[index] = { "trackId": tid, diff --git a/selfdrive/controls/tests/test_startup.py b/selfdrive/controls/tests/test_startup.py old mode 100755 new mode 100644 index 6eb803e8aa..34d14fbb39 --- a/selfdrive/controls/tests/test_startup.py +++ b/selfdrive/controls/tests/test_startup.py @@ -1,6 +1,4 @@ -#!/usr/bin/env python3 -import time -import unittest +import os from parameterized import parameterized from cereal import log, car @@ -11,7 +9,7 @@ from openpilot.selfdrive.car.fingerprints import _FINGERPRINTS from openpilot.selfdrive.car.toyota.values import CAR as TOYOTA from openpilot.selfdrive.car.mazda.values import CAR as MAZDA from openpilot.selfdrive.controls.lib.events import EVENT_NAME -from openpilot.selfdrive.test.helpers import with_processes +from openpilot.selfdrive.manager.process_config import managed_processes EventName = car.CarEvent.EventName Ecu = car.CarParams.Ecu @@ -36,94 +34,87 @@ CX5_FW_VERSIONS = [ (Ecu.transmission, 0x7e1, None, b'PYNC-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), ] -class TestStartup(unittest.TestCase): - @parameterized.expand([ - # TODO: test EventName.startup for release branches +@parameterized.expand([ + # TODO: test EventName.startup for release branches - # officially supported car - (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS, "toyota"), - (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS, "toyota"), + # officially supported car + (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS, "toyota"), + (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS, "toyota"), - # dashcamOnly car - (EventName.startupNoControl, MAZDA.CX5, CX5_FW_VERSIONS, "mazda"), - (EventName.startupNoControl, MAZDA.CX5, CX5_FW_VERSIONS, "mazda"), + # dashcamOnly car + (EventName.startupNoControl, MAZDA.CX5, CX5_FW_VERSIONS, "mazda"), + (EventName.startupNoControl, MAZDA.CX5, CX5_FW_VERSIONS, "mazda"), - # unrecognized car with no fw - (EventName.startupNoFw, None, None, ""), - (EventName.startupNoFw, None, None, ""), + # unrecognized car with no fw + (EventName.startupNoFw, None, None, ""), + (EventName.startupNoFw, None, None, ""), - # unrecognized car - (EventName.startupNoCar, None, COROLLA_FW_VERSIONS[:1], "toyota"), - (EventName.startupNoCar, None, COROLLA_FW_VERSIONS[:1], "toyota"), + # unrecognized car + (EventName.startupNoCar, None, COROLLA_FW_VERSIONS[:1], "toyota"), + (EventName.startupNoCar, None, COROLLA_FW_VERSIONS[:1], "toyota"), - # fuzzy match - (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS_FUZZY, "toyota"), - (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS_FUZZY, "toyota"), - ]) - @with_processes(['controlsd']) - def test_startup_alert(self, expected_event, car_model, fw_versions, brand): + # fuzzy match + (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS_FUZZY, "toyota"), + (EventName.startupMaster, TOYOTA.COROLLA, COROLLA_FW_VERSIONS_FUZZY, "toyota"), +]) +def test_startup_alert(expected_event, car_model, fw_versions, brand): + controls_sock = messaging.sub_sock("controlsState") + pm = messaging.PubMaster(['can', 'pandaStates']) - # TODO: this should be done without any real sockets - controls_sock = messaging.sub_sock("controlsState") - pm = messaging.PubMaster(['can', 'pandaStates']) + params = Params() + params.put_bool("OpenpilotEnabledToggle", True) - params = Params() - params.clear_all() - params.put_bool("Passive", False) - params.put_bool("OpenpilotEnabledToggle", True) + # Build capnn version of FW array + if fw_versions is not None: + car_fw = [] + cp = car.CarParams.new_message() + for ecu, addr, subaddress, version in fw_versions: + f = car.CarParams.CarFw.new_message() + f.ecu = ecu + f.address = addr + f.fwVersion = version + f.brand = brand - # Build capnn version of FW array - if fw_versions is not None: - car_fw = [] - cp = car.CarParams.new_message() - for ecu, addr, subaddress, version in fw_versions: - f = car.CarParams.CarFw.new_message() - f.ecu = ecu - f.address = addr - f.fwVersion = version - f.brand = brand + if subaddress is not None: + f.subAddress = subaddress - if subaddress is not None: - f.subAddress = subaddress + car_fw.append(f) + cp.carVin = "1" * 17 + cp.carFw = car_fw + params.put("CarParamsCache", cp.to_bytes()) + else: + os.environ['SKIP_FW_QUERY'] = '1' - car_fw.append(f) - cp.carVin = "1" * 17 - cp.carFw = car_fw - params.put("CarParamsCache", cp.to_bytes()) + managed_processes['controlsd'].start() - time.sleep(2) # wait for controlsd to be ready + assert pm.wait_for_readers_to_update('can', 5) + pm.send('can', can_list_to_can_capnp([[0, 0, b"", 0]])) - pm.send('can', can_list_to_can_capnp([[0, 0, b"", 0]])) - time.sleep(0.1) + assert pm.wait_for_readers_to_update('pandaStates', 5) + msg = messaging.new_message('pandaStates', 1) + msg.pandaStates[0].pandaType = log.PandaState.PandaType.uno + pm.send('pandaStates', msg) - msg = messaging.new_message('pandaStates', 1) - msg.pandaStates[0].pandaType = log.PandaState.PandaType.uno - pm.send('pandaStates', msg) + # fingerprint + if (car_model is None) or (fw_versions is not None): + finger = {addr: 1 for addr in range(1, 100)} + else: + finger = _FINGERPRINTS[car_model][0] - # fingerprint - if (car_model is None) or (fw_versions is not None): - finger = {addr: 1 for addr in range(1, 100)} - else: - finger = _FINGERPRINTS[car_model][0] + msgs = [[addr, 0, b'\x00'*length, 0] for addr, length in finger.items()] + for _ in range(1000): + # controlsd waits for boardd to echo back that it has changed the multiplexing mode + if not params.get_bool("ObdMultiplexingChanged"): + params.put_bool("ObdMultiplexingChanged", True) - for _ in range(1000): - # controlsd waits for boardd to echo back that it has changed the multiplexing mode - if not params.get_bool("ObdMultiplexingChanged"): - params.put_bool("ObdMultiplexingChanged", True) + pm.send('can', can_list_to_can_capnp(msgs)) + assert pm.wait_for_readers_to_update('can', 5, dt=0.001), f"step: {_}" - msgs = [[addr, 0, b'\x00'*length, 0] for addr, length in finger.items()] - pm.send('can', can_list_to_can_capnp(msgs)) - - time.sleep(0.01) - msgs = messaging.drain_sock(controls_sock) - if len(msgs): - event_name = msgs[0].controlsState.alertType.split("/")[0] - self.assertEqual(EVENT_NAME[expected_event], event_name, - f"expected {EVENT_NAME[expected_event]} for '{car_model}', got {event_name}") - break - else: - self.fail(f"failed to fingerprint {car_model}") - -if __name__ == "__main__": - unittest.main() + ctrls = messaging.drain_sock(controls_sock) + if len(ctrls): + event_name = ctrls[0].controlsState.alertType.split("/")[0] + assert EVENT_NAME[expected_event] == event_name, f"expected {EVENT_NAME[expected_event]} for '{car_model}', got {event_name}" + break + else: + raise Exception(f"failed to fingerprint {car_model}") diff --git a/selfdrive/debug/can_print_changes.py b/selfdrive/debug/can_print_changes.py index ea1160d60b..810e45cfc6 100755 --- a/selfdrive/debug/can_print_changes.py +++ b/selfdrive/debug/can_print_changes.py @@ -3,10 +3,11 @@ import argparse import binascii import time from collections import defaultdict +from typing import Optional import cereal.messaging as messaging from openpilot.selfdrive.debug.can_table import can_table -from openpilot.tools.lib.logreader import logreader_from_route_or_segment +from openpilot.tools.lib.logreader import LogIterable, LogReader RED = '\033[91m' CLEAR = '\033[0m' @@ -95,13 +96,15 @@ if __name__ == "__main__": args = parser.parse_args() - init_lr, new_lr = None, None + init_lr: Optional[LogIterable] = None + new_lr: Optional[LogIterable] = None + if args.init: if args.init == '': init_lr = [] else: - init_lr = logreader_from_route_or_segment(args.init) + init_lr = LogReader(args.init) if args.comp: - new_lr = logreader_from_route_or_segment(args.comp) + new_lr = LogReader(args.comp) can_printer(args.bus, init_msgs=init_lr, new_msgs=new_lr, table=args.table) diff --git a/selfdrive/debug/check_lag.py b/selfdrive/debug/check_lag.py index 141156db91..72d11d6eda 100755 --- a/selfdrive/debug/check_lag.py +++ b/selfdrive/debug/check_lag.py @@ -2,7 +2,7 @@ from typing import Dict import cereal.messaging as messaging -from cereal.services import service_list +from cereal.services import SERVICE_LIST TO_CHECK = ['carState'] @@ -20,7 +20,7 @@ if __name__ == "__main__": t = sm.logMonoTime[s] / 1e9 if s in prev_t: - expected = 1.0 / (service_list[s].frequency) + expected = 1.0 / (SERVICE_LIST[s].frequency) dt = t - prev_t[s] if dt > 10 * expected: print(t, s, dt) diff --git a/selfdrive/debug/count_events.py b/selfdrive/debug/count_events.py index a8af5e6fe9..0d545b3153 100755 --- a/selfdrive/debug/count_events.py +++ b/selfdrive/debug/count_events.py @@ -4,51 +4,45 @@ import math import datetime from collections import Counter from pprint import pprint -from tqdm import tqdm from typing import List, Tuple, cast -from cereal.services import service_list -from openpilot.tools.lib.route import Route -from openpilot.tools.lib.logreader import LogReader +from cereal.services import SERVICE_LIST +from openpilot.tools.lib.logreader import LogReader, ReadMode if __name__ == "__main__": - r = Route(sys.argv[1]) - cnt_valid: Counter = Counter() cnt_events: Counter = Counter() - cams = [s for s in service_list if s.endswith('CameraState')] + cams = [s for s in SERVICE_LIST if s.endswith('CameraState')] cnt_cameras = dict.fromkeys(cams, 0) alerts: List[Tuple[float, str]] = [] start_time = math.inf end_time = -math.inf ignition_off = None - for q in tqdm(r.qlog_paths()): - if q is None: - continue - lr = list(LogReader(q)) - for msg in lr: - end_time = max(end_time, msg.logMonoTime) - start_time = min(start_time, msg.logMonoTime) + for msg in LogReader(sys.argv[1], ReadMode.QLOG): + end_time = max(end_time, msg.logMonoTime) + start_time = min(start_time, msg.logMonoTime) - if msg.which() == 'carEvents': - for e in msg.carEvents: - cnt_events[e.name] += 1 - elif msg.which() == 'controlsState': - if len(alerts) == 0 or alerts[-1][1] != msg.controlsState.alertType: + if msg.which() == 'onroadEvents': + for e in msg.onroadEvents: + cnt_events[e.name] += 1 + elif msg.which() == 'controlsState': + at = msg.controlsState.alertType + if "/override" not in at or "lanechange" in at.lower(): + if len(alerts) == 0 or alerts[-1][1] != at: t = (msg.logMonoTime - start_time) / 1e9 - alerts.append((t, msg.controlsState.alertType)) - elif msg.which() == 'pandaStates': - if ignition_off is None: - ign = any(ps.ignitionLine or ps.ignitionCan for ps in msg.pandaStates) - if not ign: - ignition_off = msg.logMonoTime - elif msg.which() in cams: - cnt_cameras[msg.which()] += 1 + alerts.append((t, at)) + elif msg.which() == 'pandaStates': + if ignition_off is None: + ign = any(ps.ignitionLine or ps.ignitionCan for ps in msg.pandaStates) + if not ign: + ignition_off = msg.logMonoTime + elif msg.which() in cams: + cnt_cameras[msg.which()] += 1 - if not msg.valid: - cnt_valid[msg.which()] += 1 + if not msg.valid: + cnt_valid[msg.which()] += 1 duration = (end_time - start_time) / 1e9 @@ -62,7 +56,7 @@ if __name__ == "__main__": print("\n") print("Cameras") for k, v in cnt_cameras.items(): - s = service_list[k] + s = SERVICE_LIST[k] expected_frames = int(s.frequency * duration / cast(float, s.decimation)) print(" ", k.ljust(20), f"{v}, {v/expected_frames:.1%} of expected") diff --git a/selfdrive/debug/cycle_alerts.py b/selfdrive/debug/cycle_alerts.py index 6d9ea5808f..1a5677030a 100755 --- a/selfdrive/debug/cycle_alerts.py +++ b/selfdrive/debug/cycle_alerts.py @@ -25,7 +25,8 @@ def cycle_alerts(duration=200, is_metric=False): (EventName.buttonCancel, ET.USER_DISABLE), (EventName.wrongGear, ET.NO_ENTRY), - (EventName.vehicleModelInvalid, ET.SOFT_DISABLE), + (EventName.locationdTemporaryError, ET.SOFT_DISABLE), + (EventName.paramsdTemporaryError, ET.SOFT_DISABLE), (EventName.accFaulted, ET.IMMEDIATE_DISABLE), # DM sequence @@ -53,9 +54,8 @@ def cycle_alerts(duration=200, is_metric=False): CS = car.CarState.new_message() CP = CarInterface.get_non_essential_params("HONDA CIVIC 2016") sm = messaging.SubMaster(['deviceState', 'pandaStates', 'roadCameraState', 'modelV2', 'liveCalibration', - 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman', - 'managerState', 'longitudinalPlanSP', 'lateralPlanSP', - 'driverMonitoringStateSP'] + cameras) + 'driverMonitoringState', 'longitudinalPlan', 'liveLocationKalman', + 'managerState', 'longitudinalPlanSP', 'driverMonitoringStateSP'] + cameras) pm = messaging.PubMaster(['controlsState', 'pandaStates', 'deviceState']) diff --git a/selfdrive/debug/debug_fw_fingerprinting_offline.py b/selfdrive/debug/debug_fw_fingerprinting_offline.py new file mode 100755 index 0000000000..d521ab2e18 --- /dev/null +++ b/selfdrive/debug/debug_fw_fingerprinting_offline.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +import argparse + +from openpilot.tools.lib.logreader import LogReader, ReadMode +from panda.python import uds + + +def main(route: str, addrs: list[int]): + """ + TODO: + - highlight TX vs RX clearly + - disambiguate sendcan and can (useful to know if something sent on sendcan made it to the bus on can->128) + - print as fixed width table, easier to read + """ + + lr = LogReader(route, default_mode=ReadMode.RLOG) + + start_mono_time = None + prev_mono_time = 0 + + # include rx addresses + addrs = addrs + [uds.get_rx_addr_for_tx_addr(addr) for addr in addrs] + + for msg in lr: + if msg.which() == 'can': + if start_mono_time is None: + start_mono_time = msg.logMonoTime + + if msg.which() in ("can", 'sendcan'): + for can in getattr(msg, msg.which()): + if can.address in addrs: + if msg.logMonoTime != prev_mono_time: + print() + prev_mono_time = msg.logMonoTime + print(f"{msg.logMonoTime} rxaddr={can.address}, bus={can.src}, {round((msg.logMonoTime - start_mono_time) * 1e-6, 2)} ms, " + + f"0x{can.dat.hex()}, {can.dat}, {len(can.dat)=}") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='View back and forth ISO-TP communication between various ECUs given an address') + parser.add_argument('route', help='Route name') + parser.add_argument('addrs', nargs='*', help='List of tx address to view (0x7e0 for engine)') + args = parser.parse_args() + + addrs = [int(addr, base=16) if addr.startswith('0x') else int(addr) for addr in args.addrs] + main(args.route, addrs) diff --git a/selfdrive/debug/dump.py b/selfdrive/debug/dump.py index 8436fbd0b0..db18f4c622 100755 --- a/selfdrive/debug/dump.py +++ b/selfdrive/debug/dump.py @@ -8,7 +8,7 @@ import cereal.messaging as messaging from hexdump import hexdump from cereal import log -from cereal.services import service_list +from cereal.services import SERVICE_LIST codecs.register_error("strict", codecs.backslashreplace_errors) @@ -31,7 +31,7 @@ if __name__ == "__main__": poller = messaging.Poller() - for m in args.socket if len(args.socket) > 0 else service_list: + for m in args.socket if len(args.socket) > 0 else SERVICE_LIST: messaging.sub_sock(m, poller, addr=args.addr) values = None diff --git a/selfdrive/debug/filter_log_message.py b/selfdrive/debug/filter_log_message.py index 20cef0fcc0..20028f8fd2 100755 --- a/selfdrive/debug/filter_log_message.py +++ b/selfdrive/debug/filter_log_message.py @@ -1,11 +1,9 @@ #!/usr/bin/env python3 -import os import argparse import json import cereal.messaging as messaging from openpilot.tools.lib.logreader import LogReader -from openpilot.tools.lib.route import Route LEVELS = { "DEBUG": 10, @@ -53,31 +51,18 @@ if __name__ == "__main__": parser.add_argument("route", type=str, nargs='*', help="route name + segment number for offline usage") args = parser.parse_args() - logs = None - if len(args.route): - if os.path.exists(args.route[0]): - logs = [args.route[0]] - else: - r = Route(args.route[0]) - logs = [q_log if r_log is None else r_log for (q_log, r_log) in zip(r.qlog_paths(), r.log_paths(), strict=True)] - - if len(args.route) == 2 and logs: - n = int(args.route[1]) - logs = [logs[n]] - min_level = LEVELS[args.level] - if logs: - for log in logs: - if log: - lr = LogReader(log) - for m in lr: - if m.which() == 'logMessage': - print_logmessage(m.logMonoTime, m.logMessage, min_level) - elif m.which() == 'errorLogMessage' and 'qlog' in log: - print_logmessage(m.logMonoTime, m.errorLogMessage, min_level) - elif m.which() == 'androidLog': - print_androidlog(m.logMonoTime, m.androidLog) + if args.route: + for route in args.route: + lr = LogReader(route) + for m in lr: + if m.which() == 'logMessage': + print_logmessage(m.logMonoTime, m.logMessage, min_level) + elif m.which() == 'errorLogMessage': + print_logmessage(m.logMonoTime, m.errorLogMessage, min_level) + elif m.which() == 'androidLog': + print_androidlog(m.logMonoTime, m.androidLog) else: sm = messaging.SubMaster(['logMessage', 'androidLog'], addr=args.addr) while True: diff --git a/selfdrive/debug/fingerprint_from_route.py b/selfdrive/debug/fingerprint_from_route.py index c2bff7c638..68308bb627 100755 --- a/selfdrive/debug/fingerprint_from_route.py +++ b/selfdrive/debug/fingerprint_from_route.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 import sys -from openpilot.tools.lib.route import Route -from openpilot.tools.lib.logreader import MultiLogIterator +from openpilot.tools.lib.logreader import LogReader, ReadMode def get_fingerprint(lr): @@ -40,6 +39,5 @@ if __name__ == "__main__": print("Usage: ./fingerprint_from_route.py ") sys.exit(1) - route = Route(sys.argv[1]) - lr = MultiLogIterator(route.log_paths()[:5]) + lr = LogReader(sys.argv[1], ReadMode.QLOG) get_fingerprint(lr) diff --git a/selfdrive/debug/format_fingerprints.py b/selfdrive/debug/format_fingerprints.py new file mode 100755 index 0000000000..bd5822729a --- /dev/null +++ b/selfdrive/debug/format_fingerprints.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import jinja2 +import os + +from cereal import car +from openpilot.common.basedir import BASEDIR +from openpilot.selfdrive.car.interfaces import get_interface_attr + +Ecu = car.CarParams.Ecu + +CARS = get_interface_attr('CAR') +FW_VERSIONS = get_interface_attr('FW_VERSIONS') +FINGERPRINTS = get_interface_attr('FINGERPRINTS') +ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} + +FINGERPRINTS_PY_TEMPLATE = jinja2.Template(""" +{%- if FINGERPRINTS[brand] %} +# ruff: noqa: E501 +{% endif %} +{% if FW_VERSIONS[brand] %} +from cereal import car +{% endif %} +from openpilot.selfdrive.car.{{brand}}.values import CAR +{% if FW_VERSIONS[brand] %} + +Ecu = car.CarParams.Ecu +{% endif %} +{% if comments +%} +{{ comments | join() }} +{% endif %} +{% if FINGERPRINTS[brand] %} + +FINGERPRINTS = { +{% for car, fingerprints in FINGERPRINTS[brand].items() %} + CAR.{{car.name}}: [{ +{% for fingerprint in fingerprints %} +{% if not loop.first %} + {{ "{" }} +{% endif %} + {% for key, value in fingerprint.items() %}{{key}}: {{value}}{% if not loop.last %}, {% endif %}{% endfor %} + + }{% if loop.last %}]{% endif %}, +{% endfor %} +{% endfor %} +} +{% endif %} + +FW_VERSIONS{% if not FW_VERSIONS[brand] %}: dict[str, dict[tuple, list[bytes]]]{% endif %} = { +{% for car, _ in FW_VERSIONS[brand].items() %} + CAR.{{car.name}}: { +{% for key, fw_versions in FW_VERSIONS[brand][car].items() %} + (Ecu.{{ECU_NAME[key[0]]}}, 0x{{"%0x" | format(key[1] | int)}}, \ +{% if key[2] %}0x{{"%0x" | format(key[2] | int)}}{% else %}{{key[2]}}{% endif %}): [ + {% for fw_version in (fw_versions + extra_fw_versions.get(car, {}).get(key, [])) | unique | sort %} + {{fw_version}}, + {% endfor %} + ], +{% endfor %} + }, +{% endfor %} +} + +""", trim_blocks=True) + + +def format_brand_fw_versions(brand, extra_fw_versions: None | dict[str, dict[tuple, list[bytes]]] = None): + extra_fw_versions = extra_fw_versions or {} + + fingerprints_file = os.path.join(BASEDIR, f"selfdrive/car/{brand}/fingerprints.py") + with open(fingerprints_file, "r") as f: + comments = [line for line in f.readlines() if line.startswith("#") and "noqa" not in line] + + with open(fingerprints_file, "w") as f: + f.write(FINGERPRINTS_PY_TEMPLATE.render(brand=brand, comments=comments, ECU_NAME=ECU_NAME, + FINGERPRINTS=FINGERPRINTS, FW_VERSIONS=FW_VERSIONS, + extra_fw_versions=extra_fw_versions)) + + +if __name__ == "__main__": + for brand in FW_VERSIONS.keys(): + format_brand_fw_versions(brand) diff --git a/selfdrive/debug/hyundai_enable_radar_points.py b/selfdrive/debug/hyundai_enable_radar_points.py index ac3651bf2f..7735391f4f 100755 --- a/selfdrive/debug/hyundai_enable_radar_points.py +++ b/selfdrive/debug/hyundai_enable_radar_points.py @@ -62,6 +62,10 @@ SUPPORTED_FW_VERSIONS = { b"TM__ SCC F-CUP 1.00 1.02 99110-S2000\x18\x07\x08\x18W ": ConfigValues( default_config=b"\x00\x00\x00\x01\x00\x00", tracks_enabled=b"\x00\x00\x00\x01\x00\x01"), + # 2021 K5 HEV + b"DLhe SCC FHCUP 1.00 1.02 99110-L7000 \x01 \x102 ": ConfigValues( + default_config=b"\x00\x00\x00\x01\x00\x00", + tracks_enabled=b"\x00\x00\x00\x01\x00\x01"), } if __name__ == "__main__": diff --git a/selfdrive/debug/internal/qlog_size.py b/selfdrive/debug/internal/qlog_size.py index 9b7f369525..b51cb3af2f 100755 --- a/selfdrive/debug/internal/qlog_size.py +++ b/selfdrive/debug/internal/qlog_size.py @@ -5,7 +5,7 @@ from collections import defaultdict import matplotlib.pyplot as plt -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.tools.lib.logreader import LogReader from openpilot.tools.lib.route import Route @@ -49,7 +49,7 @@ if __name__ == "__main__": msgs_by_type[m.which()].append(m.as_builder().to_bytes()) qlog_by_type = defaultdict(list) - for name, service in service_list.items(): + for name, service in SERVICE_LIST.items(): if service.decimation is None: continue diff --git a/selfdrive/debug/print_docs_diff.py b/selfdrive/debug/print_docs_diff.py index 8fb6277d3b..3d35532496 100755 --- a/selfdrive/debug/print_docs_diff.py +++ b/selfdrive/debug/print_docs_diff.py @@ -8,9 +8,10 @@ from openpilot.selfdrive.car.docs import get_all_car_info from openpilot.selfdrive.car.docs_definitions import Column FOOTNOTE_TAG = "{}" -STAR_ICON = '' -VIDEO_ICON = '\ - ' +STAR_ICON = '' +VIDEO_ICON = '' + \ + '' COLUMNS = "|" + "|".join([column.value for column in Column]) + "|" COLUMN_HEADER = "|---|---|---|{}|".format("|".join([":---:"] * (len(Column) - 3))) ARROW_SYMBOL = "➡️" diff --git a/selfdrive/debug/profiling/clpeak/clpeak3 b/selfdrive/debug/profiling/clpeak/clpeak3 deleted file mode 100755 index 4b3c4c130e..0000000000 Binary files a/selfdrive/debug/profiling/clpeak/clpeak3 and /dev/null differ diff --git a/selfdrive/debug/profiling/simpleperf/bin/android/arm64/simpleperf b/selfdrive/debug/profiling/simpleperf/bin/android/arm64/simpleperf deleted file mode 100755 index 4df1f31fcd..0000000000 Binary files a/selfdrive/debug/profiling/simpleperf/bin/android/arm64/simpleperf and /dev/null differ diff --git a/selfdrive/debug/profiling/simpleperf/eon_perf.sh b/selfdrive/debug/profiling/simpleperf/eon_perf.sh deleted file mode 100755 index 385af26ba3..0000000000 --- a/selfdrive/debug/profiling/simpleperf/eon_perf.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -cd "$( dirname "${BASH_SOURCE[0]}" )" - -ssh "$1" '$HOME/one/external/simpleperf/bin/android/arm64/simpleperf record --call-graph fp -a --duration 10 -o /tmp/perf.data' -scp "$1":/tmp/perf.data /tmp/perf.data -python2 report_html.py -i /tmp/perf.data -o /tmp/report.html diff --git a/selfdrive/debug/profiling/simpleperf/get.txt b/selfdrive/debug/profiling/simpleperf/get.txt deleted file mode 100644 index 8e57e6e6ce..0000000000 --- a/selfdrive/debug/profiling/simpleperf/get.txt +++ /dev/null @@ -1,3 +0,0 @@ -git clone https://android.googlesource.com/platform/prebuilts/simpleperf -git reset --hard 311a9d2cd27841498fc90a0b26a755deb47e7ebd -cp -r report_html.* simpleperf_report_lib.py utils.py inferno lib ~/one/external/simpleperf/ diff --git a/selfdrive/debug/profiling/snapdragon/.gitignore b/selfdrive/debug/profiling/snapdragon/.gitignore deleted file mode 100644 index 5d3033efb3..0000000000 --- a/selfdrive/debug/profiling/snapdragon/.gitignore +++ /dev/null @@ -1 +0,0 @@ -SnapdragonProfiler/ diff --git a/selfdrive/debug/profiling/snapdragon/README b/selfdrive/debug/profiling/snapdragon/README deleted file mode 100644 index ee826b413a..0000000000 --- a/selfdrive/debug/profiling/snapdragon/README +++ /dev/null @@ -1,7 +0,0 @@ -snapdragon profiler --------- - -* download from https://developer.qualcomm.com/software/snapdragon-profiler -* unzip to selfdrive/debug/profiling/snapdragon/SnapdragonProfiler -* run ./setup-agnos.sh -* run selfdrive/debug/adb.sh on device diff --git a/selfdrive/debug/run_process_on_route.py b/selfdrive/debug/run_process_on_route.py index c7b6250d3f..441de9ef57 100755 --- a/selfdrive/debug/run_process_on_route.py +++ b/selfdrive/debug/run_process_on_route.py @@ -3,29 +3,28 @@ import argparse from openpilot.selfdrive.test.process_replay.process_replay import CONFIGS, replay_process -from openpilot.tools.lib.logreader import MultiLogIterator -from openpilot.tools.lib.route import Route from openpilot.tools.lib.helpers import save_log +from openpilot.tools.lib.logreader import LogReader if __name__ == "__main__": parser = argparse.ArgumentParser(description="Run process on route and create new logs", formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument("--fingerprint", help="The fingerprint to use") parser.add_argument("route", help="The route name to use") parser.add_argument("process", help="The process to run") args = parser.parse_args() cfg = [c for c in CONFIGS if c.proc_name == args.process][0] - route = Route(args.route) - lr = MultiLogIterator(route.log_paths()) + lr = LogReader(args.route) inputs = list(lr) - outputs = replay_process(cfg, inputs) + outputs = replay_process(cfg, inputs, fingerprint=args.fingerprint) # Remove message generated by the process under test and merge in the new messages produces = {o.which() for o in outputs} inputs = [i for i in inputs if i.which() not in produces] outputs = sorted(inputs + outputs, key=lambda x: x.logMonoTime) - fn = f"{args.route}_{args.process}.bz2" + fn = f"{args.route.replace('/', '_')}_{args.process}.bz2" save_log(fn, outputs) diff --git a/selfdrive/debug/sensor_data_to_hist.py b/selfdrive/debug/sensor_data_to_hist.py deleted file mode 100755 index 73f98b285c..0000000000 --- a/selfdrive/debug/sensor_data_to_hist.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 -''' -printing the gap between interrupts in a histogram to check if the -frequency is what we expect, the bmx is not interrupt driven for as we -get interrupts in a 2kHz rate. -''' - -import argparse -import sys -import numpy as np -from collections import defaultdict - -from openpilot.tools.lib.logreader import LogReader -from openpilot.tools.lib.route import Route - -import matplotlib.pyplot as plt - -SRC_BMX = "bmx055" -SRC_LSM = "lsm6ds3" - - -def parseEvents(log_reader): - bmx_data = defaultdict(list) - lsm_data = defaultdict(list) - - for m in log_reader: - if m.which() not in ['accelerometer', 'gyroscope']: - continue - - d = getattr(m, m.which()).to_dict() - - if d["source"] == SRC_BMX and "acceleration" in d: - bmx_data["accel"].append(d["timestamp"] / 1e9) - - if d["source"] == SRC_BMX and "gyroUncalibrated" in d: - bmx_data["gyro"].append(d["timestamp"] / 1e9) - - if d["source"] == SRC_LSM and "acceleration" in d: - lsm_data["accel"].append(d["timestamp"] / 1e9) - - if d["source"] == SRC_LSM and "gyroUncalibrated" in d: - lsm_data["gyro"].append(d["timestamp"] / 1e9) - - return bmx_data, lsm_data - - -def cleanData(data): - if len(data) == 0: - return [], [] - - data.sort() - diffs = np.diff(data) - return data, diffs - - -def logAvgValues(data, sensor): - if len(data) == 0: - print(f"{sensor}: no data to average") - return - - avg = sum(data) / len(data) - hz = 1 / avg - print(f"{sensor}: data_points: {len(data)} avg [ns]: {avg} avg [Hz]: {hz}") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("route", type=str, help="route name") - parser.add_argument("segment", type=int, help="segment number") - args = parser.parse_args() - - r = Route(args.route) - logs = r.log_paths() - - if len(logs) == 0: - print("NO data routes") - sys.exit(0) - - if args.segment >= len(logs): - print(f"RouteID: {args.segment} out of range, max: {len(logs) -1}") - sys.exit(0) - - lr = LogReader(logs[args.segment]) - bmx_data, lsm_data = parseEvents(lr) - - # sort bmx accel data, and then cal all the diffs, and to a histogram of those - bmx_accel, bmx_accel_diffs = cleanData(bmx_data["accel"]) - bmx_gyro, bmx_gyro_diffs = cleanData(bmx_data["gyro"]) - lsm_accel, lsm_accel_diffs = cleanData(lsm_data["accel"]) - lsm_gyro, lsm_gyro_diffs = cleanData(lsm_data["gyro"]) - - # get out the averages - logAvgValues(bmx_accel_diffs, "bmx accel") - logAvgValues(bmx_gyro_diffs, "bmx gyro ") - logAvgValues(lsm_accel_diffs, "lsm accel") - logAvgValues(lsm_gyro_diffs, "lsm gyro ") - - fig, axs = plt.subplots(1, 2, tight_layout=True) - axs[0].hist(bmx_accel_diffs, bins=50) - axs[0].set_title("bmx_accel") - axs[1].hist(bmx_gyro_diffs, bins=50) - axs[1].set_title("bmx_gyro") - - figl, axsl = plt.subplots(1, 2, tight_layout=True) - axsl[0].hist(lsm_accel_diffs, bins=50) - axsl[0].set_title("lsm_accel") - axsl[1].hist(lsm_gyro_diffs, bins=50) - axsl[1].set_title("lsm_gyro") - - print("check plot...") - plt.show() diff --git a/selfdrive/debug/test_fw_query_on_routes.py b/selfdrive/debug/test_fw_query_on_routes.py index 83e173244e..dd6243a44c 100755 --- a/selfdrive/debug/test_fw_query_on_routes.py +++ b/selfdrive/debug/test_fw_query_on_routes.py @@ -6,8 +6,8 @@ import argparse import os import traceback from tqdm import tqdm -from openpilot.tools.lib.logreader import LogReader -from openpilot.tools.lib.route import Route +from openpilot.tools.lib.logreader import LogReader, ReadMode +from openpilot.tools.lib.route import SegmentRange from openpilot.selfdrive.car.car_helpers import interface_names from openpilot.selfdrive.car.fw_versions import VERSIONS, match_fw_to_car @@ -44,23 +44,14 @@ if __name__ == "__main__": dongles = [] for route in tqdm(routes): - route = route.rstrip() - dongle_id, time = route.split('|') + dongle_id = SegmentRange(route).dongle_id if dongle_id in dongles: continue - if NO_API: - qlog_path = f"cd:/{dongle_id}/{time}/0/qlog.bz2" - else: - route = Route(route) - qlog_path = next((p for p in route.qlog_paths() if p is not None), None) - - if qlog_path is None: - continue + lr = LogReader(route, default_mode=ReadMode.QLOG) try: - lr = LogReader(qlog_path) dongles.append(dongle_id) CP = None @@ -98,13 +89,11 @@ if __name__ == "__main__": if len(fuzzy_matches) == 1: if list(fuzzy_matches)[0] != live_fingerprint: wrong_fuzzy += 1 - print(f"{dongle_id}|{time}") print("Fuzzy match wrong! Fuzzy:", fuzzy_matches, "Live:", live_fingerprint) else: good_fuzzy += 1 break - print(f"{dongle_id}|{time}") print("Old style:", live_fingerprint, "Vin", CP.carVin) print("New style (exact):", exact_matches) print("New style (fuzzy):", fuzzy_matches) @@ -112,8 +101,8 @@ if __name__ == "__main__": padding = max([len(fw.brand or UNKNOWN_BRAND) for fw in car_fw]) for version in sorted(car_fw, key=lambda fw: fw.brand): subaddr = None if version.subAddress == 0 else hex(version.subAddress) - print(f" Brand: {version.brand or UNKNOWN_BRAND:{padding}}, bus: {version.bus} - \ - (Ecu.{version.ecu}, {hex(version.address)}, {subaddr}): [{version.fwVersion}],") + print(f" Brand: {version.brand or UNKNOWN_BRAND:{padding}}, bus: {version.bus} - " + + f"(Ecu.{version.ecu}, {hex(version.address)}, {subaddr}): [{version.fwVersion}],") print("Mismatches") found = False diff --git a/selfdrive/debug/toyota_eps_factor.py b/selfdrive/debug/toyota_eps_factor.py index d60d2d372b..dc83c8f7a4 100755 --- a/selfdrive/debug/toyota_eps_factor.py +++ b/selfdrive/debug/toyota_eps_factor.py @@ -5,8 +5,7 @@ import matplotlib.pyplot as plt from sklearn import linear_model from openpilot.selfdrive.car.toyota.values import STEER_THRESHOLD -from openpilot.tools.lib.route import Route -from openpilot.tools.lib.logreader import MultiLogIterator +from openpilot.tools.lib.logreader import LogReader MIN_SAMPLES = 30 * 100 @@ -58,7 +57,6 @@ def get_eps_factor(lr, plot=False): if __name__ == "__main__": - r = Route(sys.argv[1]) - lr = MultiLogIterator(r.log_paths()) + lr = LogReader(sys.argv[1]) n = get_eps_factor(lr, plot="--plot" in sys.argv) print("EPS torque factor: ", n) diff --git a/selfdrive/debug/vw_mqb_config.py b/selfdrive/debug/vw_mqb_config.py index 6b5ec36935..75409e3f87 100755 --- a/selfdrive/debug/vw_mqb_config.py +++ b/selfdrive/debug/vw_mqb_config.py @@ -144,6 +144,7 @@ if __name__ == "__main__": uds_client.write_data_by_identifier(VOLKSWAGEN_DATA_IDENTIFIER_TYPE.CODING, new_coding) # type: ignore except (NegativeResponseError, MessageTimeoutError): print("Writing new configuration failed!") + print("Make sure the comma processes are stopped: tmux kill-session -t comma") quit() try: diff --git a/selfdrive/gpxd/gpx_uploader.py b/selfdrive/gpxd/gpx_uploader.py deleted file mode 100644 index d02889d512..0000000000 --- a/selfdrive/gpxd/gpx_uploader.py +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/env python3 -# The MIT License -# -# Copyright (c) 2019-, Rick Lan, dragonpilot community, and a number of other of contributors. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -import os -import time -from common.params import Params -from common.realtime import set_core_affinity, Ratekeeper -from selfdrive.athena.registration import register -from system.swaglog import cloudlog -from system.version import get_version - -# for uploader -from system.loggerd.xattr_cache import getxattr, setxattr -import glob -import requests -import json - -RATE = 1 - -# customisable values -GPX_LOG_PATH = '/data/media/0/gpx_logs/' -LOG_HERTZ = 1/10 # 0.1 Hz = 10 sec, higher for higher accuracy, 10hz seems fine - -# uploader -UPLOAD_ATTR_NAME = 'user.upload' -UPLOAD_ATTR_VALUE = b'1' -LOG_PATH = '/data/media/0/gpx_logs/' - -# osm api -VERSION_URL = 'https://api.openstreetmap.org/api/versions' -UPLOAD_URL = 'https://sunnypilot.com/osm/gpx_uploader.php' - -_DEBUG = False - - -def _debug(msg): - if not _DEBUG: - return - print(msg, flush=True) - - -def _get_is_uploaded(filename): - _debug("%s is uploaded: %s" % (filename, getxattr(filename, UPLOAD_ATTR_NAME) is not None)) - return getxattr(filename, UPLOAD_ATTR_NAME) is not None - - -def _set_is_uploaded(filename): - _debug("%s set to uploaded" % filename) - setxattr(filename, UPLOAD_ATTR_NAME, UPLOAD_ATTR_VALUE) - - -def _get_files_to_be_uploaded(): - files = sorted(filter(os.path.isfile, glob.glob(LOG_PATH + '*'))) - files_to_be_uploaded = [] - for file in files: - if not _get_is_uploaded(file): - files_to_be_uploaded.append(file) - return files_to_be_uploaded - - -class GpxUploader(): - def __init__(self): - self.param_s = Params() - self.rk = Ratekeeper(RATE, print_delay_threshold=None) - - self._delete_after_upload = self.param_s.get_bool('GpxDeleteAfterUpload') - self._car_model = "Unknown Model" - # read model from LiveParameters - params = self.param_s.get("LiveParameters") - if params is not None: - params = json.loads(params) - self._car_model = params.get('carFingerprint', self._car_model) - self._sp_version = get_version() - _debug("GpxUploader init - _delete_after_upload = %s" % self._delete_after_upload) - _debug("GpxUploader init - _car_model = %s" % self._car_model) - self.api_headers = {"User-Agent": f"sunnypilot-{self._sp_version}-{register()}"} - - def update(self): - while True: - files = _get_files_to_be_uploaded() - if len(files) == 0 or not self._is_online(): - _debug("run - not online or no files") - elif not self.param_s.get_bool("DisableOnroadUploads") or self.param_s.get_bool("IsOffroad"): - for file in files: - if self._do_upload(file): - if self._delete_after_upload: - _debug("run - _delete_after_upload") - os.remove(file) - else: - _debug("run - set_is_uploaded") - _set_is_uploaded(file) - # sleep for 300 secs if offroad - # otherwise sleep 60 secs - time.sleep(300 if self.param_s.get_bool("IsOffroad") else 60) - self.rk.keep_time() - - def _is_online(self): - try: - r = requests.get(VERSION_URL, headers=self.api_headers) - _debug("is_online? status_code = %s" % r.status_code) - return r.status_code >= 200 - except Exception as e: - print(f'Online check error: {e}') - return False - - def _do_upload(self, filename): - fn = os.path.basename(filename) - data = { - 'description': "Routes from sunnypilot %s (%s)." % (self._sp_version, self._car_model), - 'visibility': 'identifiable' - } - files = { - "file": (fn, open(filename, 'rb')) - } - try: - r = requests.post(UPLOAD_URL, files=files, data=data, headers=self.api_headers) - _debug("do_upload - %s - %s" % (filename, r.status_code)) - return r.status_code == 200 - except Exception as e: - print(f'Upload error: {e}') - return False - - def gpx_uploader_thread(self): - try: - set_core_affinity([0, 1, 2, 3]) - except Exception: - cloudlog.exception("gpx_uploader: failed to set core affinity") - - self.update() - - -def main(): - gpx_uploader = GpxUploader() - gpx_uploader.gpx_uploader_thread() - - -if __name__ == "__main__": - main() diff --git a/selfdrive/gpxd/gpxd.py b/selfdrive/gpxd/gpxd.py deleted file mode 100644 index 0b69b4b65f..0000000000 --- a/selfdrive/gpxd/gpxd.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python3 -# The MIT License -# -# Copyright (c) 2019-, Rick Lan, dragonpilot community, and a number of other of contributors. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -import cereal.messaging as messaging -import os -import datetime -import signal -import subprocess -import threading -from common.realtime import set_core_affinity, Ratekeeper -from cereal import log -from system.swaglog import cloudlog - -# customisable values -GPX_LOG_PATH = '/data/media/0/gpx_logs/' -LOG_HERTZ = 10 # 10 hz = 0.1 sec, higher for higher accuracy, 10hz seems fine -LOG_LENGTH = 10 # mins, higher means it keeps more data in the memory, will take more time to write into a file too. -LOST_SIGNAL_COUNT_LENGTH = 10 # secs, output log file if we lost signal for this long - -# do not change -LOST_SIGNAL_COUNT_MAX = LOST_SIGNAL_COUNT_LENGTH * LOG_HERTZ # secs, -LOGS_PER_FILE = LOG_LENGTH * 60 * LOG_HERTZ # e.g. 10 * 60 * 10 = 6000 points per file - -ERROR_STRING = ("[Errno 13]", "[Errno 30]") - - -_DEBUG = False -_CLOUDLOG_DEBUG = True - - -def _debug(msg, log_to_cloud=True): - if _CLOUDLOG_DEBUG and log_to_cloud: - cloudlog.debug(msg) - if _DEBUG: - print(msg) - - -class WaitTimeHelper: - ready_event = threading.Event() - shutdown = False - - def __init__(self): - signal.signal(signal.SIGTERM, self.graceful_shutdown) - signal.signal(signal.SIGINT, self.graceful_shutdown) - signal.signal(signal.SIGHUP, self.graceful_shutdown) - - def graceful_shutdown(self, signum, frame): - self.shutdown = True - self.ready_event.set() - - -class GpxD: - def __init__(self, sm): - self.sm = sm - self.rk = Ratekeeper(LOG_HERTZ, print_delay_threshold=None) - - self.log_count = 0 - self.logs = list() - self.lost_signal_count = 0 - self.wait_helper = WaitTimeHelper() - self.started_time = datetime.datetime.utcnow().isoformat() - self.v_ego_prev = 0. - self.pause = True - - def log(self): - location = self.sm['liveLocationKalman'] - gps = self.sm['gpsLocationExternal'] - v_ego = self.sm['carState'].vEgo - - if abs(v_ego) > 0.: - self.pause = False - - location_valid = (location.status == log.LiveLocationKalman.Status.valid) and location.positionGeodetic.valid - _debug("gpxd: location_valid - %s" % location_valid) - if not location_valid or self.pause: - if self.log_count > 0: - self.lost_signal_count += 1 - else: - lat = location.positionGeodetic.value[0] - lon = location.positionGeodetic.value[1] - alt = gps.altitude - - _debug("gpxd: logged - %s %s %s %s" % (datetime.datetime.utcfromtimestamp(location.unixTimestampMillis*0.001).isoformat(), str(lat), str(lon), str(alt))) - self.logs.append([datetime.datetime.utcfromtimestamp(location.unixTimestampMillis*0.001).isoformat(), str(lat), str(lon), str(alt)]) - self.log_count += 1 - self.lost_signal_count = 0 - - if not self.pause and abs(v_ego) < 0.01: - _debug("gpxd: paused") - self.pause = True - - self.v_ego_prev = v_ego - - def write_log(self, force = False): - if self.log_count == 0: - return - - if force or (self.log_count >= LOGS_PER_FILE or self.lost_signal_count >= LOST_SIGNAL_COUNT_MAX): - _debug("gpxd: save to log") - self._write_gpx() - self.lost_signal_count = 0 - self.log_count = 0 - self.logs.clear() - self.started_time = datetime.datetime.utcnow().isoformat() - - def _write_gpx(self): - if len(self.logs) > 1: - if not os.path.exists(GPX_LOG_PATH): - try: - os.makedirs(GPX_LOG_PATH) - except (PermissionError, OSError) as e: - if any(error in str(e) for error in ERROR_STRING): - subprocess.run(["sudo", "mount", "-o", "rw,remount", "/"]) - print(f"gpxd: {e}: Filesystem remounted.") - else: - print(f"gpxd: Other error occurred: {e}") - except Exception as e: - print(f"An error occurred: {e}") - filename = self.started_time.replace(':','-') - gpx_str = '' - gpx_str += "\n" - gpx_str += "\n" - gpx_str += "\n" - gpx_str += " " + self.started_time + "" - gpx_str += " \n" - for trkpt in self.logs: - gpx_str += self._trkpt_template(trkpt[1], trkpt[2], trkpt[3], trkpt[0]) - gpx_str += " \n" - gpx_str += "\n" - gpx_str += "\n" - try: - f = open('%s%sZ.gpx' % (GPX_LOG_PATH, filename), 'w') - f.write(gpx_str) - f.close() - except: - pass - - def _trkpt_template(self, lat, lon, ele, time): - gpx_str = "" - gpx_str += " \n" - gpx_str += " " + ele + "\n" - gpx_str += " \n" - gpx_str += " \n" - return gpx_str - - def gpxd_thread(self): - try: - set_core_affinity([0, 1, 2, 3]) - except Exception: - cloudlog.exception("gpxd: failed to set core affinity") - while True: - self.sm.update(0) - self.log() - self.write_log() - if self.wait_helper.shutdown: - self.write_log(True) - break - self.rk.keep_time() - - -def main(sm=None): - if sm is None: - sm = messaging.SubMaster(['liveLocationKalman', 'gpsLocationExternal', 'carState']) - - gpx = GpxD(sm) - gpx.gpxd_thread() - - -if __name__ == "__main__": - main() diff --git a/selfdrive/hardware b/selfdrive/hardware deleted file mode 120000 index 02a42c502f..0000000000 --- a/selfdrive/hardware +++ /dev/null @@ -1 +0,0 @@ -../system/hardware/ \ No newline at end of file diff --git a/selfdrive/locationd/SConscript b/selfdrive/locationd/SConscript index a6febe0170..07555a6087 100644 --- a/selfdrive/locationd/SConscript +++ b/selfdrive/locationd/SConscript @@ -1,10 +1,37 @@ -Import('env', 'common', 'cereal', 'messaging', 'libkf', 'transformations') +Import('env', 'arch', 'common', 'cereal', 'messaging', 'rednose', 'transformations') -loc_libs = [cereal, messaging, 'zmq', common, 'capnp', 'kj', 'pthread'] +loc_libs = [cereal, messaging, 'zmq', common, 'capnp', 'kj', 'pthread', 'dl'] + +# build ekf models +rednose_gen_dir = 'models/generated' +rednose_gen_deps = [ + "models/constants.py", +] +live_ekf = env.RednoseCompileFilter( + target='live', + filter_gen_script='models/live_kf.py', + output_dir=rednose_gen_dir, + extra_gen_artifacts=['live_kf_constants.h'], + gen_script_deps=rednose_gen_deps, +) +car_ekf = env.RednoseCompileFilter( + target='car', + filter_gen_script='models/car_kf.py', + output_dir=rednose_gen_dir, + extra_gen_artifacts=[], + gen_script_deps=rednose_gen_deps, +) + +# locationd build +locationd_sources = ["locationd.cc", "models/live_kf.cc"] -ekf_sym_cc = env.SharedObject("#rednose/helpers/ekf_sym.cc") -locationd_sources = ["locationd.cc", "models/live_kf.cc", ekf_sym_cc] lenv = env.Clone() -lenv["_LIBFLAGS"] += f' {libkf[0].get_labspath()}' -locationd = lenv.Program("locationd", locationd_sources, LIBS=loc_libs + transformations) -lenv.Depends(locationd, libkf) \ No newline at end of file +# ekf filter libraries need to be linked, even if no symbols are used +if arch != "Darwin": + lenv["LINKFLAGS"] += ["-Wl,--no-as-needed"] + +lenv["LIBPATH"].append(Dir(rednose_gen_dir).abspath) +lenv["RPATH"].append(Dir(rednose_gen_dir).abspath) +locationd = lenv.Program("locationd", locationd_sources, LIBS=["live", "ekf_sym"] + loc_libs + transformations) +lenv.Depends(locationd, rednose) +lenv.Depends(locationd, live_ekf) diff --git a/selfdrive/locationd/calibrationd.py b/selfdrive/locationd/calibrationd.py index 6469ece402..06be9f031a 100755 --- a/selfdrive/locationd/calibrationd.py +++ b/selfdrive/locationd/calibrationd.py @@ -15,10 +15,10 @@ from typing import List, NoReturn, Optional from cereal import log import cereal.messaging as messaging from openpilot.common.conversions import Conversions as CV -from openpilot.common.params import Params, put_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import set_realtime_priority from openpilot.common.transformations.orientation import rot_from_euler, euler_from_rot -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog MIN_SPEED_FILTER = 15 * CV.MPH_TO_MS MAX_VEL_ANGLE_STD = np.radians(0.25) @@ -31,7 +31,8 @@ SMOOTH_CYCLES = 10 BLOCK_SIZE = 100 INPUTS_NEEDED = 5 # Minimum blocks needed for valid calibration INPUTS_WANTED = 50 # We want a little bit more than we need for stability -MAX_ALLOWED_SPREAD = np.radians(2) +MAX_ALLOWED_YAW_SPREAD = np.radians(2) +MAX_ALLOWED_PITCH_SPREAD = np.radians(4) RPY_INIT = np.array([0.0,0.0,0.0]) WIDE_FROM_DEVICE_EULER_INIT = np.array([0.0, 0.0, 0.0]) HEIGHT_INIT = np.array([1.22]) @@ -63,8 +64,8 @@ class Calibrator: self.not_car = False # Read saved calibration - params = Params() - calibration_params = params.get("CalibrationParams") + self.params = Params() + calibration_params = self.params.get("CalibrationParams") rpy_init = RPY_INIT wide_from_device_euler = WIDE_FROM_DEVICE_EULER_INIT height = HEIGHT_INIT @@ -156,13 +157,14 @@ class Calibrator: # If spread is too high, assume mounting was changed and reset to last block. # Make the transition smooth. Abrupt transitions are not good for feedback loop through supercombo model. # TODO: add height spread check with smooth transition too - if max(self.calib_spread) > MAX_ALLOWED_SPREAD and self.cal_status == log.LiveCalibrationData.Status.calibrated: + spread_too_high = self.calib_spread[1] > MAX_ALLOWED_PITCH_SPREAD or self.calib_spread[2] > MAX_ALLOWED_YAW_SPREAD + if spread_too_high and self.cal_status == log.LiveCalibrationData.Status.calibrated: self.reset(self.rpys[self.block_idx - 1], valid_blocks=1, smooth_from=self.rpy) self.cal_status = log.LiveCalibrationData.Status.recalibrating write_this_cycle = (self.idx == 0) and (self.block_idx % (INPUTS_WANTED//5) == 5) if self.param_put and write_this_cycle: - put_nonblocking("CalibrationParams", self.get_msg().to_bytes()) + self.params.put_nonblocking("CalibrationParams", self.get_msg(True).to_bytes()) def handle_v_ego(self, v_ego: float) -> None: self.v_ego = v_ego @@ -225,12 +227,13 @@ class Calibrator: return new_rpy - def get_msg(self) -> capnp.lib.capnp._DynamicStructBuilder: + def get_msg(self, valid: bool) -> capnp.lib.capnp._DynamicStructBuilder: smooth_rpy = self.get_smooth_rpy() msg = messaging.new_message('liveCalibration') - liveCalibration = msg.liveCalibration + msg.valid = valid + liveCalibration = msg.liveCalibration liveCalibration.validBlocks = self.valid_blocks liveCalibration.calStatus = self.cal_status liveCalibration.calPerc = min(100 * (self.valid_blocks * BLOCK_SIZE + self.idx) // (INPUTS_NEEDED * BLOCK_SIZE), 100) @@ -248,19 +251,16 @@ class Calibrator: return msg - def send_data(self, pm: messaging.PubMaster) -> None: - pm.send('liveCalibration', self.get_msg()) + def send_data(self, pm: messaging.PubMaster, valid: bool) -> None: + pm.send('liveCalibration', self.get_msg(valid)) -def calibrationd_thread(sm: Optional[messaging.SubMaster] = None, pm: Optional[messaging.PubMaster] = None) -> NoReturn: +def main() -> NoReturn: gc.disable() set_realtime_priority(1) - if sm is None: - sm = messaging.SubMaster(['cameraOdometry', 'carState', 'carParams'], poll=['cameraOdometry']) - - if pm is None: - pm = messaging.PubMaster(['liveCalibration']) + pm = messaging.PubMaster(['liveCalibration']) + sm = messaging.SubMaster(['cameraOdometry', 'carState', 'carParams'], poll=['cameraOdometry']) calibrator = Calibrator(param_put=True) @@ -284,11 +284,7 @@ def calibrationd_thread(sm: Optional[messaging.SubMaster] = None, pm: Optional[m # 4Hz driven by cameraOdometry if sm.frame % 5 == 0: - calibrator.send_data(pm) - - -def main(sm: Optional[messaging.SubMaster] = None, pm: Optional[messaging.PubMaster] = None) -> NoReturn: - calibrationd_thread(sm, pm) + calibrator.send_data(pm, sm.all_checks()) if __name__ == "__main__": diff --git a/selfdrive/locationd/helpers.py b/selfdrive/locationd/helpers.py new file mode 100644 index 0000000000..93e2929139 --- /dev/null +++ b/selfdrive/locationd/helpers.py @@ -0,0 +1,64 @@ +import numpy as np +from typing import List, Optional, Tuple, Any + +from cereal import log + + +class NPQueue: + def __init__(self, maxlen: int, rowsize: int) -> None: + self.maxlen = maxlen + self.arr = np.empty((0, rowsize)) + + def __len__(self) -> int: + return len(self.arr) + + def append(self, pt: List[float]) -> None: + if len(self.arr) < self.maxlen: + self.arr = np.append(self.arr, [pt], axis=0) + else: + self.arr[:-1] = self.arr[1:] + self.arr[-1] = pt + + +class PointBuckets: + def __init__(self, x_bounds: List[Tuple[float, float]], min_points: List[float], min_points_total: int, points_per_bucket: int, rowsize: int) -> None: + self.x_bounds = x_bounds + self.buckets = {bounds: NPQueue(maxlen=points_per_bucket, rowsize=rowsize) for bounds in x_bounds} + self.buckets_min_points = dict(zip(x_bounds, min_points, strict=True)) + self.min_points_total = min_points_total + + def bucket_lengths(self) -> List[int]: + return [len(v) for v in self.buckets.values()] + + def __len__(self) -> int: + return sum(self.bucket_lengths()) + + def is_valid(self) -> bool: + individual_buckets_valid = all(len(v) >= min_pts for v, min_pts in zip(self.buckets.values(), self.buckets_min_points.values(), strict=True)) + total_points_valid = self.__len__() >= self.min_points_total + return individual_buckets_valid and total_points_valid + + def add_point(self, x: float, y: float, bucket_val: float) -> None: + raise NotImplementedError + + def get_points(self, num_points: Optional[int] = None) -> Any: + points = np.vstack([x.arr for x in self.buckets.values()]) + if num_points is None: + return points + return points[np.random.choice(np.arange(len(points)), min(len(points), num_points), replace=False)] + + def load_points(self, points: List[List[float]]) -> None: + for point in points: + self.add_point(*point) + + +class ParameterEstimator: + """ Base class for parameter estimators """ + def reset(self) -> None: + raise NotImplementedError + + def handle_log(self, t: int, which: str, msg: log.Event) -> None: + raise NotImplementedError + + def get_msg(self, valid: bool, with_points: bool) -> log.Event: + raise NotImplementedError diff --git a/selfdrive/locationd/laikad.py b/selfdrive/locationd/laikad.py deleted file mode 100755 index f00595618e..0000000000 --- a/selfdrive/locationd/laikad.py +++ /dev/null @@ -1,469 +0,0 @@ -#!/usr/bin/env python3 -import math -import os -import time -import shutil -from collections import defaultdict -from concurrent.futures import Future, ProcessPoolExecutor -from enum import IntEnum -from typing import List, Optional, Dict, Any - -import numpy as np - -from cereal import log, messaging -from openpilot.common.params import Params, put_nonblocking -from laika import AstroDog -from laika.constants import SECS_IN_HR, SECS_IN_MIN -from laika.downloader import DownloadFailed -from laika.ephemeris import EphemerisType, GPSEphemeris, GLONASSEphemeris, ephemeris_structs, parse_qcom_ephem -from laika.gps_time import GPSTime -from laika.helpers import ConstellationId, get_sv_id -from laika.raw_gnss import GNSSMeasurement, correct_measurements, process_measurements, read_raw_ublox -from laika.raw_gnss import gps_time_from_qcom_report, get_measurements_from_qcom_reports -from laika.opt import calc_pos_fix, get_posfix_sympy_fun, calc_vel_fix, get_velfix_sympy_func -from openpilot.selfdrive.locationd.models.constants import GENERATED_DIR, ObservationKind -from openpilot.selfdrive.locationd.models.gnss_kf import GNSSKalman -from openpilot.selfdrive.locationd.models.gnss_kf import States as GStates -from openpilot.system.hardware.hw import Paths -from openpilot.system.swaglog import cloudlog - -MAX_TIME_GAP = 10 -EPHEMERIS_CACHE = 'LaikadEphemerisV3' -CACHE_VERSION = 0.2 -POS_FIX_RESIDUAL_THRESHOLD = 100.0 - - -class LogEphemerisType(IntEnum): - nav = 0 - nasaUltraRapid = 1 - glonassIacUltraRapid = 2 - qcom = 3 - -class EphemerisSource(IntEnum): - gnssChip = 0 - internet = 1 - cache = 2 - unknown = 3 - -def get_log_eph_type(ephem): - if ephem.eph_type == EphemerisType.NAV: - source_type = LogEphemerisType.nav - elif ephem.eph_type == EphemerisType.QCOM_POLY: - source_type = LogEphemerisType.qcom - else: - assert ephem.file_epoch is not None - file_src = ephem.file_source - if file_src == 'igu': # example nasa: '2214/igu22144_00.sp3.Z' - source_type = LogEphemerisType.nasaUltraRapid - elif file_src == 'Sta': # example nasa: '22166/ultra/Stark_1D_22061518.sp3' - source_type = LogEphemerisType.glonassIacUltraRapid - else: - raise Exception(f"Didn't expect file source {file_src}") - return source_type - -def get_log_eph_source(ephem): - if ephem.file_name == 'qcom' or ephem.file_name == 'ublox': - source = EphemerisSource.gnssChip - elif ephem.file_name == EPHEMERIS_CACHE: - source = EphemerisSource.cache - else: - source = EphemerisSource.internet - return source - - -class Laikad: - def __init__(self, valid_const=(ConstellationId.GPS, ConstellationId.GLONASS), auto_fetch_navs=True, auto_update=False, - valid_ephem_types=(EphemerisType.NAV, EphemerisType.QCOM_POLY), - save_ephemeris=False, use_qcom=False): - """ - valid_const: GNSS constellation which can be used - auto_fetch_navs: If true fetch navs from internet when needed - auto_update: If true download AstroDog will download all files needed. This can be ephemeris or correction data like ionosphere. - valid_ephem_types: Valid ephemeris types to be used by AstroDog - save_ephemeris: If true saves and loads nav and orbit ephemeris to cache. - """ - self.astro_dog = AstroDog(valid_const=valid_const, auto_update=auto_update, valid_ephem_types=valid_ephem_types, - clear_old_ephemeris=True, cache_dir=Paths.download_cache_root()) - self.gnss_kf = GNSSKalman(GENERATED_DIR, cython=True, erratic_clock=use_qcom) - - self.auto_fetch_navs = auto_fetch_navs - self.orbit_fetch_executor: Optional[ProcessPoolExecutor] = None - self.orbit_fetch_future: Optional[Future] = None - - self.last_report_time = GPSTime(0, 0) - self.last_fetch_navs_t = GPSTime(0, 0) - self.last_cached_t = GPSTime(0, 0) - self.save_ephemeris = save_ephemeris - self.load_cache() - - self.posfix_functions = {constellation: get_posfix_sympy_fun(constellation) for constellation in (ConstellationId.GPS, ConstellationId.GLONASS)} - self.velfix_function = get_velfix_sympy_func() - self.last_fix_pos = None - self.last_fix_t = None - self.use_qcom = use_qcom - self.first_log_time = None - self.ttff = -1 - self.measurement_lag = 0.630 if self.use_qcom else 0.095 - - # qcom specific stuff - self.qcom_reports_received = 4 - self.qcom_reports = [] - - def load_cache(self): - if not self.save_ephemeris: - return - - cache_bytes = Params().get(EPHEMERIS_CACHE) - if not cache_bytes: - return - - nav_dict = {} - try: - with ephemeris_structs.EphemerisCache.from_bytes(cache_bytes) as ephem_cache: - glonass_navs = [GLONASSEphemeris(data_struct, file_name=EPHEMERIS_CACHE) for data_struct in ephem_cache.glonassEphemerides] - gps_navs = [GPSEphemeris(data_struct, file_name=EPHEMERIS_CACHE) for data_struct in ephem_cache.gpsEphemerides] - for e in sum([glonass_navs, gps_navs], []): - if e.prn not in nav_dict: - nav_dict[e.prn] = [] - nav_dict[e.prn].append(e) - self.astro_dog.add_navs(nav_dict) - except Exception: - cloudlog.exception("Error parsing cache") - cloudlog.debug( - f"Loaded navs ({sum([len(nav_dict[prn]) for prn in nav_dict.keys()])}). Unique orbit and nav sats: {list(nav_dict.keys())} ") - - def cache_ephemeris(self): - - if self.save_ephemeris and (self.last_report_time - self.last_cached_t > SECS_IN_MIN): - nav_list: List = sum([v for k,v in self.astro_dog.navs.items()], []) - #TODO this only saves currently valid ephems, when we download future ephems we should save them too - valid_navs = [e for e in nav_list if e.valid(self.last_report_time)] - if len(valid_navs) > 0: - ephem_cache = ephemeris_structs.EphemerisCache(glonassEphemerides=[e.data for e in valid_navs if e.prn[0]=='R'], - gpsEphemerides=[e.data for e in valid_navs if e.prn[0]=='G']) - put_nonblocking(EPHEMERIS_CACHE, ephem_cache.to_bytes()) - cloudlog.debug("Cache saved") - self.last_cached_t = self.last_report_time - - def create_ephem_statuses(self): - ephemeris_statuses = [] - eph_list: List = sum([v for k,v in self.astro_dog.navs.items()], []) + sum([v for k,v in self.astro_dog.qcom_polys.items()], []) - for eph in eph_list: - status = log.GnssMeasurements.EphemerisStatus.new_message() - status.constellationId = ConstellationId.from_rinex_char(eph.prn[0]).value - status.svId = get_sv_id(eph.prn) - status.type = get_log_eph_type(eph).value - status.source = get_log_eph_source(eph).value - status.tow = eph.epoch.tow - status.gpsWeek = eph.epoch.week - ephemeris_statuses.append(status) - return ephemeris_statuses - - - def get_lsq_fix(self, t, measurements): - if self.last_fix_t is None or abs(self.last_fix_t - t) > 0: - min_measurements = 5 if any(p.constellation_id == ConstellationId.GLONASS for p in measurements) else 4 - - position_solution, pr_residuals, pos_std = calc_pos_fix(measurements, self.posfix_functions, min_measurements=min_measurements) - if len(position_solution) < 3: - return None - position_estimate = position_solution[:3] - position_std = pos_std[:3] - - velocity_solution, prr_residuals, vel_std = calc_vel_fix(measurements, position_estimate, self.velfix_function, min_measurements=min_measurements) - if len(velocity_solution) < 3: - return None - velocity_estimate = velocity_solution[:3] - velocity_std = vel_std[:3] - - return position_estimate, position_std, velocity_estimate, velocity_std - - def is_good_report(self, gnss_msg): - if gnss_msg.which() in ['drMeasurementReport', 'measurementReport'] and self.use_qcom: - # TODO: Understand and use remaining unknown constellations - try: - if gnss_msg.which() == 'drMeasurementReport': - constellation_id = ConstellationId.from_qcom_source(gnss_msg.drMeasurementReport.source) - else: - constellation_id = ConstellationId.from_qcom_source(gnss_msg.measurementReport.source) - good_constellation = constellation_id in [ConstellationId.GPS, ConstellationId.SBAS, ConstellationId.GLONASS] - report_time = gps_time_from_qcom_report(gnss_msg) - except NotImplementedError: - return False - # Garbage timestamps with week > 32767 are sometimes sent by module. - # This is an issue with gpsTime and GLONASS time. - good_week = report_time.week < np.iinfo(np.int16).max - return good_constellation and good_week - elif gnss_msg.which() == 'measurementReport' and not self.use_qcom: - return True - else: - return False - - def read_report(self, gnss_msg): - if self.use_qcom: - # QCOM reports are per constellation, so we need to aggregate them - # Additionally, the pseudoranges are broken in the measurementReports - # and the doppler filteredSpeed is broken in the drMeasurementReports - report_time = gps_time_from_qcom_report(gnss_msg) - if report_time - self.last_report_time == 0: - self.qcom_reports.append(gnss_msg) - self.last_report_time = report_time - elif report_time - self.last_report_time > 0: - self.qcom_reports_received = max(1, len(self.qcom_reports)) - self.qcom_reports = [gnss_msg] - self.last_report_time = report_time - else: - # Sometimes DR reports get sent one iteration late (1second), they need to be ignored - cloudlog.warning(f"Received report with time {report_time} before last report time {self.last_report_time}") - - if len(self.qcom_reports) == self.qcom_reports_received: - new_meas = get_measurements_from_qcom_reports(self.qcom_reports) - else: - new_meas = [] - else: - report = gnss_msg.measurementReport - self.last_report_time = GPSTime(report.gpsWeek, report.rcvTow) - new_meas = read_raw_ublox(report) - return self.last_report_time, new_meas - - def is_ephemeris(self, gnss_msg): - if self.use_qcom: - return gnss_msg.which() == 'drSvPoly' - else: - return gnss_msg.which() in ('ephemeris', 'glonassEphemeris') - - def read_ephemeris(self, gnss_msg): - if self.use_qcom: - try: - ephem = parse_qcom_ephem(gnss_msg.drSvPoly) - self.astro_dog.add_qcom_polys({ephem.prn: [ephem]}) - except Exception: - cloudlog.exception("Error parsing qcom svPoly ephemeris from qcom module") - return - - else: - if gnss_msg.which() == 'ephemeris': - data_struct = ephemeris_structs.Ephemeris.new_message(**gnss_msg.ephemeris.to_dict()) - try: - ephem = GPSEphemeris(data_struct, file_name='ublox') - except Exception: - cloudlog.exception("Error parsing GPS ephemeris from ublox") - return - elif gnss_msg.which() == 'glonassEphemeris': - data_struct = ephemeris_structs.GlonassEphemeris.new_message(**gnss_msg.glonassEphemeris.to_dict()) - try: - ephem = GLONASSEphemeris(data_struct, file_name='ublox') - except Exception: - cloudlog.exception("Error parsing GLONASS ephemeris from ublox") - return - else: - cloudlog.error(f"Unsupported ephemeris type: {gnss_msg.which()}") - return - self.astro_dog.add_navs({ephem.prn: [ephem]}) - self.cache_ephemeris() - - def process_report(self, new_meas, t): - # Filter measurements with unexpected pseudoranges for GPS and GLONASS satellites - new_meas = [m for m in new_meas if 1e7 < m.observables['C1C'] < 3e7] - processed_measurements = process_measurements(new_meas, self.astro_dog) - if self.last_fix_pos is not None: - est_pos = self.last_fix_pos - correct_delay = True - else: - est_pos = self.gnss_kf.x[GStates.ECEF_POS].tolist() - correct_delay = False - corrected_measurements = correct_measurements(processed_measurements, est_pos, self.astro_dog, correct_delay=correct_delay) - # If many measurements weren't corrected, position may be garbage, so reset - if len(processed_measurements) >= 8 and len(corrected_measurements) < 5: - cloudlog.error("Didn't correct enough measurements, resetting estimate position") - self.last_fix_pos = None - self.last_fix_t = None - return corrected_measurements - - def calc_fix(self, t, measurements): - instant_fix = self.get_lsq_fix(t, measurements) - if instant_fix is None: - return None - else: - position_estimate, position_std, velocity_estimate, velocity_std = instant_fix - self.last_fix_t = t - self.last_fix_pos = position_estimate - self.lat_fix_pos_std = position_std - return position_estimate, position_std, velocity_estimate, velocity_std - - def process_gnss_msg(self, gnss_msg, gnss_mono_time: int, block=False): - out_msg = messaging.new_message("gnssMeasurements") - t = gnss_mono_time * 1e-9 - msg_dict: Dict[str, Any] = {"measTime": gnss_mono_time - int(1e9 * self.measurement_lag)} - if self.first_log_time is None: - self.first_log_time = 1e-9 * gnss_mono_time - if self.is_ephemeris(gnss_msg): - self.read_ephemeris(gnss_msg) - elif self.is_good_report(gnss_msg): - report_t, new_meas = self.read_report(gnss_msg) - if report_t.week > 0: - if self.auto_fetch_navs: - self.fetch_navs(report_t, block) - - corrected_measurements = self.process_report(new_meas, t) - msg_dict['correctedMeasurements'] = [create_measurement_msg(m) for m in corrected_measurements] - - fix = self.calc_fix(t, corrected_measurements) - measurement_msg = log.LiveLocationKalman.Measurement.new_message - if fix is not None: - position_estimate, position_std, velocity_estimate, velocity_std = fix - if self.ttff <= 0: - self.ttff = max(1e-3, t - self.first_log_time) - msg_dict["positionECEF"] = measurement_msg(value=position_estimate, std=position_std.tolist(), valid=bool(self.last_fix_t == t)) - msg_dict["velocityECEF"] = measurement_msg(value=velocity_estimate, std=velocity_std.tolist(), valid=bool(self.last_fix_t == t)) - - self.update_localizer(self.last_fix_pos, t, corrected_measurements) - P_diag = self.gnss_kf.P.diagonal() - kf_valid = all(self.kf_valid(t)) - msg_dict["kalmanPositionECEF"] = measurement_msg(value=self.gnss_kf.x[GStates.ECEF_POS].tolist(), - std=np.sqrt(P_diag[GStates.ECEF_POS]).tolist(), - valid=kf_valid) - msg_dict["kalmanVelocityECEF"] = measurement_msg(value=self.gnss_kf.x[GStates.ECEF_VELOCITY].tolist(), - std=np.sqrt(P_diag[GStates.ECEF_VELOCITY]).tolist(), - valid=kf_valid) - - msg_dict['gpsWeek'] = self.last_report_time.week - msg_dict['gpsTimeOfWeek'] = self.last_report_time.tow - msg_dict['timeToFirstFix'] = self.ttff - msg_dict['ephemerisStatuses'] = self.create_ephem_statuses() - out_msg.gnssMeasurements = msg_dict - return out_msg - - def update_localizer(self, est_pos, t: float, measurements: List[GNSSMeasurement]): - # Check time and outputs are valid - valid = self.kf_valid(t) - if not all(valid): - if not valid[0]: # Filter not initialized - pass - elif not valid[1]: - cloudlog.error("Time gap of over 10s detected, gnss kalman reset") - elif not valid[2]: - cloudlog.error("Gnss kalman filter state is nan") - if est_pos is not None and len(est_pos) > 0: - cloudlog.info(f"Reset kalman filter with {est_pos}") - self.init_gnss_localizer(est_pos) - else: - return - if len(measurements) > 0: - kf_add_observations(self.gnss_kf, t, measurements) - else: - # Ensure gnss filter is updated even with no new measurements - self.gnss_kf.predict(t) - - def kf_valid(self, t: float) -> List[bool]: - filter_time = self.gnss_kf.filter.get_filter_time() - return [not math.isnan(filter_time), - abs(t - filter_time) < MAX_TIME_GAP, - all(np.isfinite(self.gnss_kf.x[GStates.ECEF_POS]))] - - def init_gnss_localizer(self, est_pos): - x_initial, p_initial_diag = np.copy(GNSSKalman.x_initial), np.copy(np.diagonal(GNSSKalman.P_initial)) - x_initial[GStates.ECEF_POS] = est_pos - p_initial_diag[GStates.ECEF_POS] = 1000 ** 2 - self.gnss_kf.init_state(x_initial, covs_diag=p_initial_diag) - - def fetch_navs(self, t: GPSTime, block): - # Download new navs if 1 hour of navs data left - if t + SECS_IN_HR not in self.astro_dog.navs_fetched_times and (abs(t - self.last_fetch_navs_t) > SECS_IN_MIN): - astro_dog_vars = self.astro_dog.valid_const, self.astro_dog.auto_update, self.astro_dog.valid_ephem_types, self.astro_dog.cache_dir - ret = None - - if block: # Used for testing purposes - ret = get_orbit_data(t, *astro_dog_vars) - elif self.orbit_fetch_future is None: - self.orbit_fetch_executor = ProcessPoolExecutor(max_workers=1) - self.orbit_fetch_future = self.orbit_fetch_executor.submit(get_orbit_data, t, *astro_dog_vars) - elif self.orbit_fetch_future.done(): - ret = self.orbit_fetch_future.result() - self.orbit_fetch_executor = self.orbit_fetch_future = None - - if ret is not None: - if ret[0] is None: - self.last_fetch_navs_t = ret[2] - else: - self.astro_dog.navs, self.astro_dog.navs_fetched_times, self.last_fetch_navs_t = ret - self.cache_ephemeris() - - -def get_orbit_data(t: GPSTime, valid_const, auto_update, valid_ephem_types, cache_dir): - astro_dog = AstroDog(valid_const=valid_const, auto_update=auto_update, valid_ephem_types=valid_ephem_types, cache_dir=cache_dir) - cloudlog.info(f"Start to download/parse navs for time {t.as_datetime()}") - start_time = time.monotonic() - try: - astro_dog.get_navs(t) - cloudlog.info(f"Done parsing navs. Took {time.monotonic() - start_time:.1f}s") - cloudlog.debug(f"Downloaded navs ({sum([len(v) for v in astro_dog.navs])}): {list(astro_dog.navs.keys())}" + - f"With time range: {[f'{start.as_datetime()}, {end.as_datetime()}' for (start,end) in astro_dog.orbit_fetched_times._ranges]}") - return astro_dog.navs, astro_dog.navs_fetched_times, t - except (DownloadFailed, RuntimeError, ValueError, IOError) as e: - cloudlog.warning(f"No orbit data found or parsing failure: {e}") - return None, None, t - - -def create_measurement_msg(meas: GNSSMeasurement): - c = log.GnssMeasurements.CorrectedMeasurement.new_message() - c.constellationId = meas.constellation_id.value - c.svId = meas.sv_id - c.glonassFrequency = meas.glonass_freq if meas.constellation_id == ConstellationId.GLONASS else 0 - c.pseudorange = float(meas.observables_final['C1C']) - c.pseudorangeStd = float(meas.observables_std['C1C']) - c.pseudorangeRate = float(meas.observables_final['D1C']) - c.pseudorangeRateStd = float(meas.observables_std['D1C']) - c.satPos = meas.sat_pos_final.tolist() - c.satVel = meas.sat_vel.tolist() - c.satVel = meas.sat_vel.tolist() - return c - -def kf_add_observations(gnss_kf: GNSSKalman, t: float, measurements: List[GNSSMeasurement]): - ekf_data = defaultdict(list) - for m in measurements: - m_arr = m.as_array() - if m.constellation_id == ConstellationId.GPS: - ekf_data[ObservationKind.PSEUDORANGE_GPS].append(m_arr) - elif m.constellation_id == ConstellationId.GLONASS: - ekf_data[ObservationKind.PSEUDORANGE_GLONASS].append(m_arr) - ekf_data[ObservationKind.PSEUDORANGE_RATE_GPS] = ekf_data[ObservationKind.PSEUDORANGE_GPS] - ekf_data[ObservationKind.PSEUDORANGE_RATE_GLONASS] = ekf_data[ObservationKind.PSEUDORANGE_GLONASS] - for kind, data in ekf_data.items(): - if len(data) > 0: - gnss_kf.predict_and_observe(t, kind, data) - - -def clear_tmp_cache(): - if os.path.exists(Paths.download_cache_root()): - shutil.rmtree(Paths.download_cache_root()) - os.mkdir(Paths.download_cache_root()) - - -def main(sm=None, pm=None): - #clear_tmp_cache() - - use_qcom = not Params().get_bool("UbloxAvailable") - if use_qcom: - raw_name = "qcomGnss" - else: - raw_name = "ubloxGnss" - raw_gnss_sock = messaging.sub_sock(raw_name, conflate=False) - if pm is None: - pm = messaging.PubMaster(['gnssMeasurements']) - - # disable until set as main gps source, to better analyze startup time - # TODO ensure low CPU usage before enabling - use_internet = False # "LAIKAD_NO_INTERNET" not in os.environ - - replay = "REPLAY" in os.environ - laikad = Laikad(save_ephemeris=not replay, auto_fetch_navs=use_internet, use_qcom=use_qcom) - - while True: - for in_msg in messaging.drain_sock(raw_gnss_sock, wait_for_one=True): - out_msg = laikad.process_gnss_msg(getattr(in_msg, raw_name), in_msg.logMonoTime, replay) - pm.send('gnssMeasurements', out_msg) - - -if __name__ == "__main__": - main() diff --git a/selfdrive/locationd/locationd.cc b/selfdrive/locationd/locationd.cc index 600ba46853..e32ed78a3e 100644 --- a/selfdrive/locationd/locationd.cc +++ b/selfdrive/locationd/locationd.cc @@ -678,9 +678,10 @@ void Localizer::configure_gnss_source(const LocalizerGnssSource &source) { } int Localizer::locationd_thread() { + Params params; LocalizerGnssSource source; const char* gps_location_socket; - if (Params().getBool("UbloxAvailable")) { + if (params.getBool("UbloxAvailable")) { source = LocalizerGnssSource::UBLOX; gps_location_socket = "gpsLocationExternal"; } else { @@ -720,7 +721,7 @@ int Localizer::locationd_thread() { // 100Hz publish for notcars, 20Hz for cars const char* trigger_msg = sm["carParams"].getCarParams().getNotCar() ? "accelerometer" : "cameraOdometry"; if (sm.updated(trigger_msg)) { - bool inputsOK = sm.allAliveAndValid() && this->are_inputs_ok(); + bool inputsOK = sm.allValid() && this->are_inputs_ok(); bool gpsOK = this->is_gps_ok(); bool sensorsOK = sm.allAliveAndValid({"accelerometer", "gyroscope"}); @@ -737,10 +738,7 @@ int Localizer::locationd_thread() { VectorXd posGeo = this->get_position_geodetic(); std::string lastGPSPosJSON = util::string_format( "{\"latitude\": %.15f, \"longitude\": %.15f, \"altitude\": %.15f}", posGeo(0), posGeo(1), posGeo(2)); - - std::thread([] (const std::string gpsjson) { - Params().put("LastGPSPosition", gpsjson); - }, lastGPSPosJSON).detach(); + params.putNonBlocking("LastGPSPosition", lastGPSPosJSON); } cnt++; } diff --git a/selfdrive/locationd/models/car_kf.py b/selfdrive/locationd/models/car_kf.py index b87c83cac2..9230cb48f0 100755 --- a/selfdrive/locationd/models/car_kf.py +++ b/selfdrive/locationd/models/car_kf.py @@ -7,7 +7,7 @@ import numpy as np from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_GRAVITY from openpilot.selfdrive.locationd.models.constants import ObservationKind -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from rednose.helpers.kalmanfilter import KalmanFilter diff --git a/selfdrive/locationd/models/gnss_helpers.py b/selfdrive/locationd/models/gnss_helpers.py deleted file mode 100644 index b6c1771ec6..0000000000 --- a/selfdrive/locationd/models/gnss_helpers.py +++ /dev/null @@ -1,19 +0,0 @@ -import numpy as np -from laika.raw_gnss import GNSSMeasurement - -def parse_prr(m): - sat_pos_vel_i = np.concatenate((m[GNSSMeasurement.SAT_POS], - m[GNSSMeasurement.SAT_VEL])) - R_i = np.atleast_2d(m[GNSSMeasurement.PRR_STD]**2) - z_i = m[GNSSMeasurement.PRR] - return z_i, R_i, sat_pos_vel_i - -def parse_pr(m): - pseudorange = m[GNSSMeasurement.PR] - pseudorange_stdev = m[GNSSMeasurement.PR_STD] - sat_pos_freq_i = np.concatenate((m[GNSSMeasurement.SAT_POS], - np.array([m[GNSSMeasurement.GLONASS_FREQ]]))) - z_i = np.atleast_1d(pseudorange) - R_i = np.atleast_2d(pseudorange_stdev**2) - return z_i, R_i, sat_pos_freq_i - diff --git a/selfdrive/locationd/models/gnss_kf.py b/selfdrive/locationd/models/gnss_kf.py deleted file mode 100755 index c4f3b2e210..0000000000 --- a/selfdrive/locationd/models/gnss_kf.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python3 -import sys -from typing import List - -import numpy as np - -from openpilot.selfdrive.locationd.models.constants import ObservationKind -from openpilot.selfdrive.locationd.models.gnss_helpers import parse_pr, parse_prr - -if __name__ == '__main__': # Generating sympy - import sympy as sp - from rednose.helpers.ekf_sym import gen_code -else: - from rednose.helpers.ekf_sym_pyx import EKF_sym_pyx - from rednose.helpers.ekf_sym import EKF_sym - - -class States(): - ECEF_POS = slice(0, 3) # x, y and z in ECEF in meters - ECEF_VELOCITY = slice(3, 6) - CLOCK_BIAS = slice(6, 7) # clock bias in light-meters, - CLOCK_DRIFT = slice(7, 8) # clock drift in light-meters/s, - CLOCK_ACCELERATION = slice(8, 9) # clock acceleration in light-meters/s**2 - GLONASS_BIAS = slice(9, 10) # clock drift in light-meters/s, - GLONASS_FREQ_SLOPE = slice(10, 11) # GLONASS bias in m expressed as bias + freq_num*freq_slope - - -class GNSSKalman(): - name = 'gnss' - - x_initial = np.array([-2712700.6008, -4281600.6679, 3859300.1830, - 0, 0, 0, - 0, 0, 0, - 0, 0]) - - # state covariance - P_initial = np.diag([1e16, 1e16, 1e16, - 10**2, 10**2, 10**2, - 1e14, (100)**2, (0.2)**2, - (10)**2, (1)**2]) - - maha_test_kinds: List[int] = [] # ObservationKind.PSEUDORANGE_RATE, ObservationKind.PSEUDORANGE, ObservationKind.PSEUDORANGE_GLONASS] - - @staticmethod - def generate_code(generated_dir): - dim_state = GNSSKalman.x_initial.shape[0] - name = GNSSKalman.name - maha_test_kinds = GNSSKalman.maha_test_kinds - - # make functions and jacobians with sympy - # state variables - state_sym = sp.MatrixSymbol('state', dim_state, 1) - state = sp.Matrix(state_sym) - x, y, z = state[0:3, :] - v = state[3:6, :] - vx, vy, vz = v - cb, cd, ca = state[6:9, :] - glonass_bias, glonass_freq_slope = state[9:11, :] - - dt = sp.Symbol('dt') - - state_dot = sp.Matrix(np.zeros((dim_state, 1))) - state_dot[:3, :] = v - state_dot[6, 0] = cd - state_dot[7, 0] = ca - - # Basic descretization, 1st order integrator - # Can be pretty bad if dt is big - f_sym = state + dt * state_dot - - # - # Observation functions - # - - # extra args - sat_pos_freq_sym = sp.MatrixSymbol('sat_pos', 4, 1) - sat_pos_vel_sym = sp.MatrixSymbol('sat_pos_vel', 6, 1) - # sat_los_sym = sp.MatrixSymbol('sat_los', 3, 1) - # orb_epos_sym = sp.MatrixSymbol('orb_epos_sym', 3, 1) - - # expand extra args - sat_x, sat_y, sat_z, glonass_freq = sat_pos_freq_sym - sat_vx, sat_vy, sat_vz = sat_pos_vel_sym[3:] - # los_x, los_y, los_z = sat_los_sym - # orb_x, orb_y, orb_z = orb_epos_sym - - h_pseudorange_sym = sp.Matrix([ - sp.sqrt( - (x - sat_x)**2 + - (y - sat_y)**2 + - (z - sat_z)**2 - ) + cb - ]) - - h_pseudorange_glonass_sym = sp.Matrix([ - sp.sqrt( - (x - sat_x)**2 + - (y - sat_y)**2 + - (z - sat_z)**2 - ) + cb + glonass_bias + glonass_freq_slope * glonass_freq - ]) - - los_vector = (sp.Matrix(sat_pos_vel_sym[0:3]) - sp.Matrix([x, y, z])) - los_vector = los_vector / sp.sqrt(los_vector[0]**2 + los_vector[1]**2 + los_vector[2]**2) - h_pseudorange_rate_sym = sp.Matrix([los_vector[0] * (sat_vx - vx) + - los_vector[1] * (sat_vy - vy) + - los_vector[2] * (sat_vz - vz) + - cd]) - - obs_eqs = [[h_pseudorange_sym, ObservationKind.PSEUDORANGE_GPS, sat_pos_freq_sym], - [h_pseudorange_glonass_sym, ObservationKind.PSEUDORANGE_GLONASS, sat_pos_freq_sym], - [h_pseudorange_rate_sym, ObservationKind.PSEUDORANGE_RATE_GPS, sat_pos_vel_sym], - [h_pseudorange_rate_sym, ObservationKind.PSEUDORANGE_RATE_GLONASS, sat_pos_vel_sym]] - - gen_code(generated_dir, name, f_sym, dt, state_sym, obs_eqs, dim_state, dim_state, maha_test_kinds=maha_test_kinds) - - def __init__(self, generated_dir, cython=False, erratic_clock=False): - # process noise - clock_error_drift = 100.0 if erratic_clock else 0.1 - self.Q = np.diag([0.03**2, 0.03**2, 0.03**2, - 3**2, 3**2, 3**2, - (clock_error_drift)**2, (0)**2, (0.005)**2, - .1**2, (.01)**2]) - - self.dim_state = self.x_initial.shape[0] - - # init filter - filter_cls = EKF_sym_pyx if cython else EKF_sym - self.filter = filter_cls(generated_dir, self.name, self.Q, self.x_initial, self.P_initial, self.dim_state, - self.dim_state, maha_test_kinds=self.maha_test_kinds) - self.init_state(GNSSKalman.x_initial, covs=GNSSKalman.P_initial) - - @property - def x(self): - return self.filter.state() - - @property - def P(self): - return self.filter.covs() - - def predict(self, t): - return self.filter.predict(t) - - def rts_smooth(self, estimates): - return self.filter.rts_smooth(estimates, norm_quats=False) - - def init_state(self, state, covs_diag=None, covs=None, filter_time=None): - if covs_diag is not None: - P = np.diag(covs_diag) - elif covs is not None: - P = covs - else: - P = self.filter.covs() - self.filter.init_state(state, P, filter_time) - - def predict_and_observe(self, t, kind, data): - if len(data) > 0: - data = np.atleast_2d(data) - if kind == ObservationKind.PSEUDORANGE_GPS or kind == ObservationKind.PSEUDORANGE_GLONASS: - r = self.predict_and_update_pseudorange(data, t, kind) - elif kind == ObservationKind.PSEUDORANGE_RATE_GPS or kind == ObservationKind.PSEUDORANGE_RATE_GLONASS: - r = self.predict_and_update_pseudorange_rate(data, t, kind) - return r - - def predict_and_update_pseudorange(self, meas, t, kind): - R = np.zeros((len(meas), 1, 1)) - sat_pos_freq = np.zeros((len(meas), 4)) - z = np.zeros((len(meas), 1)) - for i, m in enumerate(meas): - z_i, R_i, sat_pos_freq_i = parse_pr(m) - sat_pos_freq[i, :] = sat_pos_freq_i - z[i, :] = z_i - R[i, :, :] = R_i - return self.filter.predict_and_update_batch(t, kind, z, R, sat_pos_freq) - - def predict_and_update_pseudorange_rate(self, meas, t, kind): - R = np.zeros((len(meas), 1, 1)) - z = np.zeros((len(meas), 1)) - sat_pos_vel = np.zeros((len(meas), 6)) - for i, m in enumerate(meas): - z_i, R_i, sat_pos_vel_i = parse_prr(m) - sat_pos_vel[i] = sat_pos_vel_i - R[i, :, :] = R_i - z[i, :] = z_i - return self.filter.predict_and_update_batch(t, kind, z, R, sat_pos_vel) - - -if __name__ == "__main__": - generated_dir = sys.argv[2] - GNSSKalman.generate_code(generated_dir) diff --git a/selfdrive/locationd/models/lane_kf.py b/selfdrive/locationd/models/lane_kf.py deleted file mode 100755 index e8fa999956..0000000000 --- a/selfdrive/locationd/models/lane_kf.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -import sys -import numpy as np -import sympy as sp - -from openpilot.selfdrive.locationd.models.constants import ObservationKind -from rednose.helpers.ekf_sym import gen_code, EKF_sym - - -class LaneKalman(): - name = 'lane' - - @staticmethod - def generate_code(generated_dir): - # make functions and jacobians with sympy - # state variables - dim = 6 - state = sp.MatrixSymbol('state', dim, 1) - - dd = sp.Symbol('dd') # WARNING: NOT TIME - - # Time derivative of the state as a function of state - state_dot = sp.Matrix(np.zeros((dim, 1))) - state_dot[:3,0] = sp.Matrix(state[3:6,0]) - - # Basic descretization, 1st order intergrator - # Can be pretty bad if dt is big - f_sym = sp.Matrix(state) + dd*state_dot - - # - # Observation functions - # - h_lane_sym = sp.Matrix(state[:3,0]) - obs_eqs = [[h_lane_sym, ObservationKind.LANE_PT, None]] - gen_code(generated_dir, LaneKalman.name, f_sym, dd, state, obs_eqs, dim, dim) - - def __init__(self, generated_dir, pt_std=5): - # state - # left and right lane centers in ecef - # WARNING: this is not a temporal model - # the 'time' in this kalman filter is - # the distance traveled by the vehicle, - # which should approximately be the - # distance along the lane path - # a more logical parametrization - # states 0-2 are ecef coordinates distance d - # states 3-5 is the 3d "velocity" of the - # lane in ecef (m/m). - x_initial = np.array([0,0,0, - 0,0,0]) - - # state covariance - P_initial = np.diag([1e16, 1e16, 1e16, - 1**2, 1**2, 1**2]) - - # process noise - Q = np.diag([0.1**2, 0.1**2, 0.1**2, - 0.1**2, 0.1**2, 0.1*2]) - - self.dim_state = len(x_initial) - - # init filter - self.filter = EKF_sym(generated_dir, self.name, Q, x_initial, P_initial, x_initial.shape[0], P_initial.shape[0]) - self.obs_noise = {ObservationKind.LANE_PT: np.diag([pt_std**2]*3)} - - @property - def x(self): - return self.filter.state() - - @property - def P(self): - return self.filter.covs() - - def predict(self, t): - return self.filter.predict(t) - - def rts_smooth(self, estimates): - return self.filter.rts_smooth(estimates, norm_quats=False) - - - def init_state(self, state, covs_diag=None, covs=None, filter_time=None): - if covs_diag is not None: - P = np.diag(covs_diag) - elif covs is not None: - P = covs - else: - P = self.filter.covs() - self.filter.init_state(state, P, filter_time) - - def predict_and_observe(self, t, kind, data): - data = np.atleast_2d(data) - return self.filter.predict_and_update_batch(t, kind, data, self.get_R(kind, len(data))) - - def get_R(self, kind, n): - obs_noise = self.obs_noise[kind] - dim = obs_noise.shape[0] - R = np.zeros((n, dim, dim)) - for i in range(n): - R[i,:,:] = obs_noise - return R - - -if __name__ == "__main__": - generated_dir = sys.argv[2] - LaneKalman.generate_code(generated_dir) diff --git a/selfdrive/locationd/models/loc_kf.py b/selfdrive/locationd/models/loc_kf.py deleted file mode 100755 index 8bd317bd58..0000000000 --- a/selfdrive/locationd/models/loc_kf.py +++ /dev/null @@ -1,565 +0,0 @@ -#!/usr/bin/env python3 - -import sys - -import numpy as np -import sympy as sp - -from rednose.helpers.ekf_sym import EKF_sym, gen_code -from rednose.helpers.lst_sq_computer import LstSqComputer -from rednose.helpers.sympy_helpers import euler_rotate, quat_matrix_r, quat_rotate - -from openpilot.selfdrive.locationd.models.constants import ObservationKind -from openpilot.selfdrive.locationd.models.gnss_helpers import parse_pr, parse_prr - -EARTH_GM = 3.986005e14 # m^3/s^2 (gravitational constant * mass of earth) - -class States(): - ECEF_POS = slice(0, 3) # x, y and z in ECEF in meters - ECEF_ORIENTATION = slice(3, 7) # quat for orientation of phone in ecef - ECEF_VELOCITY = slice(7, 10) # ecef velocity in m/s - ANGULAR_VELOCITY = slice(10, 13) # roll, pitch and yaw rates in device frame in radians/s - CLOCK_BIAS = slice(13, 14) # clock bias in light-meters, - CLOCK_DRIFT = slice(14, 15) # clock drift in light-meters/s, - GYRO_BIAS = slice(15, 18) # roll, pitch and yaw biases - ODO_SCALE_UNUSED = slice(18, 19) # odometer scale - ACCELERATION = slice(19, 22) # Acceleration in device frame in m/s**2 - FOCAL_SCALE_UNUSED = slice(22, 23) # focal length scale - IMU_FROM_DEVICE_EULER = slice(23, 26) # imu offset angles in radians - GLONASS_BIAS = slice(26, 27) # GLONASS bias in m expressed as bias + freq_num*freq_slope - GLONASS_FREQ_SLOPE = slice(27, 28) # GLONASS bias in m expressed as bias + freq_num*freq_slope - CLOCK_ACCELERATION = slice(28, 29) # clock acceleration in light-meters/s**2, - ACCELEROMETER_SCALE_UNUSED = slice(29, 30) # scale of mems accelerometer - ACCELEROMETER_BIAS = slice(30, 33) # bias of mems accelerometer - # TODO the offset is likely a translation of the sensor, not a rotation of the camera - WIDE_FROM_DEVICE_EULER = slice(33, 36) # wide camera offset angles in radians (tici only) - # We currently do not use ACCELEROMETER_SCALE to avoid instability due to too many free variables - # (ACCELEROMETER_SCALE, ACCELEROMETER_BIAS, IMU_FROM_DEVICE_EULER). - # From experiments we see that ACCELEROMETER_BIAS is more correct than ACCELEROMETER_SCALE - - # Error-state has different slices because it is an ESKF - ECEF_POS_ERR = slice(0, 3) - ECEF_ORIENTATION_ERR = slice(3, 6) # euler angles for orientation error - ECEF_VELOCITY_ERR = slice(6, 9) - ANGULAR_VELOCITY_ERR = slice(9, 12) - CLOCK_BIAS_ERR = slice(12, 13) - CLOCK_DRIFT_ERR = slice(13, 14) - GYRO_BIAS_ERR = slice(14, 17) - ODO_SCALE_ERR_UNUSED = slice(17, 18) - ACCELERATION_ERR = slice(18, 21) - FOCAL_SCALE_ERR_UNUSED = slice(21, 22) - IMU_FROM_DEVICE_EULER_ERR = slice(22, 25) - GLONASS_BIAS_ERR = slice(25, 26) - GLONASS_FREQ_SLOPE_ERR = slice(26, 27) - CLOCK_ACCELERATION_ERR = slice(27, 28) - ACCELEROMETER_SCALE_ERR_UNUSED = slice(28, 29) - ACCELEROMETER_BIAS_ERR = slice(29, 32) - WIDE_FROM_DEVICE_EULER_ERR = slice(32, 35) - - -class LocKalman(): - name = "loc" - x_initial = np.array([0, 0, 0, - 1, 0, 0, 0, - 0, 0, 0, - 0, 0, 0, - 0, 0, - 0, 0, 0, - 1, - 0, 0, 0, - 1, - 0, 0, 0, - 0, 0, - 0, - 1, - 0, 0, 0, - 0, 0, 0], dtype=np.float64) - - # state covariance - P_initial = np.diag([1e16, 1e16, 1e16, - 10**2, 10**2, 10**2, - 10**2, 10**2, 10**2, - 1**2, 1**2, 1**2, - 1e14, (100)**2, - 0.05**2, 0.05**2, 0.05**2, - 0.02**2, - 2**2, 2**2, 2**2, - 0.01**2, - 0.01**2, 0.01**2, 0.01**2, - 10**2, 1**2, - 0.2**2, - 0.05**2, - 0.05**2, 0.05**2, 0.05**2, - 0.01**2, 0.01**2, 0.01**2]) - - - # measurements that need to pass mahalanobis distance outlier rejector - maha_test_kinds = [ObservationKind.ORB_FEATURES, ObservationKind.ORB_FEATURES_WIDE] # , ObservationKind.PSEUDORANGE, ObservationKind.PSEUDORANGE_RATE] - dim_augment = 7 - dim_augment_err = 6 - - @staticmethod - def generate_code(generated_dir, N=4): - dim_augment = LocKalman.dim_augment - dim_augment_err = LocKalman.dim_augment_err - - dim_main = LocKalman.x_initial.shape[0] - dim_main_err = LocKalman.P_initial.shape[0] - dim_state = dim_main + dim_augment * N - dim_state_err = dim_main_err + dim_augment_err * N - maha_test_kinds = LocKalman.maha_test_kinds - - name = f"{LocKalman.name}_{N}" - - # make functions and jacobians with sympy - # state variables - state_sym = sp.MatrixSymbol('state', dim_state, 1) - state = sp.Matrix(state_sym) - x, y, z = state[States.ECEF_POS, :] - q = state[States.ECEF_ORIENTATION, :] - v = state[States.ECEF_VELOCITY, :] - vx, vy, vz = v - omega = state[States.ANGULAR_VELOCITY, :] - vroll, vpitch, vyaw = omega - cb = state[States.CLOCK_BIAS, :] - cd = state[States.CLOCK_DRIFT, :] - roll_bias, pitch_bias, yaw_bias = state[States.GYRO_BIAS, :] - acceleration = state[States.ACCELERATION, :] - imu_from_device_euler = state[States.IMU_FROM_DEVICE_EULER, :] - imu_from_device_euler[0, 0] = 0 # not observable enough - imu_from_device_euler[2, 0] = 0 # not observable enough - glonass_bias = state[States.GLONASS_BIAS, :] - glonass_freq_slope = state[States.GLONASS_FREQ_SLOPE, :] - ca = state[States.CLOCK_ACCELERATION, :] - accel_bias = state[States.ACCELEROMETER_BIAS, :] - wide_from_device_euler = state[States.WIDE_FROM_DEVICE_EULER, :] - wide_from_device_euler[0, 0] = 0 # not observable enough - - dt = sp.Symbol('dt') - - # calibration and attitude rotation matrices - quat_rot = quat_rotate(*q) - - # Got the quat predict equations from here - # A New Quaternion-Based Kalman Filter for - # Real-Time Attitude Estimation Using the Two-Step - # Geometrically-Intuitive Correction Algorithm - A = 0.5 * sp.Matrix([[0, -vroll, -vpitch, -vyaw], - [vroll, 0, vyaw, -vpitch], - [vpitch, -vyaw, 0, vroll], - [vyaw, vpitch, -vroll, 0]]) - q_dot = A * q - - # Time derivative of the state as a function of state - state_dot = sp.Matrix(np.zeros((dim_state, 1))) - state_dot[States.ECEF_POS, :] = v - state_dot[States.ECEF_ORIENTATION, :] = q_dot - state_dot[States.ECEF_VELOCITY, 0] = quat_rot * acceleration - state_dot[States.CLOCK_BIAS, :] = cd - state_dot[States.CLOCK_DRIFT, :] = ca - - # Basic descretization, 1st order intergrator - # Can be pretty bad if dt is big - f_sym = state + dt * state_dot - - state_err_sym = sp.MatrixSymbol('state_err', dim_state_err, 1) - state_err = sp.Matrix(state_err_sym) - quat_err = state_err[States.ECEF_ORIENTATION_ERR, :] - v_err = state_err[States.ECEF_VELOCITY_ERR, :] - omega_err = state_err[States.ANGULAR_VELOCITY_ERR, :] - cd_err = state_err[States.CLOCK_DRIFT_ERR, :] - acceleration_err = state_err[States.ACCELERATION_ERR, :] - ca_err = state_err[States.CLOCK_ACCELERATION_ERR, :] - - # Time derivative of the state error as a function of state error and state - quat_err_matrix = euler_rotate(quat_err[0], quat_err[1], quat_err[2]) - q_err_dot = quat_err_matrix * quat_rot * (omega + omega_err) - state_err_dot = sp.Matrix(np.zeros((dim_state_err, 1))) - state_err_dot[States.ECEF_POS_ERR, :] = v_err - state_err_dot[States.ECEF_ORIENTATION_ERR, :] = q_err_dot - state_err_dot[States.ECEF_VELOCITY_ERR, :] = quat_err_matrix * quat_rot * (acceleration + acceleration_err) - state_err_dot[States.CLOCK_BIAS_ERR, :] = cd_err - state_err_dot[States.CLOCK_DRIFT_ERR, :] = ca_err - f_err_sym = state_err + dt * state_err_dot - - # convenient indexing - # q idxs are for quats and p idxs are for other - q_idxs = [[3, dim_augment]] + [[dim_main + n * dim_augment + 3, dim_main + (n + 1) * dim_augment] for n in range(N)] - q_err_idxs = [[3, dim_augment_err]] + [[dim_main_err + n * dim_augment_err + 3, dim_main_err + (n + 1) * dim_augment_err] for n in range(N)] - p_idxs = [[0, 3]] + [[dim_augment, dim_main]] + [[dim_main + n * dim_augment, dim_main + n * dim_augment + 3] for n in range(N)] - p_err_idxs = [[0, 3]] + [[dim_augment_err, dim_main_err]] + [[dim_main_err + n * dim_augment_err, dim_main_err + n * dim_augment_err + 3] for n in range(N)] - - # Observation matrix modifier - H_mod_sym = sp.Matrix(np.zeros((dim_state, dim_state_err))) - for p_idx, p_err_idx in zip(p_idxs, p_err_idxs, strict=True): - H_mod_sym[p_idx[0]:p_idx[1], p_err_idx[0]:p_err_idx[1]] = np.eye(p_idx[1] - p_idx[0]) - for q_idx, q_err_idx in zip(q_idxs, q_err_idxs, strict=True): - H_mod_sym[q_idx[0]:q_idx[1], q_err_idx[0]:q_err_idx[1]] = 0.5 * quat_matrix_r(state[q_idx[0]:q_idx[1]])[:, 1:] - - # these error functions are defined so that say there - # is a nominal x and true x: - # true x = err_function(nominal x, delta x) - # delta x = inv_err_function(nominal x, true x) - nom_x = sp.MatrixSymbol('nom_x', dim_state, 1) - true_x = sp.MatrixSymbol('true_x', dim_state, 1) - delta_x = sp.MatrixSymbol('delta_x', dim_state_err, 1) - - err_function_sym = sp.Matrix(np.zeros((dim_state, 1))) - for q_idx, q_err_idx in zip(q_idxs, q_err_idxs, strict=True): - delta_quat = sp.Matrix(np.ones(4)) - delta_quat[1:, :] = sp.Matrix(0.5 * delta_x[q_err_idx[0]: q_err_idx[1], :]) - err_function_sym[q_idx[0]:q_idx[1], 0] = quat_matrix_r(nom_x[q_idx[0]:q_idx[1], 0]) * delta_quat - for p_idx, p_err_idx in zip(p_idxs, p_err_idxs, strict=True): - err_function_sym[p_idx[0]:p_idx[1], :] = sp.Matrix(nom_x[p_idx[0]:p_idx[1], :] + delta_x[p_err_idx[0]:p_err_idx[1], :]) - - inv_err_function_sym = sp.Matrix(np.zeros((dim_state_err, 1))) - for p_idx, p_err_idx in zip(p_idxs, p_err_idxs, strict=True): - inv_err_function_sym[p_err_idx[0]:p_err_idx[1], 0] = sp.Matrix(-nom_x[p_idx[0]:p_idx[1], 0] + true_x[p_idx[0]:p_idx[1], 0]) - for q_idx, q_err_idx in zip(q_idxs, q_err_idxs, strict=True): - delta_quat = quat_matrix_r(nom_x[q_idx[0]:q_idx[1], 0]).T * true_x[q_idx[0]:q_idx[1], 0] - inv_err_function_sym[q_err_idx[0]:q_err_idx[1], 0] = sp.Matrix(2 * delta_quat[1:]) - - eskf_params = [[err_function_sym, nom_x, delta_x], - [inv_err_function_sym, nom_x, true_x], - H_mod_sym, f_err_sym, state_err_sym] - # - # Observation functions - # - - # extra args - sat_pos_freq_sym = sp.MatrixSymbol('sat_pos', 4, 1) - sat_pos_vel_sym = sp.MatrixSymbol('sat_pos_vel', 6, 1) - # sat_los_sym = sp.MatrixSymbol('sat_los', 3, 1) - - # expand extra args - sat_x, sat_y, sat_z, glonass_freq = sat_pos_freq_sym - sat_vx, sat_vy, sat_vz = sat_pos_vel_sym[3:] - - h_pseudorange_sym = sp.Matrix([ - sp.sqrt( - (x - sat_x)**2 + - (y - sat_y)**2 + - (z - sat_z)**2 - ) + cb[0] - ]) - - h_pseudorange_glonass_sym = sp.Matrix([ - sp.sqrt( - (x - sat_x)**2 + - (y - sat_y)**2 + - (z - sat_z)**2 - ) + cb[0] + glonass_bias[0] + glonass_freq_slope[0] * glonass_freq - ]) - - los_vector = (sp.Matrix(sat_pos_vel_sym[0:3]) - sp.Matrix([x, y, z])) - los_vector = los_vector / sp.sqrt(los_vector[0]**2 + los_vector[1]**2 + los_vector[2]**2) - h_pseudorange_rate_sym = sp.Matrix([los_vector[0] * (sat_vx - vx) + - los_vector[1] * (sat_vy - vy) + - los_vector[2] * (sat_vz - vz) + - cd[0]]) - - imu_from_device = euler_rotate(*imu_from_device_euler) - h_gyro_sym = imu_from_device * sp.Matrix([vroll + roll_bias, - vpitch + pitch_bias, - vyaw + yaw_bias]) - - pos = sp.Matrix([x, y, z]) - # add 1 for stability, prevent division by 0 - gravity = quat_rot.T * ((EARTH_GM / ((x**2 + y**2 + z**2 + 1)**(3.0 / 2.0))) * pos) - h_acc_sym = imu_from_device * (gravity + acceleration + accel_bias) - h_acc_stationary_sym = acceleration - h_phone_rot_sym = sp.Matrix([vroll, vpitch, vyaw]) - h_relative_motion = sp.Matrix(quat_rot.T * v) - - obs_eqs = [[h_gyro_sym, ObservationKind.PHONE_GYRO, None], - [h_phone_rot_sym, ObservationKind.NO_ROT, None], - [h_acc_sym, ObservationKind.PHONE_ACCEL, None], - [h_pseudorange_sym, ObservationKind.PSEUDORANGE_GPS, sat_pos_freq_sym], - [h_pseudorange_glonass_sym, ObservationKind.PSEUDORANGE_GLONASS, sat_pos_freq_sym], - [h_pseudorange_rate_sym, ObservationKind.PSEUDORANGE_RATE_GPS, sat_pos_vel_sym], - [h_pseudorange_rate_sym, ObservationKind.PSEUDORANGE_RATE_GLONASS, sat_pos_vel_sym], - [h_relative_motion, ObservationKind.CAMERA_ODO_TRANSLATION, None], - [h_phone_rot_sym, ObservationKind.CAMERA_ODO_ROTATION, None], - [h_acc_stationary_sym, ObservationKind.NO_ACCEL, None]] - - wide_from_device = euler_rotate(*wide_from_device_euler) - # MSCKF configuration - if N > 0: - # experimentally found this is correct value for imx298 with 910 focal length - # this is a variable so it can change with focus, but we disregard that for now - # TODO: this isn't correct for tici - focal_scale = 1.01 - # Add observation functions for orb feature tracks - track_epos_sym = sp.MatrixSymbol('track_epos_sym', 3, 1) - track_x, track_y, track_z = track_epos_sym - h_track_sym = sp.Matrix(np.zeros(((1 + N) * 2, 1))) - h_track_wide_cam_sym = sp.Matrix(np.zeros(((1 + N) * 2, 1))) - - track_pos_sym = sp.Matrix([track_x - x, track_y - y, track_z - z]) - track_pos_rot_sym = quat_rot.T * track_pos_sym - track_pos_rot_wide_cam_sym = wide_from_device * track_pos_rot_sym - h_track_sym[-2:, :] = sp.Matrix([focal_scale * (track_pos_rot_sym[1] / track_pos_rot_sym[0]), - focal_scale * (track_pos_rot_sym[2] / track_pos_rot_sym[0])]) - h_track_wide_cam_sym[-2:, :] = sp.Matrix([focal_scale * (track_pos_rot_wide_cam_sym[1] / track_pos_rot_wide_cam_sym[0]), - focal_scale * (track_pos_rot_wide_cam_sym[2] / track_pos_rot_wide_cam_sym[0])]) - - h_msckf_test_sym = sp.Matrix(np.zeros(((1 + N) * 3, 1))) - h_msckf_test_sym[-3:, :] = track_pos_sym - - for n in range(N): - idx = dim_main + n * dim_augment - # err_idx = dim_main_err + n * dim_augment_err # FIXME: Why is this not used? - x, y, z = state[idx:idx + 3] - q = state[idx + 3:idx + 7] - quat_rot = quat_rotate(*q) - track_pos_sym = sp.Matrix([track_x - x, track_y - y, track_z - z]) - track_pos_rot_sym = quat_rot.T * track_pos_sym - track_pos_rot_wide_cam_sym = wide_from_device * track_pos_rot_sym - h_track_sym[n * 2:n * 2 + 2, :] = sp.Matrix([focal_scale * (track_pos_rot_sym[1] / track_pos_rot_sym[0]), - focal_scale * (track_pos_rot_sym[2] / track_pos_rot_sym[0])]) - h_track_wide_cam_sym[n * 2: n * 2 + 2, :] = sp.Matrix([focal_scale * (track_pos_rot_wide_cam_sym[1] / track_pos_rot_wide_cam_sym[0]), - focal_scale * (track_pos_rot_wide_cam_sym[2] / track_pos_rot_wide_cam_sym[0])]) - h_msckf_test_sym[n * 3:n * 3 + 3, :] = track_pos_sym - - obs_eqs.append([h_msckf_test_sym, ObservationKind.MSCKF_TEST, track_epos_sym]) - obs_eqs.append([h_track_sym, ObservationKind.ORB_FEATURES, track_epos_sym]) - obs_eqs.append([h_track_wide_cam_sym, ObservationKind.ORB_FEATURES_WIDE, track_epos_sym]) - obs_eqs.append([h_track_sym, ObservationKind.FEATURE_TRACK_TEST, track_epos_sym]) - msckf_params = [dim_main, dim_augment, dim_main_err, dim_augment_err, N, - [ObservationKind.MSCKF_TEST, ObservationKind.ORB_FEATURES, ObservationKind.ORB_FEATURES_WIDE]] - else: - msckf_params = None - gen_code(generated_dir, name, f_sym, dt, state_sym, obs_eqs, dim_state, dim_state_err, eskf_params, msckf_params, maha_test_kinds) - - def __init__(self, generated_dir, N=4, erratic_clock=False): - name = f"{self.name}_{N}" - - - # process noise - q_clock_error = 100.0 if erratic_clock else 0.1 - q_clock_error_rate = 10 if erratic_clock else 0.0 - self.Q = np.diag([0.03**2, 0.03**2, 0.03**2, - 0.0**2, 0.0**2, 0.0**2, - 0.0**2, 0.0**2, 0.0**2, - 0.1**2, 0.1**2, 0.1**2, - (q_clock_error)**2, (q_clock_error_rate)**2, - (0.005 / 100)**2, (0.005 / 100)**2, (0.005 / 100)**2, - (0.02 / 100)**2, - 3**2, 3**2, 3**2, - 0.001**2, - (0.05 / 60)**2, (0.05 / 60)**2, (0.05 / 60)**2, - (.1)**2, (.01)**2, - 0.005**2, - (0.02 / 100)**2, - (0.005 / 100)**2, (0.005 / 100)**2, (0.005 / 100)**2, - (0.05 / 60)**2, (0.05 / 60)**2, (0.05 / 60)**2]) - - - self.obs_noise = {ObservationKind.ODOMETRIC_SPEED: np.atleast_2d(0.2**2), - ObservationKind.PHONE_GYRO: np.diag([0.025**2, 0.025**2, 0.025**2]), - ObservationKind.PHONE_ACCEL: np.diag([.5**2, .5**2, .5**2]), - ObservationKind.CAMERA_ODO_ROTATION: np.diag([0.05**2, 0.05**2, 0.05**2]), - ObservationKind.IMU_FRAME: np.diag([0.05**2, 0.05**2, 0.05**2]), - ObservationKind.NO_ROT: np.diag([0.0025**2, 0.0025**2, 0.0025**2]), - ObservationKind.ECEF_POS: np.diag([5**2, 5**2, 5**2]), - ObservationKind.NO_ACCEL: np.diag([0.0025**2, 0.0025**2, 0.0025**2])} - - # MSCKF stuff - self.N = N - self.dim_main = LocKalman.x_initial.shape[0] - self.dim_main_err = LocKalman.P_initial.shape[0] - self.dim_state = self.dim_main + self.dim_augment * self.N - self.dim_state_err = self.dim_main_err + self.dim_augment_err * self.N - - if self.N > 0: - x_initial, P_initial, Q = self.pad_augmented(self.x_initial, self.P_initial, self.Q) # lgtm[py/mismatched-multiple-assignment] - self.computer = LstSqComputer(generated_dir, N) - - self.quaternion_idxs = [3, ] + [(self.dim_main + i * self.dim_augment + 3)for i in range(self.N)] - - # init filter - self.filter = EKF_sym(generated_dir, name, Q, x_initial, P_initial, self.dim_main, self.dim_main_err, - N, self.dim_augment, self.dim_augment_err, self.maha_test_kinds, self.quaternion_idxs) - - @property - def x(self): - return self.filter.state() - - @property - def t(self): - return self.filter.get_filter_time() - - @property - def P(self): - return self.filter.covs() - - def predict(self, t): - return self.filter.predict(t) - - def rts_smooth(self, estimates): - return self.filter.rts_smooth(estimates, norm_quats=True) - - def pad_augmented(self, x, P, Q=None): - if x.shape[0] == self.dim_main and self.N > 0: - x = np.pad(x, (0, self.N * self.dim_augment), mode='constant') - x[self.dim_main + 3::7] = 1 - if P.shape[0] == self.dim_main_err and self.N > 0: - P = np.pad(P, [(0, self.N * self.dim_augment_err), (0, self.N * self.dim_augment_err)], mode='constant') - P[self.dim_main_err:, self.dim_main_err:] = 10e20 * np.eye(self.dim_augment_err * self.N) - if Q is None: - return x, P - else: - Q = np.pad(Q, [(0, self.N * self.dim_augment_err), (0, self.N * self.dim_augment_err)], mode='constant') - return x, P, Q - - def init_state(self, state, covs_diag=None, covs=None, filter_time=None): - if covs_diag is not None: - P = np.diag(covs_diag) - elif covs is not None: - P = covs - else: - P = self.filter.covs() - state, P = self.pad_augmented(state, P) - self.filter.init_state(state, P, filter_time) - - def predict_and_observe(self, t, kind, data): - if len(data) > 0: - data = np.atleast_2d(data) - if kind == ObservationKind.CAMERA_ODO_TRANSLATION: - r = self.predict_and_update_odo_trans(data, t, kind) - elif kind == ObservationKind.CAMERA_ODO_ROTATION: - r = self.predict_and_update_odo_rot(data, t, kind) - elif kind == ObservationKind.PSEUDORANGE_GPS or kind == ObservationKind.PSEUDORANGE_GLONASS: - r = self.predict_and_update_pseudorange(data, t, kind) - elif kind == ObservationKind.PSEUDORANGE_RATE_GPS or kind == ObservationKind.PSEUDORANGE_RATE_GLONASS: - r = self.predict_and_update_pseudorange_rate(data, t, kind) - elif kind == ObservationKind.ORB_FEATURES or kind == ObservationKind.ORB_FEATURES_WIDE: - r = self.predict_and_update_orb_features(data, t, kind) - elif kind == ObservationKind.MSCKF_TEST: - r = self.predict_and_update_msckf_test(data, t, kind) - else: - r = self.filter.predict_and_update_batch(t, kind, data, self.get_R(kind, len(data))) - # Normalize quats - quat_norm = np.linalg.norm(self.filter.state()[3:7]) - # Should not continue if the quats behave this weirdly - if not 0.1 < quat_norm < 10: - raise RuntimeError("Sir! The filter's gone all wobbly!") - return r - - def get_R(self, kind, n): - obs_noise = self.obs_noise[kind] - dim = obs_noise.shape[0] - R = np.zeros((n, dim, dim)) - for i in range(n): - R[i, :, :] = obs_noise - return R - - def predict_and_update_pseudorange(self, meas, t, kind): - R = np.zeros((len(meas), 1, 1)) - sat_pos_freq = np.zeros((len(meas), 4)) - z = np.zeros((len(meas), 1)) - for i, m in enumerate(meas): - z_i, R_i, sat_pos_freq_i = parse_pr(m) - sat_pos_freq[i, :] = sat_pos_freq_i - z[i, :] = z_i - R[i, :, :] = R_i - return self.filter.predict_and_update_batch(t, kind, z, R, sat_pos_freq) - - def predict_and_update_pseudorange_rate(self, meas, t, kind): - R = np.zeros((len(meas), 1, 1)) - z = np.zeros((len(meas), 1)) - sat_pos_vel = np.zeros((len(meas), 6)) - for i, m in enumerate(meas): - z_i, R_i, sat_pos_vel_i = parse_prr(m) - sat_pos_vel[i] = sat_pos_vel_i - R[i, :, :] = R_i - z[i, :] = z_i - return self.filter.predict_and_update_batch(t, kind, z, R, sat_pos_vel) - - def predict_and_update_odo_trans(self, trans, t, kind): - z = trans[:, :3] - R = np.zeros((len(trans), 3, 3)) - for i, _ in enumerate(z): - R[i, :, :] = np.diag(trans[i, 3:]**2) - return self.filter.predict_and_update_batch(t, kind, z, R) - - def predict_and_update_odo_rot(self, rot, t, kind): - z = rot[:, :3] - R = np.zeros((len(rot), 3, 3)) - for i, _ in enumerate(z): - R[i, :, :] = np.diag(rot[i, 3:]**2) - return self.filter.predict_and_update_batch(t, kind, z, R) - - def predict_and_update_orb_features(self, tracks, t, kind): - k = 2 * (self.N + 1) - R = np.zeros((len(tracks), k, k)) - z = np.zeros((len(tracks), k)) - ecef_pos = np.zeros((len(tracks), 3)) - ecef_pos[:] = np.nan - poses = self.x[self.dim_main:].reshape((-1, 7)) - times = tracks.reshape((len(tracks), self.N + 1, 4))[:, :, 0] - if kind==ObservationKind.ORB_FEATURES: - pt_std = 0.005 - else: - pt_std = 0.02 - if times.any(): - assert np.allclose(times[0, :-1], self.filter.get_augment_times(), atol=1e-7, rtol=0.0) - for i, track in enumerate(tracks): - img_positions = track.reshape((self.N + 1, 4))[:, 2:] - - # TODO not perfect as last pose not used - # img_positions = unroll_shutter(img_positions, poses, self.filter.state()[7:10], self.filter.state()[10:13], ecef_pos[i]) - - ecef_pos[i] = self.computer.compute_pos(poses, img_positions[:-1]) - z[i] = img_positions.flatten() - R[i, :, :] = np.diag([pt_std**2] * (k)) - - good_idxs = np.all(np.isfinite(ecef_pos), axis=1) - - # This code relies on wide and narrow orb features being captured at the same time, - # and wide features to be processed first. - ret = self.filter.predict_and_update_batch(t, kind, z[good_idxs], R[good_idxs], ecef_pos[good_idxs], - augment=kind==ObservationKind.ORB_FEATURES) - if ret is None: - return - - # have to do some weird stuff here to keep - # to have the observations input from mesh3d - # consistent with the outputs of the filter - # Probably should be replaced, not sure how. - y_full = np.zeros((z.shape[0], z.shape[1] - 3)) - if sum(good_idxs) > 0: - y_full[good_idxs] = np.array(ret[6]) - ret = ret[:6] + (y_full, z, ecef_pos) - return ret - - def predict_and_update_msckf_test(self, test_data, t, kind): - assert self.N > 0 - z = test_data - R = np.zeros((len(test_data), len(z[0]), len(z[0]))) - ecef_pos = [self.x[:3]] - for i, _ in enumerate(z): - R[i, :, :] = np.diag([0.1**2] * len(z[0])) - ret = self.filter.predict_and_update_batch(t, kind, z, R, ecef_pos) - self.filter.augment() - return ret - - def maha_test_pseudorange(self, x, P, meas, kind, maha_thresh=.3): - bools = [] - for m in meas: - z, R, sat_pos_freq = parse_pr(m) - bools.append(self.filter.maha_test(x, P, kind, z, R, extra_args=sat_pos_freq, maha_thresh=maha_thresh)) - return np.array(bools) - - def maha_test_pseudorange_rate(self, x, P, meas, kind, maha_thresh=.999): - bools = [] - for m in meas: - z, R, sat_pos_vel = parse_prr(m) - bools.append(self.filter.maha_test(x, P, kind, z, R, extra_args=sat_pos_vel, maha_thresh=maha_thresh)) - return np.array(bools) - - -if __name__ == "__main__": - N = int(sys.argv[1].split("_")[-1]) - generated_dir = sys.argv[2] - LocKalman.generate_code(generated_dir, N=N) diff --git a/selfdrive/locationd/paramsd.py b/selfdrive/locationd/paramsd.py index a183c09109..4bc416ee88 100755 --- a/selfdrive/locationd/paramsd.py +++ b/selfdrive/locationd/paramsd.py @@ -7,13 +7,13 @@ import numpy as np import cereal.messaging as messaging from cereal import car from cereal import log -from openpilot.common.params import Params, put_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import config_realtime_process, DT_MDL from openpilot.common.numpy_fast import clip from openpilot.selfdrive.car.chrysler.values import ChryslerFlagsSP from openpilot.selfdrive.locationd.models.car_kf import CarKalman, ObservationKind, States from openpilot.selfdrive.locationd.models.constants import GENERATED_DIR -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog MAX_ANGLE_OFFSET_DELTA = 20 * DT_MDL # Max 20 deg/s @@ -24,6 +24,8 @@ ROLL_STD_MAX = math.radians(1.5) LATERAL_ACC_SENSOR_THRESHOLD = 4.0 OFFSET_MAX = 10.0 OFFSET_LOWERED_MAX = 8.0 +MIN_ACTIVE_SPEED = 1.0 +LOW_ACTIVE_SPEED = 10.0 class ParamsLearner: @@ -96,7 +98,7 @@ class ParamsLearner: self.speed = msg.vEgo in_linear_region = abs(self.steering_angle) < 45 - self.active = self.speed > 1 and in_linear_region + self.active = self.speed > MIN_ACTIVE_SPEED and in_linear_region if self.active: self.kf.predict_and_observe(t, ObservationKind.STEER_ANGLE, np.array([[math.radians(msg.steeringAngleDeg)]])) @@ -116,16 +118,14 @@ def check_valid_with_hysteresis(current_valid: bool, val: float, threshold: floa return current_valid -def main(sm=None, pm=None): +def main(): config_realtime_process([0, 1, 2, 3], 5) DEBUG = bool(int(os.getenv("DEBUG", "0"))) REPLAY = bool(int(os.getenv("REPLAY", "0"))) - if sm is None: - sm = messaging.SubMaster(['liveLocationKalman', 'carState'], poll=['liveLocationKalman']) - if pm is None: - pm = messaging.PubMaster(['liveParameters']) + pm = messaging.PubMaster(['liveParameters']) + sm = messaging.SubMaster(['liveLocationKalman', 'carState'], poll=['liveLocationKalman']) params_reader = Params() # wait for stats about the car to come in from controls @@ -205,8 +205,12 @@ def main(sm=None, pm=None): angle_offset - MAX_ANGLE_OFFSET_DELTA, angle_offset + MAX_ANGLE_OFFSET_DELTA) roll = clip(float(x[States.ROAD_ROLL].item()), roll - ROLL_MAX_DELTA, roll + ROLL_MAX_DELTA) roll_std = float(P[States.ROAD_ROLL].item()) - # Account for the opposite signs of the yaw rates - sensors_valid = bool(abs(learner.speed * (x[States.YAW_RATE].item() + learner.yaw_rate)) < LATERAL_ACC_SENSOR_THRESHOLD) + if learner.active and learner.speed > LOW_ACTIVE_SPEED: + # Account for the opposite signs of the yaw rates + # At low speeds, bumping into a curb can cause the yaw rate to be very high + sensors_valid = bool(abs(learner.speed * (x[States.YAW_RATE].item() + learner.yaw_rate)) < LATERAL_ACC_SENSOR_THRESHOLD) + else: + sensors_valid = True avg_offset_valid = check_valid_with_hysteresis(avg_offset_valid, angle_offset_average, OFFSET_MAX, OFFSET_LOWERED_MAX) total_offset_valid = check_valid_with_hysteresis(total_offset_valid, angle_offset, OFFSET_MAX, OFFSET_LOWERED_MAX) roll_valid = check_valid_with_hysteresis(roll_valid, roll, ROLL_MAX, ROLL_LOWERED_MAX) @@ -229,7 +233,8 @@ def main(sm=None, pm=None): 0.2 <= liveParameters.stiffnessFactor <= 5.0, min_sr <= liveParameters.steerRatio <= max_sr, )) - if CP.carName == "chrysler" and CP.spFlags & ChryslerFlagsSP.SP_RAM_HD_PARAMSD_IGNORE: + if (CP.carName == "chrysler" and CP.spFlags & ChryslerFlagsSP.SP_RAM_HD_PARAMSD_IGNORE) or \ + (CP.carName == "subaru" and CP.lateralTuning.which() == 'torque'): liveParameters.valid = True liveParameters.steerRatioStd = float(P[States.STEER_RATIO].item()) liveParameters.stiffnessFactorStd = float(P[States.STIFFNESS].item()) @@ -250,7 +255,7 @@ def main(sm=None, pm=None): 'stiffnessFactor': liveParameters.stiffnessFactor, 'angleOffsetAverageDeg': liveParameters.angleOffsetAverageDeg, } - put_nonblocking("LiveParameters", json.dumps(params)) + params_reader.put_nonblocking("LiveParameters", json.dumps(params)) pm.send('liveParameters', msg) diff --git a/selfdrive/locationd/test/test_calibrationd.py b/selfdrive/locationd/test/test_calibrationd.py index a5eedaf99a..e2db094397 100755 --- a/selfdrive/locationd/test/test_calibrationd.py +++ b/selfdrive/locationd/test/test_calibrationd.py @@ -8,9 +8,29 @@ import cereal.messaging as messaging from cereal import log from openpilot.common.params import Params from openpilot.selfdrive.locationd.calibrationd import Calibrator, INPUTS_NEEDED, INPUTS_WANTED, BLOCK_SIZE, MIN_SPEED_FILTER, \ - MAX_YAW_RATE_FILTER, SMOOTH_CYCLES, HEIGHT_INIT + MAX_YAW_RATE_FILTER, SMOOTH_CYCLES, HEIGHT_INIT, MAX_ALLOWED_PITCH_SPREAD, MAX_ALLOWED_YAW_SPREAD +def process_messages(c, cam_odo_calib, cycles, + cam_odo_speed=MIN_SPEED_FILTER + 1, + carstate_speed=MIN_SPEED_FILTER + 1, + cam_odo_yr=0.0, + cam_odo_speed_std=1e-3, + cam_odo_height_std=1e-3): + old_rpy_weight_prev = 0.0 + for _ in range(cycles): + assert (old_rpy_weight_prev - c.old_rpy_weight < 1/SMOOTH_CYCLES + 1e-3) + old_rpy_weight_prev = c.old_rpy_weight + c.handle_v_ego(carstate_speed) + c.handle_cam_odom([cam_odo_speed, + np.sin(cam_odo_calib[2]) * cam_odo_speed, + -np.sin(cam_odo_calib[1]) * cam_odo_speed], + [0.0, 0.0, cam_odo_yr], + [0.0, 0.0, 0.0], + [cam_odo_speed_std, cam_odo_speed_std, cam_odo_speed_std], + [0.0, 0.0, HEIGHT_INIT.item()], + [cam_odo_height_std, cam_odo_height_std, cam_odo_height_std]) + class TestCalibrationd(unittest.TestCase): def test_read_saved_params(self): @@ -28,14 +48,7 @@ class TestCalibrationd(unittest.TestCase): def test_calibration_basics(self): c = Calibrator(param_put=False) - for _ in range(BLOCK_SIZE * INPUTS_WANTED): - c.handle_v_ego(MIN_SPEED_FILTER + 1) - c.handle_cam_odom([MIN_SPEED_FILTER + 1, 0.0, 0.0], - [0.0, 0.0, 0.0], - [0.0, 0.0, 0.0], - [1e-3, 1e-3, 1e-3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e-3, 1e-3, 1e-3]) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_WANTED) self.assertEqual(c.valid_blocks, INPUTS_WANTED) np.testing.assert_allclose(c.rpy, np.zeros(3)) np.testing.assert_allclose(c.height, HEIGHT_INIT) @@ -44,22 +57,8 @@ class TestCalibrationd(unittest.TestCase): def test_calibration_low_speed_reject(self): c = Calibrator(param_put=False) - for _ in range(BLOCK_SIZE * INPUTS_WANTED): - c.handle_v_ego(MIN_SPEED_FILTER - 1) - c.handle_cam_odom([MIN_SPEED_FILTER + 1, 0.0, 0.0], - [0.0, 0.0, 0.0], - [0.0, 0.0, 0.0], - [1e-3, 1e-3, 1e-3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e-3, 1e-3, 1e-3]) - for _ in range(BLOCK_SIZE * INPUTS_WANTED): - c.handle_v_ego(MIN_SPEED_FILTER + 1) - c.handle_cam_odom([MIN_SPEED_FILTER - 1, 0.0, 0.0], - [0.0, 0.0, 0.0], - [0.0, 0.0, 0.0], - [1e-3, 1e-3, 1e-3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e-3, 1e-3, 1e-3]) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_WANTED, cam_odo_speed=MIN_SPEED_FILTER - 1) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_WANTED, carstate_speed=MIN_SPEED_FILTER - 1) self.assertEqual(c.valid_blocks, 0) np.testing.assert_allclose(c.rpy, np.zeros(3)) np.testing.assert_allclose(c.height, HEIGHT_INIT) @@ -67,14 +66,7 @@ class TestCalibrationd(unittest.TestCase): def test_calibration_yaw_rate_reject(self): c = Calibrator(param_put=False) - for _ in range(BLOCK_SIZE * INPUTS_WANTED): - c.handle_v_ego(MIN_SPEED_FILTER + 1) - c.handle_cam_odom([MIN_SPEED_FILTER + 1, 0.0, 0.0], - [0.0, 0.0, MAX_YAW_RATE_FILTER ], - [0.0, 0.0, 0.0], - [1e-3, 1e-3, 1e-3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e-3, 1e-3, 1e-3]) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_WANTED, cam_odo_yr=MAX_YAW_RATE_FILTER) self.assertEqual(c.valid_blocks, 0) np.testing.assert_allclose(c.rpy, np.zeros(3)) np.testing.assert_allclose(c.height, HEIGHT_INIT) @@ -82,58 +74,44 @@ class TestCalibrationd(unittest.TestCase): def test_calibration_speed_std_reject(self): c = Calibrator(param_put=False) - for _ in range(BLOCK_SIZE * INPUTS_WANTED): - c.handle_v_ego(MIN_SPEED_FILTER + 1) - c.handle_cam_odom([MIN_SPEED_FILTER + 1, 0.0, 0.0], - [0.0, 0.0, 0.0], - [0.0, 0.0, 0.0], - [1e3, 1e3, 1e3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e-3, 1e-3, 1e-3]) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_WANTED, cam_odo_speed_std=1e3) self.assertEqual(c.valid_blocks, INPUTS_NEEDED) np.testing.assert_allclose(c.rpy, np.zeros(3)) def test_calibration_speed_std_height_reject(self): c = Calibrator(param_put=False) - for _ in range(BLOCK_SIZE * INPUTS_WANTED): - c.handle_v_ego(MIN_SPEED_FILTER + 1) - c.handle_cam_odom([MIN_SPEED_FILTER + 1, 0.0, 0.0], - [0.0, 0.0, 0.0], - [0.0, 0.0, 0.0], - [1e-3, 1e-3, 1e-3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e3, 1e3, 1e3]) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_WANTED, cam_odo_height_std=1e3) self.assertEqual(c.valid_blocks, INPUTS_NEEDED) np.testing.assert_allclose(c.rpy, np.zeros(3)) def test_calibration_auto_reset(self): c = Calibrator(param_put=False) - for _ in range(BLOCK_SIZE * INPUTS_WANTED): - c.handle_v_ego(MIN_SPEED_FILTER + 1) - c.handle_cam_odom([MIN_SPEED_FILTER + 1, 0.0, 0.0], - [0.0, 0.0, 0.0], - [0.0, 0.0, 0.0], - [1e-3, 1e-3, 1e-3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e-3, 1e-3, 1e-3]) - self.assertEqual(c.valid_blocks, INPUTS_WANTED) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_NEEDED) + self.assertEqual(c.valid_blocks, INPUTS_NEEDED) + np.testing.assert_allclose(c.rpy, [0.0, 0.0, 0.0], atol=1e-3) + process_messages(c, [0.0, MAX_ALLOWED_PITCH_SPREAD*0.9, MAX_ALLOWED_YAW_SPREAD*0.9], BLOCK_SIZE + 10) + self.assertEqual(c.valid_blocks, INPUTS_NEEDED + 1) + self.assertEqual(c.cal_status, log.LiveCalibrationData.Status.calibrated) + + c = Calibrator(param_put=False) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_NEEDED) + self.assertEqual(c.valid_blocks, INPUTS_NEEDED) np.testing.assert_allclose(c.rpy, [0.0, 0.0, 0.0]) - old_rpy_weight_prev = 0.0 - for _ in range(BLOCK_SIZE + 10): - self.assertLess(old_rpy_weight_prev - c.old_rpy_weight, 1/SMOOTH_CYCLES + 1e-3) - old_rpy_weight_prev = c.old_rpy_weight - c.handle_v_ego(MIN_SPEED_FILTER + 1) - c.handle_cam_odom([MIN_SPEED_FILTER + 1, -0.05 * MIN_SPEED_FILTER, 0.0], - [0.0, 0.0, 0.0], - [0.0, 0.0, 0.0], - [1e-3, 1e-3, 1e-3], - [0.0, 0.0, HEIGHT_INIT.item()], - [1e-3, 1e-3, 1e-3]) + process_messages(c, [0.0, MAX_ALLOWED_PITCH_SPREAD*1.1, 0.0], BLOCK_SIZE + 10) self.assertEqual(c.valid_blocks, 1) self.assertEqual(c.cal_status, log.LiveCalibrationData.Status.recalibrating) - np.testing.assert_allclose(c.rpy, [0.0, 0.0, -0.05], atol=1e-2) + np.testing.assert_allclose(c.rpy, [0.0, MAX_ALLOWED_PITCH_SPREAD*1.1, 0.0], atol=1e-2) + + c = Calibrator(param_put=False) + process_messages(c, [0.0, 0.0, 0.0], BLOCK_SIZE * INPUTS_NEEDED) + self.assertEqual(c.valid_blocks, INPUTS_NEEDED) + np.testing.assert_allclose(c.rpy, [0.0, 0.0, 0.0]) + process_messages(c, [0.0, 0.0, MAX_ALLOWED_YAW_SPREAD*1.1], BLOCK_SIZE + 10) + self.assertEqual(c.valid_blocks, 1) + self.assertEqual(c.cal_status, log.LiveCalibrationData.Status.recalibrating) + np.testing.assert_allclose(c.rpy, [0.0, 0.0, MAX_ALLOWED_YAW_SPREAD*1.1], atol=1e-2) if __name__ == "__main__": unittest.main() diff --git a/selfdrive/locationd/test/test_laikad.py b/selfdrive/locationd/test/test_laikad.py deleted file mode 100755 index 2c4a8a406d..0000000000 --- a/selfdrive/locationd/test/test_laikad.py +++ /dev/null @@ -1,320 +0,0 @@ -#!/usr/bin/env python3 -import os -import time -import unittest -from cereal import log -from openpilot.common.params import Params -from datetime import datetime -from unittest import mock - - -from laika.constants import SECS_IN_DAY -from laika.downloader import DownloadFailed -from laika.ephemeris import EphemerisType -from laika.gps_time import GPSTime -from laika.helpers import ConstellationId -from laika.raw_gnss import GNSSMeasurement, read_raw_ublox, read_raw_qcom -from openpilot.selfdrive.locationd.laikad import EPHEMERIS_CACHE, Laikad -from openpilot.selfdrive.test.openpilotci import get_url -from openpilot.tools.lib.logreader import LogReader - -from openpilot.selfdrive.test.process_replay.process_replay import get_process_config, replay_process -from openpilot.selfdrive.test.helpers import SKIP_ENV_VAR - -GPS_TIME_PREDICTION_ORBITS_RUSSIAN_SRC = GPSTime.from_datetime(datetime(2022, month=1, day=29, hour=12)) -UBLOX_TEST_ROUTE = "4cf7a6ad03080c90|2021-09-29--13-46-36" -QCOM_TEST_ROUTE = "616dc83ca1f7f11e|2023-07-11--10-52-31" - - -def get_log_ublox(): - logs = LogReader(get_url(UBLOX_TEST_ROUTE, 0)) - - ublox_cfg = get_process_config("ubloxd") - all_logs = replay_process(ublox_cfg, logs) - low_gnss = [] - for m in all_logs: - if m.which() != "ubloxGnss" or m.ubloxGnss.which() != 'measurementReport': - continue - - MAX_MEAS = 7 - if m.ubloxGnss.measurementReport.numMeas > MAX_MEAS: - mb = log.Event.new_message(ubloxGnss=m.ubloxGnss.to_dict()) - mb.logMonoTime = m.logMonoTime - mb.ubloxGnss.measurementReport.numMeas = MAX_MEAS - mb.ubloxGnss.measurementReport.measurements = list(m.ubloxGnss.measurementReport.measurements)[:MAX_MEAS] - mb.ubloxGnss.measurementReport.measurements[0].pseudorange += 1000 - low_gnss.append(mb.as_reader()) - else: - low_gnss.append(m) - return all_logs, low_gnss - - -def get_log_qcom(): - logs = LogReader(get_url(QCOM_TEST_ROUTE, 0)) - all_logs = [m for m in logs if m.which() == 'qcomGnss'] - return all_logs - - -def verify_messages(lr, laikad, return_one_success=False): - good_msgs = [] - for m in lr: - if m.which() == 'ubloxGnss': - gnss_msg = m.ubloxGnss - elif m.which() == 'qcomGnss': - gnss_msg = m.qcomGnss - else: - continue - msg = laikad.process_gnss_msg(gnss_msg, m.logMonoTime, block=True) - if msg is not None and len(msg.gnssMeasurements.correctedMeasurements) > 0: - good_msgs.append(msg) - if return_one_success: - return msg - return good_msgs - - -def get_first_gps_time(logs): - for m in logs: - if m.which() == 'ubloxGnss': - if m.ubloxGnss.which == 'measurementReport': - new_meas = read_raw_ublox(m.ubloxGnss.measurementReport) - if len(new_meas) > 0: - return new_meas[0].recv_time - elif m.which() == "qcomGnss": - if m.qcomGnss.which == 'measurementReport': - new_meas = read_raw_qcom(m.qcomGnss.measurementReport) - if len(new_meas) > 0: - return new_meas[0].recv_time - - -def get_measurement_mock(gpstime, sat_ephemeris): - meas = GNSSMeasurement(ConstellationId.GPS, 1, gpstime.week, gpstime.tow, {'C1C': 0., 'D1C': 0.}, {'C1C': 0., 'D1C': 0.}) - # Fake measurement being processed - meas.observables_final = meas.observables - meas.sat_ephemeris = sat_ephemeris - return meas - - -@unittest.skipIf(SKIP_ENV_VAR in os.environ, f"Laika test skipped since it's long and not currently used. Unset {SKIP_ENV_VAR} to run") -class TestLaikad(unittest.TestCase): - - @classmethod - def setUpClass(cls): - logs, low_gnss = get_log_ublox() - cls.logs = logs - cls.low_gnss = low_gnss - cls.logs_qcom = get_log_qcom() - first_gps_time = get_first_gps_time(logs) - cls.first_gps_time = first_gps_time - - def setUp(self): - Params().remove(EPHEMERIS_CACHE) - - def test_fetch_navs_non_blocking(self): - gpstime = GPSTime.from_datetime(datetime(2021, month=3, day=1)) - laikad = Laikad() - laikad.fetch_navs(gpstime, block=False) - laikad.orbit_fetch_future.result(30) - - # Get results and save orbits to laikad: - laikad.fetch_navs(gpstime, block=False) - ephem = laikad.astro_dog.navs['G01'][0] - self.assertIsNotNone(ephem) - - laikad.fetch_navs(gpstime+2*SECS_IN_DAY, block=False) - laikad.orbit_fetch_future.result(30) - # Get results and save orbits to laikad: - laikad.fetch_navs(gpstime + 2 * SECS_IN_DAY, block=False) - - ephem2 = laikad.astro_dog.navs['G01'][0] - self.assertIsNotNone(ephem) - self.assertNotEqual(ephem, ephem2) - - - def test_fetch_navs_with_wrong_clocks(self): - laikad = Laikad() - - def check_has_navs(): - self.assertGreater(len(laikad.astro_dog.navs), 0) - ephem = laikad.astro_dog.navs['G01'][0] - self.assertIsNotNone(ephem) - real_current_time = GPSTime.from_datetime(datetime(2021, month=3, day=1)) - wrong_future_clock_time = real_current_time + SECS_IN_DAY - - laikad.fetch_navs(wrong_future_clock_time, block=True) - check_has_navs() - self.assertEqual(laikad.last_fetch_navs_t, wrong_future_clock_time) - - # Test fetching orbits with earlier time - assert real_current_time < laikad.last_fetch_navs_t - - laikad.astro_dog.orbits = {} - laikad.fetch_navs(real_current_time, block=True) - check_has_navs() - self.assertEqual(laikad.last_fetch_navs_t, real_current_time) - - def test_laika_online(self): - laikad = Laikad(auto_update=True, valid_ephem_types=EphemerisType.ULTRA_RAPID_ORBIT) - correct_msgs = verify_messages(self.logs, laikad) - - correct_msgs_expected = 560 - self.assertEqual(correct_msgs_expected, len(correct_msgs)) - self.assertEqual(correct_msgs_expected, len([m for m in correct_msgs if m.gnssMeasurements.positionECEF.valid])) - - def test_kf_becomes_valid(self): - laikad = Laikad(auto_update=False) - m = self.logs[0] - self.assertFalse(all(laikad.kf_valid(m.logMonoTime * 1e-9))) - kf_valid = False - for m in self.logs: - if m.which() != 'ubloxGnss': - continue - - laikad.process_gnss_msg(m.ubloxGnss, m.logMonoTime, block=True) - kf_valid = all(laikad.kf_valid(m.logMonoTime * 1e-9)) - if kf_valid: - break - self.assertTrue(kf_valid) - - def test_laika_online_nav_only(self): - for use_qcom, logs in zip([True, False], [self.logs_qcom, self.logs], strict=True): - laikad = Laikad(auto_update=True, valid_ephem_types=EphemerisType.NAV, use_qcom=use_qcom) - # Disable fetch_orbits to test NAV only - correct_msgs = verify_messages(logs, laikad) - correct_msgs_expected = 55 if use_qcom else 560 - valid_fix_expected = 55 if use_qcom else 560 - - self.assertEqual(correct_msgs_expected, len(correct_msgs)) - self.assertEqual(valid_fix_expected, len([m for m in correct_msgs if m.gnssMeasurements.positionECEF.valid])) - - @mock.patch('laika.downloader.download_and_cache_file') - def test_laika_offline(self, downloader_mock): - downloader_mock.side_effect = DownloadFailed("Mock download failed") - laikad = Laikad(auto_update=False) - laikad.fetch_navs(GPS_TIME_PREDICTION_ORBITS_RUSSIAN_SRC, block=True) - - @mock.patch('laika.downloader.download_and_cache_file') - def test_download_failed_russian_source(self, downloader_mock): - downloader_mock.side_effect = DownloadFailed - laikad = Laikad(auto_update=False) - correct_msgs = verify_messages(self.logs, laikad) - expected_msgs = 376 - self.assertEqual(expected_msgs, len(correct_msgs)) - self.assertEqual(expected_msgs, len([m for m in correct_msgs if m.gnssMeasurements.positionECEF.valid])) - - def test_laika_get_orbits(self): - laikad = Laikad(auto_update=False) - # Pretend process has loaded the orbits on startup by using the time of the first gps message. - laikad.fetch_navs(self.first_gps_time, block=True) - self.dict_has_values(laikad.astro_dog.navs) - - @unittest.skip("Use to debug live data") - def test_laika_get_navs_now(self): - laikad = Laikad(auto_update=False) - laikad.fetch_navs(GPSTime.from_datetime(datetime.utcnow()), block=True) - prn = "G01" - self.assertGreater(len(laikad.astro_dog.navs[prn]), 0) - prn = "R01" - self.assertGreater(len(laikad.astro_dog.navs[prn]), 0) - - def test_get_navs_in_process(self): - for auto_fetch_navs in [True, False]: - for use_qcom, logs in zip([True, False], [self.logs_qcom, self.logs], strict=True): - laikad = Laikad(auto_update=False, use_qcom=use_qcom, auto_fetch_navs=auto_fetch_navs) - has_navs = False - has_fix = False - seen_chip_eph = False - seen_internet_eph = False - - for m in logs: - if m.which() != 'ubloxGnss' and m.which() != 'qcomGnss': - continue - - gnss_msg = m.qcomGnss if use_qcom else m.ubloxGnss - out_msg = laikad.process_gnss_msg(gnss_msg, m.logMonoTime, block=False) - if laikad.orbit_fetch_future is not None: - laikad.orbit_fetch_future.result() - vals = laikad.astro_dog.navs.values() - has_navs = len(vals) > 0 and max([len(v) for v in vals]) > 0 - vals = laikad.astro_dog.qcom_polys.values() - has_polys = len(vals) > 0 and max([len(v) for v in vals]) > 0 - has_fix = has_fix or out_msg.gnssMeasurements.positionECEF.valid - if len(out_msg.gnssMeasurements.ephemerisStatuses): - seen_chip_eph = seen_chip_eph or any(x.source == 'gnssChip' for x in out_msg.gnssMeasurements.ephemerisStatuses) - seen_internet_eph = seen_internet_eph or any(x.source == 'internet' for x in out_msg.gnssMeasurements.ephemerisStatuses) - - self.assertTrue(has_navs or has_polys) - self.assertTrue(has_fix) - self.assertTrue(seen_chip_eph or auto_fetch_navs) - self.assertTrue(seen_internet_eph or not auto_fetch_navs) - self.assertEqual(len(laikad.astro_dog.navs_fetched_times._ranges), 0) - self.assertEqual(None, laikad.orbit_fetch_future) - - def test_cache(self): - use_qcom = True - for use_qcom, logs in zip([True, False], [self.logs_qcom, self.logs], strict=True): - Params().remove(EPHEMERIS_CACHE) - laikad = Laikad(auto_update=True, save_ephemeris=True, use_qcom=use_qcom) - def wait_for_cache(): - max_time = 2 - while Params().get(EPHEMERIS_CACHE) is None: - time.sleep(0.1) - max_time -= 0.1 - if max_time < 0: - self.fail("Cache has not been written after 2 seconds") - - # Test cache with no ephemeris - laikad.last_report_time = GPSTime(1,0) - laikad.cache_ephemeris() - if Params().get(EPHEMERIS_CACHE) is not None: - self.fail("Cache should not have been written without valid ephem") - - #laikad.astro_dog.get_navs(self.first_gps_time) - msg = verify_messages(logs, laikad, return_one_success=True) - laikad.cache_ephemeris() - wait_for_cache() - - # Check both nav and orbits separate - laikad = Laikad(auto_update=False, valid_ephem_types=EphemerisType.NAV, - save_ephemeris=True, use_qcom=use_qcom, auto_fetch_navs=False) - # Verify navs are loaded from cache - self.dict_has_values(laikad.astro_dog.navs) - # Verify cache is working for only nav by running a segment - msg = verify_messages(logs, laikad, return_one_success=True) - self.assertTrue(len(msg.gnssMeasurements.ephemerisStatuses)) - self.assertTrue(any(x.source=='cache' for x in msg.gnssMeasurements.ephemerisStatuses)) - self.assertIsNotNone(msg) - - #TODO test cache with only orbits - #with patch('selfdrive.locationd.laikad.get_orbit_data', return_value=None) as mock_method: - # # Verify no orbit downloads even if orbit fetch times is reset since the cache has recently been saved and we don't want to download high frequently - # laikad.astro_dog.orbit_fetched_times = TimeRangeHolder() - # laikad.fetch_navs(self.first_gps_time, block=False) - # mock_method.assert_not_called() - - # # Verify cache is working for only orbits by running a segment - # laikad = Laikad(auto_update=False, valid_ephem_types=EphemerisType.ULTRA_RAPID_ORBIT, save_ephemeris=True) - # msg = verify_messages(self.logs, laikad, return_one_success=True) - # self.assertIsNotNone(msg) - # # Verify orbit data is not downloaded - # mock_method.assert_not_called() - #break - - def test_low_gnss_meas(self): - cnt = 0 - laikad = Laikad() - for m in self.low_gnss: - msg = laikad.process_gnss_msg(m.ubloxGnss, m.logMonoTime, block=True) - if msg is None: - continue - gm = msg.gnssMeasurements - if len(gm.correctedMeasurements) != 0 and gm.positionECEF.valid: - cnt += 1 - self.assertEqual(cnt, 560) - - def dict_has_values(self, dct): - self.assertGreater(len(dct), 0) - self.assertGreater(min([len(v) for v in dct.values()]), 0) - - -if __name__ == "__main__": - unittest.main() diff --git a/selfdrive/locationd/test/test_locationd.py b/selfdrive/locationd/test/test_locationd.py index 99047c37f3..78de9216dc 100755 --- a/selfdrive/locationd/test/test_locationd.py +++ b/selfdrive/locationd/test/test_locationd.py @@ -6,7 +6,7 @@ import time import capnp import cereal.messaging as messaging -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.common.params import Params from openpilot.common.transformations.coordinates import ecef2geodetic @@ -60,6 +60,7 @@ class TestLocationdProc(unittest.TestCase): msg.cameraOdometry.trans = [0.0, 0.0, 0.0] msg.cameraOdometry.transStd = [0.0, 0.0, 0.0] msg.logMonoTime = t + msg.valid = True return msg def test_params_gps(self): @@ -74,8 +75,8 @@ class TestLocationdProc(unittest.TestCase): msgs = [] for sec in range(65): for name in self.LLD_MSGS: - for j in range(int(service_list[name].frequency)): - msgs.append(self.get_msg(name, int((sec + j / service_list[name].frequency) * 1e9))) + for j in range(int(SERVICE_LIST[name].frequency)): + msgs.append(self.get_msg(name, int((sec + j / SERVICE_LIST[name].frequency) * 1e9))) for msg in sorted(msgs, key=lambda x: x.logMonoTime): self.pm.send(msg.which(), msg) diff --git a/selfdrive/locationd/test/test_locationd_scenarios.py b/selfdrive/locationd/test/test_locationd_scenarios.py index d2455ef9e0..f48c83ce46 100755 --- a/selfdrive/locationd/test/test_locationd_scenarios.py +++ b/selfdrive/locationd/test/test_locationd_scenarios.py @@ -1,15 +1,14 @@ #!/usr/bin/env python3 +import pytest import unittest import numpy as np from collections import defaultdict from enum import Enum - -from openpilot.selfdrive.test.openpilotci import get_url from openpilot.tools.lib.logreader import LogReader from openpilot.selfdrive.test.process_replay.process_replay import replay_process_with_name -TEST_ROUTE, TEST_SEG_NUM = "ff2bd20623fcaeaa|2023-09-05--10-14-54", 4 +TEST_ROUTE = "ff2bd20623fcaeaa|2023-09-05--10-14-54/4" GPS_MESSAGES = ['gpsLocationExternal', 'gpsLocation'] SELECT_COMPARE_FIELDS = { 'yaw_rate': ['angularVelocityCalibrated', 'value', 2], @@ -97,6 +96,8 @@ def run_scenarios(scenario, logs): return get_select_fields_data(logs), get_select_fields_data(replayed_logs) +@pytest.mark.xdist_group("test_locationd_scenarios") +@pytest.mark.shared_download_cache class TestLocationdScenarios(unittest.TestCase): """ Test locationd with different scenarios. In all these scenarios, we expect the following: @@ -106,7 +107,7 @@ class TestLocationdScenarios(unittest.TestCase): @classmethod def setUpClass(cls): - cls.logs = list(LogReader(get_url(TEST_ROUTE, TEST_SEG_NUM))) + cls.logs = list(LogReader(TEST_ROUTE)) def test_base(self): """ diff --git a/selfdrive/locationd/torqued.py b/selfdrive/locationd/torqued.py index b1eed3f9c6..f4d28a73f4 100755 --- a/selfdrive/locationd/torqued.py +++ b/selfdrive/locationd/torqued.py @@ -1,7 +1,4 @@ #!/usr/bin/env python3 -import os -import sys -import signal import numpy as np from collections import deque, defaultdict @@ -10,8 +7,9 @@ from cereal import car, log from openpilot.common.params import Params from openpilot.common.realtime import config_realtime_process, DT_MDL from openpilot.common.filter_simple import FirstOrderFilter -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_GRAVITY +from openpilot.selfdrive.locationd.helpers import PointBuckets, ParameterEstimator HISTORY = 5 # secs POINTS_PER_BUCKET = 1500 @@ -43,57 +41,15 @@ def slope2rot(slope): return np.array([[cos, -sin], [sin, cos]]) -class NPQueue: - def __init__(self, maxlen, rowsize): - self.maxlen = maxlen - self.arr = np.empty((0, rowsize)) - - def __len__(self): - return len(self.arr) - - def append(self, pt): - if len(self.arr) < self.maxlen: - self.arr = np.append(self.arr, [pt], axis=0) - else: - self.arr[:-1] = self.arr[1:] - self.arr[-1] = pt - - -class PointBuckets: - def __init__(self, x_bounds, min_points, min_points_total): - self.x_bounds = x_bounds - self.buckets = {bounds: NPQueue(maxlen=POINTS_PER_BUCKET, rowsize=3) for bounds in x_bounds} - self.buckets_min_points = dict(zip(x_bounds, min_points, strict=True)) - self.min_points_total = min_points_total - - def bucket_lengths(self): - return [len(v) for v in self.buckets.values()] - - def __len__(self): - return sum(self.bucket_lengths()) - - def is_valid(self): - return all(len(v) >= min_pts for v, min_pts in zip(self.buckets.values(), self.buckets_min_points.values(), strict=True)) \ - and (self.__len__() >= self.min_points_total) - +class TorqueBuckets(PointBuckets): def add_point(self, x, y): for bound_min, bound_max in self.x_bounds: if (x >= bound_min) and (x < bound_max): self.buckets[(bound_min, bound_max)].append([x, 1.0, y]) break - def get_points(self, num_points=None): - points = np.vstack([x.arr for x in self.buckets.values()]) - if num_points is None: - return points - return points[np.random.choice(np.arange(len(points)), min(len(points), num_points), replace=False)] - def load_points(self, points): - for x, y in points: - self.add_point(x, y) - - -class TorqueEstimator: +class TorqueEstimator(ParameterEstimator): def __init__(self, CP, decimated=False): self.hist_len = int(HISTORY / DT_MDL) self.lag = CP.steerActuatorDelay + .2 # from controlsd @@ -114,7 +70,7 @@ class TorqueEstimator: self.offline_friction = 0.0 self.offline_latAccelFactor = 0.0 self.resets = 0.0 - self.use_params = CP.carName in ALLOWED_CARS + self.use_params = CP.carName in ALLOWED_CARS and CP.lateralTuning.which() == 'torque' if CP.lateralTuning.which() == 'torque': self.offline_friction = CP.lateralTuning.torque.friction @@ -145,7 +101,7 @@ class TorqueEstimator: self.max_friction = (1.0 + self.friction_sanity) * self.offline_friction # try to restore cached params - params_cache = params.get("LiveTorqueCarParams") + params_cache = params.get("CarParamsPrevRoute") torque_cache = params.get("LiveTorqueParameters") if params_cache is not None and torque_cache is not None: try: @@ -166,7 +122,6 @@ class TorqueEstimator: cloudlog.info("restored torque params from cache") except Exception: cloudlog.exception("failed to restore cached torque params") - params.remove("LiveTorqueCarParams") params.remove("LiveTorqueParameters") self.filtered_params = {} @@ -184,7 +139,11 @@ class TorqueEstimator: self.resets += 1.0 self.decay = MIN_FILTER_DECAY self.raw_points = defaultdict(lambda: deque(maxlen=self.hist_len)) - self.filtered_points = PointBuckets(x_bounds=STEER_BUCKET_BOUNDS, min_points=self.min_bucket_points, min_points_total=self.min_points_total) + self.filtered_points = TorqueBuckets(x_bounds=STEER_BUCKET_BOUNDS, + min_points=self.min_bucket_points, + min_points_total=self.min_points_total, + points_per_bucket=POINTS_PER_BUCKET, + rowsize=3) def estimate_params(self): points = self.filtered_points.get_points(self.fit_points) @@ -264,33 +223,16 @@ class TorqueEstimator: return msg -def main(sm=None, pm=None): +def main(demo=False): config_realtime_process([0, 1, 2, 3], 5) - if sm is None: - sm = messaging.SubMaster(['carControl', 'carState', 'liveLocationKalman'], poll=['liveLocationKalman']) - - if pm is None: - pm = messaging.PubMaster(['liveTorqueParameters']) + pm = messaging.PubMaster(['liveTorqueParameters']) + sm = messaging.SubMaster(['carControl', 'carState', 'liveLocationKalman'], poll=['liveLocationKalman']) params = Params() with car.CarParams.from_bytes(params.get("CarParams", block=True)) as CP: estimator = TorqueEstimator(CP) - def cache_params(sig, frame): - signal.signal(sig, signal.SIG_DFL) - cloudlog.warning("caching torque params") - - params = Params() - params.put("LiveTorqueCarParams", CP.as_builder().to_bytes()) - - msg = estimator.get_msg(with_points=True) - params.put("LiveTorqueParameters", msg.to_bytes()) - - sys.exit(0) - if "REPLAY" not in os.environ: - signal.signal(signal.SIGINT, cache_params) - while True: sm.update() if sm.all_checks(): @@ -303,6 +245,14 @@ def main(sm=None, pm=None): if sm.frame % 5 == 0: pm.send('liveTorqueParameters', estimator.get_msg(valid=sm.all_checks())) + # Cache points every 60 seconds while onroad + if sm.frame % 240 == 0: + msg = estimator.get_msg(valid=sm.all_checks(), with_points=True) + params.put_nonblocking("LiveTorqueParameters", msg.to_bytes()) if __name__ == "__main__": - main() + import argparse + parser = argparse.ArgumentParser(description='Process the --demo argument.') + parser.add_argument('--demo', action='store_true', help='A boolean for demo mode.') + args = parser.parse_args() + main(demo=args.demo) diff --git a/selfdrive/manager/build.py b/selfdrive/manager/build.py index be37b3e7e4..f2758cf32b 100755 --- a/selfdrive/manager/build.py +++ b/selfdrive/manager/build.py @@ -9,7 +9,7 @@ from openpilot.common.basedir import BASEDIR from openpilot.common.spinner import Spinner from openpilot.common.text_window import TextWindow from openpilot.system.hardware import AGNOS -from openpilot.system.swaglog import cloudlog, add_file_handler +from openpilot.common.swaglog import cloudlog, add_file_handler from openpilot.system.version import is_dirty MAX_CACHE_SIZE = 4e9 if "CI" in os.environ else 2e9 @@ -17,21 +17,22 @@ CACHE_DIR = Path("/data/scons_cache" if AGNOS else "/tmp/scons_cache") TOTAL_SCONS_NODES = 2560 MAX_BUILD_PROGRESS = 100 -PREBUILT = os.path.exists(os.path.join(BASEDIR, 'prebuilt')) -def build(spinner: Spinner, dirty: bool = False) -> None: +def build(spinner: Spinner, dirty: bool = False, minimal: bool = False) -> None: env = os.environ.copy() env['SCONS_PROGRESS'] = "1" nproc = os.cpu_count() if nproc is None: nproc = 2 + extra_args = ["--minimal"] if minimal else [] + # building with all cores can result in using too # much memory, so retry with less parallelism compile_output: List[bytes] = [] for n in (nproc, nproc/2, 1): compile_output.clear() - scons: subprocess.Popen = subprocess.Popen(["scons", f"-j{int(n)}", "--cache-populate", "--minimal"], cwd=BASEDIR, env=env, stderr=subprocess.PIPE) + scons: subprocess.Popen = subprocess.Popen(["scons", f"-j{int(n)}", "--cache-populate", *extra_args], cwd=BASEDIR, env=env, stderr=subprocess.PIPE) assert scons.stderr is not None # Read progress from stderr and update spinner @@ -83,7 +84,7 @@ def build(spinner: Spinner, dirty: bool = False) -> None: f.unlink() -if __name__ == "__main__" and not PREBUILT: +if __name__ == "__main__": spinner = Spinner() spinner.update_progress(0, 100) - build(spinner, is_dirty()) + build(spinner, is_dirty(), minimal = AGNOS) diff --git a/selfdrive/manager/custom_dep.py b/selfdrive/manager/custom_dep.py deleted file mode 100755 index a08fcb9802..0000000000 --- a/selfdrive/manager/custom_dep.py +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import errno -import shutil -import tarfile -import time -import traceback -from common.basedir import BASEDIR -from common.text_window import TextWindow -from urllib.request import urlopen -from glob import glob -import subprocess -import importlib.util -from importlib.metadata import version - -# NOTE: Do NOT import anything here that needs be built (e.g. params) -from common.spinner import Spinner - - -sys.path.append(os.path.join(BASEDIR, "third_party/mapd")) -OPSPLINE_SPEC = importlib.util.find_spec('scipy') -OVERPY_SPEC = importlib.util.find_spec('overpy') -MAX_BUILD_PROGRESS = 100 -TMP_DIR = '/data/tmp' -THIRD_PARTY_DIR = '/data/openpilot/third_party/mapd' -THIRD_PARTY_DIR_SP = '/data/third_party_community' -PRELOADED_DEP_FILE = os.path.join(BASEDIR, "selfdrive/mapd/assets/mapd_deps.tar.xz") -OPSPLINE_VERSION = "1.11.1" -OVERPY_VERSION = "0.6" -SPECS = { - 'scipy': OPSPLINE_VERSION, - 'overpy': OVERPY_VERSION, -} - - -def wait_for_internet_connection(return_on_failure=False): - retries = 0 - while True: - try: - _ = urlopen('https://www.google.com/', timeout=10) - return True - except Exception as e: - print(f'Wait for internet failed: {e}') - if return_on_failure and retries == 15: - return False - retries += 1 - time.sleep(2) # Wait for 2 seconds before retrying - - -def install_dep(spinner): - wait_for_internet_connection() - - TOTAL_PIP_STEPS = 2986 - - try: - os.makedirs(TMP_DIR) - except OSError as e: - if e.errno != errno.EEXIST: - raise - my_env = os.environ.copy() - my_env['TMPDIR'] = TMP_DIR - - pip_target = [f'--target={THIRD_PARTY_DIR}'] - packages = [] - if OPSPLINE_SPEC is None: - packages.append(f'scipy=={OPSPLINE_VERSION}') - if OVERPY_SPEC is None: - packages.append(f'overpy=={OVERPY_VERSION}') - - pip = subprocess.Popen([sys.executable, "-m", "pip", "install", "-v"] + pip_target + packages, - stdout=subprocess.PIPE, env=my_env) - - # Read progress from pip and update spinner - steps = 0 - while True: - output = pip.stdout.readline() - if pip.poll() is not None: - break - if output: - steps += 1 - spinner.update_progress(MAX_BUILD_PROGRESS * min(1., steps / TOTAL_PIP_STEPS), 100.) - print(output.decode('utf8', 'replace')) - - shutil.rmtree(TMP_DIR) - os.unsetenv('TMPDIR') - - # remove numpy installed to THIRD_PARTY_DIR since numpy is already present in the AGNOS image - if OPSPLINE_SPEC is None: - for directory in glob(f'{THIRD_PARTY_DIR}/numpy*'): - shutil.rmtree(directory) - if os.path.exists(f'{THIRD_PARTY_DIR}/bin'): - shutil.rmtree(f'{THIRD_PARTY_DIR}/bin') - - dup = f'cp -rf {THIRD_PARTY_DIR} {THIRD_PARTY_DIR_SP}' - process_dup = subprocess.Popen(dup, stdout=subprocess.PIPE, shell=True) - - -if __name__ == "__main__": - reload_required = False - for package, req_version in SPECS.items(): - package_spec = importlib.util.find_spec(package) - if package_spec is not None and version(package) != req_version: - print(f"SP_LOG: current {package} is {version(package)}, requires {req_version}. Removing directory {THIRD_PARTY_DIR}...") - reload_required = True - if reload_required: - command = f'rm -rf {THIRD_PARTY_DIR}' - process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) - if OPSPLINE_SPEC is None or OVERPY_SPEC is None or reload_required: - spinner = Spinner() - preload_fault = False - try: - if os.path.exists(PRELOADED_DEP_FILE): - spinner.update("Loading preloaded dependencies") - try: - with tarfile.open(PRELOADED_DEP_FILE, "r:xz") as tar: - for member in tar.getmembers(): - split_components = member.name.split('/') - if len(split_components) > 1: - member.name = '/'.join(split_components[1:]) - tar.extract(member, path=THIRD_PARTY_DIR) - print(f"SP_LOG: Preloaded dependencies extracted to {THIRD_PARTY_DIR}") - except Exception as e: - preload_fault = True - command = f'rm -rf {THIRD_PARTY_DIR}' - process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) - print(f"SP_LOG: An error occurred while extracting preloaded dependencies: {e}") - print(f"SP_LOG: Cleanup directory {e}") - if not os.path.exists(PRELOADED_DEP_FILE) or preload_fault: - if os.path.exists(THIRD_PARTY_DIR_SP): - try: - spinner.update("Loading cached dependencies") - command = f'rm -rf {THIRD_PARTY_DIR}; cp -rf {THIRD_PARTY_DIR_SP} {THIRD_PARTY_DIR}' - process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) - print(f"SP_LOG: Removed directory {THIRD_PARTY_DIR}") - print(f"SP_LOG: Copied {THIRD_PARTY_DIR_SP} to {THIRD_PARTY_DIR}") - except Exception as e: - command = f'rm -rf {THIRD_PARTY_DIR}' - process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) - print(f"SP_LOG: An error occurred while loading cached dependencies: {e}") - print(f"SP_LOG: Cleanup directory {e}") - else: - spinner.update("Waiting for internet") - try: - install_dep(spinner) - except Exception as e: - command = f'rm -rf {THIRD_PARTY_DIR}' - process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) - print(f"SP_LOG: An error occurred while downloading dependencies: {e}") - print(f"SP_LOG: Cleanup directory {e}") - except Exception: - command = f'rm -rf {THIRD_PARTY_DIR}' - process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) - import selfdrive.sentry as sentry - sentry.init(sentry.SentryProject.SELFDRIVE) - traceback.print_exc() - sentry.capture_exception() - - error = traceback.format_exc(-3) - error = "Dependency Manager failed to start\n\n" + error - with TextWindow(error) as t: - t.wait_for_exit() diff --git a/selfdrive/manager/gitlab_runner.sh b/selfdrive/manager/gitlab_runner.sh new file mode 100755 index 0000000000..4430f1e98b --- /dev/null +++ b/selfdrive/manager/gitlab_runner.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Define the service name +SERVICE_NAME="gitlab-runner" + +# Function to control the service +control_service() { + local action=$1 # Store the function argument in a local variable + sudo systemctl $action ${SERVICE_NAME} +} + +service_exists_and_is_loaded() { + sudo systemctl status ${SERVICE_NAME} &>/dev/null + if [[ $? -ne 4 ]]; then + return 0 # Service is known to systemd (i.e., loaded) + else + return 1 # Service is unknown to systemd (i.e., not loaded) + fi +} + +# Check for required argument +if [[ -z $1 ]] || { [[ $1 != "start" ]] && [[ $1 != "stop" ]]; }; then + echo "Usage: $0 {start|stop}" + exit 1 +fi + +# Store the script argument in a descriptive variable +ACTION=$1 + +# Trap EXIT signal (Ctrl+C) and stop the service +trap 'control_service stop ; exit' SIGINT SIGKILL EXIT + +# Enter the main loop +while true; do + # Check if the service is actually present on the system + if service_exists_and_is_loaded; then + control_service $ACTION # Call the function with the specified action + fi + sleep 1 # Pause before the next iteration +done diff --git a/selfdrive/manager/helpers.py b/selfdrive/manager/helpers.py index f8607fffc6..1b6f8df1ef 100644 --- a/selfdrive/manager/helpers.py +++ b/selfdrive/manager/helpers.py @@ -3,7 +3,13 @@ import sys import fcntl import errno import signal +import shutil +import subprocess +import tempfile +import threading +from openpilot.common.basedir import BASEDIR +from openpilot.common.params import Params def unblock_stdout() -> None: # get a non-blocking stdout @@ -41,3 +47,18 @@ def unblock_stdout() -> None: def write_onroad_params(started, params): params.put_bool("IsOnroad", started) params.put_bool("IsOffroad", not started) + + +def save_bootlog(): + # copy current params + tmp = tempfile.mkdtemp() + shutil.copytree(Params().get_param_path() + "/..", tmp, dirs_exist_ok=True) + + def fn(tmpdir): + env = os.environ.copy() + env['PARAMS_ROOT'] = tmpdir + subprocess.call("./bootlog", cwd=os.path.join(BASEDIR, "system/loggerd"), env=env) + shutil.rmtree(tmpdir) + t = threading.Thread(target=fn, args=(tmp, )) + t.daemon = True + t.start() diff --git a/selfdrive/manager/local_osm_install.py b/selfdrive/manager/local_osm_install.py deleted file mode 100755 index b0bb60a1ee..0000000000 --- a/selfdrive/manager/local_osm_install.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -import os -import subprocess -import sys -import time -import traceback - -# NOTE: Do NOT import anything here that needs be built (e.g. params) -from common.basedir import BASEDIR -from common.params import Params -from common.spinner import Spinner -from common.text_window import TextWindow -import selfdrive.sentry as sentry -from selfdrive.manager.custom_dep import wait_for_internet_connection - - -def install_local_osm(_spinner): - _install(_spinner, "./install_osm.sh", "Installing OSM Server") - - -def install_osm_db(_spinner): - _install(_spinner, "./install_osm_db.sh", "Installing OSM DB - " + Params().get("OsmLocationName", encoding="utf-8")) - - -def _install(_spinner, script, title): - _spinner.update(title) - process = subprocess.Popen(['sh', script], cwd=os.path.join(BASEDIR, 'installer/custom/'), - stdout=subprocess.PIPE) - # Read progress from install script and update spinner - frame = 0 - while True: - output = process.stdout.readline() - if process.poll() is not None: - break - _spinner.update(title + (".".replace(".", "." * (frame % 5), 1))) - frame += 1 - print(output.decode('utf8', 'replace')) - time.sleep(0.1) - - -if __name__ == "__main__": - try: - from selfdrive.mapd.lib.helpers import is_local_osm_installed, timestamp_local_osm_db, is_osm_db_up_to_date, OSM_LOCAL_PATH - sys.path.append(os.path.join(BASEDIR, "third_party/mapd")) - params = Params() - update_osm_db_check = params.get_bool("OsmDbUpdatesCheck") - if not (os.path.exists(f"{OSM_LOCAL_PATH}/db") or - os.path.exists(f"{OSM_LOCAL_PATH}/v0.7.57")) or update_osm_db_check: - spinner = Spinner() - spinner.update("Waiting for internet connection...") - if wait_for_internet_connection(return_on_failure=True): - is_osm_installed = is_local_osm_installed(params) - is_db_updated = is_osm_db_up_to_date() - print(f'Local OSM Installer:\nOSM currently installed: {is_osm_installed}\nDB up to date: {is_db_updated}') - - if not is_osm_installed: - install_local_osm(spinner) - if not is_db_updated: - install_osm_db(spinner) - timestamp_local_osm_db() - spinner.close() - - params.put_bool("OsmDbUpdatesCheck", False) - except Exception: - sentry.init(sentry.SentryProject.SELFDRIVE) - traceback.print_exc() - sentry.capture_exception() - - error = traceback.format_exc(-3) - error = "OSM Offline Database Manager failed to start\n\n" + error - with TextWindow(error) as t: - t.wait_for_exit() diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 2c1e2c79f9..cd7e14a8e3 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -2,7 +2,6 @@ import datetime import os import signal -import subprocess import sys import traceback from typing import List, Tuple, Union @@ -10,35 +9,29 @@ from typing import List, Tuple, Union from cereal import custom import cereal.messaging as messaging import openpilot.selfdrive.sentry as sentry -from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params, ParamKeyType from openpilot.common.text_window import TextWindow -from openpilot.selfdrive.boardd.set_time import set_time from openpilot.system.hardware import HARDWARE, PC -from openpilot.selfdrive.manager.helpers import unblock_stdout, write_onroad_params +from openpilot.selfdrive.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog +from openpilot.selfdrive.manager.mapd_installer import VERSION from openpilot.selfdrive.manager.process import ensure_running from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.selfdrive.athena.registration import register, UNREGISTERED_DONGLE_ID, is_registered_device -from openpilot.system.swaglog import cloudlog, add_file_handler +from openpilot.common.swaglog import cloudlog, add_file_handler from openpilot.system.version import is_dirty, get_commit, get_version, get_origin, get_short_branch, \ get_normalized_origin, terms_version, training_version, \ - is_tested_branch, is_release_branch - - -sys.path.append(os.path.join(BASEDIR, "third_party/mapd")) + is_tested_branch, is_release_branch, is_release_sp_branch def manager_init() -> None: - # update system time from panda - set_time(cloudlog) - - # save boot log - subprocess.call("./bootlog", cwd=os.path.join(BASEDIR, "system/loggerd")) + save_bootlog() params = Params() params.clear_all(ParamKeyType.CLEAR_ON_MANAGER_START) params.clear_all(ParamKeyType.CLEAR_ON_ONROAD_TRANSITION) params.clear_all(ParamKeyType.CLEAR_ON_OFFROAD_TRANSITION) + if is_release_branch(): + params.clear_all(ParamKeyType.DEVELOPMENT_ONLY) default_params: List[Tuple[str, Union[str, bytes]]] = [ ("CompletedTrainingVersion", "0"), @@ -65,22 +58,20 @@ def manager_init() -> None: ("MadsCruiseMain", "1"), ("CustomBootScreen", "0"), ("CustomOffsets", "0"), - ("DevUI", "1"), - ("DevUIInfo", "1"), + ("DevUIInfo", "0"), ("DisableOnroadUploads", "0"), ("DisengageLateralOnBrake", "0"), + ("DrivingModelGeneration", "0"), ("DynamicLaneProfile", "1"), - ("DynamicLaneProfileToggle", "0"), ("EnableMads", "1"), ("EnhancedScc", "0"), - ("GpxDeleteAfterUpload", "1"), - ("GpxDeleteIfUploaded", "1"), ("HandsOnWheelMonitoring", "0"), ("HideVEgoUi", "0"), ("LastSpeedLimitSignTap", "0"), ("LkasToggle", "0"), ("MadsIconToggle", "1"), ("MaxTimeOffroad", "9"), + ("NNFF", "0"), ("OnroadScreenOff", "-2"), ("OnroadScreenOffBrightness", "50"), ("OnroadScreenOffEvent", "1"), @@ -88,10 +79,13 @@ def manager_init() -> None: ("ReverseAccChange", "0"), ("ScreenRecorder", "1"), ("ShowDebugUI", "1"), - ("SpeedLimitControl", "1"), - ("SpeedLimitPercOffset", "1"), + ("SpeedLimitControlPolicy", "3"), + ("SpeedLimitEngageType", "0"), ("SpeedLimitValueOffset", "0"), ("SpeedLimitOffsetType", "0"), + ("SpeedLimitWarningType", "0"), + ("SpeedLimitWarningValueOffset", "0"), + ("SpeedLimitWarningOffsetType", "0"), ("StandStillTimer", "0"), ("StockLongToyota", "0"), ("TorqueDeadzoneDeg", "0"), @@ -102,6 +96,10 @@ def manager_init() -> None: ("TurnVisionControl", "0"), ("VisionCurveLaneless", "0"), ("VwAccType", "0"), + ("OsmDbUpdatesCheck", "0"), + ("OsmDownloadedDate", "0"), + ("OSMDownloadProgress", "{}"), + ("MapdVersion", f"{VERSION}"), ] if not PC: default_params.append(("LastUpdateTime", datetime.datetime.utcnow().isoformat().encode('utf8'))) @@ -118,13 +116,6 @@ def manager_init() -> None: if os.getenv("HANDSMONITORING") is not None: params.put_bool("HandsOnWheelMonitoring", bool(int(os.getenv("HANDSMONITORING", "0")))) - # is this dashcam? - if os.getenv("PASSIVE") is not None: - params.put_bool("Passive", bool(int(os.getenv("PASSIVE", "0")))) - - if params.get("Passive") is None: - raise Exception("Passive must be set to continue") - # Create folders needed for msgq try: os.mkdir("/dev/shm") @@ -142,6 +133,7 @@ def manager_init() -> None: params.put("GitRemote", get_origin(default="")) params.put_bool("IsTestedBranch", is_tested_branch()) params.put_bool("IsReleaseBranch", is_release_branch()) + params.put_bool("IsReleaseSPBranch", is_release_sp_branch()) # set dongle id reg_res = register(show_spinner=True) @@ -150,6 +142,12 @@ def manager_init() -> None: else: serial = params.get("HardwareSerial") raise Exception(f"Registration failed for device {serial}") + if params.get("HardwareSerial") is None: + try: + serial = HARDWARE.get_serial() + params.put("HardwareSerial", serial) + except Exception: + cloudlog.exception("Error getting serial for device") os.environ['DONGLE_ID'] = dongle_id # Needed for swaglog if not is_dirty(): @@ -168,8 +166,7 @@ def manager_init() -> None: if os.path.isfile(os.path.join(sentry.CRASHES_DIR, 'error.txt')): os.remove(os.path.join(sentry.CRASHES_DIR, 'error.txt')) - -def manager_prepare() -> None: + # preimport all processes for p in managed_processes.values(): p.prepare() @@ -234,7 +231,7 @@ def manager_thread() -> None: cloudlog.debug(running) # send managerState - msg = messaging.new_message('managerState') + msg = messaging.new_message('managerState', valid=True) msg.managerState.processes = [p.get_process_state_msg() for p in managed_processes.values()] pm.send('managerState', msg) @@ -251,17 +248,8 @@ def manager_thread() -> None: def main() -> None: - prepare_only = os.getenv("PREPAREONLY") is not None - manager_init() - - # Start UI early so prepare can happen in the background - #if not prepare_only: - # managed_processes['ui'].start() - - manager_prepare() - - if prepare_only: + if os.getenv("PREPAREONLY") is not None: return # SystemExit on sigterm @@ -292,6 +280,8 @@ if __name__ == "__main__": try: main() + except KeyboardInterrupt: + print("got CTRL-C, exiting") except Exception: add_file_handler(cloudlog) cloudlog.exception("Manager failed to start") diff --git a/selfdrive/manager/mapd_installer.py b/selfdrive/manager/mapd_installer.py new file mode 100755 index 0000000000..2767115861 --- /dev/null +++ b/selfdrive/manager/mapd_installer.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 +import logging +import os +import stat +import time +import traceback +import requests +from pathlib import Path +from urllib.request import urlopen +import openpilot.selfdrive.sentry as sentry +from cereal import messaging +from common.spinner import Spinner +from common.params import Params +from openpilot.selfdrive.mapd_manager import COMMON_DIR, MAPD_PATH, MAPD_BIN_DIR +from openpilot.system.version import is_prebuilt + +VERSION = 'v1.8.0' +URL = f"https://github.com/pfeiferj/openpilot-mapd/releases/download/{VERSION}/mapd" + + +class MapdInstallManager: + def __init__(self, spinner_ref: Spinner): + self._spinner = spinner_ref + + def download(self): + self.ensure_directories_exist() + self._download_file() + self.update_installed_version(VERSION) + + def check_and_download(self): + if self.download_needed(): + self.download() + + @staticmethod + def download_needed(): + return not os.path.exists(MAPD_PATH) or MapdInstallManager.get_installed_version() != VERSION + + @staticmethod + def ensure_directories_exist(): + if not os.path.exists(COMMON_DIR): + os.makedirs(COMMON_DIR) + if not os.path.exists(MAPD_BIN_DIR): + os.makedirs(MAPD_BIN_DIR) + + @staticmethod + def _safe_write_and_set_executable(file_path, content): + with open(file_path, 'wb') as output: + output.write(content) + output.flush() + os.fsync(output.fileno()) + current_permissions = stat.S_IMODE(os.lstat(file_path).st_mode) + os.chmod(file_path, current_permissions | stat.S_IEXEC) + + def _download_file(self, num_retries=5): + temp_file = Path(MAPD_PATH + ".tmp") + download_timeout = 60 + for cnt in range(num_retries): + try: + response = requests.get(URL, stream=True, timeout=download_timeout) + response.raise_for_status() + self._safe_write_and_set_executable(temp_file, response.content) + # No exceptions encountered. Safe to replace original file. + temp_file.replace(MAPD_PATH) + return + except requests.exceptions.ReadTimeout: + self._spinner.update(f"ReadTimeout caught. Timeout is [{download_timeout}]. Retrying download... [{cnt}]") + time.sleep(0.5) + except requests.exceptions.RequestException as e: + self._spinner.update(f"RequestException caught: {e}. Retrying download... [{cnt}]") + time.sleep(0.5) + + # Delete temp file if the process was not successful. + if temp_file.exists(): + temp_file.unlink() + logging.error("Failed to download file after all retries") + + @staticmethod + def update_installed_version(version): + Params().put("MapdVersion", version) + + @staticmethod + def get_installed_version(): + return Params().get("MapdVersion", encoding="utf-8") + + def wait_for_internet_connection(self, return_on_failure=False): + max_retries = 10 + for retries in range(max_retries+1): + self._spinner.update(f"Waiting for internet connection... [{retries}/{max_retries}]") + time.sleep(2) + try: + _ = urlopen('https://sentry.io', timeout=10) + return True + except Exception as e: + print(f'Wait for internet failed: {e}') + if return_on_failure and retries == max_retries: + return False + + def non_prebuilt_install(self): + sm = messaging.SubMaster(['deviceState']) + metered = sm['deviceState'].networkMetered + + if metered: + self._spinner.update(f"Can't proceed with mapd install since network is metered!") + time.sleep(5) + return False + + try: + self.ensure_directories_exist() + if not self.download_needed(): + self._spinner.update("Mapd is good!") + time.sleep(0.1) + return True + + if self.wait_for_internet_connection(return_on_failure=True): + self._spinner.update(f"Downloading pfeiferj's mapd [{install_manager.get_installed_version()}] => [{VERSION}].") + time.sleep(0.1) + self.check_and_download() + self._spinner.close() + + except Exception: + for i in range(6): + self._spinner.update(f"Failed to download OSM maps won't work until properly downloaded!" + f"Try again manually rebooting. " + f"Boot will continue in {5 - i}s...") + time.sleep(1) + + sentry.init(sentry.SentryProject.SELFDRIVE) + traceback.print_exc() + sentry.capture_exception() + + +if __name__ == "__main__": + spinner = Spinner() + install_manager = MapdInstallManager(spinner) + install_manager.ensure_directories_exist() + if is_prebuilt(): + debug_msg = f"[DEBUG] This is prebuilt, no mapd install required. VERSION: [{VERSION}], Param [{install_manager.get_installed_version()}]" + spinner.update(debug_msg) + install_manager.update_installed_version(VERSION) + else: + spinner.update(f"Checking if mapd is installed and valid. Prebuilt [{is_prebuilt()}]") + time.sleep(1) + install_manager.non_prebuilt_install() diff --git a/selfdrive/manager/process.py b/selfdrive/manager/process.py index 0dda81c2d1..26708c12c8 100644 --- a/selfdrive/manager/process.py +++ b/selfdrive/manager/process.py @@ -15,7 +15,7 @@ import cereal.messaging as messaging import openpilot.selfdrive.sentry as sentry from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog WATCHDOG_FN = "/dev/shm/wd_" ENABLE_WATCHDOG = os.getenv("NO_WATCHDOG") is None @@ -89,7 +89,7 @@ class ManagerProcess(ABC): self.stop(sig=signal.SIGKILL) self.start() - def check_watchdog(self, started: bool, params: Params) -> None: + def check_watchdog(self, started: bool) -> None: if self.watchdog_max_dt is None or self.proc is None: return @@ -103,7 +103,7 @@ class ManagerProcess(ABC): dt = time.monotonic() - self.last_watchdog_time / 1e9 - always_watchdog = self.always_watchdog and params.get_bool("IsOffroad") and self.proc.exitcode is not None + always_watchdog = self.always_watchdog and not started and self.proc.exitcode is not None if dt > self.watchdog_max_dt: if (self.watchdog_seen or always_watchdog) and ENABLE_WATCHDOG: @@ -291,6 +291,6 @@ def ensure_running(procs: ValuesView[ManagerProcess], started: bool, params=None else: p.stop(block=False) - p.check_watchdog(started, params) + p.check_watchdog(started) return running diff --git a/selfdrive/manager/process_config.py b/selfdrive/manager/process_config.py index fd1ba29868..cc9d9900bc 100644 --- a/selfdrive/manager/process_config.py +++ b/selfdrive/manager/process_config.py @@ -4,6 +4,7 @@ from cereal import car from openpilot.common.params import Params from openpilot.system.hardware import PC, TICI from openpilot.selfdrive.manager.process import PythonProcess, NativeProcess, DaemonProcess +from openpilot.selfdrive.mapd_manager import MAPD_PATH, COMMON_DIR WEBCAM = os.getenv("USE_WEBCAM") is not None @@ -45,12 +46,11 @@ procs = [ DaemonProcess("manage_athenad", "selfdrive.athena.manage_athenad", "AthenadPid"), NativeProcess("camerad", "system/camerad", ["./camerad"], driverview), - NativeProcess("clocksd", "system/clocksd", ["./clocksd"], only_onroad), NativeProcess("logcatd", "system/logcatd", ["./logcatd"], only_onroad), NativeProcess("proclogd", "system/proclogd", ["./proclogd"], only_onroad), PythonProcess("logmessaged", "system.logmessaged", always_run), PythonProcess("micd", "system.micd", iscar), - PythonProcess("timezoned", "system.timezoned", always_run, enabled=not PC), + PythonProcess("timed", "system.timed", always_run, enabled=not PC), PythonProcess("dmonitoringmodeld", "selfdrive.modeld.dmonitoringmodeld", driverview, enabled=(not PC or WEBCAM)), NativeProcess("encoderd", "system/loggerd", ["./encoderd"], only_onroad), @@ -60,7 +60,8 @@ procs = [ NativeProcess("mapsd", "selfdrive/navd", ["./mapsd"], only_onroad), PythonProcess("navmodeld", "selfdrive.modeld.navmodeld", only_onroad), NativeProcess("sensord", "system/sensord", ["./sensord"], only_onroad, enabled=not PC), - NativeProcess("soundd", "selfdrive/ui/soundd", ["./soundd"], only_onroad), + #NativeProcess("ui", "selfdrive/ui", ["./ui"], always_run, watchdog_max_dt=(5 if not PC else None)), + PythonProcess("soundd", "selfdrive.ui.soundd", only_onroad), NativeProcess("locationd", "selfdrive/locationd", ["./locationd"], only_onroad), NativeProcess("boardd", "selfdrive/boardd", ["./boardd"], always_run, enabled=False), PythonProcess("calibrationd", "selfdrive.locationd.calibrationd", only_onroad), @@ -68,8 +69,7 @@ procs = [ PythonProcess("controlsd", "selfdrive.controls.controlsd", only_onroad), PythonProcess("deleter", "system.loggerd.deleter", always_run), PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", driverview, enabled=(not PC or WEBCAM)), - PythonProcess("laikad", "selfdrive.locationd.laikad", only_onroad), - PythonProcess("rawgpsd", "system.sensord.rawgps.rawgpsd", qcomgps, enabled=TICI), + PythonProcess("qcomgpsd", "system.qcomgpsd.qcomgpsd", qcomgps, enabled=TICI), PythonProcess("navd", "selfdrive.navd.navd", only_onroad), PythonProcess("pandad", "selfdrive.boardd.pandad", always_run), PythonProcess("paramsd", "selfdrive.locationd.paramsd", only_onroad), @@ -84,15 +84,25 @@ procs = [ PythonProcess("statsd", "selfdrive.statsd", always_run), NativeProcess("ui", "selfdrive/ui", ["./ui"], always_run, watchdog_max_dt=(5 if not PC else None), always_watchdog=True), - PythonProcess("gpxd", "selfdrive.gpxd.gpxd", only_onroad), - PythonProcess("gpxd_uploader", "selfdrive.gpxd.gpx_uploader", only_offroad), - PythonProcess("mapd", "selfdrive.mapd.mapd", only_onroad), + # PFEIFER - MAPD {{ + NativeProcess("mapd", COMMON_DIR, [MAPD_PATH], always_run), + PythonProcess("mapd_manager", "selfdrive.mapd_manager", always_run), + # }} PFEIFER - MAPD + PythonProcess("otisserv", "selfdrive.navd.otisserv", always_run), - PythonProcess("fleet_manager", "system.fleetmanager.fleet_manager", only_offroad), + PythonProcess("fleet_manager", "system.fleetmanager.fleet_manager", always_run), # debug procs NativeProcess("bridge", "cereal/messaging", ["./bridge"], notcar), + PythonProcess("webrtcd", "system.webrtc.webrtcd", notcar), PythonProcess("webjoystick", "tools.bodyteleop.web", notcar), ] +if os.path.exists("./gitlab_runner.sh") and True: # Of course and True is always true. Placeholder for a param :D + # Only devs! + procs += [ + NativeProcess("gitlab_runner_start", "selfdrive/manager", ["./gitlab_runner.sh", "start"], only_offroad, sigkill=False), + NativeProcess("gitlab_runner_stop", "selfdrive/manager", ["./gitlab_runner.sh", "stop"], only_onroad, sigkill=False) + ] + managed_processes = {p.name: p for p in procs} diff --git a/selfdrive/manager/test/test_manager.py b/selfdrive/manager/test/test_manager.py index 89ad483744..fbeb932a86 100755 --- a/selfdrive/manager/test/test_manager.py +++ b/selfdrive/manager/test/test_manager.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import os +import pytest import signal import time import unittest @@ -17,9 +18,9 @@ MAX_STARTUP_TIME = 3 BLACKLIST_PROCS = ['manage_athenad', 'pandad', 'pigeond'] +@pytest.mark.tici class TestManager(unittest.TestCase): def setUp(self): - os.environ['PASSIVE'] = '0' HARDWARE.set_power_save(False) # ensure clean CarParams @@ -45,13 +46,13 @@ class TestManager(unittest.TestCase): t = time.monotonic() - start assert t < MAX_STARTUP_TIME, f"startup took {t}s, expected <{MAX_STARTUP_TIME}s" + @unittest.skip("this test is flaky the way it's currently written, should be moved to test_onroad") def test_clean_exit(self): """ Ensure all processes exit cleanly when stopped. """ HARDWARE.set_power_save(False) manager.manager_init() - manager.manager_prepare() CP = car.CarParams.new_message() procs = ensure_running(managed_processes.values(), True, Params(), CP, not_run=BLACKLIST_PROCS) @@ -66,10 +67,6 @@ class TestManager(unittest.TestCase): self.assertNotIn(p.name, BLACKLIST_PROCS, f"{p.name} was started") - # TODO: mapsd should exit cleanly - if p.name == "mapsd": - continue - self.assertTrue(exit_code is not None, f"{p.name} failed to exit") # TODO: interrupted blocking read exits with 1 in cereal. use a more unique return code diff --git a/selfdrive/mapd/README.md b/selfdrive/mapd/README.md deleted file mode 100644 index bd3a3c9497..0000000000 --- a/selfdrive/mapd/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# MapD -The OpenStreetMap-based speed logical by the [Move Fast team](https://github.com/move-fast), [dragonpilot team](https://github.com/dragonpilot-community/dragonpilot), and additional improvements by [sunnypilot](https://github.com/sunnyhaibin/sunnypilot). - -The comma three uses regular SciPy. To have a better experience with `mapd`, please go to [OpenStreetMap](https://openstreetmap.org) to update and improve your area's data (i.e., Speed Limit, Stop Signs, Traffic Lights). - -To use `mapd`, you consent to `mapd` uploading the traces. You may opt out of uploading traces at any time. - -© OpenStreetMap contributors diff --git a/selfdrive/mapd/assets/mapd_deps.tar.xz b/selfdrive/mapd/assets/mapd_deps.tar.xz deleted file mode 100644 index 05e23804ad..0000000000 Binary files a/selfdrive/mapd/assets/mapd_deps.tar.xz and /dev/null differ diff --git a/selfdrive/mapd/assets/osm-3s_v0.7.57.tar.xz b/selfdrive/mapd/assets/osm-3s_v0.7.57.tar.xz deleted file mode 100644 index 880a400338..0000000000 Binary files a/selfdrive/mapd/assets/osm-3s_v0.7.57.tar.xz and /dev/null differ diff --git a/selfdrive/mapd/config.py b/selfdrive/mapd/config.py deleted file mode 100644 index afa6866601..0000000000 --- a/selfdrive/mapd/config.py +++ /dev/null @@ -1,8 +0,0 @@ -# Map query config - -QUERY_RADIUS = 3000 # mts. Radius to use on OSM data queries. -QUERY_RADIUS_OFFLINE = 2250 # mts. Radius to use on offline OSM data queries. -MIN_DISTANCE_FOR_NEW_QUERY = 1000 # mts. Minimum distance to query area edge before issuing a new query. -FULL_STOP_MAX_SPEED = 1.39 # m/s Max speed for considering car is stopped. -LOOK_AHEAD_HORIZON_TIME = 15. # s. Time horizon for look ahead of turn speed sections to provide on liveMapDataSP msg. -LANE_WIDTH = 3.7 # Lane width estimate. Used for detecting departures from way. diff --git a/selfdrive/mapd/lib/NodesData.py b/selfdrive/mapd/lib/NodesData.py deleted file mode 100644 index 8bb02ecb45..0000000000 --- a/selfdrive/mapd/lib/NodesData.py +++ /dev/null @@ -1,452 +0,0 @@ -import numpy as np -from enum import Enum -from selfdrive.mapd.lib.geo import DIRECTION, R, vectors - -from scipy.interpolate import splev, splprep - - -_TURN_CURVATURE_THRESHOLD = 0.002 # 1/mts. A curvature over this value will generate a speed limit section. -_MAX_LAT_ACC = 2. # Maximum lateral acceleration in turns. -_SPLINE_EVAL_STEP = 5 # mts for spline evaluation for curvature calculation -_MIN_SPEED_SECTION_LENGTH = 100. # mts. Sections below this value will not be split in smaller sections. -_MAX_CURV_DEVIATION_FOR_SPLIT = 2. # Split a speed section if the max curvature deviates from mean by this factor. -_MAX_CURV_SPLIT_ARC_ANGLE = 90. # degrees. Arc section to split into new speed section around max curvature. -_MIN_NODE_DISTANCE = 50. # mts. Minimum distance between nodes for spline evaluation. Data is enhanced if not met. -_ADDED_NODES_DIST = 15. # mts. Distance between added nodes when data is enhanced for spline evaluation. -_DIVERTION_SEARCH_RANGE = [-200., 50.] # mt. Range of distance to current location for diversion search. - - -def nodes_raw_data_array_for_wr(wr, drop_last=False, feature_sl=False): - """Provides an array of raw node data (id, lat, lon, speed_limit, advisory_speed_limit) for all nodes in way relation - """ - sl = wr.speed_limit - asl = wr.advisory_speed_limit - data = np.array([(n.id, n.lat, n.lon, sl, asl) for n in wr.way.nodes], dtype=float) - - if feature_sl: - for count, node in enumerate(wr.way.nodes): - if 'highway' in node.tags: - if node.tags['highway'] == 'mini_roundabout': - data[count][3] = 4.1667 - - if 'direction' in node.tags and (node.tags['highway'] == 'stop' or node.tags['highway'] == 'give_way'): - if (wr.direction == DIRECTION.BACKWARD and node.tags['direction'] == 'backward') or (wr.direction == DIRECTION.FORWARD and node.tags['direction'] == 'forward'): - if node.tags['highway'] == 'give_way': - data[count][3] = 2.7777 - if node.tags['highway'] == 'stop': - data[count][3] = 0.1 - if 'traffic_calming' in node.tags: - if node.tags['traffic_calming'] == 'yes': - data[count][3] = 40/3.6 - if node.tags['traffic_calming'] == 'chicane' or node.tags['traffic_calming'] == 'choker': - data[count][3] = 20/3.6 - if node.tags['traffic_calming'] == 'bump': - data[count][3] = 2.24 - if node.tags['traffic_calming'] == 'hump': - data[count][3] = 8.94 - - # reverse the order if way direction is backwards - if wr.direction == DIRECTION.BACKWARD: - data = np.flip(data, axis=0) - - # drop last if requested - return data[:-1] if drop_last else data - - -def node_calculations(points): - """Provides node calculations based on an array of (lat, lon) points in radians. - points is a (N x 1) array where N >= 3 - """ - if len(points) < 3: - raise(IndexError) - - # Get the vector representation of node points in cartesian plane. - # (N-1, 2) array. Not including (0., 0.) - v = vectors(points) * R - - # Calculate the vector magnitudes (or distance) - # (N-1, 1) array. No distance for v[-1] - d = np.linalg.norm(v, axis=1) - - # Calculate the bearing (from true north clockwise) for every node. - # (N-1, 1) array. No bearing for v[-1] - b = np.arctan2(v[:, 0], v[:, 1]) - - # Add origin to vector space. (i.e first node in list) - v = np.concatenate(([[0., 0.]], v)) - - # Provide distance to previous node and distance to next node - dp = np.concatenate(([0.], d)) - dn = np.concatenate((d, [0.])) - - # Provide cumulative distance on route - dr = np.cumsum(dp, axis=0) - - # Bearing of last node should keep bearing from previous. - b = np.concatenate((b, [b[-1]])) - - return v, dp, dn, dr, b - - -def spline_curvature_calculations(vect, dist_prev): - """Provides an array of curvatures and its distances by applying a spline interpolation - to the path described by the nodes data. - """ - # We need to artificially enhance the data before applying spline interpolation to avoid getting - # inexistent curvature values close to irregularities on the road when the resolution of nodes data - # approaching the irregularity is low. - - # - Find indexes where dist_prev is greater than threshold - too_far_idxs = np.nonzero(dist_prev >= _MIN_NODE_DISTANCE)[0] - - # - Traversing in reverse order, enhance data by adding points at the found indexes. - for idx in too_far_idxs[::-1]: - dp = dist_prev[idx] # distance of vector that needs to be replaced by higher resolution vectors. - n = int(np.ceil(dp / _ADDED_NODES_DIST)) # number of vectors that need to be added. - new_v = vect[idx, :] / n # new relative vector to insert. - vect = np.delete(vect, idx, axis=0) # remove the relative vector to be replaced by the insertion of new vectors. - vect = np.insert(vect, [idx] * n, [new_v] * n, axis=0) # insert n new relative vectors - - # Data is now enhanced, we can proceed with curvature evaluation. - # - Create cumulative arrays for distance traveled and vector (x, y) - ds = np.cumsum(dist_prev, axis=0) - vs = np.cumsum(vect, axis=0) - - # - spline interpolation - tck, u = splprep([vs[:, 0], vs[:, 1]]) # pylint: disable=unbalanced-tuple-unpacking - - # - evaluate every _SPLINE_EVAL_STEP mts. - n = max(int(ds[-1] / _SPLINE_EVAL_STEP), len(u)) - unew = np.arange(0, n + 1) / n - - # - get derivatives - d1 = splev(unew, tck, der=1) - d2 = splev(unew, tck, der=2) - - # - calculate curvatures - num = d1[0] * d2[1] - d1[1] * d2[0] - den = (d1[0]**2 + d1[1]**2)**(1.5) - curv = num / den - curv_ds = unew * ds[-1] - - return curv, curv_ds - - -def speed_section(curv_sec): - """Map curvature section data into turn speed sections data. - Returns: [section start distance, section end distance, speed limit based on max curvature, sing of curvature] - """ - max_curv_idx = np.argmax(curv_sec[:, 0]) - start = np.amin(curv_sec[:, 2]) - end = np.amax(curv_sec[:, 2]) - - return np.array([start, end, np.sqrt(_MAX_LAT_ACC / curv_sec[max_curv_idx, 0]), curv_sec[max_curv_idx, 1]]) - - -def split_speed_section_by_sign(curv_sec): - """Will split the given curvature section in subsections if there is a change of sign on the curvature value - in the section. - """ - # Find the indexes where the curvatures change signs (if any). - c_idx = np.nonzero(np.diff(curv_sec[:, 1]))[0] + 1 - - # Split section base on change of sign. - return np.split(curv_sec, c_idx) - - -def split_speed_section_by_curv_degree(curv_sec): - """Will split the given curvature section in subsections as to isolate peaks of turn with substantially - higher curvature values. This will aid on preventing having very long turn sections with low speed limit - that is only really necessary for a small region of the section. - """ - # Only consider splitting a section if long enough. - length = curv_sec[-1, 2] - curv_sec[0, 2] - if length <= _MIN_SPEED_SECTION_LENGTH: - return [curv_sec] - - # Only split if max curvature deviates substantially from mean curvature. - max_curv_idx = np.argmax(curv_sec[:, 0]) - max_curv = curv_sec[max_curv_idx, 0] - mean_curv = np.mean(curv_sec[:, 0]) - if max_curv / mean_curv <= _MAX_CURV_DEVIATION_FOR_SPLIT: - return [curv_sec] - - # Calculate where to split as to isolate a curve section around the max curvature peak. - arc_side = (np.radians(_MAX_CURV_SPLIT_ARC_ANGLE) / max_curv) / 2. - arc_side_idx_lenght = int(np.ceil(arc_side / _SPLINE_EVAL_STEP)) - split_idxs = [max_curv_idx - arc_side_idx_lenght, max_curv_idx + arc_side_idx_lenght] - split_idxs = list(filter(lambda idx: idx > 0 and idx < len(curv_sec) - 1, split_idxs)) - - # If the arc section to split extendes outside the section, then no need to split. - if len(split_idxs) == 0: - return [curv_sec] - - # Create the splits and split the resulting sections recursevly. - splits = [split_speed_section_by_curv_degree(cs) for cs in np.split(curv_sec, split_idxs)] - - # Flatten the results and return the new list of curvature sections. - curv_secs = [cs for split in splits for cs in split] - return curv_secs - - -def speed_limits_for_curvatures_data(curv, dist): - """Provides the calculations for the speed limits from the curvatures array and distances, - by providing distances to curvature sections and corresponding speed limit values as well as - curvature direction/sign. - """ - # Prepare a data array for processing with absolute curvature values, curvature sign and distances. - curv_abs = np.abs(curv) - data = np.column_stack((curv_abs, np.sign(curv), dist)) - - # Find where curvatures overshoot turn curvature threshold and define as section - is_section = curv_abs >= _TURN_CURVATURE_THRESHOLD - - # Find the indexes where the sections start and end. i.e. change indexes. - c_idx = np.nonzero(np.diff(is_section))[0] + 1 - - # Create independent arrays for each split section base on change indexes. - splits = np.array(np.split(data, c_idx), dtype=object) - - # Filter the splits to keep only the curvature section arrays by getting the odd or even split arrays depending - # on whether the first split is a curvature split or not. - curv_sec_idxs = np.arange(0 if is_section[0] else 1, len(splits), 2, dtype=int) - curv_secs = splits[curv_sec_idxs] - - # Further split the curv sections by sign change - sub_secs = [split_speed_section_by_sign(cs) for cs in curv_secs] - curv_secs = [cs for sub_sec in sub_secs for cs in sub_sec] - - # Further split the curv sections by degree of curvature - sub_secs = [split_speed_section_by_curv_degree(cs) for cs in curv_secs] - curv_secs = [cs for sub_sec in sub_secs for cs in sub_sec] - - # Return an array where each row represents a turn speed limit section. - # [start, end, speed_limit, curvature_sign] - return np.array([speed_section(cs) for cs in curv_secs]) - -def is_wr_a_valid_divertion_from_node(wr, node_id, wr_ids): - """ - Evaluates if the way relation `wr` is a valid diversion from node with id `node_id`. - A valid diversion is a way relation with an edge node with the given `node_id` that is not already included - in the list of way relations in the route (`wr_ids`) and that can be travaled in the direction as if starting - from node with id `node_id` - """ - if wr.id in wr_ids: - return False - wr.update_direction_from_starting_node(node_id) - return not wr.is_prohibited - - -class SpeedLimitSection(): - """And object representing a speed limited road section ahead. - provides the start and end distance and the speed limit value - """ - def __init__(self, start, end, value): - self.start = start - self.end = end - self.value = value - - def __repr__(self): - return f'from: {self.start}, to: {self.end}, limit: {self.value}' - - -class TurnSpeedLimitSection(SpeedLimitSection): - def __init__(self, start, end, value, sign): - super().__init__(start, end, value) - self.curv_sign = sign - - def __repr__(self): - return f'{super().__repr__()}, sign: {self.curv_sign}' - - -class NodeDataIdx(Enum): - """Column index for data elements on NodesData underlying data store. - """ - node_id = 0 - lat = 1 - lon = 2 - speed_limit = 3 - advisory_speed_limit = 4 - x = 5 # x value of cartesian vector representing the section between last node and this node. - y = 6 # y value of cartesian vector representing the section between last node and this node. - dist_prev = 7 # distance to previous node. - dist_next = 8 # distance to next node - dist_route = 9 # cumulative distance on route - bearing = 10 # bearing of the vector departing from this node. - - -class NodesData: - """Container for the list of node data from a ordered list of way relations to be used in a Route - """ - def __init__(self, way_relations, wr_index): - self._nodes_data = np.array([]) - self._divertions = [[]] - self._curvature_speed_sections_data = np.array([]) - - way_count = len(way_relations) - if way_count == 0: - return - - # We want all the nodes from the last way section - nodes_data = nodes_raw_data_array_for_wr(way_relations[-1]) - - # For the ways before the last in the route we want all the nodes but the last, as that one is the first on - # the next section. Collect them, append last way node data and concatenate the numpy arrays. - if way_count > 1: - wrs_data = tuple([nodes_raw_data_array_for_wr(wr, drop_last=True) for wr in way_relations[:-1]]) - wrs_data += (nodes_data,) - nodes_data = np.concatenate(wrs_data) - - # Get a subarray with lat, lon to compute the remaining node values. - lat_lon_array = nodes_data[:, [1, 2]] - points = np.radians(lat_lon_array) - # Ensure we have more than 3 points, if not calculations are not possible. - if len(points) <= 3: - return - vect, dist_prev, dist_next, dist_route, bearing = node_calculations(points) - - # append calculations to nodes_data - # nodes_data structure: [id, lat, lon, speed_limit, advisory_speed_limit, x, y, dist_prev, dist_next, dist_route, bearing] - self._nodes_data = np.column_stack((nodes_data, vect, dist_prev, dist_next, dist_route, bearing)) - - # Build route diversion options data from the wr_index. - wr_ids = [wr.id for wr in way_relations] - self._divertions = [[wr for wr in wr_index.way_relations_with_edge_node_id(node_id) - if is_wr_a_valid_divertion_from_node(wr, node_id, wr_ids)] - for node_id in nodes_data[:, 0]] - - # Store calculcations for curvature sections speed limits. We need more than 3 points to be able to process. - # _curvature_speed_sections_data structure: [dist_start, dist_stop, speed_limits, curv_sign] - if len(vect) > 3: - curv, curv_ds = spline_curvature_calculations(vect, dist_prev) - self._curvature_speed_sections_data = speed_limits_for_curvatures_data(curv, curv_ds) - - @property - def count(self): - return len(self._nodes_data) - - def get(self, node_data_idx): - """Returns the array containing all the elements of a specific NodeDataIdx type. - """ - if len(self._nodes_data) == 0 or node_data_idx.value >= self._nodes_data.shape[1]: - return np.array([]) - - return self._nodes_data[:, node_data_idx.value] - - def speed_limits_ahead(self, ahead_idx, distance_to_node_ahead): - """Returns and array of SpeedLimitSection objects for the actual route ahead of current location - """ - if len(self._nodes_data) == 0 or ahead_idx is None: - return [] - - # Find the cumulative distances where speed limit changes. Build Speed limit sections for those. - dist = np.concatenate(([distance_to_node_ahead], self.get(NodeDataIdx.dist_next)[ahead_idx:])) - dist = np.cumsum(dist, axis=0) - sl = self.get(NodeDataIdx.speed_limit)[ahead_idx - 1:] - sl_next = np.concatenate((sl[1:], [0.])) - - # Create a boolean mask where speed limit changes and filter values - sl_change = sl != sl_next - distances = dist[sl_change] - speed_limits = sl[sl_change] - - # Create speed limits sections combining all continuous nodes that have same speed limit value. - start = 0. - limits_ahead = [] - for idx, end in enumerate(distances): - limits_ahead.append(SpeedLimitSection(start, end, speed_limits[idx])) - start = end - - return limits_ahead - - - def advisory_speed_limits_ahead(self, ahead_idx, distance_to_node_ahead): - """Returns and array of SpeedLimitSection objects for the actual route ahead of current location - """ - if len(self._nodes_data) == 0 or ahead_idx is None: - return [] - - # Find the cumulative distances where speed limit changes. Build Speed limit sections for those. - dist = np.concatenate(([distance_to_node_ahead], self.get(NodeDataIdx.dist_next)[ahead_idx:])) - dist = np.cumsum(dist, axis=0) - sl = self.get(NodeDataIdx.advisory_speed_limit)[ahead_idx - 1:] - sl_next = np.concatenate((sl[1:], [0.])) - - # Create a boolean mask where speed limit changes and filter values - sl_change = sl != sl_next - distances = dist[sl_change] - speed_limits = sl[sl_change] - - # Create speed limits sections combining all continuous nodes that have same speed limit value. - start = 0. - limits_ahead = [] - for idx, end in enumerate(distances): - if speed_limits[idx] != None and speed_limits[idx] > 0: - limits_ahead.append(SpeedLimitSection(start, end, speed_limits[idx])) - start = end - - return limits_ahead - - - def distance_to_end(self, ahead_idx, distance_to_node_ahead): - if len(self._nodes_data) == 0 or ahead_idx is None: - return None - - return np.sum(np.concatenate(([distance_to_node_ahead], self.get(NodeDataIdx.dist_next)[ahead_idx:]))) - - def curvatures_speed_limit_sections_ahead(self, ahead_idx, distance_to_node_ahead): - """Returns and array of TurnSpeedLimitSection objects for the actual route ahead of current location for - speed limit sections due to curvatures in the road. - """ - if len(self._curvature_speed_sections_data) == 0 or ahead_idx is None: - return [] - - # Find the current distance traveled so far on the route. - dist_curr = self.get(NodeDataIdx.dist_route)[ahead_idx] - distance_to_node_ahead - - # Filter the sections to get only those where the stop distance is ahead of current. - sec_filter = self._curvature_speed_sections_data[:, 1] > dist_curr - data = self._curvature_speed_sections_data[sec_filter] - - # Offset distances to current distance. - data[:, [0, 1]] -= dist_curr - - # Create speed limits sections - limits_ahead = [TurnSpeedLimitSection(max(0., d[0]), d[1], d[2], d[3]) for d in data] - - advisory_speed_limits_ahead = self.advisory_speed_limits_ahead(ahead_idx, distance_to_node_ahead) - for advisory_limit in advisory_speed_limits_ahead: - for limit in limits_ahead: - if limit.start >= advisory_limit.start and limit.end <= advisory_limit.end: - limit.value = advisory_limit.value - - - return limits_ahead - - def possible_divertions(self, ahead_idx, distance_to_node_ahead): - """ Returns and array with the way relations the route could possible divert to by finding - the alternative way diversions on the nodes in the vicinity of the current location. - """ - if len(self._nodes_data) == 0 or ahead_idx is None: - return [] - - dist_route = self.get(NodeDataIdx.dist_route) - rel_dist = dist_route - dist_route[ahead_idx] + distance_to_node_ahead - valid_idxs = np.nonzero(np.logical_and(rel_dist >= _DIVERTION_SEARCH_RANGE[0], - rel_dist <= _DIVERTION_SEARCH_RANGE[1]))[0] - valid_divertions = [self._divertions[i] for i in valid_idxs] - - return [wr for wrs in valid_divertions for wr in wrs] # flatten. - - def distance_to_node(self, node_id, ahead_idx, distance_to_node_ahead): - """ - Provides the distance to a specific node in the route identified by `node_id` in reference to the node ahead - (`ahead_idx`) and the distance from current location to the node ahead (`distance_to_node_ahead`). - """ - node_ids = self.get(NodeDataIdx.node_id) - node_idxs = np.nonzero(node_ids == node_id)[0] - if len(self._nodes_data) == 0 or ahead_idx is None or len(node_idxs) == 0: - return None - - return self.get(NodeDataIdx.dist_route)[node_idxs[0]] - self.get(NodeDataIdx.dist_route)[ahead_idx] + \ - distance_to_node_ahead diff --git a/selfdrive/mapd/lib/Route.py b/selfdrive/mapd/lib/Route.py deleted file mode 100644 index a292a3257a..0000000000 --- a/selfdrive/mapd/lib/Route.py +++ /dev/null @@ -1,343 +0,0 @@ -from selfdrive.mapd.lib.NodesData import NodesData, NodeDataIdx -from selfdrive.mapd.config import QUERY_RADIUS -from selfdrive.mapd.lib.geo import ref_vectors, R, distance_to_points -from itertools import compress -import numpy as np - - -_ACCEPTABLE_BEARING_DELTA_COSINE = -0.7 # Continuation paths with a bearing of 180 +/- 45 degrees. -_MAX_ALLOWED_BEARING_DELTA_COSINE_AT_EDGE = -0.3420 # bearing delta at route edge must be 180 +/- 70 degrees. -_MAP_DATA_EDGE_DISTANCE = 50 # mts. Consider edge of map data from this distance to edge of query radius. - - -class Route(): - """A set of consecutive way relations forming a default driving route. - """ - def __init__(self, current, wr_index, way_collection_id, query_center): - """Create a Route object from a given `wr_index` (Way relation index) - - Args: - current (WayRelation): The Way Relation that is currently located. It must be active. - wr_index (WayRelationIndex): The indexes of WayRelations by node id. - way_collection_id (UUID): The id of the Way Collection that created this Route. - query_center (Numpy Array): lat, lon] numpy array in radians indicating the center of the data query. - """ - self.way_collection_id = way_collection_id - self._ordered_way_relations = [] - self._nodes_data = None - self._reset() - - # An active current way is needed to be able to build a route - if not current.active: - return - - # Build the route by finding iteratavely the best matching ways continuing after the end of the - # current (last_wr) way. Use the index to find the continuation possibilities on each iteration. - last_wr = current - ordered_way_ids = [] - split_wrs = [] - while True: - try: - # - Append current element to the route list of ordered way relations. - self._ordered_way_relations.append(last_wr) - ordered_way_ids.append(last_wr.id) - - # - Get the id of the node at the end of the way and then fetch the way relations that share the end node id. - last_node_id = last_wr.last_node.id - way_relations = wr_index.way_relations_with_edge_node_id(last_node_id) - - # - Add split way relations when necessary and remove parent way relations. - split_wrs_to_add = [wr for wr in split_wrs if last_node_id in wr.edge_nodes_ids] - way_relations.extend(split_wrs_to_add) - parent_ids = [wr.parent_wr_id for wr in split_wrs_to_add] - way_relations = [wr for wr in way_relations if wr.id not in parent_ids] - - # - If no more way_relations than last_wr, we have to check if we join another wr on an internal node, and - # if we do, we replace such way relation with the split of it and continue. - if len(way_relations) == 1: - way_relations = wr_index.way_relations_with_node_id(last_node_id) - # If no more way_relations than last_wr or its parent, we got to the end. - if len(way_relations) == 1: - break - - # If last_wr is a split, replace its parent with last_wr - way_relations = [last_wr if wr is last_wr.parent else wr for wr in way_relations] - - # If we join a wr on an internal node, then we artificially split the wr in two and pass both wrs as - # candidates to the wr selection code below. - wr_to_split = [wr for wr in way_relations if wr is not last_wr][0] - next_split_way_id = -len(split_wrs) - 1 # Keep split wrs ids unique on Route - new_wrs = wr_to_split.split(last_node_id, [next_split_way_id, next_split_way_id - 1]) - # If it could not be splited, we are done. - if len(new_wrs) != 2: - break - - # Replace the original way relation for the splitted version on way_relations and track splited wrs. - split_wrs.extend(new_wrs) - way_relations.remove(wr_to_split) - way_relations.extend(new_wrs) - - # - Get the coordinates for the edge node and build the array of coordinates for the nodes before the edge node - # on each of the common way relations, then get the vectors in cartesian plane for the end sections of each way. - ref_point = last_wr.last_node_coordinates - points = np.array([wr.node_before_edge_coordinates(last_node_id) for wr in way_relations]) - v = ref_vectors(ref_point, points) * R - - # - Calculate the bearing (from true north clockwise) for every end section of each way. - b = np.arctan2(v[:, 0], v[:, 1]) - - # - Find index of las_wr section and calculate deltas of bearings to the other sections. - last_wr_idx = way_relations.index(last_wr) - b_ref = b[last_wr_idx] - delta = b - b_ref - - # - Update the direction of the possible route continuation ways as starting from last_node_id. - # Make sure to exclude any ways already included in the ordered list as to not modify direction when there - # are looping roads (like roundabouts). A way will never be included twice in a route anyway. - for wr in way_relations: - if wr.id not in ordered_way_ids: - wr.update_direction_from_starting_node(last_node_id) - - # - Filter the possible route continuation way relations: - # - exclude any way already added to the ordered list. - # - exclude all way relations that are prohibited due to traffic direction. - mask = [wr.id not in ordered_way_ids and not wr.is_prohibited for wr in way_relations] - way_relations = list(compress(way_relations, mask)) - delta = delta[mask] - - # if no options left, we got to the end. - if len(way_relations) == 0: - break - - # - The cosine of the bearing delta will aid us in choosing the way that continues. The cosine is - # minimum (-1) for a perfect straight continuation as delta would be pi or -pi. - cos_delta = np.cos(delta) - - def pick_best_idx(cos_delta): - """Selects the best index on `cos_delta` array for a way that continues the route. - In principle we want to choose the way that continues as straight as possible. - Bue we need to make sure that if there are 2 or more ways continuing relatively straight, then we - need to disambiguate, either by matching the `ref` or `name` value of the continuing way with the - last way selected. - This can prevent cases where the chosen route could be for instance an exit ramp of a way due to the fact - that the ramp has a better match on bearing to previous way. We choose to stay on the road with the same `ref` - or `name` value if available. - If there is no ambiguity or there are no `name` or `ref` values to disambiguate, then we pick the one with - the straightest following direction. - """ - # Find the indexes of the cosine of the deltas that are considered straight enough to continue. - idxs = np.nonzero(cos_delta < _ACCEPTABLE_BEARING_DELTA_COSINE)[0] - - # If no amiguity or no way to break it, just return the straightest line. - if len(idxs) <= 1 or (last_wr.ref is None and last_wr.name is None): - # The section with the best continuation is the one with a bearing delta closest to pi. This is equivalent - # to taking the one with the smallest cosine of the bearing delta, as cosine is minimum (-1) on both pi - # and -pi. - return np.argmin(cos_delta) - - wrs = [way_relations[idx] for idx in idxs] - - # If we find a continuation way with the same reference we just choose it. - refs = list(map(lambda wr: wr.ref, wrs)) - if last_wr.ref is not None: - idx = next((idx for idx, ref in enumerate(refs) if ref == last_wr.ref), None) - if idx is not None: - return idxs[idx] - - # If we find a continuation way with the same name we just choose it. - names = list(map(lambda wr: wr.name, wrs)) - if last_wr.name is not None: - idx = next((idx for idx, name in enumerate(names) if name == last_wr.name), None) - if idx is not None: - return idxs[idx] - - # We did not manage to deambiguate, choose straightest path. - return np.argmin(cos_delta) - - # Get the index of the continuation way. - best_idx = pick_best_idx(cos_delta) - - # - Make sure to not select as route continuation a way that turns too much if we are close to the border of - # map data queried. This is to avoid building a route that takes a sharp turn just because we do not have the - # data for the way that actually continues straight. - if cos_delta[best_idx] > _MAX_ALLOWED_BEARING_DELTA_COSINE_AT_EDGE: - dist_to_center = distance_to_points(query_center, np.array([ref_point]))[0] - if dist_to_center > QUERY_RADIUS - _MAP_DATA_EDGE_DISTANCE: - break - - # - Select next way. - last_wr = way_relations[best_idx] - except Exception as e: - print("Exception \"", str(e), "\" caught") - - # Build the node data from the ordered list of way relations - self._nodes_data = NodesData(self._ordered_way_relations, wr_index) - - # Locate where we are in the route node list. - self._locate() - - def __repr__(self): - count = self._nodes_data.count if self._nodes_data is not None else None - return f'Route: {self.way_collection_id}, idx ahead: {self._ahead_idx} of {count}' - - def _reset(self): - self._limits_ahead = None - self._cuvature_limits_ahead = None - self._curvatures_ahead = None - self._ahead_idx = None - self._distance_to_node_ahead = None - - @property - def located(self): - return self._ahead_idx is not None - - def _locate(self): - """Will resolve the index in the nodes_data list for the node ahead of the current location. - It updates as well the distance from the current location to the node ahead. - """ - current = self.current_wr - if current is None: - return - - node_ahead_id = current.node_ahead.id - self._distance_to_node_ahead = current.distance_to_node_ahead - start_idx = self._ahead_idx if self._ahead_idx is not None else 1 - self._ahead_idx = None - - ids = self._nodes_data.get(NodeDataIdx.node_id) - for idx in range(start_idx, len(ids)): - if ids[idx] == node_ahead_id: - self._ahead_idx = idx - break - - @property - def current_wr(self): - return self._ordered_way_relations[0] if len(self._ordered_way_relations) else None - - def update(self, location_rad, bearing_rad, location_stdev): - """Will update the route structure based on the given `location_rad` and `bearing_rad` assuming progress on the - route on the original direction. If direction has changed or active point on the route can not be found, the route - will become invalid. - """ - if len(self._ordered_way_relations) == 0 or location_rad is None or bearing_rad is None: - return - - # Skip if no update on location or bearing. - if np.array_equal(self.current_wr.location_rad, location_rad) and self.current_wr.bearing_rad == bearing_rad: - return - - # Transverse the way relations on the actual order until we find an active one. From there, rebuild the route - # with the way relations remaining ahead. - for idx, wr in enumerate(self._ordered_way_relations): - active_direction = wr.direction - wr.update(location_rad, bearing_rad, location_stdev) - - if not wr.active: - continue - - if wr.direction != active_direction: - # Driving direction on the route has changed. stop. - break - - # We have now the current wr. Repopulate from here till the end and locate - self._ordered_way_relations = self._ordered_way_relations[idx:] - self._reset() - self._locate() - - # If the active way is diverting, check whether there are possibilities to divert from the route in the - # vecinity of the current location. If there are possibilities, then stop here to loose the route as we are - # most likely driving away. If there are no possibilities, then stick to the route as the diversion is probably - # just a matter of GPS accuracy. (It can happen after driving under a bridge) - if wr.diverting and len(self._nodes_data.possible_divertions(self._ahead_idx, self._distance_to_node_ahead)) > 0: - break - - # The current location in route is valid, return. - return - - # if we got here, there is no new active way relation or driving direction has changed. Reset. - self._reset() - - @property - def speed_limits_ahead(self): - """Returns and array of SpeedLimitSection objects for the actual route ahead of current location - """ - if self._limits_ahead is not None: - return self._limits_ahead - - if self._nodes_data is None or self._ahead_idx is None: - return [] - - self._limits_ahead = self._nodes_data.speed_limits_ahead(self._ahead_idx, self._distance_to_node_ahead) - return self._limits_ahead - - @property - def curvature_speed_limits_ahead(self): - """Returns and array of TurnSpeedLimitSection objects for the actual route ahead of current location due - to curvatures - """ - if self._cuvature_limits_ahead is not None: - return self._cuvature_limits_ahead - - if self._nodes_data is None or self._ahead_idx is None: - return [] - - self._cuvature_limits_ahead = self._nodes_data. \ - curvatures_speed_limit_sections_ahead(self._ahead_idx, self._distance_to_node_ahead) - - return self._cuvature_limits_ahead - - @property - def current_speed_limit(self): - if not self.located: - return None - - limits_ahead = self.speed_limits_ahead - if len(limits_ahead) == 0 or limits_ahead[0].start != 0: - return None - - return limits_ahead[0].value - - @property - def current_curvature_speed_limit_section(self): - if not self.located: - return None - - limits_ahead = self.curvature_speed_limits_ahead - if len(limits_ahead) == 0 or limits_ahead[0].start != 0: - return None - - return limits_ahead[0] - - @property - def next_speed_limit_section(self): - if not self.located: - return None - - limits_ahead = self.speed_limits_ahead - if len(limits_ahead) == 0: - return None - - # Find the first section that does not start in 0. i.e. the next section - for section in limits_ahead: - if section.start > 0: - return section - - return None - - def next_curvature_speed_limit_sections(self, horizon_mts): - if not self.located: - return [] - - # Provide the curvature speed sections that start ahead (> 0) and up to horizon - return list(filter(lambda la: la.start > 0 and la.start <= horizon_mts, self.curvature_speed_limits_ahead)) - - @property - def distance_to_end(self): - if not self.located: - return None - - return self._nodes_data.distance_to_end(self._ahead_idx, self._distance_to_node_ahead) - - @property - def current_road_name(self): - return self.current_wr.road_name if self.located else None diff --git a/selfdrive/mapd/lib/WayCollection.py b/selfdrive/mapd/lib/WayCollection.py deleted file mode 100644 index 91e7a161a2..0000000000 --- a/selfdrive/mapd/lib/WayCollection.py +++ /dev/null @@ -1,85 +0,0 @@ -from selfdrive.mapd.lib.WayRelation import WayRelation -from selfdrive.mapd.lib.WayRelationIndex import WayRelationIndex -from selfdrive.mapd.lib.Route import Route -from selfdrive.mapd.config import LANE_WIDTH -import uuid - - -_ACCEPTABLE_BEARING_DELTA_IND = 0.7071067811865475 # sin(pi/4) | 45 degrees acceptable bearing delta - - -class WayCollection(): - """A collection of WayRelations to use for maps data analysis. - """ - def __init__(self, areas, ways, query_center): - """Creates a WayCollection with a set of OSM way objects. - - Args: - ways (Array): Collection of Way objects fetched from OSM in a radius around `query_center` - query_center (Numpy Array): [lat, lon] numpy array in radians indicating the center of the data query. - """ - self.id = uuid.uuid4() - self.way_relations = [WayRelation(areas, way) for way in ways] - self.query_center = query_center - - self.wr_index = WayRelationIndex(self.way_relations) - - def get_route(self, location_rad, bearing_rad, location_stdev): - """Provides the best route found in the way collection based on current location and bearing. - """ - if location_rad is None or bearing_rad is None or location_stdev is None: - return None - - # Update all way relations in collection to the provided location and bearing. - for wr in self.way_relations: - wr.update(location_rad, bearing_rad, location_stdev) - - # Get the way relations where a match was found. i.e. those now marked as active as long as the direction of - # travel is valid. - valid_way_relations = [wr for wr in self.way_relations if wr.active and not wr.is_prohibited] - - # If no active, then we could not find a current way to build a route. - if len(valid_way_relations) == 0: - return None - - # If only one valid, then pick it as current. - if len(valid_way_relations) == 1: - current = valid_way_relations[0] - - # If more than one is valid, filter out any valid way relation where the bearing delta indicator is too high. - else: - wr_acceptable_bearing = list(filter(lambda wr: wr.active_bearing_delta <= _ACCEPTABLE_BEARING_DELTA_IND, - valid_way_relations)) - - # If delta bearing indicator is too high for all, then use as current the one that has the shorter one. - if len(wr_acceptable_bearing) == 0: - valid_way_relations.sort(key=lambda wr: wr.active_bearing_delta) - current = valid_way_relations[0] - - # If only one with acceptable bearing, use it. - elif len(wr_acceptable_bearing) == 1: - current = wr_acceptable_bearing[0] - - else: - # If more than one with acceptable bearing, filter the ones with distance to way lower than 2 standard - # deviation from GPS accuracy (95%) + half the road width estimate. - wr_accurate_distance = [wr for wr in wr_acceptable_bearing - if wr.distance_to_way <= 2. * location_stdev + wr.lanes * LANE_WIDTH / 2.] - - # If none with accurate distance to way, then select the closest to the way - if len(wr_accurate_distance) == 0: - wr_acceptable_bearing.sort(key=lambda wr: wr.distance_to_way) - current = wr_acceptable_bearing[0] - - # If only one with distance under accuracy, select this one. - elif len(wr_accurate_distance) == 1: - current = wr_accurate_distance[0] - - # If more than one with distance under accuracy. Then select the one with lowest highway rank. - # i.e. preferred motorways over other roads and so on. This is to prevent selecting a small parallel - # road to a main road when the accuracy is poor. - else: - wr_accurate_distance.sort(key=lambda wr: wr.highway_rank) - current = wr_accurate_distance[0] - - return Route(current, self.wr_index, self.id, self.query_center) diff --git a/selfdrive/mapd/lib/WayRelation.py b/selfdrive/mapd/lib/WayRelation.py deleted file mode 100644 index ce222a6c19..0000000000 --- a/selfdrive/mapd/lib/WayRelation.py +++ /dev/null @@ -1,487 +0,0 @@ -from selfdrive.mapd.lib.geo import DIRECTION, R, vectors, bearing_to_points, distance_to_points, point_on_line -from selfdrive.mapd.lib.osm import create_way -from common.conversions import Conversions as CV -from selfdrive.mapd.config import LANE_WIDTH -from common.basedir import BASEDIR -from datetime import datetime as dt -import numpy as np -import re -import json - - -_WAY_BBOX_PADING = 80. / R # 80 mts of padding to bounding box. (expressed in radians) - -with open(BASEDIR + "/selfdrive/mapd/lib/default_speeds_by_region.json", "rb") as f: - DEFAULT_SPEEDS_BY_REGION = json.loads(f.read()) - -with open(BASEDIR + "/selfdrive/mapd/lib/default_speeds.json", "rb") as f: - _COUNTRY_LIMITS = json.loads(f.read()) - - -_WD = { - 'Mo': 0, - 'Tu': 1, - 'We': 2, - 'Th': 3, - 'Fr': 4, - 'Sa': 5, - 'Su': 6 -} - -_HIGHWAY_RANK = { - 'motorway': 0, - 'motorway_link': 1, - 'trunk': 10, - 'trunk_link': 11, - 'primary': 20, - 'primary_link': 21, - 'secondary': 30, - 'secondary_link': 31, - 'tertiary': 40, - 'tertiary_link': 41, - 'unclassified': 50, - 'residential': 60, - 'living_street': 61, - 'service': 62 -} - - -def is_osm_time_condition_active(condition_string): - """ - Will indicate if a time condition for a restriction as described - @ https://wiki.openstreetmap.org/wiki/Conditional_restrictions - is active for the current date and time of day. - """ - now = dt.now().astimezone() - today = now.date() - week_days = [] - - # Look for days of week matched and validate if today matches criteria. - dr = re.findall(r'(Mo|Tu|We|Th|Fr|Sa|Su[-,\s]*?)', condition_string) - - if len(dr) == 1: - week_days = [_WD[dr[0]]] - # If two or more matches condider it a range of days between 1st and 2nd element. - elif len(dr) > 1: - week_days = list(range(_WD[dr[0]], _WD[dr[1]] + 1)) - - # If valid week days list is not empty and today day is not in the list, then the time-date range is not active. - if len(week_days) > 0 and now.weekday() not in week_days: - return False - - # Look for time ranges on the day. No time range, means all day - tr = re.findall(r'([0-9]{1,2}:[0-9]{2})\s*?-\s*?([0-9]{1,2}:[0-9]{2})', condition_string) - - # if no time range but there were week days set, consider it active during the whole day - if len(tr) == 0: - return len(dr) > 0 - - # Search among time ranges matched, one where now time belongs too. If found range is active. - for times_tup in tr: - times = list(map(lambda tt: dt. - combine(today, dt.strptime(tt, '%H:%M').time().replace(tzinfo=now.tzinfo)), times_tup)) - if now >= times[0] and now <= times[1]: - return True - - return False - - -def speed_limit_value_for_limit_string(limit_string): - # Look for matches of speed by default in kph, or in mph when explicitly noted. - v = re.match(r'^\s*([0-9]{1,3})\s*?(mph)?\s*$', limit_string) - if v is None: - return None - conv = CV.MPH_TO_MS if v[2] is not None and v[2] == "mph" else CV.KPH_TO_MS - return conv * float(v[1]) - - -def speed_limit_for_osm_tag_limit_string(limit_string): - # https://wiki.openstreetmap.org/wiki/Key:maxspeed - if limit_string is None: - # When limit is set to 0. is considered not existing. - return 0. - - # Attempt to parse limit as simple numeric value considering units. - limit = speed_limit_value_for_limit_string(limit_string) - if limit is not None: - return limit - - # Look for matches of speed with country implicit values. - v = re.match(r'^\s*([A-Z]{2}):([a-z_]+):?([0-9]{1,3})?(\s+)?(mph)?\s*', limit_string) - if v is None: - return 0. - - if v[2] == "zone" and v[3] is not None: - conv = CV.MPH_TO_MS if v[5] is not None and v[5] == "mph" else CV.KPH_TO_MS - limit = conv * float(v[3]) - elif f'{v[1]}:{v[2]}' in _COUNTRY_LIMITS: - limit = speed_limit_value_for_limit_string(_COUNTRY_LIMITS[f'{v[1]}:{v[2]}']) - - return limit if limit is not None else 0. - - -def conditional_speed_limit_for_osm_tag_limit_string(limit_string): - if limit_string is None: - # When limit is set to 0. is considered not existing. - return 0. - - # Look for matches of the ` @ ()` format - v = re.match(r'^(.*)@\s*\((.*)\).*$', limit_string) - if v is None: - return 0. # No valid format match - - value = speed_limit_for_osm_tag_limit_string(v[1]) - if value == 0.: - return 0. # Invalid speed limit value - - # Look for date-time conditions separated by semicolon - v = re.findall(r'(?:;|^)([^;]*)', v[2]) - for datetime_condition in v: - if is_osm_time_condition_active(datetime_condition): - return value - - # If we get here, no current date-time condition is active. - return 0. - -def speed_limit_value_for_highway_type(areas, tags): - max_speed = None - try: - geocode_country = '' - geocode_region = '' - for area in areas: - if area.tags.get('admin_level', '') == "2": - if area.tags.get('ISO3166-1:alpha2', '') != '': - geocode_country = area.tags.get('ISO3166-1:alpha2', '') - elif area.tags.get('admin_level', '') == "4": - geocode_region = area.tags.get('name', '') - country_rules = DEFAULT_SPEEDS_BY_REGION.get(geocode_country, {}) - country_defaults = country_rules.get('Default', []) - for rule in country_defaults: - rule_valid = all( - tag_name in tags - and tags[tag_name] == value - for tag_name, value in rule['tags'].items() - ) - if rule_valid: - max_speed = rule['speed'] - break #stop searching country - - region_rules = country_rules.get(geocode_region, []) - for rule in region_rules: - rule_valid = all( - tag_name in tags - and tags[tag_name] == value - for tag_name, value in rule['tags'].items() - ) - if rule_valid: - max_speed = rule['speed'] - break #stop searching region - except KeyError as e: - print(e) - except TypeError as e: - print(f"TypeError: {e} object is not iterable.") - if max_speed is None: - return 0 - v = re.match(r'^\s*([0-9]{1,3})\s*?(mph)?\s*$', str(max_speed)) - if v is None: - return None - conv = CV.MPH_TO_MS if v[2] is not None and v[2] == "mph" else CV.KPH_TO_MS - return conv * float(v[1]) - - -class WayRelation(): - """A class that represent the relationship of an OSM way and a given `location` and `bearing` of a driving vehicle. - """ - def __init__(self, areas, way, parent=None): - self.way = way - self.areas = areas - self.parent = parent - self.parent_wr_id = parent.id if parent is not None else None # For WRs created as splits of other WRs - self.reset_location_variables() - self.direction = DIRECTION.NONE - self._speed_limit = None - self._advisory_speed_limit = None - self._one_way = way.tags.get("oneway") - self.name = way.tags.get('name') - self.ref = way.tags.get('ref') - self.highway_type = way.tags.get("highway") - self.highway_rank = _HIGHWAY_RANK.get(self.highway_type, 1000) - try: - self.lanes = int(way.tags.get('lanes')) - except Exception: - self.lanes = 2 - - # Create numpy arrays with nodes data to support calculations. - self._nodes_np = np.radians(np.array([[nd.lat, nd.lon] for nd in way.nodes], dtype=float)) - self._nodes_ids = np.array([nd.id for nd in way .nodes], dtype=int) - - # Get the vectors representation of the segments betwheen consecutive nodes. (N-1, 2) - v = vectors(self._nodes_np) * R - - # Calculate the vector magnitudes (or distance) between nodes. (N-1) - self._way_distances = np.linalg.norm(v, axis=1) - - # Calculate the bearing (from true north clockwise) for every section of the way (vectors between nodes). (N-1) - self._way_bearings = np.arctan2(v[:, 0], v[:, 1]) - - # Define bounding box to ease the process of locating a node in a way. - # [[min_lat, min_lon], [max_lat, max_lon]] - self.bbox = np.row_stack((np.amin(self._nodes_np, 0) - _WAY_BBOX_PADING, - np.amax(self._nodes_np, 0) + _WAY_BBOX_PADING)) - - # Get the edge nodes ids. - self.edge_nodes_ids = [way.nodes[0].id, way.nodes[-1].id] - - def __repr__(self): - return f'(id: {self.id}, between {self.behind_idx} and {self.ahead_idx}, {self.direction}, active: {self.active})' - - def __eq__(self, other): - if isinstance(other, WayRelation): - return self.id == other.id - return False - - def reset_location_variables(self): - self.distance_to_node_ahead = 0. - self.location_rad = None - self.bearing_rad = None - self.active = False - self.diverting = False - self.ahead_idx = None - self.behind_idx = None - self._active_bearing_delta = None - self._distance_to_way = None - - @property - def id(self): - return self.way.id - - @property - def road_name(self): - if self.name is not None: - return self.name - return self.ref - - def update(self, location_rad, bearing_rad, location_stdev): - """Will update and validate the associated way with a given `location_rad` and `bearing_rad`. - Specifically it will find the nodes behind and ahead of the current location and bearing. - If no proper fit to the way geometry, the way relation is marked as invalid. - """ - self.reset_location_variables() - - # Ignore if location not in way bounding box - if not self.is_location_in_bbox(location_rad): - return - - # - Get the distance and bearings from location to all nodes. (N) - bearings = bearing_to_points(location_rad, self._nodes_np) - - # - Get absolute bearing delta to current driving bearing. (N) - delta = np.abs(bearing_rad - bearings) - - # - Nodes are ahead if the cosine of the delta is positive (N) - is_ahead = np.cos(delta) >= 0. - - # - Possible locations on the way are those where adjacent nodes change from ahead to behind or vice-versa. - possible_idxs = np.nonzero(np.diff(is_ahead))[0] - - # - when no possible locations found, then the location is not in this way. - if len(possible_idxs) == 0: - return - - projections = point_on_line(self._nodes_np[:-1], self._nodes_np[1:], location_rad) - h = distance_to_points(location_rad, projections) - - # - Calculate the delta between driving bearing and way bearings. (N-1) - bw_delta = self._way_bearings - bearing_rad - - # - The absolute value of the sin of `bw_delta` indicates how close the bearings match independent of direction. - # We will use this value along the distance to the way to aid on way selection. (N-1) - abs_sin_bw_delta = np.abs(np.sin(bw_delta)) - - # - Get the delta to way bearing indicators and the distance to the way for the possible locations. - abs_sin_bw_delta_possible = abs_sin_bw_delta[possible_idxs] - h_possible = h[possible_idxs] - - # - Get the index where the distance to the way is minimum. That is the chosen location. - min_h_possible_idx = np.argmin(h_possible) - min_delta_idx = possible_idxs[min_h_possible_idx] - projection = projections[min_delta_idx] - - # - If the distance to the way is over 4 standard deviations of the gps accuracy + the maximum road width - # estimate, then we are way too far to stick to this way (i.e. we are not on this way anymore) - # In theory the osm path is centered on the road which means half the road width would cover the whole road. - # however, often times the osm path is not perfectly centered so we'll make the possible route more lenient by using - # the full road width. - road_width_estimate = self.lanes * LANE_WIDTH - half_road_width_estimate = road_width_estimate / 2. - if h_possible[min_h_possible_idx] > 4. * location_stdev + road_width_estimate: - return - - # If the distance to the road is greater than 2 standard deviations of the gps accuracy + half the maximum road - # width estimate + 1 lane width then we are most likely diverting from this route. Adding a lane width to give - # leniency to not perfectly centered osm paths - diverting = h_possible[min_h_possible_idx] > 2. * location_stdev + half_road_width_estimate + LANE_WIDTH - - # Populate location variables with result - if is_ahead[min_delta_idx]: - self.direction = DIRECTION.BACKWARD - self.ahead_idx = min_delta_idx - self.behind_idx = min_delta_idx + 1 - else: - self.direction = DIRECTION.FORWARD - self.ahead_idx = min_delta_idx + 1 - self.behind_idx = min_delta_idx - - self._distance_to_way = h[min_delta_idx] - self._active_bearing_delta = abs_sin_bw_delta_possible[min_h_possible_idx] - - # find the distance to the next node by projecting our location onto the line and finding the delta between that - # point and the next point on the route - self.distance_to_node_ahead = distance_to_points(projection, np.array([self._nodes_np[self.ahead_idx]]))[0] - self.active = True - self.diverting = diverting - self.location_rad = location_rad - self.bearing_rad = bearing_rad - self._speed_limit = None - self._advisory_speed_limit = None - - def update_direction_from_starting_node(self, start_node_id): - self._speed_limit = None - self._advisory_speed_limit = None - if self.edge_nodes_ids[0] == start_node_id: - self.direction = DIRECTION.FORWARD - elif self.edge_nodes_ids[-1] == start_node_id: - self.direction = DIRECTION.BACKWARD - else: - self.direction = DIRECTION.NONE - - def is_location_in_bbox(self, location_rad): - """Indicates if a given location is contained in the bounding box surrounding the way. - self.bbox = [[min_lat, min_lon], [max_lat, max_lon]] - """ - is_g = np.greater_equal(location_rad, self.bbox[0, :]) - is_l = np.less_equal(location_rad, self.bbox[1, :]) - - return np.all(np.concatenate((is_g, is_l))) - - @property - def speed_limit(self): - if self._speed_limit is not None: - return self._speed_limit - - # Get string from corresponding tag, consider conditional limits first. - limit_string = self.way.tags.get("maxspeed:conditional") - if limit_string is None: - if self.direction == DIRECTION.FORWARD: - limit_string = self.way.tags.get("maxspeed:forward:conditional") - elif self.direction == DIRECTION.BACKWARD: - limit_string = self.way.tags.get("maxspeed:backward:conditional") - - limit = conditional_speed_limit_for_osm_tag_limit_string(limit_string) - - # When no conditional limit set, attempt to get from regular speed limit tags. - if limit == 0.: - limit_string = self.way.tags.get("maxspeed") - if limit_string is None: - if self.direction == DIRECTION.FORWARD: - limit_string = self.way.tags.get("maxspeed:forward") - elif self.direction == DIRECTION.BACKWARD: - limit_string = self.way.tags.get("maxspeed:backward") - - limit = speed_limit_for_osm_tag_limit_string(limit_string) - - if limit == 0.: - limit = speed_limit_value_for_highway_type(self.areas, self.way.tags) - - self._speed_limit = limit - return self._speed_limit - - - @property - def advisory_speed_limit(self): - if self._advisory_speed_limit is not None: - return self._advisory_speed_limit - - limit_string = self.way.tags.get("maxspeed:advisory") - limit = speed_limit_for_osm_tag_limit_string(limit_string) - - self._advisory_speed_limit = limit - return self._advisory_speed_limit - - - @property - def active_bearing_delta(self): - """Returns the sine of the delta between the current location bearing and the exact - bearing of the portion of way we are currentluy located at. - """ - return self._active_bearing_delta - - @property - def is_one_way(self): - return self._one_way in ['yes'] or self.highway_type in ["motorway"] - - @property - def is_prohibited(self): - # Direction must be defined to asses this property. Default to `True` if not. - if self.direction == DIRECTION.NONE: - return True - return self.is_one_way and self.direction == DIRECTION.BACKWARD - - @property - def distance_to_way(self): - """Returns the perpendicular (i.e. minimum) distance between current location and the way - """ - return self._distance_to_way - - @property - def node_ahead(self): - return self.way.nodes[self.ahead_idx] if self.ahead_idx is not None else None - - @property - def last_node(self): - """Returns the last node on the way considering the traveling direction - """ - if self.direction == DIRECTION.FORWARD: - return self.way.nodes[-1] - if self.direction == DIRECTION.BACKWARD: - return self.way.nodes[0] - return None - - @property - def last_node_coordinates(self): - """Returns the coordinates for the last node on the way considering the traveling direction. (in radians) - """ - if self.direction == DIRECTION.FORWARD: - return self._nodes_np[-1] - if self.direction == DIRECTION.BACKWARD: - return self._nodes_np[0] - return None - - def node_before_edge_coordinates(self, node_id): - """Returns the coordinates of the node before the edge node identifeid with `node_id`. (in radians) - """ - if self.edge_nodes_ids[0] == node_id: - return self._nodes_np[1] - - if self.edge_nodes_ids[-1] == node_id: - return self._nodes_np[-2] - - return np.array([0., 0.]) - - def split(self, node_id, way_ids=None): - """ Returns and array with the way relations resulting from splitting the current way relation at node_id - """ - idxs = np.nonzero(self._nodes_ids == node_id)[0] - if len(idxs) == 0: - return [] - - idx = idxs[0] - if idx == 0 or idx == len(self._nodes_ids) - 1: - return [self] - - if not isinstance(way_ids, list): - way_ids = [-1, -2] # Default id values. - - ways = [create_way(way_ids[0], node_ids=self._nodes_ids[:idx + 1], from_way=self.way), - create_way(way_ids[1], node_ids=self._nodes_ids[idx:], from_way=self.way)] - return [WayRelation(self.areas, way, parent=self) for way in ways] diff --git a/selfdrive/mapd/lib/WayRelationIndex.py b/selfdrive/mapd/lib/WayRelationIndex.py deleted file mode 100644 index e941dcd5b7..0000000000 --- a/selfdrive/mapd/lib/WayRelationIndex.py +++ /dev/null @@ -1,34 +0,0 @@ - - -class WayRelationIndex(): - """ - A class containing an index of WayRelations by node ids of internal nodes and edge nodes. - """ - def __init__(self, way_relations): - self._edge_nodes_index_dict = {} - self._full_nodes_index_dict = {} - - for wr in way_relations: - self.add(wr) - - def add(self, way_relation): - for node in way_relation.way.nodes: - node_id = node.id - self._full_nodes_index_dict[node_id] = self._full_nodes_index_dict.get(node_id, []) + [way_relation] - if node_id in way_relation.edge_nodes_ids: - self._edge_nodes_index_dict[node_id] = self._edge_nodes_index_dict.get(node_id, []) + [way_relation] - - def remove(self, way_relation): - for node in way_relation.way.nodes: - node_id = node.id - self._full_nodes_index_dict[node_id] = [wr for wr in self._full_nodes_index_dict.get(node_id, []) - if wr is not way_relation] - if node_id in way_relation.edge_nodes_ids: - self._edge_nodes_index_dict[node_id] = [wr for wr in self._edge_nodes_index_dict.get(node_id, []) - if wr is not way_relation] - - def way_relations_with_edge_node_id(self, node_id): - return self._edge_nodes_index_dict.get(node_id, []) - - def way_relations_with_node_id(self, node_id): - return self._full_nodes_index_dict.get(node_id, []) diff --git a/selfdrive/mapd/lib/default_speeds.json b/selfdrive/mapd/lib/default_speeds.json deleted file mode 100644 index 0a7d28474a..0000000000 --- a/selfdrive/mapd/lib/default_speeds.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "_comment": "These speeds are from https://wiki.openstreetmap.org/wiki/Speed_limits Special cases have been stripped", - "AR:urban": "40", - "AR:urban:primary": "60", - "AR:urban:secondary": "60", - "AR:rural": "110", - "AT:urban": "50", - "AT:rural": "100", - "AT:trunk": "100", - "AT:motorway": "130", - "BE:urban": "50", - "BE-VLG:rural": "70", - "BE-WAL:rural": "90", - "BE:trunk": "120", - "BE:motorway": "120", - "CH:urban[1]": "50", - "CH:rural": "80", - "CH:trunk": "100", - "CH:motorway": "120", - "CZ:pedestrian_zone": "20", - "CZ:living_street": "20", - "CZ:urban": "50", - "CZ:urban_trunk": "80", - "CZ:urban_motorway": "80", - "CZ:rural": "90", - "CZ:trunk": "110", - "CZ:motorway": "130", - "DK:urban": "50", - "DK:rural": "80", - "DK:motorway": "130", - "DE:living_street": "10", - "DE:service": "10", - "DE:residential": "30", - "DE:urban": "50", - "DE:rural": "100", - "DE:trunk": "none", - "DE:motorway": "none", - "FI:urban": "50", - "FI:rural": "80", - "FI:trunk": "100", - "FI:motorway": "120", - "FR:urban": "50", - "FR:rural": "80", - "FR:trunk": "110", - "FR:motorway": "130", - "GR:urban": "50", - "GR:rural": "90", - "GR:trunk": "110", - "GR:motorway": "130", - "HU:urban": "50", - "HU:rural": "90", - "HU:trunk": "110", - "HU:motorway": "130", - "IT:urban": "50", - "IT:rural": "90", - "IT:trunk": "110", - "IT:motorway": "130", - "JP:national": "60", - "JP:motorway": "100", - "LT:living_street": "20", - "LT:urban": "50", - "LT:rural": "90", - "LT:trunk": "120", - "LT:motorway": "130", - "PL:living_street": "20", - "PL:urban": "50", - "PL:rural": "90", - "PL:trunk": "100", - "PL:motorway": "140", - "RO:urban": "50", - "RO:rural": "90", - "RO:trunk": "100", - "RO:motorway": "130", - "RU:living_street": "20", - "RU:urban": "60", - "RU:rural": "90", - "RU:motorway": "110", - "SK:urban": "50", - "SK:rural": "90", - "SK:trunk": "90", - "SK:motorway": "90", - "SI:urban": "50", - "SI:rural": "90", - "SI:trunk": "110", - "SI:motorway": "130", - "ES:living_street": "20", - "ES:urban": "50", - "ES:rural": "50", - "ES:trunk": "90", - "ES:motorway": "120", - "SE:urban": "50", - "SE:rural": "70", - "SE:trunk": "90", - "SE:motorway": "110", - "GB:nsl_restricted": "30 mph", - "GB:nsl_single": "60 mph", - "GB:nsl_dual": "70 mph", - "GB:motorway": "70 mph", - "UA:urban": "50", - "UA:rural": "90", - "UA:trunk": "110", - "UA:motorway": "130", - "UZ:living_street": "30", - "UZ:urban": "70", - "UZ:rural": "100", - "UZ:motorway": "110", - "ZA:trunk": "120", - "ZA:residential": "60", - "ZA:rural": "100", - "ZA:urban": "60", - "ZA:motorway": "120" -} diff --git a/selfdrive/mapd/lib/default_speeds_by_region.json b/selfdrive/mapd/lib/default_speeds_by_region.json deleted file mode 100644 index fd3365b89f..0000000000 --- a/selfdrive/mapd/lib/default_speeds_by_region.json +++ /dev/null @@ -1,624 +0,0 @@ -{ - "AU": { - "Default": [ - { - "speed": "100", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "80", - "tags": { - "highway": "trunk" - } - }, - { - "speed": "80", - "tags": { - "highway": "primary" - } - }, - { - "speed": "50", - "tags": { - "highway": "secondary" - } - }, - { - "speed": "50", - "tags": { - "highway": "tertiary" - } - }, - { - "speed": "80", - "tags": { - "highway": "unclassified" - } - }, - { - "speed": "50", - "tags": { - "highway": "residential" - } - }, - { - "speed": "40", - "tags": { - "highway": "service" - } - }, - { - "speed": "90", - "tags": { - "highway": "motorway_link" - } - }, - { - "speed": "80", - "tags": { - "highway": "trunk_link" - } - }, - { - "speed": "80", - "tags": { - "highway": "primary_link" - } - }, - { - "speed": "50", - "tags": { - "highway": "secondary_link" - } - }, - { - "speed": "50", - "tags": { - "highway": "tertiary_link" - } - }, - { - "speed": "30", - "tags": { - "highway": "living_street" - } - } - ] - }, - "EE": { - "Default": [ - { - "speed": "90", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "90", - "tags": { - "highway": "trunk" - } - }, - { - "speed": "90", - "tags": { - "highway": "primary" - } - }, - { - "speed": "50", - "tags": { - "highway": "secondary" - } - }, - { - "speed": "50", - "tags": { - "highway": "tertiary" - } - }, - { - "speed": "90", - "tags": { - "highway": "unclassified" - } - }, - { - "speed": "40", - "tags": { - "highway": "residential" - } - }, - { - "speed": "40", - "tags": { - "highway": "service" - } - }, - { - "speed": "90", - "tags": { - "highway": "motorway_link" - } - }, - { - "speed": "70", - "tags": { - "highway": "trunk_link" - } - }, - { - "speed": "70", - "tags": { - "highway": "primary_link" - } - }, - { - "speed": "50", - "tags": { - "highway": "secondary_link" - } - }, - { - "speed": "50", - "tags": { - "highway": "tertiary_link" - } - }, - { - "speed": "20", - "tags": { - "highway": "living_street" - } - } - ] - }, - "CA": { - "Default": [ - { - "speed": "100", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "80", - "tags": { - "highway": "trunk" - } - }, - { - "speed": "80", - "tags": { - "highway": "primary" - } - }, - { - "speed": "50", - "tags": { - "highway": "secondary" - } - }, - { - "speed": "50", - "tags": { - "highway": "tertiary" - } - }, - { - "speed": "80", - "tags": { - "highway": "unclassified" - } - }, - { - "speed": "40", - "tags": { - "highway": "residential" - } - }, - { - "speed": "40", - "tags": { - "highway": "service" - } - }, - { - "speed": "90", - "tags": { - "highway": "motorway_link" - } - }, - { - "speed": "80", - "tags": { - "highway": "trunk_link" - } - }, - { - "speed": "80", - "tags": { - "highway": "primary_link" - } - }, - { - "speed": "50", - "tags": { - "highway": "secondary_link" - } - }, - { - "speed": "50", - "tags": { - "highway": "tertiary_link" - } - }, - { - "speed": "20", - "tags": { - "highway": "living_street" - } - } - ] - }, - "DE": { - "Default": [ - { - "speed": "none", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "10", - "tags": { - "highway": "living_street" - } - }, - { - "speed": "30", - "tags": { - "highway": "residential" - } - }, - { - "speed": "10", - "tags": { - "highway": "service" - } - }, - { - "speed": "100", - "tags": { - "zone:traffic": "DE:rural" - } - }, - { - "speed": "50", - "tags": { - "zone:traffic": "DE:urban" - } - }, - { - "speed": "30", - "tags": { - "zone:maxspeed": "DE:30" - } - }, - { - "speed": "50", - "tags": { - "zone:maxspeed": "DE:urban" - } - }, - { - "speed": "100", - "tags": { - "zone:maxspeed": "DE:rural" - } - }, - { - "speed": "none", - "tags": { - "zone:maxspeed": "DE:motorway" - } - }, - { - "speed": "30", - "tags": { - "bicycle_road": "yes" - } - } - ] - }, - "ZA": { - "Default": [ - { - "speed": "120", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "120", - "tags": { - "highway": "motorway_link" - } - }, - { - "speed": "100", - "tags": { - "highway": "primary" - } - }, - { - "speed": "100", - "tags": { - "highway": "secondary" - } - }, - { - "speed": "60", - "tags": { - "highway": "residential" - } - } - ] - }, - "US": { - "South Dakota": [ - { - "speed": "80 mph", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "70 mph", - "tags": { - "highway": "trunk" - } - }, - { - "speed": "65 mph", - "tags": { - "highway": "primary" - } - }, - { - "speed": "70 mph", - "tags": { - "highway": "trunk_link" - } - }, - { - "speed": "65 mph", - "tags": { - "highway": "primary_link" - } - } - ], - "Wisconsin": [ - { - "speed": "65 mph", - "tags": { - "highway": "trunk" - } - }, - { - "speed": "45 mph", - "tags": { - "highway": "tertiary" - } - }, - { - "speed": "35 mph", - "tags": { - "highway": "unclassified" - } - }, - { - "speed": "65 mph", - "tags": { - "highway": "trunk_link" - } - }, - { - "speed": "45 mph", - "tags": { - "highway": "tertiary_link" - } - } - ], - "Default": [ - { - "speed": "65 mph", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "trunk" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "primary" - } - }, - { - "speed": "45 mph", - "tags": { - "highway": "secondary" - } - }, - { - "speed": "35 mph", - "tags": { - "highway": "tertiary" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "unclassified" - } - }, - { - "speed": "25 mph", - "tags": { - "highway": "residential" - } - }, - { - "speed": "25 mph", - "tags": { - "highway": "service" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "motorway_link" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "trunk_link" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "primary_link" - } - }, - { - "speed": "45 mph", - "tags": { - "highway": "secondary_link" - } - }, - { - "speed": "35 mph", - "tags": { - "highway": "tertiary_link" - } - }, - { - "speed": "15 mph", - "tags": { - "highway": "living_street" - } - } - ], - "Michigan": [ - { - "speed": "70 mph", - "tags": { - "highway": "motorway" - } - } - ], - "Oregon": [ - { - "speed": "55 mph", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "35 mph", - "tags": { - "highway": "secondary" - } - }, - { - "speed": "30 mph", - "tags": { - "highway": "tertiary" - } - }, - { - "speed": "15 mph", - "tags": { - "highway": "service" - } - }, - { - "speed": "35 mph", - "tags": { - "highway": "secondary_link" - } - }, - { - "speed": "30 mph", - "tags": { - "highway": "tertiary_link" - } - } - ], - "New York": [ - { - "speed": "65 mph", - "tags": { - "highway": "motorway" - } - }, - { - "speed": "45 mph", - "tags": { - "highway": "primary" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "secondary" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "tertiary" - } - }, - { - "speed": "30 mph", - "tags": { - "highway": "residential" - } - }, - { - "speed": "45 mph", - "tags": { - "highway": "primary_link" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "secondary_link" - } - }, - { - "speed": "55 mph", - "tags": { - "highway": "tertiary_link" - } - }, - { - "speed": "20 mph", - "tags": { - "highway": "living_street" - } - } - ] - } -} diff --git a/selfdrive/mapd/lib/geo.py b/selfdrive/mapd/lib/geo.py deleted file mode 100644 index 51947481ae..0000000000 --- a/selfdrive/mapd/lib/geo.py +++ /dev/null @@ -1,78 +0,0 @@ -from enum import Enum -import numpy as np - - -R = 6373000.0 # approximate radius of earth in mts - - -def vectors(points): - """Provides a array of vectors on cartesian space (x, y). - Each vector represents the path from a point in `points` to the next. - `points` must by a (N, 2) array of [lat, lon] pairs in radians. - """ - latA = points[:-1, 0] - latB = points[1:, 0] - delta = np.diff(points, axis=0) - dlon = delta[:, 1] - - x = np.sin(dlon) * np.cos(latB) - y = np.cos(latA) * np.sin(latB) - (np.sin(latA) * np.cos(latB) * np.cos(dlon)) - - return np.column_stack((x, y)) - - -def ref_vectors(ref, points): - """Provides a array of vectors on cartesian space (x, y). - Each vector represents the path from ref to a point in `points`. - `points` must by a (N, 2) array of [lat, lon] pairs in radians. - """ - latA = ref[0] - latB = points[:, 0] - delta = points - ref - dlon = delta[:, 1] - - x = np.sin(dlon) * np.cos(latB) - y = np.cos(latA) * np.sin(latB) - (np.sin(latA) * np.cos(latB) * np.cos(dlon)) - - return np.column_stack((x, y)) - - -def bearing_to_points(point, points): - """Calculate the bearings (angle from true north clockwise) of the vectors between `point` and each - one of the entries in `points`. Both `point` and `points` elements are 2 element arrays containing a latitud, - longitude pair in radians. - """ - delta = points - point - x = np.sin(delta[:, 1]) * np.cos(points[:, 0]) - y = np.cos(point[0]) * np.sin(points[:, 0]) - (np.sin(point[0]) * np.cos(points[:, 0]) * np.cos(delta[:, 1])) - return np.arctan2(x, y) - -def point_on_line(start_points, end_points, point, extend_line = False): - """project a single point onto each line for an np array of start points and end points - ref: https://stackoverflow.com/a/61342198 - """ - ap = np.subtract(point, start_points) - ab = np.subtract(end_points, start_points) - t = np.array([np.dot(ap[i], ab[i]) / np.dot(ab[i], ab[i]) for i in range(len(ap))]) - # if you need the the closest point belonging to the segment - if not extend_line: - t = np.maximum(0, np.minimum(1, t)) - result = np.add(start_points, np.array([t[i] * ab[i] for i in range(len(t))])) - return result - -def distance_to_points(point, points): - """Calculate the distance of the vectors between `point` and each one of the entries in `points`. - Both `point` and `points` elements are 2 element arrays containing a latitud, longitude pair in radians. - """ - delta = points - point - a = np.sin(delta[:, 0] / 2)**2 + np.cos(point[0]) * np.cos(points[:, 0]) * np.sin(delta[:, 1] / 2)**2 - c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a)) - return c * R - - -class DIRECTION(Enum): - NONE = 0 - AHEAD = 1 - BEHIND = 2 - FORWARD = 3 - BACKWARD = 4 diff --git a/selfdrive/mapd/lib/helpers.py b/selfdrive/mapd/lib/helpers.py deleted file mode 100644 index ca7dfdfead..0000000000 --- a/selfdrive/mapd/lib/helpers.py +++ /dev/null @@ -1,102 +0,0 @@ -import overpy -import subprocess -import email.utils as eut -import time - -from common.params import Params -from system.version import get_version -from urllib.request import Request, urlopen - - -OSM_LOCAL_PATH = "/data/media/0/osm" -OSM_DB_STAMP_FILE = OSM_LOCAL_PATH + "/db_stamp" -OSM_QUERY = [f"{OSM_LOCAL_PATH}/v0.7.57/bin/osm3s_query", f"--db-dir={OSM_LOCAL_PATH}/db"] -OSM_DB_STAMP_REMOTE = "https://sunnypilot-osm.s3.us-east-2.amazonaws.com/osm-db/timestamps" - - -def get_current_s3_osm_db_timestamp(): - try: - local_osm_db_name = Params().get("OsmLocationName", encoding="utf8") - req = Request(url=f"{OSM_DB_STAMP_REMOTE}/{local_osm_db_name}.txt", headers={"User-Agent": f"sunnypilot-{get_version()}"}) - r = urlopen(req) - if r.status != 200: - print(f'Failed to fetch timestamp for S3 OSM db.\n\n{r.status}') - return None - - timestamp_string = r.read().decode("utf-8").strip() - if timestamp_string is None: - print('Timestamp file for S3 OSM db contained no value.') - return None - - parsed_date = eut.parsedate(timestamp_string) - return time.mktime(parsed_date) - except Exception as e: - print(f'Could not parse timestamp for S3 local osm db.\n\n{e}') - return None - - -def persist_s3_osm_db_timestamp(timestamp): - try: - with open(OSM_DB_STAMP_FILE, 'w') as file: - file.write(f'{timestamp}') - except Exception as e: - print(f'Failed to timestamp local OSM db.\n\n{e}') - - -def get_local_osm_timestamp(): - try: - with open(OSM_DB_STAMP_FILE, 'r') as file: - return float(file.readline()) - except Exception as e: - print(f'Failed to read timestamp for local OSM db.\n\n{e}') - return None - - -def is_osm_db_up_to_date(): - current_osm_ts = get_local_osm_timestamp() - if current_osm_ts is None: - return False - - current_s3_osm_ts = get_current_s3_osm_db_timestamp() - if current_s3_osm_ts is None: - return True - - return current_osm_ts == current_s3_osm_ts - - -def timestamp_local_osm_db(): - current_s3_osm_ts = get_current_s3_osm_db_timestamp() - if current_s3_osm_ts is not None: - persist_s3_osm_db_timestamp(current_s3_osm_ts) - - -def is_local_osm_installed(params=Params()): - api = overpy.Overpass() - waypoint = params.get("OsmWayTest", encoding="utf8") - if waypoint is None: - return False - q = f""" - way({waypoint}); - (._;>;); - out; - """ - - try: - completion = subprocess.run(OSM_QUERY + [f"--request={q}"], check=True, capture_output=True) - print(f'OSM local query returned with exit code: {completion.returncode}') - - if completion.returncode != 0: - return False - - print(f'OSM Local query returned:\n\n{completion.stdout}') - - ways = api.parse_xml(completion.stdout).ways - success = len(ways) == 1 - print(f"Test osm script returned {len(ways)} ways") - print(f'OSM local server query {"succeeded" if success else "failed"}') - - return success - - except Exception as e: - print(e) - return False diff --git a/selfdrive/mapd/lib/osm.py b/selfdrive/mapd/lib/osm.py deleted file mode 100644 index dd931ed95e..0000000000 --- a/selfdrive/mapd/lib/osm.py +++ /dev/null @@ -1,71 +0,0 @@ -import overpy -import subprocess -import numpy as np -from cereal import custom -from common.params import Params -from selfdrive.mapd.lib.geo import R -from selfdrive.mapd.lib.helpers import is_local_osm_installed, OSM_QUERY - -DataType = custom.LiveMapDataSP.DataType - - -def create_way(way_id, node_ids, from_way): - """ - Creates and OSM Way with the given `way_id` and list of `node_ids`, copying attributes and tags from `from_way` - """ - return overpy.Way(way_id, node_ids=node_ids, attributes={}, result=from_way._result, - tags=from_way.tags) - - -class OSM: - def __init__(self): - self.api = overpy.Overpass() - self.param_s = Params() - self._osm_local_db_enabled = self.param_s.get_bool("OsmLocalDb") - self._local_osm_installed = is_local_osm_installed(self.param_s) - # self.api = overpy.Overpass(url='http://3.65.170.21/api/interpreter') - - def _online_query(self, q, area_q): - print("Query OSM from remote server") - query = self.api.query(q + area_q) - areas, ways = query.areas, query.ways - data_type = DataType.online - return areas, ways, data_type - - def fetch_road_ways_around_location(self, lat, lon, radius): - # Calculate the bounding box coordinates for the bbox containing the circle around location. - bbox_angle = np.degrees(radius / R) - # fetch all ways and nodes on this ways in bbox - bbox_str = f'{str(lat - bbox_angle)},{str(lon - bbox_angle)},{str(lat + bbox_angle)},{str(lon + bbox_angle)}' - lat_lon = "(%f,%f)" % (lat, lon) - q = """ - way(""" + bbox_str + """) - [highway] - [highway!~"^(footway|path|corridor|bridleway|steps|cycleway|construction|bus_guideway|escape|service|track)$"]; - (._;>;); - out;""" - area_q = """is_in""" + lat_lon + """;area._[admin_level~"[24]"]; - convert area ::id = id(), admin_level = t['admin_level'], - name = t['name'], "ISO3166-1:alpha2" = t['ISO3166-1:alpha2'];out; - """ - try: - if self._osm_local_db_enabled and self._local_osm_installed: - print("Query OSM from local server") - completion = subprocess.run(OSM_QUERY + [f"--request={q}"], check=True, capture_output=True) - ways = self.api.parse_xml(completion.stdout).ways - if completion.returncode == 0 and len(ways) != 0: - try: - areas = self.api.query(area_q).areas - except Exception as e: - print(f'Exception while querying "AREAS" OSM from local server:\n{e}') - areas = None - data_type = DataType.offline - else: - areas, ways, data_type = self._online_query(q, area_q) - else: - areas, ways, data_type = self._online_query(q, area_q) - except Exception as e: - print(f'Exception while querying OSM:\n{e}') - areas, ways, data_type = [], [], DataType.default - - return areas, ways, data_type diff --git a/selfdrive/mapd/mapd.py b/selfdrive/mapd/mapd.py deleted file mode 100644 index 53d404f77b..0000000000 --- a/selfdrive/mapd/mapd.py +++ /dev/null @@ -1,292 +0,0 @@ -#!/usr/bin/env python3 -import json -import threading -from traceback import print_exception -import numpy as np -from time import strftime, gmtime -from cereal import custom -import cereal.messaging as messaging -from common.params import Params -from common.realtime import set_core_affinity, Ratekeeper -from selfdrive.mapd.lib.osm import OSM -from selfdrive.mapd.lib.geo import distance_to_points -from selfdrive.mapd.lib.WayCollection import WayCollection -from selfdrive.mapd.config import QUERY_RADIUS, QUERY_RADIUS_OFFLINE, MIN_DISTANCE_FOR_NEW_QUERY, FULL_STOP_MAX_SPEED, LOOK_AHEAD_HORIZON_TIME -from system.swaglog import cloudlog - -DataType = custom.LiveMapDataSP.DataType - - -_DEBUG = False -_CLOUDLOG_DEBUG = True -ROAD_NAME_TIMEOUT = 30 # secs - - -def _debug(msg, log_to_cloud=True): - if _CLOUDLOG_DEBUG and log_to_cloud: - cloudlog.debug(msg) - if _DEBUG: - print(msg) - - -def excepthook(args): - _debug(f'MapD: Threading exception:\n{args}') - print_exception(args.exc_type, args.exc_value, args.exc_traceback) - - -threading.excepthook = excepthook - - -class MapD(): - def __init__(self): - self.osm = OSM() - self.way_collection = None - self.route = None - self.last_gps_fix_timestamp = 0 - self.last_gps = None - self.location_deg = None # The current location in degrees. - self.location_rad = None # The current location in radians as a Numpy array. - self.bearing_rad = None - self.location_stdev = None # The current location accuracy in mts. 1 standard devitation. - self.gps_speed = 0. - self.last_fetch_location = None - self.last_route_update_fix_timestamp = 0 - self.last_publish_fix_timestamp = 0 - self.data_type = DataType.default - self._op_enabled = False - self._disengaging = False - self._query_thread = None - self._lock = threading.RLock() - - # dp - use LastGPSPosition as init position (if we are in a undercover car park?) - # this way we can prefetch osm data before we get a fix. - last_pos = Params().get("LastGPSPosition") - if last_pos is not None and last_pos != "": - l = json.loads(last_pos) - lat = float(l["latitude"]) - lon = float(l["longitude"]) - self.location_rad = np.radians(np.array([lat, lon], dtype=float)) - self.location_deg = (lat, lon) - self.bearing_rad = np.radians(0, dtype=float) - _debug("Use LastGPSPosition position - lat: %s, lon: %s" % (lat, lon)) - - def udpate_state(self, sm): - sock = 'carControl' - if not sm.updated[sock] or not sm.valid[sock]: - return - - hud_control = sm[sock].hudControl - self._disengaging = not hud_control.speedVisible and self._op_enabled - self._op_enabled = hud_control.speedVisible - - def update_gps(self, sm): - sock = 'gpsLocationExternal' - if not sm.updated[sock] or not sm.valid[sock]: - return - - log = sm[sock] - self.last_gps = log - - # ignore the message if the fix is invalid - if log.flags % 2 == 0: - return - - self.last_gps_fix_timestamp = log.unixTimestampMillis # Unix TS. Milliseconds since January 1, 1970. - self.location_rad = np.radians(np.array([log.latitude, log.longitude], dtype=float)) - self.location_deg = (log.latitude, log.longitude) - self.bearing_rad = np.radians(log.bearingDeg, dtype=float) - self.gps_speed = log.speed - self.location_stdev = log.accuracy # log accuracies are presumably 1 standard deviation. - - _debug('Mapd: ********* Got GPS fix' - + f'Pos: {self.location_deg} +/- {self.location_stdev * 2.} mts.\n' - + f'Bearing: {log.bearingDeg} +/- {log.bearingAccuracyDeg * 2.} deg.\n' - + f'timestamp: {strftime("%d-%m-%y %H:%M:%S", gmtime(self.last_gps_fix_timestamp * 1e-3))}' - + '*******', log_to_cloud=False) - - def _query_osm_not_blocking(self): - def query(osm, location_deg, location_rad, radius): - _debug(f'Mapd: Start query for OSM map data at {location_deg}') - lat, lon = location_deg - areas, ways, self.data_type = osm.fetch_road_ways_around_location(lat, lon, radius) - _debug(f'Mapd: Query to OSM finished with {len(ways)} ways') - - # Only issue an update if we received some ways. Otherwise it is most likely a connectivity issue. - # Will retry on next loop. - if len(ways) > 0: - new_way_collection = WayCollection(areas, ways, location_rad) - - # Use the lock to update the way_collection as it might be being used to update the route. - _debug('Mapd: Locking to write results from osm.', log_to_cloud=False) - with self._lock: - self.way_collection = new_way_collection - self.last_fetch_location = location_rad - _debug(f'Mapd: Updated map data @ {location_deg} - got {len(ways)} ways') - - _debug('Mapd: Releasing Lock to write results from osm', log_to_cloud=False) - - # Ignore if we have a query thread already running. - if self._query_thread is not None and self._query_thread.is_alive(): - return - - self._query_thread = threading.Thread(target=query, args=(self.osm, self.location_deg, self.location_rad, - QUERY_RADIUS_OFFLINE if self.data_type == DataType.offline else QUERY_RADIUS)) - self._query_thread.start() - - def updated_osm_data(self): - if self.route is not None: - distance_to_end = self.route.distance_to_end - if distance_to_end is not None and distance_to_end >= MIN_DISTANCE_FOR_NEW_QUERY: - # do not query as long as we have a route with enough distance ahead. - return - - if self.location_rad is None: - return - - if self.last_fetch_location is not None: - distance_since_last = distance_to_points(self.last_fetch_location, np.array([self.location_rad]))[0] - if distance_since_last < (QUERY_RADIUS_OFFLINE if self.data_type == DataType.offline else QUERY_RADIUS) - MIN_DISTANCE_FOR_NEW_QUERY: - # do not query if are still not close to the border of previous query area - return - - self._query_osm_not_blocking() - - def update_route(self): - def update_proc(): - # Ensure we clear the route on op disengage, this way we can correct possible incorrect map data due - # to wrongly locating or picking up the wrong route. - if self._disengaging: - self.route = None - _debug('Mapd *****: Clearing Route as system is disengaging. ********') - - if self.way_collection is None or self.location_rad is None or self.bearing_rad is None: - _debug('Mapd *****: Can not update route. Missing WayCollection, location or bearing ********') - return - - if self.route is not None and self.last_route_update_fix_timestamp == self.last_gps_fix_timestamp: - _debug('Mapd *****: Skipping route update. No new fix since last update ********') - return - - self.last_route_update_fix_timestamp = self.last_gps_fix_timestamp - - # Create the route if not existent or if it was generated by an older way collection - if self.route is None or self.route.way_collection_id != self.way_collection.id: - self.route = self.way_collection.get_route(self.location_rad, self.bearing_rad, self.location_stdev) - _debug(f'Mapd *****: Route created: \n{self.route}\n********') - return - - # Do not attempt to update the route if the car is going close to a full stop, as the bearing can start - # jumping and creating unnecessary losing of the route. Since the route update timestamp has been updated - # a new liveMapDataSP message will be published with the current values (which is desirable) - if self.gps_speed < FULL_STOP_MAX_SPEED: - _debug('Mapd *****: Route Not updated as car has Stopped ********') - return - - self.route.update(self.location_rad, self.bearing_rad, self.location_stdev) - if self.route.located: - _debug(f'Mapd *****: Route updated: \n{self.route}\n********') - return - - # if an old route did not mange to locate, attempt to regenerate form way collection. - self.route = self.way_collection.get_route(self.location_rad, self.bearing_rad, self.location_stdev) - _debug(f'Mapd *****: Failed to update location in route. Regenerated with route: \n{self.route}\n********') - - # We use the lock when updating the route, as it reads `way_collection` which can ben updated by - # a new query result from the _query_thread. - _debug('Mapd: Locking to update route.', log_to_cloud=False) - with self._lock: - update_proc() - - _debug('Mapd: Releasing Lock to update route', log_to_cloud=False) - - def publish(self, pm, sm): - # Ensure we have a route currently located - if self.route is None or not self.route.located: - _debug('Mapd: Skipping liveMapDataSP message as there is no route or is not located.') - return - - # Ensure we have a route update since last publish - if self.last_publish_fix_timestamp == self.last_route_update_fix_timestamp: - _debug('Mapd: Skipping liveMapDataSP since there is no new gps fix.') - return - - self.last_publish_fix_timestamp = self.last_route_update_fix_timestamp - - speed_limit = self.route.current_speed_limit - next_speed_limit_section = self.route.next_speed_limit_section - turn_speed_limit_section = self.route.current_curvature_speed_limit_section - horizon_mts = self.gps_speed * LOOK_AHEAD_HORIZON_TIME - next_turn_speed_limit_sections = self.route.next_curvature_speed_limit_sections(horizon_mts) - current_road_name = self.route.current_road_name - - map_data_msg = messaging.new_message('liveMapDataSP') - map_data_msg.valid = sm.all_alive(service_list=['gpsLocationExternal']) and \ - sm.all_valid(service_list=['gpsLocationExternal']) - - liveMapDataSP = map_data_msg.liveMapDataSP - liveMapDataSP.lastGpsTimestamp = self.last_gps.unixTimestampMillis - liveMapDataSP.lastGpsLatitude = float(self.last_gps.latitude) - liveMapDataSP.lastGpsLongitude = float(self.last_gps.longitude) - liveMapDataSP.lastGpsSpeed = float(self.last_gps.speed) - liveMapDataSP.lastGpsBearingDeg = float(self.last_gps.bearingDeg) - liveMapDataSP.lastGpsAccuracy = float(self.last_gps.accuracy) - liveMapDataSP.lastGpsBearingAccuracyDeg = float(self.last_gps.bearingAccuracyDeg) - - liveMapDataSP.speedLimitValid = bool(speed_limit is not None) - liveMapDataSP.speedLimit = float(speed_limit if speed_limit is not None else 0.0) - liveMapDataSP.speedLimitAheadValid = bool(next_speed_limit_section is not None) - liveMapDataSP.speedLimitAhead = float(next_speed_limit_section.value - if next_speed_limit_section is not None else 0.0) - liveMapDataSP.speedLimitAheadDistance = float(next_speed_limit_section.start - if next_speed_limit_section is not None else 0.0) - - liveMapDataSP.turnSpeedLimitValid = bool(turn_speed_limit_section is not None) - liveMapDataSP.turnSpeedLimit = float(turn_speed_limit_section.value - if turn_speed_limit_section is not None else 0.0) - liveMapDataSP.turnSpeedLimitSign = int(turn_speed_limit_section.curv_sign - if turn_speed_limit_section is not None else 0) - liveMapDataSP.turnSpeedLimitEndDistance = float(turn_speed_limit_section.end - if turn_speed_limit_section is not None else 0.0) - liveMapDataSP.turnSpeedLimitsAhead = [float(s.value) for s in next_turn_speed_limit_sections] - liveMapDataSP.turnSpeedLimitsAheadDistances = [float(s.start) for s in next_turn_speed_limit_sections] - liveMapDataSP.turnSpeedLimitsAheadSigns = [float(s.curv_sign) for s in next_turn_speed_limit_sections] - - liveMapDataSP.currentRoadName = str(current_road_name if current_road_name is not None else "") - - map_data_msg.liveMapDataSP.dataType = self.data_type - - pm.send('liveMapDataSP', map_data_msg) - _debug(f'Mapd *****: Publish: \n{map_data_msg}\n********', log_to_cloud=False) - - -# provides live map data information -def mapd_thread(sm=None, pm=None): - try: - set_core_affinity([0, 1, 2, 3]) - except Exception: - cloudlog.exception("mapd: failed to set core affinity") - mapd = MapD() - rk = Ratekeeper(1., print_delay_threshold=None) # Keeps rate at 1 hz - - # *** setup messaging - if sm is None: - sm = messaging.SubMaster(['gpsLocationExternal', 'carControl']) - if pm is None: - pm = messaging.PubMaster(['liveMapDataSP']) - - while True: - sm.update() - mapd.udpate_state(sm) - mapd.update_gps(sm) - mapd.updated_osm_data() - mapd.update_route() - mapd.publish(pm, sm) - rk.keep_time() - - -def main(sm=None, pm=None): - mapd_thread(sm, pm) - - -if __name__ == "__main__": - main() diff --git a/selfdrive/mapd/sp_osm_db.json b/selfdrive/mapd/sp_osm_db.json deleted file mode 100644 index 6e625918c0..0000000000 --- a/selfdrive/mapd/sp_osm_db.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "== None ==": { - "name": "", - "waypoint": "", - "url": "" - }, - "Australia": { - "name": "australia", - "waypoint": "514911884", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EathcAhPP8dHiTdBiFPIGYoB7zwlUR79OkSTH5dnS-9Shg?e=9cS6er&download=1" - }, - "Brazil": { - "name": "brazil", - "waypoint": "124199196", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EXWcrd8ukahDtoFDXVOxvkYBjGGa9b29fVvRdJlADv3YdA?e=jwabo2&download=1" - }, - "Canada": { - "name": "canada", - "waypoint": "68588664", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ETpwTMZftJpCkep2goPmzUQBl5SW_YfHBKLTd7w5CUagkA?e=dshC10&download=1" - }, - "GCC States": { - "name": "gcc-states", - "waypoint": "69021390", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EWtFOVR9mj5CoRpATYR0_tUBWNEcy5jeasp8zO0ZYdduRg?e=Cg0l2Z&download=1" - }, - "Germany": { - "name": "germany", - "waypoint": "461526153", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EbNzQuA8jHBCuGch1WY4cuoBJfK1S6m5odj5qMnOu3HA3Q?e=cNDn30&download=1" - }, - "Malaysia, Singapore, Brunei": { - "name": "malaysia-singapore-brunei", - "waypoint": "1112741782", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EQb9bq_YkE1NuFx0jp-52zoBnAbdo4nyLXMnEY1pUbCB8g?e=CoFiUJ&download=1" - }, - "New Zealand": { - "name": "new-zealand", - "waypoint": "154430132", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EVI6eMuNa4dJpXg-r92Vw1EBq5RxR83_7Z5C56AYftg8xQ?e=xouRBl&download=1" - }, - "South Africa": { - "name": "south-africa", - "waypoint": "2729449", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EQzbZeus-yBNsgP1KQyLn9wBYZVMMknVoHdB7_ewulLbdA?e=DrnKkb&download=1" - }, - "Taiwan": { - "name": "taiwan", - "waypoint": "198637969", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EXgP3Z5_lsBPiQe-aXOOSY4Bu-r54Z_3kKKmT8-IqLO42A?e=tOhUYw&download=1" - }, - "Turkey": { - "name": "turkey", - "waypoint": "698359658", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EWJRrYpV7I1IvOW0LUWrDsUBjEjuKRTla0hA4yRbsVX2xw?e=RGcu8n&download=1" - }, - "US - Florida": { - "name": "florida", - "waypoint": "147221754", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ET9rAvCaretAnO4TjocAddkBFxAziblxblAn9YWzGk5hTw?e=tts5Oz&download=1" - }, - "US - Midwest": { - "name": "us-midwest", - "waypoint": "1059596607", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EaDYnugxokRHhOukMndJuZMBKz-kzPfM6C_-iQcki-r94Q?e=oUX6hz&download=1" - }, - "US - Northeast": { - "name": "us-northeast", - "waypoint": "575213527", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ERrlIKNuT4ZIuUOfr4a3BwABLfd7X1wSq9nUrk9buKrIgA?e=HHIT8R&download=1" - }, - "US - Pacific": { - "name": "us-pacific", - "waypoint": "112909709", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EQOzoMksk9tAluahQ2qm3rQBHOZD03qFU8Aw4o-TFUTuJA?e=CcBOxL&download=1" - }, - "US - South": { - "name": "us-south", - "waypoint": "243729876", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ETizacxh8lFNk8NMVRyKCEsBMMYZl1iq0r-D4IWoOAd_DQ?e=EVIElm&download=1" - }, - "US - West": { - "name": "us-west", - "waypoint": "30023440", - "url": "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ETTRiSKwlEVKoRHtylruy7wBKgITKXdaCUAkJMuGAN2_mA?e=7jlglL&download=1" - } -} diff --git a/selfdrive/mapd/test/mock_data.py b/selfdrive/mapd/test/mock_data.py deleted file mode 100644 index ea26da4e46..0000000000 --- a/selfdrive/mapd/test/mock_data.py +++ /dev/null @@ -1,266 +0,0 @@ -from selfdrive.mapd.lib.WayCollection import WayCollection -from selfdrive.mapd.lib.geo import vectors, R -from selfdrive.mapd.lib.NodesData import _MIN_NODE_DISTANCE, _ADDED_NODES_DIST, _SPLINE_EVAL_STEP, \ - _MIN_SPEED_SECTION_LENGTH, nodes_raw_data_array_for_wr, node_calculations, is_wr_a_valid_divertion_from_node, \ - spline_curvature_calculations, speed_limits_for_curvatures_data -from scipy.interpolate import splev, splprep -import numpy as np -import overpy - - -class MockNodesData(): - def __init__(self, way_coords): - self.degrees = np.array(way_coords) - self.radians = np.radians(self.degrees) - - # ***************** - # Expected code implementation nodes_data - self.v = vectors(self.radians) * R - self.d = np.linalg.norm(self.v, axis=1) - self.b = np.arctan2(self.v[:, 0], self.v[:, 1]) - self.v = np.concatenate(([[0., 0.]], self.v)) - self.dp = np.concatenate(([0.], self.d)) - self.dn = np.concatenate((self.d, [0.])) - self.dr = np.cumsum(self.dp, axis=0) - self.b = np.concatenate((self.b, [self.b[-1]])) - - # Expected code implementation spline_curvature_calculations - vect = self.v - dist_prev = self.dp - too_far_idxs = np.nonzero(self.dp >= _MIN_NODE_DISTANCE)[0] - for idx in too_far_idxs[::-1]: - dp = dist_prev[idx] # distance of vector that needs to be replaced by higher resolution vectors. - n = int(np.ceil(dp / _ADDED_NODES_DIST)) # number of vectors that need to be added. - new_v = vect[idx, :] / n # new relative vector to insert. - vect = np.delete(vect, idx, axis=0) # remove the relative vector to be replaced by the insertion of new vectors. - vect = np.insert(vect, [idx] * n, [new_v] * n, axis=0) # insert n new relative vectors - ds = np.cumsum(dist_prev, axis=0) - vs = np.cumsum(vect, axis=0) - tck, u = splprep([vs[:, 0], vs[:, 1]]) # pylint: disable=W0632 - n = max(int(ds[-1] / _SPLINE_EVAL_STEP), len(u)) - unew = np.arange(0, n + 1) / n - d1 = splev(unew, tck, der=1) - d2 = splev(unew, tck, der=2) - num = d1[0] * d2[1] - d1[1] * d2[0] - den = (d1[0]**2 + d1[1]**2)**(1.5) - self.curv = num / den - self.curv_ds = unew * ds[-1] - # ***************** - - -class MockCurveSection(): - def __init__(self, func, di=0., df=1000., step=10.): - self.di = di - self.df = df - self.n = (df - di) // step - self.u = np.arange(0, self.n + 1) / self.n - self.curv_ds = self.u * (df - di) + di - self.curv = func(self.u) - self.curv_abs = np.abs(self.curv) - self.curv_sec = np.column_stack((self.curv_abs, np.sign(self.curv), self.curv_ds)) - - -class MockOSMQueryResponse(): - def __init__(self, xml_path, query_center): - self.api = overpy.Overpass() - self.query_center = np.radians(np.array(query_center)) - - with open(xml_path, 'r') as f: - overpass_xml = f.read() - self.ways = self.api.parse_xml(overpass_xml).ways - - self.wayCollection = WayCollection(self.ways, self.query_center) - -class MockRouteData(): - def __init__(self, way_ids, way_collection, first_node_id): # way)ids must be in order forming a route. - self.wrs = [next(wr for wr in way_collection.way_relations if wr.id == way_id) for way_id in way_ids] - self.way_collection = way_collection - self.first_node_id = first_node_id - - def reset(self): - way_relations = self.wrs - wr_index = self.way_collection.wr_index - - # Nodes Data processing expects way relations to be updated with direction before running. - for idx, wr in enumerate(way_relations): - if idx == 0: - wr.update_direction_from_starting_node(self.first_node_id) - else: - wr.update_direction_from_starting_node(way_relations[idx - 1].last_node.id) - - # ***** Expected calculations - self._nodes_data = np.array([]) - self._divertions = [[]] - self._curvature_speed_sections_data = np.array([]) - way_count = len(way_relations) - if way_count == 0: - return - # We want all the nodes from the last way section - nodes_data = nodes_raw_data_array_for_wr(way_relations[-1]) - # For the ways before the last in the route we want all the nodes but the last, as that one is the first on - # the next section. Collect them, append last way node data and concatenate the numpy arrays. - if way_count > 1: - wrs_data = tuple([nodes_raw_data_array_for_wr(wr, drop_last=True) for wr in way_relations[:-1]]) - wrs_data += (nodes_data,) - nodes_data = np.concatenate(wrs_data) - # Get a subarray with lat, lon to compute the remaining node values. - lat_lon_array = nodes_data[:, [1, 2]] - points = np.radians(lat_lon_array) - # Ensure we have more than 3 points, if not calculations are not possible. - if len(points) <= 3: - return - vect, dist_prev, dist_next, dist_route, bearing = node_calculations(points) - # append calculations to nodes_data - # nodes_data structure: [id, lat, lon, speed_limit, x, y, dist_prev, dist_next, dist_route, bearing] - self._nodes_data = np.column_stack((nodes_data, vect, dist_prev, dist_next, dist_route, bearing)) - # Build route diversion options data from the wr_index. - wr_ids = [wr.id for wr in way_relations] - self._divertions = [[wr for wr in wr_index.way_relations_with_edge_node_id(node_id) - if is_wr_a_valid_divertion_from_node(wr, node_id, wr_ids)] - for node_id in nodes_data[:, 0]] - # Store calculcations for curvature sections speed limits. We need more than 3 points to be able to process. - # _curvature_speed_sections_data structure: [dist_start, dist_stop, speed_limits, curv_sign] - if len(vect) > 3: - self._curv, self._curv_ds = spline_curvature_calculations(vect, dist_prev) - self._curvature_speed_sections_data = speed_limits_for_curvatures_data(self._curv, self._curv_ds) - # ***** - - -# Test data in degrees from this road: -# https://www.google.de/maps/@52.209263,13.8723137,13z -_WAY_NODES_COORDS_01 = [ - [52.1933703, 13.8723799], - [52.1939477, 13.8711273], - [52.1942004, 13.8705818], - [52.1945408, 13.8698496], - [52.1948447, 13.8691873], - [52.1950772, 13.8685726], - [52.1951168, 13.8684641], - [52.1956681, 13.8670323], - [52.1958716, 13.8664936], - [52.1964366, 13.8649875], - [52.1969283, 13.8636040], - [52.1970203, 13.8634430], - [52.1975486, 13.8626307], - [52.1976354, 13.8624971], - [52.1977827, 13.8621795], - [52.1978564, 13.8619220], - [52.1981843, 13.8604497], - [52.1982614, 13.8602140], - [52.1983351, 13.8600595], - [52.1992768, 13.8579824], - [52.1995107, 13.8574321], - [52.1995948, 13.8572604], - [52.1996818, 13.8571155], - [52.1998000, 13.8570029], - [52.2000659, 13.8568236], - [52.2003868, 13.8566005], - [52.2007182, 13.8564460], - [52.2008760, 13.8564117], - [52.2009865, 13.8564117], - [52.2011390, 13.8564202], - [52.2012267, 13.8564496], - [52.2012544, 13.8564577], - [52.2013179, 13.8564803], - [52.2020491, 13.8571756], - [52.2026014, 13.8576991], - [52.2027592, 13.8578879], - [52.2027960, 13.8579309], - [52.2028960, 13.8580939], - [52.2030170, 13.8583343], - [52.2036587, 13.8597076], - [52.2052946, 13.8633039], - [52.2064332, 13.8658435], - [52.2067856, 13.8666332], - [52.2068961, 13.8668477], - [52.2070777, 13.8670890], - [52.2073723, 13.8674409], - [52.2077457, 13.8679387], - [52.2083874, 13.8687455], - [52.2093341, 13.8699214], - [52.2099652, 13.8707540], - [52.2102282, 13.8712089], - [52.2104228, 13.8715694], - [52.2106122, 13.8718955], - [52.2107619, 13.8721756], - [52.2108695, 13.8723771], - [52.2110747, 13.8727610], - [52.2111514, 13.8729047], - [52.2114010, 13.8733718], - [52.2114694, 13.8735006], - [52.2115430, 13.8736636], - [52.2116086, 13.8737571], - [52.2116770, 13.8738172], - [52.2117611, 13.8738515], - [52.2118664, 13.8738566], - [52.2119322, 13.8738439], - [52.2121058, 13.8737924], - [52.2122583, 13.8737495], - [52.2123265, 13.8737260], - [52.2124213, 13.8736894], - [52.2127466, 13.8734888], - [52.2128263, 13.8734491], - [52.2131313, 13.8733117], - [52.2133943, 13.8731830], - [52.2136625, 13.8731057], - [52.2139465, 13.8730456], - [52.2143619, 13.8730113], - [52.2148773, 13.8729942], - [52.2152275, 13.8730325], - [52.2153110, 13.8730398], - [52.2157442, 13.8730848], - [52.2158833, 13.8731036]] - - -mockNodesData01 = MockNodesData(_WAY_NODES_COORDS_01) - -# OSM Query around B96 south of Berlin -mockOSMResponse01 = MockOSMQueryResponse('selfdrive/mapd/test/mock_osm_response_01.xml', - [52.31400353586984, 13.447158941786366]) - -# OSM Query on curvy town area south of Germany. -mockOSMResponse02 = MockOSMQueryResponse('selfdrive/mapd/test/mock_osm_response_02.xml', - [48.16573269276522, 9.81418473659117]) - -mockWayCollection01 = WayCollection(mockOSMResponse01.ways, mockOSMResponse01.query_center) -mockWayCollection02 = WayCollection(mockOSMResponse02.ways, mockOSMResponse02.query_center) - -# Normal curvy Way. way id: 179532213 with 35 Nodes. -mockOSMWay_01_01_LongCurvy = next(way for way in mockOSMResponse01.ways if way.id == 179532213) - -# Looped way. way id: 29233907 -mockOSMWay_01_02_Loop = next(way for way in mockOSMResponse01.ways if way.id == 29233907) - -# Complex curvy road through town with intersections. way id:178450395 -mockOSMWay_02_01_CurvyTownWithIntersections = next(way for way in mockOSMResponse02.ways if way.id == 178450395) - -# Valid diversion for way 02_01 at node: 34785115. way id: 27955186 -mockOSMWay_02_02_Divertion_34785115 = next(way for way in mockOSMResponse02.ways if way.id == 27955186) - -# 3 node way. way id: 807781992 -mockOSMWay_02_03_Short_3_node_way = next(way for way in mockOSMResponse02.ways if way.id == 807781992) - -# data composing route 01 in way collection 02 -mockRouteData_02_01 = MockRouteData([60890967, 737120246, 601406617, 60890971, 178450395], mockWayCollection02, - first_node_id=201962346) - -# data composing route 02 in way collection 02. Single WR -mockRouteData_02_02_single_wr = MockRouteData([178450395], mockWayCollection02, first_node_id=762086638) - -# data composing route 03 in way collection 02. Multiple speed limits -mockRouteData_02_03 = MockRouteData([158799549, 798805532, 28707704, 158797898, 602249535, 602249536, 825823509, - 178449088, 916462523, 158796386], mockWayCollection02, - first_node_id=252601829) - -# 1000mt section with one full sin cycle as curv values. -mockCurveSectionSin = MockCurveSection(lambda x: np.sin(x * 2 * np.pi)) - -# 200mt section with changing curvature rate. -mockCurveSteepCurvChange = MockCurveSection(lambda x: 0.05 * x**3 - 0.007 * x**2 + 0.001 * x, df=200) - -# _MIN_SPEED_SECTION_LENGTH section with changing curvature rate. -mockCurveSteepCurvChangeShort = MockCurveSection( - lambda x: 0.05 * x**3 - 0.007 * x**2 + 0.001 * x, df=_MIN_SPEED_SECTION_LENGTH) - -# 200mt section with smooth changing curvature rate. no deviation over 2. -mockCurveSmoothCurveChange = MockCurveSection(lambda x: 0.0002 * x**3 - 0.001 * x**2 + 0.6 * x, df=200) diff --git a/selfdrive/mapd/test/mock_osm_response_01.xml b/selfdrive/mapd/test/mock_osm_response_01.xml deleted file mode 100644 index 7d9a8cf56f..0000000000 --- a/selfdrive/mapd/test/mock_osm_response_01.xml +++ /dev/null @@ -1,9908 +0,0 @@ - - - -The data included in this document is from www.openstreetmap.org. The data is made available under ODbL. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/selfdrive/mapd/test/mock_osm_response_02.xml b/selfdrive/mapd/test/mock_osm_response_02.xml deleted file mode 100644 index 85886017a1..0000000000 --- a/selfdrive/mapd/test/mock_osm_response_02.xml +++ /dev/null @@ -1,11529 +0,0 @@ - - - -The data included in this document is from www.openstreetmap.org. The data is made available under ODbL. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/selfdrive/mapd/test/test_NodesData.py b/selfdrive/mapd/test/test_NodesData.py deleted file mode 100644 index 0138173b90..0000000000 --- a/selfdrive/mapd/test/test_NodesData.py +++ /dev/null @@ -1,354 +0,0 @@ -import unittest -import numpy as np -from selfdrive.mapd.lib.geo import DIRECTION -from common.conversions import Conversions as CV -from selfdrive.mapd.lib.WayRelation import WayRelation -from selfdrive.mapd.lib.NodesData import nodes_raw_data_array_for_wr, node_calculations, \ - spline_curvature_calculations, split_speed_section_by_sign, split_speed_section_by_curv_degree, speed_section, \ - speed_limits_for_curvatures_data, is_wr_a_valid_divertion_from_node, SpeedLimitSection, TurnSpeedLimitSection, \ - NodesData, NodeDataIdx -from selfdrive.mapd.test.mock_data import mockOSMWay_01_01_LongCurvy, mockNodesData01, mockCurveSectionSin, \ - mockCurveSteepCurvChange, mockCurveSteepCurvChangeShort, mockCurveSmoothCurveChange, \ - mockOSMWay_02_01_CurvyTownWithIntersections, mockOSMWay_02_02_Divertion_34785115, mockOSMWay_02_03_Short_3_node_way, \ - mockRouteData_02_01, mockRouteData_02_02_single_wr, mockRouteData_02_03 -from numpy.testing import assert_array_almost_equal - - -class TestNodesDataFileFunctions(unittest.TestCase): - def test_nodes_raw_data_array_for_wr(self): - wr = WayRelation(mockOSMWay_01_01_LongCurvy) - data_e = np.array([(n.id, n.lat, n.lon, wr.speed_limit) for n in wr.way.nodes], dtype=float) - data = nodes_raw_data_array_for_wr(wr) - - assert_array_almost_equal(data, data_e) - - def test_nodes_raw_data_array_for_wr_flips_when_backwards(self): - wr = WayRelation(mockOSMWay_01_01_LongCurvy) - wr.direction = DIRECTION.BACKWARD - - data_e = np.array([(n.id, n.lat, n.lon, wr.speed_limit) for n in wr.way.nodes], dtype=float) - data_e = np.flip(data_e, axis=0) - - data = nodes_raw_data_array_for_wr(wr) - - assert_array_almost_equal(data, data_e) - - def test_nodes_raw_data_array_for_wr_drops_last(self): - wr = WayRelation(mockOSMWay_01_01_LongCurvy) - data_e = np.array([(n.id, n.lat, n.lon, wr.speed_limit) for n in wr.way.nodes], dtype=float)[:-1] - data = nodes_raw_data_array_for_wr(wr, drop_last=True) - - assert_array_almost_equal(data, data_e) - - def test_node_calculations(self): - points = mockNodesData01.radians - - v, dp, dn, dr, b = node_calculations(points) - - assert_array_almost_equal(v, mockNodesData01.v) - assert_array_almost_equal(dp, mockNodesData01.dp) - assert_array_almost_equal(dn, mockNodesData01.dn) - assert_array_almost_equal(dr, mockNodesData01.dr) - assert_array_almost_equal(b, mockNodesData01.b) - - def test_node_calculations_index_error(self): - points = mockNodesData01.radians[:2] - - with self.assertRaises(IndexError): - node_calculations(points) - - def test_spline_curvature_calculations(self): - vect = mockNodesData01.v - dist_prev = mockNodesData01.dp - - curv, curv_ds = spline_curvature_calculations(vect, dist_prev) - - assert_array_almost_equal(curv, mockNodesData01.curv) - assert_array_almost_equal(curv_ds, mockNodesData01.curv_ds) - - def test_spline_curvature_calculations_with_route_data(self): - mockRouteData_02_01.reset() - nodes_data = mockRouteData_02_01._nodes_data - vect = np.column_stack((nodes_data[:, 4], nodes_data[:, 5])) - dist_prev = nodes_data[:, 6] - - curv, curv_ds = spline_curvature_calculations(vect, dist_prev) - - assert_array_almost_equal(curv, mockRouteData_02_01._curv) - assert_array_almost_equal(curv_ds, mockRouteData_02_01._curv_ds) - - def test_split_speed_section_by_sign(self): - curv_sec = mockCurveSectionSin.curv_sec - new_secs = split_speed_section_by_sign(curv_sec) - - # 3 sections with matching initial and final distance - self.assertEqual(len(new_secs), 3) - self.assertEqual(new_secs[0][0][2], mockCurveSectionSin.di) - self.assertEqual(new_secs[2][-1][2], mockCurveSectionSin.df) - - # All new sections has same sign internally - for sec in new_secs: - self.assertEqual(np.average(sec, axis=0)[1], sec[0][1]) - - # Sections change sign - for idx in range(2): - self.assertNotEqual(new_secs[idx][0][1], new_secs[idx + 1][0][1]) - - # total items consistency - lengths = [len(sec) for sec in new_secs] - self.assertEqual(len(curv_sec), sum(lengths)) - - def test_split_speed_section_by_curv_degree(self): - curv_sec = mockCurveSteepCurvChange.curv_sec - new_secs = split_speed_section_by_curv_degree(curv_sec) - - # 3 sections with matching initial and final distance - self.assertEqual(len(new_secs), 3) - self.assertEqual(new_secs[0][0][2], mockCurveSteepCurvChange.di) - self.assertEqual(new_secs[2][-1][2], mockCurveSteepCurvChange.df) - - # Sections split at the right points - split_dist = [sec[-1][2] for sec in new_secs] - self.assertListEqual(split_dist, [50., 150., 200.]) - - def test_split_speed_section_by_curv_degree_does_nothing_if_short(self): - curv_sec = mockCurveSteepCurvChangeShort.curv_sec - new_secs = split_speed_section_by_curv_degree(curv_sec) - - self.assertEqual(len(new_secs), 1) - assert_array_almost_equal(curv_sec, new_secs[0]) - - def test_split_speed_section_by_curv_degree_does_nothing_if_no_substantial_change(self): - curv_sec = mockCurveSmoothCurveChange.curv_sec - new_secs = split_speed_section_by_curv_degree(curv_sec) - - self.assertEqual(len(new_secs), 1) - assert_array_almost_equal(curv_sec, new_secs[0]) - - def test_speed_section(self): - curv_sec = mockCurveSectionSin.curv_sec - - speed_secs = speed_section(curv_sec) - expected = np.array([0., 1000., 1.51657509, 1.]) - - assert_array_almost_equal(speed_secs, expected) - - def test_speed_limits_for_curvatures_data(self): - curv = mockCurveSectionSin.curv - curv_ds = mockCurveSectionSin.curv_ds - - expected = np.array([ - [10., 490., 1.51657509, 1.], - [510., 990., 1.51657509, -1.]]) - limits = speed_limits_for_curvatures_data(curv, curv_ds) - - assert_array_almost_equal(limits, expected) - - def test_is_wr_a_valid_divertion_from_node(self): - wr = WayRelation(mockOSMWay_02_01_CurvyTownWithIntersections) - mockOSMWay_02_02_Divertion_34785115.tags['oneway'] = 'yes' - wr_div = WayRelation(mockOSMWay_02_02_Divertion_34785115) - - # False if id already in route - wr_ids = [wr.id, wr_div.id] - self.assertFalse(is_wr_a_valid_divertion_from_node(wr_div, 34785115, wr_ids)) - - # True if id not in route, node_id is edge and not prohibited - wr_ids = [wr.id, 11111, 22222] - self.assertTrue(is_wr_a_valid_divertion_from_node(wr_div, 34785115, wr_ids)) - - # False if id not in route, node_id is edge but prohibited (wrong direction from node 319503453) - self.assertFalse(is_wr_a_valid_divertion_from_node(wr_div, 319503453, wr_ids)) - - # False if id not in route, node_id is not edge - self.assertFalse(is_wr_a_valid_divertion_from_node(wr_div, 44444, wr_ids)) - - -class TestSpeedLimitSection(unittest.TestCase): - def test_speed_limit_section_init(self): - section = SpeedLimitSection(10., 20., 50.) - - self.assertEqual(section.start, 10.) - self.assertEqual(section.end, 20.) - self.assertEqual(section.value, 50.) - - -class TestTurnSpeedLimitSection(unittest.TestCase): - def test_turn_speed_limit_section_init(self): - section = TurnSpeedLimitSection(10., 20., 50., -1.) - - self.assertEqual(section.start, 10.) - self.assertEqual(section.end, 20.) - self.assertEqual(section.value, 50.) - self.assertEqual(section.curv_sign, -1.) - - -class TestNodesData(unittest.TestCase): - def test_init_with_empty_list(self): - nodesData = NodesData([], {}) - - self.assertEqual(len(nodesData._nodes_data), 0) - num_diverstions = sum([len(d) for d in nodesData._divertions]) - self.assertEqual(num_diverstions, 0) - self.assertEqual(len(nodesData._curvature_speed_sections_data), 0) - - def test_init_with_single_wr_includes_all_wr_nodes(self): - mockRouteData_02_02_single_wr.reset() - way_relations = mockRouteData_02_02_single_wr.wrs - wr_index = mockRouteData_02_02_single_wr.way_collection.wr_index - - nodesData = NodesData(way_relations, wr_index) - - assert_array_almost_equal(nodesData._nodes_data, mockRouteData_02_02_single_wr._nodes_data) - assert_array_almost_equal(nodesData._curvature_speed_sections_data, - mockRouteData_02_02_single_wr._curvature_speed_sections_data) - self.assertListEqual(nodesData._divertions, mockRouteData_02_02_single_wr._divertions) - self.assertEqual(len(nodesData._nodes_data), len(way_relations[0].way.nodes)) - self.assertEqual(len(nodesData._curvature_speed_sections_data), 6) - num_diverstions = sum([len(d) for d in nodesData._divertions]) - self.assertEqual(num_diverstions, 6) - - def test_init_with_less_than_4_nodes(self): - wr_t = WayRelation(mockOSMWay_02_03_Short_3_node_way) - - nodesData = NodesData([wr_t], {}) - - self.assertEqual(len(nodesData._nodes_data), 0) - num_diverstions = sum([len(d) for d in nodesData._divertions]) - self.assertEqual(num_diverstions, 0) - self.assertEqual(len(nodesData._curvature_speed_sections_data), 0) - - def test_init_with_multiple_wr(self): - mockRouteData_02_01.reset() - way_relations = mockRouteData_02_01.wrs - wr_index = mockRouteData_02_01.way_collection.wr_index - - nodesData = NodesData(way_relations, wr_index) - - assert_array_almost_equal(nodesData._nodes_data, mockRouteData_02_01._nodes_data) - assert_array_almost_equal(nodesData._curvature_speed_sections_data, mockRouteData_02_01._curvature_speed_sections_data) - self.assertListEqual(nodesData._divertions, mockRouteData_02_01._divertions) - self.assertEqual(len(nodesData._curvature_speed_sections_data), 9) - num_diverstions = sum([len(d) for d in nodesData._divertions]) - self.assertEqual(num_diverstions, 14) - - def test_count(self): - mockRouteData_02_01.reset() - way_relations = mockRouteData_02_01.wrs - wr_index = mockRouteData_02_01.way_collection.wr_index - num_n = sum([len(wr.way.nodes) for wr in way_relations]) - len(way_relations) + 1 - - nodesData = NodesData(way_relations, wr_index) - - self.assertEqual(nodesData.count, num_n) - - def test_get_on_empty(self): - wr_t = WayRelation(mockOSMWay_02_03_Short_3_node_way) - - nodesData = NodesData([wr_t], {}) - assert_array_almost_equal(nodesData.get(NodeDataIdx.node_id), np.array([])) - - def test_get_values(self): - mockRouteData_02_01.reset() - way_relations = mockRouteData_02_01.wrs - wr_index = mockRouteData_02_01.way_collection.wr_index - - nodesData = NodesData(way_relations, wr_index) - - assert_array_almost_equal(nodesData.get(NodeDataIdx.node_id), mockRouteData_02_01._nodes_data[:, 0]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.lat), mockRouteData_02_01._nodes_data[:, 1]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.lon), mockRouteData_02_01._nodes_data[:, 2]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.speed_limit), mockRouteData_02_01._nodes_data[:, 3]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.x), mockRouteData_02_01._nodes_data[:, 4]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.y), mockRouteData_02_01._nodes_data[:, 5]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.dist_prev), mockRouteData_02_01._nodes_data[:, 6]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.dist_next), mockRouteData_02_01._nodes_data[:, 7]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.dist_route), mockRouteData_02_01._nodes_data[:, 8]) - assert_array_almost_equal(nodesData.get(NodeDataIdx.bearing), mockRouteData_02_01._nodes_data[:, 9]) - - def test_speed_limits_ahead_from_empty(self): - wr_t = WayRelation(mockOSMWay_02_03_Short_3_node_way) - - nodesData = NodesData([wr_t], {}) - self.assertEqual(len(nodesData.speed_limits_ahead(1, 10.)), 0) - - def test_speed_limits_ahead(self): - mockRouteData_02_03.reset() - way_relations = mockRouteData_02_03.wrs - wr_index = mockRouteData_02_03.way_collection.wr_index - - nodesData = NodesData(way_relations, wr_index) - - # empty when ahead_idx is none. - self.assertEqual(len(nodesData.speed_limits_ahead(None, 10.)), 0) - - # All limist from 0 - all_limits = nodesData.speed_limits_ahead(1, nodesData.get(NodeDataIdx.dist_next)[0]) - self.assertEqual(len(all_limits), 4) # 4 limits on this mock road. - self.assertListEqual([sl.value for sl in all_limits], [v * CV.KPH_TO_MS for v in [50, 100, 50, 100]]) - for idx, sl in enumerate(all_limits): - self.assertTrue(sl.end > sl.start) - self.assertTrue(sl.value > 0.) - if idx == 0: - self.assertEqual(sl.start, 0.) - else: - self.assertEqual(sl.start, all_limits[idx - 1].end) - self.assertNotEqual(sl.value, all_limits[idx - 1].value) - - def test_distance_to_end_from_empty(self): - wr_t = WayRelation(mockOSMWay_02_03_Short_3_node_way) - - nodesData = NodesData([wr_t], {}) - self.assertIsNone(nodesData.distance_to_end(1, 10.)) - - def test_distance_to_end(self): - mockRouteData_02_03.reset() - way_relations = mockRouteData_02_03.wrs - wr_index = mockRouteData_02_03.way_collection.wr_index - - nodesData = NodesData(way_relations, wr_index) - - # none when ahead_idx is none. - self.assertIsNone(nodesData.distance_to_end(None, 10.)) - - # From the beginning - expected = np.sum(nodesData.get(NodeDataIdx.dist_next)) - self.assertAlmostEqual(nodesData.distance_to_end(1, nodesData.get(NodeDataIdx.dist_next)[0]), expected) - self.assertAlmostEqual(nodesData.get(NodeDataIdx.dist_route)[-1], expected) - - # From the node next to last - expected = nodesData.get(NodeDataIdx.dist_next)[-2] - self.assertAlmostEqual(nodesData.distance_to_end(nodesData.count - 2, 0.), expected) - - def test_distance_to_node(self): - mockRouteData_02_03.reset() - way_relations = mockRouteData_02_03.wrs - wr_index = mockRouteData_02_03.way_collection.wr_index - - nodesData = NodesData(way_relations, wr_index) - dist_to_node_ahead = 10. - node_id = 1887995486 # Some node id in the middle of the way. idx 50 - node_idx = np.nonzero(nodesData.get(NodeDataIdx.node_id) == node_id)[0][0] - - # none when ahead_idx is none. - self.assertIsNone(nodesData.distance_to_node(node_id, None, dist_to_node_ahead)) - - # From the beginning - expected = nodesData.get(NodeDataIdx.dist_route)[node_idx] - self.assertAlmostEqual(nodesData.distance_to_node(node_id, 1, nodesData.get(NodeDataIdx.dist_next)[0]), expected) - - # From the end - expected = -np.sum(nodesData.get(NodeDataIdx.dist_next)[node_idx:]) - self.assertAlmostEqual(nodesData.distance_to_node(node_id, len(nodesData.get(NodeDataIdx.node_id)) - 1, 0.), expected) - - # From some node behind including dist to node ahead - ahead_idx = node_idx - 10 - expected = np.sum(nodesData.get(NodeDataIdx.dist_next)[ahead_idx:node_idx]) + dist_to_node_ahead - self.assertAlmostEqual(nodesData.distance_to_node(node_id, ahead_idx, dist_to_node_ahead), expected) - - # From some node ahead including dist to node ahead - ahead_idx = node_idx + 10 - expected = -np.sum(nodesData.get(NodeDataIdx.dist_next)[node_idx:ahead_idx]) + dist_to_node_ahead - self.assertAlmostEqual(nodesData.distance_to_node(node_id, ahead_idx, dist_to_node_ahead), expected) - -# TODO: Missing tests for curvatures_speed_limit_sections_ahead and possible_divertions diff --git a/selfdrive/mapd/test/test_WayRelation.py b/selfdrive/mapd/test/test_WayRelation.py deleted file mode 100644 index 0e3ea030c6..0000000000 --- a/selfdrive/mapd/test/test_WayRelation.py +++ /dev/null @@ -1,651 +0,0 @@ -import copy -import unittest -import numpy as np -from unittest import mock -from numpy.testing import assert_array_almost_equal -from datetime import datetime as dt, timezone, timedelta -from common.conversions import Conversions as CV -from selfdrive.mapd.lib.WayRelation import WayRelation, is_osm_time_condition_active, \ - conditional_speed_limit_for_osm_tag_limit_string, speed_limit_for_osm_tag_limit_string -from selfdrive.mapd.config import LANE_WIDTH -from selfdrive.mapd.lib.geo import DIRECTION, R, vectors -from selfdrive.mapd.test.mock_data import mockOSMWay_01_01_LongCurvy, mockOSMWay_01_02_Loop, \ - mockOSMWay_02_01_CurvyTownWithIntersections - - -class TestWayRelationFileFunctions(unittest.TestCase): - def test_speed_limit_for_osm_tag_limit_string(self): - values = [ - None, # Invalid - "1000", # Invalid - "60 kph", # Invalid - "100", - "30 mph", - "DE:zone:40", - "DE:zone:50 mph", - "AR:urban", - "CZ:pedestrian_zone", - "DK:urban", - "DK:rural", - "DK:motorway", - "DE:living_street", - "DE:residential", - "DE:urban", - "DE:rural", - "DE:trunk", # No limit - "DE:motorway", # No limit - "GB:nsl_restricted", - "GB:nsl_single", - "GB:nsl_dual", - "GB:motorway", - "GB:invalid", # Invalid - ] - - expected = [ - 0., - 0., - 0., - 100. * CV.KPH_TO_MS, - 30. * CV.MPH_TO_MS, - 40. * CV.KPH_TO_MS, - 50. * CV.MPH_TO_MS, - 40. * CV.KPH_TO_MS, - 20. * CV.KPH_TO_MS, - 50. * CV.KPH_TO_MS, - 80. * CV.KPH_TO_MS, - 130. * CV.KPH_TO_MS, - 7. * CV.KPH_TO_MS, - 30. * CV.KPH_TO_MS, - 50. * CV.KPH_TO_MS, - 100. * CV.KPH_TO_MS, - 0., - 0., - 30. * CV.MPH_TO_MS, - 60. * CV.MPH_TO_MS, - 70. * CV.MPH_TO_MS, - 70. * CV.MPH_TO_MS, - 0., - ] - - result = [speed_limit_for_osm_tag_limit_string(sls) for sls in values] - - self.assertEqual(result, expected) - - @mock.patch('selfdrive.mapd.lib.WayRelation.dt') - def test_is_osm_time_condition_active(self, mock_dt): - tz = timezone(timedelta(hours=1), 'berlin') - wed_10_10_am = dt(2021, 9, 1, 10, 10, 0) - mock_dt.now.return_value = wed_10_10_am - mock_dt.tzinfo = tz - mock_dt.combine = dt.combine - mock_dt.strptime = dt.strptime - - values = [ - "WE", # Invalid - "We", - "Mo", - "Fr", - "Tu-Th", - "10:00", # Invalid - "10:00-10:30", - "We 10:00-10:30", - "SU 10:00-10:30", # Valid, SU string not considered a day string. - "Sa 10:00-10:30", - "Tu-Th 10:00-10:30", - ] - - expected = [ - False, # Invalid - True, - False, - False, - True, - False, # Invalid - True, - True, - True, - False, - True, - ] - - result = [is_osm_time_condition_active(cs) for cs in values] - - self.assertEqual(result, expected) - - @mock.patch('selfdrive.mapd.lib.WayRelation.dt') - def test_conditional_speed_limit_for_osm_tag_limit_string(self, mock_dt): - tz = timezone(timedelta(hours=1), 'berlin') - wed_10_10_am = dt(2021, 9, 1, 10, 10, 0) - mock_dt.now.return_value = wed_10_10_am - mock_dt.tzinfo = tz - mock_dt.combine = dt.combine - mock_dt.strptime = dt.strptime - - values = [ - None, # Invalid - "Hola", # Invalid - "100 @ (WE)", # Invalid - "x @ (We)", # Invalid - "100 @ (We)", - "100 @ (Mo)", - "100 @ (Fr)", - "100 @ (Tu-Th)", - "100 @ (10:00)", # Invalid - "100 @ (10:00-10:30)", - "100 @ (We 10:00-10:30)", - "100 @ (SU 10:00-10:30)", # Valid, SU string not considered a day string. - "100 @ (Sa 10:00-10:30)", - "100 @ (Tu-Th 10:00-10:30)", - "100 @ (Mo-Th;Su)", - "100 @ (Mo Th;Fr-Sa)", - "100 @ (Fr-Su;Mo-Tu)", - "100 @ (10:00-10:30;15:00-16:00)", - "100 @ (We;Mo-Tu)", - "100 @ (We 10:00-10:30;Th 15:00-16:00)", - "100 @ (Tu 10:00-10:30;Th 15:00-16:00)", - ] - - _100 = 100. * CV.KPH_TO_MS - - expected = [ - 0., # Invalid - 0., # Invalid - 0., # Invalid - 0., # Invalid - _100, - 0., - 0., - _100, - 0., # Invalid - _100, - _100, - _100, - 0., - _100, - _100, - _100, - 0., - _100, - _100, - _100, - 0. - ] - - result = [conditional_speed_limit_for_osm_tag_limit_string(ls) for ls in values] - - self.assertEqual(result, expected) - - -class TestWayRelation(unittest.TestCase): - def test_way_relation_init(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - - nodes_np_expected = np.radians(np.array([[node.lat, node.lon] for node in wayRelation.way.nodes], dtype=float)) - v = vectors(wayRelation._nodes_np) - way_distances_expected = np.linalg.norm(v * R, axis=1) - way_bearings_expected = np.arctan2(v[:, 0], v[:, 1]) - bbox_expected = np.array([ - [0.91321784, 0.2346417], - [0.91344672, 0.23475751]]) - - self.assertEqual(wayRelation.way.id, 179532213) - self.assertIsNone(wayRelation.parent_wr_id) - self.assertEqual(wayRelation.direction, DIRECTION.NONE) - self.assertEqual(wayRelation._speed_limit, None) - self.assertEqual(wayRelation._one_way, 'yes') - self.assertEqual(wayRelation.name, None) - self.assertEqual(wayRelation.ref, 'B 96') - self.assertEqual(wayRelation.highway_type, 'trunk') - self.assertEqual(wayRelation.highway_rank, 10) - self.assertEqual(wayRelation.lanes, 2) - assert_array_almost_equal(wayRelation._nodes_np, nodes_np_expected) - assert_array_almost_equal(wayRelation._way_distances, way_distances_expected) - assert_array_almost_equal(wayRelation._way_bearings, way_bearings_expected) - assert_array_almost_equal(wayRelation.bbox, bbox_expected) - self.assertEqual(wayRelation.edge_nodes_ids, [wayRelation.way.nodes[0].id, wayRelation.way.nodes[-1].id]) - - def test_way_relation_init_with_parent(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy, parent=WayRelation(mockOSMWay_01_02_Loop)) - - self.assertEqual(wayRelation.way.id, 179532213) - self.assertEqual(wayRelation.parent_wr_id, 29233907) - - def test_way_relation_equality(self): - wayRelation1 = WayRelation(mockOSMWay_01_01_LongCurvy) - wayRelation2 = copy.copy(wayRelation1) - wayRelation3 = copy.deepcopy(wayRelation1) - wayRelation3.way.id = 123 - - self.assertEqual(wayRelation1, wayRelation2) - self.assertNotEqual(wayRelation1, wayRelation3) - - def test_way_relation_reset_location_variables(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - self.make_wayRelation_location_dirty(wayRelation) - - wayRelation.reset_location_variables() - - self.assert_wayRelation_variables_reset(wayRelation) - - def test_way_relation_id(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - - self.assertEqual(wayRelation.id, 179532213) - - def test_way_relation_road_name(self): - # road name when no tag for name or ref - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - self.assertIsNone(wayRelation.road_name) - # road name based on ref tag - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - self.assertEqual(wayRelation.road_name, "B 96") - # road name based on name tag - wayRelation = WayRelation(mockOSMWay_02_01_CurvyTownWithIntersections) - self.assertEqual(wayRelation.road_name, "Hauptstraße") - - def test_way_relation_update_resets_on_update(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - self.make_wayRelation_location_dirty(wayRelation) - location_rad = np.array([0., 0.]) # Location outside bbox - - wayRelation.update(location_rad, 0., 10.) - - self.assertFalse(wayRelation.is_location_in_bbox(location_rad)) - self.assert_wayRelation_variables_reset(wayRelation) - - def test_way_relation_update_only_resets_if_no_possible_found(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - location_rad = wayRelation.bbox[0] # Location inside bbox but outside actual way (due to padding) - - wayRelation.update(location_rad, 0., 10.) - - self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) - self.assert_wayRelation_variables_reset(wayRelation) - - def test_way_relation_updates_in_the_correct_direction_with_correct_property_values(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - location_rad = np.radians(np.array([52.32855593146639, 13.445320150125069])) - bearing_rad = 0. - - wayRelation.update(location_rad, bearing_rad, 10.) - - self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) - self.assertEqual(wayRelation.direction, DIRECTION.FORWARD) - self.assertEqual(wayRelation.ahead_idx, 17) - self.assertEqual(wayRelation.behind_idx, 16) - self.assertAlmostEqual(wayRelation._distance_to_way, 3.43290781621360) - self.assertAlmostEqual(wayRelation._active_bearing_delta, 0.320717420388962) - self.assertAlmostEqual(wayRelation.distance_to_node_ahead, 25.4998961709014) - self.assertTrue(wayRelation.active) - self.assertFalse(wayRelation.diverting) - assert_array_almost_equal(wayRelation.location_rad, location_rad) - self.assertEqual(wayRelation.bearing_rad, bearing_rad) - self.assertIsNone(wayRelation._speed_limit) - - bearing_rad = 180. - - wayRelation.update(location_rad, bearing_rad, 10.) - - self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) - self.assertEqual(wayRelation.direction, DIRECTION.BACKWARD) - self.assertEqual(wayRelation.ahead_idx, 16) - self.assertEqual(wayRelation.behind_idx, 17) - self.assertAlmostEqual(wayRelation._distance_to_way, 3.43290781621360) - self.assertAlmostEqual(wayRelation._active_bearing_delta, 0.9507682562504284) - self.assertAlmostEqual(wayRelation.distance_to_node_ahead, 11.11623371145368) - self.assertTrue(wayRelation.active) - self.assertFalse(wayRelation.diverting) - assert_array_almost_equal(wayRelation.location_rad, location_rad) - self.assertEqual(wayRelation.bearing_rad, bearing_rad) - self.assertIsNone(wayRelation._speed_limit) - - def test_way_relation_updates_with_location_closest_to_way_when_multiple_possible(self): - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - location_rad = np.radians(np.array([52.313303275461564, 13.437729236325788])) - bearing_rad = np.radians(10.) - - wayRelation.update(location_rad, bearing_rad, 10.) - - self.assertTrue(wayRelation.is_location_in_bbox(location_rad)) - self.assertEqual(wayRelation.direction, DIRECTION.BACKWARD) - self.assertEqual(wayRelation.ahead_idx, 26) - self.assertEqual(wayRelation.behind_idx, 27) - self.assertAlmostEqual(wayRelation._distance_to_way, 10.151775235257011) - self.assertAlmostEqual(wayRelation._active_bearing_delta, 0.06371131069242782) - self.assertAlmostEqual(wayRelation.distance_to_node_ahead, 10.174073707120915) - self.assertTrue(wayRelation.active) - self.assertFalse(wayRelation.diverting) - assert_array_almost_equal(wayRelation.location_rad, location_rad) - self.assertEqual(wayRelation.bearing_rad, bearing_rad) - self.assertIsNone(wayRelation._speed_limit) - - def test_way_relation_updates_will_become_inactive_if_too_far_from_way(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - # Location is 24.9 mts away from the way. There are 2 Lanes in this way. - location_rad = np.radians(np.array([52.328634560607746, 13.445609877522788])) - location_stdev = 5.5 # threshold is 4 * location_stdev + LANE_WIDTH - distance_threshold = 4. * location_stdev + wayRelation.lanes * LANE_WIDTH / 2. - - wayRelation.update(location_rad, 0., location_stdev) - self.assertTrue(wayRelation.active) - self.assertLess(wayRelation._distance_to_way, distance_threshold) - - location_stdev = 5. - - wayRelation.update(location_rad, 0., location_stdev) - self.assertFalse(wayRelation.active) - - def test_way_relation_updates_will_update_diverting_correctly(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - # Location is 24.9 mts away from the way. There are 2 Lanes in this way. - location_rad = np.radians(np.array([52.328634560607746, 13.445609877522788])) - location_stdev = 11. - distance_threshold = 2. * location_stdev + wayRelation.lanes * LANE_WIDTH / 2. - - wayRelation.update(location_rad, 0., location_stdev) - - self.assertLess(wayRelation._distance_to_way, distance_threshold) - self.assertFalse(wayRelation.diverting) - - location_stdev = 10. - distance_threshold = 2. * location_stdev + wayRelation.lanes * LANE_WIDTH / 2. - - wayRelation.update(location_rad, 0., location_stdev) - - self.assertGreater(wayRelation._distance_to_way, distance_threshold) - self.assertTrue(wayRelation.diverting) - - def test_way_relation_update_direction_from_starting_node_resets_speed_limit(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - wayRelation._speed_limit = 10. - - wayRelation.update_direction_from_starting_node(wayRelation.way.nodes[0].id) - - self.assertIsNone(wayRelation._speed_limit) - - def test_way_relation_update_direction_from_starting_node_updates_correctly(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - wayRelation.update_direction_from_starting_node(wayRelation.way.nodes[0].id) - self.assertEqual(wayRelation.direction, DIRECTION.FORWARD) - - wayRelation.update_direction_from_starting_node(wayRelation.way.nodes[-1].id) - self.assertEqual(wayRelation.direction, DIRECTION.BACKWARD) - - wayRelation.update_direction_from_starting_node(0) - self.assertEqual(wayRelation.direction, DIRECTION.NONE) - - def test_way_relation_is_location_in_bbox(self): - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - bbox = wayRelation.bbox - - loc_avg = np.average(bbox, axis=0) - loc_min = np.min(bbox, axis=0) - loc_max = np.max(bbox, axis=0) - - locations = [ - loc_avg, - loc_min, - loc_max, - [loc_avg[0], loc_min[1]], - [loc_avg[0], loc_max[1]], - [loc_min[0], loc_avg[1]], - [loc_max[0], loc_avg[1]], - loc_min - 0.1, - loc_max + 0.1, - [loc_avg[0], loc_min[1] - 0.1], - [loc_avg[0], loc_max[1] + 0.1], - [loc_min[0] - 0.1, loc_avg[1]], - [loc_max[0] + 0.1, loc_avg[1]], - ] - - is_in = [wayRelation.is_location_in_bbox(loc) for loc in locations] - - self.assertEqual(is_in, [True, True, True, True, True, True, True, False, False, False, False, False, False]) - - def test_way_relation_speed_limit_when_set(self): - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - wayRelation._speed_limit = 10. - - self.assertEqual(wayRelation.speed_limit, 10.) - - @mock.patch('selfdrive.mapd.lib.WayRelation.dt') - def test_way_relation_speed_limit_conditional(self, mock_dt): - tz = timezone(timedelta(hours=1), 'berlin') - wed_10_10_am = dt(2021, 9, 1, 10, 10, 0) - mock_dt.now.return_value = wed_10_10_am - mock_dt.tzinfo = tz - mock_dt.combine = dt.combine - mock_dt.strptime = dt.strptime - - # Reset all tags before teting - mockOSMWay_01_02_Loop.tags = {} - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - - # No Value - self.assertEqual(wayRelation.speed_limit, 0.) - - # Value on both directions - wayRelation._speed_limit = None - wayRelation.way.tags["maxspeed:conditional"] = "100 @ (We 10:00-10:30)" - self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS) - - # Value on forward - wayRelation.way.tags.pop("maxspeed:conditional") - wayRelation._speed_limit = None - wayRelation.direction = DIRECTION.FORWARD - self.assertEqual(wayRelation.speed_limit, 0.) - - wayRelation._speed_limit = None - wayRelation.way.tags["maxspeed:forward:conditional"] = "100 @ (We 10:00-10:30)" - self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS) - - # Value on backward - wayRelation._speed_limit = None - wayRelation.direction = DIRECTION.BACKWARD - self.assertEqual(wayRelation.speed_limit, 0.) - - wayRelation._speed_limit = None - wayRelation.way.tags["maxspeed:backward:conditional"] = "100 @ (We 10:00-10:30)" - self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS) - - def test_way_relation_speed_limit_maxspeed(self): - # Reset all tags before teting - mockOSMWay_01_02_Loop.tags = {} - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - - # No Value - self.assertEqual(wayRelation.speed_limit, 0.) - - # Value on both directions - wayRelation._speed_limit = None - wayRelation.way.tags["maxspeed"] = "100" - self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS) - - # Value on forward - wayRelation.way.tags.pop("maxspeed") - wayRelation._speed_limit = None - wayRelation.direction = DIRECTION.FORWARD - self.assertEqual(wayRelation.speed_limit, 0.) - - wayRelation._speed_limit = None - wayRelation.way.tags["maxspeed:forward"] = "100" - self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS) - - # Value on backward - wayRelation._speed_limit = None - wayRelation.direction = DIRECTION.BACKWARD - self.assertEqual(wayRelation.speed_limit, 0.) - - wayRelation._speed_limit = None - wayRelation.way.tags["maxspeed:backward"] = "100" - self.assertEqual(wayRelation.speed_limit, 100. * CV.KPH_TO_MS) - - def test_way_relation_active_bearing_delta_reflects_internal_value(self): - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - wayRelation._active_bearing_delta = 10. - self.assertEqual(wayRelation.active_bearing_delta, 10.) - - def test_way_relation_is_one_way(self): - # Setup initial tags - mockOSMWay_01_02_Loop.tags = { - 'oneway': 'yes', - 'highway': 'unclassified' - } - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - - # oneway = yes - self.assertTrue(wayRelation.is_one_way) - - # oneway non existing - wayRelation._one_way = None - self.assertFalse(wayRelation.is_one_way) - - # highway = motorway - wayRelation.highway_type = 'motorway' - self.assertTrue(wayRelation.is_one_way) - - def test_way_relation_is_prohibited(self): - # Setup initial tags - mockOSMWay_01_02_Loop.tags = { - 'oneway': 'yes' - } - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - - # Direction undefined - wayRelation.direction = DIRECTION.NONE - self.assertTrue(wayRelation.is_prohibited) - - # oneway = yes - wayRelation.direction = DIRECTION.BACKWARD - self.assertTrue(wayRelation.is_prohibited) - - wayRelation.direction = DIRECTION.FORWARD - self.assertFalse(wayRelation.is_prohibited) - - # oneway non existing - wayRelation._one_way = None - self.assertFalse(wayRelation.is_one_way) - - wayRelation.direction = DIRECTION.BACKWARD - self.assertFalse(wayRelation.is_prohibited) - - def test_way_relation_distance_to_way_reflects_internal_value(self): - wayRelation = WayRelation(mockOSMWay_01_02_Loop) - wayRelation._distance_to_way = 10. - self.assertEqual(wayRelation.distance_to_way, 10.) - - def test_way_relation_node_ahead(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - # ahead_ids is None on init - self.assertIsNone(wayRelation.node_ahead) - - wayRelation.ahead_idx = 15 - self.assertEqual(wayRelation.node_ahead, wayRelation.way.nodes[15]) - - def test_way_relation_last_node(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - # direction is NONE on init - self.assertIsNone(wayRelation.last_node) - - # forward - wayRelation.direction = DIRECTION.FORWARD - self.assertEqual(wayRelation.last_node, wayRelation.way.nodes[-1]) - - # backward - wayRelation.direction = DIRECTION.BACKWARD - self.assertEqual(wayRelation.last_node, wayRelation.way.nodes[0]) - - def test_way_relation_last_node_coordinates(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - # direction is NONE on init - self.assertIsNone(wayRelation.last_node_coordinates) - - # forward - wayRelation.direction = DIRECTION.FORWARD - coords = np.radians(np.array([wayRelation.way.nodes[-1].lat, wayRelation.way.nodes[-1].lon], dtype=float)) - assert_array_almost_equal(wayRelation.last_node_coordinates, coords) - - # backward - wayRelation.direction = DIRECTION.BACKWARD - coords = np.radians(np.array([wayRelation.way.nodes[0].lat, wayRelation.way.nodes[0].lon], dtype=float)) - assert_array_almost_equal(wayRelation.last_node_coordinates, coords) - - def test_way_relation_node_before_edge_coordinates(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - - coords = wayRelation.node_before_edge_coordinates(0) - assert_array_almost_equal(coords, np.array([0., 0.])) - - coords = wayRelation.node_before_edge_coordinates(wayRelation.way.nodes[0].id) - coords_e = np.radians(np.array([wayRelation.way.nodes[1].lat, wayRelation.way.nodes[1].lon], dtype=float)) - assert_array_almost_equal(coords, coords_e) - - coords = wayRelation.node_before_edge_coordinates(wayRelation.way.nodes[-1].id) - coords_e = np.radians(np.array([wayRelation.way.nodes[-2].lat, wayRelation.way.nodes[-2].lon], dtype=float)) - assert_array_almost_equal(coords, coords_e) - - def test_way_relation_split_no_matching_node(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - - wrs = wayRelation.split(0) - self.assertEqual(len(wrs), 0) - - def test_way_relation_split_use_correct_ids(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - - wrs = wayRelation.split(wayRelation._nodes_ids[5], [-100, -200]) - self.assertEqual(wrs[0].id, -100) - self.assertEqual(wrs[1].id, -200) - - def test_way_relation_split_on_edge_node(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - edge_node_ids = wayRelation.edge_nodes_ids - - for edge_node_id in edge_node_ids: - wrs = wayRelation.split(edge_node_id) - self.assertEqual(len(wrs), 1) - self.assertEqual(wrs[0], wayRelation) - self.assertEqual(wrs[0].way.tags, wayRelation.way.tags) - - def test_way_relation_split_on_internal_node(self): - wayRelation = WayRelation(mockOSMWay_01_01_LongCurvy) - way_ids = [-10, -20] - - for idx, node_id in enumerate(wayRelation._nodes_ids): - if idx == 0 or idx == len(wayRelation._nodes_ids) - 1: - continue - wrs = wayRelation.split(node_id, way_ids) - self.assertEqual(len(wrs), 2) - assert_array_almost_equal(wrs[0]._nodes_ids, wayRelation._nodes_ids[:idx + 1]) - assert_array_almost_equal(wrs[1]._nodes_ids, wayRelation._nodes_ids[idx:]) - self.assertIn(node_id, wrs[0].edge_nodes_ids) - self.assertIn(node_id, wrs[1].edge_nodes_ids) - self.assertEqual(wrs[0].way.tags, wayRelation.way.tags) - self.assertEqual(wrs[1].way.tags, wayRelation.way.tags) - self.assertEqual(way_ids, [wr.id for wr in wrs]) - - # Helpers - def make_wayRelation_location_dirty(self, wayRelation): - wayRelation.distance_to_node_ahead = 10. - wayRelation.location_rad = 0.8 - wayRelation.bearing_rad = 2. - wayRelation.active = True - wayRelation.diverting = True - wayRelation.ahead_idx = 5 - wayRelation.behind_idx = 4 - wayRelation._active_bearing_delta = 3. - wayRelation._distance_to_way = 20. - - def assert_wayRelation_variables_reset(self, wayRelation): - self.assertEqual(wayRelation.distance_to_node_ahead, 0.) - self.assertIsNone(wayRelation.location_rad) - self.assertIsNone(wayRelation.bearing_rad) - self.assertFalse(wayRelation.active) - self.assertFalse(wayRelation.diverting) - self.assertIsNone(wayRelation.ahead_idx) - self.assertIsNone(wayRelation.behind_idx) - self.assertIsNone(wayRelation._active_bearing_delta) - self.assertIsNone(wayRelation._distance_to_way) - - def wayRelation_mid_point_rad(self, wayRelation): - return np.average(wayRelation.bbox, axis=0) diff --git a/selfdrive/mapd/test/test_WayRelationIndex.py b/selfdrive/mapd/test/test_WayRelationIndex.py deleted file mode 100644 index f8ef212bc3..0000000000 --- a/selfdrive/mapd/test/test_WayRelationIndex.py +++ /dev/null @@ -1,74 +0,0 @@ -import unittest -from selfdrive.mapd.lib.WayRelationIndex import WayRelationIndex -from selfdrive.mapd.test.mock_data import mockWayCollection01 - - -class TestWayRelationIndex(unittest.TestCase): - def test_init_and_add(self): - wrs = mockWayCollection01.way_relations - wr_index = WayRelationIndex(wrs) - - # expected init logic, including add logic. - edge_nodes_index_dict = {} - full_nodes_index_dict = {} - for wr in wrs: - for node in wr.way.nodes: - node_id = node.id - full_nodes_index_dict[node_id] = full_nodes_index_dict.get(node_id, []) + [wr] - if node_id in wr.edge_nodes_ids: - edge_nodes_index_dict[node_id] = edge_nodes_index_dict.get(node_id, []) + [wr] - - # assert logic delivers same result - self.assertDictEqual(edge_nodes_index_dict, wr_index._edge_nodes_index_dict) - self.assertDictEqual(full_nodes_index_dict, wr_index._full_nodes_index_dict) - self.assertEqual(len(wr_index._edge_nodes_index_dict), 586) - self.assertEqual(len(wr_index._full_nodes_index_dict), 2342) - - def test_remove(self): - wrs = mockWayCollection01.way_relations - wr_index = WayRelationIndex(wrs) - - wr_to_remove = wrs[0] - affected_full_node_ids = [nodesData.id for nodesData in wr_to_remove.way.nodes] - affected_edge_node_ids = wr_to_remove.edge_nodes_ids - - initial_full_lists = [wr_index._full_nodes_index_dict[ndid] for ndid in affected_full_node_ids] - initial_edge_lists = [wr_index._edge_nodes_index_dict[ndid] for ndid in affected_edge_node_ids] - - expected_final_full_lists = [[wr for wr in li if wr is not wr_to_remove] for li in initial_full_lists] - expected_final_edge_lists = [[wr for wr in li if wr is not wr_to_remove] for li in initial_edge_lists] - - wr_index.remove(wr_to_remove) - - final_full_lists = [wr_index._full_nodes_index_dict[ndid] for ndid in affected_full_node_ids] - final_edge_lists = [wr_index._edge_nodes_index_dict[ndid] for ndid in affected_edge_node_ids] - - for idx, li in enumerate(final_full_lists): - self.assertListEqual(li, expected_final_full_lists[idx]) - - for idx, li in enumerate(final_edge_lists): - self.assertListEqual(li, expected_final_edge_lists[idx]) - - def test_way_relations_with_edge_node_id(self): - wr_index = WayRelationIndex([]) - ref_dict = { - 0: ["fake_wr1", "fake_wr2"], - 1: ["fake_wr3"], - 3: ["fake_wr4", "fake_wr5", "fake_wr6"], - } - wr_index._edge_nodes_index_dict = ref_dict - - for key, li in ref_dict.items(): - self.assertListEqual(li, wr_index.way_relations_with_edge_node_id(key)) - - def test_way_relations_with_node_id(self): - wr_index = WayRelationIndex([]) - ref_dict = { - 0: ["fake_wr1", "fake_wr2"], - 1: ["fake_wr3"], - 3: ["fake_wr4", "fake_wr5", "fake_wr6"], - } - wr_index._full_nodes_index_dict = ref_dict - - for key, li in ref_dict.items(): - self.assertListEqual(li, wr_index.way_relations_with_node_id(key)) diff --git a/selfdrive/mapd/test/test_geo.py b/selfdrive/mapd/test/test_geo.py deleted file mode 100644 index a18fe717b0..0000000000 --- a/selfdrive/mapd/test/test_geo.py +++ /dev/null @@ -1,234 +0,0 @@ -import unittest -from selfdrive.mapd.lib.geo import vectors, ref_vectors, bearing_to_points, distance_to_points -import numpy as np -from numpy.testing import assert_array_almost_equal -from selfdrive.mapd.test.mock_data import mockNodesData01 - - -class TestMapsdGeoLibrary(unittest.TestCase): - def test_vectors(self): - points = mockNodesData01.radians - expected = np.array([ - [-1.34011951e-05, 1.00776468e-05], - [-5.83610920e-06, 4.41046897e-06], - [-7.83348567e-06, 5.94114032e-06], - [-7.08560788e-06, 5.30408795e-06], - [-6.57632550e-06, 4.05791838e-06], - [-1.16077872e-06, 6.91151252e-07], - [-1.53178098e-05, 9.62215139e-06], - [-5.76314175e-06, 3.55176643e-06], - [-1.61124141e-05, 9.86127759e-06], - [-1.48006628e-05, 8.58192512e-06], - [-1.72237209e-06, 1.60570482e-06], - [-8.68985228e-06, 9.22062311e-06], - [-1.42922812e-06, 1.51494711e-06], - [-3.39761486e-06, 2.57087743e-06], - [-2.75467373e-06, 1.28631255e-06], - [-1.57501989e-05, 5.72309451e-06], - [-2.52143954e-06, 1.34565295e-06], - [-1.65278643e-06, 1.28630942e-06], - [-2.22196114e-05, 1.64360838e-05], - [-5.88675934e-06, 4.08234746e-06], - [-1.83673390e-06, 1.46782408e-06], - [-1.55004206e-06, 1.51843800e-06], - [-1.20451533e-06, 2.06298011e-06], - [-1.91801338e-06, 4.64083285e-06], - [-2.38653483e-06, 5.60076524e-06], - [-1.65269781e-06, 5.78402290e-06], - [-3.66908309e-07, 2.75412965e-06], - [0.00000000e+00, 1.92858882e-06], - [9.09242615e-08, 2.66162711e-06], - [3.14490354e-07, 1.53065382e-06], - [8.66452477e-08, 4.83456208e-07], - [2.41750593e-07, 1.10828411e-06], - [7.43745228e-06, 1.27618831e-05], - [5.59968054e-06, 9.63947367e-06], - [2.01951467e-06, 2.75413219e-06], - [4.59952643e-07, 6.42281301e-07], - [1.74353749e-06, 1.74533121e-06], - [2.57144338e-06, 2.11185266e-06], - [1.46893187e-05, 1.11999169e-05], - [3.84659229e-05, 2.85527952e-05], - [2.71627936e-05, 1.98727946e-05], - [8.44632540e-06, 6.15058628e-06], - [2.29420323e-06, 1.92859222e-06], - [2.58083439e-06, 3.16952222e-06], - [3.76373643e-06, 5.14174911e-06], - [5.32416098e-06, 6.51707770e-06], - [8.62890928e-06, 1.11998258e-05], - [1.25762497e-05, 1.65231340e-05], - [8.90452991e-06, 1.10148240e-05], - [4.86505726e-06, 4.59023120e-06], - [3.85545276e-06, 3.39642031e-06], - [3.48753893e-06, 3.30566145e-06], - [2.99557303e-06, 2.61276368e-06], - [2.15496788e-06, 1.87797727e-06], - [4.10564937e-06, 3.58142649e-06], - [1.53680853e-06, 1.33866906e-06], - [4.99540175e-06, 4.35635790e-06], - [1.37744970e-06, 1.19380643e-06], - [1.74319821e-06, 1.28456429e-06], - [9.99931238e-07, 1.14493663e-06], - [6.42735560e-07, 1.19380547e-06], - [3.66818436e-07, 1.46782199e-06], - [5.45413874e-08, 1.83783170e-06], - [-1.35818548e-07, 1.14842666e-06], - [-5.50758101e-07, 3.02989178e-06], - [-4.58785270e-07, 2.66162724e-06], - [-2.51315555e-07, 1.19031459e-06], - [-3.91409773e-07, 1.65457223e-06], - [-2.14525206e-06, 5.67755902e-06], - [-4.24558096e-07, 1.39102753e-06], - [-1.46936730e-06, 5.32325561e-06], - [-1.37632061e-06, 4.59021715e-06], - [-8.26642899e-07, 4.68097349e-06], - [-6.42702724e-07, 4.95673534e-06], - [-3.66796960e-07, 7.25009780e-06], - [-1.82861669e-07, 8.99542699e-06], - [4.09564134e-07, 6.11214315e-06], - [7.80629912e-08, 1.45734993e-06], - [4.81205526e-07, 7.56076647e-06], - [2.01036346e-07, 2.42775302e-06]]) - - v = vectors(points) - assert_array_almost_equal(v, expected) - - def test_ref_vectors(self): - points = mockNodesData01.radians - expected = np.array([ - [1.59924145e-04, -1.07153714e-04], - [1.46520873e-04, -9.70788297e-05], - [1.40683931e-04, -9.26694631e-05], - [1.32849368e-04, -8.67297434e-05], - [1.25762852e-04, -8.14268689e-05], - [1.19185869e-04, -7.73700167e-05], - [1.18024984e-04, -7.66790438e-05], - [1.02705711e-04, -6.70592230e-05], - [9.69420991e-05, -6.35082196e-05], - [8.08284530e-05, -5.36489556e-05], - [6.60268961e-05, -4.50685727e-05], - [6.43043874e-05, -4.34630144e-05], - [5.56137708e-05, -3.42431117e-05], - [5.41844341e-05, -3.27282671e-05], - [5.07866397e-05, -3.01576270e-05], - [4.80318817e-05, -2.88714948e-05], - [3.22813286e-05, -2.31493755e-05], - [2.97598330e-05, -2.18038275e-05], - [2.81069973e-05, -2.05175815e-05], - [5.88679032e-06, -4.08230278e-06], - [0.00000000e+00, 0.00000000e+00], - [-1.83673390e-06, 1.46782408e-06], - [-3.38677236e-06, 2.98626574e-06], - [-4.59127869e-06, 5.04925111e-06], - [-6.50926460e-06, 9.69009532e-06], - [-8.89575243e-06, 1.52908806e-05], - [-1.05483839e-05, 2.10749224e-05], - [-1.09152548e-05, 2.38290571e-05], - [-1.09152276e-05, 2.57576459e-05], - [-1.08242659e-05, 2.84192717e-05], - [-1.05097542e-05, 2.99499212e-05], - [-1.04231024e-05, 3.04333762e-05], - [-1.01813369e-05, 3.15416571e-05], - [-2.74371711e-06, 4.43034426e-05], - [2.85599752e-06, 5.39428964e-05], - [4.87550206e-06, 5.66970360e-05], - [5.33545066e-06, 5.73393202e-05], - [7.07897615e-06, 5.90846634e-05], - [9.65040026e-06, 6.11965396e-05], - [2.43395796e-05, 7.23966392e-05], - [6.28046063e-05, 1.00950641e-04], - [8.99657904e-05, 1.20825635e-04], - [9.84114021e-05, 1.26977201e-04], - [1.00705361e-04, 1.28906084e-04], - [1.03285783e-04, 1.32075942e-04], - [1.07048835e-04, 1.37218192e-04], - [1.12372096e-04, 1.43736004e-04], - [1.20999382e-04, 1.54937080e-04], - [1.33573053e-04, 1.71462176e-04], - [1.42475686e-04, 1.82478533e-04], - [1.47339899e-04, 1.87069658e-04], - [1.51194707e-04, 1.90466811e-04], - [1.54681601e-04, 1.93773152e-04], - [1.57676653e-04, 1.96386513e-04], - [1.59831239e-04, 1.98264929e-04], - [1.63936150e-04, 2.01847201e-04], - [1.65472675e-04, 2.03186195e-04], - [1.70467147e-04, 2.07543619e-04], - [1.71844334e-04, 2.08737728e-04], - [1.73587247e-04, 2.10022678e-04], - [1.74586922e-04, 2.11167839e-04], - [1.75229389e-04, 2.12361789e-04], - [1.75595876e-04, 2.13829694e-04], - [1.75650001e-04, 2.15667538e-04], - [1.75513922e-04, 2.16815933e-04], - [1.74962478e-04, 2.19845700e-04], - [1.74503092e-04, 2.22507224e-04], - [1.74251509e-04, 2.23697482e-04], - [1.73859727e-04, 2.25351966e-04], - [1.71713202e-04, 2.31029044e-04], - [1.71288336e-04, 2.32419977e-04], - [1.69817793e-04, 2.37742908e-04], - [1.68440467e-04, 2.42332824e-04], - [1.67612807e-04, 2.47013617e-04], - [1.66969033e-04, 2.51970213e-04], - [1.66600674e-04, 2.59220232e-04], - [1.66415880e-04, 2.68215619e-04], - [1.66824132e-04, 2.74327850e-04], - [1.66901881e-04, 2.75785216e-04], - [1.67381459e-04, 2.83346086e-04], - [1.67581971e-04, 2.85773882e-04]]) - - v = ref_vectors(points[20], points) - assert_array_almost_equal(v, expected) - - def test_bearing_to_points(self): - points = mockNodesData01.radians - expected = np.array([ - 2.16112265, 2.15595027, 2.15326799, 2.14916735, 2.14538642, - 2.14657678, 2.14694997, 2.1492257, 2.1507589, 2.15676899, - 2.16973441, 2.1651606, 2.12270237, 2.11416356, 2.10665211, - 2.11201708, 2.19291574, 2.2031069, 2.20136186, 2.17712517, - 0., -0.8965745, -0.84815954, -0.73792895, -0.59150953, - -0.5269061, -0.46406215, -0.42954043, -0.4008254, -0.36391371, - -0.33748609, -0.32996807, -0.31223189, -0.06185112, 0.05289544, - 0.08578116, 0.0927833, 0.11924233, 0.15640718, 0.32432622, - 0.55653415, 0.64003094, 0.6593301, 0.66319086, 0.66367982, - 0.66251077, 0.66354137, 0.66302176, 0.66181884, 0.66291139, - 0.66714676, 0.67095594, 0.67367984, 0.6765003, 0.67847961, - 0.68212344, 0.68345356, 0.68762778, 0.68876073, 0.69070183, - 0.69085143, 0.68988665, 0.68753177, 0.68348884, 0.68051081, - 0.67220053, 0.66506824, 0.66177969, 0.65712162, 0.63916951, - 0.6351146, 0.62025347, 0.60741567, 0.59618923, 0.58521935, - 0.57122582, 0.55532475, 0.54636839, 0.54422542, 0.53357655, - 0.53037033]) - - v = bearing_to_points(points[20], points) - assert_array_almost_equal(v, expected) - - def test_distance_to_points(self): - points = mockNodesData01.radians - expected = np.array([ - 1226.82569068, 1120.13820773, 1073.61121415, 1011.10016574, - 954.81557436, 905.58045038, 896.97734399, 781.7102819, - 738.58271117, 618.26145463, 509.47052142, 494.6403804, - 416.22483123, 403.42108699, 376.42615499, 357.15106681, - 253.15957483, 235.11572972, 221.77439728, 45.65465979, - 0., 14.98414, 28.77606056, 43.49299446, - 74.39463425, 112.74005248, 150.19482607, 167.03665191, - 178.28443483, 193.80834084, 202.28154097, 205.01173833, - 211.22777104, 282.88676739, 344.25957352, 362.66370657, - 367.00206795, 379.23951996, 394.82505328, 486.76073331, - 757.70254732, 960.03439155, 1023.81434529, 1042.49401713, - 1068.53770096, 1109.12696535, 1162.74555108, 1252.847351, - 1385.17179405, 1475.42502599, 1517.57849916, 1549.79838056, - 1580.12405964, 1605.05483058, 1622.98937809, 1657.19268821, - 1669.99157205, 1711.63883132, 1723.09133393, 1736.47655688, - 1746.16073119, 1754.63481838, 1763.34186103, 1772.62691273, - 1777.76189094, 1790.62024447, 1802.11488235, 1807.1040605, - 1813.90756815, 1834.49265566, 1840.00708445, 1861.96087374, - 1880.81678093, 1902.42091191, 1926.37194131, 1963.78301115, - 2011.62679077, 2046.18028824, 2054.37811294, 2097.30347724, - 2111.28586072]) - - v = distance_to_points(points[20], points) - assert_array_almost_equal(v, expected) diff --git a/selfdrive/mapd_manager.py b/selfdrive/mapd_manager.py new file mode 100644 index 0000000000..8bc1bcccf6 --- /dev/null +++ b/selfdrive/mapd_manager.py @@ -0,0 +1,162 @@ +import json +import time +import platform + +import numpy as np + +from openpilot.common.params_pyx import Params +from openpilot.selfdrive.controls.lib.alertmanager import set_offroad_alert +from openpilot.selfdrive.navd.helpers import Coordinate +from openpilot.selfdrive.sunnypilot.live_map_data import QUERY_RADIUS +from openpilot.common.realtime import Ratekeeper, set_core_affinity +from openpilot.common.swaglog import cloudlog +import os +import glob +import shutil + +from openpilot.selfdrive.sunnypilot.live_map_data.osm_map_data import OsmMapData +from openpilot.selfdrive.sunnypilot.live_map_data import R + +# PFEIFER - MAPD {{ +params = Params() +mem_params = Params("/dev/shm/params") if platform.system() != "Darwin" else params +# }} PFEIFER - MAPD + +COMMON_DIR = '/data/media/0/osm' +MAPD_BIN_DIR = '/data/openpilot/third_party/pfeiferj-mapd' +MAPD_PATH = os.path.join(MAPD_BIN_DIR, 'mapd') + + +def get_files_for_cleanup(): + paths = [ + f"{COMMON_DIR}/db", + f"{COMMON_DIR}/v*" + ] + files_to_remove = [] + for path in paths: + if os.path.exists(path): + files = glob.glob(path + '/**', recursive=True) + files_to_remove.extend(files) + # check for version and mapd files + if not os.path.isfile(MAPD_PATH): + files_to_remove.append(MAPD_PATH) + return files_to_remove + + +def cleanup_OLD_OSM_data(files_to_remove): + for file in files_to_remove: + # Remove trailing slash if path is file + if file.endswith('/') and os.path.isfile(file[:-1]): + file = file[:-1] + # Try to remove as file or symbolic link first + if os.path.islink(file) or os.path.isfile(file): + os.remove(file) + elif os.path.isdir(file): # If it's a directory + shutil.rmtree(file, ignore_errors=False) + + +def _get_current_bounding_box(self, radius: float): + self.last_query_radius = radius + # Calculate the bounding box coordinates for the bbox containing the circle around location. + bbox_angle = float(np.degrees(radius / R)) + + lat = float(self.last_gps.latitude) + lon = float(self.last_gps.longitude) + + return { + "min_lat": lat - bbox_angle, + "min_lon": lon - bbox_angle, + "max_lat": lat + bbox_angle, + "max_lon": lon + bbox_angle, + } + + +def _request_refresh_osm_bounds_data(self): + self.last_refresh_loc = Coordinate(self.last_gps.latitude, self.last_gps.longitude) + self.last_query_radius = QUERY_RADIUS + current_bounding_box = self._get_current_bounding_box(self.last_query_radius) + mem_params.put("OSMDownloadBounds", json.dumps(current_bounding_box)) + + +def request_refresh_osm_location_data(nations: [str], states: [str] = None): + params.put("OsmDownloadedDate", str(time.time())) + params.put_bool("OsmDbUpdatesCheck", False) + + osm_download_locations = json.dumps({ + "nations": nations, + "states": states or [] + }) + + print(f"Downloading maps for {osm_download_locations}") + mem_params.put("OSMDownloadLocations", osm_download_locations) + + +def filter_nations_and_states(nations: [str], states: [str] = None): + """Filters and prepares nation and state data for OSM map download. + + If the nation is 'US' and a specific state is provided, the nation 'US' is removed from the list. + If the nation is 'US' and the state is 'All', the 'All' is removed from the list. + The idea behind these filters is that if a specific state in the US is provided, + there's no need to download map data for the entire US. Conversely, + if the state is unspecified (i.e., 'All'), we intend to download map data for the whole US, + and 'All' isn't a valid state name, so it's removed. + + Parameters: + nations (list): A list of nations for which the map data is to be downloaded. + states (list, optional): A list of states for which the map data is to be downloaded. Defaults to None. + + Returns: + tuple: Two lists. The first list is filtered nations and the second list is filtered states. + """ + + if "US" in nations and states and not any(x.lower() == "all" for x in states): + # If a specific state in the US is provided, remove 'US' from nations + nations.remove("US") + elif "US" in nations and states and any(x.lower() == "all" for x in states): + # If 'All' is provided as a state (case invariant), remove those instances from states + states = [x for x in states if x.lower() != "all"] + elif "US" not in nations and states and any(x.lower() == "all" for x in states): + states.remove("All") + return nations, states or [] + + +def update_osm_db(): + # last_downloaded_date = float(params.get('OsmDownloadedDate', encoding='utf-8') or 0.0) + # if params.get_bool("OsmDbUpdatesCheck") or time.time() - last_downloaded_date >= 604800: # 7 days * 24 hours/day * 60 + if params.get_bool("OsmDbUpdatesCheck"): + cleanup_OLD_OSM_data(get_files_for_cleanup()) + country = params.get('OsmLocationName', encoding='utf-8') + state = params.get('OsmStateName', encoding='utf-8') or "All" + filtered_nations, filtered_states = filter_nations_and_states([country], [state]) + request_refresh_osm_location_data(filtered_nations, filtered_states) + + if not mem_params.get("OSMDownloadBounds"): + mem_params.put("OSMDownloadBounds", "") + + if not mem_params.get("LastGPSPosition"): + mem_params.put("LastGPSPosition", "{}") + + +def main_thread(sm=None, pm=None): + try: + set_core_affinity([0, 1, 2, 3]) + except Exception: + cloudlog.exception("mapd: failed to set core affinity") + rk = Ratekeeper(1, print_delay_threshold=None) + live_map_sp = OsmMapData() + + while True: + show_alert = get_files_for_cleanup() and params.get_bool("OsmLocal") + set_offroad_alert("Offroad_OSMUpdateRequired", show_alert, "This alert will be cleared when new maps are downloaded.") + + update_osm_db() + live_map_sp.tick() + rk.keep_time() + + +def main(): + main_thread() + + +if __name__ == "__main__": + main() diff --git a/selfdrive/modeld/SConscript b/selfdrive/modeld/SConscript index 63f3b2b97a..2d15223d1e 100644 --- a/selfdrive/modeld/SConscript +++ b/selfdrive/modeld/SConscript @@ -45,22 +45,24 @@ snpe_rpath = lenvCython['RPATH'] + [snpe_rpath_qcom if arch == "larch64" else sn cython_libs = envCython["LIBS"] + libs snpemodel_lib = lenv.Library('snpemodel', ['runners/snpemodel.cc']) commonmodel_lib = lenv.Library('commonmodel', common_src) -driving_lib = lenv.Library('driving', ['models/driving.cc']) lenvCython.Program('runners/runmodel_pyx.so', 'runners/runmodel_pyx.pyx', LIBS=cython_libs, FRAMEWORKS=frameworks) lenvCython.Program('runners/snpemodel_pyx.so', 'runners/snpemodel_pyx.pyx', LIBS=[snpemodel_lib, snpe_lib, *cython_libs], FRAMEWORKS=frameworks, RPATH=snpe_rpath) lenvCython.Program('models/commonmodel_pyx.so', 'models/commonmodel_pyx.pyx', LIBS=[commonmodel_lib, *cython_libs], FRAMEWORKS=frameworks) -lenvCython.Program('models/driving_pyx.so', 'models/driving_pyx.pyx', LIBS=[driving_lib, commonmodel_lib, *cython_libs], FRAMEWORKS=frameworks) + +# Get model metadata +fn = File("models/supercombo").abspath +cmd = f'python3 {Dir("#selfdrive/modeld").abspath}/get_model_metadata.py {fn}.onnx' +files = sum([lenv.Glob("#"+x) for x in open(File("#release/files_common").abspath).read().split("\n") if x.endswith("get_model_metadata.py")], []) +lenv.Command(fn + "_metadata.pkl", [fn + ".onnx"]+files, cmd) # Build thneed model if arch == "larch64" or GetOption('pc_thneed'): - fn = File("models/supercombo").abspath - - tinygrad_opts = ["NATIVE_EXPLOG=1", "VALIDHACKS=1", "OPTLOCAL=1", "IMAGE=2", "GPU=1", "ENABLE_METHOD_CACHE=1"] + tinygrad_opts = [] if not GetOption('pc_thneed'): # use FLOAT16 on device for speed + don't cache the CL kernels for space tinygrad_opts += ["FLOAT16=1", "PYOPENCL_NO_CACHE=1"] - cmd = f"cd {Dir('#').abspath}/tinygrad_repo && " + ' '.join(tinygrad_opts) + f" python3 openpilot/compile.py {fn}.onnx {fn}.thneed" + cmd = f"cd {Dir('#').abspath}/tinygrad_repo && " + ' '.join(tinygrad_opts) + f" python3 openpilot/compile2.py {fn}.onnx {fn}.thneed" tinygrad_files = sum([lenv.Glob("#"+x) for x in open(File("#release/files_common").abspath).read().split("\n") if x.startswith("tinygrad_repo/")], []) lenv.Command(fn + ".thneed", [fn + ".onnx"] + tinygrad_files, cmd) diff --git a/selfdrive/modeld/constants.py b/selfdrive/modeld/constants.py index 125864b98b..8b40383034 100644 --- a/selfdrive/modeld/constants.py +++ b/selfdrive/modeld/constants.py @@ -1,7 +1,86 @@ -IDX_N = 33 +import numpy as np def index_function(idx, max_val=192, max_idx=32): return (max_val) * ((idx/max_idx)**2) +class ModelConstants: + # time and distance indices + IDX_N = 33 + T_IDXS = [index_function(idx, max_val=10.0) for idx in range(IDX_N)] + X_IDXS = [index_function(idx, max_val=192.0) for idx in range(IDX_N)] + LEAD_T_IDXS = [0., 2., 4., 6., 8., 10.] + LEAD_T_OFFSETS = [0., 2., 4.] + META_T_IDXS = [2., 4., 6., 8., 10.] -T_IDXS = [index_function(idx, max_val=10.0) for idx in range(IDX_N)] + # model inputs constants + MODEL_FREQ = 20 + FEATURE_LEN = 512 + HISTORY_BUFFER_LEN = 99 + DESIRE_LEN = 8 + TRAFFIC_CONVENTION_LEN = 2 + NAV_FEATURE_LEN = 256 + NAV_INSTRUCTION_LEN = 150 + DRIVING_STYLE_LEN = 12 + LAT_PLANNER_STATE_LEN = 4 + LATERAL_CONTROL_PARAMS_LEN = 2 + PREV_DESIRED_CURVS_LEN = 20 + PREV_DESIRED_CURV_LEN = 1 + + # model outputs constants + FCW_THRESHOLDS_5MS2 = np.array([.05, .05, .15, .15, .15], dtype=np.float32) + FCW_THRESHOLDS_3MS2 = np.array([.7, .7], dtype=np.float32) + FCW_5MS2_PROBS_WIDTH = 5 + FCW_3MS2_PROBS_WIDTH = 2 + + DISENGAGE_WIDTH = 5 + POSE_WIDTH = 6 + WIDE_FROM_DEVICE_WIDTH = 3 + SIM_POSE_WIDTH = 6 + LEAD_WIDTH = 4 + LANE_LINES_WIDTH = 2 + ROAD_EDGES_WIDTH = 2 + PLAN_WIDTH = 15 + DESIRE_PRED_WIDTH = 8 + LAT_PLANNER_SOLUTION_WIDTH = 4 + DESIRED_CURV_WIDTH = 1 + + NUM_LANE_LINES = 4 + NUM_ROAD_EDGES = 2 + + LEAD_TRAJ_LEN = 6 + DESIRE_PRED_LEN = 4 + + PLAN_MHP_N = 5 + LEAD_MHP_N = 2 + PLAN_MHP_SELECTION = 1 + LEAD_MHP_SELECTION = 3 + + FCW_THRESHOLD_5MS2_HIGH = 0.15 + FCW_THRESHOLD_5MS2_LOW = 0.05 + FCW_THRESHOLD_3MS2 = 0.7 + + CONFIDENCE_BUFFER_LEN = 5 + RYG_GREEN = 0.01165 + RYG_YELLOW = 0.06157 + +# model outputs slices +class Plan: + POSITION = slice(0, 3) + VELOCITY = slice(3, 6) + ACCELERATION = slice(6, 9) + T_FROM_CURRENT_EULER = slice(9, 12) + ORIENTATION_RATE = slice(12, 15) + +class Meta: + ENGAGED = slice(0, 1) + # next 2, 4, 6, 8, 10 seconds + GAS_DISENGAGE = slice(1, 36, 7) + BRAKE_DISENGAGE = slice(2, 36, 7) + STEER_OVERRIDE = slice(3, 36, 7) + HARD_BRAKE_3 = slice(4, 36, 7) + HARD_BRAKE_4 = slice(5, 36, 7) + HARD_BRAKE_5 = slice(6, 36, 7) + GAS_PRESS = slice(7, 36, 7) + # next 0, 2, 4, 6, 8, 10 seconds + LEFT_BLINKER = slice(36, 48, 2) + RIGHT_BLINKER = slice(37, 48, 2) diff --git a/selfdrive/modeld/dmonitoringmodeld.py b/selfdrive/modeld/dmonitoringmodeld.py index 53c0af0ff3..1e25964702 100755 --- a/selfdrive/modeld/dmonitoringmodeld.py +++ b/selfdrive/modeld/dmonitoringmodeld.py @@ -11,7 +11,7 @@ from typing import Tuple, Dict from cereal import messaging from cereal.messaging import PubMaster, SubMaster from cereal.visionipc import VisionIpcClient, VisionStreamType, VisionBuf -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.common.params import Params from openpilot.common.realtime import set_realtime_priority from openpilot.selfdrive.modeld.runners import ModelRunner, Runtime @@ -101,7 +101,7 @@ def fill_driver_state(msg, ds_result: DriverStateResult): def get_driverstate_packet(model_output: np.ndarray, frame_id: int, location_ts: int, execution_time: float, dsp_execution_time: float): model_result = ctypes.cast(model_output.ctypes.data, ctypes.POINTER(DMonitoringModelResult)).contents - msg = messaging.new_message('driverStateV2') + msg = messaging.new_message('driverStateV2', valid=True) ds = msg.driverStateV2 ds.frameId = frame_id ds.modelExecutionTime = execution_time diff --git a/selfdrive/modeld/fill_model_msg.py b/selfdrive/modeld/fill_model_msg.py new file mode 100644 index 0000000000..5484c85253 --- /dev/null +++ b/selfdrive/modeld/fill_model_msg.py @@ -0,0 +1,198 @@ +import os +import capnp +import numpy as np +from typing import Dict +from cereal import log +from openpilot.selfdrive.modeld.constants import ModelConstants, Plan, Meta + +SEND_RAW_PRED = os.getenv('SEND_RAW_PRED') + +ConfidenceClass = log.ModelDataV2.ConfidenceClass + + +class PublishState: + def __init__(self): + self.disengage_buffer = np.zeros(ModelConstants.CONFIDENCE_BUFFER_LEN*ModelConstants.DISENGAGE_WIDTH, dtype=np.float32) + self.prev_brake_5ms2_probs = np.zeros(ModelConstants.FCW_5MS2_PROBS_WIDTH, dtype=np.float32) + self.prev_brake_3ms2_probs = np.zeros(ModelConstants.FCW_3MS2_PROBS_WIDTH, dtype=np.float32) + +def fill_xyzt(builder, t, x, y, z, x_std=None, y_std=None, z_std=None): + builder.t = t + builder.x = x.tolist() + builder.y = y.tolist() + builder.z = z.tolist() + if x_std is not None: + builder.xStd = x_std.tolist() + if y_std is not None: + builder.yStd = y_std.tolist() + if z_std is not None: + builder.zStd = z_std.tolist() + +def fill_xyvat(builder, t, x, y, v, a, x_std=None, y_std=None, v_std=None, a_std=None): + builder.t = t + builder.x = x.tolist() + builder.y = y.tolist() + builder.v = v.tolist() + builder.a = a.tolist() + if x_std is not None: + builder.xStd = x_std.tolist() + if y_std is not None: + builder.yStd = y_std.tolist() + if v_std is not None: + builder.vStd = v_std.tolist() + if a_std is not None: + builder.aStd = a_std.tolist() + +def fill_model_msg(msg: capnp._DynamicStructBuilder, net_output_data: Dict[str, np.ndarray], publish_state: PublishState, + vipc_frame_id: int, vipc_frame_id_extra: int, frame_id: int, frame_drop: float, + timestamp_eof: int, timestamp_llk: int, model_execution_time: float, + nav_enabled: bool, v_ego: float, steer_delay: float, valid: bool, model_use_lateral_planner: bool) -> None: + frame_age = frame_id - vipc_frame_id if frame_id > vipc_frame_id else 0 + msg.valid = valid + + modelV2 = msg.modelV2 + modelV2.frameId = vipc_frame_id + modelV2.frameIdExtra = vipc_frame_id_extra + modelV2.frameAge = frame_age + modelV2.frameDropPerc = frame_drop * 100 + modelV2.timestampEof = timestamp_eof + modelV2.locationMonoTime = timestamp_llk + modelV2.modelExecutionTime = model_execution_time + modelV2.navEnabled = nav_enabled + + # plan + position = modelV2.position + fill_xyzt(position, ModelConstants.T_IDXS, *net_output_data['plan'][0,:,Plan.POSITION].T, *net_output_data['plan_stds'][0,:,Plan.POSITION].T) + velocity = modelV2.velocity + fill_xyzt(velocity, ModelConstants.T_IDXS, *net_output_data['plan'][0,:,Plan.VELOCITY].T) + acceleration = modelV2.acceleration + fill_xyzt(acceleration, ModelConstants.T_IDXS, *net_output_data['plan'][0,:,Plan.ACCELERATION].T) + orientation = modelV2.orientation + fill_xyzt(orientation, ModelConstants.T_IDXS, *net_output_data['plan'][0,:,Plan.T_FROM_CURRENT_EULER].T) + orientation_rate = modelV2.orientationRate + fill_xyzt(orientation_rate, ModelConstants.T_IDXS, *net_output_data['plan'][0,:,Plan.ORIENTATION_RATE].T) + + # lateral planning + if model_use_lateral_planner: + solution = modelV2.lateralPlannerSolutionDEPRECATED + solution.x, solution.y, solution.yaw, solution.yawRate = [net_output_data['lat_planner_solution'][0,:,i].tolist() for i in range(4)] + solution.xStd, solution.yStd, solution.yawStd, solution.yawRateStd = [net_output_data['lat_planner_solution_stds'][0,:,i].tolist() for i in range(4)] + else: + action = modelV2.action + action.desiredCurvature = float(net_output_data['desired_curvature'][0,0]) + + # times at X_IDXS according to model plan + PLAN_T_IDXS = [np.nan] * ModelConstants.IDX_N + PLAN_T_IDXS[0] = 0.0 + plan_x = net_output_data['plan'][0,:,Plan.POSITION][:,0].tolist() + for xidx in range(1, ModelConstants.IDX_N): + tidx = 0 + # increment tidx until we find an element that's further away than the current xidx + while tidx < ModelConstants.IDX_N - 1 and plan_x[tidx+1] < ModelConstants.X_IDXS[xidx]: + tidx += 1 + if tidx == ModelConstants.IDX_N - 1: + # if the Plan doesn't extend far enough, set plan_t to the max value (10s), then break + PLAN_T_IDXS[xidx] = ModelConstants.T_IDXS[ModelConstants.IDX_N - 1] + break + # interpolate to find `t` for the current xidx + current_x_val = plan_x[tidx] + next_x_val = plan_x[tidx+1] + p = (ModelConstants.X_IDXS[xidx] - current_x_val) / (next_x_val - current_x_val) if abs(next_x_val - current_x_val) > 1e-9 else float('nan') + PLAN_T_IDXS[xidx] = p * ModelConstants.T_IDXS[tidx+1] + (1 - p) * ModelConstants.T_IDXS[tidx] + + # lane lines + modelV2.init('laneLines', 4) + for i in range(4): + lane_line = modelV2.laneLines[i] + fill_xyzt(lane_line, PLAN_T_IDXS, np.array(ModelConstants.X_IDXS), net_output_data['lane_lines'][0,i,:,0], net_output_data['lane_lines'][0,i,:,1]) + modelV2.laneLineStds = net_output_data['lane_lines_stds'][0,:,0,0].tolist() + modelV2.laneLineProbs = net_output_data['lane_lines_prob'][0,1::2].tolist() + + # road edges + modelV2.init('roadEdges', 2) + for i in range(2): + road_edge = modelV2.roadEdges[i] + fill_xyzt(road_edge, PLAN_T_IDXS, np.array(ModelConstants.X_IDXS), net_output_data['road_edges'][0,i,:,0], net_output_data['road_edges'][0,i,:,1]) + modelV2.roadEdgeStds = net_output_data['road_edges_stds'][0,:,0,0].tolist() + + # leads + modelV2.init('leadsV3', 3) + for i in range(3): + lead = modelV2.leadsV3[i] + fill_xyvat(lead, ModelConstants.LEAD_T_IDXS, *net_output_data['lead'][0,i].T, *net_output_data['lead_stds'][0,i].T) + lead.prob = net_output_data['lead_prob'][0,i].tolist() + lead.probTime = ModelConstants.LEAD_T_OFFSETS[i] + + # meta + meta = modelV2.meta + meta.desireState = net_output_data['desire_state'][0].reshape(-1).tolist() + meta.desirePrediction = net_output_data['desire_pred'][0].reshape(-1).tolist() + meta.engagedProb = net_output_data['meta'][0,Meta.ENGAGED].item() + meta.init('disengagePredictions') + disengage_predictions = meta.disengagePredictions + disengage_predictions.t = ModelConstants.META_T_IDXS + disengage_predictions.brakeDisengageProbs = net_output_data['meta'][0,Meta.BRAKE_DISENGAGE].tolist() + disengage_predictions.gasDisengageProbs = net_output_data['meta'][0,Meta.GAS_DISENGAGE].tolist() + disengage_predictions.steerOverrideProbs = net_output_data['meta'][0,Meta.STEER_OVERRIDE].tolist() + disengage_predictions.brake3MetersPerSecondSquaredProbs = net_output_data['meta'][0,Meta.HARD_BRAKE_3].tolist() + disengage_predictions.brake4MetersPerSecondSquaredProbs = net_output_data['meta'][0,Meta.HARD_BRAKE_4].tolist() + disengage_predictions.brake5MetersPerSecondSquaredProbs = net_output_data['meta'][0,Meta.HARD_BRAKE_5].tolist() + + publish_state.prev_brake_5ms2_probs[:-1] = publish_state.prev_brake_5ms2_probs[1:] + publish_state.prev_brake_5ms2_probs[-1] = net_output_data['meta'][0,Meta.HARD_BRAKE_5][0] + publish_state.prev_brake_3ms2_probs[:-1] = publish_state.prev_brake_3ms2_probs[1:] + publish_state.prev_brake_3ms2_probs[-1] = net_output_data['meta'][0,Meta.HARD_BRAKE_3][0] + hard_brake_predicted = (publish_state.prev_brake_5ms2_probs > ModelConstants.FCW_THRESHOLDS_5MS2).all() and \ + (publish_state.prev_brake_3ms2_probs > ModelConstants.FCW_THRESHOLDS_3MS2).all() + meta.hardBrakePredicted = hard_brake_predicted.item() + + # temporal pose + temporal_pose = modelV2.temporalPose + temporal_pose.trans = net_output_data['sim_pose'][0,:3].tolist() + temporal_pose.transStd = net_output_data['sim_pose_stds'][0,:3].tolist() + temporal_pose.rot = net_output_data['sim_pose'][0,3:].tolist() + temporal_pose.rotStd = net_output_data['sim_pose_stds'][0,3:].tolist() + + # confidence + if vipc_frame_id % (2*ModelConstants.MODEL_FREQ) == 0: + # any disengage prob + brake_disengage_probs = net_output_data['meta'][0,Meta.BRAKE_DISENGAGE] + gas_disengage_probs = net_output_data['meta'][0,Meta.GAS_DISENGAGE] + steer_override_probs = net_output_data['meta'][0,Meta.STEER_OVERRIDE] + any_disengage_probs = 1-((1-brake_disengage_probs)*(1-gas_disengage_probs)*(1-steer_override_probs)) + # independent disengage prob for each 2s slice + ind_disengage_probs = np.r_[any_disengage_probs[0], np.diff(any_disengage_probs) / (1 - any_disengage_probs[:-1])] + # rolling buf for 2, 4, 6, 8, 10s + publish_state.disengage_buffer[:-ModelConstants.DISENGAGE_WIDTH] = publish_state.disengage_buffer[ModelConstants.DISENGAGE_WIDTH:] + publish_state.disengage_buffer[-ModelConstants.DISENGAGE_WIDTH:] = ind_disengage_probs + + score = 0. + for i in range(ModelConstants.DISENGAGE_WIDTH): + score += publish_state.disengage_buffer[i*ModelConstants.DISENGAGE_WIDTH+ModelConstants.DISENGAGE_WIDTH-1-i].item() / ModelConstants.DISENGAGE_WIDTH + if score < ModelConstants.RYG_GREEN: + modelV2.confidence = ConfidenceClass.green + elif score < ModelConstants.RYG_YELLOW: + modelV2.confidence = ConfidenceClass.yellow + else: + modelV2.confidence = ConfidenceClass.red + + # raw prediction if enabled + if SEND_RAW_PRED: + modelV2.rawPredictions = net_output_data['raw_pred'].tobytes() + +def fill_pose_msg(msg: capnp._DynamicStructBuilder, net_output_data: Dict[str, np.ndarray], + vipc_frame_id: int, vipc_dropped_frames: int, timestamp_eof: int, live_calib_seen: bool) -> None: + msg.valid = live_calib_seen & (vipc_dropped_frames < 1) + cameraOdometry = msg.cameraOdometry + + cameraOdometry.frameId = vipc_frame_id + cameraOdometry.timestampEof = timestamp_eof + + cameraOdometry.trans = net_output_data['pose'][0,:3].tolist() + cameraOdometry.rot = net_output_data['pose'][0,3:].tolist() + cameraOdometry.wideFromDeviceEuler = net_output_data['wide_from_device_euler'][0,:].tolist() + cameraOdometry.roadTransformTrans = net_output_data['road_transform'][0,:3].tolist() + cameraOdometry.transStd = net_output_data['pose_stds'][0,:3].tolist() + cameraOdometry.rotStd = net_output_data['pose_stds'][0,3:].tolist() + cameraOdometry.wideFromDeviceEulerStd = net_output_data['wide_from_device_euler_stds'][0,:].tolist() + cameraOdometry.roadTransformTransStd = net_output_data['road_transform_stds'][0,:3].tolist() diff --git a/selfdrive/modeld/get_model_metadata.py b/selfdrive/modeld/get_model_metadata.py new file mode 100755 index 0000000000..187f83399b --- /dev/null +++ b/selfdrive/modeld/get_model_metadata.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +import sys +import pathlib +import onnx +import codecs +import pickle +from typing import Tuple + +def get_name_and_shape(value_info:onnx.ValueInfoProto) -> Tuple[str, Tuple[int,...]]: + shape = tuple([int(dim.dim_value) for dim in value_info.type.tensor_type.shape.dim]) + name = value_info.name + return name, shape + +if __name__ == "__main__": + model_path = pathlib.Path(sys.argv[1]) + model = onnx.load(str(model_path)) + i = [x.key for x in model.metadata_props].index('output_slices') + output_slices = model.metadata_props[i].value + + metadata = {} + metadata['output_slices'] = pickle.loads(codecs.decode(output_slices.encode(), "base64")) + metadata['input_shapes'] = dict([get_name_and_shape(x) for x in model.graph.input]) + metadata['output_shapes'] = dict([get_name_and_shape(x) for x in model.graph.output]) + + metadata_path = model_path.parent / (model_path.stem + '_metadata.pkl') + with open(metadata_path, 'wb') as f: + pickle.dump(metadata, f) + + print(f'saved metadata to {metadata_path}') diff --git a/selfdrive/modeld/modeld b/selfdrive/modeld/modeld index 14048ec9fd..e1cef4dcc3 100755 --- a/selfdrive/modeld/modeld +++ b/selfdrive/modeld/modeld @@ -7,4 +7,4 @@ if [ -f "$DIR/libthneed.so" ]; then export LD_PRELOAD="$DIR/libthneed.so" fi -exec "$DIR/modeld.py" +exec "$DIR/modeld.py" "$@" diff --git a/selfdrive/modeld/modeld.py b/selfdrive/modeld/modeld.py index 3c416ce939..9a1b7d880c 100755 --- a/selfdrive/modeld/modeld.py +++ b/selfdrive/modeld/modeld.py @@ -1,28 +1,46 @@ #!/usr/bin/env python3 -import sys +import os import time +import pickle import numpy as np +import cereal.messaging as messaging +from cereal import car, log from pathlib import Path from typing import Dict, Optional from setproctitle import setproctitle from cereal.messaging import PubMaster, SubMaster from cereal.visionipc import VisionIpcClient, VisionStreamType, VisionBuf -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.common.params import Params +from openpilot.common.realtime import DT_MDL +from openpilot.common.numpy_fast import interp from openpilot.common.filter_simple import FirstOrderFilter from openpilot.common.realtime import config_realtime_process from openpilot.common.transformations.model import get_warp_matrix +from openpilot.selfdrive import sentry +from openpilot.selfdrive.car.car_helpers import get_demo_car_params +from openpilot.selfdrive.controls.lib.desire_helper import DesireHelper from openpilot.selfdrive.modeld.runners import ModelRunner, Runtime +from openpilot.selfdrive.modeld.parse_model_outputs import Parser +from openpilot.selfdrive.modeld.fill_model_msg import fill_model_msg, fill_pose_msg, PublishState +from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.modeld.models.commonmodel_pyx import ModelFrame, CLContext -from openpilot.selfdrive.modeld.models.driving_pyx import ( - PublishState, create_model_msg, create_pose_msg, - FEATURE_LEN, HISTORY_BUFFER_LEN, DESIRE_LEN, TRAFFIC_CONVENTION_LEN, NAV_FEATURE_LEN, NAV_INSTRUCTION_LEN, - OUTPUT_SIZE, NET_OUTPUT_SIZE, MODEL_FREQ) +from openpilot.selfdrive.sunnypilot import get_model_generation + +PROCESS_NAME = "selfdrive.modeld.modeld" +SEND_RAW_PRED = os.getenv('SEND_RAW_PRED') MODEL_PATHS = { ModelRunner.THNEED: Path(__file__).parent / 'models/supercombo.thneed', ModelRunner.ONNX: Path(__file__).parent / 'models/supercombo.onnx'} +METADATA_PATH = Path(__file__).parent / 'models/supercombo_metadata.pkl' + +CUSTOM_MODEL_PATH = "/data/media/0/models" + +LaneChangeState = log.LaneChangeState + + class FrameMeta: frame_id: int = 0 timestamp_sof: int = 0 @@ -41,36 +59,77 @@ class ModelState: model: ModelRunner def __init__(self, context: CLContext): + self.param_s = Params() + self.custom_model, self.model_gen = get_model_generation(self.param_s) self.frame = ModelFrame(context) self.wide_frame = ModelFrame(context) - self.prev_desire = np.zeros(DESIRE_LEN, dtype=np.float32) - self.output = np.zeros(NET_OUTPUT_SIZE, dtype=np.float32) + self.prev_desire = np.zeros(ModelConstants.DESIRE_LEN, dtype=np.float32) + _inputs = { + 'lateral_control_params': np.zeros(ModelConstants.LATERAL_CONTROL_PARAMS_LEN, dtype=np.float32), + 'prev_desired_curv': np.zeros(ModelConstants.PREV_DESIRED_CURV_LEN * (ModelConstants.HISTORY_BUFFER_LEN+1), dtype=np.float32), + } + if self.custom_model and self.model_gen != 0: + if self.model_gen == 1: + _inputs = { + 'lat_planner_state': np.zeros(ModelConstants.LAT_PLANNER_STATE_LEN, dtype=np.float32), + } + if self.model_gen == 2: + _inputs = { + 'lateral_control_params': np.zeros(ModelConstants.LATERAL_CONTROL_PARAMS_LEN, dtype=np.float32), + 'prev_desired_curvs': np.zeros(ModelConstants.PREV_DESIRED_CURVS_LEN, dtype=np.float32), + } + self.inputs = { - 'desire': np.zeros(DESIRE_LEN * (HISTORY_BUFFER_LEN+1), dtype=np.float32), - 'traffic_convention': np.zeros(TRAFFIC_CONVENTION_LEN, dtype=np.float32), - 'nav_features': np.zeros(NAV_FEATURE_LEN, dtype=np.float32), - 'nav_instructions': np.zeros(NAV_INSTRUCTION_LEN, dtype=np.float32), - 'features_buffer': np.zeros(HISTORY_BUFFER_LEN * FEATURE_LEN, dtype=np.float32), + 'desire': np.zeros(ModelConstants.DESIRE_LEN * (ModelConstants.HISTORY_BUFFER_LEN+1), dtype=np.float32), + 'traffic_convention': np.zeros(ModelConstants.TRAFFIC_CONVENTION_LEN, dtype=np.float32), + **_inputs, + 'nav_features': np.zeros(ModelConstants.NAV_FEATURE_LEN, dtype=np.float32), + 'nav_instructions': np.zeros(ModelConstants.NAV_INSTRUCTION_LEN, dtype=np.float32), + 'features_buffer': np.zeros(ModelConstants.HISTORY_BUFFER_LEN * ModelConstants.FEATURE_LEN, dtype=np.float32), } - self.model = ModelRunner(MODEL_PATHS, self.output, Runtime.GPU, False, context) + if self.custom_model and self.model_gen != 0: + _model_name = self.param_s.get("DrivingModelText", encoding="utf8") + _model_paths = {ModelRunner.THNEED: f"{CUSTOM_MODEL_PATH}/supercombo-{_model_name}.thneed"} + _metadata_name = self.param_s.get("DrivingModelMetadataText", encoding="utf8") + _metadata_path = f"{CUSTOM_MODEL_PATH}/supercombo_metadata_{_metadata_name}.pkl" if _model_name else METADATA_PATH + else: + _model_paths = MODEL_PATHS + _metadata_path = METADATA_PATH + + with open(_metadata_path, 'rb') as f: + model_metadata = pickle.load(f) + + self.output_slices = model_metadata['output_slices'] + net_output_size = model_metadata['output_shapes']['outputs'][1] + self.output = np.zeros(net_output_size, dtype=np.float32) + self.parser = Parser() + + self.model = ModelRunner(_model_paths, self.output, Runtime.GPU, False, context) self.model.addInput("input_imgs", None) self.model.addInput("big_input_imgs", None) for k,v in self.inputs.items(): self.model.addInput(k, v) + def slice_outputs(self, model_outputs: np.ndarray) -> Dict[str, np.ndarray]: + parsed_model_outputs = {k: model_outputs[np.newaxis, v] for k,v in self.output_slices.items()} + if SEND_RAW_PRED: + parsed_model_outputs['raw_pred'] = model_outputs.copy() + return parsed_model_outputs + def run(self, buf: VisionBuf, wbuf: VisionBuf, transform: np.ndarray, transform_wide: np.ndarray, - inputs: Dict[str, np.ndarray], prepare_only: bool) -> Optional[np.ndarray]: + inputs: Dict[str, np.ndarray], prepare_only: bool) -> Optional[Dict[str, np.ndarray]]: # Model decides when action is completed, so desire input is just a pulse triggered on rising edge inputs['desire'][0] = 0 - self.inputs['desire'][:-DESIRE_LEN] = self.inputs['desire'][DESIRE_LEN:] - self.inputs['desire'][-DESIRE_LEN:] = np.where(inputs['desire'] - self.prev_desire > .99, inputs['desire'], 0) + self.inputs['desire'][:-ModelConstants.DESIRE_LEN] = self.inputs['desire'][ModelConstants.DESIRE_LEN:] + self.inputs['desire'][-ModelConstants.DESIRE_LEN:] = np.where(inputs['desire'] - self.prev_desire > .99, inputs['desire'], 0) self.prev_desire[:] = inputs['desire'] self.inputs['traffic_convention'][:] = inputs['traffic_convention'] + if not (self.custom_model and self.model_gen == 1): + self.inputs['lateral_control_params'][:] = inputs['lateral_control_params'] self.inputs['nav_features'][:] = inputs['nav_features'] self.inputs['nav_instructions'][:] = inputs['nav_instructions'] - # self.inputs['driving_style'][:] = inputs['driving_style'] # if getCLBuffer is not None, frame will be None self.model.setInputBuffer("input_imgs", self.frame.prepare(buf, transform.flatten(), self.model.getCLBuffer("input_imgs"))) @@ -81,14 +140,27 @@ class ModelState: return None self.model.execute() - self.inputs['features_buffer'][:-FEATURE_LEN] = self.inputs['features_buffer'][FEATURE_LEN:] - self.inputs['features_buffer'][-FEATURE_LEN:] = self.output[OUTPUT_SIZE:OUTPUT_SIZE+FEATURE_LEN] - return self.output + outputs = self.parser.parse_outputs(self.slice_outputs(self.output)) + + self.inputs['features_buffer'][:-ModelConstants.FEATURE_LEN] = self.inputs['features_buffer'][ModelConstants.FEATURE_LEN:] + self.inputs['features_buffer'][-ModelConstants.FEATURE_LEN:] = outputs['hidden_state'][0, :] + if self.custom_model and self.model_gen != 0: + if self.model_gen == 1: + self.inputs['lat_planner_state'][2] = interp(DT_MDL, ModelConstants.T_IDXS, outputs['lat_planner_solution'][0, :, 2]) + self.inputs['lat_planner_state'][3] = interp(DT_MDL, ModelConstants.T_IDXS, outputs['lat_planner_solution'][0, :, 3]) + elif self.model_gen == 2: + self.inputs['prev_desired_curvs'][:-1] = self.inputs['prev_desired_curvs'][1:] + self.inputs['prev_desired_curvs'][-1] = outputs['desired_curvature'][0, 0] + else: + self.inputs['prev_desired_curv'][:-ModelConstants.PREV_DESIRED_CURV_LEN] = self.inputs['prev_desired_curv'][ModelConstants.PREV_DESIRED_CURV_LEN:] + self.inputs['prev_desired_curv'][-ModelConstants.PREV_DESIRED_CURV_LEN:] = outputs['desired_curvature'][0, :] + return outputs -def main(): - cloudlog.bind(daemon="selfdrive.modeld.modeld") - setproctitle("selfdrive.modeld.modeld") +def main(demo=False): + sentry.set_tag("daemon", PROCESS_NAME) + cloudlog.bind(daemon=PROCESS_NAME) + setproctitle(PROCESS_NAME) config_realtime_process(7, 54) cl_context = CLContext() @@ -111,7 +183,7 @@ def main(): while not vipc_client_main.connect(False): time.sleep(0.1) - while not vipc_client_extra.connect(False): + while use_extra_client and not vipc_client_extra.connect(False): time.sleep(0.1) cloudlog.warning(f"connected main cam with buffer size: {vipc_client_main.buffer_len} ({vipc_client_main.width} x {vipc_client_main.height})") @@ -119,29 +191,46 @@ def main(): cloudlog.warning(f"connected extra cam with buffer size: {vipc_client_extra.buffer_len} ({vipc_client_extra.width} x {vipc_client_extra.height})") # messaging - pm = PubMaster(["modelV2", "cameraOdometry"]) - sm = SubMaster(["lateralPlan", "roadCameraState", "liveCalibration", "driverMonitoringState", "navModel", "navInstruction"]) + pm = PubMaster(["modelV2", "modelV2SP", "cameraOdometry"]) + sm = SubMaster(["carState", "roadCameraState", "liveCalibration", "driverMonitoringState", "navModel", "navInstruction", "carControl", "lateralPlanDEPRECATED", "lateralPlanSPDEPRECATED"]) - state = PublishState() + + publish_state = PublishState() params = Params() + custom_model, model_gen = get_model_generation(params) + if not (custom_model and model_gen == 1): + with car.CarParams.from_bytes(params.get("CarParams", block=True)) as msg: + steer_delay = msg.steerActuatorDelay + .2 + #steer_delay = 0.4 # setup filter to track dropped frames - frame_dropped_filter = FirstOrderFilter(0., 10., 1. / MODEL_FREQ) + frame_dropped_filter = FirstOrderFilter(0., 10., 1. / ModelConstants.MODEL_FREQ) frame_id = 0 last_vipc_frame_id = 0 run_count = 0 - # last = 0.0 model_transform_main = np.zeros((3, 3), dtype=np.float32) model_transform_extra = np.zeros((3, 3), dtype=np.float32) live_calib_seen = False - driving_style = np.array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], dtype=np.float32) - nav_features = np.zeros(NAV_FEATURE_LEN, dtype=np.float32) - nav_instructions = np.zeros(NAV_INSTRUCTION_LEN, dtype=np.float32) + if custom_model and model_gen == 1: + driving_style = np.array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], dtype=np.float32) + nav_features = np.zeros(ModelConstants.NAV_FEATURE_LEN, dtype=np.float32) + nav_instructions = np.zeros(ModelConstants.NAV_INSTRUCTION_LEN, dtype=np.float32) buf_main, buf_extra = None, None meta_main = FrameMeta() meta_extra = FrameMeta() + + if demo: + CP = get_demo_car_params() + with car.CarParams.from_bytes(params.get("CarParams", block=True)) as msg: + CP = msg + cloudlog.info("plannerd got CarParams: %s", CP.carName) + # TODO this needs more thought, use .2s extra for now to estimate other delays + steer_delay = CP.steerActuatorDelay + .2 + DH = DesireHelper() + + while True: # Keep receiving frames until we are at least 1 frame ahead of previous extra frame while meta_main.timestamp_sof < meta_extra.timestamp_sof + 25000000: @@ -178,9 +267,13 @@ def main(): # TODO: path planner timeout? sm.update(0) - desire = sm["lateralPlan"].desire.raw + desire = sm["lateralPlanDEPRECATED"].desire.raw if custom_model and model_gen == 1 else DH.desire + v_ego = sm["carState"].vEgo is_rhd = sm["driverMonitoringState"].isRHD frame_id = sm["roadCameraState"].frameId + if not (custom_model and model_gen == 1): + # TODO add lag + lateral_control_params = np.array([sm["carState"].vEgo, steer_delay], dtype=np.float32) if sm.updated["liveCalibration"]: device_from_calib_euler = np.array(sm["liveCalibration"].rpyCalib, dtype=np.float32) model_transform_main = get_warp_matrix(device_from_calib_euler, main_wide_camera, False).astype(np.float32) @@ -190,14 +283,14 @@ def main(): traffic_convention = np.zeros(2) traffic_convention[int(is_rhd)] = 1 - vec_desire = np.zeros(DESIRE_LEN, dtype=np.float32) - if desire >= 0 and desire < DESIRE_LEN: + vec_desire = np.zeros(ModelConstants.DESIRE_LEN, dtype=np.float32) + if desire >= 0 and desire < ModelConstants.DESIRE_LEN: vec_desire[desire] = 1 # Enable/disable nav features timestamp_llk = sm["navModel"].locationMonoTime nav_valid = sm.valid["navModel"] # and (nanos_since_boot() - timestamp_llk < 1e9) - nav_enabled = nav_valid and params.get_bool("ExperimentalMode") + nav_enabled = nav_valid if not nav_enabled: nav_features[:] = 0 @@ -231,10 +324,19 @@ def main(): if prepare_only: cloudlog.error(f"skipping model eval. Dropped {vipc_dropped_frames} frames") + if custom_model and model_gen == 1: + _inputs = { + 'driving_style': driving_style + } + else: + _inputs = { + 'lateral_control_params': lateral_control_params + } + inputs:Dict[str, np.ndarray] = { 'desire': vec_desire, 'traffic_convention': traffic_convention, - 'driving_style': driving_style, + **_inputs, 'nav_features': nav_features, 'nav_instructions': nav_instructions} @@ -243,19 +345,46 @@ def main(): mt2 = time.perf_counter() model_execution_time = mt2 - mt1 + lat_plan_sp = sm['lateralPlanSPDEPRECATED'] + if model_output is not None: - pm.send("modelV2", create_model_msg(model_output, state, meta_main.frame_id, meta_extra.frame_id, frame_id, frame_drop_ratio, - meta_main.timestamp_eof, timestamp_llk, model_execution_time, nav_enabled, live_calib_seen)) - pm.send("cameraOdometry", create_pose_msg(model_output, meta_main.frame_id, vipc_dropped_frames, meta_main.timestamp_eof, live_calib_seen)) + modelv2_send = messaging.new_message('modelV2') + posenet_send = messaging.new_message('cameraOdometry') + fill_model_msg(modelv2_send, model_output, publish_state, meta_main.frame_id, meta_extra.frame_id, frame_id, frame_drop_ratio, + meta_main.timestamp_eof, timestamp_llk, model_execution_time, nav_enabled, v_ego, steer_delay, live_calib_seen, custom_model and model_gen == 1) + + if not (custom_model and model_gen == 1): + desire_state = modelv2_send.modelV2.meta.desireState + l_lane_change_prob = desire_state[log.Desire.laneChangeLeft] + r_lane_change_prob = desire_state[log.Desire.laneChangeRight] + lane_change_prob = l_lane_change_prob + r_lane_change_prob + DH.update(sm['carState'], sm['carControl'].latActive, lane_change_prob, lat_plan_sp=lat_plan_sp) + modelv2_send.modelV2.meta.laneChangeState = DH.lane_change_state + modelv2_send.modelV2.meta.laneChangeDirection = DH.lane_change_direction + + fill_pose_msg(posenet_send, model_output, meta_main.frame_id, vipc_dropped_frames, meta_main.timestamp_eof, live_calib_seen) + pm.send('modelV2', modelv2_send) + pm.send('cameraOdometry', posenet_send) + + modelv2_sp_send = messaging.new_message('modelV2SP') + modelv2_sp_send.valid = True + if not (custom_model and model_gen == 1): + modelv2_sp_send.modelV2SP.laneChangePrev = DH.prev_lane_change + modelv2_sp_send.modelV2SP.laneChangeEdgeBlock = lat_plan_sp.laneChangeEdgeBlockDEPRECATED + pm.send('modelV2SP', modelv2_sp_send) - # print("model process: %.2fms, from last %.2fms, vipc_frame_id %u, frame_id, %u, frame_drop %.3f" % - # ((mt2 - mt1)*1000, (mt1 - last)*1000, meta_extra.frame_id, frame_id, frame_drop_ratio)) - # last = mt1 last_vipc_frame_id = meta_main.frame_id if __name__ == "__main__": try: - main() + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--demo', action='store_true', help='A boolean for demo mode.') + args = parser.parse_args() + main(demo=args.demo) except KeyboardInterrupt: - sys.exit() + cloudlog.warning(f"child {PROCESS_NAME} got SIGINT") + except Exception: + sentry.capture_exception() + raise diff --git a/selfdrive/modeld/models/README.md b/selfdrive/modeld/models/README.md index 11808ef552..ff5c91fe0c 100644 --- a/selfdrive/modeld/models/README.md +++ b/selfdrive/modeld/models/README.md @@ -20,7 +20,11 @@ To view the architecture of the ONNX networks, you can use [netron](https://netr * **traffic convention** * one-hot encoded vector to tell model whether traffic is right-hand or left-hand traffic : 2 * **feature buffer** - * A buffer of intermediate features that gets appended to the current feature to form a 5 seconds temporal context (at 20FPS) : 99 * 128 + * A buffer of intermediate features that gets appended to the current feature to form a 5 seconds temporal context (at 20FPS) : 99 * 512 +* **nav features** + * 1 * 150 +* **nav instructions** + * 1 * 256 ### Supercombo output format (Full size: XXX x float32) diff --git a/selfdrive/modeld/models/dmonitoring_model.current b/selfdrive/modeld/models/dmonitoring_model.current index 065bc7d489..ed495df3a8 100644 --- a/selfdrive/modeld/models/dmonitoring_model.current +++ b/selfdrive/modeld/models/dmonitoring_model.current @@ -1,2 +1,2 @@ -d1124586-761e-4e18-a771-6b5ef35124fe -6fec774f513a19e44d4316e46ad38277197d45ea \ No newline at end of file +60abed33-9f25-4e34-9937-aaf918d41dfc +50887963963a3022e85ac0c94b0801aef955a608 \ No newline at end of file diff --git a/selfdrive/modeld/models/dmonitoring_model.onnx b/selfdrive/modeld/models/dmonitoring_model.onnx index f8bf94c061..3e94e7d36a 100644 --- a/selfdrive/modeld/models/dmonitoring_model.onnx +++ b/selfdrive/modeld/models/dmonitoring_model.onnx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:517262fa9f1ad3cc8049ad3722903f40356d87ea423ee5cf011226fb6cfc3d5b -size 16072278 +oid sha256:9a667cbde6eca86c5b653f57853e3d33b9a875bceb557e193d1bef78c2df9c37 +size 16132779 diff --git a/selfdrive/modeld/models/dmonitoring_model_q.dlc b/selfdrive/modeld/models/dmonitoring_model_q.dlc index e4e6fb3347..041949ad94 100644 --- a/selfdrive/modeld/models/dmonitoring_model_q.dlc +++ b/selfdrive/modeld/models/dmonitoring_model_q.dlc @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64b94659226a1e3c6594a13c2e5d029465d5803a5c3005121ec7217acdbbef20 -size 4443461 +oid sha256:f5729c457dd47f6c35e2a818eae14113526fd0bfac6417a809cbaf9d38697d9b +size 4488413 diff --git a/selfdrive/modeld/models/driving.cc b/selfdrive/modeld/models/driving.cc deleted file mode 100644 index 0a7f0c949d..0000000000 --- a/selfdrive/modeld/models/driving.cc +++ /dev/null @@ -1,330 +0,0 @@ -#include "selfdrive/modeld/models/driving.h" - -#include - - -void fill_lead(cereal::ModelDataV2::LeadDataV3::Builder lead, const ModelOutputLeads &leads, int t_idx, float prob_t) { - std::array lead_t = {0.0, 2.0, 4.0, 6.0, 8.0, 10.0}; - const auto &best_prediction = leads.get_best_prediction(t_idx); - lead.setProb(sigmoid(leads.prob[t_idx])); - lead.setProbTime(prob_t); - std::array lead_x, lead_y, lead_v, lead_a; - std::array lead_x_std, lead_y_std, lead_v_std, lead_a_std; - for (int i=0; i desire_state_softmax; - softmax(meta_data.desire_state_prob.array.data(), desire_state_softmax.data(), DESIRE_LEN); - - std::array desire_pred_softmax; - for (int i=0; i lat_long_t = {2, 4, 6, 8, 10}; - std::array gas_disengage_sigmoid, brake_disengage_sigmoid, steer_override_sigmoid, - brake_3ms2_sigmoid, brake_4ms2_sigmoid, brake_5ms2_sigmoid; - for (int i=0; i threshold; - } - for (int i=0; i FCW_THRESHOLD_3MS2; - } - - auto disengage = meta.initDisengagePredictions(); - disengage.setT(to_kj_array_ptr(lat_long_t)); - disengage.setGasDisengageProbs(to_kj_array_ptr(gas_disengage_sigmoid)); - disengage.setBrakeDisengageProbs(to_kj_array_ptr(brake_disengage_sigmoid)); - disengage.setSteerOverrideProbs(to_kj_array_ptr(steer_override_sigmoid)); - disengage.setBrake3MetersPerSecondSquaredProbs(to_kj_array_ptr(brake_3ms2_sigmoid)); - disengage.setBrake4MetersPerSecondSquaredProbs(to_kj_array_ptr(brake_4ms2_sigmoid)); - disengage.setBrake5MetersPerSecondSquaredProbs(to_kj_array_ptr(brake_5ms2_sigmoid)); - - meta.setEngagedProb(sigmoid(meta_data.engaged_prob)); - meta.setDesirePrediction(to_kj_array_ptr(desire_pred_softmax)); - meta.setDesireState(to_kj_array_ptr(desire_state_softmax)); - meta.setHardBrakePredicted(above_fcw_threshold); -} - -void fill_confidence(cereal::ModelDataV2::Builder &framed, PublishState &ps) { - if (framed.getFrameId() % (2*MODEL_FREQ) == 0) { - // update every 2s to match predictions interval - auto dbps = framed.getMeta().getDisengagePredictions().getBrakeDisengageProbs(); - auto dgps = framed.getMeta().getDisengagePredictions().getGasDisengageProbs(); - auto dsps = framed.getMeta().getDisengagePredictions().getSteerOverrideProbs(); - - float any_dp[DISENGAGE_LEN]; - float dp_ind[DISENGAGE_LEN]; - - for (int i = 0; i < DISENGAGE_LEN; i++) { - any_dp[i] = 1 - ((1-dbps[i])*(1-dgps[i])*(1-dsps[i])); // any disengage prob - } - - dp_ind[0] = any_dp[0]; - for (int i = 0; i < DISENGAGE_LEN-1; i++) { - dp_ind[i+1] = (any_dp[i+1] - any_dp[i]) / (1 - any_dp[i]); // independent disengage prob for each 2s slice - } - - // rolling buf for 2, 4, 6, 8, 10s - std::memmove(&ps.disengage_buffer[0], &ps.disengage_buffer[DISENGAGE_LEN], sizeof(float) * DISENGAGE_LEN * (DISENGAGE_LEN-1)); - std::memcpy(&ps.disengage_buffer[DISENGAGE_LEN * (DISENGAGE_LEN-1)], &dp_ind[0], sizeof(float) * DISENGAGE_LEN); - } - - float score = 0; - for (int i = 0; i < DISENGAGE_LEN; i++) { - score += ps.disengage_buffer[i*DISENGAGE_LEN+DISENGAGE_LEN-1-i] / DISENGAGE_LEN; - } - - if (score < RYG_GREEN) { - framed.setConfidence(cereal::ModelDataV2::ConfidenceClass::GREEN); - } else if (score < RYG_YELLOW) { - framed.setConfidence(cereal::ModelDataV2::ConfidenceClass::YELLOW); - } else { - framed.setConfidence(cereal::ModelDataV2::ConfidenceClass::RED); - } -} - -template -void fill_xyzt(cereal::XYZTData::Builder xyzt, const std::array &t, - const std::array &x, const std::array &y, const std::array &z) { - xyzt.setT(to_kj_array_ptr(t)); - xyzt.setX(to_kj_array_ptr(x)); - xyzt.setY(to_kj_array_ptr(y)); - xyzt.setZ(to_kj_array_ptr(z)); -} - -template -void fill_xyzt(cereal::XYZTData::Builder xyzt, const std::array &t, - const std::array &x, const std::array &y, const std::array &z, - const std::array &x_std, const std::array &y_std, const std::array &z_std) { - fill_xyzt(xyzt, t, x, y, z); - xyzt.setXStd(to_kj_array_ptr(x_std)); - xyzt.setYStd(to_kj_array_ptr(y_std)); - xyzt.setZStd(to_kj_array_ptr(z_std)); -} - -void fill_plan(cereal::ModelDataV2::Builder &framed, const ModelOutputPlanPrediction &plan) { - std::array pos_x, pos_y, pos_z; - std::array pos_x_std, pos_y_std, pos_z_std; - std::array vel_x, vel_y, vel_z; - std::array rot_x, rot_y, rot_z; - std::array acc_x, acc_y, acc_z; - std::array rot_rate_x, rot_rate_y, rot_rate_z; - - for (int i=0; i &plan_t, - const ModelOutputLaneLines &lanes) { - std::array left_far_y, left_far_z; - std::array left_near_y, left_near_z; - std::array right_near_y, right_near_z; - std::array right_far_y, right_far_z; - for (int j=0; j &plan_t, - const ModelOutputRoadEdges &edges) { - std::array left_y, left_z; - std::array right_y, right_z; - for (int j=0; j plan_t; - std::fill_n(plan_t.data(), plan_t.size(), NAN); - plan_t[0] = 0.0; - for (int xidx=1, tidx=0; xidx t_offsets = {0.0, 2.0, 4.0}; - for (int i=0; i vipc_frame_id) ? (frame_id - vipc_frame_id) : 0; - auto framed = msg.initEvent(valid).initModelV2(); - framed.setFrameId(vipc_frame_id); - framed.setFrameIdExtra(vipc_frame_id_extra); - framed.setFrameAge(frame_age); - framed.setFrameDropPerc(frame_drop * 100); - framed.setTimestampEof(timestamp_eof); - framed.setLocationMonoTime(timestamp_llk); - framed.setModelExecutionTime(model_execution_time); - framed.setNavEnabled(nav_enabled); - if (send_raw_pred) { - framed.setRawPredictions(kj::ArrayPtr(net_output_data, NET_OUTPUT_SIZE).asBytes()); - } - fill_model(framed, *((ModelOutput*) net_output_data), ps); -} - -void fill_pose_msg(MessageBuilder &msg, float *net_output_data, uint32_t vipc_frame_id, uint32_t vipc_dropped_frames, uint64_t timestamp_eof, const bool valid) { - const ModelOutput &net_outputs = *((ModelOutput*) net_output_data); - const auto &v_mean = net_outputs.pose.velocity_mean; - const auto &r_mean = net_outputs.pose.rotation_mean; - const auto &t_mean = net_outputs.wide_from_device_euler.mean; - const auto &v_std = net_outputs.pose.velocity_std; - const auto &r_std = net_outputs.pose.rotation_std; - const auto &t_std = net_outputs.wide_from_device_euler.std; - const auto &road_transform_trans_mean = net_outputs.road_transform.position_mean; - const auto &road_transform_trans_std = net_outputs.road_transform.position_std; - - auto posenetd = msg.initEvent(valid && (vipc_dropped_frames < 1)).initCameraOdometry(); - posenetd.setTrans({v_mean.x, v_mean.y, v_mean.z}); - posenetd.setRot({r_mean.x, r_mean.y, r_mean.z}); - posenetd.setWideFromDeviceEuler({t_mean.x, t_mean.y, t_mean.z}); - posenetd.setRoadTransformTrans({road_transform_trans_mean.x, road_transform_trans_mean.y, road_transform_trans_mean.z}); - posenetd.setTransStd({exp(v_std.x), exp(v_std.y), exp(v_std.z)}); - posenetd.setRotStd({exp(r_std.x), exp(r_std.y), exp(r_std.z)}); - posenetd.setWideFromDeviceEulerStd({exp(t_std.x), exp(t_std.y), exp(t_std.z)}); - posenetd.setRoadTransformTransStd({exp(road_transform_trans_std.x), exp(road_transform_trans_std.y), exp(road_transform_trans_std.z)}); - - posenetd.setTimestampEof(timestamp_eof); - posenetd.setFrameId(vipc_frame_id); -} diff --git a/selfdrive/modeld/models/driving.h b/selfdrive/modeld/models/driving.h deleted file mode 100644 index de0250d212..0000000000 --- a/selfdrive/modeld/models/driving.h +++ /dev/null @@ -1,257 +0,0 @@ -#pragma once - -#include -#include - -#include "cereal/messaging/messaging.h" -#include "common/modeldata.h" -#include "common/util.h" -#include "selfdrive/modeld/models/commonmodel.h" -#include "selfdrive/modeld/runners/run.h" - -constexpr int FEATURE_LEN = 128; -constexpr int HISTORY_BUFFER_LEN = 99; -constexpr int DESIRE_LEN = 8; -constexpr int DESIRE_PRED_LEN = 4; -constexpr int TRAFFIC_CONVENTION_LEN = 2; -constexpr int NAV_FEATURE_LEN = 256; -constexpr int NAV_INSTRUCTION_LEN = 150; -constexpr int DRIVING_STYLE_LEN = 12; -constexpr int MODEL_FREQ = 20; - -constexpr int DISENGAGE_LEN = 5; -constexpr int BLINKER_LEN = 6; -constexpr int META_STRIDE = 7; - -constexpr int PLAN_MHP_N = 5; -constexpr int LEAD_MHP_N = 2; -constexpr int LEAD_TRAJ_LEN = 6; -constexpr int LEAD_MHP_SELECTION = 3; -// Padding to get output shape as multiple of 4 -constexpr int PAD_SIZE = 2; - -constexpr float FCW_THRESHOLD_5MS2_HIGH = 0.15; -constexpr float FCW_THRESHOLD_5MS2_LOW = 0.05; -constexpr float FCW_THRESHOLD_3MS2 = 0.7; - -struct ModelOutputXYZ { - float x; - float y; - float z; -}; -static_assert(sizeof(ModelOutputXYZ) == sizeof(float)*3); - -struct ModelOutputYZ { - float y; - float z; -}; -static_assert(sizeof(ModelOutputYZ) == sizeof(float)*2); - -struct ModelOutputPlanElement { - ModelOutputXYZ position; - ModelOutputXYZ velocity; - ModelOutputXYZ acceleration; - ModelOutputXYZ rotation; - ModelOutputXYZ rotation_rate; -}; -static_assert(sizeof(ModelOutputPlanElement) == sizeof(ModelOutputXYZ)*5); - -struct ModelOutputPlanPrediction { - std::array mean; - std::array std; - float prob; -}; -static_assert(sizeof(ModelOutputPlanPrediction) == (sizeof(ModelOutputPlanElement)*TRAJECTORY_SIZE*2) + sizeof(float)); - -struct ModelOutputPlans { - std::array prediction; - - constexpr const ModelOutputPlanPrediction &get_best_prediction() const { - int max_idx = 0; - for (int i = 1; i < prediction.size(); i++) { - if (prediction[i].prob > prediction[max_idx].prob) { - max_idx = i; - } - } - return prediction[max_idx]; - } -}; -static_assert(sizeof(ModelOutputPlans) == sizeof(ModelOutputPlanPrediction)*PLAN_MHP_N); - -struct ModelOutputLinesXY { - std::array left_far; - std::array left_near; - std::array right_near; - std::array right_far; -}; -static_assert(sizeof(ModelOutputLinesXY) == sizeof(ModelOutputYZ)*TRAJECTORY_SIZE*4); - -struct ModelOutputLineProbVal { - float val_deprecated; - float val; -}; -static_assert(sizeof(ModelOutputLineProbVal) == sizeof(float)*2); - -struct ModelOutputLinesProb { - ModelOutputLineProbVal left_far; - ModelOutputLineProbVal left_near; - ModelOutputLineProbVal right_near; - ModelOutputLineProbVal right_far; -}; -static_assert(sizeof(ModelOutputLinesProb) == sizeof(ModelOutputLineProbVal)*4); - -struct ModelOutputLaneLines { - ModelOutputLinesXY mean; - ModelOutputLinesXY std; - ModelOutputLinesProb prob; -}; -static_assert(sizeof(ModelOutputLaneLines) == (sizeof(ModelOutputLinesXY)*2) + sizeof(ModelOutputLinesProb)); - -struct ModelOutputEdgessXY { - std::array left; - std::array right; -}; -static_assert(sizeof(ModelOutputEdgessXY) == sizeof(ModelOutputYZ)*TRAJECTORY_SIZE*2); - -struct ModelOutputRoadEdges { - ModelOutputEdgessXY mean; - ModelOutputEdgessXY std; -}; -static_assert(sizeof(ModelOutputRoadEdges) == (sizeof(ModelOutputEdgessXY)*2)); - -struct ModelOutputLeadElement { - float x; - float y; - float velocity; - float acceleration; -}; -static_assert(sizeof(ModelOutputLeadElement) == sizeof(float)*4); - -struct ModelOutputLeadPrediction { - std::array mean; - std::array std; - std::array prob; -}; -static_assert(sizeof(ModelOutputLeadPrediction) == (sizeof(ModelOutputLeadElement)*LEAD_TRAJ_LEN*2) + (sizeof(float)*LEAD_MHP_SELECTION)); - -struct ModelOutputLeads { - std::array prediction; - std::array prob; - - constexpr const ModelOutputLeadPrediction &get_best_prediction(int t_idx) const { - int max_idx = 0; - for (int i = 1; i < prediction.size(); i++) { - if (prediction[i].prob[t_idx] > prediction[max_idx].prob[t_idx]) { - max_idx = i; - } - } - return prediction[max_idx]; - } -}; -static_assert(sizeof(ModelOutputLeads) == (sizeof(ModelOutputLeadPrediction)*LEAD_MHP_N) + (sizeof(float)*LEAD_MHP_SELECTION)); - - -struct ModelOutputPose { - ModelOutputXYZ velocity_mean; - ModelOutputXYZ rotation_mean; - ModelOutputXYZ velocity_std; - ModelOutputXYZ rotation_std; -}; -static_assert(sizeof(ModelOutputPose) == sizeof(ModelOutputXYZ)*4); - -struct ModelOutputWideFromDeviceEuler { - ModelOutputXYZ mean; - ModelOutputXYZ std; -}; -static_assert(sizeof(ModelOutputWideFromDeviceEuler) == sizeof(ModelOutputXYZ)*2); - -struct ModelOutputTemporalPose { - ModelOutputXYZ velocity_mean; - ModelOutputXYZ rotation_mean; - ModelOutputXYZ velocity_std; - ModelOutputXYZ rotation_std; -}; -static_assert(sizeof(ModelOutputTemporalPose) == sizeof(ModelOutputXYZ)*4); - -struct ModelOutputRoadTransform { - ModelOutputXYZ position_mean; - ModelOutputXYZ rotation_mean; - ModelOutputXYZ position_std; - ModelOutputXYZ rotation_std; -}; -static_assert(sizeof(ModelOutputRoadTransform) == sizeof(ModelOutputXYZ)*4); - -struct ModelOutputDisengageProb { - float gas_disengage; - float brake_disengage; - float steer_override; - float brake_3ms2; - float brake_4ms2; - float brake_5ms2; - float gas_pressed; -}; -static_assert(sizeof(ModelOutputDisengageProb) == sizeof(float)*7); - -struct ModelOutputBlinkerProb { - float left; - float right; -}; -static_assert(sizeof(ModelOutputBlinkerProb) == sizeof(float)*2); - -struct ModelOutputDesireProb { - union { - struct { - float none; - float turn_left; - float turn_right; - float lane_change_left; - float lane_change_right; - float keep_left; - float keep_right; - float null; - }; - struct { - std::array array; - }; - }; -}; -static_assert(sizeof(ModelOutputDesireProb) == sizeof(float)*DESIRE_LEN); - -struct ModelOutputMeta { - ModelOutputDesireProb desire_state_prob; - float engaged_prob; - std::array disengage_prob; - std::array blinker_prob; - std::array desire_pred_prob; -}; -static_assert(sizeof(ModelOutputMeta) == sizeof(ModelOutputDesireProb) + sizeof(float) + (sizeof(ModelOutputDisengageProb)*DISENGAGE_LEN) + (sizeof(ModelOutputBlinkerProb)*BLINKER_LEN) + (sizeof(ModelOutputDesireProb)*DESIRE_PRED_LEN)); - -struct ModelOutputFeatures { - std::array feature; -}; -static_assert(sizeof(ModelOutputFeatures) == (sizeof(float)*FEATURE_LEN)); - -struct ModelOutput { - const ModelOutputPlans plans; - const ModelOutputLaneLines lane_lines; - const ModelOutputRoadEdges road_edges; - const ModelOutputLeads leads; - const ModelOutputMeta meta; - const ModelOutputPose pose; - const ModelOutputWideFromDeviceEuler wide_from_device_euler; - const ModelOutputTemporalPose temporal_pose; - const ModelOutputRoadTransform road_transform; -}; - -constexpr int OUTPUT_SIZE = sizeof(ModelOutput) / sizeof(float); -constexpr int NET_OUTPUT_SIZE = OUTPUT_SIZE + FEATURE_LEN + PAD_SIZE; - -struct PublishState { - std::array disengage_buffer = {}; - std::array prev_brake_5ms2_probs = {}; - std::array prev_brake_3ms2_probs = {}; -}; - -void fill_model_msg(MessageBuilder &msg, float *net_output_data, PublishState &ps, uint32_t vipc_frame_id, uint32_t vipc_frame_id_extra, uint32_t frame_id, float frame_drop, - uint64_t timestamp_eof, uint64_t timestamp_llk, float model_execution_time, const bool nav_enabled, const bool valid); -void fill_pose_msg(MessageBuilder &msg, float *net_outputs, uint32_t vipc_frame_id, uint32_t vipc_dropped_frames, uint64_t timestamp_eof, const bool valid); diff --git a/selfdrive/modeld/models/driving.pxd b/selfdrive/modeld/models/driving.pxd deleted file mode 100644 index 8d6b8d755e..0000000000 --- a/selfdrive/modeld/models/driving.pxd +++ /dev/null @@ -1,25 +0,0 @@ -# distutils: language = c++ - -from libcpp cimport bool -from libc.stdint cimport uint32_t, uint64_t - -cdef extern from "cereal/messaging/messaging.h": - cdef cppclass MessageBuilder: - size_t getSerializedSize() - int serializeToBuffer(unsigned char *, size_t) - -cdef extern from "selfdrive/modeld/models/driving.h": - cdef int FEATURE_LEN - cdef int HISTORY_BUFFER_LEN - cdef int DESIRE_LEN - cdef int TRAFFIC_CONVENTION_LEN - cdef int DRIVING_STYLE_LEN - cdef int NAV_FEATURE_LEN - cdef int NAV_INSTRUCTION_LEN - cdef int OUTPUT_SIZE - cdef int NET_OUTPUT_SIZE - cdef int MODEL_FREQ - cdef struct PublishState: pass - - void fill_model_msg(MessageBuilder, float *, PublishState, uint32_t, uint32_t, uint32_t, float, uint64_t, uint64_t, float, bool, bool) - void fill_pose_msg(MessageBuilder, float *, uint32_t, uint32_t, uint64_t, bool) diff --git a/selfdrive/modeld/models/driving_pyx.pyx b/selfdrive/modeld/models/driving_pyx.pyx deleted file mode 100644 index b98a8f3ff1..0000000000 --- a/selfdrive/modeld/models/driving_pyx.pyx +++ /dev/null @@ -1,52 +0,0 @@ -# distutils: language = c++ -# cython: c_string_encoding=ascii - -import numpy as np -cimport numpy as cnp -from libcpp cimport bool -from libc.string cimport memcpy -from libc.stdint cimport uint32_t, uint64_t - -from .commonmodel cimport mat3 -from .driving cimport FEATURE_LEN as CPP_FEATURE_LEN, HISTORY_BUFFER_LEN as CPP_HISTORY_BUFFER_LEN, DESIRE_LEN as CPP_DESIRE_LEN, \ - TRAFFIC_CONVENTION_LEN as CPP_TRAFFIC_CONVENTION_LEN, DRIVING_STYLE_LEN as CPP_DRIVING_STYLE_LEN, \ - NAV_FEATURE_LEN as CPP_NAV_FEATURE_LEN, NAV_INSTRUCTION_LEN as CPP_NAV_INSTRUCTION_LEN, \ - OUTPUT_SIZE as CPP_OUTPUT_SIZE, NET_OUTPUT_SIZE as CPP_NET_OUTPUT_SIZE, MODEL_FREQ as CPP_MODEL_FREQ -from .driving cimport MessageBuilder, PublishState as cppPublishState -from .driving cimport fill_model_msg, fill_pose_msg - -FEATURE_LEN = CPP_FEATURE_LEN -HISTORY_BUFFER_LEN = CPP_HISTORY_BUFFER_LEN -DESIRE_LEN = CPP_DESIRE_LEN -TRAFFIC_CONVENTION_LEN = CPP_TRAFFIC_CONVENTION_LEN -DRIVING_STYLE_LEN = CPP_DRIVING_STYLE_LEN -NAV_FEATURE_LEN = CPP_NAV_FEATURE_LEN -NAV_INSTRUCTION_LEN = CPP_NAV_INSTRUCTION_LEN -OUTPUT_SIZE = CPP_OUTPUT_SIZE -NET_OUTPUT_SIZE = CPP_NET_OUTPUT_SIZE -MODEL_FREQ = CPP_MODEL_FREQ - -cdef class PublishState: - cdef cppPublishState state - -def create_model_msg(float[:] model_outputs, PublishState ps, uint32_t vipc_frame_id, uint32_t vipc_frame_id_extra, uint32_t frame_id, float frame_drop, - uint64_t timestamp_eof, uint64_t timestamp_llk, float model_execution_time, bool nav_enabled, bool valid): - cdef MessageBuilder msg - fill_model_msg(msg, &model_outputs[0], ps.state, vipc_frame_id, vipc_frame_id_extra, frame_id, frame_drop, - timestamp_eof, timestamp_llk, model_execution_time, nav_enabled, valid) - - output_size = msg.getSerializedSize() - output_data = bytearray(output_size) - cdef unsigned char * output_ptr = output_data - assert msg.serializeToBuffer(output_ptr, output_size) > 0, "output buffer is too small to serialize" - return bytes(output_data) - -def create_pose_msg(float[:] model_outputs, uint32_t vipc_frame_id, uint32_t vipc_dropped_frames, uint64_t timestamp_eof, bool valid): - cdef MessageBuilder msg - fill_pose_msg(msg, &model_outputs[0], vipc_frame_id, vipc_dropped_frames, timestamp_eof, valid) - - output_size = msg.getSerializedSize() - output_data = bytearray(output_size) - cdef unsigned char * output_ptr = output_data - assert msg.serializeToBuffer(output_ptr, output_size) > 0, "output buffer is too small to serialize" - return bytes(output_data) diff --git a/selfdrive/modeld/models/navmodel.onnx b/selfdrive/modeld/models/navmodel.onnx index 3b0961537e..3b687b960a 100644 --- a/selfdrive/modeld/models/navmodel.onnx +++ b/selfdrive/modeld/models/navmodel.onnx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:adc5aca6753b6ae0a1469f3e5bcb943d00cc9de75218489f2e4c3d960e7af048 -size 14138061 +oid sha256:8254b569878b7472e3f63ed9f3527a87bde785c9037aee3ed66f972e072b5899 +size 14166696 diff --git a/selfdrive/modeld/models/navmodel_q.dlc b/selfdrive/modeld/models/navmodel_q.dlc index e878ec25af..d5e43abcfb 100644 --- a/selfdrive/modeld/models/navmodel_q.dlc +++ b/selfdrive/modeld/models/navmodel_q.dlc @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c808717d073a0bb347f9ba929953c0b2b792ce9997f343f7e44a0b2b0e139132 +oid sha256:89fda8380efa3e421fbcdb6bb204c36a4991f137ee01d47f3d0380895aa7c036 size 3630942 diff --git a/selfdrive/modeld/models/supercombo.onnx b/selfdrive/modeld/models/supercombo.onnx index 88f19a7d28..dc93d84135 100644 --- a/selfdrive/modeld/models/supercombo.onnx +++ b/selfdrive/modeld/models/supercombo.onnx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c63ea3eb6c9b5a20c7420c2dc6d6d0f80a6949a39f6d8b74e574f52734154820 -size 47654714 +oid sha256:763821410b35b06b598cacfa5bc3e312610b3f8de2729e0d5954d7571b6794be +size 48219112 diff --git a/selfdrive/modeld/navmodeld.py b/selfdrive/modeld/navmodeld.py index f5dc51ed20..bfe9c8fbed 100755 --- a/selfdrive/modeld/navmodeld.py +++ b/selfdrive/modeld/navmodeld.py @@ -10,20 +10,22 @@ from typing import Tuple, Dict from cereal import messaging from cereal.messaging import PubMaster, SubMaster from cereal.visionipc import VisionIpcClient, VisionStreamType -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.common.params import Params from openpilot.common.realtime import set_realtime_priority -from openpilot.selfdrive.modeld.constants import IDX_N +from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.modeld.runners import ModelRunner, Runtime NAV_INPUT_SIZE = 256*256 NAV_FEATURE_LEN = 256 NAV_DESIRE_LEN = 32 -NAV_OUTPUT_SIZE = 2*2*IDX_N + NAV_DESIRE_LEN + NAV_FEATURE_LEN +NAV_OUTPUT_SIZE = 2*2*ModelConstants.IDX_N + NAV_DESIRE_LEN + NAV_FEATURE_LEN MODEL_PATHS = { ModelRunner.SNPE: Path(__file__).parent / 'models/navmodel_q.dlc', ModelRunner.ONNX: Path(__file__).parent / 'models/navmodel.onnx'} +CUSTOM_MODEL_PATH = "/data/media/0/models" + class NavModelOutputXY(ctypes.Structure): _fields_ = [ ("x", ctypes.c_float), @@ -31,8 +33,8 @@ class NavModelOutputXY(ctypes.Structure): class NavModelOutputPlan(ctypes.Structure): _fields_ = [ - ("mean", NavModelOutputXY*IDX_N), - ("std", NavModelOutputXY*IDX_N)] + ("mean", NavModelOutputXY*ModelConstants.IDX_N), + ("std", NavModelOutputXY*ModelConstants.IDX_N)] class NavModelResult(ctypes.Structure): _fields_ = [ @@ -48,8 +50,15 @@ class ModelState: def __init__(self): assert ctypes.sizeof(NavModelResult) == NAV_OUTPUT_SIZE * ctypes.sizeof(ctypes.c_float) self.output = np.zeros(NAV_OUTPUT_SIZE, dtype=np.float32) + self.param_s = Params() + if self.param_s.get_bool("CustomDrivingModel"): + _model_name = self.param_s.get("NavModelText", encoding="utf8") + _model_paths = { + ModelRunner.SNPE: f"{CUSTOM_MODEL_PATH}/navmodel_q_{_model_name}.dlc"} + else: + _model_paths = MODEL_PATHS self.inputs = {'input_img': np.zeros(NAV_INPUT_SIZE, dtype=np.uint8)} - self.model = ModelRunner(MODEL_PATHS, self.output, Runtime.DSP, True, None) + self.model = ModelRunner(_model_paths, self.output, Runtime.DSP, True, None) self.model.addInput("input_img", None) def run(self, buf:np.ndarray) -> Tuple[np.ndarray, float]: diff --git a/selfdrive/modeld/parse_model_outputs.py b/selfdrive/modeld/parse_model_outputs.py new file mode 100644 index 0000000000..01cba29d1c --- /dev/null +++ b/selfdrive/modeld/parse_model_outputs.py @@ -0,0 +1,104 @@ +import numpy as np +from typing import Dict +from openpilot.selfdrive.modeld.constants import ModelConstants + +def sigmoid(x): + return 1. / (1. + np.exp(-x)) + +def softmax(x, axis=-1): + x -= np.max(x, axis=axis, keepdims=True) + if x.dtype == np.float32 or x.dtype == np.float64: + np.exp(x, out=x) + else: + x = np.exp(x) + x /= np.sum(x, axis=axis, keepdims=True) + return x + +class Parser: + def __init__(self, ignore_missing=False): + self.ignore_missing = ignore_missing + + def check_missing(self, outs, name): + if name not in outs and not self.ignore_missing: + raise ValueError(f"Missing output {name}") + return name not in outs + + def parse_categorical_crossentropy(self, name, outs, out_shape=None): + if self.check_missing(outs, name): + return + raw = outs[name] + if out_shape is not None: + raw = raw.reshape((raw.shape[0],) + out_shape) + outs[name] = softmax(raw, axis=-1) + + def parse_binary_crossentropy(self, name, outs): + if self.check_missing(outs, name): + return + raw = outs[name] + outs[name] = sigmoid(raw) + + def parse_mdn(self, name, outs, in_N=0, out_N=1, out_shape=None): + if self.check_missing(outs, name): + return + raw = outs[name] + raw = raw.reshape((raw.shape[0], max(in_N, 1), -1)) + + pred_mu = raw[:,:,:(raw.shape[2] - out_N)//2] + n_values = (raw.shape[2] - out_N)//2 + pred_mu = raw[:,:,:n_values] + pred_std = np.exp(raw[:,:,n_values: 2*n_values]) + + if in_N > 1: + weights = np.zeros((raw.shape[0], in_N, out_N), dtype=raw.dtype) + for i in range(out_N): + weights[:,:,i - out_N] = softmax(raw[:,:,i - out_N], axis=-1) + + if out_N == 1: + for fidx in range(weights.shape[0]): + idxs = np.argsort(weights[fidx][:,0])[::-1] + weights[fidx] = weights[fidx][idxs] + pred_mu[fidx] = pred_mu[fidx][idxs] + pred_std[fidx] = pred_std[fidx][idxs] + full_shape = tuple([raw.shape[0], in_N] + list(out_shape)) + outs[name + '_weights'] = weights + outs[name + '_hypotheses'] = pred_mu.reshape(full_shape) + outs[name + '_stds_hypotheses'] = pred_std.reshape(full_shape) + + pred_mu_final = np.zeros((raw.shape[0], out_N, n_values), dtype=raw.dtype) + pred_std_final = np.zeros((raw.shape[0], out_N, n_values), dtype=raw.dtype) + for fidx in range(weights.shape[0]): + for hidx in range(out_N): + idxs = np.argsort(weights[fidx,:,hidx])[::-1] + pred_mu_final[fidx, hidx] = pred_mu[fidx, idxs[0]] + pred_std_final[fidx, hidx] = pred_std[fidx, idxs[0]] + else: + pred_mu_final = pred_mu + pred_std_final = pred_std + + if out_N > 1: + final_shape = tuple([raw.shape[0], out_N] + list(out_shape)) + else: + final_shape = tuple([raw.shape[0],] + list(out_shape)) + outs[name] = pred_mu_final.reshape(final_shape) + outs[name + '_stds'] = pred_std_final.reshape(final_shape) + + def parse_outputs(self, outs: Dict[str, np.ndarray]) -> Dict[str, np.ndarray]: + self.parse_mdn('plan', outs, in_N=ModelConstants.PLAN_MHP_N, out_N=ModelConstants.PLAN_MHP_SELECTION, + out_shape=(ModelConstants.IDX_N,ModelConstants.PLAN_WIDTH)) + self.parse_mdn('lane_lines', outs, in_N=0, out_N=0, out_shape=(ModelConstants.NUM_LANE_LINES,ModelConstants.IDX_N,ModelConstants.LANE_LINES_WIDTH)) + self.parse_mdn('road_edges', outs, in_N=0, out_N=0, out_shape=(ModelConstants.NUM_ROAD_EDGES,ModelConstants.IDX_N,ModelConstants.LANE_LINES_WIDTH)) + self.parse_mdn('pose', outs, in_N=0, out_N=0, out_shape=(ModelConstants.POSE_WIDTH,)) + self.parse_mdn('road_transform', outs, in_N=0, out_N=0, out_shape=(ModelConstants.POSE_WIDTH,)) + self.parse_mdn('sim_pose', outs, in_N=0, out_N=0, out_shape=(ModelConstants.POSE_WIDTH,)) + self.parse_mdn('wide_from_device_euler', outs, in_N=0, out_N=0, out_shape=(ModelConstants.WIDE_FROM_DEVICE_WIDTH,)) + self.parse_mdn('lead', outs, in_N=ModelConstants.LEAD_MHP_N, out_N=ModelConstants.LEAD_MHP_SELECTION, + out_shape=(ModelConstants.LEAD_TRAJ_LEN,ModelConstants.LEAD_WIDTH)) + if 'lat_planner_solution' in outs: + self.parse_mdn('lat_planner_solution', outs, in_N=0, out_N=0, out_shape=(ModelConstants.IDX_N,ModelConstants.LAT_PLANNER_SOLUTION_WIDTH)) + if 'desired_curvature' in outs: + self.parse_mdn('desired_curvature', outs, in_N=0, out_N=0, out_shape=(ModelConstants.DESIRED_CURV_WIDTH,)) + for k in ['lead_prob', 'lane_lines_prob', 'meta']: + self.parse_binary_crossentropy(k, outs) + self.parse_categorical_crossentropy('desire_state', outs, out_shape=(ModelConstants.DESIRE_PRED_WIDTH,)) + self.parse_categorical_crossentropy('desire_pred', outs, out_shape=(ModelConstants.DESIRE_PRED_LEN,ModelConstants.DESIRE_PRED_WIDTH)) + return outs diff --git a/selfdrive/modeld/runners/onnxmodel.py b/selfdrive/modeld/runners/onnxmodel.py index 3c20a39760..f86bee3878 100644 --- a/selfdrive/modeld/runners/onnxmodel.py +++ b/selfdrive/modeld/runners/onnxmodel.py @@ -1,3 +1,5 @@ +import onnx +import itertools import os import sys import numpy as np @@ -7,7 +9,27 @@ from openpilot.selfdrive.modeld.runners.runmodel_pyx import RunModel ORT_TYPES_TO_NP_TYPES = {'tensor(float16)': np.float16, 'tensor(float)': np.float32, 'tensor(uint8)': np.uint8} -def create_ort_session(path): +def attributeproto_fp16_to_fp32(attr): + float32_list = np.frombuffer(attr.raw_data, dtype=np.float16) + attr.data_type = 1 + attr.raw_data = float32_list.astype(np.float32).tobytes() + +def convert_fp16_to_fp32(path): + model = onnx.load(path) + for i in model.graph.initializer: + if i.data_type == 10: + attributeproto_fp16_to_fp32(i) + for i in itertools.chain(model.graph.input, model.graph.output): + if i.type.tensor_type.elem_type == 10: + i.type.tensor_type.elem_type = 1 + for i in model.graph.node: + for a in i.attribute: + if hasattr(a, 't'): + if a.t.data_type == 10: + attributeproto_fp16_to_fp32(a.t) + return model.SerializeToString() + +def create_ort_session(path, fp16_to_fp32): os.environ["OMP_NUM_THREADS"] = "4" os.environ["OMP_WAIT_POLICY"] = "PASSIVE" @@ -28,8 +50,9 @@ def create_ort_session(path): options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL provider = 'CPUExecutionProvider' + model_data = convert_fp16_to_fp32(path) if fp16_to_fp32 else path print("Onnx selected provider: ", [provider], file=sys.stderr) - ort_session = ort.InferenceSession(path, options, providers=[provider]) + ort_session = ort.InferenceSession(model_data, options, providers=[provider]) print("Onnx using ", ort_session.get_providers(), file=sys.stderr) return ort_session @@ -40,7 +63,7 @@ class ONNXModel(RunModel): self.output = output self.use_tf8 = use_tf8 - self.session = create_ort_session(path) + self.session = create_ort_session(path, fp16_to_fp32=True) self.input_names = [x.name for x in self.session.get_inputs()] self.input_shapes = {x.name: [1, *x.shape[1:]] for x in self.session.get_inputs()} self.input_dtypes = {x.name: ORT_TYPES_TO_NP_TYPES[x.type] for x in self.session.get_inputs()} diff --git a/selfdrive/modeld/tests/test_modeld.py b/selfdrive/modeld/tests/test_modeld.py index c3d3b3daa1..257a9bc878 100755 --- a/selfdrive/modeld/tests/test_modeld.py +++ b/selfdrive/modeld/tests/test_modeld.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -import time import unittest import numpy as np import random @@ -8,12 +7,14 @@ import cereal.messaging as messaging from cereal.visionipc import VisionIpcServer, VisionStreamType from openpilot.common.transformations.camera import tici_f_frame_size from openpilot.common.realtime import DT_MDL +from openpilot.selfdrive.car.car_helpers import write_car_param from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_camera_state IMG = np.zeros(int(tici_f_frame_size[0]*tici_f_frame_size[1]*(3/2)), dtype=np.uint8) IMG_BYTES = IMG.flatten().tobytes() + class TestModeld(unittest.TestCase): def setUp(self): @@ -22,13 +23,13 @@ class TestModeld(unittest.TestCase): self.vipc_server.create_buffers(VisionStreamType.VISION_STREAM_DRIVER, 40, False, *tici_f_frame_size) self.vipc_server.create_buffers(VisionStreamType.VISION_STREAM_WIDE_ROAD, 40, False, *tici_f_frame_size) self.vipc_server.start_listener() + write_car_param() self.sm = messaging.SubMaster(['modelV2', 'cameraOdometry']) - self.pm = messaging.PubMaster(['roadCameraState', 'wideRoadCameraState', 'liveCalibration', 'lateralPlan']) + self.pm = messaging.PubMaster(['roadCameraState', 'wideRoadCameraState', 'liveCalibration']) managed_processes['modeld'].start() - time.sleep(0.2) - self.sm.update(1000) + self.pm.wait_for_readers_to_update("roadCameraState", 10) def tearDown(self): managed_processes['modeld'].stop() diff --git a/selfdrive/modeld/thneed/lib.py b/selfdrive/modeld/thneed/lib.py deleted file mode 100644 index c058638fad..0000000000 --- a/selfdrive/modeld/thneed/lib.py +++ /dev/null @@ -1,32 +0,0 @@ -import struct -import json - -def load_thneed(fn): - with open(fn, "rb") as f: - json_len = struct.unpack("I", f.read(4))[0] - jdat = json.loads(f.read(json_len).decode('latin_1')) - weights = f.read() - ptr = 0 - for o in jdat['objects']: - if o['needs_load']: - nptr = ptr + o['size'] - o['data'] = weights[ptr:nptr] - ptr = nptr - for o in jdat['binaries']: - nptr = ptr + o['length'] - o['data'] = weights[ptr:nptr] - ptr = nptr - return jdat - -def save_thneed(jdat, fn): - new_weights = [] - for o in jdat['objects'] + jdat['binaries']: - if 'data' in o: - new_weights.append(o['data']) - del o['data'] - new_weights_bytes = b''.join(new_weights) - with open(fn, "wb") as f: - j = json.dumps(jdat, ensure_ascii=False).encode('latin_1') - f.write(struct.pack("I", len(j))) - f.write(j) - f.write(new_weights_bytes) diff --git a/selfdrive/monitoring/dmonitoringd.py b/selfdrive/monitoring/dmonitoringd.py index d528f32fc3..6347c8111d 100755 --- a/selfdrive/monitoring/dmonitoringd.py +++ b/selfdrive/monitoring/dmonitoringd.py @@ -3,41 +3,32 @@ import gc import cereal.messaging as messaging from cereal import car -from cereal import log -from openpilot.common.params import Params, put_bool_nonblocking +from openpilot.common.params import Params from openpilot.common.realtime import set_realtime_priority from openpilot.selfdrive.controls.lib.events import Events from openpilot.selfdrive.monitoring.driver_monitor import DriverStatus from openpilot.selfdrive.monitoring.hands_on_wheel_monitor import HandsOnWheelStatus -def dmonitoringd_thread(sm=None, pm=None): +def dmonitoringd_thread(): gc.disable() set_realtime_priority(2) - if pm is None: - pm = messaging.PubMaster(['driverMonitoringState', 'driverMonitoringStateSP']) + params = Params() + pm = messaging.PubMaster(['driverMonitoringState', 'driverMonitoringStateSP']) + sm = messaging.SubMaster(['driverStateV2', 'liveCalibration', 'carState', 'controlsState', 'modelV2'], poll=['driverStateV2']) - if sm is None: - sm = messaging.SubMaster(['driverStateV2', 'liveCalibration', 'carState', 'controlsState', 'modelV2'], poll=['driverStateV2']) - - driver_status = DriverStatus(rhd_saved=Params().get_bool("IsRhdDetected")) + driver_status = DriverStatus(rhd_saved=params.get_bool("IsRhdDetected")) hands_on_wheel_status = HandsOnWheelStatus() - sm['liveCalibration'].calStatus = log.LiveCalibrationData.Status.invalid - sm['liveCalibration'].rpyCalib = [0, 0, 0] - sm['carState'].buttonEvents = [] - sm['carState'].standstill = True - v_cruise_last = 0 driver_engaged = False steering_wheel_engaged = False - hands_on_wheel_monitoring_enabled = Params().get_bool("HandsOnWheelMonitoring") + hands_on_wheel_monitoring_enabled = params.get_bool("HandsOnWheelMonitoring") # 10Hz <- dmonitoringmodeld while True: sm.update() - if not sm.updated['driverStateV2']: continue @@ -58,7 +49,9 @@ def dmonitoringd_thread(sm=None, pm=None): # Get data from dmonitoringmodeld events = Events() - driver_status.update_states(sm['driverStateV2'], sm['liveCalibration'].rpyCalib, sm['carState'].vEgo, sm['controlsState'].enabled) + + if sm.all_checks(): + driver_status.update_states(sm['driverStateV2'], sm['liveCalibration'].rpyCalib, sm['carState'].vEgo, sm['controlsState'].enabled) # Block engaging after max number of distrations if driver_status.terminal_alert_cnt >= driver_status.settings._MAX_TERMINAL_ALERTS or \ @@ -72,7 +65,7 @@ def dmonitoringd_thread(sm=None, pm=None): hands_on_wheel_status.update(events, steering_wheel_engaged, sm['controlsState'].enabled, sm['carState'].vEgo) # build driverMonitoringState packet - dat = messaging.new_message('driverMonitoringState') + dat = messaging.new_message('driverMonitoringState', valid=sm.all_checks()) dat.driverMonitoringState = { "events": events.to_msg(), "faceDetected": driver_status.face_detected, @@ -103,10 +96,10 @@ def dmonitoringd_thread(sm=None, pm=None): if (sm['driverStateV2'].frameId % 6000 == 0 and driver_status.wheelpos_learner.filtered_stat.n > driver_status.settings._WHEELPOS_FILTER_MIN_COUNT and driver_status.wheel_on_right == (driver_status.wheelpos_learner.filtered_stat.M > driver_status.settings._WHEELPOS_THRESHOLD)): - put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right) + params.put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right) -def main(sm=None, pm=None): - dmonitoringd_thread(sm, pm) +def main(): + dmonitoringd_thread() if __name__ == '__main__': diff --git a/selfdrive/monitoring/driver_monitor.py b/selfdrive/monitoring/driver_monitor.py index ab82da301f..2279002f35 100644 --- a/selfdrive/monitoring/driver_monitor.py +++ b/selfdrive/monitoring/driver_monitor.py @@ -29,10 +29,10 @@ class DRIVER_MONITOR_SETTINGS(): self._FACE_THRESHOLD = 0.7 self._EYE_THRESHOLD = 0.65 self._SG_THRESHOLD = 0.9 - self._BLINK_THRESHOLD = 0.895 + self._BLINK_THRESHOLD = 0.865 - self._EE_THRESH11 = 0.275 - self._EE_THRESH12 = 5.5 + self._EE_THRESH11 = 0.241 + self._EE_THRESH12 = 4.7 self._EE_MAX_OFFSET1 = 0.06 self._EE_MIN_OFFSET1 = 0.025 self._EE_THRESH21 = 0.01 diff --git a/selfdrive/navd/SConscript b/selfdrive/navd/SConscript index d1db79506a..5a173c0351 100644 --- a/selfdrive/navd/SConscript +++ b/selfdrive/navd/SConscript @@ -1,14 +1,14 @@ Import('qt_env', 'arch', 'common', 'messaging', 'visionipc', 'cereal', 'transformations') map_env = qt_env.Clone() -libs = ['qt_widgets', 'qt_util', 'qmapboxgl', common, messaging, cereal, visionipc, transformations, +libs = ['qt_widgets', 'qt_util', 'QMapLibre', common, messaging, cereal, visionipc, transformations, 'zmq', 'capnp', 'kj', 'm', 'OpenCL', 'ssl', 'crypto', 'pthread', 'json11'] + map_env["LIBS"] if arch == 'larch64': - libs.append('EGL') + libs.append(':libEGL_mesa.so.0') if arch in ['larch64', 'aarch64', 'x86_64']: if arch == 'x86_64': - rpath = Dir(f"#third_party/mapbox-gl-native-qt/{arch}").srcnode().abspath + rpath = Dir(f"#third_party/maplibre-native-qt/{arch}/lib").srcnode().abspath map_env["RPATH"] += [rpath, ] style_path = File("style.json").abspath diff --git a/selfdrive/navd/main.cc b/selfdrive/navd/main.cc index f8501bf4a5..2e7b4d3b60 100644 --- a/selfdrive/navd/main.cc +++ b/selfdrive/navd/main.cc @@ -4,14 +4,19 @@ #include #include +#include "common/util.h" #include "selfdrive/ui/qt/util.h" #include "selfdrive/ui/qt/maps/map_helpers.h" #include "selfdrive/navd/map_renderer.h" #include "system/hardware/hw.h" int main(int argc, char *argv[]) { + Hardware::config_cpu_rendering(true); + qInstallMessageHandler(swagLogMessageHandler); setpriority(PRIO_PROCESS, 0, -20); + int ret = util::set_core_affinity({0, 1, 2, 3}); + assert(ret == 0); QApplication app(argc, argv); std::signal(SIGINT, sigTermHandler); diff --git a/selfdrive/navd/map_renderer.cc b/selfdrive/navd/map_renderer.cc index 543515c631..d52ee162bd 100644 --- a/selfdrive/navd/map_renderer.cc +++ b/selfdrive/navd/map_renderer.cc @@ -28,16 +28,16 @@ float get_zoom_level_for_scale(float lat, float meters_per_pixel) { return log2(num_tiles) - 1; } -QMapbox::Coordinate get_point_along_line(float lat, float lon, float bearing, float dist) { +QMapLibre::Coordinate get_point_along_line(float lat, float lon, float bearing, float dist) { float ang_dist = dist / EARTH_RADIUS_METERS; float lat1 = DEG2RAD(lat), lon1 = DEG2RAD(lon), bearing1 = DEG2RAD(bearing); float lat2 = asin(sin(lat1)*cos(ang_dist) + cos(lat1)*sin(ang_dist)*cos(bearing1)); float lon2 = lon1 + atan2(sin(bearing1)*sin(ang_dist)*cos(lat1), cos(ang_dist)-sin(lat1)*sin(lat2)); - return QMapbox::Coordinate(RAD2DEG(lat2), RAD2DEG(lon2)); + return QMapLibre::Coordinate(RAD2DEG(lat2), RAD2DEG(lon2)); } -MapRenderer::MapRenderer(const QMapboxGLSettings &settings, bool online) : m_settings(settings) { +MapRenderer::MapRenderer(const QMapLibre::Settings &settings, bool online) : m_settings(settings) { QSurfaceFormat fmt; fmt.setRenderableType(QSurfaceFormat::OpenGLES); @@ -60,8 +60,8 @@ MapRenderer::MapRenderer(const QMapboxGLSettings &settings, bool online) : m_set fbo.reset(new QOpenGLFramebufferObject(WIDTH, HEIGHT, fbo_format)); std::string style = util::read_file(STYLE_PATH); - m_map.reset(new QMapboxGL(nullptr, m_settings, fbo->size(), 1)); - m_map->setCoordinateZoom(QMapbox::Coordinate(0, 0), DEFAULT_ZOOM); + m_map.reset(new QMapLibre::Map(nullptr, m_settings, fbo->size(), 1)); + m_map->setCoordinateZoom(QMapLibre::Coordinate(0, 0), DEFAULT_ZOOM); m_map->setStyleJson(style.c_str()); m_map->createRenderer(); ever_loaded = false; @@ -70,20 +70,20 @@ MapRenderer::MapRenderer(const QMapboxGLSettings &settings, bool online) : m_set m_map->setFramebufferObject(fbo->handle(), fbo->size()); gl_functions->glViewport(0, 0, WIDTH, HEIGHT); - QObject::connect(m_map.data(), &QMapboxGL::mapChanged, [=](QMapboxGL::MapChange change) { + QObject::connect(m_map.data(), &QMapLibre::Map::mapChanged, [=](QMapLibre::Map::MapChange change) { // Ignore expected signals // https://github.com/mapbox/mapbox-gl-native/blob/cf734a2fec960025350d8de0d01ad38aeae155a0/platform/qt/include/qmapboxgl.hpp#L116 if (ever_loaded) { - if (change != QMapboxGL::MapChange::MapChangeRegionWillChange && - change != QMapboxGL::MapChange::MapChangeRegionDidChange && - change != QMapboxGL::MapChange::MapChangeWillStartRenderingFrame && - change != QMapboxGL::MapChange::MapChangeDidFinishRenderingFrameFullyRendered) { + if (change != QMapLibre::Map::MapChange::MapChangeRegionWillChange && + change != QMapLibre::Map::MapChange::MapChangeRegionDidChange && + change != QMapLibre::Map::MapChange::MapChangeWillStartRenderingFrame && + change != QMapLibre::Map::MapChange::MapChangeDidFinishRenderingFrameFullyRendered) { LOGD("New map state: %d", change); } } }); - QObject::connect(m_map.data(), &QMapboxGL::mapLoadingFailed, [=](QMapboxGL::MapLoadingFailure err_code, const QString &reason) { + QObject::connect(m_map.data(), &QMapLibre::Map::mapLoadingFailed, [=](QMapLibre::Map::MapLoadingFailure err_code, const QString &reason) { LOGE("Map loading failed with %d: '%s'\n", err_code, reason.toStdString().c_str()); }); @@ -145,7 +145,7 @@ void MapRenderer::msgUpdate() { timer->start(0); } -void MapRenderer::updatePosition(QMapbox::Coordinate position, float bearing) { +void MapRenderer::updatePosition(QMapLibre::Coordinate position, float bearing) { if (m_map.isNull()) { return; } @@ -261,10 +261,10 @@ void MapRenderer::updateRoute(QList coordinates) { initLayers(); auto route_points = coordinate_list_to_collection(coordinates); - QMapbox::Feature feature(QMapbox::Feature::LineStringType, route_points, {}, {}); + QMapLibre::Feature feature(QMapLibre::Feature::LineStringType, route_points, {}, {}); QVariantMap navSource; navSource["type"] = "geojson"; - navSource["data"] = QVariant::fromValue(feature); + navSource["data"] = QVariant::fromValue(feature); m_map->updateSource("navSource", navSource); m_map->setLayoutProperty("navLayer", "visibility", "visible"); } @@ -273,10 +273,9 @@ void MapRenderer::initLayers() { if (!m_map->layerExists("navLayer")) { LOGD("Initializing navLayer"); QVariantMap nav; - nav["id"] = "navLayer"; nav["type"] = "line"; nav["source"] = "navSource"; - m_map->addLayer(nav, "road-intersection"); + m_map->addLayer("navLayer", nav, "road-intersection"); m_map->setPaintProperty("navLayer", "line-color", QColor("grey")); m_map->setPaintProperty("navLayer", "line-width", 5); m_map->setLayoutProperty("navLayer", "line-cap", "round"); @@ -296,9 +295,10 @@ extern "C" { QApplication *app = new QApplication(argc, argv); assert(app); - QMapboxGLSettings settings; + QMapLibre::Settings settings; + settings.setProviderTemplate(QMapLibre::Settings::ProviderTemplate::MapboxProvider); settings.setApiBaseUrl(maps_host == nullptr ? MAPS_HOST : maps_host); - settings.setAccessToken(token == nullptr ? get_mapbox_token() : token); + settings.setApiKey(token == nullptr ? get_mapbox_token() : token); return new MapRenderer(settings, false); } diff --git a/selfdrive/navd/map_renderer.h b/selfdrive/navd/map_renderer.h index dc92c70b0f..fd5922b668 100644 --- a/selfdrive/navd/map_renderer.h +++ b/selfdrive/navd/map_renderer.h @@ -3,7 +3,8 @@ #include #include -#include +#include +#include #include #include #include @@ -19,7 +20,7 @@ class MapRenderer : public QObject { Q_OBJECT public: - MapRenderer(const QMapboxGLSettings &, bool online=true); + MapRenderer(const QMapLibre::Settings &, bool online=true); uint8_t* getImage(); void update(); bool loaded(); @@ -37,8 +38,8 @@ private: void publish(const double render_time, const bool loaded); void sendThumbnail(const uint64_t ts, const kj::Array &buf); - QMapboxGLSettings m_settings; - QScopedPointer m_map; + QMapLibre::Settings m_settings; + QScopedPointer m_map; void initLayers(); @@ -52,7 +53,7 @@ private: bool ever_loaded = false; public slots: - void updatePosition(QMapbox::Coordinate position, float bearing); + void updatePosition(QMapLibre::Coordinate position, float bearing); void updateRoute(QList coordinates); void msgUpdate(); }; diff --git a/selfdrive/navd/navd.py b/selfdrive/navd/navd.py index 6318336699..8e12fcba47 100755 --- a/selfdrive/navd/navd.py +++ b/selfdrive/navd/navd.py @@ -15,7 +15,7 @@ from openpilot.selfdrive.navd.helpers import (Coordinate, coordinate_from_param, distance_along_geometry, maxspeed_to_ms, minimum_distance, parse_banner_instructions) -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog REROUTE_DISTANCE = 25 MANEUVER_TRANSITION_THRESHOLD = 10 @@ -75,8 +75,11 @@ class RouteEngine: self.ui_pid = ui_pid[0] self.update_location() - self.recompute_route() - self.send_instruction() + try: + self.recompute_route() + self.send_instruction() + except Exception: + cloudlog.exception("navd.failed_to_compute") def update_location(self): location = self.sm['liveLocationKalman'] @@ -200,7 +203,7 @@ class RouteEngine: self.send_route() def send_instruction(self): - msg = messaging.new_message('navInstruction') + msg = messaging.new_message('navInstruction', valid=True) if self.step_idx is None: msg.valid = False @@ -260,7 +263,10 @@ class RouteEngine: for i in range(self.step_idx + 1, len(self.route)): total_distance += self.route[i]['distance'] total_time += self.route[i]['duration'] - total_time_typical += self.route[i]['duration_typical'] + if self.route[i]['duration_typical'] is None: + total_time_typical += self.route[i]['duration'] + else: + total_time_typical += self.route[i]['duration_typical'] msg.navInstruction.distanceRemaining = total_distance msg.navInstruction.timeRemaining = total_time @@ -306,7 +312,7 @@ class RouteEngine: for path in self.route_geometry: coords += [c.as_dict() for c in path] - msg = messaging.new_message('navRoute') + msg = messaging.new_message('navRoute', valid=True) msg.navRoute.coordinates = coords self.pm.send('navRoute', msg) @@ -348,11 +354,9 @@ class RouteEngine: # TODO: Check for going wrong way in segment -def main(sm=None, pm=None): - if sm is None: - sm = messaging.SubMaster(['liveLocationKalman', 'managerState']) - if pm is None: - pm = messaging.PubMaster(['navInstruction', 'navRoute']) +def main(): + pm = messaging.PubMaster(['navInstruction', 'navRoute']) + sm = messaging.SubMaster(['liveLocationKalman', 'managerState']) rk = Ratekeeper(1.0) route_engine = RouteEngine(sm, pm) diff --git a/selfdrive/navd/otisserv.py b/selfdrive/navd/otisserv.py index 33e51b86e1..bd86bdf481 100644 --- a/selfdrive/navd/otisserv.py +++ b/selfdrive/navd/otisserv.py @@ -27,10 +27,10 @@ from urllib.parse import parse_qs, unquote import json import requests import math -from common.basedir import BASEDIR -from common.params import Params -from common.realtime import set_core_affinity -from system.swaglog import cloudlog +from openpilot.common.basedir import BASEDIR +from openpilot.common.params import Params +from openpilot.common.realtime import set_core_affinity +from openpilot.common.swaglog import cloudlog params = Params() hostName = "" diff --git a/selfdrive/navd/tests/test_map_renderer.py b/selfdrive/navd/tests/test_map_renderer.py index 1c3d8acd7f..b5f186dbb0 100755 --- a/selfdrive/navd/tests/test_map_renderer.py +++ b/selfdrive/navd/tests/test_map_renderer.py @@ -1,5 +1,8 @@ #!/usr/bin/env python3 +import time +import numpy as np import os +import pytest import unittest import requests import threading @@ -8,38 +11,26 @@ import cereal.messaging as messaging from typing import Any from cereal.visionipc import VisionIpcClient, VisionStreamType -from openpilot.selfdrive.manager.process_config import managed_processes +from openpilot.common.mock.generators import LLK_DECIMATION, LOCATION1, LOCATION2, generate_liveLocationKalman +from openpilot.selfdrive.test.helpers import with_processes -LLK_DECIMATION = 10 CACHE_PATH = "/data/mbgl-cache-navd.db" -LOCATION1 = (32.7174, -117.16277) -LOCATION2 = (32.7558, -117.2037) - -def gen_llk(location=LOCATION1): - msg = messaging.new_message('liveLocationKalman') - msg.liveLocationKalman.positionGeodetic = {'value': [*location, 0], 'std': [0., 0., 0.], 'valid': True} - msg.liveLocationKalman.calibratedOrientationNED = {'value': [0., 0., 0.], 'std': [0., 0., 0.], 'valid': True} - msg.liveLocationKalman.status = 'valid' - return msg +RENDER_FRAMES = 15 +DEFAULT_ITERATIONS = RENDER_FRAMES * LLK_DECIMATION +LOCATION1_REPEATED = [LOCATION1] * DEFAULT_ITERATIONS +LOCATION2_REPEATED = [LOCATION2] * DEFAULT_ITERATIONS class MapBoxInternetDisabledRequestHandler(http.server.BaseHTTPRequestHandler): INTERNET_ACTIVE = True - def setup(self): - if self.INTERNET_ACTIVE: - super().setup() - - def handle(self): - if self.INTERNET_ACTIVE: - super().handle() - - def finish(self): - if self.INTERNET_ACTIVE: - super().finish() - def do_GET(self): + if not self.INTERNET_ACTIVE: + self.send_response(500) + self.end_headers() + return + url = f'https://api.mapbox.com{self.path}' headers = dict(self.headers) @@ -60,7 +51,8 @@ class MapBoxInternetDisabledRequestHandler(http.server.BaseHTTPRequestHandler): class MapBoxInternetDisabledServer(threading.Thread): def run(self): - self.server = http.server.HTTPServer(("127.0.0.1", 5000), MapBoxInternetDisabledRequestHandler) + self.server = http.server.HTTPServer(("127.0.0.1", 0), MapBoxInternetDisabledRequestHandler) + self.port = self.server.server_port self.server.serve_forever() def stop(self): @@ -74,13 +66,15 @@ class MapBoxInternetDisabledServer(threading.Thread): class TestMapRenderer(unittest.TestCase): - server = MapBoxInternetDisabledServer() + server: MapBoxInternetDisabledServer @classmethod def setUpClass(cls): assert "MAPBOX_TOKEN" in os.environ cls.original_token = os.environ["MAPBOX_TOKEN"] + cls.server = MapBoxInternetDisabledServer() cls.server.start() + time.sleep(0.5) # wait for server to startup @classmethod def tearDownClass(cls) -> None: @@ -88,7 +82,7 @@ class TestMapRenderer(unittest.TestCase): def setUp(self): self.server.enable_internet() - os.environ['MAPS_HOST'] = 'http://localhost:5000' + os.environ['MAPS_HOST'] = f'http://localhost:{self.server.port}' self.sm = messaging.SubMaster(['mapRenderState']) self.pm = messaging.PubMaster(['liveLocationKalman']) @@ -97,28 +91,23 @@ class TestMapRenderer(unittest.TestCase): if os.path.exists(CACHE_PATH): os.remove(CACHE_PATH) - def tearDown(self): - managed_processes['mapsd'].stop() - def _setup_test(self): - # start + sync up - managed_processes['mapsd'].start() - assert self.pm.wait_for_readers_to_update("liveLocationKalman", 10) + time.sleep(0.5) + assert VisionIpcClient.available_streams("navd", False) == {VisionStreamType.VISION_STREAM_MAP, } assert self.vipc.connect(False) self.vipc.recv() - - def _run_test(self, expect_valid, location=LOCATION1): + def _run_test(self, expect_valid, locations=LOCATION1_REPEATED): starting_frame_id = None - self.location = location + render_times = [] # run test prev_frame_id = -1 - for i in range(30*LLK_DECIMATION): + for i, location in enumerate(locations): frame_expected = (i+1) % LLK_DECIMATION == 0 if self.sm.logMonoTime['mapRenderState'] == 0: @@ -131,7 +120,7 @@ class TestMapRenderer(unittest.TestCase): if starting_frame_id is None: starting_frame_id = prev_frame_id - llk = gen_llk(self.location) + llk = generate_liveLocationKalman(location) self.pm.send("liveLocationKalman", llk) self.pm.wait_for_readers_to_update("liveLocationKalman", 10) self.sm.update(1000 if frame_expected else 0) @@ -157,6 +146,7 @@ class TestMapRenderer(unittest.TestCase): assert self.sm['mapRenderState'].renderTime == 0. else: assert 0. < self.sm['mapRenderState'].renderTime < 0.1 + render_times.append(self.sm['mapRenderState'].renderTime) # check vision ipc output assert self.vipc.recv() is not None @@ -164,15 +154,23 @@ class TestMapRenderer(unittest.TestCase): assert self.vipc.timestamp_sof == llk.logMonoTime assert self.vipc.frame_id == self.sm['mapRenderState'].frameId + assert frames_since_test_start >= RENDER_FRAMES + + return render_times + + @with_processes(["mapsd"]) def test_with_internet(self): self._setup_test() self._run_test(True) + @with_processes(["mapsd"]) def test_with_no_internet(self): self.server.disable_internet() self._setup_test() self._run_test(False) + @with_processes(["mapsd"]) + @pytest.mark.skip(reason="slow, flaky, and unlikely to break") def test_recover_from_no_internet(self): self._setup_test() self._run_test(True) @@ -180,13 +178,39 @@ class TestMapRenderer(unittest.TestCase): self.server.disable_internet() # change locations to force mapsd to refetch - self._run_test(False, LOCATION2) + self._run_test(False, LOCATION2_REPEATED) self.server.enable_internet() - self._run_test(True, LOCATION2) + self._run_test(True, LOCATION2_REPEATED) + + @with_processes(["mapsd"]) + @pytest.mark.tici + def test_render_time_distribution(self): + self._setup_test() + # from location1 -> location2 and back + locations = np.array([*np.linspace(LOCATION1, LOCATION2, 2000), *np.linspace(LOCATION2, LOCATION1, 2000)]).tolist() + + render_times = self._run_test(True, locations) + + _min = np.min(render_times) + _max = np.max(render_times) + _mean = np.mean(render_times) + _median = np.median(render_times) + _stddev = np.std(render_times) + + print(f"Stats: min: {_min}, max: {_max}, mean: {_mean}, median: {_median}, stddev: {_stddev}, count: {len(render_times)}") + + def assert_stat(stat, nominal, tol=0.3): + tol = (nominal / (1+tol)), (nominal * (1+tol)) + self.assertTrue(tol[0] < stat < tol[1], f"{stat} not in tolerance {tol}") + + assert_stat(_mean, 0.030) + assert_stat(_median, 0.027) + assert_stat(_stddev, 0.0078) + + self.assertLess(_max, 0.065) + self.assertGreater(_min, 0.015) - self.location = LOCATION1 - self._run_test(True, LOCATION2) if __name__ == "__main__": unittest.main() diff --git a/selfdrive/navd/tests/test_navd.py b/selfdrive/navd/tests/test_navd.py new file mode 100755 index 0000000000..e2a5944c2b --- /dev/null +++ b/selfdrive/navd/tests/test_navd.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import json +import random +import unittest +import numpy as np + +import cereal.messaging as messaging +from openpilot.common.params import Params +from openpilot.selfdrive.manager.process_config import managed_processes + + +class TestNavd(unittest.TestCase): + def setUp(self): + self.params = Params() + self.sm = messaging.SubMaster(['navRoute', 'navInstruction']) + + def tearDown(self): + managed_processes['navd'].stop() + + def _check_route(self, start, end, check_coords=True): + self.params.put("NavDestination", json.dumps(end)) + self.params.put("LastGPSPosition", json.dumps(start)) + + managed_processes['navd'].start() + for _ in range(30): + self.sm.update(1000) + if all(f > 0 for f in self.sm.rcv_frame.values()): + break + else: + raise Exception("didn't get a route") + + assert managed_processes['navd'].proc.is_alive() + managed_processes['navd'].stop() + + # ensure start and end match up + if check_coords: + coords = self.sm['navRoute'].coordinates + assert np.allclose([start['latitude'], start['longitude'], end['latitude'], end['longitude']], + [coords[0].latitude, coords[0].longitude, coords[-1].latitude, coords[-1].longitude], + rtol=1e-3) + + def test_simple(self): + start = { + "latitude": 32.7427228, + "longitude": -117.2321177, + } + end = { + "latitude": 32.7557004, + "longitude": -117.268002, + } + self._check_route(start, end) + + def test_random(self): + for _ in range(10): + start = {"latitude": random.uniform(-90, 90), "longitude": random.uniform(-180, 180)} + end = {"latitude": random.uniform(-90, 90), "longitude": random.uniform(-180, 180)} + self._check_route(start, end, check_coords=False) + + +if __name__ == "__main__": + unittest.main() diff --git a/selfdrive/rtshield.py b/selfdrive/rtshield.py deleted file mode 100755 index 68dc4989cd..0000000000 --- a/selfdrive/rtshield.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python3 -import os -import time -from typing import NoReturn - -from openpilot.common.realtime import set_core_affinity, set_realtime_priority - -# RT shield - ensure CPU 3 always remains available for RT processes -# runs as SCHED_FIFO with minimum priority to ensure kthreads don't -# get scheduled onto CPU 3, but it's always preemptible by realtime -# openpilot processes - -def main() -> NoReturn: - set_core_affinity([int(os.getenv("CORE", "3")), ]) - set_realtime_priority(1) - - while True: - time.sleep(0.000001) - -if __name__ == "__main__": - main() diff --git a/selfdrive/sentry.py b/selfdrive/sentry.py index 2852afa455..af24b9968c 100644 --- a/selfdrive/sentry.py +++ b/selfdrive/sentry.py @@ -1,12 +1,15 @@ """Install exception handler for process crash.""" import sentry_sdk +import subprocess from enum import Enum +from typing import Tuple from sentry_sdk.integrations.threading import ThreadingIntegration +from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params -#from openpilot.selfdrive.athena.registration import is_registered_device +from openpilot.selfdrive.athena.registration import UNREGISTERED_DONGLE_ID, is_registered_device from openpilot.system.hardware import HARDWARE, PC -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.system.version import get_branch, get_commit, get_origin, get_version, \ is_comma_remote, is_dirty, is_tested_branch, get_branch_type @@ -30,6 +33,7 @@ def report_tombstone(fn: str, message: str, contents: str) -> None: cloudlog.error({'tombstone': message}) with sentry_sdk.configure_scope() as scope: + bind_user() scope.set_extra("tombstone_fn", fn) scope.set_extra("tombstone", contents) sentry_sdk.capture_message(message=message) @@ -41,13 +45,14 @@ def capture_exception(*args, **kwargs) -> None: cloudlog.error("crash", exc_info=kwargs.get('exc_info', 1)) try: + bind_user() sentry_sdk.capture_exception(*args, **kwargs) sentry_sdk.flush() # https://github.com/getsentry/sentry-python/issues/291 except Exception: cloudlog.exception("sentry exception") -def save_exception(exc_text): +def save_exception(exc_text: str) -> None: if not os.path.exists(CRASHES_DIR): os.makedirs(CRASHES_DIR) @@ -58,17 +63,28 @@ def save_exception(exc_text): for file in files: with open(file, 'w') as f: - f.write(exc_text) + if file.endswith("error.txt"): + lines = exc_text.splitlines()[-3:] + f.write("\n".join(lines)) + else: + f.write(exc_text) print('Logged current crash to {}'.format(files)) -def capture_warning(warning_string): +def bind_user() -> None: + dongle_id, gitname = get_properties() + sentry_sdk.set_user({"id": dongle_id, "ip_address": IP_ADDRESS, "name": gitname}) + + +def capture_warning(warning_string: str) -> None: + bind_user() sentry_sdk.capture_message(warning_string, level='warning') sentry_sdk.flush() -def capture_info(info_string): +def capture_info(info_string: str) -> None: + bind_user() sentry_sdk.capture_message(info_string, level='info') sentry_sdk.flush() @@ -77,34 +93,57 @@ def set_tag(key: str, value: str) -> None: sentry_sdk.set_tag(key, value) -def init(project: SentryProject) -> None: +def get_properties() -> Tuple[str, str]: + params = Params() + dongle_id = params.get("DongleId", encoding='utf-8') + if dongle_id in (None, UNREGISTERED_DONGLE_ID): + hardware_serial = params.get("HardwareSerial", encoding='utf-8') + hardware_serial = "" if hardware_serial is None else hardware_serial + dongle_id = UNREGISTERED_DONGLE_ID + hardware_serial + gitname = params.get("GithubUsername", encoding='utf-8') + if gitname is None: + gitname = "" + + return dongle_id, gitname + + +def get_init() -> None: + params = Params() + dongle_id, _ = get_properties() + route_name = params.get("CurrentRoute", encoding='utf-8') + subprocess.call(["./bootlog", "--started"], cwd=os.path.join(BASEDIR, "system/loggerd")) + with sentry_sdk.configure_scope() as scope: + if route_name is not None: + sentry_sdk.set_tag("route_name", dongle_id + "|" + route_name) + scope.add_attachment(path=os.path.join("/data/media/0/realdata/params", route_name)) + + +def init(project: SentryProject) -> bool: # forks like to mess with this, so double check #comma_remote = is_comma_remote() and "commaai" in get_origin(default="") #if not comma_remote or not is_registered_device() or PC: - # return + # return False #env = "release" if is_tested_branch() else "master" env = get_branch_type() - dongle_id = Params().get("DongleId", encoding='utf-8') - gitname = Params().get("GithubUsername", encoding='utf-8') + dongle_id, gitname = get_properties() integrations = [] if project == SentryProject.SELFDRIVE: integrations.append(ThreadingIntegration(propagate_hub=True)) - else: - sentry_sdk.utils.MAX_STRING_LENGTH = 8192 sentry_sdk.init(project.value, default_integrations=False, release=get_version(), integrations=integrations, traces_sample_rate=1.0, + max_value_length=8192, environment=env, send_default_pii=True) sentry_sdk.set_user({"id": dongle_id}) sentry_sdk.set_user({"ip_address": IP_ADDRESS}) - sentry_sdk.set_user({"username": gitname}) + sentry_sdk.set_user({"name": gitname}) sentry_sdk.set_tag("dirty", is_dirty()) sentry_sdk.set_tag("origin", get_origin()) sentry_sdk.set_tag("branch", get_branch()) @@ -113,3 +152,5 @@ def init(project: SentryProject) -> None: if project == SentryProject.SELFDRIVE: sentry_sdk.Hub.current.start_session() + + return True diff --git a/selfdrive/statsd.py b/selfdrive/statsd.py index 8acf406515..94572b82c7 100755 --- a/selfdrive/statsd.py +++ b/selfdrive/statsd.py @@ -9,11 +9,12 @@ from typing import NoReturn, Union, List, Dict from openpilot.common.params import Params from cereal.messaging import SubMaster -from openpilot.system.swaglog import cloudlog +from openpilot.system.hardware.hw import Paths +from openpilot.common.swaglog import cloudlog from openpilot.system.hardware import HARDWARE from openpilot.common.file_helpers import atomic_write_in_dir from openpilot.system.version import get_normalized_origin, get_short_branch, get_short_version, is_dirty -from openpilot.system.loggerd.config import STATS_DIR, STATS_DIR_FILE_LIMIT, STATS_SOCKET, STATS_FLUSH_TIME_S +from openpilot.system.loggerd.config import STATS_DIR_FILE_LIMIT, STATS_SOCKET, STATS_FLUSH_TIME_S class METRIC_TYPE: @@ -80,6 +81,8 @@ def main() -> NoReturn: sock = ctx.socket(zmq.PULL) sock.bind(STATS_SOCKET) + STATS_DIR = Paths.stats_root() + # initialize stats directory Path(STATS_DIR).mkdir(parents=True, exist_ok=True) diff --git a/selfdrive/sunnypilot/__init__.py b/selfdrive/sunnypilot/__init__.py new file mode 100644 index 0000000000..7c612d4004 --- /dev/null +++ b/selfdrive/sunnypilot/__init__.py @@ -0,0 +1,4 @@ +def get_model_generation(params): + custom_model = params.get_bool("CustomDrivingModel") + gen = int(params.get("DrivingModelGeneration", encoding="utf8")) + return custom_model, gen diff --git a/selfdrive/sunnypilot/live_map_data/__init__.py b/selfdrive/sunnypilot/live_map_data/__init__.py new file mode 100644 index 0000000000..8db9022e69 --- /dev/null +++ b/selfdrive/sunnypilot/live_map_data/__init__.py @@ -0,0 +1,18 @@ +from cereal import custom +from openpilot.common.swaglog import cloudlog + +LOOK_AHEAD_HORIZON_TIME = 15. # s. Time horizon for look ahead of turn speed sections to provide on liveMapDataSP msg. +_DEBUG = False +_CLOUDLOG_DEBUG = False +ROAD_NAME_TIMEOUT = 30 # secs +DataType = custom.LiveMapDataSP.DataType +R = 6373000.0 # approximate radius of earth in mts +QUERY_RADIUS = 3000 # mts. Radius to use on OSM data queries. +QUERY_RADIUS_OFFLINE = 2250 # mts. Radius to use on offline OSM data queries. + + +def get_debug(msg, log_to_cloud=True): + if _CLOUDLOG_DEBUG and log_to_cloud: + cloudlog.debug(msg) + if _DEBUG: + print(msg) diff --git a/selfdrive/sunnypilot/live_map_data/base_map_data.py b/selfdrive/sunnypilot/live_map_data/base_map_data.py new file mode 100644 index 0000000000..ed7f74644c --- /dev/null +++ b/selfdrive/sunnypilot/live_map_data/base_map_data.py @@ -0,0 +1,106 @@ +import math +from abc import abstractmethod, ABC + +from cereal import custom, messaging +from openpilot.selfdrive.navd.helpers import Coordinate +from openpilot.selfdrive.sunnypilot.live_map_data import get_debug + + +class BaseMapData(ABC): + def __init__(self): + self._last_gps: Coordinate | None = None + self._gps_sock = None + self._data_type = custom.LiveMapDataSP.DataType.default + self._sub_master = messaging.SubMaster(['liveLocationKalman', 'carControl']) + self._pub_master = messaging.PubMaster(['liveMapDataSP']) + + @abstractmethod + def update_location(self, current_location: Coordinate): + pass + + @abstractmethod + def get_current_speed_limit(self) -> float: + pass + + @abstractmethod + def get_next_speed_limit_and_distance(self) -> (float, float): + pass + + @abstractmethod + def get_current_road_name(self) -> str: + pass + + def _is_gps_data_valid(self) -> bool: + all_sock_alive = self._sub_master.all_alive(service_list=[self._gps_sock]) + all_sock_valid = self._sub_master.all_valid(service_list=[self._gps_sock]) + return all_sock_alive and all_sock_valid + + def get_current_location(self) -> Coordinate | None: + self._gps_sock = "liveLocationKalman" + if not self._sub_master.updated[self._gps_sock] or not self._sub_master.valid[self._gps_sock]: + return None + + _last_gps = self._sub_master[self._gps_sock] + # ignore the message if the fix is invalid + if not _last_gps.positionGeodetic.valid: + return None + + kalman_bearing_deg = math.degrees(_last_gps.calibratedOrientationNED.value[2]) + kalman_speed = _last_gps.velocityCalibrated.value[2] + kalman_latitude = _last_gps.positionGeodetic.value[0]; + kalman_longitude = _last_gps.positionGeodetic.value[1] + + result = Coordinate(kalman_latitude, kalman_longitude) + result.annotations['unixTimestampMillis'] = _last_gps.unixTimestampMillis + result.annotations['speed'] = kalman_speed + result.annotations['bearingDeg'] = kalman_bearing_deg + result.annotations['accuracy'] = 1 # Hardcoded since liveLocationKalman does not report this. + result.annotations['bearingAccuracyDeg'] = 1. # you'll need to assign this if available + + return result + + def get_live_map_data_sp(self, speed_limit, next_speed_limit, next_speed_limit_distance, current_road_name): + last_gps = self.get_current_location() + map_data_msg = messaging.new_message('liveMapDataSP') + map_data_msg.valid = self._is_gps_data_valid() + + live_map_data = map_data_msg.liveMapDataSP + if last_gps: + live_map_data.lastGpsTimestamp = last_gps.annotations.get('unixTimestampMillis', 0) + live_map_data.lastGpsLatitude = last_gps.latitude + live_map_data.lastGpsLongitude = last_gps.longitude + live_map_data.lastGpsSpeed = last_gps.annotations.get('speed', 0) + live_map_data.lastGpsBearingDeg = last_gps.annotations.get('bearingDeg', 0) + live_map_data.lastGpsAccuracy = last_gps.annotations.get('accuracy', 0) + live_map_data.lastGpsBearingAccuracyDeg = last_gps.annotations.get('bearingAccuracyDeg', 0) + + live_map_data.speedLimitValid = bool(speed_limit > 0) + live_map_data.speedLimit = speed_limit + live_map_data.speedLimitAheadValid = bool(next_speed_limit > 0) + live_map_data.speedLimitAhead = float(next_speed_limit) + live_map_data.speedLimitAheadDistance = float(next_speed_limit_distance) + live_map_data.currentRoadName = str(current_road_name) + live_map_data.dataType = self._data_type + + return map_data_msg + + def publish(self): + speed_limit = self.get_current_speed_limit() + current_road_name = self.get_current_road_name() + next_speed_limit, next_speed_limit_distance = self.get_next_speed_limit_and_distance() + + live_map_data_sp = self.get_live_map_data_sp( + speed_limit, + next_speed_limit, + next_speed_limit_distance, + current_road_name + ) + + self._pub_master.send('liveMapDataSP', live_map_data_sp) + get_debug(f"SRC: [{self.__class__.__name__}] | SLC: [{speed_limit}] | NSL: [{next_speed_limit}] | NSLD: [{next_speed_limit_distance}] | CRN: [{current_road_name}] | GPS: [{self._last_gps}] Annotations: [{', '.join(f'{key}: {value}' for key, value in self._last_gps.annotations.items()) if self._last_gps else []}]") + + def tick(self): + self._sub_master.update() + self._last_gps = self.get_current_location() + self.update_location(self._last_gps) + self.publish() diff --git a/selfdrive/sunnypilot/live_map_data/debug.py b/selfdrive/sunnypilot/live_map_data/debug.py new file mode 100644 index 0000000000..23f122adf0 --- /dev/null +++ b/selfdrive/sunnypilot/live_map_data/debug.py @@ -0,0 +1,50 @@ +# DISCLAIMER: This code is intended principally for development and debugging purposes. +# Although it provides a standalone entry point to the program, users should refer +# to the actual implementations for consumption. Usage outside of development scenarios +# is not advised and could lead to unpredictable results. + +import threading +import traceback + +from cereal import messaging +from openpilot.common.realtime import set_core_affinity +from openpilot.selfdrive.controls.lib.sunnypilot.common import Policy +from openpilot.selfdrive.controls.lib.sunnypilot.speed_limit_resolver import SpeedLimitResolver +from openpilot.selfdrive.sunnypilot.live_map_data import get_debug +from openpilot.common.swaglog import cloudlog + + +def excepthook(args): + get_debug(f'MapD: Threading exception:\n{args}') + traceback.print_exception(args.exc_type, args.exc_value, args.exc_traceback) + + +def live_map_data_sp_thread(): + try: + set_core_affinity([0, 1, 2, 3]) + except Exception: + cloudlog.exception("mapd: failed to set core affinity") + + while True: + live_map_data_sp_thread_debug() + + +def live_map_data_sp_thread_debug(): + _sub_master = messaging.SubMaster(['carState', 'navInstruction', 'liveLocationKalman', 'liveMapDataSP', 'longitudinalPlanSP']) + _sub_master.update() + + v_ego = _sub_master['carState'].vEgo + long_spl = _sub_master['longitudinalPlanSP'].speedLimit + _policy = Policy.car_state_priority + _resolver = SpeedLimitResolver(_policy) + _speed_limit, _distance, _source = _resolver.resolve(v_ego, long_spl, _sub_master) + print(_speed_limit, _distance, _source, " <-> ", long_spl) + + +def main(): + threading.excepthook = excepthook + live_map_data_sp_thread() + + +if __name__ == "__main__": + main() diff --git a/selfdrive/sunnypilot/live_map_data/osm_map_data.py b/selfdrive/sunnypilot/live_map_data/osm_map_data.py new file mode 100644 index 0000000000..0f39b2287f --- /dev/null +++ b/selfdrive/sunnypilot/live_map_data/osm_map_data.py @@ -0,0 +1,50 @@ +import json +import platform + +from openpilot.common.params_pyx import Params +from openpilot.selfdrive.navd.helpers import Coordinate +from openpilot.selfdrive.sunnypilot.live_map_data import DataType +from openpilot.selfdrive.sunnypilot.live_map_data.base_map_data import BaseMapData + + +class OsmMapData(BaseMapData): + def __init__(self): + super().__init__() + self.last_gps = Coordinate(0.0, 0.0) + self.params = Params() + self.mem_params = Params("/dev/shm/params") if platform.system() != "Darwin" else self.params + self.data_type = DataType.offline + + def update_location(self, current_location): + self.last_gps = current_location + if not self.last_gps: + return + + last_gps_position_for_osm = { + "latitude": self.last_gps.latitude, + "longitude": self.last_gps.longitude, + "bearing": self.last_gps.annotations.get("bearingDeg", 0) + } + self.mem_params.put("LastGPSPosition", json.dumps(last_gps_position_for_osm)) + + def get_current_speed_limit(self): + speed_limit = self.mem_params.get("MapSpeedLimit", encoding='utf8') + return float(speed_limit) if speed_limit else 0.0 + + def get_current_road_name(self): + current_road_name = self.mem_params.get("RoadName", encoding='utf8') + return current_road_name if current_road_name else "" + + def get_next_speed_limit_and_distance(self): + next_speed_limit_section_str = self.mem_params.get("NextMapSpeedLimit", encoding='utf8') + next_speed_limit_section = json.loads(next_speed_limit_section_str) if next_speed_limit_section_str else {} + next_speed_limit = next_speed_limit_section.get('speedlimit', 0.0) + next_speed_limit_latitude = next_speed_limit_section.get('latitude') + next_speed_limit_longitude = next_speed_limit_section.get('longitude') + next_speed_limit_distance = 0 + + if next_speed_limit_latitude and next_speed_limit_longitude: + next_speed_limit_coordinates = Coordinate(next_speed_limit_latitude, next_speed_limit_longitude) + next_speed_limit_distance = (self.last_gps or Coordinate(0, 0)).distance_to(next_speed_limit_coordinates) + + return next_speed_limit, next_speed_limit_distance diff --git a/selfdrive/sunnypilot/live_map_data/standalone.py b/selfdrive/sunnypilot/live_map_data/standalone.py new file mode 100644 index 0000000000..fbe0f570ee --- /dev/null +++ b/selfdrive/sunnypilot/live_map_data/standalone.py @@ -0,0 +1,40 @@ +# DISCLAIMER: This code is intended principally for development and debugging purposes. +# Although it provides a standalone entry point to the program, users should refer +# to the actual implementations for consumption. Usage outside of development scenarios +# is not advised and could lead to unpredictable results. + +import threading +import traceback + +from openpilot.common.realtime import Ratekeeper, set_core_affinity +from openpilot.selfdrive.sunnypilot.live_map_data import get_debug +from openpilot.selfdrive.sunnypilot.live_map_data.osm_map_data import OsmMapData +from openpilot.common.swaglog import cloudlog + + +def excepthook(args): + get_debug(f'MapD: Threading exception:\n{args}') + traceback.print_exception(args.exc_type, args.exc_value, args.exc_traceback) + + +def live_map_data_sp_thread(): + try: + set_core_affinity([0, 1, 2, 3]) + except Exception: + cloudlog.exception("mapd: failed to set core affinity") + + live_map_sp = OsmMapData() + rk = Ratekeeper(1, print_delay_threshold=None) + + while True: + live_map_sp.tick() + rk.keep_time() + + +def main(): + threading.excepthook = excepthook + live_map_data_sp_thread() + + +if __name__ == "__main__": + main() diff --git a/selfdrive/test/cpp_harness.py b/selfdrive/test/cpp_harness.py new file mode 100755 index 0000000000..f9d3e681a5 --- /dev/null +++ b/selfdrive/test/cpp_harness.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import subprocess +import sys + +from openpilot.common.prefix import OpenpilotPrefix + + +with OpenpilotPrefix(): + ret = subprocess.call(sys.argv[1:]) + +exit(ret) diff --git a/selfdrive/test/docker_build.sh b/selfdrive/test/docker_build.sh index e0ba54f058..5f77ceb10d 100755 --- a/selfdrive/test/docker_build.sh +++ b/selfdrive/test/docker_build.sh @@ -17,7 +17,7 @@ fi source $SCRIPT_DIR/docker_common.sh $1 "$TAG_SUFFIX" -DOCKER_BUILDKIT=1 docker buildx build --platform $PLATFORM --load --cache-to type=inline --cache-from type=registry,ref=$REMOTE_TAG -t $REMOTE_TAG -t $LOCAL_TAG -f $OPENPILOT_DIR/$DOCKER_FILE $OPENPILOT_DIR +DOCKER_BUILDKIT=1 docker buildx build --provenance false --pull --platform $PLATFORM --load --cache-to type=inline --cache-from type=registry,ref=$REMOTE_TAG -t $REMOTE_TAG -t $LOCAL_TAG -f $OPENPILOT_DIR/$DOCKER_FILE $OPENPILOT_DIR if [ -n "$PUSH_IMAGE" ]; then docker push $REMOTE_TAG diff --git a/selfdrive/test/docker_common.sh b/selfdrive/test/docker_common.sh index 68ea472d26..92da71ba66 100644 --- a/selfdrive/test/docker_common.sh +++ b/selfdrive/test/docker_common.sh @@ -1,20 +1,17 @@ -if [ $1 = "base" ]; then +if [ "$1" = "base" ]; then export DOCKER_IMAGE=openpilot-base export DOCKER_FILE=Dockerfile.openpilot_base -elif [ $1 = "docs" ]; then - export DOCKER_IMAGE=openpilot-docs - export DOCKER_FILE=docs/docker/Dockerfile -elif [ $1 = "sim" ]; then +elif [ "$1" = "sim" ]; then export DOCKER_IMAGE=openpilot-sim export DOCKER_FILE=tools/sim/Dockerfile.sim -elif [ $1 = "prebuilt" ]; then +elif [ "$1" = "prebuilt" ]; then export DOCKER_IMAGE=openpilot-prebuilt export DOCKER_FILE=Dockerfile.openpilot -elif [ $1 = "cl" ]; then +elif [ "$1" = "cl" ]; then export DOCKER_IMAGE=openpilot-base-cl export DOCKER_FILE=Dockerfile.openpilot_base_cl else - echo "Invalid docker build image $1" + echo "Invalid docker build image: '$1'" exit 1 fi diff --git a/selfdrive/test/helpers.py b/selfdrive/test/helpers.py index eb07432c40..a8b7ca0c4d 100644 --- a/selfdrive/test/helpers.py +++ b/selfdrive/test/helpers.py @@ -9,10 +9,8 @@ from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.system.hardware import PC from openpilot.system.version import training_version, terms_version -SKIP_ENV_VAR = "SKIP_LONG_TESTS" def set_params_enabled(): - os.environ['PASSIVE'] = "0" os.environ['REPLAY'] = "1" os.environ['FINGERPRINT'] = "TOYOTA COROLLA TSS2 2019" os.environ['LOGPRINT'] = "debug" @@ -21,7 +19,6 @@ def set_params_enabled(): params.put("HasAcceptedTerms", terms_version) params.put("CompletedTrainingVersion", training_version) params.put_bool("OpenpilotEnabledToggle", True) - params.put_bool("Passive", False) # valid calib msg = messaging.new_message('liveCalibration') @@ -69,3 +66,14 @@ def with_processes(processes, init_time=0, ignore_stopped=None): return wrap return wrapper + + +def noop(*args, **kwargs): + pass + + +def read_segment_list(segment_list_path): + with open(segment_list_path, "r") as f: + seg_list = f.read().splitlines() + + return [(platform[2:], segment) for platform, segment in zip(seg_list[::2], seg_list[1::2], strict=True)] diff --git a/selfdrive/test/longitudinal_maneuvers/plant.py b/selfdrive/test/longitudinal_maneuvers/plant.py index 0dce1a0f9b..bb935fdc8e 100755 --- a/selfdrive/test/longitudinal_maneuvers/plant.py +++ b/selfdrive/test/longitudinal_maneuvers/plant.py @@ -6,7 +6,7 @@ from cereal import log import cereal.messaging as messaging from openpilot.common.realtime import Ratekeeper, DT_MDL from openpilot.selfdrive.controls.lib.longcontrol import LongCtrlState -from openpilot.selfdrive.modeld.constants import T_IDXS +from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.controls.lib.longitudinal_planner import LongitudinalPlanner from openpilot.selfdrive.controls.radard import _LEAD_ACCEL_TAU @@ -100,13 +100,13 @@ class Plant: # this is to ensure lead policy is effective when model # does not predict slowdown in e2e mode position = log.XYZTData.new_message() - position.x = [float(x) for x in (self.speed + 0.5) * np.array(T_IDXS)] + position.x = [float(x) for x in (self.speed + 0.5) * np.array(ModelConstants.T_IDXS)] model.modelV2.position = position velocity = log.XYZTData.new_message() - velocity.x = [float(x) for x in (self.speed + 0.5) * np.ones_like(T_IDXS)] + velocity.x = [float(x) for x in (self.speed + 0.5) * np.ones_like(ModelConstants.T_IDXS)] model.modelV2.velocity = velocity acceleration = log.XYZTData.new_message() - acceleration.x = [float(x) for x in np.zeros_like(T_IDXS)] + acceleration.x = [float(x) for x in np.zeros_like(ModelConstants.T_IDXS)] model.modelV2.acceleration = acceleration control.controlsState.longControlState = LongCtrlState.pid if self.enabled else LongCtrlState.off diff --git a/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py b/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py index a3b307ccba..713b7801f8 100755 --- a/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py +++ b/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py @@ -1,10 +1,8 @@ #!/usr/bin/env python3 import itertools -import os -from parameterized import parameterized_class import unittest +from parameterized import parameterized_class -from openpilot.common.params import Params from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import STOP_DISTANCE from openpilot.selfdrive.test.longitudinal_maneuvers.maneuver import Maneuver @@ -150,17 +148,6 @@ class LongitudinalControl(unittest.TestCase): e2e: bool force_decel: bool - @classmethod - def setUpClass(cls): - os.environ['SIMULATION'] = "1" - os.environ['SKIP_FW_QUERY'] = "1" - os.environ['NO_CAN_TIMEOUT'] = "1" - - params = Params() - params.clear_all() - params.put_bool("Passive", bool(os.getenv("PASSIVE"))) - params.put_bool("OpenpilotEnabledToggle", True) - def test_maneuver(self): for maneuver in create_maneuvers({"e2e": self.e2e, "force_decel": self.force_decel}): with self.subTest(title=maneuver.title, e2e=maneuver.e2e, force_decel=maneuver.force_decel): diff --git a/selfdrive/test/openpilotci.py b/selfdrive/test/openpilotci.py deleted file mode 100755 index f590b66e54..0000000000 --- a/selfdrive/test/openpilotci.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python3 -import os -from datetime import datetime, timedelta -from functools import lru_cache -from pathlib import Path -from typing import IO, Union - -DATA_CI_ACCOUNT = "commadataci" -DATA_CI_ACCOUNT_URL = f"https://{DATA_CI_ACCOUNT}.blob.core.windows.net" -DATA_CI_CONTAINER = "openpilotci" -BASE_URL = f"{DATA_CI_ACCOUNT_URL}/{DATA_CI_CONTAINER}/" - -TOKEN_PATH = Path("/data/azure_token") - - -def get_url(route_name: str, segment_num, log_type="rlog") -> str: - ext = "hevc" if log_type.endswith('camera') else "bz2" - return BASE_URL + f"{route_name.replace('|', '/')}/{segment_num}/{log_type}.{ext}" - - -@lru_cache -def get_azure_credential(): - if "AZURE_TOKEN" in os.environ: - return os.environ["AZURE_TOKEN"] - elif TOKEN_PATH.is_file(): - return TOKEN_PATH.read_text().strip() - else: - from azure.identity import AzureCliCredential - return AzureCliCredential() - - -@lru_cache -def get_container_sas(account_name: str, container_name: str): - from azure.storage.blob import BlobServiceClient, ContainerSasPermissions, generate_container_sas - start_time = datetime.utcnow() - expiry_time = start_time + timedelta(hours=1) - blob_service = BlobServiceClient( - account_url=f"https://{account_name}.blob.core.windows.net", - credential=get_azure_credential(), - ) - return generate_container_sas( - account_name, - container_name, - user_delegation_key=blob_service.get_user_delegation_key(start_time, expiry_time), - permission=ContainerSasPermissions(read=True, write=True, list=True), - expiry=expiry_time, - ) - - -def upload_bytes(data: Union[bytes, IO], blob_name: str) -> str: - from azure.storage.blob import BlobClient - blob = BlobClient( - account_url=DATA_CI_ACCOUNT_URL, - container_name=DATA_CI_CONTAINER, - blob_name=blob_name, - credential=get_azure_credential(), - ) - blob.upload_blob(data) - return BASE_URL + blob_name - - -def upload_file(path: Union[str, os.PathLike], blob_name: str) -> str: - with open(path, "rb") as f: - return upload_bytes(f, blob_name) diff --git a/selfdrive/test/process_replay/README.md b/selfdrive/test/process_replay/README.md index 1174dbab83..008a901010 100644 --- a/selfdrive/test/process_replay/README.md +++ b/selfdrive/test/process_replay/README.md @@ -17,7 +17,6 @@ Currently the following processes are tested: * locationd * paramsd * ubloxd -* laikad * torqued ### Usage @@ -32,7 +31,7 @@ optional arguments: --blacklist-procs BLACKLIST_PROCS Blacklist given processes from the test (e.g. controlsd) --blacklist-cars BLACKLIST_CARS Blacklist given cars from the test (e.g. HONDA) --ignore-fields IGNORE_FIELDS Extra fields or msgs to ignore (e.g. carState.events) - --ignore-msgs IGNORE_MSGS Msgs to ignore (e.g. carEvents) + --ignore-msgs IGNORE_MSGS Msgs to ignore (e.g. onroadEvents) --update-refs Updates reference logs using current commit --upload-only Skips testing processes and uploads logs from previous test run ``` @@ -52,10 +51,10 @@ Then, check in the new logs using git-lfs. Make sure to also update the `ref_com Process replay test suite exposes programmatic APIs for simultaneously running processes or groups of processes on provided logs. ```py -def replay_process_with_name(name: Union[str, Iterable[str]], lr: Union[LogReader, List[capnp._DynamicStructReader]], *args, **kwargs) -> List[capnp._DynamicStructReader]: +def replay_process_with_name(name: Union[str, Iterable[str]], lr: LogIterable, *args, **kwargs) -> List[capnp._DynamicStructReader]: def replay_process( - cfg: Union[ProcessConfig, Iterable[ProcessConfig]], lr: Union[LogReader, List[capnp._DynamicStructReader]], frs: Optional[Dict[str, Any]] = None, + cfg: Union[ProcessConfig, Iterable[ProcessConfig]], lr: LogIterable, frs: Optional[Dict[str, Any]] = None, fingerprint: Optional[str] = None, return_all_logs: bool = False, custom_params: Optional[Dict[str, Any]] = None, disable_progress: bool = False ) -> List[capnp._DynamicStructReader]: ``` @@ -71,7 +70,7 @@ lr = LogReader(...) output_logs = replay_process_with_name('locationd', lr) # or list of names -output_logs = replay_process_with_name(['ubloxd', 'locationd', 'laikad'], lr) +output_logs = replay_process_with_name(['ubloxd', 'locationd'], lr) ``` Supported processes: @@ -83,7 +82,6 @@ Supported processes: * locationd * paramsd * ubloxd -* laikad * torqued * modeld * dmonitoringmodeld diff --git a/selfdrive/test/process_replay/compare_logs.py b/selfdrive/test/process_replay/compare_logs.py index 7de0a25761..dbb7c223f5 100755 --- a/selfdrive/test/process_replay/compare_logs.py +++ b/selfdrive/test/process_replay/compare_logs.py @@ -5,6 +5,7 @@ import capnp import numbers import dictdiffer from collections import Counter +from typing import Dict from openpilot.tools.lib.logreader import LogReader @@ -89,7 +90,62 @@ def compare_logs(log1, log2, ignore_fields=None, ignore_msgs=None, tolerance=Non return diff +def format_process_diff(diff): + diff_short, diff_long = "", "" + + if isinstance(diff, str): + diff_short += f" {diff}\n" + diff_long += f"\t{diff}\n" + else: + cnt: Dict[str, int] = {} + for d in diff: + diff_long += f"\t{str(d)}\n" + + k = str(d[1]) + cnt[k] = 1 if k not in cnt else cnt[k] + 1 + + for k, v in sorted(cnt.items()): + diff_short += f" {k}: {v}\n" + + return diff_short, diff_long + + +def format_diff(results, log_paths, ref_commit): + diff_short, diff_long = "", "" + diff_long += f"***** tested against commit {ref_commit} *****\n" + + failed = False + for segment, result in list(results.items()): + diff_short += f"***** results for segment {segment} *****\n" + diff_long += f"***** differences for segment {segment} *****\n" + + for proc, diff in list(result.items()): + diff_long += f"*** process: {proc} ***\n" + diff_long += f"\tref: {log_paths[segment][proc]['ref']}\n" + diff_long += f"\tnew: {log_paths[segment][proc]['new']}\n\n" + + diff_short += f" {proc}\n" + + if isinstance(diff, str) or len(diff): + diff_short += f" ref: {log_paths[segment][proc]['ref']}\n" + diff_short += f" new: {log_paths[segment][proc]['new']}\n\n" + failed = True + + proc_diff_short, proc_diff_long = format_process_diff(diff) + + diff_long += proc_diff_long + diff_short += proc_diff_short + + return diff_short, diff_long, failed + + if __name__ == "__main__": log1 = list(LogReader(sys.argv[1])) log2 = list(LogReader(sys.argv[2])) - print(compare_logs(log1, log2, sys.argv[3:])) + ignore_fields = sys.argv[3:] or ["logMonoTime", "controlsState.startMonoTime", "controlsState.cumLagMs"] + results = {"segment": {"proc": compare_logs(log1, log2, ignore_fields)}} + log_paths = {"segment": {"proc": {"ref": sys.argv[1], "new": sys.argv[2]}}} + diff_short, diff_long, failed = format_diff(results, log_paths, None) + + print(diff_long) + print(diff_short) diff --git a/selfdrive/test/process_replay/migration.py b/selfdrive/test/process_replay/migration.py index 4560a66b97..ef74314172 100644 --- a/selfdrive/test/process_replay/migration.py +++ b/selfdrive/test/process_replay/migration.py @@ -2,20 +2,101 @@ from collections import defaultdict from cereal import messaging from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_encode_index +from openpilot.selfdrive.car.toyota.values import EPS_SCALE +from openpilot.selfdrive.manager.process_config import managed_processes +from panda import Panda -def migrate_all(lr, old_logtime=False, camera_states=False): +def migrate_all(lr, old_logtime=False, manager_states=False, panda_states=False, camera_states=False): msgs = migrate_sensorEvents(lr, old_logtime) msgs = migrate_carParams(msgs, old_logtime) + if manager_states: + msgs = migrate_managerState(msgs) + if panda_states: + msgs = migrate_pandaStates(msgs) + msgs = migrate_peripheralState(msgs) if camera_states: msgs = migrate_cameraStates(msgs) return msgs +def migrate_managerState(lr): + all_msgs = [] + for msg in lr: + if msg.which() != "managerState": + all_msgs.append(msg) + continue + + new_msg = msg.as_builder() + new_msg.managerState.processes = [{'name': name, 'running': True} for name in managed_processes] + all_msgs.append(new_msg.as_reader()) + + return all_msgs + + +def migrate_pandaStates(lr): + all_msgs = [] + # TODO: safety param migration should be handled automatically + safety_param_migration = { + "TOYOTA PRIUS 2017": EPS_SCALE["TOYOTA PRIUS 2017"] | Panda.FLAG_TOYOTA_STOCK_LONGITUDINAL, + "TOYOTA RAV4 2017": EPS_SCALE["TOYOTA RAV4 2017"] | Panda.FLAG_TOYOTA_ALT_BRAKE | Panda.FLAG_TOYOTA_GAS_INTERCEPTOR, + "KIA EV6 2022": Panda.FLAG_HYUNDAI_EV_GAS | Panda.FLAG_HYUNDAI_CANFD_HDA2, + } + + # Migrate safety param base on carState + CP = next((m.carParams for m in lr if m.which() == 'carParams'), None) + assert CP is not None, "carParams message not found" + if CP.carFingerprint in safety_param_migration: + safety_param = safety_param_migration[CP.carFingerprint] + elif len(CP.safetyConfigs): + safety_param = CP.safetyConfigs[0].safetyParam + if CP.safetyConfigs[0].safetyParamDEPRECATED != 0: + safety_param = CP.safetyConfigs[0].safetyParamDEPRECATED + else: + safety_param = CP.safetyParamDEPRECATED + + for msg in lr: + if msg.which() == 'pandaStateDEPRECATED': + new_msg = messaging.new_message('pandaStates', 1) + new_msg.valid = msg.valid + new_msg.logMonoTime = msg.logMonoTime + new_msg.pandaStates[0] = msg.pandaStateDEPRECATED + new_msg.pandaStates[0].safetyParam = safety_param + all_msgs.append(new_msg.as_reader()) + elif msg.which() == 'pandaStates': + new_msg = msg.as_builder() + new_msg.pandaStates[-1].safetyParam = safety_param + all_msgs.append(new_msg.as_reader()) + else: + all_msgs.append(msg) + + return all_msgs + + +def migrate_peripheralState(lr): + if any(msg.which() == "peripheralState" for msg in lr): + return lr + + all_msg = [] + for msg in lr: + all_msg.append(msg) + if msg.which() not in ["pandaStates", "pandaStateDEPRECATED"]: + continue + + new_msg = messaging.new_message("peripheralState") + new_msg.valid = msg.valid + new_msg.logMonoTime = msg.logMonoTime + all_msg.append(new_msg.as_reader()) + + return all_msg + + def migrate_cameraStates(lr): all_msgs = [] frame_to_encode_id = defaultdict(dict) + # just for encodeId fallback mechanism + min_frame_id = defaultdict(lambda: float('inf')) for msg in lr: if msg.which() not in ["roadEncodeIdx", "wideRoadEncodeIdx", "driverEncodeIdx"]: @@ -33,16 +114,28 @@ def migrate_cameraStates(lr): continue camera_state = getattr(msg, msg.which()) + min_frame_id[msg.which()] = min(min_frame_id[msg.which()], camera_state.frameId) + encode_id = frame_to_encode_id[msg.which()].get(camera_state.frameId) if encode_id is None: print(f"Missing encoded frame for camera feed {msg.which()} with frameId: {camera_state.frameId}") - continue + if len(frame_to_encode_id[msg.which()]) != 0: + continue + + # fallback mechanism for logs without encodeIdx (e.g. logs from before 2022 with dcamera recording disabled) + # try to fake encode_id by subtracting lowest frameId + encode_id = camera_state.frameId - min_frame_id[msg.which()] + print(f"Faking encodeId to {encode_id} for camera feed {msg.which()} with frameId: {camera_state.frameId}") new_msg = messaging.new_message(msg.which()) new_camera_state = getattr(new_msg, new_msg.which()) new_camera_state.frameId = encode_id new_camera_state.encodeId = encode_id - new_camera_state.timestampSof = camera_state.timestampSof + # timestampSof was added later so it might be missing on some old segments + if camera_state.timestampSof == 0 and camera_state.timestampEof > 25000000: + new_camera_state.timestampSof = camera_state.timestampEof - 18000000 + else: + new_camera_state.timestampSof = camera_state.timestampSof new_camera_state.timestampEof = camera_state.timestampEof new_msg.logMonoTime = msg.logMonoTime new_msg.valid = msg.valid @@ -57,6 +150,7 @@ def migrate_carParams(lr, old_logtime=False): for msg in lr: if msg.which() == 'carParams': CP = messaging.new_message('carParams') + CP.valid = True CP.carParams = msg.carParams.as_builder() for car_fw in CP.carParams.carFw: car_fw.brand = CP.carParams.carName diff --git a/selfdrive/test/process_replay/model_replay.py b/selfdrive/test/process_replay/model_replay.py index f576e07a40..97b7c7c46c 100755 --- a/selfdrive/test/process_replay/model_replay.py +++ b/selfdrive/test/process_replay/model_replay.py @@ -7,12 +7,10 @@ from typing import Any import cereal.messaging as messaging from openpilot.common.params import Params -from openpilot.common.spinner import Spinner from openpilot.system.hardware import PC from openpilot.selfdrive.manager.process_config import managed_processes -from openpilot.selfdrive.test.openpilotci import BASE_URL, get_url -from openpilot.selfdrive.test.process_replay.compare_logs import compare_logs -from openpilot.selfdrive.test.process_replay.test_processes import format_diff +from openpilot.tools.lib.openpilotci import BASE_URL, get_url +from openpilot.selfdrive.test.process_replay.compare_logs import compare_logs, format_diff from openpilot.selfdrive.test.process_replay.process_replay import get_process_config, replay_process from openpilot.system.version import get_commit from openpilot.tools.lib.framereader import FrameReader @@ -25,6 +23,7 @@ MAX_FRAMES = 100 if PC else 600 NAV_FRAMES = 50 NO_NAV = "NO_NAV" in os.environ +NO_MODEL = "NO_MODEL" in os.environ SEND_EXTRA_INPUTS = bool(int(os.getenv("SEND_EXTRA_INPUTS", "0"))) @@ -105,20 +104,12 @@ def nav_model_replay(lr): def model_replay(lr, frs): - if not PC: - spinner = Spinner() - spinner.update("starting model replay") - else: - spinner = None - - log_msgs = [] - # modeld is using frame pairs - modeld_logs = trim_logs_to_max_frames(lr, MAX_FRAMES, {"roadCameraState", "wideRoadCameraState"}, {"roadEncodeIdx", "wideRoadEncodeIdx"}) - dmodeld_logs = trim_logs_to_max_frames(lr, MAX_FRAMES, {"driverCameraState"}, {"driverEncodeIdx"}) + modeld_logs = trim_logs_to_max_frames(lr, MAX_FRAMES, {"roadCameraState", "wideRoadCameraState"}, {"roadEncodeIdx", "wideRoadEncodeIdx", "carParams"}) + dmodeld_logs = trim_logs_to_max_frames(lr, MAX_FRAMES, {"driverCameraState"}, {"driverEncodeIdx", "carParams"}) if not SEND_EXTRA_INPUTS: - modeld_logs = [msg for msg in modeld_logs if msg.which() not in ["liveCalibration", "lateralPlan"]] - dmodeld_logs = [msg for msg in dmodeld_logs if msg.which() not in ["liveCalibration", "lateralPlan"]] + modeld_logs = [msg for msg in modeld_logs if msg.which() not in ["liveCalibration",]] + dmodeld_logs = [msg for msg in dmodeld_logs if msg.which() not in ["liveCalibration",]] # initial calibration cal_msg = next(msg for msg in lr if msg.which() == "liveCalibration").as_builder() cal_msg.logMonoTime = lr[0].logMonoTime @@ -128,18 +119,9 @@ def model_replay(lr, frs): modeld = get_process_config("modeld") dmonitoringmodeld = get_process_config("dmonitoringmodeld") - try: - if spinner: - spinner.update("running model replay") - modeld_msgs = replay_process(modeld, modeld_logs, frs) - dmonitoringmodeld_msgs = replay_process(dmonitoringmodeld, dmodeld_logs, frs) - log_msgs.extend([m for m in modeld_msgs if m.which() == "modelV2"]) - log_msgs.extend([m for m in dmonitoringmodeld_msgs if m.which() == "driverStateV2"]) - finally: - if spinner: - spinner.close() - - return log_msgs + modeld_msgs = replay_process(modeld, modeld_logs, frs) + dmonitoringmodeld_msgs = replay_process(dmonitoringmodeld, dmodeld_logs, frs) + return modeld_msgs + dmonitoringmodeld_msgs if __name__ == "__main__": @@ -161,7 +143,7 @@ if __name__ == "__main__": import requests import threading import http.server - from openpilot.selfdrive.test.openpilotci import upload_bytes + from openpilot.tools.lib.openpilotci import upload_bytes os.environ['MAPS_HOST'] = 'http://localhost:5000' class HTTPRequestHandler(http.server.BaseHTTPRequestHandler): @@ -180,8 +162,10 @@ if __name__ == "__main__": else: os.environ['MAPS_HOST'] = BASE_URL.rstrip('/') + log_msgs = [] # run replays - log_msgs = model_replay(lr, frs) + if not NO_MODEL: + log_msgs += model_replay(lr, frs) if not NO_NAV: log_msgs += nav_model_replay(lr) @@ -196,10 +180,11 @@ if __name__ == "__main__": cmp_log = [] # logs are ordered based on type: modelV2, driverStateV2, nav messages (navThumbnail, mapRenderState, navModel) - model_start_index = next(i for i, m in enumerate(all_logs) if m.which() == "modelV2") - cmp_log += all_logs[model_start_index:model_start_index + MAX_FRAMES] - dmon_start_index = next(i for i, m in enumerate(all_logs) if m.which() == "driverStateV2") - cmp_log += all_logs[dmon_start_index:dmon_start_index + MAX_FRAMES] + if not NO_MODEL: + model_start_index = next(i for i, m in enumerate(all_logs) if m.which() in ("modelV2", "cameraOdometry")) + cmp_log += all_logs[model_start_index:model_start_index + MAX_FRAMES*2] + dmon_start_index = next(i for i, m in enumerate(all_logs) if m.which() == "driverStateV2") + cmp_log += all_logs[dmon_start_index:dmon_start_index + MAX_FRAMES] if not NO_NAV: nav_start_index = next(i for i, m in enumerate(all_logs) if m.which() in ["navThumbnail", "mapRenderState", "navModel"]) nav_logs = all_logs[nav_start_index:nav_start_index + NAV_FRAMES*3] @@ -231,20 +216,20 @@ if __name__ == "__main__": results: Any = {TEST_ROUTE: {}} log_paths: Any = {TEST_ROUTE: {"models": {'ref': BASE_URL + log_fn, 'new': log_fn}}} results[TEST_ROUTE]["models"] = compare_logs(cmp_log, log_msgs, tolerance=tolerance, ignore_fields=ignore) - diff1, diff2, failed = format_diff(results, log_paths, ref_commit) + diff_short, diff_long, failed = format_diff(results, log_paths, ref_commit) - print(diff2) + print(diff_long) print('-------------\n'*5) - print(diff1) + print(diff_short) with open("model_diff.txt", "w") as f: - f.write(diff2) + f.write(diff_long) except Exception as e: print(str(e)) failed = True # upload new refs if (update or failed) and not PC: - from openpilot.selfdrive.test.openpilotci import upload_file + from openpilot.tools.lib.openpilotci import upload_file print("Uploading new refs") diff --git a/selfdrive/test/process_replay/model_replay_ref_commit b/selfdrive/test/process_replay/model_replay_ref_commit index e80315133f..a2f6896307 100644 --- a/selfdrive/test/process_replay/model_replay_ref_commit +++ b/selfdrive/test/process_replay/model_replay_ref_commit @@ -1 +1 @@ -4f59f5945633f7a6e54e6f0fcd8ecf0baafa28cd +fee90bcee1e545c7ec9a39d3c7d4e42cfefb9955 diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index eb49d0dedb..a6b2771668 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -14,7 +14,7 @@ import capnp import cereal.messaging as messaging from cereal import car -from cereal.services import service_list +from cereal.services import SERVICE_LIST from cereal.visionipc import VisionIpcServer, get_endpoint_name as vipc_get_endpoint_name from openpilot.common.params import Params from openpilot.common.prefix import OpenpilotPrefix @@ -26,7 +26,8 @@ from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_camera_state, available_streams from openpilot.selfdrive.test.process_replay.migration import migrate_all from openpilot.selfdrive.test.process_replay.capture import ProcessOutputCapture -from openpilot.tools.lib.logreader import LogReader +from openpilot.tools.lib.logreader import LogIterable +from openpilot.tools.lib.framereader import BaseFrameReader # Numpy gives different results based on CPU features after version 19 NUMPY_TOLERANCE = 1e-7 @@ -201,19 +202,19 @@ class ProcessContainer: self.environ_config = environ_config - def _setup_vision_ipc(self, all_msgs): + def _setup_vision_ipc(self, all_msgs: LogIterable, frs: Dict[str, Any]): assert len(self.cfg.vision_pubs) != 0 - device_type = next(msg.initData.deviceType for msg in all_msgs if msg.which() == "initData") - vipc_server = VisionIpcServer("camerad") streams_metas = available_streams(all_msgs) for meta in streams_metas: if meta.camera_state in self.cfg.vision_pubs: - vipc_server.create_buffers(meta.stream, 2, False, *meta.frame_sizes[device_type]) + frame_size = (frs[meta.camera_state].w, frs[meta.camera_state].h) + vipc_server.create_buffers(meta.stream, 2, False, *frame_size) vipc_server.start_listener() self.vipc_server = vipc_server + self.cfg.vision_pubs = [meta.camera_state for meta in streams_metas if meta.camera_state in self.cfg.vision_pubs] def _start_process(self): if self.capture is not None: @@ -223,7 +224,7 @@ class ProcessContainer: def start( self, params_config: Dict[str, Any], environ_config: Dict[str, Any], - all_msgs: Union[LogReader, List[capnp._DynamicStructReader]], + all_msgs: LogIterable, frs: Optional[Dict[str, BaseFrameReader]], fingerprint: Optional[str], capture_output: bool ): with self.prefix as p: @@ -240,7 +241,8 @@ class ProcessContainer: self.sockets = [messaging.sub_sock(s, timeout=100) for s in self.cfg.subs] if len(self.cfg.vision_pubs) != 0: - self._setup_vision_ipc(all_msgs) + assert frs is not None + self._setup_vision_ipc(all_msgs, frs) assert self.vipc_server is not None if capture_output: @@ -264,7 +266,7 @@ class ProcessContainer: self.prefix.clean_dirs() self._clean_env() - def run_step(self, msg: capnp._DynamicStructReader, frs: Optional[Dict[str, Any]]) -> List[capnp._DynamicStructReader]: + def run_step(self, msg: capnp._DynamicStructReader, frs: Optional[Dict[str, BaseFrameReader]]) -> List[capnp._DynamicStructReader]: assert self.rc and self.pm and self.sockets and self.process.proc output_msgs = [] @@ -364,7 +366,7 @@ def controlsd_rcv_callback(msg, cfg, frame): socks = [ s for s in cfg.subs if - frame % int(service_list[msg.which()].frequency / service_list[s].frequency) == 0 + frame % int(SERVICE_LIST[msg.which()].frequency / SERVICE_LIST[s].frequency) == 0 ] if "sendcan" in socks and (frame - 1) < 2000: socks.remove("sendcan") @@ -393,9 +395,8 @@ class ModeldCameraSyncRcvCallback: self.is_dual_camera = True def __call__(self, msg, cfg, frame): - if msg.which() == "initData": - self.is_dual_camera = msg.initData.deviceType in ["tici", "tizi"] - elif msg.which() == "roadCameraState": + self.is_dual_camera = len(cfg.vision_pubs) == 2 + if msg.which() == "roadCameraState": self.road_present = True elif msg.which() == "wideRoadCameraState": self.wide_road_present = True @@ -428,7 +429,7 @@ class FrequencyBasedRcvCallback: resp_sockets = [ s for s in cfg.subs - if frame % max(1, int(service_list[msg.which()].frequency / service_list[s].frequency)) == 0 + if frame % max(1, int(SERVICE_LIST[msg.which()].frequency / SERVICE_LIST[s].frequency)) == 0 ] return bool(len(resp_sockets)) @@ -441,23 +442,13 @@ def controlsd_config_callback(params, cfg, lr): controlsState = msg.controlsState if initialized: break - elif msg.which() == "carEvents": - initialized = car.CarEvent.EventName.controlsInitializing not in [e.name for e in msg.carEvents] + elif msg.which() == "onroadEvents": + initialized = car.CarEvent.EventName.controlsInitializing not in [e.name for e in msg.onroadEvents] assert controlsState is not None and initialized, "controlsState never initialized" params.put("ReplayControlsState", controlsState.as_builder().to_bytes()) -def laikad_config_pubsub_callback(params, cfg, lr): - ublox = params.get_bool("UbloxAvailable") - main_key = "ubloxGnss" if ublox else "qcomGnss" - sub_keys = ({"qcomGnss", } if ublox else {"ubloxGnss", }) - - cfg.pubs = set(cfg.pubs) - sub_keys - cfg.main_pub = main_key - cfg.main_pub_drained = True - - def locationd_config_pubsub_callback(params, cfg, lr): ublox = params.get_bool("UbloxAvailable") sub_keys = ({"gpsLocation", } if ublox else {"gpsLocationExternal", }) @@ -470,12 +461,12 @@ CONFIGS = [ proc_name="controlsd", pubs=[ "can", "deviceState", "pandaStates", "peripheralState", "liveCalibration", "driverMonitoringState", - "longitudinalPlan", "lateralPlan", "liveLocationKalman", "liveParameters", "radarState", + "longitudinalPlan", "liveLocationKalman", "liveParameters", "radarState", "modelV2", "driverCameraState", "roadCameraState", "wideRoadCameraState", "managerState", - "testJoystick", "liveTorqueParameters" + "testJoystick", "liveTorqueParameters", "accelerometer", "gyroscope" ], - subs=["controlsState", "carState", "carControl", "sendcan", "carEvents", "carParams"], - ignore=["logMonoTime", "valid", "controlsState.startMonoTime", "controlsState.cumLagMs"], + subs=["controlsState", "carState", "carControl", "sendcan", "onroadEvents", "carParams"], + ignore=["logMonoTime", "controlsState.startMonoTime", "controlsState.cumLagMs"], config_callback=controlsd_config_callback, init_callback=controlsd_fingerprint_callback, should_recv_callback=controlsd_rcv_callback, @@ -487,7 +478,7 @@ CONFIGS = [ proc_name="radard", pubs=["can", "carState", "modelV2"], subs=["radarState", "liveTracks"], - ignore=["logMonoTime", "valid", "radarState.cumLagMs"], + ignore=["logMonoTime", "radarState.cumLagMs"], init_callback=get_car_params_callback, should_recv_callback=MessageBasedRcvCallback("can"), main_pub="can", @@ -495,8 +486,8 @@ CONFIGS = [ ProcessConfig( proc_name="plannerd", pubs=["modelV2", "carControl", "carState", "controlsState", "radarState"], - subs=["lateralPlan", "longitudinalPlan", "uiPlan"], - ignore=["logMonoTime", "valid", "longitudinalPlan.processingDelay", "longitudinalPlan.solverExecutionTime", "lateralPlan.solverExecutionTime"], + subs=["longitudinalPlan", "uiPlan"], + ignore=["logMonoTime", "longitudinalPlan.processingDelay", "longitudinalPlan.solverExecutionTime"], init_callback=get_car_params_callback, should_recv_callback=FrequencyBasedRcvCallback("modelV2"), tolerance=NUMPY_TOLERANCE, @@ -505,14 +496,14 @@ CONFIGS = [ proc_name="calibrationd", pubs=["carState", "cameraOdometry", "carParams"], subs=["liveCalibration"], - ignore=["logMonoTime", "valid"], + ignore=["logMonoTime"], should_recv_callback=calibration_rcv_callback, ), ProcessConfig( proc_name="dmonitoringd", pubs=["driverStateV2", "liveCalibration", "carState", "modelV2", "controlsState"], subs=["driverMonitoringState"], - ignore=["logMonoTime", "valid"], + ignore=["logMonoTime"], should_recv_callback=FrequencyBasedRcvCallback("driverStateV2"), tolerance=NUMPY_TOLERANCE, ), @@ -523,7 +514,7 @@ CONFIGS = [ "liveCalibration", "carState", "carParams", "gpsLocation" ], subs=["liveLocationKalman"], - ignore=["logMonoTime", "valid"], + ignore=["logMonoTime"], config_callback=locationd_config_pubsub_callback, tolerance=NUMPY_TOLERANCE, ), @@ -531,7 +522,7 @@ CONFIGS = [ proc_name="paramsd", pubs=["liveLocationKalman", "carState"], subs=["liveParameters"], - ignore=["logMonoTime", "valid"], + ignore=["logMonoTime"], init_callback=get_car_params_callback, should_recv_callback=FrequencyBasedRcvCallback("liveLocationKalman"), tolerance=NUMPY_TOLERANCE, @@ -543,17 +534,6 @@ CONFIGS = [ subs=["ubloxGnss", "gpsLocationExternal"], ignore=["logMonoTime"], ), - ProcessConfig( - proc_name="laikad", - pubs=["ubloxGnss", "qcomGnss"], - subs=["gnssMeasurements"], - ignore=["logMonoTime"], - config_callback=laikad_config_pubsub_callback, - tolerance=NUMPY_TOLERANCE, - processing_time=0.002, - timeout=60*10, # first messages are blocked on internet assistance - main_pub="ubloxGnss", # config_callback will switch this to qcom if needed - ), ProcessConfig( proc_name="torqued", pubs=["liveLocationKalman", "carState", "carControl"], @@ -565,7 +545,7 @@ CONFIGS = [ ), ProcessConfig( proc_name="modeld", - pubs=["lateralPlan", "roadCameraState", "wideRoadCameraState", "liveCalibration", "driverMonitoringState"], + pubs=["roadCameraState", "wideRoadCameraState", "liveCalibration", "driverMonitoringState"], subs=["modelV2", "cameraOdometry"], ignore=["logMonoTime", "modelV2.frameDropPerc", "modelV2.modelExecutionTime"], should_recv_callback=ModeldCameraSyncRcvCallback(), @@ -575,6 +555,7 @@ CONFIGS = [ main_pub_drained=False, vision_pubs=["roadCameraState", "wideRoadCameraState"], ignore_alive_pubs=["wideRoadCameraState"], + init_callback=get_car_params_callback, ), ProcessConfig( proc_name="dmonitoringmodeld", @@ -599,7 +580,7 @@ def get_process_config(name: str) -> ProcessConfig: raise Exception(f"Cannot find process config with name: {name}") from ex -def get_custom_params_from_lr(lr: Union[LogReader, List[capnp._DynamicStructReader]], initial_state: str = "first") -> Dict[str, Any]: +def get_custom_params_from_lr(lr: LogIterable, initial_state: str = "first") -> Dict[str, Any]: """ Use this to get custom params dict based on provided logs. Useful when replaying following processes: calibrationd, paramsd, torqued @@ -614,10 +595,13 @@ def get_custom_params_from_lr(lr: Union[LogReader, List[capnp._DynamicStructRead assert initial_state in ["first", "last"] msg_index = 0 if initial_state == "first" else -1 - assert len(car_params) > 0, "carParams required for initial state of liveParameters and liveTorqueCarParams" + assert len(car_params) > 0, "carParams required for initial state of liveParameters and CarParamsPrevRoute" CP = car_params[msg_index].carParams - custom_params = {} + custom_params = { + "CarParamsPrevRoute": CP.as_builder().to_bytes() + } + if len(live_calibration) > 0: custom_params["CalibrationParams"] = live_calibration[msg_index].as_builder().to_bytes() if len(live_parameters) > 0: @@ -625,14 +609,12 @@ def get_custom_params_from_lr(lr: Union[LogReader, List[capnp._DynamicStructRead lp_dict["carFingerprint"] = CP.carFingerprint custom_params["LiveParameters"] = json.dumps(lp_dict) if len(live_torque_parameters) > 0: - custom_params["LiveTorqueCarParams"] = CP.as_builder().to_bytes() custom_params["LiveTorqueParameters"] = live_torque_parameters[msg_index].as_builder().to_bytes() return custom_params -def replay_process_with_name(name: Union[str, Iterable[str]], lr: Union[LogReader, - List[capnp._DynamicStructReader]], *args, **kwargs) -> List[capnp._DynamicStructReader]: +def replay_process_with_name(name: Union[str, Iterable[str]], lr: LogIterable, *args, **kwargs) -> List[capnp._DynamicStructReader]: if isinstance(name, str): cfgs = [get_process_config(name)] elif isinstance(name, Iterable): @@ -644,7 +626,7 @@ def replay_process_with_name(name: Union[str, Iterable[str]], lr: Union[LogReade def replay_process( - cfg: Union[ProcessConfig, Iterable[ProcessConfig]], lr: Union[LogReader, List[capnp._DynamicStructReader]], frs: Optional[Dict[str, Any]] = None, + cfg: Union[ProcessConfig, Iterable[ProcessConfig]], lr: LogIterable, frs: Optional[Dict[str, BaseFrameReader]] = None, fingerprint: Optional[str] = None, return_all_logs: bool = False, custom_params: Optional[Dict[str, Any]] = None, captured_output_store: Optional[Dict[str, Dict[str, str]]] = None, disable_progress: bool = False ) -> List[capnp._DynamicStructReader]: @@ -653,7 +635,10 @@ def replay_process( else: cfgs = [cfg] - all_msgs = migrate_all(lr, old_logtime=True, camera_states=any(len(cfg.vision_pubs) != 0 for cfg in cfgs)) + all_msgs = migrate_all(lr, old_logtime=True, + manager_states=True, + panda_states=any("pandaStates" in cfg.pubs for cfg in cfgs), + camera_states=any(len(cfg.vision_pubs) != 0 for cfg in cfgs)) process_logs = _replay_multi_process(cfgs, all_msgs, frs, fingerprint, custom_params, captured_output_store, disable_progress) if return_all_logs: @@ -669,7 +654,7 @@ def replay_process( def _replay_multi_process( - cfgs: List[ProcessConfig], lr: Union[LogReader, List[capnp._DynamicStructReader]], frs: Optional[Dict[str, Any]], fingerprint: Optional[str], + cfgs: List[ProcessConfig], lr: LogIterable, frs: Optional[Dict[str, BaseFrameReader]], fingerprint: Optional[str], custom_params: Optional[Dict[str, Any]], captured_output_store: Optional[Dict[str, Dict[str, str]]], disable_progress: bool ) -> List[capnp._DynamicStructReader]: if fingerprint is not None: @@ -681,14 +666,13 @@ def _replay_multi_process( env_config = generate_environ_config(CP=CP) # validate frs and vision pubs - for cfg in cfgs: - if len(cfg.vision_pubs) == 0: - continue - + all_vision_pubs = [pub for cfg in cfgs for pub in cfg.vision_pubs] + if len(all_vision_pubs) != 0: assert frs is not None, "frs must be provided when replaying process using vision streams" - assert all(meta_from_camera_state(st) is not None for st in cfg.vision_pubs),\ - f"undefined vision stream spotted, probably misconfigured process: {cfg.vision_pubs}" - assert all(st in frs for st in cfg.vision_pubs), f"frs for this process must contain following vision streams: {cfg.vision_pubs}" + assert all(meta_from_camera_state(st) is not None for st in all_vision_pubs), \ + f"undefined vision stream spotted, probably misconfigured process: (vision pubs: {all_vision_pubs})" + required_vision_pubs = {m.camera_state for m in available_streams(lr)} & set(all_vision_pubs) + assert all(st in frs for st in required_vision_pubs), f"frs for this process must contain following vision streams: {required_vision_pubs}" all_msgs = sorted(lr, key=lambda msg: msg.logMonoTime) log_msgs = [] @@ -697,7 +681,7 @@ def _replay_multi_process( for cfg in cfgs: container = ProcessContainer(cfg) containers.append(container) - container.start(params_config, env_config, all_msgs, fingerprint, captured_output_store is not None) + container.start(params_config, env_config, all_msgs, frs, fingerprint, captured_output_store is not None) all_pubs = {pub for container in containers for pub in container.pubs} all_subs = {sub for container in containers for sub in container.subs} @@ -742,7 +726,6 @@ def _replay_multi_process( def generate_params_config(lr=None, CP=None, fingerprint=None, custom_params=None) -> Dict[str, Any]: params_dict = { "OpenpilotEnabledToggle": True, - "Passive": False, "DisengageOnAccelerator": True, "DisableLogging": False, } @@ -766,6 +749,9 @@ def generate_params_config(lr=None, CP=None, fingerprint=None, custom_params=Non if CP.openpilotLongitudinalControl: params_dict["ExperimentalLongitudinalEnabled"] = True + if CP.notCar: + params_dict["JoystickDebugMode"] = True + return params_dict @@ -797,7 +783,7 @@ def generate_environ_config(CP=None, fingerprint=None, log_dir=None) -> Dict[str return environ_dict -def check_openpilot_enabled(msgs: Union[LogReader, List[capnp._DynamicStructReader]]) -> bool: +def check_openpilot_enabled(msgs: LogIterable) -> bool: cur_enabled_count = 0 max_enabled_count = 0 for msg in msgs: diff --git a/selfdrive/test/process_replay/ref_commit b/selfdrive/test/process_replay/ref_commit index c6a2d58fec..bc79d3be9e 100644 --- a/selfdrive/test/process_replay/ref_commit +++ b/selfdrive/test/process_replay/ref_commit @@ -1 +1 @@ -b421ff389ce720b70a36dd2b3510af54eb484b5f \ No newline at end of file +d9a3a0d4e806b49ec537233d30926bec70308485 \ No newline at end of file diff --git a/selfdrive/test/process_replay/regen.py b/selfdrive/test/process_replay/regen.py index 81f27b7d0e..245b5b2709 100755 --- a/selfdrive/test/process_replay/regen.py +++ b/selfdrive/test/process_replay/regen.py @@ -3,76 +3,118 @@ import os import argparse import time import capnp +import numpy as np from typing import Union, Iterable, Optional, List, Any, Dict, Tuple -from openpilot.selfdrive.test.process_replay.process_replay import CONFIGS, FAKEDATA, replay_process, get_process_config, \ - check_openpilot_enabled, get_custom_params_from_lr +from openpilot.selfdrive.test.process_replay.process_replay import CONFIGS, FAKEDATA, ProcessConfig, replay_process, get_process_config, \ + check_openpilot_enabled, get_custom_params_from_lr +from openpilot.selfdrive.test.process_replay.vision_meta import DRIVER_FRAME_SIZES from openpilot.selfdrive.test.update_ci_routes import upload_route from openpilot.tools.lib.route import Route -from openpilot.tools.lib.framereader import FrameReader -from openpilot.tools.lib.logreader import LogReader +from openpilot.tools.lib.framereader import FrameReader, BaseFrameReader, FrameType +from openpilot.tools.lib.logreader import LogReader, LogIterable from openpilot.tools.lib.helpers import save_log -def regen_segment( - lr: Union[LogReader, List[capnp._DynamicStructReader]], frs: Optional[Dict[str, Any]] = None, - daemons: Union[str, Iterable[str]] = "all", disable_tqdm: bool = False -) -> List[capnp._DynamicStructReader]: - if not isinstance(daemons, str) and not hasattr(daemons, "__iter__"): - raise ValueError("whitelist_proc must be a string or iterable") +class DummyFrameReader(BaseFrameReader): + def __init__(self, w: int, h: int, frame_count: int, pix_val: int): + self.pix_val = pix_val + self.w, self.h = w, h + self.frame_count = frame_count + self.frame_type = FrameType.raw + def get(self, idx, count=1, pix_fmt="yuv420p"): + if pix_fmt == "rgb24": + shape = (self.h, self.w, 3) + elif pix_fmt == "nv12" or pix_fmt == "yuv420p": + shape = (int((self.h * self.w) * 3 / 2),) + else: + raise NotImplementedError + + return [np.full(shape, self.pix_val, dtype=np.uint8) for _ in range(count)] + + @staticmethod + def zero_dcamera(): + return DummyFrameReader(*DRIVER_FRAME_SIZES["tici"], 1200, 0) + + +def regen_segment( + lr: LogIterable, frs: Optional[Dict[str, Any]] = None, + processes: Iterable[ProcessConfig] = CONFIGS, disable_tqdm: bool = False +) -> List[capnp._DynamicStructReader]: all_msgs = sorted(lr, key=lambda m: m.logMonoTime) custom_params = get_custom_params_from_lr(all_msgs) - if daemons != "all": - if isinstance(daemons, str): - raise ValueError(f"Invalid value for daemons: {daemons}") - - replayed_processes = [] - for d in daemons: - cfg = get_process_config(d) - replayed_processes.append(cfg) - else: - replayed_processes = CONFIGS - - print("Replayed processes:", [p.proc_name for p in replayed_processes]) + print("Replayed processes:", [p.proc_name for p in processes]) print("\n\n", "*"*30, "\n\n", sep="") - output_logs = replay_process(replayed_processes, all_msgs, frs, return_all_logs=True, custom_params=custom_params, disable_progress=disable_tqdm) + output_logs = replay_process(processes, all_msgs, frs, return_all_logs=True, custom_params=custom_params, disable_progress=disable_tqdm) return output_logs -def setup_data_readers(route: str, sidx: int, use_route_meta: bool) -> Tuple[LogReader, Dict[str, Any]]: +def setup_data_readers( + route: str, sidx: int, use_route_meta: bool, + needs_driver_cam: bool = True, needs_road_cam: bool = True, dummy_driver_cam: bool = False +) -> Tuple[LogReader, Dict[str, Any]]: if use_route_meta: r = Route(route) lr = LogReader(r.log_paths()[sidx]) frs = {} - if len(r.camera_paths()) > sidx and r.camera_paths()[sidx] is not None: + if needs_road_cam and len(r.camera_paths()) > sidx and r.camera_paths()[sidx] is not None: frs['roadCameraState'] = FrameReader(r.camera_paths()[sidx]) - if len(r.ecamera_paths()) > sidx and r.ecamera_paths()[sidx] is not None: - frs['wideCameraState'] = FrameReader(r.ecamera_paths()[sidx]) - if len(r.dcamera_paths()) > sidx and r.dcamera_paths()[sidx] is not None: - frs['driverCameraState'] = FrameReader(r.dcamera_paths()[sidx]) + if needs_road_cam and len(r.ecamera_paths()) > sidx and r.ecamera_paths()[sidx] is not None: + frs['wideRoadCameraState'] = FrameReader(r.ecamera_paths()[sidx]) + if needs_driver_cam: + if dummy_driver_cam: + frs['driverCameraState'] = DummyFrameReader.zero_dcamera() + elif len(r.dcamera_paths()) > sidx and r.dcamera_paths()[sidx] is not None: + device_type = next(str(msg.initData.deviceType) for msg in lr if msg.which() == "initData") + assert device_type != "neo", "Driver camera not supported on neo segments. Use dummy dcamera." + frs['driverCameraState'] = FrameReader(r.dcamera_paths()[sidx]) else: lr = LogReader(f"cd:/{route.replace('|', '/')}/{sidx}/rlog.bz2") - frs = { - 'roadCameraState': FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/fcamera.hevc"), - 'driverCameraState': FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/dcamera.hevc"), - } - if next((True for m in lr if m.which() == "wideRoadCameraState"), False): - frs['wideRoadCameraState'] = FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/ecamera.hevc") + frs = {} + if needs_road_cam: + frs['roadCameraState'] = FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/fcamera.hevc") + if next((True for m in lr if m.which() == "wideRoadCameraState"), False): + frs['wideRoadCameraState'] = FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/ecamera.hevc") + if needs_driver_cam: + if dummy_driver_cam: + frs['driverCameraState'] = DummyFrameReader.zero_dcamera() + else: + device_type = next(str(msg.initData.deviceType) for msg in lr if msg.which() == "initData") + assert device_type != "neo", "Driver camera not supported on neo segments. Use dummy dcamera." + frs['driverCameraState'] = FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/dcamera.hevc") return lr, frs def regen_and_save( - route: str, sidx: int, daemons: Union[str, Iterable[str]] = "all", outdir: str = FAKEDATA, - upload: bool = False, use_route_meta: bool = False, disable_tqdm: bool = False + route: str, sidx: int, processes: Union[str, Iterable[str]] = "all", outdir: str = FAKEDATA, + upload: bool = False, use_route_meta: bool = False, disable_tqdm: bool = False, dummy_driver_cam: bool = False ) -> str: - lr, frs = setup_data_readers(route, sidx, use_route_meta) - output_logs = regen_segment(lr, frs, daemons, disable_tqdm=disable_tqdm) + if not isinstance(processes, str) and not hasattr(processes, "__iter__"): + raise ValueError("whitelist_proc must be a string or iterable") + + if processes != "all": + if isinstance(processes, str): + raise ValueError(f"Invalid value for processes: {processes}") + + replayed_processes = [] + for d in processes: + cfg = get_process_config(d) + replayed_processes.append(cfg) + else: + replayed_processes = CONFIGS + + all_vision_pubs = {pub for cfg in replayed_processes for pub in cfg.vision_pubs} + lr, frs = setup_data_readers(route, sidx, use_route_meta, + needs_driver_cam="driverCameraState" in all_vision_pubs, + needs_road_cam="roadCameraState" in all_vision_pubs or "wideRoadCameraState" in all_vision_pubs, + dummy_driver_cam=dummy_driver_cam) + output_logs = regen_segment(lr, frs, replayed_processes, disable_tqdm=disable_tqdm) log_dir = os.path.join(outdir, time.strftime("%Y-%m-%d--%H-%M-%S--0", time.gmtime())) rel_log_dir = os.path.relpath(log_dir) @@ -101,6 +143,7 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="Generate new segments from old ones") parser.add_argument("--upload", action="store_true", help="Upload the new segment to the CI bucket") parser.add_argument("--outdir", help="log output dir", default=FAKEDATA) + parser.add_argument("--dummy-dcamera", action='store_true', help="Use dummy blank driver camera") parser.add_argument("--whitelist-procs", type=comma_separated_list, default=all_procs, help="Comma-separated whitelist of processes to regen (e.g. controlsd,radard)") parser.add_argument("--blacklist-procs", type=comma_separated_list, default=[], @@ -110,5 +153,5 @@ if __name__ == "__main__": args = parser.parse_args() blacklist_set = set(args.blacklist_procs) - daemons = [p for p in args.whitelist_procs if p not in blacklist_set] - regen_and_save(args.route, args.seg, daemons=daemons, upload=args.upload, outdir=args.outdir) + processes = [p for p in args.whitelist_procs if p not in blacklist_set] + regen_and_save(args.route, args.seg, processes=processes, upload=args.upload, outdir=args.outdir, dummy_driver_cam=args.dummy_dcamera) diff --git a/selfdrive/test/process_replay/regen_all.py b/selfdrive/test/process_replay/regen_all.py index df7c76a14d..656a5b89e1 100755 --- a/selfdrive/test/process_replay/regen_all.py +++ b/selfdrive/test/process_replay/regen_all.py @@ -18,7 +18,7 @@ def regen_job(segment, upload, disable_tqdm): fake_dongle_id = 'regen' + ''.join(random.choice('0123456789ABCDEF') for _ in range(11)) try: relr = regen_and_save(sn.route_name.canonical_name, sn.segment_num, upload=upload, use_route_meta=False, - outdir=os.path.join(FAKEDATA, fake_dongle_id), disable_tqdm=disable_tqdm) + outdir=os.path.join(FAKEDATA, fake_dongle_id), disable_tqdm=disable_tqdm, dummy_driver_cam=True) relr = '|'.join(relr.split('/')[-2:]) return f' ("{segment[0]}", "{relr}"), ' except Exception as e: @@ -29,15 +29,25 @@ def regen_job(segment, upload, disable_tqdm): if __name__ == "__main__": + all_cars = {car for car, _ in segments} + parser = argparse.ArgumentParser(description="Generate new segments from old ones") parser.add_argument("-j", "--jobs", type=int, default=1) parser.add_argument("--no-upload", action="store_true") + parser.add_argument("--whitelist-cars", type=str, nargs="*", default=all_cars, + help="Whitelist given cars from the test (e.g. HONDA)") + parser.add_argument("--blacklist-cars", type=str, nargs="*", default=[], + help="Blacklist given cars from the test (e.g. HONDA)") args = parser.parse_args() + tested_cars = set(args.whitelist_cars) - set(args.blacklist_cars) + tested_cars = {c.upper() for c in tested_cars} + tested_segments = [(car, segment) for car, segment in segments if car in tested_cars] + with concurrent.futures.ProcessPoolExecutor(max_workers=args.jobs) as pool: - p = pool.map(regen_job, segments, [not args.no_upload] * len(segments), [args.jobs > 1] * len(segments)) + p = pool.map(regen_job, tested_segments, [not args.no_upload] * len(tested_segments), [args.jobs > 1] * len(tested_segments)) msg = "Copy these new segments into test_processes.py:" - for seg in tqdm(p, desc="Generating segments", total=len(segments)): + for seg in tqdm(p, desc="Generating segments", total=len(tested_segments)): msg += "\n" + str(seg) print() print() diff --git a/selfdrive/test/process_replay/test_debayer.py b/selfdrive/test/process_replay/test_debayer.py index a6e6955dbf..bea1b1fb00 100755 --- a/selfdrive/test/process_replay/test_debayer.py +++ b/selfdrive/test/process_replay/test_debayer.py @@ -8,14 +8,13 @@ import pyopencl as cl # install with `PYOPENCL_CL_PRETEND_VERSION=2.0 pip insta from openpilot.system.hardware import PC, TICI from openpilot.common.basedir import BASEDIR -from openpilot.selfdrive.test.openpilotci import BASE_URL, get_url +from openpilot.tools.lib.openpilotci import BASE_URL from openpilot.system.version import get_commit from openpilot.system.camerad.snapshot.snapshot import yuv_to_rgb from openpilot.tools.lib.logreader import LogReader from openpilot.tools.lib.filereader import FileReader -TEST_ROUTE = "8345e3b82948d454|2022-05-04--13-45-33" -SEGMENT = 0 +TEST_ROUTE = "8345e3b82948d454|2022-05-04--13-45-33/0" FRAME_WIDTH = 1928 FRAME_HEIGHT = 1208 @@ -116,7 +115,7 @@ if __name__ == "__main__": ref_commit_fn = os.path.join(replay_dir, "debayer_replay_ref_commit") # load logs - lr = list(LogReader(get_url(TEST_ROUTE, SEGMENT))) + lr = list(LogReader(TEST_ROUTE)) # run replay frames = debayer_replay(lr) @@ -172,7 +171,7 @@ if __name__ == "__main__": # upload new refs if update or (failed and TICI): - from openpilot.selfdrive.test.openpilotci import upload_file + from openpilot.tools.lib.openpilotci import upload_file print("Uploading new refs") diff --git a/selfdrive/test/process_replay/test_fuzzy.py b/selfdrive/test/process_replay/test_fuzzy.py index f3f48d0159..adff06f88a 100755 --- a/selfdrive/test/process_replay/test_fuzzy.py +++ b/selfdrive/test/process_replay/test_fuzzy.py @@ -13,14 +13,16 @@ import openpilot.selfdrive.test.process_replay.process_replay as pr # These processes currently fail because of unrealistic data breaking assumptions # that openpilot makes causing error with NaN, inf, int size, array indexing ... # TODO: Make each one testable -NOT_TESTED = ['controlsd', 'plannerd', 'calibrationd', 'dmonitoringd', 'paramsd', 'laikad', 'dmonitoringmodeld', 'modeld'] +NOT_TESTED = ['controlsd', 'plannerd', 'calibrationd', 'dmonitoringd', 'paramsd', 'dmonitoringmodeld', 'modeld'] + TEST_CASES = [(cfg.proc_name, copy.deepcopy(cfg)) for cfg in pr.CONFIGS if cfg.proc_name not in NOT_TESTED] class TestFuzzProcesses(unittest.TestCase): + # TODO: make this faster and increase examples @parameterized.expand(TEST_CASES) @given(st.data()) - @settings(phases=[Phase.generate, Phase.target], max_examples=50, deadline=1000, suppress_health_check=[HealthCheck.too_slow, HealthCheck.data_too_large]) + @settings(phases=[Phase.generate, Phase.target], max_examples=10, deadline=1000, suppress_health_check=[HealthCheck.too_slow, HealthCheck.data_too_large]) def test_fuzz_process(self, proc_name, cfg, data): msgs = FuzzyGenerator.get_random_event_msg(data.draw, events=cfg.pubs, real_floats=True) lr = [log.Event.new_message(**m).as_reader() for m in msgs] diff --git a/selfdrive/test/process_replay/test_processes.py b/selfdrive/test/process_replay/test_processes.py index 973c16971e..46fa93ba4d 100755 --- a/selfdrive/test/process_replay/test_processes.py +++ b/selfdrive/test/process_replay/test_processes.py @@ -8,8 +8,8 @@ from tqdm import tqdm from typing import Any, DefaultDict, Dict from openpilot.selfdrive.car.car_helpers import interface_names -from openpilot.selfdrive.test.openpilotci import get_url, upload_file -from openpilot.selfdrive.test.process_replay.compare_logs import compare_logs +from openpilot.tools.lib.openpilotci import get_url, upload_file +from openpilot.selfdrive.test.process_replay.compare_logs import compare_logs, format_diff from openpilot.selfdrive.test.process_replay.process_replay import CONFIGS, PROC_REPLAY_DIR, FAKEDATA, check_openpilot_enabled, replay_process from openpilot.system.version import get_commit from openpilot.tools.lib.filereader import FileReader @@ -41,27 +41,27 @@ source_segments = [ ] segments = [ - ("BODY", "aregenECF15D9E559|2023-05-10--14-26-40--0"), - ("HYUNDAI", "aregenAB9F543F70A|2023-05-10--14-28-25--0"), - ("HYUNDAI2", "aregen39F5A028F96|2023-05-10--14-31-00--0"), - ("TOYOTA", "aregen8D6A8B36E8D|2023-05-10--14-32-38--0"), - ("TOYOTA2", "aregenB1933C49809|2023-05-10--14-34-14--0"), - ("TOYOTA3", "aregen5D9915223DC|2023-05-10--14-36-43--0"), - ("HONDA", "aregen484B732B675|2023-05-10--14-38-23--0"), - ("HONDA2", "aregenAF6ACED4713|2023-05-10--14-40-01--0"), - ("CHRYSLER", "aregen99B094E1E2E|2023-05-10--14-41-40--0"), - ("RAM", "aregen5C2487E1EEB|2023-05-10--14-44-09--0"), - ("SUBARU", "aregen98D277B792E|2023-05-10--14-46-46--0"), - ("GM", "aregen377BA28D848|2023-05-10--14-48-28--0"), - ("GM2", "aregen7CA0CC0F0C2|2023-05-10--14-51-00--0"), - ("NISSAN", "aregen7097BF01563|2023-05-10--14-52-43--0"), - ("VOLKSWAGEN", "aregen765AF3D2CB5|2023-05-10--14-54-23--0"), - ("MAZDA", "aregen3053762FF2E|2023-05-10--14-56-53--0"), - ("FORD", "aregenDDE0F89FA1E|2023-05-10--14-59-26--0"), + ("BODY", "regen997DF2697CB|2023-10-30--23-14-29--0"), + ("HYUNDAI", "regen2A9D2A8E0B4|2023-10-30--23-13-34--0"), + ("HYUNDAI2", "regen6CA24BC3035|2023-10-30--23-14-28--0"), + ("TOYOTA", "regen5C019D76307|2023-10-30--23-13-31--0"), + ("TOYOTA2", "regen5DCADA88A96|2023-10-30--23-14-57--0"), + ("TOYOTA3", "regen7204CA3A498|2023-10-30--23-15-55--0"), + ("HONDA", "regen048F8FA0B24|2023-10-30--23-15-53--0"), + ("HONDA2", "regen7D2D3F82D5B|2023-10-30--23-15-55--0"), + ("CHRYSLER", "regen7125C42780C|2023-10-30--23-16-21--0"), + ("RAM", "regen2731F3213D2|2023-10-30--23-18-11--0"), + ("SUBARU", "regen86E4C1B4DDD|2023-10-30--23-18-14--0"), + ("GM", "regenF6393D64745|2023-10-30--23-17-18--0"), + ("GM2", "regen220F830C05B|2023-10-30--23-18-39--0"), + ("NISSAN", "regen4F671F7C435|2023-10-30--23-18-40--0"), + ("VOLKSWAGEN", "regen8BDFE7307A0|2023-10-30--23-19-36--0"), + ("MAZDA", "regen2E9F1A15FD5|2023-10-30--23-20-36--0"), + ("FORD", "regen6D39E54606E|2023-10-30--23-20-54--0"), ] # dashcamOnly makes don't need to be tested until a full port is done -excluded_interfaces = ["mock", "mazda", "tesla"] +excluded_interfaces = ["mock", "tesla"] BASE_URL = "https://commadataci.blob.core.windows.net/openpilotci/" REF_COMMIT_FN = os.path.join(PROC_REPLAY_DIR, "ref_commit") @@ -115,45 +115,6 @@ def test_process(cfg, lr, segment, ref_log_path, new_log_path, ignore_fields=Non return str(e), log_msgs -def format_diff(results, log_paths, ref_commit): - diff1, diff2 = "", "" - diff2 += f"***** tested against commit {ref_commit} *****\n" - - failed = False - for segment, result in list(results.items()): - diff1 += f"***** results for segment {segment} *****\n" - diff2 += f"***** differences for segment {segment} *****\n" - - for proc, diff in list(result.items()): - # long diff - diff2 += f"*** process: {proc} ***\n" - diff2 += f"\tref: {log_paths[segment][proc]['ref']}\n" - diff2 += f"\tnew: {log_paths[segment][proc]['new']}\n\n" - - # short diff - diff1 += f" {proc}\n" - if isinstance(diff, str): - diff1 += f" ref: {log_paths[segment][proc]['ref']}\n" - diff1 += f" new: {log_paths[segment][proc]['new']}\n\n" - diff1 += f" {diff}\n" - failed = True - elif len(diff): - diff1 += f" ref: {log_paths[segment][proc]['ref']}\n" - diff1 += f" new: {log_paths[segment][proc]['new']}\n\n" - - cnt: Dict[str, int] = {} - for d in diff: - diff2 += f"\t{str(d)}\n" - - k = str(d[1]) - cnt[k] = 1 if k not in cnt else cnt[k] + 1 - - for k, v in sorted(cnt.items()): - diff1 += f" {k}: {v}\n" - failed = True - return diff1, diff2, failed - - if __name__ == "__main__": all_cars = {car for car, _ in segments} all_procs = {cfg.proc_name for cfg in CONFIGS if cfg.proc_name not in EXCLUDED_PROCS} @@ -246,11 +207,11 @@ if __name__ == "__main__": if not args.upload_only: results[segment][proc] = result - diff1, diff2, failed = format_diff(results, log_paths, ref_commit) + diff_short, diff_long, failed = format_diff(results, log_paths, ref_commit) if not upload: with open(os.path.join(PROC_REPLAY_DIR, "diff.txt"), "w") as f: - f.write(diff2) - print(diff1) + f.write(diff_long) + print(diff_short) if failed: print("TEST FAILED") diff --git a/selfdrive/test/process_replay/test_regen.py b/selfdrive/test/process_replay/test_regen.py new file mode 100755 index 0000000000..41d67ea376 --- /dev/null +++ b/selfdrive/test/process_replay/test_regen.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +import unittest + +from parameterized import parameterized + +from openpilot.selfdrive.test.process_replay.regen import regen_segment, DummyFrameReader +from openpilot.selfdrive.test.process_replay.process_replay import check_openpilot_enabled +from openpilot.tools.lib.openpilotci import get_url +from openpilot.tools.lib.logreader import LogReader +from openpilot.tools.lib.framereader import FrameReader + +TESTED_SEGMENTS = [ + ("PRIUS_C2", "0982d79ebb0de295|2021-01-04--17-13-21--13"), # TOYOTA PRIUS 2017: NEO, pandaStateDEPRECATED, no peripheralState, sensorEventsDEPRECATED + # Enable these once regen on CI becomes faster or use them for different tests running controlsd in isolation + # ("MAZDA_C3", "bd6a637565e91581|2021-10-30--15-14-53--4"), # MAZDA.CX9_2021: TICI, incomplete managerState + # ("FORD_C3", "54827bf84c38b14f|2023-01-26--21-59-07--4"), # FORD.BRONCO_SPORT_MK1: TICI +] + + +def ci_setup_data_readers(route, sidx): + lr = LogReader(get_url(route, sidx, "rlog")) + frs = { + 'roadCameraState': FrameReader(get_url(route, sidx, "fcamera")), + 'driverCameraState': DummyFrameReader.zero_dcamera() + } + if next((True for m in lr if m.which() == "wideRoadCameraState"), False): + frs["wideRoadCameraState"] = FrameReader(get_url(route, sidx, "ecamera")) + + return lr, frs + + +class TestRegen(unittest.TestCase): + @parameterized.expand(TESTED_SEGMENTS) + def test_engaged(self, case_name, segment): + route, sidx = segment.rsplit("--", 1) + lr, frs = ci_setup_data_readers(route, sidx) + output_logs = regen_segment(lr, frs, disable_tqdm=True) + + engaged = check_openpilot_enabled(output_logs) + self.assertTrue(engaged, f"openpilot not engaged in {case_name}") + + +if __name__=='__main__': + unittest.main() diff --git a/selfdrive/test/process_replay/vision_meta.py b/selfdrive/test/process_replay/vision_meta.py index 2994b77452..b3c3dc0c9c 100644 --- a/selfdrive/test/process_replay/vision_meta.py +++ b/selfdrive/test/process_replay/vision_meta.py @@ -4,9 +4,9 @@ from openpilot.common.realtime import DT_MDL, DT_DMON from openpilot.common.transformations.camera import tici_f_frame_size, tici_d_frame_size, tici_e_frame_size, eon_f_frame_size, eon_d_frame_size VideoStreamMeta = namedtuple("VideoStreamMeta", ["camera_state", "encode_index", "stream", "dt", "frame_sizes"]) -ROAD_CAMERA_FRAME_SIZES = {"tici": tici_f_frame_size, "tizi": tici_f_frame_size, "eon": eon_f_frame_size} +ROAD_CAMERA_FRAME_SIZES = {"tici": tici_f_frame_size, "tizi": tici_f_frame_size, "neo": eon_f_frame_size} WIDE_ROAD_CAMERA_FRAME_SIZES = {"tici": tici_e_frame_size, "tizi": tici_e_frame_size} -DRIVER_FRAME_SIZES = {"tici": tici_d_frame_size, "tizi": tici_d_frame_size, "eon": eon_d_frame_size} +DRIVER_FRAME_SIZES = {"tici": tici_d_frame_size, "tizi": tici_d_frame_size, "neo": eon_d_frame_size} VIPC_STREAM_METADATA = [ # metadata: (state_msg_type, encode_msg_type, stream_type, dt, frame_sizes) ("roadCameraState", "roadEncodeIdx", VisionStreamType.VISION_STREAM_ROAD, DT_MDL, ROAD_CAMERA_FRAME_SIZES), diff --git a/selfdrive/test/profiling/lib.py b/selfdrive/test/profiling/lib.py index 843bf52211..7f3b0126ff 100644 --- a/selfdrive/test/profiling/lib.py +++ b/selfdrive/test/profiling/lib.py @@ -1,5 +1,5 @@ from collections import defaultdict, deque -from cereal.services import service_list +from cereal.services import SERVICE_LIST import cereal.messaging as messaging import capnp @@ -67,7 +67,7 @@ class SubMaster(messaging.SubMaster): self.msgs = list(reversed(self.msgs)) for s in services: - self.freq[s] = service_list[s].frequency + self.freq[s] = SERVICE_LIST[s].frequency try: data = messaging.new_message(s) except capnp.lib.capnp.KjException: diff --git a/selfdrive/test/profiling/profiler.py b/selfdrive/test/profiling/profiler.py index 1d380ba5eb..6d0cc204c5 100755 --- a/selfdrive/test/profiling/profiler.py +++ b/selfdrive/test/profiling/profiler.py @@ -83,14 +83,12 @@ if __name__ == '__main__': from openpilot.selfdrive.controls.radard import radard_thread from openpilot.selfdrive.locationd.paramsd import main as paramsd_thread from openpilot.selfdrive.controls.plannerd import main as plannerd_thread - from openpilot.selfdrive.locationd.laikad import main as laikad_thread procs = { 'radard': radard_thread, 'controlsd': controlsd_thread, 'paramsd': paramsd_thread, 'plannerd': plannerd_thread, - 'laikad': laikad_thread, } proc = sys.argv[1] diff --git a/selfdrive/test/setup_device_ci.sh b/selfdrive/test/setup_device_ci.sh index ca458f2a79..5c85312f1a 100755 --- a/selfdrive/test/setup_device_ci.sh +++ b/selfdrive/test/setup_device_ci.sh @@ -29,7 +29,6 @@ sudo abctl --set_success # patch sshd config sudo mount -o rw,remount / -echo tici-$(cat /proc/cmdline | sed -e 's/^.*androidboot.serialno=//' -e 's/ .*$//') | sudo tee /etc/hostname sudo sed -i "s,/data/params/d/GithubSshKeys,/usr/comma/setup_keys," /etc/ssh/sshd_config sudo systemctl daemon-reload sudo systemctl restart ssh @@ -43,11 +42,11 @@ while true; do sudo systemctl start ssh fi - if ! pgrep -f 'ciui.py' > /dev/null 2>&1; then - echo 'starting UI' - cp $SOURCE_DIR/selfdrive/test/ciui.py /data/ - /data/ciui.py & - fi + #if ! pgrep -f 'ciui.py' > /dev/null 2>&1; then + # echo 'starting UI' + # cp $SOURCE_DIR/selfdrive/test/ciui.py /data/ + # /data/ciui.py & + #fi sleep 5s done @@ -80,9 +79,7 @@ safe_checkout() { echo "git checkout done, t=$SECONDS" du -hs $SOURCE_DIR $SOURCE_DIR/.git - if [ -z "SKIP_COPY" ]; then - rsync -a --delete $SOURCE_DIR $TEST_DIR - fi + rsync -a --delete $SOURCE_DIR $TEST_DIR } unsafe_checkout() { diff --git a/selfdrive/test/setup_vsound.sh b/selfdrive/test/setup_vsound.sh new file mode 100755 index 0000000000..a6601d0a61 --- /dev/null +++ b/selfdrive/test/setup_vsound.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +{ + #start pulseaudio daemon + sudo pulseaudio -D + + # create a virtual null audio and set it to default device + sudo pactl load-module module-null-sink sink_name=virtual_audio + sudo pactl set-default-sink virtual_audio +} > /dev/null 2>&1 diff --git a/selfdrive/test/setup_xvfb.sh b/selfdrive/test/setup_xvfb.sh new file mode 100755 index 0000000000..692b84d65f --- /dev/null +++ b/selfdrive/test/setup_xvfb.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +# Sets up a virtual display for running map renderer and simulator without an X11 display + +DISP_ID=99 +export DISPLAY=:$DISP_ID + +sudo Xvfb $DISPLAY -screen 0 2160x1080x24 2>/dev/null & + +# check for x11 socket for the specified display ID +while [ ! -S /tmp/.X11-unix/X$DISP_ID ] +do + echo "Waiting for Xvfb..." + sleep 1 +done + +touch ~/.Xauthority +export XDG_SESSION_TYPE="x11" +xset -q \ No newline at end of file diff --git a/selfdrive/test/test_onroad.py b/selfdrive/test/test_onroad.py index 553ef1afa6..335da73232 100755 --- a/selfdrive/test/test_onroad.py +++ b/selfdrive/test/test_onroad.py @@ -1,7 +1,11 @@ #!/usr/bin/env python3 +import bz2 import math import json import os +import pathlib +import psutil +import pytest import shutil import subprocess import time @@ -13,7 +17,7 @@ from pathlib import Path from cereal import car import cereal.messaging as messaging -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.common.basedir import BASEDIR from openpilot.common.timeout import Timeout from openpilot.common.params import Params @@ -30,33 +34,31 @@ PROCS = { "./encoderd": 17.0, "./camerad": 14.5, "./locationd": 11.0, - "./mapsd": 2.0, - "selfdrive.controls.plannerd": 16.5, - "./_ui": 18.0, + "./mapsd": (0.5, 10.0), + "selfdrive.controls.plannerd": 11.0, + "./ui": 18.0, "selfdrive.locationd.paramsd": 9.0, - "./_sensord": 7.0, + "./sensord": 7.0, "selfdrive.controls.radard": 4.5, - "selfdrive.modeld.modeld": 8.0, + "selfdrive.modeld.modeld": 13.0, "selfdrive.modeld.dmonitoringmodeld": 8.0, "selfdrive.modeld.navmodeld": 1.0, "selfdrive.thermald.thermald": 3.87, "selfdrive.locationd.calibrationd": 2.0, "selfdrive.locationd.torqued": 5.0, - "./_soundd": (1.0, 65.0), + "selfdrive.ui.soundd": 3.5, "selfdrive.monitoring.dmonitoringd": 4.0, "./proclogd": 1.54, "system.logmessaged": 0.2, - "./clocksd": 0.02, "selfdrive.tombstoned": 0, "./logcatd": 0, - "system.micd": 10.0, - "system.timezoned": 0, + "system.micd": 6.0, + "system.timed": 0, "selfdrive.boardd.pandad": 0, "selfdrive.statsd": 0.4, "selfdrive.navd.navd": 0.4, - "system.loggerd.uploader": 3.0, + "system.loggerd.uploader": (0.5, 10.0), "system.loggerd.deleter": 0.1, - "selfdrive.locationd.laikad": (1.0, 80.0), # TODO: better GPS setup in testing closet } PROCS.update({ @@ -67,7 +69,7 @@ PROCS.update({ }, "tizi": { "./boardd": 19.0, - "system.sensord.rawgps.rawgpsd": 1.0, + "system.qcomgpsd.qcomgpsd": 1.0, } }.get(HARDWARE.get_device_type(), {})) @@ -80,7 +82,6 @@ TIMINGS = { "carState": [2.5, 0.35], "carControl": [2.5, 0.35], "controlsState": [2.5, 0.35], - "lateralPlan": [2.5, 0.5], "longitudinalPlan": [2.5, 0.5], "roadCameraState": [2.5, 0.35], "driverCameraState": [2.5, 0.35], @@ -97,6 +98,7 @@ def cputime_total(ct): return ct.cpuUser + ct.cpuSystem + ct.cpuChildrenUser + ct.cpuChildrenSystem +@pytest.mark.tici class TestOnroad(unittest.TestCase): @classmethod @@ -152,6 +154,8 @@ class TestOnroad(unittest.TestCase): cls.segments = cls.segments[:-1] finally: + cls.gpu_procs = {psutil.Process(int(f.name)).name() for f in pathlib.Path('/sys/devices/virtual/kgsl/kgsl/proc/').iterdir() if f.is_dir()} + if proc is not None: proc.terminate() if proc.wait(60) is None: @@ -161,6 +165,16 @@ class TestOnroad(unittest.TestCase): # use the second segment by default as it's the first full segment cls.lr = list(LogReader(os.path.join(str(cls.segments[1]), "rlog"))) + cls.log_path = cls.segments[1] + + cls.log_sizes = {} + for f in cls.log_path.iterdir(): + assert f.is_file() + cls.log_sizes[f] = f.stat().st_size / 1e6 + if f.name in ("qlog", "rlog"): + with open(f, 'rb') as ff: + cls.log_sizes[f] = len(bz2.compress(ff.read())) / 1e6 + @cached_property def service_msgs(self): @@ -179,7 +193,7 @@ class TestOnroad(unittest.TestCase): continue with self.subTest(service=s): - assert len(msgs) >= math.floor(service_list[s].frequency*55) + assert len(msgs) >= math.floor(SERVICE_LIST[s].frequency*55) def test_cloudlog_size(self): msgs = [m for m in self.lr if m.which() == 'logMessage'] @@ -191,6 +205,19 @@ class TestOnroad(unittest.TestCase): big_logs = [f for f, n in cnt.most_common(3) if n / sum(cnt.values()) > 30.] self.assertEqual(len(big_logs), 0, f"Log spam: {big_logs}") + def test_log_sizes(self): + for f, sz in self.log_sizes.items(): + if f.name == "qcamera.ts": + assert 2.15 < sz < 2.35 + elif f.name == "qlog": + assert 0.7 < sz < 1.0 + elif f.name == "rlog": + assert 5 < sz < 50 + elif f.name.endswith('.hevc'): + assert 70 < sz < 77 + else: + raise NotImplementedError + def test_ui_timings(self): result = "\n" result += "------------------------------------------------\n" @@ -276,6 +303,9 @@ class TestOnroad(unittest.TestCase): # expected to go up while the MSGQ buffers fill up self.assertLessEqual(max(mems) - min(mems), 3.0) + def test_gpu_usage(self): + self.assertEqual(self.gpu_procs, {"weston", "ui", "camerad", "selfdrive.modeld.modeld"}) + def test_camera_processing_time(self): result = "\n" result += "------------------------------------------------\n" @@ -313,7 +343,7 @@ class TestOnroad(unittest.TestCase): result += "----------------- MPC Timing ------------------\n" result += "------------------------------------------------\n" - cfgs = [("lateralPlan", 0.05, 0.05), ("longitudinalPlan", 0.05, 0.05)] + cfgs = [("longitudinalPlan", 0.05, 0.05),] for (s, instant_max, avg_max) in cfgs: ts = [getattr(m, s).solverExecutionTime for m in self.service_msgs[s]] self.assertLess(max(ts), instant_max, f"high '{s}' execution time: {max(ts)}") @@ -356,7 +386,7 @@ class TestOnroad(unittest.TestCase): raise Exception(f"missing {s}") ts = np.diff(msgs) / 1e9 - dt = 1 / service_list[s].frequency + dt = 1 / SERVICE_LIST[s].frequency try: np.testing.assert_allclose(np.mean(ts), dt, rtol=0.03, err_msg=f"{s} - failed mean timing check") @@ -379,7 +409,7 @@ class TestOnroad(unittest.TestCase): def test_startup(self): startup_alert = None for msg in self.lrs[0]: - # can't use carEvents because the first msg can be dropped while loggerd is starting up + # can't use onroadEvents because the first msg can be dropped while loggerd is starting up if msg.which() == "controlsState": startup_alert = msg.controlsState.alertText1 break @@ -388,8 +418,8 @@ class TestOnroad(unittest.TestCase): def test_engagable(self): no_entries = Counter() - for m in self.service_msgs['carEvents']: - for evt in m.carEvents: + for m in self.service_msgs['onroadEvents']: + for evt in m.onroadEvents: if evt.noEntry: no_entries[evt.name] += 1 diff --git a/selfdrive/test/test_time_to_onroad.py b/selfdrive/test/test_time_to_onroad.py index 429feca344..aec49cb13a 100755 --- a/selfdrive/test/test_time_to_onroad.py +++ b/selfdrive/test/test_time_to_onroad.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import os +import pytest import time import subprocess @@ -9,6 +10,7 @@ from openpilot.common.timeout import Timeout from openpilot.selfdrive.test.helpers import set_params_enabled +@pytest.mark.tici def test_time_to_onroad(): # launch set_params_enabled() @@ -16,7 +18,7 @@ def test_time_to_onroad(): proc = subprocess.Popen(["python", manager_path]) start_time = time.monotonic() - sm = messaging.SubMaster(['controlsState', 'deviceState']) + sm = messaging.SubMaster(['controlsState', 'deviceState', 'onroadEvents']) try: # wait for onroad with Timeout(20, "timed out waiting to go onroad"): @@ -38,7 +40,7 @@ def test_time_to_onroad(): # once we're enageable, must be for the next few seconds for _ in range(500): sm.update(100) - assert sm['controlsState'].engageable + assert sm['controlsState'].engageable, f"events: {sm['onroadEvents']}" finally: proc.terminate() if proc.wait(60) is None: diff --git a/selfdrive/test/test_updated.py b/selfdrive/test/test_updated.py index e679cd2c3b..dd79e03de4 100755 --- a/selfdrive/test/test_updated.py +++ b/selfdrive/test/test_updated.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import datetime import os +import pytest import time import tempfile import unittest @@ -13,6 +14,7 @@ from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params +@pytest.mark.tici class TestUpdated(unittest.TestCase): def setUp(self): diff --git a/selfdrive/test/test_valgrind_replay.py b/selfdrive/test/test_valgrind_replay.py index a8a3463104..75520df91b 100755 --- a/selfdrive/test/test_valgrind_replay.py +++ b/selfdrive/test/test_valgrind_replay.py @@ -15,7 +15,7 @@ else: import cereal.messaging as messaging from collections import namedtuple from openpilot.tools.lib.logreader import LogReader -from openpilot.selfdrive.test.openpilotci import get_url +from openpilot.tools.lib.openpilotci import get_url from openpilot.common.basedir import BASEDIR ProcessConfig = namedtuple('ProcessConfig', ['proc_name', 'pub_sub', 'ignore', 'command', 'path', 'segment', 'wait_for_response']) diff --git a/selfdrive/test/update_ci_routes.py b/selfdrive/test/update_ci_routes.py index 8157066334..5ab5042b2b 100755 --- a/selfdrive/test/update_ci_routes.py +++ b/selfdrive/test/update_ci_routes.py @@ -1,57 +1,39 @@ #!/usr/bin/env python3 +import os +import re import subprocess import sys -from functools import lru_cache -from typing import Iterable, Optional +from typing import Iterable, List, Optional -from azure.storage.blob import ContainerClient from tqdm import tqdm from openpilot.selfdrive.car.tests.routes import routes as test_car_models_routes -from openpilot.selfdrive.locationd.test.test_laikad import UBLOX_TEST_ROUTE, QCOM_TEST_ROUTE from openpilot.selfdrive.test.process_replay.test_processes import source_segments as replay_segments -from openpilot.selfdrive.test.openpilotci import (DATA_CI_ACCOUNT, DATA_CI_ACCOUNT_URL, DATA_CI_CONTAINER, - get_azure_credential, get_container_sas) +from openpilot.tools.lib.azure_container import AzureContainer +from openpilot.tools.lib.openpilotcontainers import DataCIContainer, DataProdContainer, OpenpilotCIContainer -DATA_PROD_ACCOUNT = "commadata2" -DATA_PROD_CONTAINER = "commadata2" - -SOURCES = [ - (DATA_PROD_ACCOUNT, DATA_PROD_CONTAINER), - (DATA_CI_ACCOUNT, DATA_CI_CONTAINER), +SOURCES: List[AzureContainer] = [ + DataProdContainer, + DataCIContainer ] - -@lru_cache -def get_azure_keys(): - dest_container = ContainerClient(DATA_CI_ACCOUNT_URL, DATA_CI_CONTAINER, credential=get_azure_credential()) - dest_key = get_container_sas(DATA_CI_ACCOUNT, DATA_CI_CONTAINER) - source_keys = [get_container_sas(*s) for s in SOURCES] - return dest_container, dest_key, source_keys - +DEST = OpenpilotCIContainer def upload_route(path: str, exclude_patterns: Optional[Iterable[str]] = None) -> None: - # TODO: use azure-storage-blob instead of azcopy, simplifies auth - dest_key = get_container_sas(DATA_CI_ACCOUNT, DATA_CI_CONTAINER) if exclude_patterns is None: - exclude_patterns = ['*/dcamera.hevc'] + exclude_patterns = [r'dcamera\.hevc'] r, n = path.rsplit("--", 1) r = '/'.join(r.split('/')[-2:]) # strip out anything extra in the path destpath = f"{r}/{n}" - cmd = [ - "azcopy", - "copy", - f"{path}/*", - f"https://{DATA_CI_ACCOUNT}.blob.core.windows.net/{DATA_CI_CONTAINER}/{destpath}?{dest_key}", - "--recursive=false", - "--overwrite=false", - ] + [f"--exclude-pattern={p}" for p in exclude_patterns] - subprocess.check_call(cmd) + for file in os.listdir(path): + if any(re.search(pattern, file) for pattern in exclude_patterns): + continue + DEST.upload_file(os.path.join(path, file), f"{destpath}/{file}") def sync_to_ci_public(route: str) -> bool: - dest_container, dest_key, source_keys = get_azure_keys() + dest_container, dest_key = DEST.get_client_and_key() key_prefix = route.replace('|', '/') dongle_id = key_prefix.split('/')[0] @@ -59,14 +41,15 @@ def sync_to_ci_public(route: str) -> bool: return True print(f"Uploading {route}") - for (source_account, source_bucket), source_key in zip(SOURCES, source_keys, strict=True): + for source_container in SOURCES: # assumes az login has been run - print(f"Trying {source_account}/{source_bucket}") + print(f"Trying {source_container.ACCOUNT}/{source_container.CONTAINER}") + _, source_key = source_container.get_client_and_key() cmd = [ "azcopy", "copy", - f"https://{source_account}.blob.core.windows.net/{source_bucket}/{key_prefix}?{source_key}", - f"https://{DATA_CI_ACCOUNT}.blob.core.windows.net/{DATA_CI_CONTAINER}/{dongle_id}?{dest_key}", + f"{source_container.BASE_URL}{key_prefix}?{source_key}", + f"{DEST.BASE_URL}{dongle_id}?{dest_key}", "--recursive=true", "--overwrite=false", "--exclude-pattern=*/dcamera.hevc", @@ -90,7 +73,6 @@ if __name__ == "__main__": if not len(to_sync): # sync routes from the car tests routes and process replay - to_sync.extend([UBLOX_TEST_ROUTE, QCOM_TEST_ROUTE]) to_sync.extend([rt.route for rt in test_car_models_routes]) to_sync.extend([s[1].rsplit('--', 1)[0] for s in replay_segments]) diff --git a/selfdrive/thermald/fan_controller.py b/selfdrive/thermald/fan_controller.py index 64cd4c78ee..19c3292ce2 100755 --- a/selfdrive/thermald/fan_controller.py +++ b/selfdrive/thermald/fan_controller.py @@ -3,7 +3,7 @@ from abc import ABC, abstractmethod from openpilot.common.realtime import DT_TRML from openpilot.common.numpy_fast import interp -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.controls.lib.pid import PIDController class BaseFanController(ABC): diff --git a/selfdrive/thermald/power_monitoring.py b/selfdrive/thermald/power_monitoring.py index e8c8d24891..d10d642f0b 100644 --- a/selfdrive/thermald/power_monitoring.py +++ b/selfdrive/thermald/power_monitoring.py @@ -3,9 +3,9 @@ import threading from typing import Optional from openpilot.common.numpy_fast import interp -from openpilot.common.params import Params, put_nonblocking +from openpilot.common.params import Params from openpilot.system.hardware import HARDWARE -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.statsd import statlog CAR_VOLTAGE_LOW_PASS_K = 0.011 # LPF gain for 45s tau (dt/tau / (dt/tau + 1)) @@ -60,7 +60,7 @@ class PowerMonitoring: self.car_battery_capacity_uWh = max(self.car_battery_capacity_uWh, 0) self.car_battery_capacity_uWh = min(self.car_battery_capacity_uWh, CAR_BATTERY_CAPACITY_uWh) if now - self.last_save_time >= 10: - put_nonblocking("CarBatteryCapacity", str(int(self.car_battery_capacity_uWh))) + self.params.put_nonblocking("CarBatteryCapacity", str(int(self.car_battery_capacity_uWh))) self.last_save_time = now # First measurement, set integration time diff --git a/selfdrive/thermald/thermald.py b/selfdrive/thermald/thermald.py index 256db7d061..4a14ddcf2e 100755 --- a/selfdrive/thermald/thermald.py +++ b/selfdrive/thermald/thermald.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -import datetime import os import json import queue @@ -13,8 +12,8 @@ import psutil import cereal.messaging as messaging from cereal import log +from cereal.services import SERVICE_LIST from openpilot.common.dict_helpers import strip_deprecated_keys -from openpilot.common.time import MIN_DATE from openpilot.common.filter_simple import FirstOrderFilter from openpilot.common.params import Params from openpilot.common.realtime import DT_TRML @@ -22,7 +21,7 @@ from openpilot.selfdrive.controls.lib.alertmanager import set_offroad_alert from openpilot.system.hardware import HARDWARE, TICI, AGNOS from openpilot.system.loggerd.config import get_available_percent from openpilot.selfdrive.statsd import statlog -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.thermald.power_monitoring import PowerMonitoring from openpilot.selfdrive.thermald.fan_controller import TiciFanController from openpilot.system.version import terms_version, training_version @@ -33,7 +32,7 @@ NetworkStrength = log.DeviceState.NetworkStrength CURRENT_TAU = 15. # 15s time constant TEMP_TAU = 5. # 5s time constant DISCONNECT_TIMEOUT = 5. # wait 5 seconds before going offroad after disconnect so you get an alert -PANDA_STATES_TIMEOUT = int(1000 * 1.5 * DT_TRML) # 1.5x the expected pandaState frequency +PANDA_STATES_TIMEOUT = round(1000 / SERVICE_LIST['pandaStates'].frequency * 1.5) # 1.5x the expected pandaState frequency ThermalBand = namedtuple("ThermalBand", ['min_temp', 'max_temp']) HardwareState = namedtuple("HardwareState", ['network_type', 'network_info', 'network_strength', 'network_stats', @@ -80,7 +79,7 @@ def read_tz(x): def read_thermal(thermal_config): - dat = messaging.new_message('deviceState') + dat = messaging.new_message('deviceState', valid=True) dat.deviceState.cpuTempC = [read_tz(z) / thermal_config.cpu[1] for z in thermal_config.cpu[0]] dat.deviceState.gpuTempC = [read_tz(z) / thermal_config.gpu[1] for z in thermal_config.gpu[0]] dat.deviceState.memoryTempC = read_tz(thermal_config.mem[0]) / thermal_config.mem[1] @@ -212,6 +211,10 @@ def thermald_thread(end_event, hw_queue) -> None: while not end_event.is_set(): sm.update(PANDA_STATES_TIMEOUT) + # Run at 2Hz + if sm.frame % round(SERVICE_LIST['pandaStates'].frequency * DT_TRML) != 0: + continue + pandaStates = sm['pandaStates'] peripheralState = sm['peripheralState'] peripheral_panda_present = peripheralState.pandaType != log.PandaState.PandaType.unknown @@ -290,25 +293,22 @@ def thermald_thread(end_event, hw_queue) -> None: # **** starting logic **** - # Ensure date/time are valid - now = datetime.datetime.utcnow() - startup_conditions["time_valid"] = now > MIN_DATE - set_offroad_alert_if_changed("Offroad_InvalidTime", (not startup_conditions["time_valid"]) and peripheral_panda_present) - startup_conditions["up_to_date"] = params.get("Offroad_ConnectivityNeeded") is None or params.get_bool("DisableUpdates") or params.get_bool("SnoozeUpdate") startup_conditions["not_uninstalling"] = not params.get_bool("DoUninstall") startup_conditions["accepted_terms"] = params.get("HasAcceptedTerms") == terms_version # with 2% left, we killall, otherwise the phone will take a long time to boot startup_conditions["free_space"] = msg.deviceState.freeSpacePercent > 2 - startup_conditions["completed_training"] = params.get("CompletedTrainingVersion") == training_version or \ - params.get_bool("Passive") + startup_conditions["completed_training"] = params.get("CompletedTrainingVersion") == training_version startup_conditions["not_driver_view"] = not params.get_bool("IsDriverViewEnabled") startup_conditions["not_taking_snapshot"] = not params.get_bool("IsTakingSnapshot") # must be at an engageable thermal band to go onroad startup_conditions["device_temp_engageable"] = thermal_status < ThermalStatus.red + # ensure device is fully booted + startup_conditions["device_booted"] = startup_conditions.get("device_booted", False) or HARDWARE.booted() + # if the temperature enters the danger zone, go offroad to cool down onroad_conditions["device_temp_good"] = thermal_status < ThermalStatus.danger extra_text = f"{offroad_comp_temp:.1f}C" @@ -441,6 +441,8 @@ def thermald_thread(end_event, hw_queue) -> None: except Exception: cloudlog.exception("failed to save offroad status") + params.put_bool_nonblocking("NetworkMetered", msg.deviceState.networkMetered) + count += 1 should_start_prev = should_start diff --git a/selfdrive/tombstoned.py b/selfdrive/tombstoned.py index a1479003ee..5a81e93b28 100755 --- a/selfdrive/tombstoned.py +++ b/selfdrive/tombstoned.py @@ -9,10 +9,9 @@ import time import glob from typing import NoReturn -from openpilot.common.file_helpers import mkdirs_exists_ok import openpilot.selfdrive.sentry as sentry from openpilot.system.hardware.hw import Paths -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.system.version import get_commit MAX_SIZE = 1_000_000 * 100 # allow up to 100M @@ -46,19 +45,16 @@ def get_apport_stacktrace(fn): def get_tombstones(): - """Returns list of (filename, ctime) for all tombstones in /data/tombstones - and apport crashlogs in /var/crash""" + """Returns list of (filename, ctime) for all crashlogs""" files = [] - for folder in [TOMBSTONE_DIR, APPORT_DIR]: - if os.path.exists(folder): - with os.scandir(folder) as d: - - # Loop over first 1000 directory entries - for _, f in zip(range(1000), d, strict=False): - if f.name.startswith("tombstone"): - files.append((f.path, int(f.stat().st_ctime))) - elif f.name.endswith(".crash") and f.stat().st_mode == 0o100640: - files.append((f.path, int(f.stat().st_ctime))) + if os.path.exists(APPORT_DIR): + with os.scandir(APPORT_DIR) as d: + # Loop over first 1000 directory entries + for _, f in zip(range(1000), d, strict=False): + if f.name.startswith("tombstone"): + files.append((f.path, int(f.stat().st_ctime))) + elif f.name.endswith(".crash") and f.stat().st_mode == 0o100640: + files.append((f.path, int(f.stat().st_ctime))) return files @@ -131,7 +127,7 @@ def report_tombstone_apport(fn): new_fn = f"{date}_{get_commit(default='nocommit')[:8]}_{safe_fn(clean_path)}"[:MAX_TOMBSTONE_FN_LEN] crashlog_dir = os.path.join(Paths.log_root(), "crash") - mkdirs_exists_ok(crashlog_dir) + os.makedirs(crashlog_dir, exist_ok=True) # Files could be on different filesystems, copy, then delete shutil.copy(fn, os.path.join(crashlog_dir, new_fn)) @@ -143,7 +139,7 @@ def report_tombstone_apport(fn): def main() -> NoReturn: - sentry.init(sentry.SentryProject.SELFDRIVE_NATIVE) + should_report = sentry.init(sentry.SentryProject.SELFDRIVE_NATIVE) # Clear apport folder on start, otherwise duplicate crashes won't register clear_apport_folder() @@ -153,6 +149,14 @@ def main() -> NoReturn: now_tombstones = set(get_tombstones()) for fn, _ in (now_tombstones - initial_tombstones): + # clear logs if we're not interested in them + if not should_report: + try: + os.remove(fn) + except Exception: + pass + continue + try: cloudlog.info(f"reporting new tombstone {fn}") if fn.endswith(".crash"): diff --git a/selfdrive/ui/.gitignore b/selfdrive/ui/.gitignore index cb95652191..99f9097905 100644 --- a/selfdrive/ui/.gitignore +++ b/selfdrive/ui/.gitignore @@ -3,7 +3,7 @@ moc_* translations/main_test_en.* -_mui +ui watch3 installer/installers/* qt/text diff --git a/selfdrive/ui/SConscript b/selfdrive/ui/SConscript index 1274c8b60d..160c292c92 100644 --- a/selfdrive/ui/SConscript +++ b/selfdrive/ui/SConscript @@ -12,25 +12,32 @@ if arch == 'larch64': maps = arch in ['larch64', 'aarch64', 'x86_64'] screenrecorder = arch in ['larch64'] -if maps and arch != 'larch64': - rpath = [Dir(f"#third_party/mapbox-gl-native-qt/{arch}").srcnode().abspath] - qt_env["RPATH"] += rpath - if arch == "Darwin": del base_libs[base_libs.index('OpenCL')] qt_env['FRAMEWORKS'] += ['OpenCL'] +# FIXME: remove this once we're on 5.15 (24.04) +qt_env['CXXFLAGS'] += ["-Wno-deprecated-declarations"] + qt_util = qt_env.Library("qt_util", ["#selfdrive/ui/qt/api.cc", "#selfdrive/ui/qt/util.cc"], LIBS=base_libs) -widgets_src = ["ui.cc", "qt/widgets/input.cc", "qt/widgets/drive_stats.cc", "qt/widgets/wifi.cc", +widgets_src = ["ui.cc", "qt/widgets/input.cc", "qt/widgets/wifi.cc", "qt/widgets/ssh_keys.cc", "qt/widgets/toggle.cc", "qt/widgets/controls.cc", "qt/widgets/offroad_alerts.cc", "qt/widgets/prime.cc", "qt/widgets/keyboard.cc", "qt/widgets/scrollview.cc", "qt/widgets/cameraview.cc", "#third_party/qrcode/QrCode.cc", - "qt/request_repeater.cc", "qt/qt_window.cc", "qt/network/networking.cc", "qt/network/wifi_manager.cc", - "qt/offroad/sunnypilot_settings.cc"] + "qt/request_repeater.cc", "qt/qt_window.cc", "qt/network/networking.cc", "qt/network/wifi_manager.cc"] + +widgets_src += ["qt/offroad/sunnypilot/display_settings.cc", "qt/offroad/sunnypilot/sunnypilot_settings.cc", + "qt/offroad/sunnypilot/vehicle_settings.cc", "qt/offroad/sunnypilot/visuals_settings.cc", + "qt/offroad/sunnypilot/trips_settings.cc", "qt/offroad/sunnypilot/mads_settings.cc", + "qt/offroad/sunnypilot/lane_change_settings.cc", "qt/offroad/sunnypilot/speed_limit_control_settings.cc", + "qt/offroad/sunnypilot/monitoring_settings.cc", "qt/offroad/sunnypilot/osm_settings.cc", + "qt/offroad/sunnypilot/custom_offsets_settings.cc", "qt/widgets/sunnypilot/drive_stats.cc", + "qt/offroad/sunnypilot/software_settings_sp.cc", "qt/offroad/sunnypilot/models_fetcher.cc", + "qt/offroad/sunnypilot/speed_limit_warning_settings.cc", "qt/offroad/sunnypilot/speed_limit_policy_settings.cc"] qt_env['CPPDEFINES'] = [] if maps: - base_libs += ['qmapboxgl'] + base_libs += ['QMapLibre'] widgets_src += ["qt/maps/map_helpers.cc", "qt/maps/map_settings.cc", "qt/maps/map.cc", "qt/maps/map_panel.cc", "qt/maps/map_eta.cc", "qt/maps/map_instructions.cc"] qt_env['CPPDEFINES'] += ["ENABLE_MAPS"] @@ -73,12 +80,6 @@ qt_env.Command(assets, [assets_src, translations_assets_src], f"rcc $SOURCES -o qt_env.Depends(assets, Glob('#selfdrive/assets/*', exclude=[assets, assets_src, translations_assets_src, "#selfdrive/assets/assets.o"]) + [lrelease]) asset_obj = qt_env.Object("assets", assets) -# build soundd -qt_env.Program("soundd/_soundd", ["soundd/main.cc", "soundd/sound.cc"], LIBS=qt_libs) -if GetOption('extras'): - qt_env.Program("tests/playsound", "tests/playsound.cc", LIBS=base_libs) - qt_env.Program('tests/test_sound', ['tests/test_runner.cc', 'soundd/sound.cc', 'tests/test_sound.cc'], LIBS=qt_libs) - qt_env.SharedLibrary("qt/python_helpers", ["qt/qt_window.cc"], LIBS=qt_libs) # spinner and text window @@ -93,7 +94,7 @@ if screenrecorder: qt_libs += ['OmxCore', 'gsl', 'CB', 'avformat', 'avcodec', 'swscale', 'avutil', 'yuv', 'pthread'] qt_env['CPPDEFINES'] += ["ENABLE_DASHCAM"] -qt_env.Program("_ui", qt_src + [asset_obj], LIBS=qt_libs) +qt_env.Program("ui", qt_src + [asset_obj], LIBS=qt_libs) if GetOption('extras'): qt_src.remove("main.cc") # replaced by test_runner #qt_env.Program('tests/test_translations', [asset_obj, 'tests/test_runner.cc', 'tests/test_translations.cc'] + qt_src, LIBS=qt_libs) @@ -109,31 +110,22 @@ if GetOption('extras') and arch != "Darwin": # build updater UI qt_env.Program("qt/setup/updater", ["qt/setup/updater.cc", asset_obj], LIBS=qt_libs) - # build mui - qt_env.Program("_mui", ["mui.cc"], LIBS=qt_libs) - # build installers senv = qt_env.Clone() senv['LINKFLAGS'].append('-Wl,-strip-debug') release = "release3" - dashcam = "dashcam3" installers = [ ("openpilot", release), ("openpilot_test", f"{release}-staging"), ("openpilot_nightly", "nightly"), ("openpilot_internal", "master"), - ("dashcam", dashcam), - ("dashcam_test", f"{dashcam}-staging"), ] - cont = {} - for brand in ("openpilot", "dashcam"): - cont[brand] = senv.Command(f"installer/continue_{brand}.o", f"installer/continue_{brand}.sh", - "ld -r -b binary -o $TARGET $SOURCE") + cont = senv.Command(f"installer/continue_openpilot.o", f"installer/continue_openpilot.sh", + "ld -r -b binary -o $TARGET $SOURCE") for name, branch in installers: - brand = "dashcam" if "dashcam" in branch else "openpilot" - d = {'BRANCH': f"'\"{branch}\"'", 'BRAND': f"'\"{brand}\"'"} + d = {'BRANCH': f"'\"{branch}\"'"} if "internal" in name: d['INTERNAL'] = "1" @@ -142,9 +134,9 @@ if GetOption('extras') and arch != "Darwin": r.raise_for_status() d['SSH_KEYS'] = f'\\"{r.text.strip()}\\"' obj = senv.Object(f"installer/installers/installer_{name}.o", ["installer/installer.cc"], CPPDEFINES=d) - f = senv.Program(f"installer/installers/installer_{name}", [obj, cont[brand]], LIBS=qt_libs) + f = senv.Program(f"installer/installers/installer_{name}", [obj, cont], LIBS=qt_libs) # keep installers small - assert f[0].get_size() < 300*1e3 + assert f[0].get_size() < 350*1e3 # build watch3 if arch in ['x86_64', 'aarch64', 'Darwin'] or GetOption('extras'): diff --git a/common/kalman/__init__.py b/selfdrive/ui/__init__.py similarity index 100% rename from common/kalman/__init__.py rename to selfdrive/ui/__init__.py diff --git a/selfdrive/ui/installer/continue_dashcam.sh b/selfdrive/ui/installer/continue_dashcam.sh deleted file mode 100755 index 25233fff11..0000000000 --- a/selfdrive/ui/installer/continue_dashcam.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/bash - -cd /data/openpilot -exec ./launch_chffrplus.sh diff --git a/selfdrive/ui/installer/installer.cc b/selfdrive/ui/installer/installer.cc index 179ce60c63..d43ed37ae8 100644 --- a/selfdrive/ui/installer/installer.cc +++ b/selfdrive/ui/installer/installer.cc @@ -33,8 +33,8 @@ const QString CACHE_PATH = "/data/openpilot.cache"; #define INSTALL_PATH "/data/openpilot" #define TMP_INSTALL_PATH "/data/tmppilot" -extern const uint8_t str_continue[] asm("_binary_selfdrive_ui_installer_continue_" BRAND "_sh_start"); -extern const uint8_t str_continue_end[] asm("_binary_selfdrive_ui_installer_continue_" BRAND "_sh_end"); +extern const uint8_t str_continue[] asm("_binary_selfdrive_ui_installer_continue_openpilot_sh_start"); +extern const uint8_t str_continue_end[] asm("_binary_selfdrive_ui_installer_continue_openpilot_sh_end"); bool time_valid() { time_t rawtime; diff --git a/selfdrive/ui/mui.cc b/selfdrive/ui/mui.cc deleted file mode 100644 index e2b4358b65..0000000000 --- a/selfdrive/ui/mui.cc +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include -#include -#include - -#include "cereal/messaging/messaging.h" -#include "selfdrive/ui/ui.h" -#include "selfdrive/ui/qt/qt_window.h" - -class StatusBar : public QGraphicsRectItem { - private: - QLinearGradient linear_gradient; - QRadialGradient radial_gradient; - QTimer animation_timer; - const int animation_length = 10; - int animation_index = 0; - - public: - StatusBar(double x, double y, double width, double height) : QGraphicsRectItem {x, y, width, height} { - linear_gradient = QLinearGradient(0, 0, 0, height/2); - linear_gradient.setSpread(QGradient::ReflectSpread); - - radial_gradient = QRadialGradient(width/2, height/2, width/8); - QObject::connect(&animation_timer, &QTimer::timeout, [=]() { - animation_index++; - animation_index %= animation_length; - }); - animation_timer.start(50); - } - - void solidColor(QColor color) { - QColor dark_color = QColor(color); - dark_color.setAlphaF(0.5); - - linear_gradient.setColorAt(0, dark_color); - linear_gradient.setColorAt(1, color); - setBrush(QBrush(linear_gradient)); - } - - // these need to be called continuously for the animations to work. - // can probably clean that up with some more abstractions - void blinkingColor(QColor color) { - QColor dark_color = QColor(color); - dark_color.setAlphaF(0.1); - - int radius = (rect().width() / animation_length) * animation_index; - QPoint center = QPoint(rect().width()/2, rect().height()/2); - radial_gradient.setCenter(center); - radial_gradient.setFocalPoint(center); - radial_gradient.setRadius(radius); - - radial_gradient.setColorAt(1, dark_color); - radial_gradient.setColorAt(0, color); - setBrush(QBrush(radial_gradient)); - } - - void laneChange(cereal::LateralPlan::LaneChangeDirection direction) { - QColor dark_color = QColor(bg_colors[STATUS_ENGAGED]); - dark_color.setAlphaF(0.1); - - int x = (rect().width() / animation_length) * animation_index; - QPoint center = QPoint(((direction == cereal::LateralPlan::LaneChangeDirection::RIGHT) ? x : (rect().width() - x)), rect().height()/2); - radial_gradient.setCenter(center); - radial_gradient.setFocalPoint(center); - radial_gradient.setRadius(rect().width()/5); - - radial_gradient.setColorAt(1, dark_color); - radial_gradient.setColorAt(0, bg_colors[STATUS_ENGAGED]); - setBrush(QBrush(radial_gradient)); - } - - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override { - painter->setPen(QPen()); - painter->setBrush(brush()); - - double rounding_radius = rect().height()/2; - painter->drawRoundedRect(rect(), rounding_radius, rounding_radius); - } -}; - -int main(int argc, char *argv[]) { - QApplication a(argc, argv); - QWidget w; - setMainWindow(&w); - - w.setStyleSheet("background-color: black;"); - - // our beautiful UI - QVBoxLayout *layout = new QVBoxLayout(&w); - - QGraphicsScene *scene = new QGraphicsScene(); - StatusBar *status_bar = new StatusBar(0, 0, 1000, 50); - scene->addItem(status_bar); - - QGraphicsView *graphics_view = new QGraphicsView(scene); - layout->insertSpacing(0, 400); - layout->addWidget(graphics_view, 0, Qt::AlignCenter); - - QTimer timer; - QObject::connect(&timer, &QTimer::timeout, [=]() { - static SubMaster sm({"deviceState", "controlsState", "lateralPlan"}); - - bool onroad_prev = sm.allAliveAndValid({"deviceState"}) && - sm["deviceState"].getDeviceState().getStarted(); - sm.update(0); - - bool onroad = sm.allAliveAndValid({"deviceState"}) && - sm["deviceState"].getDeviceState().getStarted(); - - if (onroad) { - auto cs = sm["controlsState"].getControlsState(); - UIStatus status = cs.getEnabled() ? STATUS_ENGAGED : STATUS_DISENGAGED; - auto lp = sm["lateralPlan"].getLateralPlan(); - if (lp.getLaneChangeState() == cereal::LateralPlan::LaneChangeState::PRE_LANE_CHANGE) { - status_bar->blinkingColor(bg_colors[status]); - } else if (lp.getLaneChangeState() == cereal::LateralPlan::LaneChangeState::LANE_CHANGE_STARTING || - lp.getLaneChangeState() == cereal::LateralPlan::LaneChangeState::LANE_CHANGE_FINISHING) { - status_bar->laneChange(lp.getLaneChangeDirection()); - } else { - status_bar->solidColor(bg_colors[status]); - } - } - - if ((onroad != onroad_prev) || sm.frame < 2) { - Hardware::set_brightness(50); - Hardware::set_display_power(onroad); - } - }); - timer.start(50); - - return a.exec(); -} diff --git a/selfdrive/ui/qt/body.cc b/selfdrive/ui/qt/body.cc index f2628d304f..e01adbe063 100644 --- a/selfdrive/ui/qt/body.cc +++ b/selfdrive/ui/qt/body.cc @@ -63,9 +63,9 @@ BodyWindow::BodyWindow(QWidget *parent) : fuel_filter(1.0, 5., 1. / UI_FREQ), QW face = new QLabel(); face->setAlignment(Qt::AlignCenter); layout->addWidget(face); - awake = new QMovie("../assets/body/awake.gif"); + awake = new QMovie("../assets/body/awake.gif", {}, this); awake->setCacheMode(QMovie::CacheAll); - sleep = new QMovie("../assets/body/sleep.gif"); + sleep = new QMovie("../assets/body/sleep.gif", {}, this); sleep->setCacheMode(QMovie::CacheAll); // record button diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index fcb7626430..48de10a79c 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -11,8 +11,6 @@ #ifdef ENABLE_MAPS #include "selfdrive/ui/qt/maps/map_settings.h" -#else -#include "selfdrive/ui/qt/widgets/drive_stats.h" #endif // HomeWindow: the container for the offroad and onroad UIs @@ -170,7 +168,7 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) { #ifdef ENABLE_MAPS left_widget->addWidget(new MapSettings); #else - left_widget->addWidget(new DriveStats); + left_widget->addWidget(new QWidget); #endif custom_mapbox = QString::fromStdString(params.get("CustomMapboxTokenSk")) != ""; if (!custom_mapbox) { diff --git a/selfdrive/ui/qt/maps/map.cc b/selfdrive/ui/qt/maps/map.cc index ab776ccd8b..d505e4f5ff 100644 --- a/selfdrive/ui/qt/maps/map.cc +++ b/selfdrive/ui/qt/maps/map.cc @@ -18,7 +18,7 @@ const float MAX_PITCH = 50; const float MIN_PITCH = 0; const float MAP_SCALE = 2; -MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings), velocity_filter(0, 10, 0.05, false) { +MapWindow::MapWindow(const QMapLibre::Settings &settings) : m_settings(settings), velocity_filter(0, 10, 0.05, false) { QObject::connect(uiState(), &UIState::uiUpdate, this, &MapWindow::updateState); map_overlay = new QWidget (this); @@ -57,10 +57,10 @@ void MapWindow::initLayers() { if (!m_map->layerExists("modelPathLayer")) { qDebug() << "Initializing modelPathLayer"; QVariantMap modelPath; - modelPath["id"] = "modelPathLayer"; + //modelPath["id"] = "modelPathLayer"; modelPath["type"] = "line"; modelPath["source"] = "modelPathSource"; - m_map->addLayer(modelPath); + m_map->addLayer("modelPathLayer", modelPath); m_map->setPaintProperty("modelPathLayer", "line-color", QColor("red")); m_map->setPaintProperty("modelPathLayer", "line-width", 5.0); m_map->setLayoutProperty("modelPathLayer", "line-cap", "round"); @@ -68,10 +68,9 @@ void MapWindow::initLayers() { if (!m_map->layerExists("navLayer")) { qDebug() << "Initializing navLayer"; QVariantMap nav; - nav["id"] = "navLayer"; nav["type"] = "line"; nav["source"] = "navSource"; - m_map->addLayer(nav, "road-intersection"); + m_map->addLayer("navLayer", nav, "road-intersection"); QVariantMap transition; transition["duration"] = 400; // ms @@ -84,10 +83,9 @@ void MapWindow::initLayers() { qDebug() << "Initializing pinLayer"; m_map->addImage("default_marker", QImage("../assets/navigation/default_marker.svg")); QVariantMap pin; - pin["id"] = "pinLayer"; pin["type"] = "symbol"; pin["source"] = "pinSource"; - m_map->addLayer(pin); + m_map->addLayer("pinLayer", pin); m_map->setLayoutProperty("pinLayer", "icon-pitch-alignment", "viewport"); m_map->setLayoutProperty("pinLayer", "icon-image", "default_marker"); m_map->setLayoutProperty("pinLayer", "icon-ignore-placement", true); @@ -100,10 +98,9 @@ void MapWindow::initLayers() { m_map->addImage("label-arrow", QImage("../assets/images/triangle.svg")); QVariantMap carPos; - carPos["id"] = "carPosLayer"; carPos["type"] = "symbol"; carPos["source"] = "carPosSource"; - m_map->addLayer(carPos); + m_map->addLayer("carPosLayer", carPos); m_map->setLayoutProperty("carPosLayer", "icon-pitch-alignment", "map"); m_map->setLayoutProperty("carPosLayer", "icon-image", "label-arrow"); m_map->setLayoutProperty("carPosLayer", "icon-size", 0.5); @@ -120,7 +117,7 @@ void MapWindow::initLayers() { buildings["source-layer"] = "building"; buildings["type"] = "fill-extrusion"; buildings["minzoom"] = 15; - m_map->addLayer(buildings); + m_map->addLayer("buildingsLayer", buildings); m_map->setFilter("buildingsLayer", QVariantList({"==", "extrude", "true"})); QVariantList fillExtrusionHeight = { // scale buildings as you zoom in @@ -192,7 +189,7 @@ void MapWindow::updateState(const UIState &s) { locationd_valid = (locationd_pos.getValid() && locationd_orientation.getValid() && locationd_velocity.getValid() && pos_accurate_enough); if (locationd_valid) { - last_position = QMapbox::Coordinate(locationd_pos.getValue()[0], locationd_pos.getValue()[1]); + last_position = QMapLibre::Coordinate(locationd_pos.getValue()[0], locationd_pos.getValue()[1]); last_bearing = RAD2DEG(locationd_orientation.getValue()[2]); velocity_filter.update(std::max(10.0, locationd_velocity.getValue()[0])); } @@ -229,10 +226,10 @@ void MapWindow::updateState(const UIState &s) { if (locationd_valid) { // Update current location marker auto point = coordinate_to_collection(*last_position); - QMapbox::Feature feature1(QMapbox::Feature::PointType, point, {}, {}); + QMapLibre::Feature feature1(QMapLibre::Feature::PointType, point, {}, {}); QVariantMap carPosSource; carPosSource["type"] = "geojson"; - carPosSource["data"] = QVariant::fromValue(feature1); + carPosSource["data"] = QVariant::fromValue(feature1); m_map->updateSource("carPosSource", carPosSource); // Map bearing isn't updated when interacting, keep location marker up to date @@ -273,10 +270,10 @@ void MapWindow::updateState(const UIState &s) { qWarning() << "Updating navLayer with new route"; auto route = sm["navRoute"].getNavRoute(); auto route_points = capnp_coordinate_list_to_collection(route.getCoordinates()); - QMapbox::Feature feature(QMapbox::Feature::LineStringType, route_points, {}, {}); + QMapLibre::Feature feature(QMapLibre::Feature::LineStringType, route_points, {}, {}); QVariantMap navSource; navSource["type"] = "geojson"; - navSource["data"] = QVariant::fromValue(feature); + navSource["data"] = QVariant::fromValue(feature); m_map->updateSource("navSource", navSource); m_map->setLayoutProperty("navLayer", "visibility", "visible"); @@ -299,24 +296,24 @@ void MapWindow::resizeGL(int w, int h) { } void MapWindow::initializeGL() { - m_map.reset(new QMapboxGL(this, m_settings, size(), 1)); + m_map.reset(new QMapLibre::Map(this, m_settings, size(), 1)); if (last_position) { m_map->setCoordinateZoom(*last_position, MAX_ZOOM); } else { - m_map->setCoordinateZoom(QMapbox::Coordinate(64.31990695292795, -149.79038934046247), MIN_ZOOM); + m_map->setCoordinateZoom(QMapLibre::Coordinate(64.31990695292795, -149.79038934046247), MIN_ZOOM); } m_map->setMargins({0, 350, 0, 50}); m_map->setPitch(MIN_PITCH); m_map->setStyleUrl("mapbox://styles/commaai/clkqztk0f00ou01qyhsa5bzpj"); - QObject::connect(m_map.data(), &QMapboxGL::mapChanged, [=](QMapboxGL::MapChange change) { + QObject::connect(m_map.data(), &QMapLibre::Map::mapChanged, [=](QMapLibre::Map::MapChange change) { // set global animation duration to 0 ms so visibility changes are instant - if (change == QMapboxGL::MapChange::MapChangeDidFinishLoadingStyle) { + if (change == QMapLibre::Map::MapChange::MapChangeDidFinishLoadingStyle) { m_map->setTransitionOptions(0, 0); } - if (change == QMapboxGL::MapChange::MapChangeDidFinishLoadingMap) { + if (change == QMapLibre::Map::MapChange::MapChangeDidFinishLoadingMap) { loaded_once = true; } }); @@ -424,10 +421,10 @@ void MapWindow::updateDestinationMarker() { auto nav_dest = coordinate_from_param("NavDestination"); if (nav_dest.has_value()) { auto point = coordinate_to_collection(*nav_dest); - QMapbox::Feature feature(QMapbox::Feature::PointType, point, {}, {}); + QMapLibre::Feature feature(QMapLibre::Feature::PointType, point, {}, {}); QVariantMap pinSource; pinSource["type"] = "geojson"; - pinSource["data"] = QVariant::fromValue(feature); + pinSource["data"] = QVariant::fromValue(feature); m_map->updateSource("pinSource", pinSource); m_map->setPaintProperty("pinLayer", "visibility", "visible"); } else { diff --git a/selfdrive/ui/qt/maps/map.h b/selfdrive/ui/qt/maps/map.h index 5fe79f8b15..81ba50037a 100644 --- a/selfdrive/ui/qt/maps/map.h +++ b/selfdrive/ui/qt/maps/map.h @@ -6,7 +6,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -27,7 +28,7 @@ class MapWindow : public QOpenGLWidget { Q_OBJECT public: - MapWindow(const QMapboxGLSettings &); + MapWindow(const QMapLibre::Settings &); ~MapWindow(); private: @@ -35,8 +36,8 @@ private: void paintGL() final; void resizeGL(int w, int h) override; - QMapboxGLSettings m_settings; - QScopedPointer m_map; + QMapLibre::Settings m_settings; + QScopedPointer m_map; void initLayers(); @@ -56,8 +57,8 @@ private: int interaction_counter = 0; // Position - std::optional last_valid_nav_dest; - std::optional last_position; + std::optional last_valid_nav_dest; + std::optional last_position; std::optional last_bearing; FirstOrderFilter velocity_filter; bool locationd_valid = false; diff --git a/selfdrive/ui/qt/maps/map_eta.cc b/selfdrive/ui/qt/maps/map_eta.cc index 322861ed15..161844c618 100644 --- a/selfdrive/ui/qt/maps/map_eta.cc +++ b/selfdrive/ui/qt/maps/map_eta.cc @@ -20,7 +20,7 @@ void MapETA::paintEvent(QPaintEvent *event) { QPainter p(this); p.setRenderHint(QPainter::Antialiasing); p.setPen(Qt::NoPen); - p.setBrush(QColor(0, 0, 0, 150)); + p.setBrush(QColor(0, 0, 0, 255)); QSizeF txt_size = eta_doc.size(); p.drawRoundedRect((width() - txt_size.width()) / 2 - UI_BORDER_SIZE, 0, txt_size.width() + UI_BORDER_SIZE * 2, height() + 25, 25, 25); p.translate((width() - txt_size.width()) / 2, (height() - txt_size.height()) / 2); diff --git a/selfdrive/ui/qt/maps/map_helpers.cc b/selfdrive/ui/qt/maps/map_helpers.cc index ed843610a8..3907ff7b05 100644 --- a/selfdrive/ui/qt/maps/map_helpers.cc +++ b/selfdrive/ui/qt/maps/map_helpers.cc @@ -16,23 +16,25 @@ QString get_mapbox_token() { return MAPBOX_TOKEN.isEmpty() ? CommaApi::create_jwt({}, 4 * 7 * 24 * 3600) : MAPBOX_TOKEN; } -QMapboxGLSettings get_mapbox_settings() { - QMapboxGLSettings settings; +QMapLibre::Settings get_mapbox_settings() { + QMapLibre::Settings settings; + settings.setProviderTemplate(QMapLibre::Settings::ProviderTemplate::MapboxProvider); if (!Hardware::PC()) { settings.setCacheDatabasePath(MAPS_CACHE_PATH); + settings.setCacheDatabaseMaximumSize(100 * 1024 * 1024); } settings.setApiBaseUrl(MAPS_HOST); - settings.setAccessToken(get_mapbox_token()); + settings.setApiKey(get_mapbox_token()); return settings; } -QGeoCoordinate to_QGeoCoordinate(const QMapbox::Coordinate &in) { +QGeoCoordinate to_QGeoCoordinate(const QMapLibre::Coordinate &in) { return QGeoCoordinate(in.first, in.second); } -QMapbox::CoordinatesCollections model_to_collection( +QMapLibre::CoordinatesCollections model_to_collection( const cereal::LiveLocationKalman::Measurement::Reader &calibratedOrientationECEF, const cereal::LiveLocationKalman::Measurement::Reader &positionECEF, const cereal::XYZTData::Reader &line){ @@ -41,7 +43,7 @@ QMapbox::CoordinatesCollections model_to_collection( Eigen::Vector3d orient(calibratedOrientationECEF.getValue()[0], calibratedOrientationECEF.getValue()[1], calibratedOrientationECEF.getValue()[2]); Eigen::Matrix3d ecef_from_local = euler2rot(orient); - QMapbox::Coordinates coordinates; + QMapLibre::Coordinates coordinates; auto x = line.getX(); auto y = line.getY(); auto z = line.getZ(); @@ -51,28 +53,28 @@ QMapbox::CoordinatesCollections model_to_collection( coordinates.push_back({point_geodetic.lat, point_geodetic.lon}); } - return {QMapbox::CoordinatesCollection{coordinates}}; + return {QMapLibre::CoordinatesCollection{coordinates}}; } -QMapbox::CoordinatesCollections coordinate_to_collection(const QMapbox::Coordinate &c) { - QMapbox::Coordinates coordinates{c}; - return {QMapbox::CoordinatesCollection{coordinates}}; +QMapLibre::CoordinatesCollections coordinate_to_collection(const QMapLibre::Coordinate &c) { + QMapLibre::Coordinates coordinates{c}; + return {QMapLibre::CoordinatesCollection{coordinates}}; } -QMapbox::CoordinatesCollections capnp_coordinate_list_to_collection(const capnp::List::Reader& coordinate_list) { - QMapbox::Coordinates coordinates; +QMapLibre::CoordinatesCollections capnp_coordinate_list_to_collection(const capnp::List::Reader& coordinate_list) { + QMapLibre::Coordinates coordinates; for (auto const &c : coordinate_list) { coordinates.push_back({c.getLatitude(), c.getLongitude()}); } - return {QMapbox::CoordinatesCollection{coordinates}}; + return {QMapLibre::CoordinatesCollection{coordinates}}; } -QMapbox::CoordinatesCollections coordinate_list_to_collection(const QList &coordinate_list) { - QMapbox::Coordinates coordinates; +QMapLibre::CoordinatesCollections coordinate_list_to_collection(const QList &coordinate_list) { + QMapLibre::Coordinates coordinates; for (auto &c : coordinate_list) { coordinates.push_back({c.latitude(), c.longitude()}); } - return {QMapbox::CoordinatesCollection{coordinates}}; + return {QMapLibre::CoordinatesCollection{coordinates}}; } QList polyline_to_coordinate_list(const QString &polylineString) { @@ -117,7 +119,7 @@ QList polyline_to_coordinate_list(const QString &polylineString) return path; } -std::optional coordinate_from_param(const std::string ¶m) { +std::optional coordinate_from_param(const std::string ¶m) { QString json_str = QString::fromStdString(Params().get(param)); if (json_str.isEmpty()) return {}; @@ -126,7 +128,7 @@ std::optional coordinate_from_param(const std::string ¶ QJsonObject json = doc.object(); if (json["latitude"].isDouble() && json["longitude"].isDouble()) { - QMapbox::Coordinate coord(json["latitude"].toDouble(), json["longitude"].toDouble()); + QMapLibre::Coordinate coord(json["latitude"].toDouble(), json["longitude"].toDouble()); return coord; } else { return {}; diff --git a/selfdrive/ui/qt/maps/map_helpers.h b/selfdrive/ui/qt/maps/map_helpers.h index b72c301f4f..b9cb1f9469 100644 --- a/selfdrive/ui/qt/maps/map_helpers.h +++ b/selfdrive/ui/qt/maps/map_helpers.h @@ -3,8 +3,9 @@ #include #include #include +#include +#include #include -#include #include #include "common/util.h" @@ -18,15 +19,15 @@ const QString MAPS_HOST = util::getenv("MAPS_HOST", MAPBOX_TOKEN.isEmpty() ? "ht const QString MAPS_CACHE_PATH = "/data/mbgl-cache-navd.db"; QString get_mapbox_token(); -QMapboxGLSettings get_mapbox_settings(); -QGeoCoordinate to_QGeoCoordinate(const QMapbox::Coordinate &in); -QMapbox::CoordinatesCollections model_to_collection( +QMapLibre::Settings get_mapbox_settings(); +QGeoCoordinate to_QGeoCoordinate(const QMapLibre::Coordinate &in); +QMapLibre::CoordinatesCollections model_to_collection( const cereal::LiveLocationKalman::Measurement::Reader &calibratedOrientationECEF, const cereal::LiveLocationKalman::Measurement::Reader &positionECEF, const cereal::XYZTData::Reader &line); -QMapbox::CoordinatesCollections coordinate_to_collection(const QMapbox::Coordinate &c); -QMapbox::CoordinatesCollections capnp_coordinate_list_to_collection(const capnp::List::Reader &coordinate_list); -QMapbox::CoordinatesCollections coordinate_list_to_collection(const QList &coordinate_list); +QMapLibre::CoordinatesCollections coordinate_to_collection(const QMapLibre::Coordinate &c); +QMapLibre::CoordinatesCollections capnp_coordinate_list_to_collection(const capnp::List::Reader &coordinate_list); +QMapLibre::CoordinatesCollections coordinate_list_to_collection(const QList &coordinate_list); QList polyline_to_coordinate_list(const QString &polylineString); -std::optional coordinate_from_param(const std::string ¶m); +std::optional coordinate_from_param(const std::string ¶m); std::pair map_format_distance(float d, bool is_metric); diff --git a/selfdrive/ui/qt/maps/map_panel.cc b/selfdrive/ui/qt/maps/map_panel.cc index 0a2286ff6f..c4cc20e21d 100644 --- a/selfdrive/ui/qt/maps/map_panel.cc +++ b/selfdrive/ui/qt/maps/map_panel.cc @@ -8,7 +8,7 @@ #include "selfdrive/ui/qt/util.h" #include "selfdrive/ui/ui.h" -MapPanel::MapPanel(const QMapboxGLSettings &mapboxSettings, QWidget *parent) : QFrame(parent) { +MapPanel::MapPanel(const QMapLibre::Settings &mapboxSettings, QWidget *parent) : QFrame(parent) { content_stack = new QStackedLayout(this); content_stack->setContentsMargins(0, 0, 0, 0); diff --git a/selfdrive/ui/qt/maps/map_panel.h b/selfdrive/ui/qt/maps/map_panel.h index 43a2cc7c89..190bb63446 100644 --- a/selfdrive/ui/qt/maps/map_panel.h +++ b/selfdrive/ui/qt/maps/map_panel.h @@ -1,14 +1,14 @@ #pragma once #include -#include +#include #include class MapPanel : public QFrame { Q_OBJECT public: - explicit MapPanel(const QMapboxGLSettings &settings, QWidget *parent = nullptr); + explicit MapPanel(const QMapLibre::Settings &settings, QWidget *parent = nullptr); signals: void mapPanelRequested(); diff --git a/selfdrive/ui/qt/network/networking.cc b/selfdrive/ui/qt/network/networking.cc index 57c9973add..1924cbf0fe 100644 --- a/selfdrive/ui/qt/network/networking.cc +++ b/selfdrive/ui/qt/network/networking.cc @@ -48,6 +48,7 @@ Networking::Networking(QWidget* parent, bool show_advanced) : QFrame(parent) { an = new AdvancedNetworking(this, wifi); connect(an, &AdvancedNetworking::backPress, [=]() { main_layout->setCurrentWidget(wifiScreen); }); + connect(an, &AdvancedNetworking::requestWifiScreen, [=]() { main_layout->setCurrentWidget(wifiScreen); }); main_layout->addWidget(an); QPalette pal = palette(); @@ -105,6 +106,7 @@ void Networking::showEvent(QShowEvent *event) { } void Networking::hideEvent(QHideEvent *event) { + main_layout->setCurrentWidget(wifiScreen); wifi->stop(); } @@ -130,6 +132,18 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid list->addItem(tetheringToggle); QObject::connect(tetheringToggle, &ToggleControl::toggleFlipped, this, &AdvancedNetworking::toggleTethering); + hotspotOnBootToggle = new ToggleControl( + tr("Retain hotspot/tethering state"), + tr("Enabling this toggle will retain the hotspot/tethering toggle state across reboots."), + "", + params.getBool("HotspotOnBoot") + ); + hotspotOnBootToggle->setEnabled(wifi->isTetheringEnabled() || set_hotspot_on_boot); + QObject::connect(hotspotOnBootToggle, &ToggleControl::toggleFlipped, [=](bool state) { + params.putBool("HotspotOnBoot", state); + }); + list->addItem(hotspotOnBootToggle); + // Change tethering password ButtonControl *editPasswordButton = new ButtonControl(tr("Tethering Password"), tr("EDIT")); connect(editPasswordButton, &ButtonControl::clicked, [=]() { @@ -181,6 +195,25 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid }); list->addItem(meteredToggle); + // Hidden Network + hiddenNetworkButton = new ButtonControl(tr("Hidden Network"), tr("CONNECT")); + connect(hiddenNetworkButton, &ButtonControl::clicked, [=]() { + QString ssid = InputDialog::getText(tr("Enter SSID"), this, "", false, 1); + if (!ssid.isEmpty()) { + QString pass = InputDialog::getText(tr("Enter password"), this, tr("for \"%1\"").arg(ssid), true, -1); + Network hidden_network; + hidden_network.ssid = ssid.toUtf8(); + if (!pass.isEmpty()) { + hidden_network.security_type = SecurityType::WPA; + wifi->connect(hidden_network, pass); + } else { + wifi->connect(hidden_network); + } + emit requestWifiScreen(); + } + }); + list->addItem(hiddenNetworkButton); + // Set initial config wifi->updateGsmSettings(roamingEnabled, QString::fromStdString(params.get("GsmApn")), metered); @@ -205,6 +238,11 @@ void AdvancedNetworking::toggleTethering(bool enabled) { params.putBool("HotspotOnBootConfirmed", enabled); wifi->setTetheringEnabled(enabled); tetheringToggle->setEnabled(false); + + hotspotOnBootToggle->setEnabled(enabled); + if (!enabled) { + params.remove("HotspotOnBoot"); + } } // WifiUI functions diff --git a/selfdrive/ui/qt/network/networking.h b/selfdrive/ui/qt/network/networking.h index 4ff7380f42..7444e9c28d 100644 --- a/selfdrive/ui/qt/network/networking.h +++ b/selfdrive/ui/qt/network/networking.h @@ -62,12 +62,16 @@ private: ToggleControl* tetheringToggle; ToggleControl* roamingToggle; ButtonControl* editApnButton; + ButtonControl* hiddenNetworkButton; ToggleControl* meteredToggle; WifiManager* wifi = nullptr; Params params; + ToggleControl* hotspotOnBootToggle; + signals: void backPress(); + void requestWifiScreen(); public slots: void toggleTethering(bool enabled); diff --git a/selfdrive/ui/qt/network/wifi_manager.cc b/selfdrive/ui/qt/network/wifi_manager.cc index 03c6896f7a..ebb5cb8736 100644 --- a/selfdrive/ui/qt/network/wifi_manager.cc +++ b/selfdrive/ui/qt/network/wifi_manager.cc @@ -59,6 +59,8 @@ WifiManager::WifiManager(QObject *parent) : QObject(parent) { } timer.callOnTimeout(this, &WifiManager::requestScan); + + initConnections(); } void WifiManager::setup() { @@ -72,7 +74,6 @@ void WifiManager::setup() { raw_adapter_state = call(adapter, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_DEVICE, "State"); activeAp = call(adapter, NM_DBUS_INTERFACE_PROPERTIES, "Get", NM_DBUS_INTERFACE_DEVICE_WIRELESS, "ActiveAccessPoint").path(); - initConnections(); requestScan(); } diff --git a/selfdrive/ui/qt/offroad/driverview.cc b/selfdrive/ui/qt/offroad/driverview.cc index 693a0253b4..df9bb24651 100644 --- a/selfdrive/ui/qt/offroad/driverview.cc +++ b/selfdrive/ui/qt/offroad/driverview.cc @@ -3,62 +3,39 @@ #include #include -#include "selfdrive/ui/qt/qt_window.h" #include "selfdrive/ui/qt/util.h" const int FACE_IMG_SIZE = 130; -DriverViewWindow::DriverViewWindow(QWidget* parent) : QWidget(parent) { - setAttribute(Qt::WA_OpaquePaintEvent); - layout = new QStackedLayout(this); - layout->setStackingMode(QStackedLayout::StackAll); - - cameraView = new CameraWidget("camerad", VISION_STREAM_DRIVER, true, this); - layout->addWidget(cameraView); - - scene = new DriverViewScene(this); - connect(cameraView, &CameraWidget::vipcThreadFrameReceived, scene, &DriverViewScene::frameUpdated); - layout->addWidget(scene); - layout->setCurrentWidget(scene); - - QObject::connect(device(), &Device::interactiveTimeout, this, &DriverViewWindow::closeView); -} - -void DriverViewWindow::closeView() { - if (isVisible()) { - cameraView->stopVipcThread(); - emit done(); - } -} - -void DriverViewWindow::mouseReleaseEvent(QMouseEvent* e) { - closeView(); -} - -DriverViewScene::DriverViewScene(QWidget* parent) : QWidget(parent) { +DriverViewWindow::DriverViewWindow(QWidget* parent) : CameraWidget("camerad", VISION_STREAM_DRIVER, true, parent) { face_img = loadPixmap("../assets/img_driver_face_static.png", {FACE_IMG_SIZE, FACE_IMG_SIZE}); + QObject::connect(this, &CameraWidget::clicked, this, &DriverViewWindow::done); + QObject::connect(device(), &Device::interactiveTimeout, this, [this]() { + if (isVisible()) { + emit done(); + } + }); } -void DriverViewScene::showEvent(QShowEvent* event) { - frame_updated = false; +void DriverViewWindow::showEvent(QShowEvent* event) { params.putBool("IsDriverViewEnabled", true); device()->resetInteractiveTimeout(60); + CameraWidget::showEvent(event); } -void DriverViewScene::hideEvent(QHideEvent* event) { +void DriverViewWindow::hideEvent(QHideEvent* event) { params.putBool("IsDriverViewEnabled", false); + stopVipcThread(); + CameraWidget::hideEvent(event); } -void DriverViewScene::frameUpdated() { - frame_updated = true; - update(); -} +void DriverViewWindow::paintGL() { + CameraWidget::paintGL(); -void DriverViewScene::paintEvent(QPaintEvent* event) { + std::lock_guard lk(frame_lock); QPainter p(this); - // startup msg - if (!frame_updated) { + if (frames.empty()) { p.setPen(Qt::white); p.setRenderHint(QPainter::TextAntialiasing); p.setFont(InterFont(100, QFont::Bold)); @@ -68,10 +45,8 @@ void DriverViewScene::paintEvent(QPaintEvent* event) { const auto &sm = *(uiState()->sm); cereal::DriverStateV2::Reader driver_state = sm["driverStateV2"].getDriverStateV2(); - cereal::DriverStateV2::DriverData::Reader driver_data; - - is_rhd = driver_state.getWheelOnRightProb() > 0.5; - driver_data = is_rhd ? driver_state.getRightDriverData() : driver_state.getLeftDriverData(); + bool is_rhd = driver_state.getWheelOnRightProb() > 0.5; + auto driver_data = is_rhd ? driver_state.getRightDriverData() : driver_state.getLeftDriverData(); bool face_detected = driver_data.getFaceProb() > 0.7; if (face_detected) { diff --git a/selfdrive/ui/qt/offroad/driverview.h b/selfdrive/ui/qt/offroad/driverview.h index 8bfc7a4b7b..155e4ede32 100644 --- a/selfdrive/ui/qt/offroad/driverview.h +++ b/selfdrive/ui/qt/offroad/driverview.h @@ -1,31 +1,8 @@ #pragma once -#include - #include "selfdrive/ui/qt/widgets/cameraview.h" -class DriverViewScene : public QWidget { - Q_OBJECT - -public: - explicit DriverViewScene(QWidget *parent); - -public slots: - void frameUpdated(); - -protected: - void showEvent(QShowEvent *event) override; - void hideEvent(QHideEvent *event) override; - void paintEvent(QPaintEvent *event) override; - -private: - Params params; - QPixmap face_img; - bool is_rhd = false; - bool frame_updated = false; -}; - -class DriverViewWindow : public QWidget { +class DriverViewWindow : public CameraWidget { Q_OBJECT public: @@ -35,10 +12,10 @@ signals: void done(); protected: - void mouseReleaseEvent(QMouseEvent* e) override; - void closeView(); + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent *event) override; + void paintGL() override; - CameraWidget *cameraView; - DriverViewScene *scene; - QStackedLayout *layout; + Params params; + QPixmap face_img; }; diff --git a/selfdrive/ui/qt/offroad/onboarding.cc b/selfdrive/ui/qt/offroad/onboarding.cc index c7c22f0ea3..d4fcee55ce 100644 --- a/selfdrive/ui/qt/offroad/onboarding.cc +++ b/selfdrive/ui/qt/offroad/onboarding.cc @@ -183,7 +183,7 @@ void DeclinePage::showEvent(QShowEvent *event) { void OnboardingWindow::updateActiveScreen() { if (!accepted_terms) { setCurrentIndex(0); - } else if (!training_done && !params.getBool("Passive")) { + } else if (!training_done) { setCurrentIndex(1); } else { emit onboardingDone(); diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 439385a360..1d25b9e9ab 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -17,7 +17,7 @@ #include "common/watchdog.h" #include "common/util.h" #include "system/hardware/hw.h" -#include "selfdrive/ui/qt/offroad/sunnypilot_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot_main.h" #include "selfdrive/ui/qt/widgets/controls.h" #include "selfdrive/ui/qt/widgets/input.h" #include "selfdrive/ui/qt/widgets/scrollview.h" @@ -26,7 +26,6 @@ #include "selfdrive/ui/ui.h" #include "selfdrive/ui/qt/util.h" #include "selfdrive/ui/qt/qt_window.h" -#include "selfdrive/ui/qt/widgets/input.h" TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { // param, title, desc, icon @@ -35,7 +34,7 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { "OpenpilotEnabledToggle", tr("Enable sunnypilot"), tr("Use the sunnypilot 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."), - "../assets/offroad/icon_openpilot.png", + "../assets/offroad/icon_blank.png", }, { "ExperimentalLongitudinalEnabled", @@ -44,67 +43,81 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { .arg(tr("WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).")) .arg(tr("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.")), - "../assets/offroad/icon_speed_limit.png", + "../assets/offroad/icon_blank.png", }, { "CustomStockLong", tr("Custom Stock Longitudinal Control"), tr("When enabled, sunnypilot will attempt to control stock longitudinal control with ACC button presses.\nThis feature must be used along with SLC, and/or V-TSC, and/or M-TSC."), - "../assets/offroad/icon_speed_limit.png", + "../assets/offroad/icon_blank.png", }, { "ExperimentalMode", tr("Experimental Mode"), "", - "../assets/img_experimental_white.svg", + "../assets/offroad/icon_blank.png", + }, + { + "DynamicExperimentalControl", + tr("Enable Dynamic Experimental Control"), + tr("Enable toggle to allow the model to determine when to use openpilot ACC or openpilot End to End Longitudinal."), + "../assets/offroad/icon_blank.png", }, { "DisengageOnAccelerator", tr("Disengage on Accelerator Pedal"), tr("When enabled, pressing the accelerator pedal will disengage openpilot."), - "../assets/offroad/icon_disengage_on_accelerator.svg", + "../assets/offroad/icon_blank.png", }, { "IsLdwEnabled", tr("Enable Lane Departure Warnings"), tr("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)."), - "../assets/offroad/icon_warning.png", + "../assets/offroad/icon_blank.png", }, { "RecordFront", tr("Record and Upload Driver Camera"), tr("Upload data from the driver facing camera and help improve the driver monitoring algorithm."), - "../assets/offroad/icon_monitoring.png", + "../assets/offroad/icon_blank.png", + }, + { + "DisableOnroadUploads", + tr("Disable Onroad Uploads"), + tr("Disable uploads completely when onroad. Necessary to avoid high data usage when connected to Wi-Fi hotspot. Turn on this feature if you are looking to utilize map-based features, such as Speed Limit Control (SLC) and Map-based Turn Speed Control (MTSC)."), + "../assets/offroad/icon_blank.png", }, { "IsMetric", tr("Use Metric System"), tr("Display speed in km/h instead of mph."), - "../assets/offroad/icon_metric.png", + "../assets/offroad/icon_blank.png", }, #ifdef ENABLE_MAPS { "NavSettingTime24h", tr("Show ETA in 24h Format"), tr("Use 24h format instead of am/pm"), - "../assets/offroad/icon_metric.png", + "../assets/offroad/icon_blank.png", }, { "NavSettingLeftSide", tr("Show Map on Left Side of UI"), tr("Show map on left side when in split screen view."), - "../assets/offroad/icon_road.png", + "../assets/offroad/icon_blank.png", }, #endif }; - std::vector longi_button_texts{tr("Maniac"), tr("Aggro"), tr("Stock"), tr("Relaxed")}; + std::vector longi_button_texts{tr("Maniac"), tr("Aggressive"), tr("Stock"), tr("Relaxed")}; long_personality_setting = new ButtonParamControl("LongitudinalPersonality", tr("Driving Personality"), tr("Stock is recommended. In aggressive/maniac 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."), - "../assets/offroad/icon_speed_limit.png", - longi_button_texts); + "../assets/offroad/icon_blank.png", + longi_button_texts, + 380); + long_personality_setting->showDescription(); for (auto &[param, title, desc, icon] : toggle_defs) { auto toggle = new ParamControl(param, title, desc, icon, this); @@ -121,7 +134,7 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { } // Toggles with confirmation dialogs - toggles["ExperimentalMode"]->setActiveIcon("../assets/img_experimental.svg"); + //toggles["ExperimentalMode"]->setActiveIcon("../assets/img_experimental.svg"); toggles["ExperimentalMode"]->setConfirmation(true, true); toggles["ExperimentalLongitudinalEnabled"]->setConfirmation(true, false); toggles["CustomStockLong"]->setConfirmation(true, false); @@ -129,11 +142,14 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { connect(toggles["ExperimentalLongitudinalEnabled"], &ToggleControl::toggleFlipped, [=]() { updateToggles(); }); + connect(toggles["CustomStockLong"], &ToggleControl::toggleFlipped, [=]() { + updateToggles(); + }); param_watcher = new ParamWatcher(this); QObject::connect(param_watcher, &ParamWatcher::paramChanged, [=](const QString ¶m_name, const QString ¶m_value) { - updateButtons(); + updateToggles(); }); } @@ -143,13 +159,19 @@ void TogglesPanel::expandToggleDescription(const QString ¶m) { void TogglesPanel::showEvent(QShowEvent *event) { updateToggles(); - updateButtons(); } void TogglesPanel::updateToggles() { + param_watcher->addParam("LongitudinalPersonality"); + + if (!isVisible()) return; + + long_personality_setting->setButton("LongitudinalPersonality"); + auto experimental_mode_toggle = toggles["ExperimentalMode"]; auto op_long_toggle = toggles["ExperimentalLongitudinalEnabled"]; auto custom_stock_long_toggle = toggles["CustomStockLong"]; + auto dec_toggle = toggles["DynamicExperimentalControl"]; const QString e2e_description = QString("%1
" "

%2


" "%3
" @@ -183,17 +205,25 @@ void TogglesPanel::updateToggles() { op_long_toggle->setVisible(CP.getExperimentalLongitudinalAvailable() && !is_release); if (!CP.getCustomStockLongAvailable()) { - params.remove("CustomStockLongControl"); + params.remove("CustomStockLong"); } - custom_stock_long_toggle->setEnabled(CP.getCustomStockLongAvailable()); + custom_stock_long_toggle->setVisible(CP.getCustomStockLongAvailable()); if (hasLongitudinalControl(CP)) { // normal description and toggle experimental_mode_toggle->setEnabled(true); experimental_mode_toggle->setDescription(e2e_description); long_personality_setting->setEnabled(true); + op_long_toggle->setEnabled(true); custom_stock_long_toggle->setEnabled(false); params.remove("CustomStockLong"); + dec_toggle->setEnabled(true); + } else if (custom_stock_long_toggle->isToggled()) { + op_long_toggle->setEnabled(false); + experimental_mode_toggle->setEnabled(false); + long_personality_setting->setEnabled(false); + params.remove("ExperimentalLongitudinalEnabled"); + params.remove("ExperimentalMode"); } else { // no long for now experimental_mode_toggle->setEnabled(false); @@ -213,26 +243,24 @@ void TogglesPanel::updateToggles() { } experimental_mode_toggle->setDescription("" + long_desc + "

" + e2e_description); + op_long_toggle->setEnabled(CP.getExperimentalLongitudinalAvailable() && !is_release); custom_stock_long_toggle->setEnabled(CP.getCustomStockLongAvailable()); + dec_toggle->setEnabled(false); + params.remove("DynamicExperimentalControl"); } experimental_mode_toggle->refresh(); + op_long_toggle->refresh(); custom_stock_long_toggle->refresh(); + dec_toggle->refresh(); } else { experimental_mode_toggle->setDescription(e2e_description); op_long_toggle->setVisible(false); - custom_stock_long_toggle->setEnabled(false); + custom_stock_long_toggle->setVisible(false); + dec_toggle->setVisible(false); } } -void TogglesPanel::updateButtons() { - param_watcher->addParam("LongitudinalPersonality"); - - if (!isVisible()) return; - - long_personality_setting->setButton("LongitudinalPersonality"); -} - DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) { setSpacing(50); addItem(new LabelControl(tr("Dongle ID"), getDongleId().value_or(tr("N/A")))); @@ -311,15 +339,13 @@ DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) { }); addItem(resetParamsBtn); - if (!params.getBool("Passive")) { - auto retrainingBtn = new ButtonControl(tr("Review Training Guide"), tr("REVIEW"), tr("Review the rules, features, and limitations of sunnypilot")); - connect(retrainingBtn, &ButtonControl::clicked, [=]() { - if (ConfirmationDialog::confirm(tr("Are you sure you want to review the training guide?"), tr("Review"), this)) { - emit reviewTrainingGuide(); - } - }); - addItem(retrainingBtn); - } + auto retrainingBtn = new ButtonControl(tr("Review Training Guide"), tr("REVIEW"), tr("Review the rules, features, and limitations of sunnypilot")); + connect(retrainingBtn, &ButtonControl::clicked, [=]() { + if (ConfirmationDialog::confirm(tr("Are you sure you want to review the training guide?"), tr("Review"), this)) { + emit reviewTrainingGuide(); + } + }); + addItem(retrainingBtn); if (Hardware::TICI()) { auto regulatoryBtn = new ButtonControl(tr("Regulatory"), tr("VIEW"), ""); @@ -403,7 +429,7 @@ void DevicePanel::refreshPin() { void DevicePanel::updateCalibDescription() { QString desc = tr("sunnypilot requires the device to be mounted within 4° left or right and " - "within 5° up or 8° down. sunnypilot is continuously calibrating, resetting is rarely required."); + "within 5° up or 9° down. sunnypilot is continuously calibrating, resetting is rarely required."); std::string calib_bytes = params.get("CalibrationParams"); if (!calib_bytes.empty()) { try { @@ -467,7 +493,6 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { // setup two main layouts sidebar_widget = new QWidget; QVBoxLayout *sidebar_layout = new QVBoxLayout(sidebar_widget); - sidebar_layout->setMargin(0); panel_widget = new QStackedWidget(); // setup layout for close button @@ -480,7 +505,6 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { QPushButton { font-size: 140px; padding-bottom: 20px; - border 1px grey solid; border-radius: 76px; background-color: #292929; font-weight: 400; @@ -507,34 +531,42 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { TogglesPanel *toggles = new TogglesPanel(this); QObject::connect(this, &SettingsWindow::expandToggleDescription, toggles, &TogglesPanel::expandToggleDescription); - QList> panels = { - {tr(" Device"), device}, - {tr(" Network"), new Networking(this)}, - {tr(" Toggles"), toggles}, - {tr(" Software"), new SoftwarePanel(this)}, + QList panels = { + PanelInfo(" " + tr("Device"), device, "../assets/navigation/icon_home.svg"), + PanelInfo(" " + tr("Network"), new Networking(this), "../assets/offroad/icon_network.png"), + PanelInfo(" " + tr("Toggles"), toggles, "../assets/offroad/icon_toggle.png"), + PanelInfo(" " + tr("Software"), new SoftwarePanelSP(this), "../assets/offroad/icon_software.png"), + PanelInfo(" " + tr("sunnypilot"), new SunnypilotPanel(this), "../assets/offroad/icon_openpilot.png"), + PanelInfo(" " + tr("OSM"), new OsmPanel(this), "../assets/offroad/icon_map.png"), + PanelInfo(" " + tr("Monitoring"), new MonitoringPanel(this), "../assets/offroad/icon_monitoring.png"), + PanelInfo(" " + tr("Visuals"), new VisualsPanel(this), "../assets/offroad/icon_visuals.png"), + PanelInfo(" " + tr("Display"), new DisplayPanel(this), "../assets/offroad/icon_display.png"), + PanelInfo(" " + tr("Trips"), new TripsPanel(this), "../assets/offroad/icon_trips.png"), + PanelInfo(" " + tr("Vehicle"), new VehiclePanel(this), "../assets/offroad/icon_vehicle.png"), }; - panels.push_back({tr(" SP - General"), new SPGeneralPanel(this)}); - panels.push_back({tr(" SP - Controls"), new SPControlsPanel(this)}); - panels.push_back({tr(" SP - Vehicles"), new SPVehiclesPanel(this)}); - panels.push_back({tr(" SP - Visuals"), new SPVisualsPanel(this)}); - nav_btns = new QButtonGroup(this); - for (auto &[name, panel] : panels) { + for (auto &[name, panel, icon] : panels) { QPushButton *btn = new QPushButton(name); btn->setCheckable(true); btn->setChecked(nav_btns->buttons().size() == 0); - btn->setIcon(QIcon(QPixmap("../assets/offroad/icon_blank.png"))); - btn->setIconSize(QSize(45, 45)); + btn->setIcon(QIcon(QPixmap(icon))); + btn->setIconSize(QSize(70, 70)); btn->setStyleSheet(R"( QPushButton { - color: grey; + border-radius: 20px; + width: 400px; + height: 98px; + color: #bdbdbd; border: none; background: none; font-size: 50px; font-weight: 500; + text-align: left; + padding-left: 22px; } QPushButton:checked { + background-color: #696868; color: white; } QPushButton:pressed { @@ -544,9 +576,8 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { btn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); nav_btns->addButton(btn); buttons_layout->addWidget(btn, 0, Qt::AlignLeft | Qt::AlignBottom); - buttons_layout->addSpacing(25); - const int lr_margin = name != tr("Network") ? 50 : 0; // Network panel handles its own margins + const int lr_margin = (name != (" " + tr("Network")) || (name != (" " + tr("sunnypilot")))) ? 50 : 0; // Network and sunnypilot panel handles its own margins panel->setContentsMargins(lr_margin, 25, lr_margin, 25); ScrollView *panel_frame = new ScrollView(panel, this); @@ -557,7 +588,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { panel_widget->setCurrentWidget(w); }); } - sidebar_layout->setContentsMargins(50, 50, 50, 50); + sidebar_layout->setContentsMargins(50, 50, 25, 50); // main settings layout, sidebar + main panel QHBoxLayout *main_layout = new QHBoxLayout(this); @@ -582,7 +613,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { background-color: black; } QStackedWidget, ScrollView { - background-color: #292929; + background-color: black; border-radius: 30px; } )"); diff --git a/selfdrive/ui/qt/offroad/settings.h b/selfdrive/ui/qt/offroad/settings.h index bce7f19295..3ef846eb83 100644 --- a/selfdrive/ui/qt/offroad/settings.h +++ b/selfdrive/ui/qt/offroad/settings.h @@ -37,6 +37,14 @@ private: QWidget *sidebar_widget; QButtonGroup *nav_btns; QStackedWidget *panel_widget; + + struct PanelInfo { + QString name; + QWidget *widget; + QString icon; + + PanelInfo(const QString &name, QWidget *widget, const QString &icon) : name(name), widget(widget), icon(icon) {} + }; }; class DevicePanel : public ListWidget { @@ -79,7 +87,6 @@ private: ButtonParamControl *long_personality_setting; ParamWatcher *param_watcher; - void updateButtons(); }; class SoftwarePanel : public ListWidget { @@ -87,132 +94,20 @@ class SoftwarePanel : public ListWidget { public: explicit SoftwarePanel(QWidget* parent = nullptr); -private: +protected: void showEvent(QShowEvent *event) override; - void updateLabels(); + virtual void updateLabels(); void checkForUpdates(); bool is_onroad = false; QLabel *onroadLbl; - QLabel *osmUpdateLbl; LabelControl *currentModelLbl; LabelControl *versionLbl; ButtonControl *installBtn; ButtonControl *downloadBtn; ButtonControl *targetBranchBtn; - ButtonControl *osmDownloadBtn; - ButtonControl *osmUpdateBtn; Params params; ParamWatcher *fs_watch; - - inline std::vector> getOsmLocations() { - // location_title, location_name, waypoint, url - std::vector> locations{ - { - "== None ==", - "", - "", - "", - }, - { - "Australia", - "australia", - "514911884", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EathcAhPP8dHiTdBiFPIGYoB7zwlUR79OkSTH5dnS-9Shg?e=9cS6er&download=1", - }, - { - "Brazil", - "brazil", - "124199196", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EXWcrd8ukahDtoFDXVOxvkYBjGGa9b29fVvRdJlADv3YdA?e=jwabo2&download=1", - }, - { - "Canada", - "canada", - "68588664", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ETpwTMZftJpCkep2goPmzUQBl5SW_YfHBKLTd7w5CUagkA?e=dshC10&download=1", - }, - { - "GCC States", - "gcc-states", - "69021390", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EWtFOVR9mj5CoRpATYR0_tUBWNEcy5jeasp8zO0ZYdduRg?e=Cg0l2Z&download=1", - }, - { - "Germany", - "germany", - "461526153", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EbNzQuA8jHBCuGch1WY4cuoBJfK1S6m5odj5qMnOu3HA3Q?e=cNDn30&download=1", - }, - { - "Malaysia, Singapore, Brunei", - "malaysia-singapore-brunei", - "1112741782", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EQb9bq_YkE1NuFx0jp-52zoBnAbdo4nyLXMnEY1pUbCB8g?e=CoFiUJ&download=1", - }, - { - "New Zealand", - "new-zealand", - "154430132", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EVI6eMuNa4dJpXg-r92Vw1EBq5RxR83_7Z5C56AYftg8xQ?e=xouRBl&download=1", - }, - { - "South Africa", - "south-africa", - "2729449", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EQzbZeus-yBNsgP1KQyLn9wBYZVMMknVoHdB7_ewulLbdA?e=DrnKkb&download=1", - }, - { - "Taiwan", - "taiwan", - "198637969", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EXgP3Z5_lsBPiQe-aXOOSY4Bu-r54Z_3kKKmT8-IqLO42A?e=tOhUYw&download=1", - }, - { - "Turkey", - "turkey", - "698359658", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EWJRrYpV7I1IvOW0LUWrDsUBjEjuKRTla0hA4yRbsVX2xw?e=RGcu8n&download=1", - }, - { - "US - Florida", - "florida", - "147221754", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ET9rAvCaretAnO4TjocAddkBFxAziblxblAn9YWzGk5hTw?e=tts5Oz&download=1", - }, - { - "US - Midwest", - "us-midwest", - "1059596607", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EaDYnugxokRHhOukMndJuZMBKz-kzPfM6C_-iQcki-r94Q?e=oUX6hz&download=1", - }, - { - "US - Northeast", - "us-northeast", - "575213527", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ERrlIKNuT4ZIuUOfr4a3BwABLfd7X1wSq9nUrk9buKrIgA?e=HHIT8R&download=1", - }, - { - "US - Pacific", - "us-pacific", - "112909709", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/EQOzoMksk9tAluahQ2qm3rQBHOZD03qFU8Aw4o-TFUTuJA?e=CcBOxL&download=1", - }, - { - "US - South", - "us-south", - "243729876", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ETizacxh8lFNk8NMVRyKCEsBMMYZl1iq0r-D4IWoOAd_DQ?e=EVIElm&download=1", - }, - { - "US - West", - "us-west", - "30023440", - "https://thecorgirosie-my.sharepoint.com/:u:/g/personal/databases_sunnypilot_com/ETTRiSKwlEVKoRHtylruy7wBKgITKXdaCUAkJMuGAN2_mA?e=7jlglL&download=1", - }, - }; - return locations; - } }; diff --git a/selfdrive/ui/qt/offroad/software_settings.cc b/selfdrive/ui/qt/offroad/software_settings.cc index fb07ebd90e..633b085c9c 100644 --- a/selfdrive/ui/qt/offroad/software_settings.cc +++ b/selfdrive/ui/qt/offroad/software_settings.cc @@ -22,7 +22,7 @@ void SoftwarePanel::checkForUpdates() { } SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) { - currentModelLbl = new LabelControl(tr("Current Driving Model"), CURRENT_MODEL); + currentModelLbl = new LabelControl(tr("Driving Model"), CURRENT_MODEL); addItem(currentModelLbl); onroadLbl = new QLabel(tr("Updates are only downloaded while the car is off.")); @@ -76,54 +76,6 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) { }); addItem(targetBranchBtn); - osmUpdateLbl = new QLabel(tr("Database updates can be downloaded while the car is off.")); - osmUpdateLbl->setStyleSheet("font-size: 50px; font-weight: 400; text-align: left; padding-top: 30px; padding-bottom: 30px;"); - addItem(osmUpdateLbl); - - osmUpdateBtn = new ButtonControl(tr("OpenStreetMap Database Update"), tr("CHECK")); - connect(osmUpdateBtn, &ButtonControl::clicked, [=]() { - if (ConfirmationDialog::confirm(tr("Are you sure you want to reboot and perform a database update?\nEstimated time: 30-90 minutes"), tr("Reboot"), parent)) { - params.putBool("OsmDbUpdatesCheck", true); - Hardware::reboot(); - } - }); - addItem(osmUpdateBtn); - - osmDownloadBtn = new ButtonControl(tr("OpenStreetMap Database"), tr("SELECT")); - connect(osmDownloadBtn, &ButtonControl::clicked, [=]() { - std::vector> locations = getOsmLocations(); - QString initTitle = QString::fromStdString(params.get("OsmLocationTitle")); - QString currentTitle = ((initTitle == "== None ==") || (initTitle.length() == 0)) ? "== None ==" : initTitle; - - QStringList locationTitles; - for (auto& loc : locations) { - locationTitles.push_back(std::get<0>(loc)); - } - - QString selection = MultiOptionDialog::getSelection(tr("Select your location"), locationTitles, currentTitle, this); - if (!selection.isEmpty()) { - params.put("OsmLocal", "1"); - params.put("OsmLocationTitle", selection.toStdString()); - for (auto& loc : locations) { - if (std::get<0>(loc) == selection) { - params.put("OsmLocationName", std::get<1>(loc).toStdString()); - params.put("OsmWayTest", std::get<2>(loc).toStdString()); - params.put("OsmLocationUrl", std::get<3>(loc).toStdString()); - break; - } - } - osmDownloadBtn->setValue(selection); - if (selection != "== None ==") { - if (ConfirmationDialog::confirm(tr("Are you sure you want to reboot to start downloading the selected database? Estimated time: 30-90 minutes"), tr("Reboot"), parent)) { - params.putBool("OsmDbUpdatesCheck", true); - Hardware::reboot(); - } - } - } - updateLabels(); - }); - addItem(osmDownloadBtn); - // uninstall button auto uninstallBtn = new ButtonControl(tr("Uninstall %1").arg(getBrand()), tr("UNINSTALL")); connect(uninstallBtn, &ButtonControl::clicked, [&]() { @@ -168,16 +120,6 @@ void SoftwarePanel::updateLabels() { onroadLbl->setVisible(is_onroad); downloadBtn->setVisible(!is_onroad); - QString name = QString::fromStdString(params.get("OsmLocationName")); - if (!name.isEmpty()) { - osmUpdateBtn->setVisible(!is_onroad); - } else { - params.remove("OsmLocal"); - osmUpdateBtn->setVisible(false); - } - osmUpdateLbl->setVisible(is_onroad); - osmDownloadBtn->setEnabled(!is_onroad); - // download update QString updater_state = QString::fromStdString(params.get("UpdaterState")); bool failed = std::atoi(params.get("UpdateFailedCount").c_str()) > 0; @@ -203,7 +145,6 @@ void SoftwarePanel::updateLabels() { downloadBtn->setEnabled(true); } targetBranchBtn->setValue(QString::fromStdString(params.get("UpdaterTargetBranch"))); - osmDownloadBtn->setValue(QString::fromStdString(params.get("OsmLocationTitle"))); // current + new versions versionLbl->setText(QString::fromStdString(params.get("UpdaterCurrentDescription"))); diff --git a/selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.cc new file mode 100644 index 0000000000..405eca50ce --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.cc @@ -0,0 +1,68 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.h" + +CustomOffsetsSettings::CustomOffsetsSettings(QWidget* parent) : QWidget(parent) { + QVBoxLayout* main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); + main_layout->setSpacing(20); + + // Back button + PanelBackButton* back = new PanelBackButton(tr("Back")); + connect(back, &QPushButton::clicked, [=]() { emit backPress(); }); + main_layout->addWidget(back, 0, Qt::AlignLeft); + + ListWidget *list = new ListWidget(this, false); + + // Controls: Camera Offset (cm) + camera_offset = new CameraOffset(); + connect(camera_offset, &SPOptionControl::updateLabels, camera_offset, &CameraOffset::refresh); + camera_offset->showDescription(); + list->addItem(camera_offset); + + // Controls: Path Offset (cm) + path_offset = new PathOffset(); + connect(path_offset, &SPOptionControl::updateLabels, path_offset, &PathOffset::refresh); + path_offset->showDescription(); + list->addItem(path_offset); + + main_layout->addWidget(new ScrollView(list, this)); +} + +// Camera Offset Value +CameraOffset::CameraOffset() : SPOptionControl ( + "CameraOffset", + tr("Camera Offset - Laneful Only"), + tr("Hack to trick vehicle to be left or right biased in its lane. Decreasing the value will make the car keep more left, increasing will make it keep more right. Changes take effect immediately. Default: +4 cm"), + "../assets/offroad/icon_blank.png", + {-20, 20}) { + + refresh(); +} + +void CameraOffset::refresh() { + QString option = QString::fromStdString(params.get("CameraOffset")); + QString unit = tr(" cm"); + if (option.toInt() >= 0) { + option = "+" + option; + } + setLabel(option + unit); +} + +// Path Offset Value +PathOffset::PathOffset() : SPOptionControl ( + "PathOffset", + tr("Path Offset"), + tr("Hack to trick the model path to be left or right biased of the lane. Decreasing the value will shift the model more left, increasing will shift the model more right. Changes take effect immediately."), + "../assets/offroad/icon_blank.png", + {-10, 10}) { + + refresh(); +} + +void PathOffset::refresh() { + QString option = QString::fromStdString(params.get("PathOffset")); + QString unit = tr(" cm"); + if (option.toInt() >= 0) { + option = "+" + option; + } + setLabel(option + unit); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.h new file mode 100644 index 0000000000..63a5a817be --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.h @@ -0,0 +1,45 @@ +#pragma once + +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" + +class CameraOffset : public SPOptionControl { + Q_OBJECT + +public: + CameraOffset(); + + void refresh(); + +private: + Params params; +}; + +class PathOffset : public SPOptionControl { + Q_OBJECT + +public: + PathOffset(); + + void refresh(); + +private: + Params params; +}; + +class CustomOffsetsSettings : public QWidget { + Q_OBJECT + +public: + explicit CustomOffsetsSettings(QWidget* parent = nullptr); + +signals: + void backPress(); + +private: + Params params; + std::map toggles; + + CameraOffset *camera_offset; + PathOffset *path_offset; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/display_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/display_settings.cc new file mode 100644 index 0000000000..3d83fce252 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/display_settings.cc @@ -0,0 +1,185 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/display_settings.h" + +DisplayPanel::DisplayPanel(QWidget *parent) : ListWidget(parent, false) { + // param, title, desc, icon + std::vector> toggle_defs{ + { + "OnroadScreenOffEvent", + tr("Driving Screen Off: Non-Critical Events"), + QString("%1
" + "

%2


" + "

%3


") + .arg(tr("When Driving Screen Off Timer is not set to \"Always On\":")) + .arg(tr("Enabled: Wake the brightness of the screen to display all events.")) + .arg(tr("Disabled: Wake the brightness of the screen to display critical events.")), + "../assets/offroad/icon_blank.png", + }, + { + "ScreenRecorder", + tr("Enable Screen Recorder"), + tr("Enable this will display a button on the onroad screen to toggle on or off real-time screen recording with UI elements."), + "../assets/offroad/icon_blank.png" + } + }; + + // General: Max Time Offroad (Shutdown timer) + auto max_time_offroad = new MaxTimeOffroad(); + connect(max_time_offroad, &SPOptionControl::updateLabels, max_time_offroad, &MaxTimeOffroad::refresh); + addItem(max_time_offroad); + + // General: Onroad Screen Off (Auto Onroad Screen Timer) + onroad_screen_off = new OnroadScreenOff(); + onroad_screen_off->setUpdateOtherToggles(true); + connect(onroad_screen_off, &SPOptionControl::updateLabels, onroad_screen_off, &OnroadScreenOff::refresh); + connect(onroad_screen_off, &SPOptionControl::updateOtherToggles, this, &DisplayPanel::updateToggles); + addItem(onroad_screen_off); + + // General: Onroad Screen Off Brightness + onroad_screen_off_brightness = new OnroadScreenOffBrightness(); + connect(onroad_screen_off_brightness, &SPOptionControl::updateLabels, onroad_screen_off_brightness, &OnroadScreenOffBrightness::refresh); + addItem(onroad_screen_off_brightness); + + // General: Brightness Control (Global) + auto brightness_control = new BrightnessControl(); + connect(brightness_control, &SPOptionControl::updateLabels, brightness_control, &BrightnessControl::refresh); + + for (auto &[param, title, desc, icon] : toggle_defs) { + auto toggle = new ParamControl(param, title, desc, icon, this); + + addItem(toggle); + toggles[param.toStdString()] = toggle; + + if (param == "OnroadScreenOffEvent") { + // General: Brightness Control (Global) + addItem(brightness_control); + } + } +} + +void DisplayPanel::showEvent(QShowEvent *event) { + updateToggles(); +} + +void DisplayPanel::updateToggles() { + if (!isVisible()) { + return; + } + + // toggle names to update when OnroadScreenOff is toggled + onroad_screen_off_brightness->setVisible(QString::fromStdString(params.get("OnroadScreenOff")) != "-2"); + toggles["OnroadScreenOffEvent"]->setVisible(QString::fromStdString(params.get("OnroadScreenOff")) != "-2"); +} + +// Max Time Offroad (Shutdown timer) +MaxTimeOffroad::MaxTimeOffroad() : SPOptionControl ( + "MaxTimeOffroad", + tr("Max Time Offroad"), + tr("Device is automatically turned off after a set time when the engine is turned off (off-road) after driving (on-road)."), + "../assets/offroad/icon_blank.png", + {0, 12}) { + + refresh(); +} + +void MaxTimeOffroad::refresh() { + QString option = QString::fromStdString(params.get("MaxTimeOffroad")); + QString second = tr("s"); + QString minute = tr("m"); + QString hour = tr("hr"); + if (option == "0") { + setLabel(tr("Always On")); + } else if (option == "1") { + setLabel(tr("Immediate")); + } else if (option == "2") { + setLabel("30 " + second); + } else if (option == "3") { + setLabel("1 " + minute); + } else if (option == "4") { + setLabel("3 " + minute); + } else if (option == "5") { + setLabel("5 " + minute); + } else if (option == "6") { + setLabel("10 " + minute); + } else if (option == "7") { + setLabel("30 " + minute); + } else if (option == "8") { + setLabel("1 " + hour); + } else if (option == "9") { + setLabel("3 " + hour); + } else if (option == "10") { + setLabel("5 " + hour); + } else if (option == "11") { + setLabel("10 " + hour); + } else if (option == "12") { + setLabel("30 " + hour); + } +} + +// Onroad Screen Off (Auto Onroad Screen Timer) +OnroadScreenOff::OnroadScreenOff() : SPOptionControl ( + "OnroadScreenOff", + tr("Driving Screen Off Timer"), + tr("Turn off the device screen or reduce brightness to protect the screen after driving starts. It automatically brightens or turns on when a touch or event occurs."), + "../assets/offroad/icon_blank.png", + {-2, 10}) { + + refresh(); +} + +void OnroadScreenOff::refresh() { + QString option = QString::fromStdString(params.get("OnroadScreenOff")); + QString second = tr("s"); + QString minute = tr("min"); + if (option == "-2") { + setLabel(tr("Always On")); + } else if (option == "-1") { + setLabel("15 " + second); + } else if (option == "0") { + setLabel("30 " + second); + } else { + setLabel(option + " " + minute); + } +} + +// Onroad Screen Off Brightness +OnroadScreenOffBrightness::OnroadScreenOffBrightness() : SPOptionControl ( + "OnroadScreenOffBrightness", + tr("Driving Screen Off Brightness (%)"), + tr("When using the Driving Screen Off feature, the brightness is reduced according to the automatic brightness ratio."), + "../assets/offroad/icon_blank.png", + {0, 100}, + 10) { + + refresh(); +} + +void OnroadScreenOffBrightness::refresh() { + QString option = QString::fromStdString(params.get("OnroadScreenOffBrightness")); + if (option == "0") { + setLabel(tr("Dark")); + } else { + setLabel(option); + } +} + +// Brightness Control (Global) +BrightnessControl::BrightnessControl() : SPOptionControl ( + "BrightnessControl", + tr("Brightness"), + tr("Manually adjusts the global brightness of the screen."), + "../assets/offroad/icon_blank.png", + {0, 100}, + 5) { + + refresh(); +} + +void BrightnessControl::refresh() { + QString option = QString::fromStdString(params.get("BrightnessControl")); + QString percentage = " %"; + if (option == "0") { + setLabel(tr("Auto")); + } else { + setLabel(option + percentage); + } +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/display_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/display_settings.h new file mode 100644 index 0000000000..b8083b53fc --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/display_settings.h @@ -0,0 +1,69 @@ +#pragma once + +#include "selfdrive/ui/qt/widgets/controls.h" + +class OnroadScreenOff : public SPOptionControl { + Q_OBJECT + +public: + OnroadScreenOff(); + + void refresh(); + +private: + Params params; +}; + +class OnroadScreenOffBrightness : public SPOptionControl { + Q_OBJECT + +public: + OnroadScreenOffBrightness(); + + void refresh(); + +private: + Params params; +}; + +class MaxTimeOffroad : public SPOptionControl { + Q_OBJECT + +public: + MaxTimeOffroad(); + + void refresh(); + +private: + Params params; +}; + +class BrightnessControl : public SPOptionControl { + Q_OBJECT + +public: + BrightnessControl(); + + void refresh(); + +private: + Params params; +}; + +class DisplayPanel : public ListWidget { + Q_OBJECT + +public: + explicit DisplayPanel(QWidget *parent = nullptr); + void showEvent(QShowEvent *event) override; + +public slots: + void updateToggles(); + +private: + Params params; + std::map toggles; + + OnroadScreenOff *onroad_screen_off; + OnroadScreenOffBrightness *onroad_screen_off_brightness; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/json_fetcher.h b/selfdrive/ui/qt/offroad/sunnypilot/json_fetcher.h new file mode 100644 index 0000000000..f82041e36e --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/json_fetcher.h @@ -0,0 +1,35 @@ +#pragma once +#include +#include +#include +#include + +class JsonFetcher +{ +public: + static QJsonObject getJsonFromURL(const QString &url) + { + const auto qurl = QUrl(url); + QNetworkAccessManager manager; + const QNetworkRequest request(qurl); + QNetworkReply *reply = manager.get(request); + QEventLoop loop; + + // Send GET request + + QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); + loop.exec(); + + if (reply->error() != QNetworkReply::NoError) { + qWarning() << "Failed to fetch data from URL: " << reply->errorString(); + return QJsonObject(); + } + + const QByteArray responseData = reply->readAll(); + const QJsonDocument doc = QJsonDocument::fromJson(responseData); + QJsonObject json = doc.object(); + + reply->deleteLater(); + return json; + } +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.cc new file mode 100644 index 0000000000..e24425a6fc --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.cc @@ -0,0 +1,113 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.h" + +LaneChangeSettings::LaneChangeSettings(QWidget* parent) : QWidget(parent) { + QVBoxLayout* main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); + main_layout->setSpacing(20); + + // Back button + PanelBackButton* back = new PanelBackButton(tr("Back")); + connect(back, &QPushButton::clicked, [=]() { emit backPress(); }); + main_layout->addWidget(back, 0, Qt::AlignLeft); + + ListWidget *list = new ListWidget(this, false); + // param, title, desc, icon + std::vector> toggle_defs{ + { + "BelowSpeedPause", + tr("Pause Lateral Below Speed w/ Blinker"), + tr("Enable this toggle to pause lateral actuation with blinker when traveling below 20 MPH or 32 km/h."), + "../assets/offroad/icon_blank.png", + }, + { + "AutoLaneChangeBsmDelay", + tr("Auto Lane Change: Delay with Blind Spot"), + tr("Toggle to enable a delay timer for seamless lane changes when blind spot monitoring (BSM) detects a obstructing vehicle, ensuring safe maneuvering."), + "../assets/offroad/icon_blank.png", + }, + { + "RoadEdge", + tr("Block Lane Change: Road Edge Detection"), + tr("Enable this toggle to block lane change when road edge is detected on the stalk actuated side."), + "../assets/offroad/icon_blank.png", + } + }; + + // Controls: Auto Lane Change Timer + auto_lane_change_timer = new AutoLaneChangeTimer(); + auto_lane_change_timer->setUpdateOtherToggles(true); + auto_lane_change_timer->showDescription(); + connect(auto_lane_change_timer, &SPOptionControl::updateLabels, auto_lane_change_timer, &AutoLaneChangeTimer::refresh); + connect(auto_lane_change_timer, &AutoLaneChangeTimer::updateOtherToggles, this, &LaneChangeSettings::updateToggles); + list->addItem(auto_lane_change_timer); + + for (auto &[param, title, desc, icon] : toggle_defs) { + auto toggle = new ParamControl(param, title, desc, icon, this); + + list->addItem(toggle); + toggles[param.toStdString()] = toggle; + + // trigger offroadTransition when going onroad/offroad + connect(uiState(), &UIState::offroadTransition, toggle, &ParamControl::setEnabled); + } + + main_layout->addWidget(new ScrollView(list, this)); +} + +void LaneChangeSettings::showEvent(QShowEvent *event) { + updateToggles(); +} + +void LaneChangeSettings::updateToggles() { + if (!isVisible()) { + return; + } + + auto auto_lane_change_bsm_delay_toggle = toggles["AutoLaneChangeBsmDelay"]; + auto auto_lane_change_timer_param = QString::fromStdString(params.get("AutoLaneChangeTimer")); + + auto cp_bytes = params.get("CarParamsPersistent"); + if (!cp_bytes.empty()) { + AlignedBuffer aligned_buf; + capnp::FlatArrayMessageReader cmsg(aligned_buf.align(cp_bytes.data(), cp_bytes.size())); + cereal::CarParams::Reader CP = cmsg.getRoot(); + + if (!CP.getEnableBsm()) { + params.remove("AutoLaneChangeBsmDelay"); + } + auto_lane_change_bsm_delay_toggle->setEnabled(CP.getEnableBsm() && auto_lane_change_timer_param != "0"); + + auto_lane_change_bsm_delay_toggle->refresh(); + } else { + auto_lane_change_bsm_delay_toggle->setEnabled(false); + } +} + +// Auto Lane Change Timer (ALCT) +AutoLaneChangeTimer::AutoLaneChangeTimer() : SPOptionControl ( + "AutoLaneChangeTimer", + tr("Auto Lane Change Timer"), + tr("Set a timer to delay the auto lane change operation when the blinker is used. No nudge on the steering wheel is required to auto lane change if a timer is set.\nPlease use caution when using this feature. Only use the blinker when traffic and road conditions permit."), + "../assets/offroad/icon_blank.png", + {0, 5}) { + + refresh(); +} + +void AutoLaneChangeTimer::refresh() { + QString option = QString::fromStdString(params.get("AutoLaneChangeTimer")); + QString second = tr("s"); + if (option == "0") { + setLabel(tr("Nudge")); + } else if (option == "1") { + setLabel(tr("Nudgeless")); + } else if (option == "2") { + setLabel("0.5 " + second); + } else if (option == "3") { + setLabel("1 " + second); + } else if (option == "4") { + setLabel("1.5 " + second); + } else { + setLabel("2 " + second); + } +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.h new file mode 100644 index 0000000000..86bdd3ede3 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.h @@ -0,0 +1,40 @@ +#pragma once + +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" + +class AutoLaneChangeTimer : public SPOptionControl { + Q_OBJECT + +public: + AutoLaneChangeTimer(); + + void refresh(); + +signals: + void toggleUpdated(); + +private: + Params params; +}; + +class LaneChangeSettings : public QWidget { + Q_OBJECT + +public: + explicit LaneChangeSettings(QWidget* parent = nullptr); + void showEvent(QShowEvent *event) override; + +signals: + void backPress(); + +public slots: + void updateToggles(); + +private: + Params params; + std::map toggles; + + AutoLaneChangeTimer *auto_lane_change_timer; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/locations_fetcher.h b/selfdrive/ui/qt/offroad/sunnypilot/locations_fetcher.h new file mode 100644 index 0000000000..1e5b20139f --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/locations_fetcher.h @@ -0,0 +1,52 @@ +#pragma once + +#include +#include // for std::sort +#include +#include + +#include "selfdrive/ui/qt/offroad/sunnypilot/json_fetcher.h" + +static const std::tuple defaultLocation = std::make_tuple("== None ==", ""); +// New class LocationsFetcher that handles web requests and JSON parsing +class LocationsFetcher { +public: + inline std::vector> + getLocationsFromURL(const QUrl &url, const std::tuple &customLocation = defaultLocation) const { + // Initialize an empty vector to hold the locations + std::vector> locations; + + JsonFetcher fetcher; + QJsonObject json = fetcher.getJsonFromURL(url.toString()); + + for (auto it = json.begin(); it != json.end(); ++it) { + QString code = it.key(); + QJsonObject obj = it.value().toObject(); + QString fullName = obj["full_name"].toString(); + + locations.push_back(std::make_tuple(fullName, code, QString(), QString())); + } + // Sort locations by full name + std::sort(locations.begin(), locations.end(), [](const auto &lhs, const auto &rhs) { + return std::get < 0 > (lhs) < std::get < 0 > (rhs); // Compare full names + }); + // Optionally, you can now add defaultName entry at the beginning + locations.insert(locations.begin(), std::tuple_cat(customLocation, std::make_tuple("", ""))); + return locations; + } + + inline std::vector> + getLocationsFromURL(const QString &url, const std::tuple &customLocation = defaultLocation) const { + return getLocationsFromURL(QUrl(url), customLocation); + } + + inline std::vector> + getOsmLocations(const std::tuple &customLocation = defaultLocation) const { + return getLocationsFromURL("https://raw.githubusercontent.com/pfeiferj/openpilot-mapd/main/nation_bounding_boxes.json", customLocation); + } + + inline std::vector> + getUsStatesLocations(const std::tuple &customLocation = defaultLocation) const { + return getLocationsFromURL("https://raw.githubusercontent.com/pfeiferj/openpilot-mapd/main/us_states_bounding_boxes.json", customLocation); + } +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/mads_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/mads_settings.cc new file mode 100644 index 0000000000..f28479aa3c --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/mads_settings.cc @@ -0,0 +1,76 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/mads_settings.h" + +MadsSettings::MadsSettings(QWidget* parent) : QWidget(parent) { + QVBoxLayout* main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); + main_layout->setSpacing(20); + + // Back button + PanelBackButton* back = new PanelBackButton(); + connect(back, &QPushButton::clicked, [=]() { emit backPress(); }); + main_layout->addWidget(back, 0, Qt::AlignLeft); + + ListWidget *list = new ListWidget(this, false); + // param, title, desc, icon + std::vector> toggle_defs{ + { + "AccMadsCombo", + tr("Enable ACC+MADS with RES+/SET-"), + QString("%1
" + "

%2

") + .arg(tr("Engage both M.A.D.S. and ACC with a single press of RES+ or SET- button.")) + .arg(tr("Note: Once M.A.D.S. is engaged via this mode, it will remain engaged until it is manually disabled via the M.A.D.S. button or car shut off.")), + "../assets/offroad/icon_blank.png", + }, + { + "MadsCruiseMain", + tr("Toggle M.A.D.S. with Cruise Main"), + tr("Allows M.A.D.S. engagement/disengagement with \"Cruise Main\" cruise control button from the steering wheel."), + "../assets/offroad/icon_blank.png", + } + }; + + // Disengage Lateral on Brake (DLOB) + std::vector dlob_settings_texts{tr("Remain Active"), tr("Pause Steering")}; + dlob_settings = new ButtonParamControl( + "DisengageLateralOnBrake", "Steering Mode After Braking", "Choose how Automatic Lane Centering (ALC) behaves after the brake pedal is manually pressed in sunnypilot.\n\nRemain Active: ALC will remain active even after the brake pedal is pressed.\nPause Steering: ALC will be paused after the brake pedal is manually pressed.", + "../assets/offroad/icon_blank.png", + dlob_settings_texts, + 500 + ); + dlob_settings->showDescription(); + list->addItem(dlob_settings); + + for (auto &[param, title, desc, icon] : toggle_defs) { + auto toggle = new ParamControl(param, title, desc, icon, this); + + list->addItem(toggle); + toggles[param.toStdString()] = toggle; + + // trigger offroadTransition when going onroad/offroad + connect(uiState(), &UIState::offroadTransition, toggle, &ParamControl::setEnabled); + } + + // trigger offroadTransition when going onroad/offroad + connect(uiState(), &UIState::offroadTransition, dlob_settings, &ButtonParamControl::setEnabled); + + main_layout->addWidget(new ScrollView(list, this)); +} + +void MadsSettings::showEvent(QShowEvent *event) { + updateToggles(); +} + +void MadsSettings::updateToggles() { + if (!isVisible()) { + return; + } + + const bool is_offroad = !uiState()->scene.started; + const bool enable_mads = params.getBool("EnableMads"); + const bool enabled = is_offroad && enable_mads; + + toggles["AccMadsCombo"]->setEnabled(enabled); + toggles["MadsCruiseMain"]->setEnabled(enabled); + dlob_settings->setEnabled(enabled); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/mads_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/mads_settings.h new file mode 100644 index 0000000000..2a949c97a4 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/mads_settings.h @@ -0,0 +1,25 @@ +#pragma once + +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" + +class MadsSettings : public QWidget { + Q_OBJECT + +public: + explicit MadsSettings(QWidget* parent = nullptr); + void showEvent(QShowEvent *event) override; + +signals: + void backPress(); + +public slots: + void updateToggles(); + +private: + Params params; + std::map toggles; + + ButtonParamControl *dlob_settings; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.cc b/selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.cc new file mode 100644 index 0000000000..4f2aaf724f --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.cc @@ -0,0 +1,132 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.h" + +ModelsFetcher::ModelsFetcher(QObject* parent) : QObject(parent) { + manager = new QNetworkAccessManager(this); +} + +QByteArray ModelsFetcher::verifyFileHash(const QString& filePath, const QString& expectedHash, bool& hashMatches) { + hashMatches = false; // Default to false + QByteArray fileData; + + if (expectedHash.isEmpty()) { + // If no hash is provided, assume verification isn't required but return the file data + hashMatches = true; + } else { + QFile file(filePath); + if (file.open(QIODevice::ReadOnly)) { + QCryptographicHash hash(QCryptographicHash::Sha256); // Or your chosen algorithm + fileData = file.readAll(); // Read the file data once + hash.addData(fileData); + file.close(); + + QString currentHash = QString(hash.result().toHex()); + hashMatches = (currentHash == expectedHash); + } + } + + // Return the file data if hash matches or no hash was provided; empty otherwise + return hashMatches ? fileData : QByteArray(); +} + + +void ModelsFetcher::download(const DownloadInfo& downloadInfo, const QString& filename, const QString& destinationPath) { + QString fullPath = destinationPath + "/" + filename; + QFileInfo fileInfo(fullPath); + bool hashMatches = false; + QByteArray data = verifyFileHash(fullPath, downloadInfo.sha256, hashMatches); + + if (fileInfo.exists() && hashMatches) { + // Hash matches or no hash provided, and we have the file data + LOGD("File already downloaded and verified: %s", filename.toStdString().c_str()); + emit downloadProgress(100); + emit downloadComplete(data, true); // Use the data returned from verifyFileHash + return; // Exit early + } + + // Proceed with download if file does not exist or hash verification failed + QNetworkRequest request(downloadInfo.url); + QNetworkReply* reply = manager->get(request); + connect(reply, &QNetworkReply::downloadProgress, this, &ModelsFetcher::onDownloadProgress); + connect(reply, &QNetworkReply::finished, this, [this, reply, destinationPath, filename, downloadInfo]() { + onFinished(reply, destinationPath, filename, downloadInfo.sha256); + }); +} + +QString extractFileName(const QString& contentDisposition) { + const QString filenameTag = "filename="; + const int idx = contentDisposition.indexOf(filenameTag); + if (idx < 0) { + return QString(); + } + + QString filename = contentDisposition.mid(idx + filenameTag.length()); + if (filename.startsWith("\"") && filename.endsWith("\"")) { + return filename.mid(1, filename.size() - 2); + } + + return filename; +} + +void ModelsFetcher::onFinished(QNetworkReply* reply, const QString& destinationPath, const QString& filename, const QString& expectedHash) { + // Handle download error + if (reply->error()) { + return; // Possibly emit a signal or log an error as per your error handling policy + } + + const QByteArray data = reply->readAll(); + + QString finalFilename = filename; + if (finalFilename.isEmpty()) { + finalFilename = extractFileName(reply->header(QNetworkRequest::ContentDispositionHeader).toString()); + } + + QString finalPath = QDir(destinationPath).filePath(finalFilename); + + // Save the downloaded file + QFile file(finalPath); + if (!file.open(QIODevice::WriteOnly)) { + return; // Consider emitting a signal or logging an error here as well + } + + file.write(data); + file.close(); + + bool hashMatches = false; + verifyFileHash(finalPath, expectedHash, hashMatches); + + // Verify the file hash if expectedHash is provided + if (!expectedHash.isEmpty() && !hashMatches) { + LOGE("The downloaded file didn't pass the hash validation!: %s", filename.toStdString().c_str()); + // Hash verification failed, handle accordingly + // This could involve deleting the file, logging an error, or emitting a failure signal + QFile::remove(finalPath); // Example action: Remove the invalid file + emit downloadFailed(filename); + return; // Stop further processing + } + + + emit downloadComplete(data, false); // Emit your success signal +} + +void ModelsFetcher::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { + const double progress = (bytesReceived * 100.0) / bytesTotal; + emit downloadProgress(progress); +} + +std::vector ModelsFetcher::getModelsFromURL(const QUrl&url) { + std::vector models; + JsonFetcher fetcher; + QJsonObject json = fetcher.getJsonFromURL(url.toString()); + for (auto it = json.begin(); it != json.end(); ++it) { + models.push_back(Model(it.value().toObject())); + } + return models; +} + +std::vector ModelsFetcher::getModelsFromURL(const QString&url) { + return getModelsFromURL(QUrl(url)); +} + +std::vector ModelsFetcher::getModelsFromURL() { + return getModelsFromURL("https://docs.sunnypilot.ai/models_v3.json"); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.h b/selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.h new file mode 100644 index 0000000000..22ab81e541 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.h @@ -0,0 +1,129 @@ +#pragma once + +#include // for std::sort +#include +#include +#include +#include +#include + +#include "common/swaglog.h" +#include "common/util.h" +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/util.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/json_fetcher.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "system/hardware/hw.h" + +static const QString MODELS_PATH = Hardware::PC() ? QDir::homePath() + "/.comma/media/0/models/" : "/data/media/0/models/"; + +struct DownloadInfo { + QString url; + QString sha256; +}; + +// New class ModelsFetcher with a new function that handles web requests and JSON parsing for the new JSON structure +class Model { +public: + explicit Model(const QJsonObject &json) { + displayName = json["display_name"].toString(); + fullName = json["full_name"].toString(); + fileName = json["file_name"].toString(); + + // Parse downloadUri as an object + QJsonObject downloadUriObj = json["download_uri"].toObject(); + downloadUri.url = downloadUriObj["url"].toString(); + downloadUri.sha256 = downloadUriObj["sha256"].toString(); + + fullNameNav = json["full_name_nav"].toString(); + fileNameNav = json["file_name_nav"].toString(); + + // Parse downloadUriNav as an object + QJsonObject downloadUriNavObj = json["download_uri_nav"].toObject(); + downloadUriNav.url = downloadUriNavObj["url"].toString(); + downloadUriNav.sha256 = downloadUriNavObj["sha256"].toString(); + + fullNameMetadata = json["full_name_metadata"].toString(); + fileNameMetadata = json["file_name_metadata"].toString(); + + // Parse downloadUriMetadata as an object + QJsonObject downloadUriMetadataObj = json["download_uri_metadata"].toObject(); + downloadUriMetadata.url = downloadUriMetadataObj["url"].toString(); + downloadUriMetadata.sha256 = downloadUriMetadataObj["sha256"].toString(); + + index = json["index"].toString(); + environment = json["environment"].toString(); + generation = json["generation"].toString(); + } + + // Method to convert model back to QJsonObject, if needed + QJsonObject toJson() const { + QJsonObject json; + json["display_name"] = displayName; + json["full_name"] = fullName; + json["file_name"] = fileName; + + QJsonObject uriObj; + uriObj["url"] = downloadUri.url; + uriObj["sha256"] = downloadUri.sha256; + json["download_uri"] = uriObj; + + QJsonObject uriNavObj; + uriNavObj["url"] = downloadUriNav.url; + uriNavObj["sha256"] = downloadUriNav.sha256; + json["download_uri_nav"] = uriNavObj; + + QJsonObject uriMetadataObj; + uriMetadataObj["url"] = downloadUriMetadata.url; + uriMetadataObj["sha256"] = downloadUriMetadata.sha256; + json["download_uri_metadata"] = uriMetadataObj; + + json["full_name_nav"] = fullNameNav; + json["file_name_nav"] = fileNameNav; + json["full_name_metadata"] = fullNameMetadata; + json["file_name_metadata"] = fileNameMetadata; + json["index"] = index; + json["environment"] = environment; + json["generation"] = generation; + return json; + } + + QString displayName; + QString fullName; + QString fileName; + DownloadInfo downloadUri; + DownloadInfo downloadUriNav; + DownloadInfo downloadUriMetadata; + + QString fullNameNav; + QString fileNameNav; + QString fullNameMetadata; + QString fileNameMetadata; + QString index; + QString environment; + QString generation; +}; + +class ModelsFetcher : public QObject { + Q_OBJECT + +public: + explicit ModelsFetcher(QObject* parent = nullptr); + void download(const DownloadInfo&url, const QString& filename = "", const QString&destinationPath = MODELS_PATH); + static std::vector getModelsFromURL(const QUrl&url); + static std::vector getModelsFromURL(const QString&url); + static std::vector getModelsFromURL(); + +signals: + void downloadProgress(double percentage); + void downloadComplete(const QByteArray&data, bool fromCache = false); + void downloadFailed(const QString &filename); + +private: +// static bool verifyFileHash(const QString& filePath, const QString& expectedHash); + static QByteArray verifyFileHash(const QString& filePath, const QString& expectedHash, bool& hashMatches); + void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); + void onFinished(QNetworkReply* reply, const QString&destinationPath, const QString&filename, const QString& expectedHash); + + QNetworkAccessManager* manager; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.cc new file mode 100644 index 0000000000..e2a410f9ff --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.cc @@ -0,0 +1,30 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.h" + +MonitoringPanel::MonitoringPanel(QWidget *parent) : QFrame(parent) { + main_layout = new QStackedLayout(this); + + ListWidget *list = new ListWidget(this, false); + // param, title, desc, icon + std::vector> toggle_defs{ + { + "HandsOnWheelMonitoring", + tr("Enable Hands on Wheel Monitoring"), + tr("Monitor and alert when driver is not keeping the hands on the steering wheel."), + "../assets/offroad/icon_blank.png", + } + }; + + for (auto &[param, title, desc, icon] : toggle_defs) { + auto toggle = new ParamControl(param, title, desc, icon, this); + + list->addItem(toggle); + toggles[param.toStdString()] = toggle; + } + + monitoringScreen = new QWidget(this); + QVBoxLayout* vlayout = new QVBoxLayout(monitoringScreen); + vlayout->setContentsMargins(50, 20, 50, 20); + + vlayout->addWidget(new ScrollView(list, this), 1); + main_layout->addWidget(monitoringScreen); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.h new file mode 100644 index 0000000000..214d2f8ac0 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.h @@ -0,0 +1,17 @@ +#pragma once + +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" + +class MonitoringPanel : public QFrame { + Q_OBJECT + +public: + explicit MonitoringPanel(QWidget *parent = nullptr); + +private: + QStackedLayout* main_layout = nullptr; + QWidget* monitoringScreen = nullptr; + Params params; + std::map toggles; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/osm_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/osm_settings.cc new file mode 100644 index 0000000000..958d338138 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/osm_settings.cc @@ -0,0 +1,268 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/osm_settings.h" + +OsmPanel::OsmPanel(QWidget *parent) : QFrame(parent) { + main_layout = new QStackedLayout(this); + + const auto list = new ListWidget(this, false); + list->addItem(mapdVersion = new LabelControl(tr("Mapd Version"), "Loading...")); + list->addItem(setupOsmDeleteMapsButton(parent)); + list->addItem(offlineMapsETA = new LabelControl(tr("Offline Maps ETA"), "")); + list->addItem(offlineMapsElapsed = new LabelControl(tr("Time Elapsed"), "")); + list->addItem(setupOsmUpdateButton(parent)); + list->addItem(setupOsmDownloadButton(parent)); + list->addItem(setupUsStatesButton(parent)); + + connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { + updateLabels(); + }); + + timer = new QTimer(this); + connect(timer, &QTimer::timeout, this, QOverload<>::of(&OsmPanel::updateLabels)); + timer->start(FAST_REFRESH_INTERVAL); // Time specified in milliseconds. + updateLabels(); + + osmScreen = new QWidget(this); + auto *vlayout = new QVBoxLayout(osmScreen); + vlayout->setContentsMargins(50, 20, 50, 20); + vlayout->addWidget(new ScrollView(list, this), 1); + main_layout->addWidget(osmScreen); +} + +ButtonControl *OsmPanel::setupOsmDeleteMapsButton(QWidget *parent) { + osmDeleteMapsBtn = new ButtonControl(tr("Downloaded Maps"), tr("Delete Maps")); // Updated on updateLabels() + connect(osmDeleteMapsBtn, &ButtonControl::clicked, [=]() { + if (showConfirmationDialog(parent, "This will delete ALL downloaded maps\n\nAre you sure you want to delete all the maps?", "Yes, delete all the maps.")) { + QtConcurrent::run([=]() { + QDir dir(MAP_PATH); + osmDeleteMapsBtn->setEnabled(false); + osmDeleteMapsBtn->setText("Deleting..."); + dir.removeRecursively(); + updateMapSize(); + osmDeleteMapsBtn->setEnabled(true); + osmDeleteMapsBtn->setText("DELETE"); + }); + updateLabels(); + } + }); + return osmDeleteMapsBtn; +} + +ButtonControl *OsmPanel::setupOsmUpdateButton(QWidget *parent) { + osmUpdateBtn = new ButtonControl(tr("Database Update"), tr("CHECK")); // Updated on updateLabels() + connect(osmUpdateBtn, &ButtonControl::clicked, [=]() { + if (osm_download_in_progress && !download_failed_state) { + updateLabels(); + } else if (showConfirmationDialog(parent)) { + osm_download_in_progress = true; + params.putBool("OsmDbUpdatesCheck", true); + updateLabels(); + } + }); + return osmUpdateBtn; +} + +ButtonControl *OsmPanel::setupOsmDownloadButton(QWidget *parent) { + osmDownloadBtn = new ButtonControl(tr("Country"), tr("SELECT")); + connect(osmDownloadBtn, &ButtonControl::clicked, [=]() { + osmDownloadBtn->setEnabled(false); + osmDownloadBtn->setValue("Fetching Country list..."); + const std::vector> locations = getOsmLocations(); + osmDownloadBtn->setEnabled(true); + osmDownloadBtn->setValue(""); + const QString initTitle = QString::fromStdString(params.get("OsmLocationTitle")); + const QString currentTitle = ((initTitle == "== None ==") || (initTitle.length() == 0)) ? "== None ==" : initTitle; + + QStringList locationTitles; + for (auto &loc: locations) { + locationTitles.push_back(std::get<0>(loc)); + } + + const QString selection = MultiOptionDialog::getSelection(tr("Country"), locationTitles, currentTitle, this); + if (!selection.isEmpty()) { + params.put("OsmLocal", "1"); + params.put("OsmLocationTitle", selection.toStdString()); + for (auto &loc: locations) { + if (std::get<0>(loc) == selection) { + params.put("OsmLocationName", std::get<1>(loc).toStdString()); + break; + } + } + if (params.get("OsmLocationName") == "US") { + usStatesBtn->click(); + return; + } else if (selection != "== None ==") { + if (showConfirmationDialog(parent)) { + osm_download_in_progress = true; + params.putBool("OsmDbUpdatesCheck", true); + updateLabels(); + } + } + } + updateLabels(); + }); + return osmDownloadBtn; +} + +ButtonControl *OsmPanel::setupUsStatesButton(QWidget *parent) { + usStatesBtn = new ButtonControl(tr("State"), tr("SELECT")); + connect(usStatesBtn, &ButtonControl::clicked, [=]() { + const std::tuple allStatesOption = std::make_tuple("All States (~4.8 GB)", "All"); + usStatesBtn->setEnabled(false); + usStatesBtn->setValue("Fetching State list..."); + const std::vector> locations = getUsStatesLocations(allStatesOption); + usStatesBtn->setEnabled(true); + usStatesBtn->setValue(""); + const QString initTitle = QString::fromStdString(params.get("OsmStateTitle")); + const QString currentTitle = ((initTitle == std::get<0>(allStatesOption)) || (initTitle.length() == 0)) ? "All" : initTitle; + + QStringList locationTitles; + for (auto &loc: locations) { + locationTitles.push_back(std::get<0>(loc)); + } + + const QString selection = MultiOptionDialog::getSelection(tr("State"), locationTitles, currentTitle, this); + if (!selection.isEmpty()) { + params.put("OsmStateTitle", selection.toStdString()); + for (auto &loc: locations) { + if (std::get<0>(loc) == selection) { + params.put("OsmStateName", std::get<1>(loc).toStdString()); + break; + } + } + usStatesBtn->setValue(selection); + if (showConfirmationDialog(parent)) { + osm_download_in_progress = true; + params.putBool("OsmDbUpdatesCheck", true); + updateLabels(); + } + } + updateLabels(); + }); + usStatesBtn->setVisible(false); // initially hidden + return usStatesBtn; +} + +void OsmPanel::showEvent(QShowEvent *event) { + updateLabels(); // For snappier feeling + if (!timer->isActive()) { + timer->start(FAST_REFRESH_INTERVAL); + } +} + +void OsmPanel::hideEvent(QHideEvent *event) { + if (timer->isActive()) { + timer->stop(); + } +} + + +void OsmPanel::updateLabels() { + if (!isVisible()) { + return; + } + mapd_version = params.get("MapdVersion"); + mapdVersion->setText(mapd_version.c_str()); + + updateMapSize(); + osm_download_locations = mem_params.get("OSMDownloadLocations"); + osm_download_in_progress = !osm_download_locations.empty(); + + timer->setInterval(osm_download_in_progress ? FAST_REFRESH_INTERVAL : SLOW_REFRESH_INTERVAL); + LOGT("Timer Interval %d", timer->interval()); + + const std::string osmLastDownloadTimeStr = params.get("OsmDownloadedDate"); + if (!lastDownloadedTimePoint.has_value() && !osmLastDownloadTimeStr.empty()) { + const double osmLastDownloadTime = std::stod(osmLastDownloadTimeStr); + lastDownloadedTimePoint = std::chrono::system_clock::from_time_t(static_cast(osmLastDownloadTime)); + } + + osmDownloadBtn->setEnabled(!osm_download_in_progress); + usStatesBtn->setEnabled(!osm_download_in_progress); + + updateDownloadProgress(); + + const QString locationName = QString::fromStdString(params.get("OsmLocationName")); + const bool isUs = !locationName.isEmpty() && locationName == "US"; + usStatesBtn->setVisible(isUs); + + if (!locationName.isEmpty()) { + if (!isUs) { + params.remove("OsmStateName"); + params.remove("OsmStateTitle"); + } + osmUpdateBtn->setVisible(true); + } else { + params.remove("OsmLocal"); + params.remove("OsmLocationName"); + params.remove("OsmLocationTitle"); + params.remove("OsmStateName"); + params.remove("OsmStateTitle"); + osmUpdateBtn->setVisible(false); + usStatesBtn->setVisible(false); + } + + osmDownloadBtn->setValue(QString::fromStdString(params.get("OsmLocationTitle"))); + usStatesBtn->setValue(QString::fromStdString(params.get("OsmStateTitle"))); + update(); +} + +void OsmPanel::updateDownloadProgress() { + const auto pending_update_check = params.getBool("OsmDbUpdatesCheck"); + const QJsonObject osmDownloadProgress = QJsonDocument::fromJson(params.get("OSMDownloadProgress").c_str()).object(); + if (osm_download_in_progress && lastDownloadedTimePoint.has_value()) { + offlineMapsETA->setVisible(true); + offlineMapsElapsed->setVisible(true); + offlineMapsETA->setText(calculateETA(osmDownloadProgress, lastDownloadedTimePoint.value())); + offlineMapsElapsed->setText(calculateElapsedTime(osmDownloadProgress, lastDownloadedTimePoint.value())); + } else { + offlineMapsETA->setVisible(false); + offlineMapsElapsed->setVisible(false); + } + + const int total_files = extractIntFromJson(osmDownloadProgress, "total_files"); + const int downloaded_files = extractIntFromJson(osmDownloadProgress, "downloaded_files"); + download_failed_state = total_files && osm_download_in_progress && !lastDownloadedTimePoint.has_value() && downloaded_files < total_files; + + const auto updateButtonText = processUpdateStatus(pending_update_check, total_files, downloaded_files, osmDownloadProgress, download_failed_state); + + osmUpdateBtn->setValue(tr(updateButtonText.c_str())); + osmUpdateBtn->setText(tr(osm_download_in_progress && !download_failed_state ? "Check status" : "Force Update")); + osmDeleteMapsBtn->setValue(formatSize(mapsDirSize)); +} + +int OsmPanel::extractIntFromJson(const QJsonObject& json, const QString& key) { + return (json.contains(key)) ? json[key].toInt() : 0; +} + +std::string OsmPanel::processUpdateStatus(bool pending_update, int total_files, int downloaded_files, const QJsonObject& json, bool failed_state) { + if (pending_update && !osm_download_in_progress && !total_files) { + lastDownloadedTimePoint.reset(); + return "Download starting..."; + } else if (failed_state) { + return "Error: Invalid download. Retry."; + } else if (osm_download_in_progress && total_files > downloaded_files) { + return formatDownloadStatus(json).toStdString(); + } else if (osm_download_in_progress && downloaded_files >= total_files) { + osm_download_in_progress = false; + lastDownloadedTimePoint.reset(); + return "Download complete!"; + } + + if (lastDownloadedTimePoint.has_value()) { + QDateTime dateTime = QDateTime::fromTime_t(std::chrono::system_clock::to_time_t(lastDownloadedTimePoint.value())); //fromMSecsSinceEpoch(duration); + dateTime = dateTime.toLocalTime(); + return QString("%1").arg(dateTime.toString("yyyy-MM-dd HH:mm:ss")).toStdString(); + } + + return ""; +} + +void OsmPanel::updateMapSize() { + if (mapSizeFuture.has_value() && mapSizeFuture.value().isFinished()) { + mapsDirSize = mapSizeFuture.value().result(); + } + + if (!mapSizeFuture.has_value() || !mapSizeFuture.value().isRunning()) { + mapSizeFuture = QtConcurrent::run(getDirSize, MAP_PATH); + } +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/osm_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/osm_settings.h new file mode 100644 index 0000000000..199b224b17 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/osm_settings.h @@ -0,0 +1,219 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "common/swaglog.h" +#include "selfdrive/ui/qt/network/wifi_manager.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/locations_fetcher.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" +#include "selfdrive/ui/qt/util.h" +#include "selfdrive/ui/ui.h" +#include "system/hardware/hw.h" + +constexpr int FAST_REFRESH_INTERVAL = 1000; // ms +constexpr int SLOW_REFRESH_INTERVAL = 5000; // ms + +static const QString MAP_PATH = Hardware::PC() ? QDir::homePath() + "/.comma/media/0/osm/offline/" : "/data/media/0/osm/offline/"; +class OsmPanel : public QFrame { + Q_OBJECT + +public: + explicit OsmPanel(QWidget *parent = nullptr); + +private: + QStackedLayout* main_layout = nullptr; + QWidget* osmScreen = nullptr; + Params params; + Params mem_params{ Hardware::PC() ? "": "/dev/shm/params"}; + std::map toggles; + std::optional> mapSizeFuture; + const SubMaster &sm = *uiState()->sm; + + + bool is_onroad = false; + std::string mapd_version; + bool isWifi() const {return sm["deviceState"].getDeviceState().getNetworkType() == cereal::DeviceState::NetworkType::WIFI; } + bool isMetered() const {return sm["deviceState"].getDeviceState().getNetworkMetered(); } + bool osm_download_in_progress = false; + bool download_failed_state = false; + quint64 mapsDirSize = 0; + + QLabel *osmUpdateLbl; + ButtonControl *osmDownloadBtn; + ButtonControl *osmUpdateBtn; + ButtonControl *usStatesBtn; + ButtonControl *osmDeleteMapsBtn; + ButtonControl *setupOsmDeleteMapsButton(QWidget *parent);; + ButtonControl* setupOsmUpdateButton(QWidget *parent); + ButtonControl* setupOsmDownloadButton(QWidget *parent); + ButtonControl* setupUsStatesButton(QWidget *parent); + QTimer *timer; + std::string osm_download_locations; +// void updateButtonControl(ButtonControl *btnControl, QWidget *parent, const QString &initTitle, const QString &allStatesOption); + + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent* event) override; + void updateLabels(); + void updateDownloadProgress(); + static int extractIntFromJson(const QJsonObject& json, const QString& key); + std::string processUpdateStatus(bool pending_update_check, int total_files, int downloaded_files, const QJsonObject& json, bool failed_state); + + ConfirmationDialog* confirmationDialog; + LabelControl *mapdVersion; + LabelControl *offlineMapsStatus; + LabelControl *offlineMapsETA; + LabelControl *offlineMapsElapsed; + std::optional lastDownloadedTimePoint; + LocationsFetcher locationsFetcher; + void updateMapSize(); + + + bool showConfirmationDialog(QWidget *parent, + const QString &message = QString(), + const QString &confirmButtonText = QString()) const { + const auto _is_metered = isMetered(); + const QString warning_message = _is_metered ? tr("\n\nWarning: You are on a metered connection!") : QString(); + QString final_message = message.isEmpty() ? tr("This will start the download process and it might take a while to complete.") : message; + final_message += warning_message; // Append the warning message if the connection is metered + + const QString final_buttonText = confirmButtonText.isEmpty() ? (_is_metered ? tr("Continue on Metered") : tr("Start Download")) : confirmButtonText; + + return ConfirmationDialog::confirm(final_message, final_buttonText, parent); + } + + // Refactored methods + std::vector> getOsmLocations(const std::tuple& customLocation = defaultLocation) const { + return locationsFetcher.getOsmLocations(customLocation); + } + std::vector> getUsStatesLocations(const std::tuple& customLocation = defaultLocation) const { + return locationsFetcher.getUsStatesLocations(customLocation); + } + + static QString formatTime(const long timeInSeconds) { + const long minutes = timeInSeconds / 60; + const long seconds = timeInSeconds % 60; + + QString formattedTime; + if (minutes > 0) { + formattedTime = QString::number(minutes) + "m "; + } + formattedTime += QString::number(seconds) + "s"; + return formattedTime; + } + + static QString calculateElapsedTime(const QJsonObject &jsonData, const std::chrono::system_clock::time_point &startTime) { + using namespace std::chrono; + if (!jsonData.contains("total_files") || !jsonData.contains("downloaded_files")) + return "Calculating..."; + + const int totalFiles = jsonData["total_files"].toInt(); + const int downloadedFiles = jsonData["downloaded_files"].toInt(); + + if (downloadedFiles >= totalFiles || totalFiles <= 0) return "Downloaded"; + + const long elapsed = duration_cast(system_clock::now() - startTime).count(); + + if (elapsed == 0 || downloadedFiles == 0) return "Calculating..."; + + return formatTime(elapsed); + } + + static QString calculateETA(const QJsonObject &jsonData, const std::chrono::system_clock::time_point &startTime) { + using namespace std::chrono; + static steady_clock::time_point lastUpdateTime = steady_clock::now(); + static std::deque rateHistory; + + constexpr int minDataPoints = 3; + constexpr int historySize = 10; + + static QString lastETA = "Calculating ETA..."; + + if (duration_cast(steady_clock::now() - lastUpdateTime).count() < 1) { + return lastETA; + } + + if (!jsonData.contains("total_files") || !jsonData.contains("downloaded_files")) + return lastETA; + + const int totalFiles = jsonData["total_files"].toInt(); + const int downloadedFiles = jsonData["downloaded_files"].toInt(); + + if (totalFiles <= 0 || downloadedFiles >= totalFiles) { + return totalFiles <= 0 ? "Ready" : "Downloaded"; + } + + const long elapsed = duration_cast(system_clock::now() - startTime).count(); + if (elapsed == 0 || downloadedFiles == 0) return lastETA; + + const double rate = downloadedFiles / static_cast(elapsed); + if (rateHistory.size() >= historySize) rateHistory.pop_front(); + rateHistory.push_back(rate); + + if (rateHistory.size() < minDataPoints) return lastETA; + + double weightedSum = 0; + for (int i = 0, weight = 1; i < rateHistory.size(); ++i, ++weight) { + weightedSum += rateHistory[i] * weight; + } + const double avgRate = 2 * weightedSum / (rateHistory.size() * (rateHistory.size() + 1)); + + const long remainingTime = static_cast((totalFiles - downloadedFiles) / avgRate); + if (remainingTime <= 0) return lastETA; + + lastETA = formatTime(remainingTime) + " remaining"; + lastUpdateTime = steady_clock::now(); + return lastETA; + } + + static QString formatDownloadStatus(const QJsonObject &json) { + + if (!json.contains("total_files") || !json.contains("downloaded_files")) + return ""; + + const int total_files = json["total_files"].toInt(); + const int downloaded_files = json["downloaded_files"].toInt(); + + if (total_files <= 0) return "Ready"; + if (downloaded_files >= total_files) return "Downloaded"; + + const int percentage = static_cast(100.0 * downloaded_files / total_files); + return QString::asprintf("%d/%d (%d%%)", downloaded_files, total_files, percentage); + } + + QString formatSize(quint64 size) const { + if (size == 0 && (!mapSizeFuture.has_value() || mapSizeFuture.value().isRunning())) { + return QString("Calculating..."); + } + + constexpr qint64 kb = 1024; + constexpr qint64 mb = 1024 * kb; + constexpr qint64 gb = 1024 * mb; + + if (size < gb) { + const double sizeMB = size / static_cast(mb); + return QString::number(sizeMB, 'f', 2) + " MB"; + } else { + const double sizeGB = size / static_cast(gb); + return QString::number(sizeGB, 'f', 2) + " GB"; + } + } + + static quint64 getDirSize(QString dirPath) { + quint64 size = 0; + const QString actualDirPath = dirPath.startsWith("~") ? dirPath.replace(0, 1, QDir::homePath()) : dirPath; + QDirIterator it(actualDirPath, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks, QDirIterator::Subdirectories); + while (it.hasNext()) { + it.next(); + if (it.fileInfo().isFile()) { + size += it.fileInfo().size(); + } + } + return size; + } +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.cc b/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.cc new file mode 100644 index 0000000000..616bee253d --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.cc @@ -0,0 +1,277 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.h" + +SoftwarePanelSP::SoftwarePanelSP(QWidget *parent) : SoftwarePanel(parent) { + // Get current model name and create new ButtonControl + const auto current_model = GetModelName(); + currentModelLblBtn = new ButtonControl(tr("Driving Model"), tr("SELECT"), current_model); + currentModelLblBtn->setValue(current_model); + + connect(&models_fetcher, &ModelsFetcher::downloadProgress, this, [this](const double progress) { + handleDownloadProgress(progress, "driving"); + }); + + connect(&nav_models_fetcher, &ModelsFetcher::downloadProgress, this, [this](const double progress) { + handleDownloadProgress(progress, "navigation"); + }); + + connect(&metadata_fetcher, &ModelsFetcher::downloadProgress, this, [this](const double progress) { + handleDownloadProgress(progress, "metadata"); + }); + + connect(&models_fetcher, &ModelsFetcher::downloadComplete, this, [this](const QByteArray&data, bool fromCache = false) { + modelFromCache = fromCache; + updateLabels(); + }); + + connect(&nav_models_fetcher, &ModelsFetcher::downloadComplete, this, [this](const QByteArray&data, bool fromCache = false) { + navModelFromCache = fromCache; + updateLabels(); + }); + + connect(&metadata_fetcher, &ModelsFetcher::downloadComplete, this, [this](const QByteArray&data, bool fromCache = false) { + metadataFromCache = fromCache; + updateLabels(); + }); + + connect(&models_fetcher, &ModelsFetcher::downloadFailed, this, &SoftwarePanelSP::handleDownloadFailed); + connect(&nav_models_fetcher, &ModelsFetcher::downloadFailed, this, &SoftwarePanelSP::handleDownloadFailed); + connect(&metadata_fetcher, &ModelsFetcher::downloadFailed, this, &SoftwarePanelSP::handleDownloadFailed); + + + // Connect click event from currentModelLblBtn to local slot + connect(currentModelLblBtn, &ButtonControl::clicked, this, &SoftwarePanelSP::handleCurrentModelLblBtnClicked); + + ReplaceOrAddWidget(currentModelLbl, currentModelLblBtn); +} + +void SoftwarePanelSP::handleDownloadFailed(const QString &modelType) { + model_download_failed = true; + LOGE("Download failed reported for [%s]", modelType.toStdString().c_str()); + failed_downloads_description += "["+ modelType +"]\n"; + HandleModelDownloadProgressReport(); // Call to update UI based on the new status +} + +void SoftwarePanelSP::handleDownloadProgress(const double progress, const QString &modelType) { + if (modelType == "driving") { + modelDownloadProgress = progress; + } else if (modelType == "navigation") { + navModelDownloadProgress = progress; + } else if (modelType == "metadata") { + metadataDownloadProgress = progress; + } + + HandleModelDownloadProgressReport(); +} + +QString SoftwarePanelSP::GetModelName() { + if (selectedModelToDownload.has_value()) { + return selectedModelToDownload->displayName; + } + + if (params.getBool("CustomDrivingModel")) { + return QString::fromStdString(params.get("DrivingModelName")); + } + + return CURRENT_MODEL; +} + +QString SoftwarePanelSP::GetNavModelName() { + if (selectedNavModelToDownload.has_value()) { + return selectedNavModelToDownload->fullNameNav; + } + + return QString::fromStdString(params.get("NavModelText")); +} + +QString SoftwarePanelSP::GetMetadataName() { + if (selectedMetadataToDownload.has_value()) { + // Assuming your metadata structure has a 'name' or similar field + return selectedMetadataToDownload->fullNameMetadata; + } + + // Return a default name or an empty string if there's no metadata selected + return QString::fromStdString(params.get("DrivingModelMetadataText")); +} + +void SoftwarePanelSP::HandleModelDownloadProgressReport() { + // Template strings for download status + const QString downloadingTemplate = "Downloading %1 model [%2]... (%3%)"; + const QString downloadedTemplate = "%1 model [%2] downloaded"; + + // Get model names + QString drivingModelName = GetModelName(); + QString navModelName = GetNavModelName(); + QString metadataName = GetMetadataName(); + QString description; + + // Driving model status + if (isDownloadingModel()) { + description += downloadingTemplate.arg("Driving", drivingModelName, QString::number(modelDownloadProgress.value_or(0.0), 'f', 2)); + } else { + if (modelFromCache) drivingModelName += " (CACHED)"; + description += downloadedTemplate.arg("Driving", drivingModelName); + } + + // Navigation model status + if (isDownloadingNavModel()) { + if (!description.isEmpty()) description += "\n"; // Add newline if driving model status is already appended + description += downloadingTemplate.arg("Navigation", navModelName, + QString::number(navModelDownloadProgress.value_or(0.0), 'f', 2)); + } else { + if (navModelFromCache) navModelName += " (CACHED)"; + if (!description.isEmpty()) description += "\n"; // Ensure newline separation + description += downloadedTemplate.arg("Navigation", navModelName); + } + + if (isDownloadingMetadata()) { + if (!description.isEmpty()) description += "\n"; + description += downloadingTemplate.arg("Metadata", metadataName, QString::number(metadataDownloadProgress.value_or(0.0), 'f', 2)); + } else { + if (metadataFromCache) metadataName += " (CACHED)"; + if (!description.isEmpty()) description += "\n"; + description += downloadedTemplate.arg("Metadata", metadataName); + } + + if (model_download_failed) { + description = "Downloads have failed, please try swapping the model!\n" + "Failed:\n" + failed_downloads_description; + LOGE("MODEL DOWNLOADS FAILED!!!"); + } + + currentModelLblBtn->setDescription(description); + currentModelLblBtn->showDescription(); + currentModelLblBtn->setEnabled( + !(is_onroad || (isDownloadingModel() || isDownloadingMetadata() || isDownloadingNavModel()))); + + // If not downloading and there is a selected model, update parameters + if (!isDownloadingModel() && modelDownloadProgress.has_value()) { + params.put("DrivingModelText", selectedModelToDownload->fullName.toStdString()); + params.put("DrivingModelName", selectedModelToDownload->displayName.toStdString()); + //params.put("DrivingModelUrl", selectedModelToDownload->downloadUri.toStdString()); // TODO: Placeholder for future implementation + LOGD("Resetting selectedModelToDownload"); + selectedModelToDownload.reset(); + modelDownloadProgress.reset(); + modelFromCache = false; + params.putBool("CustomDrivingModel", !model_download_failed); + } + + // If not downloading and there is a selected model, update parameters + if (!isDownloadingNavModel() && navModelDownloadProgress.has_value()) { + params.put("DrivingModelGeneration", selectedNavModelToDownload->generation.toStdString()); + params.put("NavModelText", selectedNavModelToDownload->fullNameNav.toStdString()); + LOGD("Resetting selectedNavModelToDownload"); + selectedNavModelToDownload.reset(); + navModelDownloadProgress.reset(); + navModelFromCache = false; + } + + if (!isDownloadingMetadata() && metadataDownloadProgress.has_value()) { + params.put("DrivingModelMetadataText", selectedMetadataToDownload->fullNameMetadata.toStdString()); + LOGD("Resetting selectedMetadataToDownload"); + selectedMetadataToDownload.reset(); + metadataDownloadProgress.reset(); + metadataFromCache = false; + } + +} + +void SoftwarePanelSP::handleCurrentModelLblBtnClicked() { + // Disabling label button and displaying fetching message + currentModelLblBtn->setEnabled(false); + currentModelLblBtn->setValue("Fetching models..."); + + checkNetwork(); + const auto currentModelName = QString::fromStdString(params.get("DrivingModelName")); + const bool is_release_sp = params.getBool("IsReleaseSPBranch"); + const auto models = ModelsFetcher::getModelsFromURL(); + + QMap index_to_model; + + // Collecting indices with display names + for (const auto &model: models) { + if ((is_release_sp && model.environment == "release") || !is_release_sp) { + index_to_model.insert(model.index, model.displayName); + } + } + + QStringList modelNames; + QStringList indices = index_to_model.keys(); + std::sort(indices.begin(), indices.end(), [&](const QString &index1, const QString &index2) { + return index1.toInt() > index2.toInt(); + }); + + for (const QString &index: indices) { + modelNames.push_back(index_to_model[index]); + } + + currentModelLblBtn->setEnabled(!is_onroad); + currentModelLblBtn->setValue(GetModelName()); + + const QString selectedModelName = MultiOptionDialog::getSelection(tr("Select a Driving Model"), modelNames, + currentModelName, this); + + // Bail if no selected model or the user doesn't want to continue while on metered + if (selectedModelName.isEmpty() || !canContinueOnMeteredDialog()) { + return; + } + + // Finding and setting the selected model + for (auto &model: models) { + if (model.displayName == selectedModelName) { + selectedModelToDownload = model; + selectedNavModelToDownload = model; + selectedMetadataToDownload = model; + params.putBool("CustomDrivingModel", false); + break; + } + } + + // If decision is to download and there is a selected model, update UI and begin downloading + if (selectedModelToDownload.has_value()) { + model_download_failed = false; + currentModelLblBtn->setValue(selectedModelToDownload->displayName); + currentModelLblBtn->setDescription(selectedModelToDownload->displayName); + models_fetcher.download(selectedModelToDownload->downloadUri, selectedModelToDownload->fileName); + nav_models_fetcher.download(selectedNavModelToDownload->downloadUriNav, selectedNavModelToDownload->fileNameNav); + metadata_fetcher.download(selectedMetadataToDownload->downloadUriMetadata, + selectedMetadataToDownload->fileNameMetadata); + + // Disable select button until download completes + currentModelLblBtn->setEnabled(false); + showResetParamsDialog(); + } + updateLabels(); +} + +void SoftwarePanelSP::checkNetwork() { + const SubMaster &sm = *(uiState()->sm); + const auto device_state = sm["deviceState"].getDeviceState(); + const auto network_type = device_state.getNetworkType(); + is_wifi = network_type == cereal::DeviceState::NetworkType::WIFI; + is_metered = device_state.getNetworkMetered(); +} + +void SoftwarePanelSP::updateLabels() { + if (!isVisible()) { + return; + } + + if(!model_download_failed) + failed_downloads_description = ""; + + checkNetwork(); + currentModelLblBtn->setEnabled(!(is_onroad || (isDownloadingModel() || isDownloadingMetadata() || isDownloadingNavModel()))); + SoftwarePanel::updateLabels(); +} + +void SoftwarePanelSP::showResetParamsDialog() { + const auto confirmMsg = tr( + "Download has started in the background.\nWe STRONGLY suggest you to reset calibration, would you like to do that now?"); + const auto button_text = tr("Reset Calibration"); + + // If user confirms, remove specified parameters + if (showConfirmationDialog(confirmMsg, button_text, false)) { + params.remove("CalibrationParams"); + params.remove("LiveTorqueParameters"); + } +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.h b/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.h new file mode 100644 index 0000000000..6c39e502a6 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.h @@ -0,0 +1,78 @@ +#pragma once + +#include "common/model.h" +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/offroad/settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/models_fetcher.h" + +class SoftwarePanelSP final : public SoftwarePanel { + Q_OBJECT + +public: + explicit SoftwarePanelSP(QWidget *parent = nullptr); + + +private: + QString GetModelName(); + QString GetNavModelName(); + QString GetMetadataName(); + + void checkNetwork(); + bool isDownloadingModel() const { + LOGD("isDownloadingModel: selectedModelToDownload.has_value() [%s] && modelDownloadProgress [%f]",selectedModelToDownload.has_value() ?"true": "false", modelDownloadProgress.value_or(0.0)); + return selectedModelToDownload.has_value() && modelDownloadProgress.value_or(0.0) > 0.0 && modelDownloadProgress.value_or(0.0) < 100.0; + } + + bool isDownloadingNavModel() const { + LOGD("isDownloadingNavModel: selectedNavModelToDownload.has_value() [%s] && navModelDownloadProgress [%f]",selectedNavModelToDownload.has_value() ?"true": "false", navModelDownloadProgress.value_or(0.0)); + return selectedNavModelToDownload.has_value() && navModelDownloadProgress.value_or(0.0) > 0.0 && navModelDownloadProgress.value_or(0.0) < 100.0; + } + + bool isDownloadingMetadata() const { + LOGD("isDownloadingMetadata: selectedMetadataToDownload.has_value() [%s] && metadataDownloadProgress [%f]",selectedMetadataToDownload.has_value() ?"true": "false", metadataDownloadProgress.value_or(0.0)); + return selectedMetadataToDownload.has_value() && metadataDownloadProgress.value_or(0.0) > 0.0 && metadataDownloadProgress.value_or(0.0) < 100.0; + } + + // UI update related methods + void updateLabels() override; + void handleCurrentModelLblBtnClicked(); + void HandleModelDownloadProgressReport(); + void handleDownloadProgress(double progress, const QString&modelType); + void HandleNavModelDownloadProgressReport(); + void handleDownloadFailed(const QString &modelType); + void showResetParamsDialog(); + bool canContinueOnMeteredDialog() { + if (!is_metered) return true; + return showConfirmationDialog(QString(), QString(), is_metered); + } + + inline bool showConfirmationDialog(const QString &message = QString(), const QString &confirmButtonText = QString(), const bool show_metered_warning = false) { + return showConfirmationDialog(this, message, confirmButtonText, show_metered_warning); + } + + static inline bool showConfirmationDialog(QWidget *parent, const QString &message = QString(), const QString &confirmButtonText = QString(), const bool show_metered_warning = false) { + const QString warning_message = show_metered_warning ? tr("Warning: You are on a metered connection!") : QString(); + const QString final_message = QString("%1%2").arg(!message.isEmpty() ? message+"\n" : QString(), warning_message); + const QString final_buttonText = !confirmButtonText.isEmpty() ? confirmButtonText : QString("Continue%1").arg(show_metered_warning ? " on Metered" : ""); + + return ConfirmationDialog::confirm(final_message, final_buttonText, parent); + } + + bool is_metered{}; + bool is_wifi{}; + bool modelFromCache; + bool navModelFromCache; + bool metadataFromCache; + std::optional modelDownloadProgress; + std::optional navModelDownloadProgress; + std::optional metadataDownloadProgress; + std::optional selectedModelToDownload; + std::optional selectedNavModelToDownload; + std::optional selectedMetadataToDownload; + ButtonControl *currentModelLblBtn; + ModelsFetcher models_fetcher; + ModelsFetcher nav_models_fetcher; + ModelsFetcher metadata_fetcher; + bool model_download_failed; + QString failed_downloads_description = ""; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.cc new file mode 100644 index 0000000000..ca69c49bf8 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.cc @@ -0,0 +1,132 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.h" + +SlcSettings::SlcSettings(QWidget* parent) : QWidget(parent) { + QVBoxLayout* main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); + main_layout->setSpacing(20); + + // Back button + PanelBackButton* back = new PanelBackButton(); + connect(back, &QPushButton::clicked, [=]() { emit backPress(); }); + main_layout->addWidget(back, 0, Qt::AlignLeft); + + ListWidget *list = new ListWidget(this, false); + + std::vector speed_limit_engage_texts{tr("Auto"), tr("User Confirm")}; + speed_limit_engage_settings = new ButtonParamControl( + "SpeedLimitEngageType", tr("Engage Mode"), + "", + "../assets/offroad/icon_blank.png", + speed_limit_engage_texts, + 440 + ); + speed_limit_engage_settings->showDescription(); + list->addItem(speed_limit_engage_settings); + + std::vector speed_limit_offset_settings_texts{tr("Default"), tr("Fixed"), tr("Percentage")}; + speed_limit_offset_settings = new ButtonParamControl( + "SpeedLimitOffsetType", tr("Limit Offset"), tr("Set speed limit slightly higher than actual speed limit for a more natural drive."), + "../assets/offroad/icon_blank.png", + speed_limit_offset_settings_texts, + 380 + ); + list->addItem(speed_limit_offset_settings); + + slvo = new SpeedLimitValueOffset(); + connect(slvo, &SPOptionControl::updateLabels, slvo, &SpeedLimitValueOffset::refresh); + list->addItem(slvo); + + connect(speed_limit_offset_settings, &ButtonParamControl::buttonToggled, this, &SlcSettings::updateToggles); + connect(speed_limit_offset_settings, &ButtonParamControl::buttonToggled, slvo, &SpeedLimitValueOffset::refresh); + + param_watcher = new ParamWatcher(this); + + QObject::connect(param_watcher, &ParamWatcher::paramChanged, [=](const QString ¶m_name, const QString ¶m_value) { + updateToggles(); + }); + + main_layout->addWidget(new ScrollView(list, this)); +} + +void SlcSettings::showEvent(QShowEvent *event) { + updateToggles(); +} + +void SlcSettings::updateToggles() { + param_watcher->addParam("SpeedLimitEngageType"); + + if (!isVisible()) { + return; + } + + if (QString::fromStdString(params.get("SpeedLimitEngageType")) == "2") { + params.put("SpeedLimitEngageType", "1"); + } + + speed_limit_engage_settings->setButton("SpeedLimitEngageType"); + + auto cp_bytes = params.get("CarParamsPersistent"); + auto custom_stock_long_param = params.getBool("CustomStockLong"); + auto speed_limit_control = params.getBool("EnableSlc"); + + if (!cp_bytes.empty()) { + AlignedBuffer aligned_buf; + capnp::FlatArrayMessageReader cmsg(aligned_buf.align(cp_bytes.data(), cp_bytes.size())); + cereal::CarParams::Reader CP = cmsg.getRoot(); + + const bool pcm_cruise_op_long = CP.getOpenpilotLongitudinalControl() && CP.getPcmCruise(); + + if (hasLongitudinalControl(CP) || custom_stock_long_param) { + speed_limit_offset_settings->setEnabled(speed_limit_control); + slvo->setEnabled(speed_limit_control && QString::fromStdString(params.get("SpeedLimitOffsetType")) != "0"); + + QString speed_limit_engage_condition_text = pcm_cruise_op_long ? "This platform defaults to Auto mode. User Confirm mode is not supported on this platform.

" : ""; + QString speed_limit_engage_condition_param = pcm_cruise_op_long ? "0" : "SpeedLimitEngageType"; + if (pcm_cruise_op_long) { + speed_limit_engage_settings->setDisabledSelectedButton("1"); // "User Confirm" disabled + } + speed_limit_engage_settings->setDescription(speed_limit_engage_condition_text + slcDescriptionBuilder(speed_limit_engage_condition_param, speed_limit_engage_descriptions)); + } else { + slvo->setEnabled(false); + speed_limit_offset_settings->setEnabled(false); + speed_limit_engage_settings->setEnabled(false); + } + } else { + slvo->setEnabled(false); + speed_limit_offset_settings->setEnabled(false); + speed_limit_engage_settings->setEnabled(false); + speed_limit_engage_settings->setDescription(slcDescriptionBuilder("SpeedLimitEngageType", speed_limit_engage_descriptions)); + } +} + +// Speed Limit Control Custom Offset +SpeedLimitValueOffset::SpeedLimitValueOffset() : SPOptionControl ( + "SpeedLimitValueOffset", + "", + "", + "../assets/offroad/icon_blank.png", + {-30, 30}) { + + refresh(); +} + +void SpeedLimitValueOffset::refresh() { + QString option = QString::fromStdString(params.get("SpeedLimitValueOffset")); + QString offset_type = QString::fromStdString(params.get("SpeedLimitOffsetType")); + bool is_metric = params.getBool("IsMetric"); + QString unit = ""; + + if (option.toInt() >= 0) { + option = "+" + option; + } + + if (offset_type == "0") { + option = ""; + unit = "N/A"; + } else if (offset_type == "1") { + unit = is_metric ? " km/h" : " mph"; + } else if (offset_type == "2") { + unit = " %"; + } + setLabel(option + unit); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.h new file mode 100644 index 0000000000..877064e577 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.h @@ -0,0 +1,73 @@ +#pragma once + +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" +#include "selfdrive/ui/qt/util.h" + +class SpeedLimitValueOffset : public SPOptionControl { + Q_OBJECT + +public: + SpeedLimitValueOffset(); + + void refresh(); + +private: + Params params; +}; + +class SlcSettings : public QWidget { + Q_OBJECT + +public: + explicit SlcSettings(QWidget* parent = nullptr); + void showEvent(QShowEvent *event) override; + static const std::vector speed_limit_engage_descriptions; + +signals: + void backPress(); + +public slots: + void updateToggles(); + +private: + Params params; + std::map toggles; + + SpeedLimitValueOffset *slvo; + ButtonParamControl *speed_limit_offset_settings; + ButtonParamControl *speed_limit_engage_settings; + ParamWatcher *param_watcher; + + QString slcDescriptionBuilder(QString param, std::vector descriptions) { + std::string key = param.toStdString(); + int value = atoi(params.get(key).c_str()); + value += 1; // always bump one due to first line being generic description + QString description = ""; + + for (int i = 0; i < descriptions.size(); i++) { + if (i == 1) { + description += "

"; + } + + if (i == value) { + description += "" + descriptions[i] + ""; + } else { + description += descriptions[i]; + } + + if ((i > 0) && (i < descriptions.size() - 1)) { + description += "
"; + } + } + + return description; + } +}; + +inline const std::vector SlcSettings::speed_limit_engage_descriptions{ + tr("Select the desired mode to set the cruising speed to the speed limit:"), + tr("Auto: Automatic speed adjustment on motorways based on speed limit data."), + tr("User Confirm: Inform the driver to change set speed of Adaptive Cruise Control to help the driver stay within the speed limit."), +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.cc new file mode 100644 index 0000000000..63840923c9 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.cc @@ -0,0 +1,50 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.h" + +SpeedLimitPolicySettings::SpeedLimitPolicySettings(QWidget* parent) : QWidget(parent) { + QVBoxLayout* main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); + main_layout->setSpacing(20); + + // Back button + PanelBackButton* back = new PanelBackButton(); + connect(back, &QPushButton::clicked, [=]() { emit backPress(); }); + main_layout->addWidget(back, 0, Qt::AlignLeft); + + ListWidget *list = new ListWidget(this, false); + + speed_limit_policy = new ButtonParamControl( + "SpeedLimitControlPolicy", + tr("Speed Limit Source Policy"), + "", + "../assets/offroad/icon_blank.png", + speed_limit_policy_texts, + 250 + ); + speed_limit_policy->showDescription(); + connect(speed_limit_policy, &ButtonParamControl::buttonToggled, this, &SpeedLimitPolicySettings::updateToggles); + list->addItem(speed_limit_policy); + + param_watcher = new ParamWatcher(this); + + QObject::connect(param_watcher, &ParamWatcher::paramChanged, [=](const QString ¶m_name, const QString ¶m_value) { + updateToggles(); + }); + + main_layout->addWidget(new ScrollView(list, this)); +} + +void SpeedLimitPolicySettings::showEvent(QShowEvent *event) { + updateToggles(); +} + +void SpeedLimitPolicySettings::updateToggles() { + param_watcher->addParam("SpeedLimitControlPolicy"); + + if (!isVisible()) { + return; + } + + speed_limit_policy->setButton("SpeedLimitControlPolicy"); + + speed_limit_policy->setDescription(speedLimitPolicyDescriptionBuilder("SpeedLimitControlPolicy", speed_limit_policy_descriptions)); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.h new file mode 100644 index 0000000000..4544d2e8ef --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.h @@ -0,0 +1,73 @@ +#pragma once + +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" +#include "selfdrive/ui/qt/util.h" + +class SpeedLimitPolicySettings : public QWidget { + Q_OBJECT + +public: + explicit SpeedLimitPolicySettings(QWidget* parent = nullptr); + void showEvent(QShowEvent *event) override; + static const std::vector speed_limit_policy_texts; + static const std::vector speed_limit_policy_descriptions; + +signals: + void backPress(); + +public slots: + void updateToggles(); + +private: + Params params; + + ButtonParamControl *speed_limit_policy; + ParamWatcher *param_watcher; + + QString speedLimitPolicyDescriptionBuilder(QString param, std::vector descriptions) { + std::string key = param.toStdString(); + int value = atoi(params.get(key).c_str()); + value += 1; // always bump one due to first line being generic description + QString description = ""; + + for (int i = 0; i < descriptions.size(); i++) { + if (i == 1) { + description += "

"; + } + + if (i == value) { + description += "" + descriptions[i] + ""; + } else { + description += descriptions[i]; + } + + if ((i > 0) && (i < descriptions.size() - 1)) { + description += "
"; + } + } + + return description; + } +}; + +// Add this line outside the class definition +inline const std::vector SpeedLimitPolicySettings::speed_limit_policy_texts{ + tr("Nav\nOnly"), + tr("Map\nOnly"), + tr("Car\nOnly"), + tr("Nav\nFirst"), + tr("Map\nFirst"), + tr("Car\nFirst"), +}; + +inline const std::vector SpeedLimitPolicySettings::speed_limit_policy_descriptions{ + tr("Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning"), + tr("Nav Only: Data from Mapbox active navigation only."), + tr("Map Only: Data from OpenStreetMap only."), + tr("Car Only: Data from the car's built-in sources (if available)."), + tr("Nav First: Nav -> Map -> Car"), + tr("Map First: Map -> Nav -> Car"), + tr("Car First: Car -> Nav -> Map"), +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.cc new file mode 100644 index 0000000000..5116bf38c7 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.cc @@ -0,0 +1,117 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.h" + +SpeedLimitWarningSettings::SpeedLimitWarningSettings(QWidget* parent) : QWidget(parent) { + QVBoxLayout* main_layout = new QVBoxLayout(this); + main_layout->setContentsMargins(50, 20, 50, 20); + main_layout->setSpacing(20); + + // Back button + PanelBackButton* back = new PanelBackButton(); + connect(back, &QPushButton::clicked, [=]() { emit backPress(); }); + main_layout->addWidget(back, 0, Qt::AlignLeft); + + ListWidget *list = new ListWidget(this, false); + + std::vector speed_limit_warning_texts{tr("Off"), tr("Display"), tr("Chime")}; + speed_limit_warning_settings = new ButtonParamControl( + "SpeedLimitWarningType", tr("Speed Limit Warning"), + "", + "../assets/offroad/icon_blank.png", + speed_limit_warning_texts, + 380 + ); + speed_limit_warning_settings->showDescription(); + list->addItem(speed_limit_warning_settings); + + speed_limit_warning_flash = new ParamControl( + "SpeedLimitWarningFlash", + tr("Warning with speed limit flash"), + tr("When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset."), + "../assets/offroad/icon_blank.png" + ); + list->addItem(speed_limit_warning_flash); + + std::vector speed_limit_warning_offset_settings_texts{tr("Default"), tr("Fixed"), tr("Percentage")}; + speed_limit_warning_offset_settings = new ButtonParamControl( + "SpeedLimitWarningOffsetType", tr("Warning Offset"), + tr("Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit."), + "../assets/offroad/icon_blank.png", + speed_limit_warning_offset_settings_texts, + 380 + ); + list->addItem(speed_limit_warning_offset_settings); + + slwvo = new SpeedLimitWarningValueOffset(); + connect(slwvo, &SPOptionControl::updateLabels, slwvo, &SpeedLimitWarningValueOffset::refresh); + list->addItem(slwvo); + + connect(speed_limit_warning_settings, &ButtonParamControl::buttonToggled, this, &SpeedLimitWarningSettings::updateToggles); + + connect(speed_limit_warning_offset_settings, &ButtonParamControl::buttonToggled, this, &SpeedLimitWarningSettings::updateToggles); + connect(speed_limit_warning_offset_settings, &ButtonParamControl::buttonToggled, slwvo, &SpeedLimitWarningValueOffset::refresh); + + param_watcher = new ParamWatcher(this); + + QObject::connect(param_watcher, &ParamWatcher::paramChanged, [=](const QString ¶m_name, const QString ¶m_value) { + updateToggles(); + }); + + main_layout->addWidget(new ScrollView(list, this)); +} + +void SpeedLimitWarningSettings::showEvent(QShowEvent *event) { + updateToggles(); +} + +void SpeedLimitWarningSettings::updateToggles() { + param_watcher->addParam("SpeedLimitWarningType"); + + if (!isVisible()) { + return; + } + + auto speed_limit_warning_type_param = QString::fromStdString(params.get("SpeedLimitWarningType")); + + speed_limit_warning_settings->setDescription(speedLimitWarningDescriptionBuilder("SpeedLimitWarningType", speed_limit_warning_descriptions)); + speed_limit_warning_flash->setEnabled(speed_limit_warning_type_param != "0"); + if (speed_limit_warning_type_param == "0") { + params.remove("SpeedLimitWarningFlash"); + speed_limit_warning_flash->refresh(); + } + slwvo->setEnabled(QString::fromStdString(params.get("SpeedLimitWarningOffsetType")) != "0"); + + speed_limit_warning_offset_settings->setEnabled(speed_limit_warning_type_param != "0"); + slwvo->setEnabled(speed_limit_warning_type_param != "0"); +} + +// Speed Limit Control Custom Offset +SpeedLimitWarningValueOffset::SpeedLimitWarningValueOffset() : SPOptionControl ( + "SpeedLimitWarningValueOffset", + "", + "", + "../assets/offroad/icon_blank.png", + {-30, 30}) { + + refresh(); +} + +void SpeedLimitWarningValueOffset::refresh() { + QString option = QString::fromStdString(params.get("SpeedLimitWarningValueOffset")); + QString offset_type = QString::fromStdString(params.get("SpeedLimitWarningOffsetType")); + bool is_metric = params.getBool("IsMetric"); + QString unit = ""; + + if (option.toInt() >= 0) { + option = "+" + option; + } + + if (offset_type == "0") { + option = ""; + unit = "N/A"; + } else if (offset_type == "1") { + unit = is_metric ? " km/h" : " mph"; + } else if (offset_type == "2") { + unit = " %"; + } + setLabel(option + unit); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.h new file mode 100644 index 0000000000..ce3c48ac3f --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.h @@ -0,0 +1,69 @@ +#pragma once + +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" +#include "selfdrive/ui/qt/util.h" + +class SpeedLimitWarningValueOffset : public SPOptionControl { + Q_OBJECT + +public: + SpeedLimitWarningValueOffset(); + + void refresh(); + +private: + Params params; +}; + +class SpeedLimitWarningSettings : public QWidget { + Q_OBJECT + +public: + explicit SpeedLimitWarningSettings(QWidget* parent = nullptr); + void showEvent(QShowEvent *event) override; + static const std::vector speed_limit_warning_descriptions; + +signals: + void backPress(); + +public slots: + void updateToggles(); + +private: + Params params; + std::map toggles; + + SpeedLimitWarningValueOffset *slwvo; + ButtonParamControl *speed_limit_warning_offset_settings; + ParamControl *speed_limit_warning_flash; + ButtonParamControl *speed_limit_warning_settings; + ParamWatcher *param_watcher; + + QString speedLimitWarningDescriptionBuilder(QString param, std::vector descriptions) { + std::string key = param.toStdString(); + int value = atoi(params.get(key).c_str()); + QString description = ""; + + for (int i = 0; i < descriptions.size(); i++) { + if (i == value) { + description += "" + descriptions[i] + ""; + } else { + description += descriptions[i]; + } + + if ((i >= 0) && (i < descriptions.size() - 1)) { + description += "
"; + } + } + + return description; + } +}; + +inline const std::vector SpeedLimitWarningSettings::speed_limit_warning_descriptions{ + tr("Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning."), + tr("Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset."), + tr("Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset."), +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.cc new file mode 100644 index 0000000000..ef95855722 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.cc @@ -0,0 +1,615 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.h" + +SunnypilotPanel::SunnypilotPanel(QWidget *parent) : QFrame(parent) { + main_layout = new QStackedLayout(this); + + ListWidget *list = new ListWidget(this, false); + // param, title, desc, icon + std::vector> toggle_defs{ + { + "EnableMads", + tr("Enable M.A.D.S."), + tr("Enable the beloved M.A.D.S. feature. Disable toggle to revert back to stock openpilot engagement/disengagement."), + "../assets/offroad/icon_blank.png", + }, + { + "VisionCurveLaneless", + tr("Laneless for Curves in \"Auto\" Mode"), + tr("While in Auto Lane, switch to Laneless for current/future curves."), + "../assets/offroad/icon_blank.png", + }, + { + "EnableSlc", + tr("Speed Limit Control (SLC)"), + tr("When you engage ACC, you will be prompted to set the cruising speed to the speed limit of the road adjusted by the Offset and Source Policy specified, or the current driving speed. The maximum cruising speed will always be the MAX set speed."), + "../assets/offroad/icon_blank.png", + }, + { + "TurnVisionControl", + tr("Enable Vision-based Turn Speed Control (V-TSC)"), + tr("Use vision path predictions to estimate the appropriate speed to drive through turns ahead."), + "../assets/offroad/icon_blank.png", + }, + { + "TurnSpeedControl", + tr("Enable Map Data Turn Speed Control (M-TSC) (Beta)"), + tr("Use curvature information from map data to define speed limits to take turns ahead."), + "../assets/offroad/icon_blank.png", + }, + { + "ReverseAccChange", + tr("ACC +/-: Long Press Reverse"), + QString("%1
" + "

%2


" + "

%3


") + .arg(tr("Change the ACC +/- buttons behavior with cruise speed change in sunnypilot.")) + .arg(tr("Disabled (Stock): Short=1, Long = 5 (imperial) / 10 (metric)")) + .arg(tr("Enabled: Short = 5 (imperial) / 10 (metric), Long=1")), + "../assets/offroad/icon_blank.png", + }, + { + "CustomOffsets", + tr("Custom Offsets"), + "", + "../assets/offroad/icon_blank.png", + }, + { + "NNFF", + tr("Neural Network Lateral Control (NNLC)"), + "", + "../assets/offroad/icon_blank.png", + }, + { + "EnforceTorqueLateral", + tr("Enforce Torque Lateral Control"), + tr("Enable this to enforce sunnypilot to steer with Torque lateral control."), + "../assets/offroad/icon_blank.png", + }, + { + "LiveTorque", + tr("Enable Self-Tune"), + tr("Enables self-tune for Torque lateral control for platforms that do not use Torque lateral control by default."), + "../assets/offroad/icon_blank.png", + }, + { + "LiveTorqueRelaxed", + tr("Less Restrict Settings for Self-Tune (Beta)"), + tr("Less strict settings when using Self-Tune. This allows torqued to be more forgiving when learning values."), + "../assets/offroad/icon_blank.png", + }, + { + "CustomTorqueLateral", + tr("Enable Custom Tuning"), + tr("Enables custom tuning for Torque lateral control. Modifying FRICTION and LAT_ACCEL_FACTOR below will override the offline values indicated in the YAML files within \"selfdrive/torque_data\". The values will also be used live when \"Override Self-Tune\" toggle is enabled."), + "../assets/offroad/icon_blank.png", + }, + { + "TorquedOverride", + tr("Manual Real-Time Tuning"), + tr("Enforces the torque lateral controller to use the fixed values instead of the learned values from Self-Tune. Enabling this toggle overrides Self-Tune values."), + "../assets/offroad/icon_blank.png", + }, + { + "QuietDrive", + tr("Quiet Drive 🤫"), + tr("sunnypilot will display alerts but only play the most important warning sounds. This feature can be toggled while the car is on."), + "../assets/offroad/icon_blank.png", + }, + { + "EndToEndLongAlertLight", + tr("Green Traffic Light Chime (Beta)"), + QString("%1
" + "

%2


") + .arg(tr("A chime will play when the traffic light you are waiting for turns green and you have no vehicle in front of you. If you are waiting behind another vehicle, the chime will play once the vehicle advances unless ACC is engaged.")) + .arg(tr("Note: This chime is only designed as a notification. It is the driver's responsibility to observe their environment and make decisions accordingly.")), + "../assets/offroad/icon_blank.png", + }, + { + "EndToEndLongAlertLead", + tr("Lead Vehicle Departure Alert"), + QString("%1
" + "

%2


") + .arg(tr("Enable this will notify when the leading vehicle drives away.")) + .arg(tr("Note: This chime is only designed as a notification. It is the driver's responsibility to observe their environment and make decisions accordingly.")), + "../assets/offroad/icon_blank.png", + } + }; + + // M.A.D.S. Settings + SubPanelButton *madsSettings = new SubPanelButton(tr("Customize M.A.D.S.")); + madsSettings->setObjectName("mads_btn"); + // Set margin on the outside of the button + QVBoxLayout* madsSettingsLayout = new QVBoxLayout; + madsSettingsLayout->setContentsMargins(0, 0, 0, 30); + madsSettingsLayout->addWidget(madsSettings); + connect(madsSettings, &QPushButton::clicked, [=]() { + scrollView->setLastScrollPosition(); + main_layout->setCurrentWidget(mads_settings); + }); + + mads_settings = new MadsSettings(this); + connect(mads_settings, &MadsSettings::backPress, [=]() { + scrollView->restoreScrollPosition(); + main_layout->setCurrentWidget(sunnypilotScreen); + }); + + // Lane Change Settings + SubPanelButton *laneChangeSettings = new SubPanelButton(tr("Customize Lane Change")); + laneChangeSettings->setObjectName("lane_change_btn"); + // Set margin on the outside of the button + QVBoxLayout* laneChangeSettingsLayout = new QVBoxLayout; + laneChangeSettingsLayout->setContentsMargins(0, 0, 0, 30); + laneChangeSettingsLayout->addWidget(laneChangeSettings); + connect(laneChangeSettings, &QPushButton::clicked, [=]() { + scrollView->setLastScrollPosition(); + main_layout->setCurrentWidget(lane_change_settings); + }); + + lane_change_settings = new LaneChangeSettings(this); + connect(lane_change_settings, &LaneChangeSettings::backPress, [=]() { + scrollView->restoreScrollPosition(); + main_layout->setCurrentWidget(sunnypilotScreen); + }); + + // Custom Offsets Settings + SubPanelButton *customOffsetsSettings = new SubPanelButton(tr("Customize Offsets")); + customOffsetsSettings->setObjectName("custom_offsets_btn"); + // Set margin on the outside of the button + QVBoxLayout* customOffsetsSettingsLayout = new QVBoxLayout; + customOffsetsSettingsLayout->setContentsMargins(0, 0, 0, 30); + customOffsetsSettingsLayout->addWidget(customOffsetsSettings); + connect(customOffsetsSettings, &QPushButton::clicked, [=]() { + scrollView->setLastScrollPosition(); + main_layout->setCurrentWidget(custom_offsets_settings); + }); + + custom_offsets_settings = new CustomOffsetsSettings(this); + connect(custom_offsets_settings, &CustomOffsetsSettings::backPress, [=]() { + scrollView->restoreScrollPosition(); + main_layout->setCurrentWidget(sunnypilotScreen); + }); + + // SLC. Settings + slcSettings = new SubPanelButton(tr("Customize Speed Limit Control"), 980, this); + slcSettings->setObjectName("slc_btn"); + // Set margin on the outside of the button + QVBoxLayout* slcSettingsLayout = new QVBoxLayout; + slcSettingsLayout->setContentsMargins(0, 0, 0, 30); + slcSettingsLayout->addWidget(slcSettings); + connect(slcSettings, &QPushButton::clicked, [=]() { + scrollView->setLastScrollPosition(); + main_layout->setCurrentWidget(slc_settings); + }); + + slc_settings = new SlcSettings(this); + connect(slc_settings, &SlcSettings::backPress, [=]() { + scrollView->restoreScrollPosition(); + main_layout->setCurrentWidget(sunnypilotScreen); + }); + + // Speed Limit Warning Settings + slwSettings = new SubPanelButton(tr("Customize Warning"), 720, this); + slwSettings->setObjectName("slw_btn"); + connect(slwSettings, &QPushButton::clicked, [=]() { + scrollView->setLastScrollPosition(); + main_layout->setCurrentWidget(slw_settings); + }); + + slw_settings = new SpeedLimitWarningSettings(this); + connect(slw_settings, &SpeedLimitWarningSettings::backPress, [=]() { + scrollView->restoreScrollPosition(); + main_layout->setCurrentWidget(sunnypilotScreen); + }); + + // Speed Limit Warning Settings + slpSettings = new SubPanelButton(tr("Customize Source"), 720, this); + slpSettings->setObjectName("slp_btn"); + connect(slpSettings, &QPushButton::clicked, [=]() { + scrollView->setLastScrollPosition(); + main_layout->setCurrentWidget(slp_settings); + }); + + slp_settings = new SpeedLimitPolicySettings(this); + connect(slp_settings, &SpeedLimitPolicySettings::backPress, [=]() { + scrollView->restoreScrollPosition(); + main_layout->setCurrentWidget(sunnypilotScreen); + }); + + // Speed Limit Warning and Speed Limit Policy in the same horizontal space + QHBoxLayout *warning_policy_layout = new QHBoxLayout; + warning_policy_layout->setContentsMargins(0, 0, 0, 30); + warning_policy_layout->addWidget(slwSettings); + warning_policy_layout->addSpacing(10); + warning_policy_layout->addWidget(slpSettings); + warning_policy_layout->setAlignment(Qt::AlignLeft); + + // toggle names to trigger updateToggles() when toggleFlipped + std::vector updateTogglesNames{ + "EnforceTorqueLateral", "CustomTorqueLateral", "LiveTorque", "TorquedOverride", "NNFF" + }; + + // toggle for offroadTransition when going onroad/offroad + std::vector toggleOffroad{ + "EnableMads", "EnforceTorqueLateral", "CustomTorqueLateral", "LiveTorqueRelaxed", "NNFF" + }; + + // Controls: Torque - FRICTION + friction = new TorqueFriction(); + connect(friction, &SPOptionControl::updateLabels, friction, &TorqueFriction::refresh); + + // Controls: Torque - LAT_ACCEL_FACTOR + lat_accel_factor = new TorqueMaxLatAccel(); + connect(lat_accel_factor, &SPOptionControl::updateLabels, lat_accel_factor, &TorqueMaxLatAccel::refresh); + + std::vector dlp_settings_texts{tr("Laneful"), tr("Laneless"), tr("Auto")}; + dlp_settings = new ButtonParamControl( + "DynamicLaneProfile", "Dynamic Lane Profile", "", + "../assets/offroad/icon_blank.png", + dlp_settings_texts, + 340 + ); + dlp_settings->showDescription(); + + for (auto &[param, title, desc, icon] : toggle_defs) { + auto toggle = new ParamControl(param, title, desc, icon, this); + + list->addItem(toggle); + toggles[param.toStdString()] = toggle; + + if (param == "EnableMads") { + list->addItem(madsSettingsLayout); + + list->addItem(horizontal_line()); + + // Controls: Dynamic Lane Profile group + list->addItem(dlp_settings); + } + + if (param == "VisionCurveLaneless") { + list->addItem(laneChangeSettingsLayout); + list->addItem(horizontal_line()); + + list->addItem(new LabelControl(tr("Speed Limit Assist"))); + } + + if (param == "EnableSlc") { + list->addItem(slcSettingsLayout); + + list->addItem(warning_policy_layout); + list->addItem(horizontal_line()); + } + + if (param == "ReverseAccChange") { + list->addItem(horizontal_line()); + } + + if (param == "CustomOffsets") { + list->addItem(customOffsetsSettingsLayout); + list->addItem(horizontal_line()); + } + + if (param == "TorquedOverride") { + // Control: FRICTION + list->addItem(friction); + + // Controls: LAT_ACCEL_FACTOR + list->addItem(lat_accel_factor); + + list->addItem(horizontal_line()); + } + } + + connect(toggles["NNFF"], &ToggleControl::toggleFlipped, [=](bool state) { + if (state) { + toggles["EnforceTorqueLateral"]->setEnabled(false); + params.putBool("EnforceTorqueLateral", false); + toggles["EnforceTorqueLateral"]->refresh(); + } else { + toggles["NNFF"]->hideDescription(); + + toggles["EnforceTorqueLateral"]->setEnabled(true); + toggles["EnforceTorqueLateral"]->refresh(); + } + }); + + // trigger updateToggles() when toggleFlipped + for (const auto& updateToggleName : updateTogglesNames) { + if (toggles.find(updateToggleName) != toggles.end()) { + connect(toggles[updateToggleName], &ToggleControl::toggleFlipped, [=](bool state) { + updateToggles(); + }); + } + } + + // trigger offroadTransition when going onroad/offroad + for (const auto& offroadName : toggleOffroad) { + if (toggles.find(offroadName) != toggles.end()) { + connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { + toggles[offroadName]->setEnabled(offroad); + }); + } + } + + toggles["EnableMads"]->setConfirmation(true, false); + toggles["EndToEndLongAlertLight"]->setConfirmation(true, false); + toggles["CustomOffsets"]->showDescription(); + + connect(toggles["EnableMads"], &ToggleControl::toggleFlipped, mads_settings, &MadsSettings::updateToggles); + connect(toggles["EnableMads"], &ToggleControl::toggleFlipped, [=](bool state) { + madsSettings->setEnabled(state); + }); + madsSettings->setEnabled(toggles["EnableMads"]->isToggled()); + + connect(toggles["EnableSlc"], &ToggleControl::toggleFlipped, slc_settings, &SlcSettings::updateToggles); + connect(toggles["EnableSlc"], &ToggleControl::toggleFlipped, [=](bool state) { + slcSettings->setEnabled(state); + slcSettings->setVisible(state); + }); + slcSettings->setEnabled(toggles["EnableSlc"]->isToggled()); + slcSettings->setVisible(toggles["EnableSlc"]->isToggled()); + + connect(toggles["CustomOffsets"], &ToggleControl::toggleFlipped, [=](bool state) { + customOffsetsSettings->setEnabled(state); + }); + customOffsetsSettings->setEnabled(toggles["CustomOffsets"]->isToggled()); + + // update "FRICTION" and "LAT_ACCEL_FACTOR" titles when going onroad/offroad + connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { + friction->setEnabled(offroad || toggles["TorquedOverride"]->isToggled()); + lat_accel_factor->setEnabled(offroad || toggles["TorquedOverride"]->isToggled()); + + friction->refresh(); + lat_accel_factor->refresh(); + }); + + // update "FRICTION" and "LAT_ACCEL_FACTOR" titles when TorquedOverride is flipped + connect(toggles["TorquedOverride"], &ToggleControl::toggleFlipped, [=](bool state) { + friction->setEnabled(params.getBool("IsOffroad") || state); + lat_accel_factor->setEnabled(params.getBool("IsOffroad") || state); + + friction->setTitle(state ? "FRICTION - Live && Offline" : "FRICTION - Offline Only"); + lat_accel_factor->setTitle(state ? "LAT_ACCEL_FACTOR - Live && Offline" : "LAT_ACCEL_FACTOR - Offline Only"); + + friction->refresh(); + lat_accel_factor->refresh(); + }); + + param_watcher = new ParamWatcher(this); + + QObject::connect(param_watcher, &ParamWatcher::paramChanged, [=](const QString ¶m_name, const QString ¶m_value) { + updateToggles(); + }); + + sunnypilotScreen = new QWidget(this); + QVBoxLayout* vlayout = new QVBoxLayout(sunnypilotScreen); + vlayout->setContentsMargins(50, 20, 50, 20); + + scrollView = new ScrollView(list, this); + vlayout->addWidget(scrollView, 1); + main_layout->addWidget(sunnypilotScreen); + main_layout->addWidget(mads_settings); + main_layout->addWidget(lane_change_settings); + main_layout->addWidget(custom_offsets_settings); + main_layout->addWidget(slc_settings); + main_layout->addWidget(slw_settings); + main_layout->addWidget(slp_settings); + + setStyleSheet(R"( + #back_btn { + font-size: 50px; + margin: 0px; + padding: 15px; + border-width: 0; + border-radius: 30px; + color: #dddddd; + background-color: #393939; + } + #back_btn:pressed { + background-color: #4a4a4a; + } + )"); + + main_layout->setCurrentWidget(sunnypilotScreen); +} + +void SunnypilotPanel::showEvent(QShowEvent *event) { + updateToggles(); +} + +void SunnypilotPanel::hideEvent(QHideEvent *event) { + main_layout->setCurrentWidget(sunnypilotScreen); +} + +void SunnypilotPanel::updateToggles() { + param_watcher->addParam("DynamicLaneProfile"); + param_watcher->addParam("IsOffroad"); + + if (!isVisible()) { + return; + } + + dlp_settings->setButton("DynamicLaneProfile"); + + // toggle VisionCurveLaneless when DynamicLaneProfile == 2/Auto + auto dynamic_lane_profile_param = QString::fromStdString(params.get("DynamicLaneProfile")); + toggles["VisionCurveLaneless"]->setEnabled(dynamic_lane_profile_param == "2"); + toggles["VisionCurveLaneless"]->refresh(); + + bool custom_driving_model = params.getBool("CustomDrivingModel"); + auto driving_model_gen = QString::fromStdString(params.get("DrivingModelGeneration")); + bool model_use_lateral_planner = custom_driving_model && driving_model_gen == "1"; + auto driving_model_name = custom_driving_model && driving_model_gen != "0" ? QString::fromStdString(params.get("DrivingModelName")) : CURRENT_MODEL; + QString driving_model_text = QString("" + driving_model_name + ""); + dlp_settings->setEnabled(model_use_lateral_planner); + toggles["VisionCurveLaneless"]->setVisible(model_use_lateral_planner); + auto dlp_incompatible_desc = tr("Dynamic Lane Profile is not available with the current Driving Model [") + driving_model_text + tr("]."); + + toggles["CustomOffsets"]->setEnabled(model_use_lateral_planner); + auto custom_offsets_incompatible_desc = tr("Custom Offsets is not available with the current Driving Model [") + driving_model_text + tr("]."); + + auto enforce_torque_lateral = toggles["EnforceTorqueLateral"]; + auto custom_torque_lateral = toggles["CustomTorqueLateral"]; + auto live_torque = toggles["LiveTorque"]; + auto live_torque_relaxed = toggles["LiveTorqueRelaxed"]; + auto torqued_override = toggles["TorquedOverride"]; + auto nnff_toggle = toggles["NNFF"]; + + auto custom_stock_long_param = params.getBool("CustomStockLong"); + auto v_tsc = toggles["TurnVisionControl"]; + auto m_tsc = toggles["TurnSpeedControl"]; + auto reverse_acc = toggles["ReverseAccChange"]; + auto slc_toggle = toggles["EnableSlc"]; + + auto is_offroad = params.getBool("IsOffroad"); + + // NNLC/NNFF + QString nnff_available_desc = tr("NNLC is currently not available on this platform."); + QString nnff_fuzzy_desc = tr("Match: \"Exact\" is ideal, but \"Fuzzy\" is fine too. Reach out to the sunnypilot team in the #tuning-nnlc channel at the sunnypilot Discord server if there are any issues."); + QString nnff_status_init = tr("⚠️ Start the car to check car compatibility"); + QString nnff_not_loaded = tr("⚠️ NNLC Not Loaded"); + QString nnff_loaded = tr("✅ NNLC Loaded"); + auto _car_model = QString::fromStdString(params.get("NNFFCarModel")); + + const bool is_release_sp = params.getBool("IsReleaseSPBranch"); + auto cp_bytes = params.get("CarParamsPersistent"); + if (!cp_bytes.empty()) { + AlignedBuffer aligned_buf; + capnp::FlatArrayMessageReader cmsg(aligned_buf.align(cp_bytes.data(), cp_bytes.size())); + cereal::CarParams::Reader CP = cmsg.getRoot(); + + // NNLC/NNFF + { + if (CP.getSteerControlType() == cereal::CarParams::SteerControlType::ANGLE) { + enforce_torque_lateral->setEnabled(false); + params.remove("EnforceTorqueLateral"); + + nnff_toggle->setDescription(nnffDescriptionBuilder(nnff_available_desc)); + nnff_toggle->setEnabled(false); + params.remove("NNFF"); + } else if (nnff_toggle->isToggled()) { + if (CP.getLateralTuning().which() == cereal::CarParams::LateralTuning::TORQUE) { + QString nn_model_name = QString::fromStdString(CP.getLateralTuning().getTorque().getNnModelName()); + QString nn_fuzzy = QString::fromUtf8(CP.getLateralTuning().getTorque().getNnModelFuzzyMatch() ? "Fuzzy" : "Exact"); + + nnff_toggle->setDescription(nnffDescriptionBuilder((nn_model_name == "") ? nnff_status_init : + (nn_model_name == "mock") ? (nnff_not_loaded + "
Reach out to the sunnypilot team in the #tuning-nnlc channel at the sunnypilot Discord server and donate logs to get NNLC loaded for your car.") : + (nnff_loaded + " | Match = " + nn_fuzzy + " | " + _car_model + "

" + nnff_fuzzy_desc))); + enforce_torque_lateral->setEnabled(false); + } else { + nnff_toggle->setDescription(nnffDescriptionBuilder(nnff_status_init)); + } + } else { + nnff_toggle->setDescription(nnff_description); + } + } + + if (is_release_sp) { + params.remove("TurnSpeedControl"); + } + m_tsc->setVisible(!is_release_sp); + + if (hasLongitudinalControl(CP) || custom_stock_long_param) { + v_tsc->setEnabled(true); + m_tsc->setEnabled(true); + reverse_acc->setEnabled(true); + slc_toggle->setEnabled(true); + } else { + v_tsc->setEnabled(false); + m_tsc->setEnabled(false); + reverse_acc->setEnabled(false); + slc_toggle->setEnabled(false); + params.remove("EnableSlc"); + slcSettings->setEnabled(false); + } + + enforce_torque_lateral->refresh(); + slc_toggle->refresh(); + nnff_toggle->refresh(); + m_tsc->refresh(); + } else { + v_tsc->setEnabled(false); + m_tsc->setVisible(false); // TODO: temporarily disable M-TSC until the reimplementation is in place. Remove this line to re-enable the toggle. + reverse_acc->setEnabled(false); + slc_toggle->setEnabled(false); + slcSettings->setEnabled(false); + + nnff_toggle->setDescription(nnff_toggle->isToggled() ? nnffDescriptionBuilder(nnff_status_init) : nnff_description); + } + + if (nnff_toggle->getDescription() != nnff_description) { + nnff_toggle->showDescription(); + } + + // toggle names to update when EnforceTorqueLateral is flipped + std::vector torqueLateralGroup{"CustomTorqueLateral", "LiveTorque", "LiveTorqueRelaxed", "TorquedOverride"}; + for (const auto& torqueLateralToggle : torqueLateralGroup) { + if (toggles.find(torqueLateralToggle) != toggles.end()) { + if (nnff_toggle->isToggled()) { + toggles[torqueLateralToggle]->setVisible(false); + toggles[torqueLateralToggle]->setEnabled(false); + } + } + } + + for (const auto& torqueLateralToggle : torqueLateralGroup) { + if (toggles.find(torqueLateralToggle) != toggles.end()) { + toggles[torqueLateralToggle]->setVisible(enforce_torque_lateral->isToggled()); + toggles[torqueLateralToggle]->setEnabled(enforce_torque_lateral->isToggled()); + } + } + + if (enforce_torque_lateral->isToggled()) { + live_torque_relaxed->setVisible(live_torque->isToggled()); + torqued_override->setVisible(custom_torque_lateral->isToggled()); + } else { + params.putBool("LiveTorque", false); + params.putBool("CustomTorqueLateral", false); + } + + // toggle names to update when CustomTorqueLateral is flipped + std::vector customTorqueGroup{friction, lat_accel_factor}; + for (const auto& customTorqueControl : customTorqueGroup) { + customTorqueControl->setVisible(!(nnff_toggle->isToggled() || !custom_torque_lateral->isToggled())); + customTorqueControl->setEnabled(!(nnff_toggle->isToggled() || !custom_torque_lateral->isToggled())); + } + + toggles["CustomTorqueLateral"]->setEnabled(is_offroad); + toggles["LiveTorque"]->setEnabled(is_offroad); + toggles["LiveTorqueRelaxed"]->setEnabled(is_offroad); + + toggles["CustomOffsets"]->setDescription((model_use_lateral_planner ? "" : custom_offsets_incompatible_desc + "

") + custom_offsets_description); + dlp_settings->setDescription((model_use_lateral_planner ? "" : dlp_incompatible_desc + "

") + dlp_description); +} + +TorqueFriction::TorqueFriction() : SPOptionControl ( + "TorqueFriction", + tr("FRICTION"), + tr("Adjust Friction for the Torque Lateral Controller. Live: Override self-tune values; Offline: Override self-tune offline values at car restart."), + "../assets/offroad/icon_blank.png", + {0, 50}) { + + refresh(); +} + +void TorqueFriction::refresh() { + float torqueFrictionVal = QString::fromStdString(params.get("TorqueFriction")).toInt() * 0.01; + setTitle(params.getBool("TorquedOverride") ? "FRICTION - Live && Offline" : "FRICTION - Offline Only"); + setLabel(QString::number(torqueFrictionVal)); +} + +TorqueMaxLatAccel::TorqueMaxLatAccel() : SPOptionControl ( + "TorqueMaxLatAccel", + tr("LAT_ACCEL_FACTOR"), + tr("Adjust Max Lateral Acceleration for the Torque Lateral Controller. Live: Override self-tune values; Offline: Override self-tune offline values at car restart."), + "../assets/offroad/icon_blank.png", + {1, 500}) { + + refresh(); +} + +void TorqueMaxLatAccel::refresh() { + float torqueMaxLatAccelVal = QString::fromStdString(params.get("TorqueMaxLatAccel")).toInt() * 0.01; + QString unit = "m/s²"; + setTitle(params.getBool("TorquedOverride") ? "LAT_ACCEL_FACTOR - Live && Offline" : "LAT_ACCEL_FACTOR - Offline Only"); + setLabel(QString::number(torqueMaxLatAccelVal) + " " + unit); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.h new file mode 100644 index 0000000000..31e67bf96a --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.h @@ -0,0 +1,84 @@ +#pragma once + +#include "common/model.h" +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/custom_offsets_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/lane_change_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/mads_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/speed_limit_control_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/speed_limit_warning_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.h" +#include "selfdrive/ui/qt/util.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" + +class TorqueFriction : public SPOptionControl { + Q_OBJECT + +public: + TorqueFriction(); + + void refresh(); + +private: + Params params; +}; + +class TorqueMaxLatAccel : public SPOptionControl { + Q_OBJECT + +public: + TorqueMaxLatAccel(); + + void refresh(); + +private: + Params params; +}; + +class SunnypilotPanel : public QFrame { + Q_OBJECT + +public: + explicit SunnypilotPanel(QWidget *parent = nullptr); + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent* event) override; + +public slots: + void updateToggles(); + +private: + QStackedLayout* main_layout = nullptr; + QWidget* sunnypilotScreen = nullptr; + MadsSettings* mads_settings = nullptr; + SubPanelButton *slcSettings = nullptr; + SlcSettings* slc_settings = nullptr; + SubPanelButton *slwSettings = nullptr; + SpeedLimitWarningSettings* slw_settings = nullptr; + SubPanelButton *slpSettings = nullptr; + SpeedLimitPolicySettings* slp_settings = nullptr; + LaneChangeSettings* lane_change_settings = nullptr; + CustomOffsetsSettings* custom_offsets_settings = nullptr; + Params params; + std::map toggles; + ParamWatcher *param_watcher; + + TorqueFriction *friction; + TorqueMaxLatAccel *lat_accel_factor; + ButtonParamControl *dlp_settings; + + ScrollView *scrollView = nullptr; + + const QString nnff_description = QString("%1
" + "%2") + .arg(tr("Formerly known as \"NNFF\", this replaces the lateral \"torque\" controller with one using a neural network trained on each car's (actually, each separate EPS firmware) driving data for increased controls accuracy.")) + .arg(tr("Reach out to the sunnypilot team in the #tuning-nnlc channel at the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.")); + + QString nnffDescriptionBuilder(const QString &custom_description) { + QString description = "" + custom_description + "

" + nnff_description; + return description; + } + + const QString custom_offsets_description = QString(tr("Add custom offsets to Camera and Path in sunnypilot.")); + const QString dlp_description = QString(tr("Default is Laneless. In Auto mode, sunnnypilot dynamically chooses between Laneline or Laneless model based on lane recognition confidence level on road and certain conditions.")); +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/trips_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/trips_settings.cc new file mode 100644 index 0000000000..e21dc675ae --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/trips_settings.cc @@ -0,0 +1,29 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/trips_settings.h" + +TripsPanel::TripsPanel(QWidget* parent) : QFrame(parent) { + QVBoxLayout* main_layout = new QVBoxLayout(this); + main_layout->setMargin(0); + + // main content + main_layout->addSpacing(25); + center_layout = new QStackedLayout(); + + driveStatsWidget = new DriveStats; + driveStatsWidget->setStyleSheet(R"( + QLabel[type="title"] { font-size: 51px; font-weight: 500; } + QLabel[type="number"] { font-size: 78px; font-weight: 500; } + QLabel[type="unit"] { font-size: 51px; font-weight: 300; color: #A0A0A0; } + )"); + center_layout->addWidget(driveStatsWidget); + + main_layout->addLayout(center_layout, 1); + + setStyleSheet(R"( + * { + color: white; + } + TripsPanel > QLabel { + font-size: 55px; + } + )"); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/trips_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/trips_settings.h new file mode 100644 index 0000000000..dc77acac75 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/trips_settings.h @@ -0,0 +1,17 @@ +#pragma once + +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/sunnypilot/drive_stats.h" + +class TripsPanel : public QFrame { + Q_OBJECT + +public: + explicit TripsPanel(QWidget* parent = 0); + +private: + Params params; + + QStackedLayout* center_layout; + DriveStats *driveStatsWidget; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.cc new file mode 100644 index 0000000000..aafaae58d4 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.cc @@ -0,0 +1,141 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.h" + +VehiclePanel::VehiclePanel(QWidget *parent) : QWidget(parent) { + main_layout = new QStackedLayout(this); + home = new QWidget(this); + QVBoxLayout* fcr_layout = new QVBoxLayout(home); + fcr_layout->setContentsMargins(0, 20, 0, 20); + + QString set = QString::fromStdString(params.get("CarModelText")); + QPushButton* setCarBtn = new QPushButton(((set == "=== Not Selected ===") || (set.length() == 0)) ? "Select your car" : set); + setCarBtn->setObjectName("setCarBtn"); + setCarBtn->setStyleSheet("margin-right: 30px;"); + connect(setCarBtn, &QPushButton::clicked, [=]() { + QMap cars = getCarNames(); + QString currentCar = QString::fromStdString(params.get("CarModel")); + QString selection = MultiOptionDialog::getSelection("Select your car", cars.keys(), cars.key(currentCar), this); + if (!selection.isEmpty()) { + params.put("CarModel", cars[selection].toStdString()); + params.put("CarModelText", selection.toStdString()); + qApp->exit(18); + watchdog_kick(0); + } + }); + fcr_layout->addSpacing(10); + fcr_layout->addWidget(setCarBtn, 0, Qt::AlignRight); + fcr_layout->addSpacing(10); + + home_widget = new QWidget(this); + QVBoxLayout* toggle_layout = new QVBoxLayout(home_widget); + home_widget->setObjectName("homeWidget"); + + ScrollView *scroller = new ScrollView(home_widget, this); + scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + fcr_layout->addWidget(scroller, 1); + + main_layout->addWidget(home); + + setStyleSheet(R"( + #setCarBtn { + border-radius: 50px; + font-size: 50px; + font-weight: 500; + height:100px; + padding: 0 35 0 35; + color: #E4E4E4; + background-color: #393939; + } + #setCarBtn:pressed { + background-color: #4a4a4a; + } + )"); + + auto toggle_panel = new SPVehiclesTogglesPanel(this); + toggle_layout->addWidget(toggle_panel); +} + +SPVehiclesTogglesPanel::SPVehiclesTogglesPanel(VehiclePanel *parent) : ListWidget(parent, false) { + setSpacing(50); + + // Hyundai/Kia/Genesis + addItem(new LabelControl(tr("Hyundai/Kia/Genesis"))); + auto hkgSmoothStop = new ParamControl( + "HkgSmoothStop", + "HKG CAN: Smoother Stopping Performance (Beta)", + "Smoother stopping behind a stopped car or desired stopping event. This is only applicable to HKG CAN platforms using openpilot longitudinal control.", + "../assets/offroad/icon_blank.png" + ); + hkgSmoothStop->setConfirmation(true, false); + addItem(hkgSmoothStop); + + // Subaru + addItem(new LabelControl(tr("Subaru"))); + auto subaruManualParkingBrakeSng = new ParamControl( + "SubaruManualParkingBrakeSng", + tr("Manual Parking Brake: Stop and Go (Beta)"), + tr("Experimental feature to enable stop and go for Subaru Global models with manual handbrake. Models with electric parking brake should keep this disabled. Thanks to martinl for this implementation!"), + "../assets/offroad/icon_blank.png" + ); + subaruManualParkingBrakeSng->setConfirmation(true, false); + addItem(subaruManualParkingBrakeSng); + + // Toyota/Lexus + addItem(new LabelControl(tr("Toyota/Lexus"))); + stockLongToyota = new ParamControl( + "StockLongToyota", + "Enable Stock Toyota Longitudinal Control", + "sunnypilot will not take over control of gas and brakes. Stock Toyota longitudinal control will be used.", + "../assets/offroad/icon_blank.png" + ); + stockLongToyota->setConfirmation(true, false); + addItem(stockLongToyota); + + auto lkasToggle = new ParamControl( + "LkasToggle", + tr("Allow M.A.D.S. toggling w/ LKAS Button (Beta)"), + QString("%1
" + "

%2


") + .arg(tr("Allows M.A.D.S. engagement/disengagement with \"LKAS\" button from the steering wheel.")) + .arg(tr("Note: Enabling this toggle may have unexpected behavior with steering control. It is the driver's responsibility to observe their environment and make decisions accordingly.")), + "../assets/offroad/icon_blank.png" + ); + lkasToggle->setConfirmation(true, false); + addItem(lkasToggle); + + auto toyotaTss2LongTune = new ParamControl( + "ToyotaTSS2Long", + "TSS2 Longitudinal: Custom Tuning", + "Smoother longitudinal performance for Toyota/Lexus TSS2/LSS2 cars. Big thanks to dragonpilot-community for this implementation.", + "../assets/offroad/icon_blank.png" + ); + toyotaTss2LongTune->setConfirmation(true, false); + addItem(toyotaTss2LongTune); + + auto toyotaSngHack = new ParamControl( + "ToyotaSnG", + "Enable Stop and Go Hack", + "sunnypilot will allow some Toyota/Lexus cars to auto resume during stop and go traffic. This feature is only applicable to certain models. Use at your own risk.", + "../assets/offroad/icon_blank.png" + ); + toyotaSngHack->setConfirmation(true, false); + addItem(toyotaSngHack); + + // Volkswagen + addItem(new LabelControl(tr("Volkswagen"))); + auto volkswagenCCOnly = new ParamControl( + "VwCCOnly", + tr("Enable CC Only support"), + tr("sunnypilot supports Volkswagen MQB CC only platforms with this toggle enabled. Only enable this toggle if your car does not have ACC from the factory."), + "../assets/offroad/icon_blank.png" + ); + volkswagenCCOnly->setConfirmation(true, false); + addItem(volkswagenCCOnly); + + // trigger offroadTransition when going onroad/offroad + connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { + hkgSmoothStop->setEnabled(offroad); + toyotaTss2LongTune->setEnabled(offroad); + toyotaSngHack->setEnabled(offroad); + volkswagenCCOnly->setEnabled(offroad); + }); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.h new file mode 100644 index 0000000000..07e2b2f3ea --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include "common/watchdog.h" +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/util.h" +#include "selfdrive/ui/qt/widgets/controls.h" +#include "selfdrive/ui/qt/widgets/scrollview.h" + +class VehiclePanel : public QWidget { + Q_OBJECT + +public: + explicit VehiclePanel(QWidget *parent = nullptr); + +private: + Params params; + + QStackedLayout* main_layout = nullptr; + QWidget* home = nullptr; + + QWidget* home_widget; +}; + +class SPVehiclesTogglesPanel : public ListWidget { + Q_OBJECT +public: + explicit SPVehiclesTogglesPanel(VehiclePanel *parent); + +private: + Params params; + + ParamControl *stockLongToyota; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.cc new file mode 100644 index 0000000000..f75b98ac9e --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.cc @@ -0,0 +1,114 @@ +#include "selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.h" + +VisualsPanel::VisualsPanel(QWidget *parent) : ListWidget(parent) { + // param, title, desc, icon + std::vector> toggle_defs{ + { + "BrakeLights", + tr("Display Braking Status"), + tr("Enable this will turn the current speed value to red while the brake is used."), + "../assets/offroad/icon_blank.png", + }, + { + "StandStillTimer", + tr("Display Stand Still Timer"), + tr("Enable this will display time spent at a stop (i.e., at a stop lights, stop signs, traffic congestions)."), + "../assets/offroad/icon_blank.png", + }, + { + "ReverseDmCam", + tr("Display DM Camera in Reverse Gear"), + tr("Show Driver Monitoring camera while the car is in reverse gear."), + "../assets/offroad/icon_blank.png", + }, + { + "ShowDebugUI", + tr("OSM: Show debug UI elements"), + tr("OSM: Show UI elements that aid debugging."), + "../assets/offroad/icon_blank.png", + }, + { + "TrueVEgoUi", + tr("Speedometer: Display True Speed"), + tr("Display the true vehicle current speed from wheel speed sensors."), + "../assets/offroad/icon_blank.png", + }, + { + "HideVEgoUi", + tr("Speedometer: Hide from Onroad Screen"), + "", + "../assets/offroad/icon_blank.png", + }, + { + "EndToEndLongAlertUI", + tr("Display End-to-end Longitudinal Status (Beta)"), + tr("Enable this will display an icon that appears when the End-to-end model decides to start or stop."), + "../assets/offroad/icon_blank.png", + }, + { + "MapboxFullScreen", + tr("Navigation: Display in Full Screen"), + QString(tr("Enable this will display the built-in navigation in full screen.
To switch back to driving view, tap on the border edge.")), + "../assets/offroad/icon_blank.png", + }, + { + "Map3DBuildings", + tr("Map: Display 3D Buildings"), + tr("Parse and display 3D buildings on map. Thanks to jakethesnake420 for this implementation."), + "../assets/offroad/icon_blank.png", + }, + }; + + // Visuals: Developer UI Info (Dev UI) + std::vector dev_ui_settings_texts{tr("Off"), tr("5 Metrics"), tr("10 Metrics")}; + dev_ui_settings = new ButtonParamControl( + "DevUIInfo", "Developer UI", "Display real-time parameters and metrics from various sources.", + "../assets/offroad/icon_blank.png", + dev_ui_settings_texts, + 380 + ); + dev_ui_settings->showDescription(); + + // Visuals: Display Metrics above Chevron + std::vector chevron_info_settings_texts{tr("Off"), tr("Distance"), tr("Speed")}; + chevron_info_settings = new ButtonParamControl( + "ChevronInfo", "Metrics above Chevron", "Display useful metrics above the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control).", + "../assets/offroad/icon_blank.png", + chevron_info_settings_texts, + 320 + ); + chevron_info_settings->showDescription(); + + for (auto &[param, title, desc, icon] : toggle_defs) { + auto toggle = new ParamControl(param, title, desc, icon, this); + + addItem(toggle); + toggles[param.toStdString()] = toggle; + + if (param == "StandStillTimer") { + addItem(dev_ui_settings); + } + + if (param == "HideVEgoUi") { + addItem(chevron_info_settings); + } + } + + std::vector sidebar_temp_texts{tr("Off"), tr("Ambient"), tr("RAM"), tr("CPU"), tr("GPU"), tr("Max")}; + sidebar_temp_setting = new ButtonParamControl( + "SidebarTemperatureOptions", "Display Temperature on Sidebar", "", + "../assets/offroad/icon_blank.png", + sidebar_temp_texts, + 255 + ); + sidebar_temp_setting->showDescription(); + addItem(sidebar_temp_setting); + + // trigger offroadTransition when going onroad/offroad + connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { + }); + + QObject::connect(toggles["MapboxFullScreen"], &ToggleControl::toggleFlipped, [=](bool state) { + toggles["MapboxFullScreen"]->showDescription(); + }); +} diff --git a/selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.h b/selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.h new file mode 100644 index 0000000000..3ea5825f59 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.h @@ -0,0 +1,19 @@ +#pragma once + +#include "selfdrive/ui/ui.h" +#include "selfdrive/ui/qt/widgets/controls.h" + +class VisualsPanel : public ListWidget { + Q_OBJECT + +public: + explicit VisualsPanel(QWidget *parent = nullptr); + +private: + Params params; + std::map toggles; + + ButtonParamControl *dev_ui_settings; + ButtonParamControl *chevron_info_settings; + ButtonParamControl *sidebar_temp_setting; +}; diff --git a/selfdrive/ui/qt/offroad/sunnypilot_main.h b/selfdrive/ui/qt/offroad/sunnypilot_main.h new file mode 100644 index 0000000000..4f8ace83b5 --- /dev/null +++ b/selfdrive/ui/qt/offroad/sunnypilot_main.h @@ -0,0 +1,10 @@ +#pragma once + +#include "selfdrive/ui/qt/offroad/sunnypilot/display_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/sunnypilot_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/vehicle_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/visuals_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/trips_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/monitoring_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/osm_settings.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/software_settings_sp.h" diff --git a/selfdrive/ui/qt/offroad/sunnypilot_settings.cc b/selfdrive/ui/qt/offroad/sunnypilot_settings.cc deleted file mode 100644 index b12ae2474b..0000000000 --- a/selfdrive/ui/qt/offroad/sunnypilot_settings.cc +++ /dev/null @@ -1,1123 +0,0 @@ -#include -#include -#include -#include -#include - -#include "common/watchdog.h" -#include "selfdrive/ui/qt/api.h" -#include "selfdrive/ui/qt/offroad/sunnypilot_settings.h" -#include "selfdrive/ui/qt/widgets/input.h" -#include "selfdrive/ui/qt/widgets/scrollview.h" -#include "selfdrive/ui/qt/util.h" - -#include "selfdrive/ui/ui.h" - -SPGeneralPanel::SPGeneralPanel(QWidget *parent) : ListWidget(parent) { - // param, title, desc, icon - std::vector> toggle_defs{ - { - "QuietDrive", - tr("Quiet Drive 🤫"), - tr("sunnypilot will display alerts but only play the most important warning sounds. This feature can be toggled while the car is on."), - "../assets/offroad/icon_mute.png", - }, - { - "EndToEndLongAlertLight", - tr("Green Traffic Light Chime (Beta)"), - QString("%1
" - "

%2


") - .arg(tr("A chime will play when the traffic light you are waiting for turns green and you have no vehicle in front of you. If you are waiting behind another vehicle, the chime will play once the vehicle advances unless ACC is engaged.")) - .arg(tr("Note: This chime is only designed as a notification. It is the driver's responsibility to observe their environment and make decisions accordingly.")), - "../assets/offroad/icon_road.png", - }, - { - "EndToEndLongAlertLead", - tr("Lead Vehicle Departure Alert"), - QString("%1
" - "

%2


") - .arg(tr("Enable this will notify when the leading vehicle drives away.")) - .arg(tr("Note: This chime is only designed as a notification. It is the driver's responsibility to observe their environment and make decisions accordingly.")), - "../assets/offroad/icon_road.png", - }, - { - "HotspotOnBoot", - tr("Retain hotspot/tethering state"), - tr("Enabling this toggle will retain the hotspot/tethering toggle state across reboots."), - "../assets/offroad/icon_network.png", - }, - { - "OnroadScreenOffEvent", - tr("Driving Screen Off: Non-Critical Events"), - QString("%1
" - "

%2


" - "

%3


") - .arg(tr("When Driving Screen Off Timer is not set to \"Always On\":")) - .arg(tr("Enabled: Wake the brightness of the screen to display all events.")) - .arg(tr("Disabled: Wake the brightness of the screen to display critical events.")), - "../assets/offroad/icon_blank.png", - }, - { - "ScreenRecorder", - tr("Enable Screen Recorder"), - tr("Enable this will display a button on the onroad screen to toggle on or off real-time screen recording with UI elements."), - "../assets/offroad/icon_calibration.png" - }, - { - "DisableOnroadUploads", - tr("Disable Onroad Uploads"), - tr("Disable uploads completely when onroad. Necessary to avoid high data usage when connected to Wi-Fi hotspot. Turn on this feature if you are looking to utilize map-based features, such as Speed Limit Control (SLC) and Map-based Turn Speed Control (MTSC)."), - "../assets/offroad/icon_network.png", - }, - { - "EnableDebugSnapshot", - tr("Debug snapshot on screen center tap"), - tr("Stores snapshot file with current state of some modules."), - "../assets/offroad/icon_calibration.png" - } - }; - - // General: Onroad Screen Off (Auto Onroad Screen Timer) - onroad_screen_off = new OnroadScreenOff(); - onroad_screen_off->setUpdateOtherToggles(true); - connect(onroad_screen_off, &SPOptionControl::updateLabels, onroad_screen_off, &OnroadScreenOff::refresh); - connect(onroad_screen_off, &SPOptionControl::updateOtherToggles, this, &SPGeneralPanel::updateToggles); - - // General: Onroad Screen Off Brightness - onroad_screen_off_brightness = new OnroadScreenOffBrightness(); - connect(onroad_screen_off_brightness, &SPOptionControl::updateLabels, onroad_screen_off_brightness, &OnroadScreenOffBrightness::refresh); - - // General: Brightness Control (Global) - auto brightness_control = new BrightnessControl(); - connect(brightness_control, &SPOptionControl::updateLabels, brightness_control, &BrightnessControl::refresh); - - // General: Max Time Offroad (Shutdown timer) - auto max_time_offroad = new MaxTimeOffroad(); - connect(max_time_offroad, &SPOptionControl::updateLabels, max_time_offroad, &MaxTimeOffroad::refresh); - - for (auto &[param, title, desc, icon] : toggle_defs) { - auto toggle = new ParamControl(param, title, desc, icon, this); - - addItem(toggle); - toggles[param.toStdString()] = toggle; - - if (param == "HotspotOnBoot") { - // General: Max Time Offroad (Shutdown timer) - addItem(max_time_offroad); - - addItem(onroad_screen_off); - - addItem(onroad_screen_off_brightness); - } - - if (param == "OnroadScreenOffEvent") { - // General: Brightness Control (Global) - addItem(brightness_control); - } - } - - toggles["EndToEndLongAlertLight"]->setConfirmation(true, false); -} - -void SPGeneralPanel::showEvent(QShowEvent *event) { - updateToggles(); -} - -void SPGeneralPanel::updateToggles() { - // toggle names to update when OnroadScreenOff is toggled - onroad_screen_off_brightness->setVisible(QString::fromStdString(params.get("OnroadScreenOff")) != "-2"); - toggles["OnroadScreenOffEvent"]->setVisible(QString::fromStdString(params.get("OnroadScreenOff")) != "-2"); -} - -SPControlsPanel::SPControlsPanel(QWidget *parent) : ListWidget(parent) { - // param, title, desc, icon - std::vector> toggle_defs{ - { - "EnableMads", - tr("Enable M.A.D.S."), - tr("Enable the beloved M.A.D.S. feature. Disable toggle to revert back to stock openpilot engagement/disengagement."), - "../assets/offroad/icon_openpilot.png", - }, - { - "DisengageLateralOnBrake", - tr("Disengage ALC On Brake Pedal ℹ"), - QString("%1
" - "

%2


" - "

%3


") - .arg(tr("Define brake pedal interactions with sunnypilot when M.A.D.S. is enabled.")) - .arg(tr("Enabled: Pressing the brake pedal will disengage Automatic Lane Centering (ALC) on sunnypilot.")) - .arg(tr("Disabled: Pressing the brake pedal will NOT disengage Automatic Lane Centering (ALC) on sunnypilot.")), - "../assets/offroad/icon_openpilot.png", - }, - { - "AccMadsCombo", - tr("Enable ACC+MADS with RES+/SET-"), - QString("%1
" - "

%2


") - .arg(tr("Engage both M.A.D.S. and ACC with a single press of RES+ or SET- button.")) - .arg(tr("Note: Once M.A.D.S. is engaged via this mode, it will remain engaged until it is manually disabled via the M.A.D.S. button or car shut off.")), - "../assets/offroad/icon_openpilot.png", - }, - { - "MadsCruiseMain", - tr("Toggle M.A.D.S. with Cruise Main"), - tr("Allows M.A.D.S. engagement/disengagement with \"Cruise Main\" cruise control button from the steering wheel."), - "../assets/offroad/icon_openpilot.png", - }, - { - "BelowSpeedPause", - tr("Pause Lateral Below Speed w/ Blinker"), - tr("Enable this toggle to pause lateral actuation with blinker when traveling below 30 MPH or 50 KM/H."), - "../assets/offroad/icon_openpilot.png", - }, - { - "RoadEdge", - tr("Block Lane Change: Road Edge Detection"), - tr("Enable this toggle to block lane change when road edge is detected on the stalk actuated side."), - "../assets/offroad/icon_openpilot.png", - }, - // Dynamic Lane Profile group will fit here - { - "VisionCurveLaneless", - tr("Laneless for Curves in \"Auto lane\""), - tr("While in Auto Lane, switch to Laneless for current/future curves."), - "../assets/offroad/icon_blank.png", - }, - { - "CustomOffsets", - tr("Custom Offsets"), - tr("Add custom offsets to Camera and Path in sunnypilot."), - "../assets/offroad/icon_metric.png", - }, - { - "AutoLaneChangeBsmDelay", - tr("Auto Lane Change: Delay with Blind Spot"), - tr("Toggle to enable a delay timer for seamless lane changes when blind spot monitoring (BSM) detects a obstructing vehicle, ensuring safe maneuvering."), - "../assets/offroad/icon_blank.png", - }, - { - "EnforceTorqueLateral", - tr("Enforce Torque Lateral Control"), - tr("Enable this to enforce sunnypilot to steer with Torque lateral control."), - "../assets/offroad/icon_calibration.png", - }, - { - "LiveTorque", - tr("Enable Self-Tune"), - tr("Enables self-tune for Torque lateral control for platforms that do not use Torque lateral control by default."), - "../assets/offroad/icon_blank.png", - }, - { - "LiveTorqueRelaxed", - tr("Less Restrict Settings for Self-Tune (Beta)"), - tr("Less strict settings when using Self-Tune. This allows torqued to be more forgiving when learning values."), - "../assets/offroad/icon_blank.png", - }, - { - "CustomTorqueLateral", - tr("Enable Custom Tuning"), - tr("Enables custom tuning for Torque lateral control. Modifying FRICTION and LAT_ACCEL_FACTOR below will override the offline values indicated in the YAML files within \"selfdrive/torque_data\". The values will also be used live when \"Override Self-Tune\" toggle is enabled."), - "../assets/offroad/icon_blank.png", - }, - { - "TorquedOverride", - tr("Manual Real-Time Tuning"), - tr("Enforces the torque lateral controller to use the fixed values instead of the learned values from Self-Tune. Enabling this toggle overrides Self-Tune values."), - "../assets/offroad/icon_blank.png", - }, - { - "HandsOnWheelMonitoring", - tr("Enable Hands on Wheel Monitoring"), - tr("Monitor and alert when driver is not keeping the hands on the steering wheel."), - "../assets/offroad/icon_openpilot.png", - }, - { - "TurnVisionControl", - tr("Enable Vision Based Turn Speed Control (V-TSC)"), - tr("Use vision path predictions to estimate the appropriate speed to drive through turns ahead."), - "../assets/offroad/icon_road.png", - }, - { - "SpeedLimitControl", - tr("Enable Speed Limit Control (SLC)"), - tr("Use speed limit signs information from map data and car interface (if applicable) to automatically adapt cruise speed to road limits."), - "../assets/offroad/icon_speed_limit.png", - }, - { - "SpeedLimitPercOffset", - tr("Enable Speed Limit Offset"), - tr("Set speed limit slightly higher than actual speed limit for a more natural drive."), - "../assets/offroad/icon_speed_limit.png", - }, - { - "TurnSpeedControl", - tr("Enable Map Data Turn Speed Control (M-TSC)"), - tr("Use curvature information from map data to define speed limits to take turns ahead."), - "../assets/offroad/icon_openpilot.png", - }, - { - "ReverseAccChange", - tr("ACC +/-: Long Press Reverse"), - QString("%1
" - "

%2


" - "

%3


") - .arg(tr("Change the ACC +/- buttons behavior with cruise speed change in sunnypilot.")) - .arg(tr("Disabled (Stock): Short=1, Long = 5 (imperial) / 10 (metric)")) - .arg(tr("Enabled: Short = 5 (imperial) / 10 (metric), Long=1")), - "../assets/offroad/icon_acc_change.png", - }, - { - "OsmLocalDb", - tr("OSM: Use Offline Database"), - "", - "../assets/img_map.png", - }, - }; - - // Controls: Dynamic Lane Profile group - auto dynamic_lane_profile = new DynamicLaneProfile(this); - - // toggle names to trigger updateToggles() when toggleFlipped - std::vector updateTogglesNames{ - "EnableMads", "CustomOffsets", "EnforceTorqueLateral", "SpeedLimitPercOffset", "SpeedLimitControl", - "CustomTorqueLateral", "LiveTorque", "TorquedOverride" - }; - connect(dynamic_lane_profile, &DynamicLaneProfile::updateExternalToggles, this, &SPControlsPanel::updateToggles); - - // toggle for offroadTransition when going onroad/offroad - std::vector toggleOffroad{ - "EnableMads", "DisengageLateralOnBrake", "AccMadsCombo", "MadsCruiseMain", "BelowSpeedPause", "EnforceTorqueLateral", - "LiveTorqueRelaxed" - }; - - // Controls: Camera Offset (cm) - camera_offset = new CameraOffset(); - connect(camera_offset, &SPOptionControl::updateLabels, camera_offset, &CameraOffset::refresh); - - // Controls: Path Offset (cm) - path_offset = new PathOffset(); - connect(path_offset, &SPOptionControl::updateLabels, path_offset, &PathOffset::refresh); - - // Controls: Auto Lane Change Timer - auto_lane_change_timer = new AutoLaneChangeTimer(); - auto_lane_change_timer->setUpdateOtherToggles(true); - connect(auto_lane_change_timer, &SPOptionControl::updateLabels, auto_lane_change_timer, &AutoLaneChangeTimer::refresh); - connect(auto_lane_change_timer, &AutoLaneChangeTimer::updateOtherToggles, this, &SPControlsPanel::updateToggles); - - // Controls: Speed Limit Offset Type - slo_type = new SpeedLimitOffsetType(); - slo_type->setUpdateOtherToggles(true); - connect(slo_type, &SPOptionControl::updateLabels, slo_type, &SpeedLimitOffsetType::refresh); - connect(slo_type, &SPOptionControl::updateOtherToggles, this, &SPControlsPanel::updateToggles); - - // Controls: Speed Limit Offset Values (% or actual value) - slvo = new SpeedLimitValueOffset(); - connect(slvo, &SPOptionControl::updateLabels, slvo, &SpeedLimitValueOffset::refresh); - - // Controls: Torque - FRICTION - friction = new TorqueFriction(); - connect(friction, &SPOptionControl::updateLabels, friction, &TorqueFriction::refresh); - - // Controls: Torque - LAT_ACCEL_FACTOR - lat_accel_factor = new TorqueMaxLatAccel(); - connect(lat_accel_factor, &SPOptionControl::updateLabels, lat_accel_factor, &TorqueMaxLatAccel::refresh); - - for (auto &[param, title, desc, icon] : toggle_defs) { - auto toggle = new ParamControl(param, title, desc, icon, this); - - addItem(toggle); - toggles[param.toStdString()] = toggle; - - if (param == "RoadEdge") { - // Controls: Dynamic Lane Profile group - addItem(dynamic_lane_profile); - } - - if (param == "CustomOffsets") { - // Controls: Camera Offset (cm) - addItem(camera_offset); - - // Controls: Path Offset (cm) - addItem(path_offset); - - // Controls: Auto Lane Change Timer - addItem(auto_lane_change_timer); - } - - if (param == "TorquedOverride") { - // Control: FRICTION - addItem(friction); - - // Controls: LAT_ACCEL_FACTOR - addItem(lat_accel_factor); - } - - if (param == "SpeedLimitPercOffset") { - // Controls: Speed Limit Offset Type - addItem(slo_type); - - // Controls: Speed Limit Offset Values (% or actual value) - addItem(slvo); - } - - // trigger updateToggles() when toggleFlipped - if (std::find(updateTogglesNames.begin(), updateTogglesNames.end(), param.toStdString()) != updateTogglesNames.end()) { - connect(toggle, &ToggleControl:: toggleFlipped, [=](bool state) { - updateToggles(); - }); - } - - // trigger offroadTransition when going onroad/offroad - if (std::find(toggleOffroad.begin(), toggleOffroad.end(), param.toStdString()) != toggleOffroad.end()) { - connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { - toggle->setEnabled(offroad); - }); - } - } - - toggles["EnableMads"]->setConfirmation(true, false); - toggles["DisengageLateralOnBrake"]->setConfirmation(true, false); - - connect(toggles["OsmLocalDb"], &ToggleControl::toggleFlipped, [=](bool state) { - if (!state) { - params.remove("OsmLocalDb"); - } - }); - - // update "FRICTION" and "LAT_ACCEL_FACTOR" titles when going onroad/offroad - connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { - friction->setEnabled(offroad); - lat_accel_factor->setEnabled(offroad); - - friction->refresh(); - lat_accel_factor->refresh(); - }); - - // update "FRICTION" and "LAT_ACCEL_FACTOR" titles when TorquedOverride is flipped - connect(toggles["TorquedOverride"], &ToggleControl::toggleFlipped, [=](bool state) { - friction->setEnabled(params.getBool("IsOffroad") || state); - lat_accel_factor->setEnabled(params.getBool("IsOffroad") || state); - - friction->setTitle(state ? "FRICTION - Live && Offline" : "FRICTION - Offline Only"); - lat_accel_factor->setTitle(state ? "LAT_ACCEL_FACTOR - Live && Offline" : "LAT_ACCEL_FACTOR - Offline Only"); - - friction->refresh(); - lat_accel_factor->refresh(); - }); -} - -void SPControlsPanel::showEvent(QShowEvent *event) { - updateToggles(); -} - -void SPControlsPanel::updateToggles() { - // toggle names to update when EnableMads is flipped - std::vector enableMadsGroup{"DisengageLateralOnBrake", "AccMadsCombo", "MadsCruiseMain"}; - for (const auto& enableMadstoggle : enableMadsGroup) { - if (toggles.find(enableMadstoggle) != toggles.end()) { - toggles[enableMadstoggle]->setVisible(toggles["EnableMads"]->isToggled()); - } - } - - // toggle names to update when DynamicLaneProfileToggle is flipped - toggles["VisionCurveLaneless"]->setVisible(params.getBool("DynamicLaneProfileToggle")); - - // toggle names to update when CustomOffsets is flipped - std::vector customOffsetsGroup{camera_offset, path_offset}; - for (const auto& customOffsetsControl : customOffsetsGroup) { - customOffsetsControl->setVisible(toggles["CustomOffsets"]->isToggled()); - } - - // toggle names to update when AutoLaneChangeTimer is not "Nudge" - toggles["AutoLaneChangeBsmDelay"]->setVisible(QString::fromStdString(params.get("AutoLaneChangeTimer")) != "0"); - - auto enforce_torque_lateral = toggles["EnforceTorqueLateral"]; - auto custom_torque_lateral = toggles["CustomTorqueLateral"]; - auto live_torque = toggles["LiveTorque"]; - auto live_torque_relaxed = toggles["LiveTorqueRelaxed"]; - auto torqued_override = toggles["TorquedOverride"]; - - auto speed_limit_control = toggles["SpeedLimitControl"]; - auto speed_limit_perc_offset = toggles["SpeedLimitPercOffset"]; - - // toggle names to update when EnforceTorqueLateral is flipped - std::vector enforceTorqueGroup{"CustomTorqueLateral", "LiveTorque", "TorquedOverride"}; - for (const auto& enforceTorqueToggle : enforceTorqueGroup) { - if (toggles.find(enforceTorqueToggle) != toggles.end()) { - toggles[enforceTorqueToggle]->setVisible(enforce_torque_lateral->isToggled()); - } - } - - // toggle names to update when CustomTorqueLateral is flipped - std::vector customTorqueGroup{friction, lat_accel_factor}; - for (const auto& customTorqueControl : customTorqueGroup) { - customTorqueControl->setVisible(custom_torque_lateral->isToggled()); - } - - // toggle names to update when SpeedLimitControl is flipped - std::vector speedLimitControlGroup{slo_type, slvo}; - for (const auto& speedLimitControl : speedLimitControlGroup) { - speedLimitControl->setVisible(speed_limit_control->isToggled()); - } - - if (enforce_torque_lateral->isToggled()) { - live_torque_relaxed->setVisible(live_torque->isToggled()); - torqued_override->setVisible(custom_torque_lateral->isToggled()); - } else { - params.putBool("LiveTorque", false); - params.putBool("CustomTorqueLateral", false); - for (const auto& customTorqueControl : customTorqueGroup) { - customTorqueControl->setVisible(false); - } - } - - if (speed_limit_control->isToggled()) { - if (speed_limit_perc_offset->isToggled()) { - slvo->setVisible(QString::fromStdString(params.get("SpeedLimitOffsetType")) != "0"); - slo_type->setVisible(true); - } else { - for (const auto& speedLimitControl : speedLimitControlGroup) { - speedLimitControl->setVisible(false); - } - } - } else { - for (const auto& speedLimitControl : speedLimitControlGroup) { - speedLimitControl->setVisible(false); - } - } - - // toggle names to update when SpeedLimitControl is flipped - speed_limit_perc_offset->setVisible(speed_limit_control->isToggled()); - - auto cp_bytes = params.get("CarParamsPersistent"); - if (!cp_bytes.empty()) { - AlignedBuffer aligned_buf; - capnp::FlatArrayMessageReader cmsg(aligned_buf.align(cp_bytes.data(), cp_bytes.size())); - cereal::CarParams::Reader CP = cmsg.getRoot(); - - if (CP.getSteerControlType() == cereal::CarParams::SteerControlType::ANGLE) { - enforce_torque_lateral->setEnabled(false); - params.remove("EnforceTorqueLateral"); - } - } -} - -SPVehiclesPanel::SPVehiclesPanel(QWidget *parent) : QWidget(parent) { - main_layout = new QStackedLayout(this); - home = new QWidget(this); - QVBoxLayout* fcr_layout = new QVBoxLayout(home); - fcr_layout->setContentsMargins(0, 20, 0, 20); - - QString set = QString::fromStdString(params.get("CarModelText")); - QPushButton* setCarBtn = new QPushButton(((set == "=== Not Selected ===") || (set.length() == 0)) ? "Select your car" : set); - setCarBtn->setObjectName("setCarBtn"); - setCarBtn->setStyleSheet("margin-right: 30px;"); - connect(setCarBtn, &QPushButton::clicked, [=]() { - QMap cars = getCarNames(); - QString currentCar = QString::fromStdString(params.get("CarModel")); - QString selection = MultiOptionDialog::getSelection("Select your car", cars.keys(), cars.key(currentCar), this); - if (!selection.isEmpty()) { - params.put("CarModel", cars[selection].toStdString()); - params.put("CarModelText", selection.toStdString()); - qApp->exit(18); - watchdog_kick(0); - } - }); - fcr_layout->addSpacing(10); - fcr_layout->addWidget(setCarBtn, 0, Qt::AlignRight); - fcr_layout->addSpacing(10); - - home_widget = new QWidget(this); - QVBoxLayout* toggle_layout = new QVBoxLayout(home_widget); - home_widget->setObjectName("homeWidget"); - - ScrollView *scroller = new ScrollView(home_widget, this); - scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - fcr_layout->addWidget(scroller, 1); - - main_layout->addWidget(home); - - setStyleSheet(R"( - #setCarBtn { - border-radius: 50px; - font-size: 50px; - font-weight: 500; - height:100px; - padding: 0 35 0 35; - color: #E4E4E4; - background-color: #393939; - } - #setCarBtn:pressed { - background-color: #4a4a4a; - } - )"); - - auto toggle_panel = new SPVehiclesTogglesPanel(this); - toggle_layout->addWidget(toggle_panel); -} - -SPVehiclesTogglesPanel::SPVehiclesTogglesPanel(SPVehiclesPanel *parent) : ListWidget(parent) { - setSpacing(50); - - // Hyundai/Kia/Genesis - addItem(new LabelControl(tr("Hyundai/Kia/Genesis"))); - auto hkgSmoothStop = new ParamControl( - "HkgSmoothStop", - "HKG CAN: Smoother Stopping Performance (Beta)", - "Smoother stopping behind a stopped car or desired stopping event. This is only applicable to HKG CAN platforms using openpilot longitudinal control.", - "../assets/offroad/icon_blank.png" - ); - hkgSmoothStop->setConfirmation(true, false); - addItem(hkgSmoothStop); - - // Subaru - addItem(new LabelControl(tr("Subaru"))); - auto subaruManualParkingBrakeSng = new ParamControl( - "SubaruManualParkingBrakeSng", - tr("Manual Parking Brake: Stop and Go (Beta)"), - tr("Experimental feature to enable stop and go for Subaru Global models with manual handbrake. Models with electric parking brake should keep this disabled. Thanks to martinl for this implementation!"), - "../assets/offroad/icon_blank.png" - ); - subaruManualParkingBrakeSng->setConfirmation(true, false); - addItem(subaruManualParkingBrakeSng); - - // Toyota/Lexus - addItem(new LabelControl(tr("Toyota/Lexus"))); - stockLongToyota = new ParamControl( - "StockLongToyota", - "Enable Stock Toyota Longitudinal Control", - "sunnypilot will not take over control of gas and brakes. Stock Toyota longitudinal control will be used.", - "../assets/offroad/icon_blank.png" - ); - stockLongToyota->setConfirmation(true, false); - addItem(stockLongToyota); - - auto lkasToggle = new ParamControl( - "LkasToggle", - tr("Allow M.A.D.S. toggling w/ LKAS Button (Beta)"), - QString("%1
" - "

%2


") - .arg(tr("Allows M.A.D.S. engagement/disengagement with \"LKAS\" button from the steering wheel.")) - .arg(tr("Note: Enabling this toggle may have unexpected behavior with steering control. It is the driver's responsibility to observe their environment and make decisions accordingly.")), - "../assets/offroad/icon_blank.png" - ); - lkasToggle->setConfirmation(true, false); - addItem(lkasToggle); - - auto toyotaTss2LongTune = new ParamControl( - "ToyotaTSS2Long", - "TSS2 Longitudinal: Custom Tuning", - "Smoother longitudinal performance for Toyota/Lexus TSS2/LSS2 cars. Big thanks to dragonpilot-community for this implementation.", - "../assets/offroad/icon_blank.png" - ); - toyotaTss2LongTune->setConfirmation(true, false); - addItem(toyotaTss2LongTune); - - auto toyotaSngHack = new ParamControl( - "ToyotaSnG", - "Enable Stop and Go Hack", - "sunnypilot will allow some Toyota/Lexus cars to auto resume during stop and go traffic. This feature is only applicable to certain models. Use at your own risk.", - "../assets/offroad/icon_blank.png" - ); - toyotaSngHack->setConfirmation(true, false); - addItem(toyotaSngHack); - - // trigger offroadTransition when going onroad/offroad - connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { - hkgSmoothStop->setEnabled(offroad); - toyotaTss2LongTune->setEnabled(offroad); - toyotaSngHack->setEnabled(offroad); - }); -} - -SPVisualsPanel::SPVisualsPanel(QWidget *parent) : ListWidget(parent) { - // param, title, desc, icon - std::vector> toggle_defs{ - { - "BrakeLights", - tr("Display Braking Status"), - tr("Enable this will turn the current speed value to red while the brake is used."), - "../assets/offroad/icon_road.png", - }, - { - "StandStillTimer", - tr("Display Stand Still Timer"), - tr("Enable this will display time spent at a stop (i.e., at a stop lights, stop signs, traffic congestions)."), - "../assets/offroad/icon_road.png", - }, - { - "DevUI", - tr("Show Developer UI"), - tr("Show developer UI (Dev UI) for real-time parameters from various sources."), - "../assets/offroad/icon_calibration.png", - }, - { - "ButtonAutoHide", - tr("Auto-Hide UI Buttons"), - tr("Hide UI buttons on driving screen after a 30-second timeout. Tap on the screen at anytime to reveal the UI buttons."), - "../assets/offroad/icon_road.png", - }, - { - "ReverseDmCam", - tr("Display DM Camera in Reverse Gear"), - tr("Show Driver Monitoring camera while the car is in reverse gear."), - "../assets/offroad/icon_road.png", - }, - { - "ShowDebugUI", - tr("OSM: Show debug UI elements"), - tr("OSM: Show UI elements that aid debugging."), - "../assets/offroad/icon_calibration.png", - }, - { - "TrueVEgoUi", - tr("Speedometer: Display True Speed"), - tr("Display the true vehicle current speed from wheel speed sensors."), - "../assets/offroad/icon_openpilot.png", - }, - { - "HideVEgoUi", - tr("Speedometer: Hide from Onroad Screen"), - "", - "../assets/offroad/icon_openpilot.png", - }, - { - "EndToEndLongAlertUI", - tr("Display End-to-end Longitudinal Status (Beta)"), - tr("Enable this will display an icon that appears when the End-to-end model decides to start or stop."), - "../assets/offroad/icon_road.png", - }, - { - "Map3DBuildings", - tr("Map: Display 3D Buildings"), - tr("Parse and display 3D buildings on map. Thanks to jakethesnake420 for this implementation."), - "../assets/img_map.png", - }, - }; - - // Visuals: Developer UI Info (Dev UI) - dev_ui_info = new DevUiInfo(); - connect(dev_ui_info, &SPOptionControl::updateLabels, dev_ui_info, &DevUiInfo::refresh); - - // Visuals: Display Metrics above Chevron - chevron_info = new ChevronInfo(); - connect(chevron_info, &SPOptionControl::updateLabels, chevron_info, &ChevronInfo::refresh); - - for (auto &[param, title, desc, icon] : toggle_defs) { - auto toggle = new ParamControl(param, title, desc, icon, this); - - addItem(toggle); - toggles[param.toStdString()] = toggle; - - if (param == "DevUI") { - addItem(dev_ui_info); - } - - if (param == "HideVEgoUi") { - addItem(chevron_info); - } - } - - auto sidebar_temp = new SidebarTemp(this); - addItem(sidebar_temp); - - // trigger updateToggles() when toggleFlipped - connect(toggles["DevUI"], &ToggleControl::toggleFlipped, [=](bool state) { - updateToggles(); - }); - - // trigger offroadTransition when going onroad/offroad - connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { - }); -} - -void SPVisualsPanel::showEvent(QShowEvent *event) { - updateToggles(); -} - -void SPVisualsPanel::updateToggles() { - dev_ui_info->setVisible(toggles["DevUI"]->isToggled()); -} - -// Max Time Offroad (Shutdown timer) -MaxTimeOffroad::MaxTimeOffroad() : SPOptionControl ( - "MaxTimeOffroad", - tr("Max Time Offroad"), - tr("Device is automatically turned off after a set time when the engine is turned off (off-road) after driving (on-road)."), - "../assets/offroad/icon_metric.png", - {0, 12}) { - - refresh(); -} - -void MaxTimeOffroad::refresh() { - QString option = QString::fromStdString(params.get("MaxTimeOffroad")); - QString second = tr("s"); - QString minute = tr("m"); - QString hour = tr("h"); - if (option == "0") { - setLabel(tr("Always On")); - } else if (option == "1") { - setLabel(tr("Immediate")); - } else if (option == "2") { - setLabel("30" + second); - } else if (option == "3") { - setLabel("1" + minute); - } else if (option == "4") { - setLabel("3" + minute); - } else if (option == "5") { - setLabel("5" + minute); - } else if (option == "6") { - setLabel("10" + minute); - } else if (option == "7") { - setLabel("30" + minute); - } else if (option == "8") { - setLabel("1" + hour); - } else if (option == "9") { - setLabel("3" + hour); - } else if (option == "10") { - setLabel("5" + hour); - } else if (option == "11") { - setLabel("10" + hour); - } else if (option == "12") { - setLabel("30" + hour); - } -} - -// Onroad Screen Off (Auto Onroad Screen Timer) -OnroadScreenOff::OnroadScreenOff() : SPOptionControl ( - "OnroadScreenOff", - tr("Driving Screen Off Timer"), - tr("Turn off the device screen or reduce brightness to protect the screen after driving starts. It automatically brightens or turns on when a touch or event occurs."), - "../assets/offroad/icon_metric.png", - {-2, 10}) { - - refresh(); -} - -void OnroadScreenOff::refresh() { - QString option = QString::fromStdString(params.get("OnroadScreenOff")); - QString second = tr("s"); - if (option == "-2") { - setLabel(tr("Always On")); - } else if (option == "-1") { - setLabel("15" + second); - } else if (option == "0") { - setLabel("30" + second); - } else { - setLabel(option + "min(s)"); - } -} - -// Onroad Screen Off Brightness -OnroadScreenOffBrightness::OnroadScreenOffBrightness() : SPOptionControl ( - "OnroadScreenOffBrightness", - tr("Driving Screen Off Brightness (%)"), - tr("When using the Driving Screen Off feature, the brightness is reduced according to the automatic brightness ratio."), - "../assets/offroad/icon_blank.png", - {0, 100}, - 10) { - - refresh(); -} - -void OnroadScreenOffBrightness::refresh() { - QString option = QString::fromStdString(params.get("OnroadScreenOffBrightness")); - if (option == "0") { - setLabel(tr("Dark")); - } else { - setLabel(option); - } -} - -// Brightness Control (Global) -BrightnessControl::BrightnessControl() : SPOptionControl ( - "BrightnessControl", - tr("Brightness Control (Global, %)"), - tr("Manually adjusts the global brightness of the screen."), - "../assets/offroad/icon_metric.png", - {0, 100}, - 5) { - - refresh(); -} - -void BrightnessControl::refresh() { - QString option = QString::fromStdString(params.get("BrightnessControl")); - if (option == "0") { - setLabel(tr("Auto")); - } else { - setLabel(option); - } -} - -// Camera Offset Value -CameraOffset::CameraOffset() : SPOptionControl ( - "CameraOffset", - tr("Camera Offset - Laneful Only (cm)"), - tr("Hack to trick vehicle to be left or right biased in its lane. Decreasing the value will make the car keep more left, increasing will make it keep more right. Changes take effect immediately. Default: +4 cm"), - "../assets/offroad/icon_blank.png", - {-20, 20}) { - - refresh(); -} - -void CameraOffset::refresh() { - QString option = QString::fromStdString(params.get("CameraOffset")); - setLabel(option); -} - -// Path Offset Value -PathOffset::PathOffset() : SPOptionControl ( - "PathOffset", - tr("Path Offset (cm)"), - tr("Hack to trick the model path to be left or right biased of the lane. Decreasing the value will shift the model more left, increasing will shift the model more right. Changes take effect immediately."), - "../assets/offroad/icon_blank.png", - {-10, 10}) { - - refresh(); -} - -void PathOffset::refresh() { - QString option = QString::fromStdString(params.get("PathOffset")); - setLabel(option); -} - -// Auto Lane Change Timer (ALCT) -AutoLaneChangeTimer::AutoLaneChangeTimer() : SPOptionControl ( - "AutoLaneChangeTimer", - tr("Auto Lane Change Timer"), - tr("Set a timer to delay the auto lane change operation when the blinker is used. No nudge on the steering wheel is required to auto lane change if a timer is set.\nPlease use caution when using this feature. Only use the blinker when traffic and road conditions permit."), - "../assets/offroad/icon_road.png", - {0, 5}) { - - refresh(); -} - -void AutoLaneChangeTimer::refresh() { - QString option = QString::fromStdString(params.get("AutoLaneChangeTimer")); - QString second = tr("s"); - if (option == "0") { - setLabel(tr("Nudge")); - } else if (option == "1") { - setLabel(tr("Nudgeless")); - } else if (option == "2") { - setLabel("0.5" + second); - } else if (option == "3") { - setLabel("1" + second); - } else if (option == "4") { - setLabel("1.5" + second); - } else { - setLabel("2" + second); - } -} - -TorqueFriction::TorqueFriction() : SPOptionControl ( - "TorqueFriction", - tr("FRICTION"), - tr("Adjust Friction for the Torque Lateral Controller. Live: Override self-tune values; Offline: Override self-tune offline values at car restart."), - "../assets/offroad/icon_blank.png", - {0, 50}) { - - refresh(); -} - -void TorqueFriction::refresh() { - QString torqueFrictionStr = QString::fromStdString(params.get("TorqueFriction")); - float valuef = torqueFrictionStr.toInt() * 0.01; - setTitle(params.getBool("TorquedOverride") ? "FRICTION - Live && Offline" : "FRICTION - Offline Only"); - setLabel(QString::number(valuef)); -} - -TorqueMaxLatAccel::TorqueMaxLatAccel() : SPOptionControl ( - "TorqueMaxLatAccel", - tr("LAT_ACCEL_FACTOR"), - tr("Adjust Max Lateral Acceleration for the Torque Lateral Controller. Live: Override self-tune values; Offline: Override self-tune offline values at car restart."), - "../assets/offroad/icon_blank.png", - {1, 500}) { - - refresh(); -} - -void TorqueMaxLatAccel::refresh() { - QString torqueMaxLatAccelStr = QString::fromStdString(params.get("TorqueMaxLatAccel")); - float valuef = torqueMaxLatAccelStr.toInt() * 0.01; - setTitle(params.getBool("TorquedOverride") ? "LAT_ACCEL_FACTOR - Live && Offline" : "LAT_ACCEL_FACTOR - Offline Only"); - setLabel(QString::number(valuef)); -} - -// Speed Limit Control Custom Offset Type -SpeedLimitOffsetType::SpeedLimitOffsetType() : SPOptionControl ( - "SpeedLimitOffsetType", - tr("Speed Limit Offset Type"), - QString("%1
" - "%2") - .arg(tr("Set speed limit higher or lower than actual speed limit for a more personalized drive.")) - .arg(tr("To use this feature, turn off \"Enable Speed Limit % Offset\".")), - "../assets/offroad/icon_speed_limit.png", - {0, 2}) { - - refresh(); -} - -void SpeedLimitOffsetType::refresh() { - QString option = QString::fromStdString(params.get("SpeedLimitOffsetType")); - if (option == "0") { - setLabel(tr("Default")); - } else if (option == "1") { - setLabel(tr("%")); - } else if (option == "2") { - setLabel(tr("Value")); - } -} - -// Speed Limit Control Custom Offset -SpeedLimitValueOffset::SpeedLimitValueOffset() : SPOptionControl ( - "SpeedLimitValueOffset", - "", - "", - "../assets/offroad/icon_blank.png", - {-30, 30}) { - - refresh(); -} - -void SpeedLimitValueOffset::refresh() { - QString option = QString::fromStdString(params.get("SpeedLimitValueOffset")); - setLabel(option); -} - -// Developer UI Info (Dev UI) -DevUiInfo::DevUiInfo() : SPOptionControl ( - "DevUIInfo", - tr("Developer UI List"), - tr("Select the number of lists of real-time parameters you would like to display on the sunnypilot screen while driving."), - "../assets/offroad/icon_blank.png", - {0, 1}) { - - refresh(); -} - -void DevUiInfo::refresh() { - QString option = QString::fromStdString(params.get("DevUIInfo")); - if (option == "0") { - setLabel(tr("5 Metrics")); - } else { - setLabel(tr("10 Metrics")); - } -} - -// Display Metrics above Chevron -ChevronInfo::ChevronInfo() : SPOptionControl ( - "ChevronInfo", - tr("Display Metrics above Chevron"), - tr("Display useful metrics above the chevron that tracks the lead car (only applicable to cars with openpilot longitudinal control)."), - "../assets/offroad/icon_calibration.png", - {0, 2}) { - - refresh(); -} - -void ChevronInfo::refresh() { - QString option = QString::fromStdString(params.get("ChevronInfo")); - if (option == "0") { - setLabel(tr("OFF")); - } else if (option == "1") { - setLabel(tr("Distance")); - } else if (option == "2") { - setLabel(tr("Speed")); - } -} - -SidebarTemp::SidebarTemp(QWidget *parent) : QWidget(parent), outer_layout(this) { - outer_layout.setMargin(0); - outer_layout.setSpacing(0); - outer_layout.addLayout(&inner_layout); - inner_layout.setMargin(0); - //inner_layout.setSpacing(25); // default spacing is 25 - outer_layout.addStretch(); - - sidebarTemperature = new ParamControl( - "SidebarTemperature", - tr("Display Temperature on Sidebar"), - tr("Display Ambient temperature, memory temperature, CPU core with the highest temperature, GPU temperature, or max of Memory/CPU/GPU on the sidebar."), - "../assets/offroad/icon_calibration.png" - ); - - std::vector sidebar_temp_texts{tr("Ambient"), tr("Memory"), tr("CPU"), tr("GPU"), tr("Max")}; - sidebar_temp_setting = new ButtonParamControl( - "SidebarTemperatureOptions", "", "", - "../assets/offroad/icon_blank.png", - sidebar_temp_texts - ); - - connect(sidebarTemperature, &ToggleControl::toggleFlipped, [=](bool state) { - updateToggles(); - }); - - addItem(sidebarTemperature); - addItem(sidebar_temp_setting); -} - -void SidebarTemp::showEvent(QShowEvent *event) { - updateToggles(); -} - -void SidebarTemp::updateToggles() { - sidebar_temp_setting->setVisible(sidebarTemperature->isToggled()); -} - -DynamicLaneProfile::DynamicLaneProfile(QWidget *parent) : QWidget(parent), outer_layout(this) { - outer_layout.setMargin(0); - outer_layout.setSpacing(0); - outer_layout.addLayout(&inner_layout); - inner_layout.setMargin(0); - //inner_layout.setSpacing(25); // default spacing is 25 - outer_layout.addStretch(); - - dynamicLaneProfile = new ParamControl( - "DynamicLaneProfileToggle", - tr("Enable Dynamic Lane Profile"), - tr("Enable toggle to use Dynamic Lane Profile. Disable toggle to use Laneless only."), - "../assets/offroad/icon_road.png" - ); - - std::vector dlp_settings_texts{tr("Laneful"), tr("Laneless"), tr("Auto")}; - dlp_settings = new ButtonParamControl( - "DynamicLaneProfile", "", "", - "../assets/offroad/icon_blank.png", - dlp_settings_texts - ); - - connect(dynamicLaneProfile, &ToggleControl::toggleFlipped, [=]() { - updateToggles(); - emit updateExternalToggles(); - }); - - addItem(dynamicLaneProfile); - addItem(dlp_settings); - - param_watcher = new ParamWatcher(this); - - QObject::connect(param_watcher, &ParamWatcher::paramChanged, [=](const QString ¶m_name, const QString ¶m_value) { - updateButtons(); - }); -} - -void DynamicLaneProfile::showEvent(QShowEvent *event) { - updateToggles(); - updateButtons(); -} - -void DynamicLaneProfile::updateToggles() { - // toggle names to update when DynamicLaneProfile is flipped - dlp_settings->setVisible(dynamicLaneProfile->isToggled()); -} - -void DynamicLaneProfile::updateButtons() { - param_watcher->addParam("DynamicLaneProfile"); - - if (!isVisible()) return; - - dlp_settings->setButton("DynamicLaneProfile"); -} diff --git a/selfdrive/ui/qt/offroad/sunnypilot_settings.h b/selfdrive/ui/qt/offroad/sunnypilot_settings.h deleted file mode 100644 index b7ff48d7f3..0000000000 --- a/selfdrive/ui/qt/offroad/sunnypilot_settings.h +++ /dev/null @@ -1,393 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -#include "selfdrive/ui/qt/util.h" -#include "selfdrive/ui/qt/widgets/controls.h" - -class SPOptionControl : public AbstractControl { - Q_OBJECT - -private: - struct MinMaxValue { - int min_value; - int max_value; - }; - -public: - SPOptionControl(const QString ¶m, const QString &title, const QString &desc, const QString &icon, - const MinMaxValue &range, const int per_value_change = 1) : AbstractControl(title, desc, icon) { - const QString style = R"( - QPushButton { - padding: 0; - border-radius: 50px; - font-size: 35px; - font-weight: 500; - color: #E4E4E4; - background-color: #393939; - } - QPushButton:pressed { - background-color: #4a4a4a; - } - QPushButton:disabled { - color: #33E4E4E4; - } - )"; - - label.setAlignment(Qt::AlignVCenter|Qt::AlignRight); - label.setStyleSheet("color: #e0e879"); - hlayout->addWidget(&label); - - const std::vector button_texts{"-", "+"}; - - key = param.toStdString(); - value = atoi(params.get(key).c_str()); - - button_group = new QButtonGroup(this); - button_group->setExclusive(true); - for (int i = 0; i < button_texts.size(); i++) { - QPushButton *button = new QPushButton(button_texts[i], this); - button->setStyleSheet(style); - button->setFixedSize(150, 100); - hlayout->addWidget(button); - button_group->addButton(button, i); - - int change_value = (i == 0) ? -per_value_change : per_value_change; - - QObject::connect(button, &QPushButton::clicked, [=]() { - key = param.toStdString(); - value = atoi(params.get(key).c_str()); - value += change_value; - value = std::clamp(value, range.min_value, range.max_value); - params.put(key, QString::number(value).toStdString()); - updateLabels(); - - if (update) { - emit updateOtherToggles(); - } - }); - } - } - - void setUpdateOtherToggles(bool _update) { - update = _update; - } - - inline void setLabel(const QString &text) { label.setText(text); } - - void setEnabled(bool enabled) { - for (auto btn : button_group->buttons()) { - btn->setEnabled(enabled); - } - } - -signals: - void updateLabels(); - void updateOtherToggles(); - -private: - std::string key; - int value; - QButtonGroup *button_group; - QLabel label; - Params params; - std::map option_label = {}; - bool update = false; -}; - -class SpeedLimitOffsetType : public SPOptionControl { - Q_OBJECT - -public: - SpeedLimitOffsetType(); - - void refresh(); - -private: - Params params; -}; - -class SpeedLimitValueOffset : public SPOptionControl { - Q_OBJECT - -public: - SpeedLimitValueOffset(); - - void refresh(); - -private: - Params params; -}; - -class MaxTimeOffroad : public SPOptionControl { - Q_OBJECT - -public: - MaxTimeOffroad(); - - void refresh(); - -private: - Params params; -}; - -class OnroadScreenOff : public SPOptionControl { - Q_OBJECT - -public: - OnroadScreenOff(); - - void refresh(); - -private: - Params params; -}; - -class OnroadScreenOffBrightness : public SPOptionControl { - Q_OBJECT - -public: - OnroadScreenOffBrightness(); - - void refresh(); - -private: - Params params; -}; - -class BrightnessControl : public SPOptionControl { - Q_OBJECT - -public: - BrightnessControl(); - - void refresh(); - -private: - Params params; -}; - -class CameraOffset : public SPOptionControl { - Q_OBJECT - -public: - CameraOffset(); - - void refresh(); - -private: - Params params; -}; - -class PathOffset : public SPOptionControl { - Q_OBJECT - -public: - PathOffset(); - - void refresh(); - -private: - Params params; -}; - -class AutoLaneChangeTimer : public SPOptionControl { - Q_OBJECT - -public: - AutoLaneChangeTimer(); - - void refresh(); - -signals: - void toggleUpdated(); - -private: - Params params; -}; - -class TorqueFriction : public SPOptionControl { - Q_OBJECT - -public: - TorqueFriction(); - - void refresh(); - -private: - Params params; -}; - -class TorqueMaxLatAccel : public SPOptionControl { - Q_OBJECT - -public: - TorqueMaxLatAccel(); - - void refresh(); - -private: - Params params; -}; - -class DevUiInfo : public SPOptionControl { - Q_OBJECT - -public: - DevUiInfo(); - - void refresh(); - -private: - Params params; -}; - -class ChevronInfo : public SPOptionControl { - Q_OBJECT - -public: - ChevronInfo(); - - void refresh(); - -private: - Params params; -}; - -class SidebarTemp : public QWidget { - Q_OBJECT - -public: - explicit SidebarTemp(QWidget *parent = nullptr); - void showEvent(QShowEvent *event) override; - -public slots: - void updateToggles(); - -private: - inline void addItem(QWidget *w) { inner_layout.addWidget(w); } - inline void addItem(QLayout *layout) { inner_layout.addLayout(layout); } - inline void setSpacing(int spacing) { inner_layout.setSpacing(spacing); } - QVBoxLayout outer_layout; - QVBoxLayout inner_layout; - Params params; - - ParamControl *sidebarTemperature; - ButtonParamControl *sidebar_temp_setting; -}; - -class DynamicLaneProfile : public QWidget { - Q_OBJECT - -public: - explicit DynamicLaneProfile(QWidget *parent = nullptr); - void showEvent(QShowEvent *event) override; - -signals: - void updateExternalToggles(); - -public slots: - void updateToggles(); - -private: - inline void addItem(QWidget *w) { inner_layout.addWidget(w); } - inline void addItem(QLayout *layout) { inner_layout.addLayout(layout); } - inline void setSpacing(int spacing) { inner_layout.setSpacing(spacing); } - QVBoxLayout outer_layout; - QVBoxLayout inner_layout; - Params params; - - ParamControl *dynamicLaneProfile; - ButtonParamControl *dlp_settings; - - ParamWatcher *param_watcher; - void updateButtons(); -}; - -class SPGeneralPanel : public ListWidget { - Q_OBJECT - -public: - explicit SPGeneralPanel(QWidget *parent = nullptr); - void showEvent(QShowEvent *event) override; - -public slots: - void updateToggles(); - -private: - Params params; - std::map toggles; - - OnroadScreenOff *onroad_screen_off; - OnroadScreenOffBrightness *onroad_screen_off_brightness; -}; - -class SPControlsPanel : public ListWidget { - Q_OBJECT - -public: - explicit SPControlsPanel(QWidget *parent = nullptr); - void showEvent(QShowEvent *event) override; - -public slots: - void updateToggles(); - -private: - Params params; - std::map toggles; - - CameraOffset *camera_offset; - PathOffset *path_offset; - AutoLaneChangeTimer *auto_lane_change_timer; - SpeedLimitOffsetType *slo_type; - SpeedLimitValueOffset *slvo; - TorqueFriction *friction; - TorqueMaxLatAccel *lat_accel_factor; -}; - -class SPVehiclesPanel : public QWidget { - Q_OBJECT - -public: - explicit SPVehiclesPanel(QWidget *parent = nullptr); - -private: - Params params; - - QStackedLayout* main_layout = nullptr; - QWidget* home = nullptr; - - QWidget* home_widget; -}; - -class SPVehiclesTogglesPanel : public ListWidget { - Q_OBJECT -public: - explicit SPVehiclesTogglesPanel(SPVehiclesPanel *parent); - -private: - Params params; - - ParamControl *stockLongToyota; -}; - -class SPVisualsPanel : public ListWidget { - Q_OBJECT - -public: - explicit SPVisualsPanel(QWidget *parent = nullptr); - void showEvent(QShowEvent *event) override; - -private: - Params params; - std::map toggles; - - DevUiInfo *dev_ui_info; - ChevronInfo *chevron_info; - - void updateToggles(); -}; diff --git a/selfdrive/ui/qt/onroad.cc b/selfdrive/ui/qt/onroad.cc index 0452656811..1a424d45a7 100644 --- a/selfdrive/ui/qt/onroad.cc +++ b/selfdrive/ui/qt/onroad.cc @@ -5,12 +5,13 @@ #include #include #include +#include #include #include -#include #include +#include "common/swaglog.h" #include "common/timing.h" #include "selfdrive/ui/qt/util.h" #ifdef ENABLE_MAPS @@ -105,10 +106,10 @@ void OnroadWindow::updateState(const UIState &s) { } QColor bgColor = bg_colors[s.status]; - Alert alert = Alert::get(*(s.sm), s.scene.started_frame, s.scene.display_debug_alert_frame); + Alert alert = Alert::get(*(s.sm), s.scene.started_frame); alerts->updateAlert(alert); - if (s.scene.map_on_left) { + if (s.scene.map_on_left || s.scene.mapbox_fullscreen) { split->setDirection(QBoxLayout::LeftToRight); } else { split->setDirection(QBoxLayout::RightToLeft); @@ -124,106 +125,25 @@ void OnroadWindow::updateState(const UIState &s) { } -void issue_debug_snapshot(SubMaster &sm) { - auto longitudinal_plan_sp = sm["longitudinalPlanSP"].getLongitudinalPlanSP(); - auto live_map_data_sp = sm["liveMapDataSP"].getLiveMapDataSP(); - auto car_state = sm["carState"].getCarState(); - - auto t = std::time(nullptr); - auto tm = *std::localtime(&t); - std::ostringstream param_name_os; - param_name_os << std::put_time(&tm, "%Y-%m-%d--%H-%M-%S"); - - std::ostringstream os; - os.setf(std::ios_base::fixed); - os.precision(2); - os << "Datetime: " << param_name_os.str() << ", vEgo: " << car_state.getVEgo() * 3.6 << "\n\n"; - os.precision(6); - os << "Location: (" << live_map_data_sp.getLastGpsLatitude() << ", " << live_map_data_sp.getLastGpsLongitude() << ")\n"; - os.precision(2); - os << "Bearing: " << live_map_data_sp.getLastGpsBearingDeg() << "; "; - os << "GPSSpeed: " << live_map_data_sp.getLastGpsSpeed() * 3.6 << "\n\n"; - os.precision(1); - os << "Speed Limit: " << live_map_data_sp.getSpeedLimit() * 3.6 << ", "; - os << "Valid: " << live_map_data_sp.getSpeedLimitValid() << "\n"; - os << "Speed Limit Ahead: " << live_map_data_sp.getSpeedLimitAhead() * 3.6 << ", "; - os << "Valid: " << live_map_data_sp.getSpeedLimitAheadValid() << ", "; - os << "Distance: " << live_map_data_sp.getSpeedLimitAheadDistance() << "\n"; - os << "Turn Speed Limit: " << live_map_data_sp.getTurnSpeedLimit() * 3.6 << ", "; - os << "Valid: " << live_map_data_sp.getTurnSpeedLimitValid() << ", "; - os << "End Distance: " << live_map_data_sp.getTurnSpeedLimitEndDistance() << ", "; - os << "Sign: " << live_map_data_sp.getTurnSpeedLimitSign() << "\n\n"; - - const auto turn_speeds = live_map_data_sp.getTurnSpeedLimitsAhead(); - os << "Turn Speed Limits Ahead:\n"; - os << "VALUE\tDIST\tSIGN\n"; - - if (turn_speeds.size() == 0) { - os << "-\t-\t-" << "\n\n"; - } else { - const auto distances = live_map_data_sp.getTurnSpeedLimitsAheadDistances(); - const auto signs = live_map_data_sp.getTurnSpeedLimitsAheadSigns(); - for(int i = 0; i < turn_speeds.size(); i++) { - os << turn_speeds[i] * 3.6 << "\t" << distances[i] << "\t" << signs[i] << "\n"; - } - os << "\n"; - } - - os << "SPEED LIMIT CONTROLLER:\n"; - os << "sl: " << longitudinal_plan_sp.getSpeedLimit() * 3.6 << ", "; - os << "state: " << int(longitudinal_plan_sp.getSpeedLimitControlState()) << ", "; - os << "isMap: " << longitudinal_plan_sp.getIsMapSpeedLimit() << "\n\n"; - - os << "TURN SPEED CONTROLLER:\n"; - os << "speed: " << longitudinal_plan_sp.getTurnSpeed() * 3.6 << ", "; - os << "state: " << int(longitudinal_plan_sp.getTurnSpeedControlState()) << "\n\n"; - - os << "VISION TURN CONTROLLER:\n"; - os << "speed: " << longitudinal_plan_sp.getVisionTurnSpeed() * 3.6 << ", "; - os << "state: " << int(longitudinal_plan_sp.getVisionTurnControllerState()); - - Params().put(param_name_os.str().c_str(), os.str().c_str(), os.str().length()); - uiState()->scene.display_debug_alert_frame = sm.frame; -} - - void OnroadWindow::mousePressEvent(QMouseEvent* e) { bool propagate_event = true; +#ifdef ENABLE_MAPS UIState *s = uiState(); UIScene &scene = s->scene; - SubMaster &sm = *(uiState()->sm); - auto longitudinal_plan_sp = sm["longitudinalPlanSP"].getLongitudinalPlanSP(); - - QRect debug_tap_rect = QRect(rect().center().x() - 200, rect().center().y() - 200, 400, 400); - QRect speed_limit_touch_rect = speed_sgn_rc.adjusted(-50, -50, 50, 50); - - if (longitudinal_plan_sp.getSpeedLimit() > 0.0 && speed_limit_touch_rect.contains(e->x(), e->y())) { - // If touching the speed limit sign area when visible - scene.last_speed_limit_sign_tap = seconds_since_boot(); - params.putBool("LastSpeedLimitSignTap", true); - scene.speed_limit_control_enabled = !scene.speed_limit_control_enabled; - params.putBool("SpeedLimitControl", scene.speed_limit_control_enabled); - propagate_event = false; - } else if (scene.debug_snapshot_enabled && debug_tap_rect.contains(e->x(), e->y())) { - issue_debug_snapshot(sm); - propagate_event = false; - } - else { -#ifdef ENABLE_MAPS - if (map != nullptr && !isOnroadSettingsVisible()) { - if (wakeScreenTimeout()) { - // Switch between map and sidebar when using navigate on openpilot - bool sidebarVisible = geometry().x() > 0; - bool show_map = uiState()->scene.navigate_on_openpilot ? sidebarVisible : !sidebarVisible; - map->setVisible(show_map && !map->isVisible()); - } + if (map != nullptr && !isOnroadSettingsVisible()) { + if (wakeScreenTimeout()) { + // Switch between map and sidebar when using navigate on openpilot + bool sidebarVisible = geometry().x() > 0; + bool show_map = uiState()->scene.navigate_on_openpilot ? sidebarVisible : !sidebarVisible; + updateMapSize(scene); + map->setVisible(show_map && !map->isVisible()); } + } #endif - if (onroad_settings != nullptr && !isMapVisible()) { - if (wakeScreenTimeout()) { - onroad_settings->setVisible(false); - } + if (onroad_settings != nullptr && !isMapVisible()) { + if (wakeScreenTimeout()) { + onroad_settings->setVisible(false); } } // propagation event to parent(HomeWindow) @@ -244,7 +164,8 @@ void OnroadWindow::offroadTransition(bool offroad) { QObject::connect(nvg->map_settings_btn, &MapSettingsButton::clicked, m, &MapPanel::toggleMapSettings); nvg->map_settings_btn->setEnabled(true); - m->setFixedWidth(topWidget(this)->width() / 2 - UI_BORDER_SIZE); + m->setFixedWidth(uiState()->scene.mapbox_fullscreen ? topWidget(this)->width() : + topWidget(this)->width() / 2 - UI_BORDER_SIZE); split->insertWidget(0, m); // hidden by default, made visible when navRoute is published @@ -271,6 +192,12 @@ void OnroadWindow::offroadTransition(bool offroad) { alerts->updateAlert({}); } +void OnroadWindow::updateMapSize(const UIScene &scene) { + map->setFixedWidth(scene.mapbox_fullscreen ? topWidget(this)->width() : + topWidget(this)->width() / 2 - UI_BORDER_SIZE); + split->insertWidget(0, map); +} + void OnroadWindow::primeChanged(bool prime) { #ifdef ENABLE_MAPS if (map && (!prime && MAPBOX_TOKEN.isEmpty())) { @@ -414,7 +341,7 @@ OnroadSettingsButton::OnroadSettingsButton(QWidget *parent) : QPushButton(parent setFixedSize(152, 152); settings_img = loadPixmap("../assets/navigation/icon_settings.svg", {114, 114}); - // hidden by default, made visible if Driving Personality / GAC, DLP, or SLC is enabled + // hidden by default, made visible if Driving Personality / GAC, DLP, DEC, or SLC is enabled setVisible(false); setEnabled(false); } @@ -426,7 +353,7 @@ void OnroadSettingsButton::paintEvent(QPaintEvent *event) { void OnroadSettingsButton::updateState(const UIState &s) { const auto cp = (*s.sm)["carParams"].getCarParams(); - auto dlp_enabled = s.scene.dynamic_lane_profile_toggle; + auto dlp_enabled = true; bool allow_btn = dlp_enabled || hasLongitudinalControl(cp) || !cp.getPcmCruiseSpeed(); setVisible(allow_btn); @@ -477,6 +404,30 @@ AnnotatedCameraWidget::AnnotatedCameraWidget(VisionStreamType type, QWidget* par updateButtonsLayout(); } +void AnnotatedCameraWidget::mousePressEvent(QMouseEvent* e) { + bool propagate_event = true; + + UIState *s = uiState(); + UIScene &scene = s->scene; + const SubMaster &sm = *(s->sm); + auto longitudinal_plan_sp = sm["longitudinalPlanSP"].getLongitudinalPlanSP(); + + QRect speed_limit_touch_rect = scene.sl_sign_rect; + + if (longitudinal_plan_sp.getSpeedLimit() > 0.0 && speed_limit_touch_rect.contains(e->x(), e->y())) { + // If touching the speed limit sign area when visible + scene.last_speed_limit_sign_tap = seconds_since_boot(); + params.putBool("LastSpeedLimitSignTap", true); + scene.speed_limit_control_enabled = !scene.speed_limit_control_enabled; + params.putBool("EnableSlc", scene.speed_limit_control_enabled); + propagate_event = false; + } + + if (propagate_event) { + QWidget::mousePressEvent(e); + } +} + #ifdef ENABLE_DASHCAM void AnnotatedCameraWidget::offroadTransition(bool offroad) { if (offroad) { @@ -520,9 +471,10 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { const auto nav_instruction = sm["navInstruction"].getNavInstruction(); const auto car_control = sm["carControl"].getCarControl(); const auto radar_state = sm["radarState"].getRadarState(); - const auto gpsLocationExternal = sm["gpsLocationExternal"].getGpsLocationExternal(); + const auto is_gps_location_external = sm.rcv_frame("gpsLocationExternal") > 1; + const auto gpsLocation = is_gps_location_external ? sm["gpsLocationExternal"].getGpsLocationExternal() : sm["gpsLocation"].getGpsLocation(); const auto ltp = sm["liveTorqueParameters"].getLiveTorqueParameters(); - const auto lateral_plan_sp = sm["lateralPlanSP"].getLateralPlanSP(); + const auto lateral_plan_sp = sm["lateralPlanSPDEPRECATED"].getLateralPlanSPDEPRECATED(); // Handle older routes where vCruiseCluster is not set float v_cruise = cs.getVCruiseCluster() == 0.0 ? cs.getVCruise() : cs.getVCruiseCluster(); @@ -559,7 +511,7 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { latActive = car_control.getLatActive(); madsEnabled = car_state.getMadsEnabled(); - brakeLights = car_state.getBrakeLights() && s.scene.visual_brake_lights; + brakeLights = car_state.getBrakeLightsDEPRECATED() && s.scene.visual_brake_lights; standStillTimer = s.scene.stand_still_timer; standStill = car_state.getStandstill(); @@ -579,15 +531,14 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { curvature = cs.getCurvature(); roll = sm["liveParameters"].getLiveParameters().getRoll(); memoryUsagePercent = sm["deviceState"].getDeviceState().getMemoryUsagePercent(); - devUiEnabled = s.scene.dev_ui_enabled; devUiInfo = s.scene.dev_ui_info; - gpsAccuracy = gpsLocationExternal.getAccuracy(); - altitude = gpsLocationExternal.getAltitude(); + gpsAccuracy = is_gps_location_external ? gpsLocation.getAccuracy() : 1.0; //External reports accuracy, internal does not. + altitude = gpsLocation.getAltitude(); vEgo = car_state.getVEgo(); aEgo = car_state.getAEgo(); steeringTorqueEps = car_state.getSteeringTorqueEps(); - bearingAccuracyDeg = gpsLocationExternal.getBearingAccuracyDeg(); - bearingDeg = gpsLocationExternal.getBearingDeg(); + bearingAccuracyDeg = gpsLocation.getBearingAccuracyDeg(); + bearingDeg = gpsLocation.getBearingDeg(); torquedUseParams = (ltp.getUseParams() || s.scene.live_torque_toggle) && !s.scene.torqued_override; latAccelFactorFiltered = ltp.getLatAccelFactorFiltered(); frictionCoefficientFiltered = ltp.getFrictionCoefficientFiltered(); @@ -598,7 +549,7 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { left_blinker = car_state.getLeftBlinker(); right_blinker = car_state.getRightBlinker(); - lane_change_edge_block = lateral_plan_sp.getLaneChangeEdgeBlock(); + lane_change_edge_block = lateral_plan_sp.getLaneChangeEdgeBlockDEPRECATED(); // update engageability/experimental mode button experimental_btn->updateState(s); @@ -606,6 +557,11 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { // update onroad settings button state onroad_settings_btn->updateState(s); +#ifdef ENABLE_DASHCAM + // update screen recorder button + recorder->updateState(s); +#endif + // update buttons layout updateButtonsLayout(); @@ -625,9 +581,17 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { // hide onroad settings button for alerts and flip for right hand DM if (onroad_settings_btn->isEnabled()) { onroad_settings_btn->setVisible(!hideBottomIcons); - main_layout->setAlignment(onroad_settings_btn, (rightHandDM ? Qt::AlignLeft : Qt::AlignRight) | Qt::AlignBottom); + main_layout->setAlignment(onroad_settings_btn, (rightHandDM ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignBottom); } +#ifdef ENABLE_DASHCAM + // hide screen recorder button for alerts and flip for right hand DM + if (recorder->isEnabled()) { + recorder->setVisible(!hideBottomIcons); + main_layout->setAlignment(recorder, (rightHandDM ? Qt::AlignLeft : Qt::AlignRight) | Qt::AlignBottom); + } +#endif + const auto lp_sp = sm["longitudinalPlanSP"].getLongitudinalPlanSP(); slcState = lp_sp.getSpeedLimitControlState(); @@ -658,38 +622,46 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { slcState == cereal::LongitudinalPlanSP::SpeedLimitControlState::INACTIVE); const bool sl_temp_inactive = !sl_force_active && (s.scene.speed_limit_control_enabled && slcState == cereal::LongitudinalPlanSP::SpeedLimitControlState::TEMP_INACTIVE); + const bool sl_pre_active = !sl_force_active && (s.scene.speed_limit_control_enabled && + slcState == cereal::LongitudinalPlanSP::SpeedLimitControlState::PRE_ACTIVE); const int sl_distance = int(lp_sp.getDistToSpeedLimit() * (s.scene.is_metric ? MS_TO_KPH : MS_TO_MPH) / 10.0) * 10; const QString sl_distance_str(QString::number(sl_distance) + (s.scene.is_metric ? "m" : "f")); const QString sl_offset_str(speed_limit_offset > 0.0 ? speed_limit_offset < 0.0 ? "-" + QString::number(std::nearbyint(std::abs(speed_limit_offset))) : "+" + QString::number(std::nearbyint(speed_limit_offset)) : ""); - const QString sl_inactive_str(sl_temp_inactive ? "TEMP" : ""); - const QString sl_substring(sl_inactive || sl_temp_inactive ? sl_inactive_str : + const QString sl_inactive_str(sl_temp_inactive && s.scene.speed_limit_control_engage_type == 0 ? "TEMP" : ""); + const QString sl_substring(sl_inactive || sl_temp_inactive || sl_pre_active ? sl_inactive_str : sl_distance > 0 ? sl_distance_str : sl_offset_str); showSpeedLimit = speed_limit_slc > 0.0; speedLimitSLC = speed_limit_slc; + speedLimitSLCOffset = speed_limit_offset; slcSubText = sl_substring; slcSubTextSize = sl_inactive || sl_temp_inactive || sl_distance > 0 ? 25.0 : 27.0; mapSourcedSpeedLimit = lp_sp.getIsMapSpeedLimit(); slcActive = !sl_inactive && !sl_temp_inactive; - overSpeedLimit = (((speed_limit_slc + speed_limit_offset) < speed) && !sl_inactive && !sl_temp_inactive) || - ((speed_limit_slc < speed) && (speed_limit_slc > 0.0) && (sl_inactive || sl_temp_inactive)); + overSpeedLimit = showSpeedLimit && s.scene.speed_limit_warning_type != 0 && + (std::nearbyint(speed_limit_slc + s.scene.speed_limit_warning_value_offset) < std::nearbyint(speed)); + plus_arrow_up_img = loadPixmap("../assets/img_plus_arrow_up", {105, 105}); + minus_arrow_down_img = loadPixmap("../assets/img_minus_arrow_down", {105, 105}); const float tsc_speed = lp_sp.getTurnSpeed() * (s.scene.is_metric ? MS_TO_KPH : MS_TO_MPH); const auto tscState = lp_sp.getTurnSpeedControlState(); const int t_distance = int(lp_sp.getDistToTurn() * (s.scene.is_metric ? MS_TO_KPH : MS_TO_MPH) / 10.0) * 10; const QString t_distance_str(QString::number(t_distance) + (s.scene.is_metric ? "m" : "f")); - showTurnSpeedLimit = tsc_speed > 0.0 && (tsc_speed < speed || s.scene.show_debug_ui); + showTurnSpeedLimit = tsc_speed > 0.0 && std::round(tsc_speed) < 224 && (tsc_speed < speed || s.scene.show_debug_ui); turnSpeedLimit = QString::number(std::nearbyint(tsc_speed)); tscSubText = t_distance > 0 ? t_distance_str : QString(""); tscActive = tscState > cereal::LongitudinalPlanSP::SpeedLimitControlState::TEMP_INACTIVE; curveSign = lp_sp.getTurnSign(); } + // TODO: Add toggle variables to cereal, and parse from cereal longitudinalPersonality = s.scene.longitudinal_personality; dynamicLaneProfile = s.scene.dynamic_lane_profile; + mpcMode = QString::fromStdString(lp_sp.getE2eBlended()); + mpcMode = (mpcMode == "blended") ? mpcMode.replace(0, 1, mpcMode[0].toUpper()) : mpcMode.toUpper(); static int reverse_delay = 0; bool reverse_allowed = false; @@ -730,7 +702,7 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { } } - if ((car_state.getCruiseState().getEnabled() || car_state.getBrakeLights()) && !car_state.getGasPressed() && car_state.getStandstill()) { + if ((car_state.getCruiseState().getEnabled() || car_state.getBrakeLightsDEPRECATED()) && !car_state.getGasPressed() && car_state.getStandstill()) { if (e2eLStatus == 2 && !radar_state.getLeadOne().getStatus()) { if (chime_sent) { chime_count = 0; @@ -762,9 +734,7 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { e2eStatus = chime_prompt; e2eState = e2eLStatus; -#ifdef ENABLE_DASHCAM - recorder->updateState(s); -#endif + experimental_btn->setVisible(!(showDebugUI && showVTC)); } void AnnotatedCameraWidget::drawHud(QPainter &p) { @@ -837,8 +807,12 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { p.drawText(set_speed_rect.adjusted(0, 77, 0, 0), Qt::AlignTop | Qt::AlignHCenter, setSpeedStr); const QRect sign_rect = set_speed_rect.adjusted(sign_margin, default_size.height(), -sign_margin, -sign_margin); + uiState()->scene.sl_sign_rect = sign_rect; + + speedLimitWarning(p, sign_rect, sign_margin); + // US/Canada (MUTCD style) sign - if ((mapSourcedSpeedLimit && !is_metric && !isNavSpeedLimit) || has_us_speed_limit) { + if (((mapSourcedSpeedLimit && !is_metric && !isNavSpeedLimit) || has_us_speed_limit) && slcShowSign) { p.setPen(Qt::NoPen); p.setBrush(whiteColor()); p.drawRoundedRect(sign_rect, 24, 24); @@ -860,7 +834,7 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { } // EU (Vienna style) sign - if ((mapSourcedSpeedLimit && is_metric && !isNavSpeedLimit) || has_eu_speed_limit) { + if (((mapSourcedSpeedLimit && is_metric && !isNavSpeedLimit) || has_eu_speed_limit) && slcShowSign) { p.setPen(Qt::NoPen); p.setBrush(whiteColor()); p.drawEllipse(sign_rect); @@ -889,7 +863,7 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { if (!reversing) { // ####### 1 ROW ####### QRect bar_rect1(rect().left(), rect().bottom() - 60, rect().width(), 61); - if (!hideBottomIcons && devUiEnabled && !splitPanelVisible && devUiInfo == 1) { + if (!splitPanelVisible && devUiInfo == 2) { p.setPen(Qt::NoPen); p.setBrush(QColor(0, 0, 0, 100)); p.drawRect(bar_rect1); @@ -898,12 +872,12 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { // ####### 1 COLUMN ######## QRect rc2(rect().right() - (UI_BORDER_SIZE * 2), UI_BORDER_SIZE * 1.5, 184, 152); - if (devUiEnabled) { + if (devUiInfo != 0) { drawRightDevUi(p, rect().right() - 184 - UI_BORDER_SIZE * 2, UI_BORDER_SIZE * 2 + rc2.height()); } int rn_btn = 0; - rn_btn = devUiEnabled && !splitPanelVisible && devUiInfo == 1 ? 35 : 0; + rn_btn = !splitPanelVisible && devUiInfo == 2 ? 35 : 0; uiState()->scene.rn_offset = rn_btn; // Stand Still Timer @@ -913,24 +887,21 @@ void AnnotatedCameraWidget::drawHud(QPainter &p) { // V-TSC if (showDebugUI && showVTC) { - drawVisionTurnControllerUI(p, rect().right() - 184 - UI_BORDER_SIZE, int(UI_BORDER_SIZE * 1.5), 184, vtcColor, vtcSpeed, 100); + drawVisionTurnControllerUI(p, rect().right() - 184 - (UI_BORDER_SIZE * 1.5), int(UI_BORDER_SIZE * 1.5), 184, vtcColor, vtcSpeed, 100); } // Bottom bar road name if (showDebugUI && !roadName.isEmpty()) { - const int h = 38; - QRect bar_rc(rect().left(), rect().top(), rect().width(), h); - p.setPen(Qt::NoPen); - p.setBrush(QColor(0, 0, 0, 100)); - p.drawRect(bar_rc); - p.setFont(InterFont(28, QFont::Bold)); - drawCenteredText(p, bar_rc.center().x(), bar_rc.center().y(), roadName, QColor(255, 255, 255, 200)); + int font_size = splitPanelVisible ? 38 : 50; + int h = splitPanelVisible ? 18 : 26; + p.setFont(InterFont(font_size, QFont::Bold)); + drawRoadNameText(p, rect().center().x(), h, roadName, QColor(255, 255, 255, 255)); } // Turn Speed Sign if (showTurnSpeedLimit) { - QRect rc = speed_sgn_rc; - rc.moveTop(speed_sgn_rc.bottom() + UI_BORDER_SIZE); + QRect rc = uiState()->scene.sl_sign_rect; + rc.moveTop(uiState()->scene.sl_sign_rect.bottom() + UI_BORDER_SIZE); drawTrunSpeedSign(p, rc, turnSpeedLimit, tscSubText, curveSign, tscActive); } } @@ -971,6 +942,22 @@ void AnnotatedCameraWidget::drawCenteredText(QPainter &p, int x, int y, const QS p.drawText(real_rect, Qt::AlignCenter, text); } +void AnnotatedCameraWidget::drawRoadNameText(QPainter &p, int x, int y, const QString &text, QColor color) { + QRect real_rect = p.fontMetrics().boundingRect(text); + real_rect.moveCenter({x, y}); + + QRect real_rect_adjusted(real_rect); + real_rect_adjusted.adjust(-UI_ROAD_NAME_MARGIN_X, 5, UI_ROAD_NAME_MARGIN_X, 0); + QPainterPath path; + path.addRoundedRect(real_rect_adjusted, 10, 10); + p.setPen(Qt::NoPen); + p.setBrush(QColor(0, 0, 0, 100)); + p.drawPath(path); + + p.setPen(color); + p.drawText(real_rect, Qt::AlignCenter, text); +} + void AnnotatedCameraWidget::drawVisionTurnControllerUI(QPainter &p, int x, int y, int size, const QColor &color, const QString &vision_speed, int alpha) { QRect rvtc(x, y, size, size); @@ -1039,8 +1026,8 @@ void AnnotatedCameraWidget::drawTrunSpeedSign(QPainter &p, QRect rc, const QStri const QColor text_color = QColor(0, 0, 0, is_active ? 255 : 85); const int x = rc.center().x(); - const int y = rc.center().y(); - const int width = rc.width(); + const int y = 184 * 2 + UI_BORDER_SIZE + 202; + const int width = 184; const float stroke_w = 15.0; const float cS = stroke_w / 2.0 + 4.5; // half width of the stroke on the corners of the triangle @@ -1251,19 +1238,19 @@ void AnnotatedCameraWidget::drawRightDevUi(QPainter &p, int x, int y) { ry = y + rh; } - // Add Device Memory Usage + // Add Device Memory (RAM) Usage // Unit: Percent if (true) { char val_str[16]; QColor valueColor = QColor(255, 255, 255, 255); - if (memoryUsagePercent > 75) { + if (memoryUsagePercent > 85) { valueColor = QColor(255, 188, 0, 255); } snprintf(val_str, sizeof(val_str), "%d%s", (int)memoryUsagePercent, "%"); - rh += drawDevUiElementRight(p, x, ry, val_str, "MEMORY", "", valueColor); + rh += drawDevUiElementRight(p, x, ry, val_str, "RAM", "", valueColor); ry = y + rh; } @@ -1542,6 +1529,14 @@ int AnnotatedCameraWidget::blinkerPulse(int frame) { return blinker_state; } +void AnnotatedCameraWidget::speedLimitSignPulse(int frame) { + if (frame % UI_FREQ < (UI_FREQ / 2.5)) { + slcShowSign = false; + } else { + slcShowSign = true; + } +} + void AnnotatedCameraWidget::drawFeatureStatusText(QPainter &p, int x, int y) { const FeatureStatusText feature_text; const FeatureStatusColor feature_color; @@ -1584,16 +1579,73 @@ void AnnotatedCameraWidget::drawFeatureStatusText(QPainter &p, int x, int y) { } // Dynamic Lane Profile - if (uiState()->scene.dynamic_lane_profile_toggle) { - drawFeatureStatusElement(dynamicLaneProfile, feature_text.dlp_list_text, feature_color.dlp_list_color, uiState()->scene.dynamic_lane_profile_toggle, "OFF", "DLP"); + if (uiState()->scene.driving_model_gen == 1) { + drawFeatureStatusElement(dynamicLaneProfile, feature_text.dlp_list_text, feature_color.dlp_list_color, true, "OFF", "DLP"); } + // TODO: Add toggle variables to cereal, and parse from cereal + if (longitudinal) { + bool cruise_enabled = (*uiState()->sm)["carState"].getCarState().getCruiseState().getEnabled(); + bool dec_enabled = uiState()->scene.dynamic_experimental_control; + bool experimental_mode = (*uiState()->sm)["controlsState"].getControlsState().getExperimentalMode(); + QColor dec_color((cruise_enabled && dec_enabled) ? "#4bff66" : "#ffffff"); + QRect dec_btn(x - eclipse_x_offset, y - eclipse_y_offset, w, h); + QRect dec_btn_shadow(x - eclipse_x_offset + drop_shadow_size, y - eclipse_y_offset + drop_shadow_size, w, h); + p.setPen(Qt::NoPen); + p.setBrush(shadow_color); + p.drawEllipse(dec_btn_shadow); + p.setBrush(dec_color); + p.drawEllipse(dec_btn); + QString dec_status_text; + dec_status_text.sprintf("DEC: %s\n", dec_enabled ? (experimental_mode ? QString(mpcMode).toStdString().c_str() : QString("Inactive").toStdString().c_str()) : "OFF"); + p.setPen(QPen(shadow_color, 2)); + p.drawText(x + drop_shadow_size, y + drop_shadow_size, dec_status_text); + p.setPen(QPen(text_color, 2)); + p.drawText(x, y, dec_status_text); + y += text_height; + } + + // TODO: Add toggle variables to cereal, and parse from cereal // Speed Limit Control if (longitudinal || !cp.getPcmCruiseSpeed()) { drawFeatureStatusElement(int(slcState), feature_text.slc_list_text, feature_color.slc_list_color, uiState()->scene.speed_limit_control_enabled, "OFF", "SLC"); } } +void AnnotatedCameraWidget::speedLimitWarning(QPainter &p, QRect sign_rect, const int sign_margin) { + // PRE ACTIVE + if (slcState == cereal::LongitudinalPlanSP::SpeedLimitControlState::PRE_ACTIVE) { + int set_speed = std::nearbyint(setSpeed); + int speed_limit_offsetted = std::nearbyint(speedLimitSLC + speedLimitSLCOffset); + + // Calculate the vertical offset using a sinusoidal function for smooth bouncing + double bounce_frequency = 2.0 * M_PI / 20.0; // 20 frames for one full oscillation + int bounce_offset = 20 * sin(speed_limit_frame * bounce_frequency); // Adjust the amplitude (20 pixels) as needed + + if (set_speed < speed_limit_offsetted) { + QPoint iconPosition(sign_rect.right() + sign_margin * 3, sign_rect.center().y() - plus_arrow_up_img.height() / 2 + bounce_offset); + p.drawPixmap(iconPosition, plus_arrow_up_img); + } else if (set_speed > speed_limit_offsetted) { + QPoint iconPosition(sign_rect.right() + sign_margin * 3, sign_rect.center().y() - minus_arrow_down_img.height() / 2 - bounce_offset); + p.drawPixmap(iconPosition, minus_arrow_down_img); + } + + speed_limit_frame++; + speedLimitSignPulse(speed_limit_frame); + } + + // current speed over speed limit + else if (overSpeedLimit && uiState()->scene.speed_limit_warning_flash) { + speed_limit_frame++; + speedLimitSignPulse(speed_limit_frame); + } + + else { + speed_limit_frame = 0; + slcShowSign = true; + } +} + void AnnotatedCameraWidget::initializeGL() { CameraWidget::initializeGL(); @@ -1630,6 +1682,8 @@ void AnnotatedCameraWidget::drawLaneLines(QPainter &painter, const UIState *s) { const UIScene &scene = s->scene; SubMaster &sm = *(s->sm); + const auto car_state = sm["carState"].getCarState(); + // Shane's colored lanelines for (int i = 0; i < std::size(scene.lane_line_vertices); ++i) { if (i == 1 || i == 2) { @@ -1659,12 +1713,12 @@ void AnnotatedCameraWidget::drawLaneLines(QPainter &painter, const UIState *s) { // paint path QLinearGradient bg(0, height(), 0, height() / 4); - if (madsEnabled || sm["carState"].getCarState().getCruiseState().getEnabled()) { + if (madsEnabled || car_state.getCruiseState().getEnabled()) { if (steerOverride && latActive) { bg.setColorAt(0.0, QColor::fromHslF(20 / 360., 0.94, 0.51, 0.17)); bg.setColorAt(0.5, QColor::fromHslF(20 / 360., 1.0, 0.68, 0.17)); bg.setColorAt(1.0, QColor::fromHslF(20 / 360., 1.0, 0.68, 0.0)); - } else if (!(latActive || sm["carState"].getCarState().getCruiseState().getEnabled())) { + } else if (!(latActive || car_state.getCruiseState().getEnabled())) { bg.setColorAt(0, whiteColor()); bg.setColorAt(1, whiteColor(0)); } else if (sm["controlsState"].getControlsState().getExperimentalMode()) { @@ -1871,7 +1925,6 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) { SubMaster &sm = *(s->sm); const double start_draw_t = millis_since_boot(); const cereal::ModelDataV2::Reader &model = sm["modelV2"].getModelV2(); - const cereal::RadarState::Reader &radar_state = sm["radarState"].getRadarState(); QPainter painter(this); @@ -1909,7 +1962,7 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) { CameraWidget::setStreamType(wide_cam_requested ? VISION_STREAM_WIDE_ROAD : VISION_STREAM_ROAD); if (reversing && s->scene.reverse_dm_cam) { - CameraWidget::setStreamType(VISION_STREAM_DRIVER); + CameraWidget::setStreamType(VISION_STREAM_DRIVER, s->scene.reverse_dm_cam); } s->scene.wide_cam = CameraWidget::getStreamType() == VISION_STREAM_WIDE_ROAD; @@ -1928,17 +1981,13 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) { painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); - if (s->worldObjectsVisible()) { - if (sm.rcv_frame("modelV2") > s->scene.started_frame) { - update_model(s, model, sm["uiPlan"].getUiPlan()); - if (sm.rcv_frame("radarState") > s->scene.started_frame) { - update_leads(s, radar_state, model.getPosition()); - } - } - + if (s->scene.world_objects_visible) { + update_model(s, model, sm["uiPlan"].getUiPlan()); drawLaneLines(painter, s); - if (s->scene.longitudinal_control) { + if (s->scene.longitudinal_control && sm.rcv_frame("radarState") > s->scene.started_frame) { + auto radar_state = sm["radarState"].getRadarState(); + update_leads(s, radar_state, model.getPosition()); auto lead_one = radar_state.getLeadOne(); auto lead_two = radar_state.getLeadTwo(); float v_ego = sm["carState"].getCarState().getVEgo(); diff --git a/selfdrive/ui/qt/onroad.h b/selfdrive/ui/qt/onroad.h index e5ad14dd0d..091a47da88 100644 --- a/selfdrive/ui/qt/onroad.h +++ b/selfdrive/ui/qt/onroad.h @@ -124,6 +124,11 @@ private: void updateButtonsLayout(); void drawFeatureStatusText(QPainter &p, int x, int y); + void speedLimitSignPulse(int frame); + void speedLimitWarning(QPainter &p, QRect sign_rect, const int sign_margin); + void mousePressEvent(QMouseEvent* e) override; + void drawRoadNameText(QPainter &p, int x, int y, const QString &text, QColor color); + Params params; QVBoxLayout *main_layout; QHBoxLayout *buttons_layout; @@ -175,6 +180,8 @@ private: bool showSpeedLimit = false; float speedLimitSLC; + float speedLimitSLCOffset; + float speedLimitWarningOffset; QString slcSubText; float slcSubTextSize = 0.0; bool overSpeedLimit; @@ -201,7 +208,6 @@ private: float curvature; float roll; int memoryUsagePercent; - bool devUiEnabled; int devUiInfo; float gpsAccuracy; float altitude; @@ -230,6 +236,12 @@ private: cereal::LongitudinalPlanSP::SpeedLimitControlState slcState; int longitudinalPersonality; int dynamicLaneProfile; + QString mpcMode; + + int speed_limit_frame; + bool slcShowSign = true; + QPixmap plus_arrow_up_img; + QPixmap minus_arrow_down_img; protected: void paintGL() override; @@ -295,12 +307,12 @@ private: QWidget *map = nullptr; QHBoxLayout* split; - Params params; - QWidget *onroad_settings = nullptr; + Params params; private slots: void offroadTransition(bool offroad); void primeChanged(bool prime); void updateState(const UIState &s); + void updateMapSize(const UIScene &scene); }; diff --git a/selfdrive/ui/qt/onroad_settings.cc b/selfdrive/ui/qt/onroad_settings.cc index 988b49f8e8..e33e769f7e 100644 --- a/selfdrive/ui/qt/onroad_settings.cc +++ b/selfdrive/ui/qt/onroad_settings.cc @@ -7,6 +7,7 @@ #include "common/util.h" #include "selfdrive/ui/qt/widgets/scrollview.h" +#include "selfdrive/ui/qt/offroad/sunnypilot/speed_limit_policy_settings.h" OnroadSettings::OnroadSettings(bool closeable, QWidget *parent) : QFrame(parent) { setContentsMargins(0, 0, 0, 0); @@ -68,6 +69,10 @@ OnroadSettings::OnroadSettings(bool closeable, QWidget *parent) : QFrame(parent) options_layout->addWidget(dlp_widget = new OptionWidget(this)); QObject::connect(dlp_widget, &OptionWidget::updateParam, this, &OnroadSettings::changeDynamicLaneProfile); + // Dynamic Experimental Control + options_layout->addWidget(dec_widget = new OptionWidget(this)); + QObject::connect(dec_widget, &OptionWidget::updateParam, this, &OnroadSettings::changeDynamicExperimentalControl); + // Speed Limit Control options_layout->addWidget(slc_widget = new OptionWidget(this)); QObject::connect(slc_widget, &OptionWidget::updateParam, this, &OnroadSettings::changeSpeedLimitControl); @@ -106,7 +111,7 @@ OnroadSettings::OnroadSettings(bool closeable, QWidget *parent) : QFrame(parent) void OnroadSettings::changeDynamicLaneProfile() { UIScene &scene = uiState()->scene; - bool can_change = scene.dynamic_lane_profile_toggle; + bool can_change = true; if (can_change) { scene.dynamic_lane_profile++; scene.dynamic_lane_profile = scene.dynamic_lane_profile > 2 ? 0 : scene.dynamic_lane_profile; @@ -127,12 +132,38 @@ void OnroadSettings::changeGapAdjustCruise() { refresh(); } +void OnroadSettings::changeDynamicExperimentalControl() { + UIScene &scene = uiState()->scene; + const auto cp = (*uiState()->sm)["carParams"].getCarParams(); + bool can_change = hasLongitudinalControl(cp); + if (can_change) { + scene.dynamic_experimental_control = !scene.dynamic_experimental_control; + params.putBool("DynamicExperimentalControl", scene.dynamic_experimental_control); + } + refresh(); +} + void OnroadSettings::changeSpeedLimitControl() { UIScene &scene = uiState()->scene; - bool can_change = true; + const auto cp = (*uiState()->sm)["carParams"].getCarParams(); + bool can_change = hasLongitudinalControl(cp) || !cp.getPcmCruiseSpeed(); + int max_policy = SpeedLimitPolicySettings::speed_limit_policy_texts.size() - 1; + if (can_change) { - scene.speed_limit_control_enabled = !scene.speed_limit_control_enabled; - params.putBool("SpeedLimitControl", scene.speed_limit_control_enabled); + if (!scene.speed_limit_control_enabled) { + // If EnableSlc is OFF, set it to ON and reset SpeedLimitControlPolicy + scene.speed_limit_control_enabled = true; + scene.speed_limit_control_policy = 0; + } else if(scene.speed_limit_control_policy < max_policy) { + // If EnableSlc is already ON then increase SpeedLimitControlPolicy till it reaches 6 + scene.speed_limit_control_policy++; + } else { + // Once we cycle through all SpeedLimitControlPolicy, set EnableSlc to OFF and reset SpeedLimitControlPolicy + scene.speed_limit_control_enabled = false; + scene.speed_limit_control_policy = 0; + } + params.putBool("EnableSlc", scene.speed_limit_control_enabled); + params.put("SpeedLimitControlPolicy", std::to_string(scene.speed_limit_control_policy)); } refresh(); } @@ -143,15 +174,17 @@ void OnroadSettings::showEvent(QShowEvent *event) { void OnroadSettings::refresh() { param_watcher->addParam("DynamicLaneProfile"); - param_watcher->addParam("DynamicLaneProfileToggle"); param_watcher->addParam("LongitudinalPersonality"); - param_watcher->addParam("SpeedLimitControl"); + param_watcher->addParam("DynamicExperimentalControl"); + param_watcher->addParam("EnableSlc"); UIScene &scene = uiState()->scene; // Update live params on Feature Status on camera view scene.dynamic_lane_profile = std::atoi(params.get("DynamicLaneProfile").c_str()); scene.longitudinal_personality = std::atoi(params.get("LongitudinalPersonality").c_str()); - scene.speed_limit_control_enabled = params.getBool("SpeedLimitControl"); + scene.dynamic_experimental_control = params.getBool("DynamicExperimentalControl"); + scene.speed_limit_control_enabled = params.getBool("EnableSlc"); + scene.speed_limit_control_policy = std::atoi(params.get("SpeedLimitControlPolicy").c_str()); if (!isVisible()) return; @@ -161,15 +194,19 @@ void OnroadSettings::refresh() { // Dynamic Lane Profile dlp_widget->updateDynamicLaneProfile("DynamicLaneProfile"); - dlp_widget->setVisible(params.getBool("DynamicLaneProfileToggle")); + dlp_widget->setVisible(scene.driving_model_gen == 1); // Gap Adjust Cruise gac_widget->updateGapAdjustCruise("LongitudinalPersonality"); gac_widget->setVisible(hasLongitudinalControl(cp)); + // Dynamic Experimental Control + dec_widget->updateDynamicExperimentalControl("DynamicExperimentalControl"); + dec_widget->setVisible(hasLongitudinalControl(cp)); + // Speed Limit Control - slc_widget->updateSpeedLimitControl("SpeedLimitControl"); - slc_widget->setVisible(true); + slc_widget->updateSpeedLimitControl("EnableSlc"); + slc_widget->setVisible(hasLongitudinalControl(cp) || !cp.getPcmCruiseSpeed()); setUpdatesEnabled(true); } @@ -272,16 +309,16 @@ void OptionWidget::updateGapAdjustCruise(QString param) { setStyleSheet(styleSheet()); } -void OptionWidget::updateSpeedLimitControl(QString param) { +void OptionWidget::updateDynamicExperimentalControl(QString param) { auto icon_color = "#3B4356"; auto title_text = ""; - auto subtitle_text = "Speed Limit Conrol"; - auto speed_limit_control = atoi(params.get(param.toStdString()).c_str()); + auto subtitle_text = "Dynamic Experimental"; + auto long_personality = atoi(params.get(param.toStdString()).c_str()); - if (speed_limit_control == 0) { + if (long_personality == 0) { title_text = "Disabled"; icon_color = "#3B4356"; - } else if (speed_limit_control == 1) { + } else if (long_personality == 1) { title_text = "Enabled"; icon_color = "#0df87a"; } @@ -294,3 +331,41 @@ void OptionWidget::updateSpeedLimitControl(QString param) { setStyleSheet(styleSheet()); } + +void OptionWidget::updateSpeedLimitControl(QString param) { + auto subtitle_text = "Speed Limit Control"; + std::string icon_color; // Declare icon_color here + + // Define the speed_limit_policy_texts + const auto& speed_limit_policy_texts = SpeedLimitPolicySettings::speed_limit_policy_texts; + + auto enable_slc_status = atoi(params.get(param.toStdString()).c_str()); + auto speed_limit_control_policy_status = atoi(params.get("SpeedLimitControlPolicy").c_str()); + auto title_text = QString(speed_limit_policy_texts.at(speed_limit_control_policy_status)).replace("\n", " "); + + std::map color_map = { + {0, "#1f77b4"}, // Muted blue for "Nav Only" + {1, "#2ca02c"}, // Cooked asparagus green for "Map Only" + {2, "#d62728"}, // Brick red for "Car Only" + {3, "#9467bd"}, // Muted purple for "Nav First" + {4, "#8c564b"}, // Chestnut brown for "Map First" + {5, "#e377c2"}, // Raspberry yogurt pink for "Car First" + {6, "#FFA500"}, // Orange for "Combined" + }; + + if (enable_slc_status == 0) { + title_text = "Disabled"; + icon_color = "#3B4356"; // Color for "Disabled status" + } + else if (enable_slc_status == 1) { + title_text = title_text; + icon_color = color_map[speed_limit_control_policy_status]; // Color for "Enabled status" + } + + icon->setStyleSheet(QString("QLabel#icon { background-color: %1; border-radius: 34px; }").arg(icon_color.c_str())); + title->setText(title_text); + subtitle->setText(subtitle_text); + subtitle->setVisible(true); + + setStyleSheet(styleSheet()); +} diff --git a/selfdrive/ui/qt/onroad_settings.h b/selfdrive/ui/qt/onroad_settings.h index b170af5b4e..f7fcf8198d 100644 --- a/selfdrive/ui/qt/onroad_settings.h +++ b/selfdrive/ui/qt/onroad_settings.h @@ -19,6 +19,7 @@ public: explicit OnroadSettings(bool closeable = false, QWidget *parent = nullptr); void changeDynamicLaneProfile(); void changeGapAdjustCruise(); + void changeDynamicExperimentalControl(); void changeSpeedLimitControl(); private: @@ -30,6 +31,7 @@ private: QVBoxLayout *options_layout; OptionWidget *dlp_widget; OptionWidget *gac_widget; + OptionWidget *dec_widget; OptionWidget *slc_widget; ParamWatcher *param_watcher; @@ -44,6 +46,7 @@ public: explicit OptionWidget(QWidget *parent = nullptr); void updateDynamicLaneProfile(QString param); void updateGapAdjustCruise(QString param); + void updateDynamicExperimentalControl(QString param); void updateSpeedLimitControl(QString param); signals: diff --git a/selfdrive/ui/qt/onroad_settings_panel.h b/selfdrive/ui/qt/onroad_settings_panel.h index 4c7050e736..8b81aef25a 100644 --- a/selfdrive/ui/qt/onroad_settings_panel.h +++ b/selfdrive/ui/qt/onroad_settings_panel.h @@ -1,7 +1,9 @@ #pragma once #include -#include +#ifdef ENABLE_MAPS +#include +#endif #include class OnroadSettingsPanel : public QFrame { diff --git a/selfdrive/ui/qt/screenrecorder/screenrecorder.cc b/selfdrive/ui/qt/screenrecorder/screenrecorder.cc index f210af29a9..fa6ac96e20 100644 --- a/selfdrive/ui/qt/screenrecorder/screenrecorder.cc +++ b/selfdrive/ui/qt/screenrecorder/screenrecorder.cc @@ -28,6 +28,7 @@ ScreenRecoder::ScreenRecoder(QWidget *parent) : QPushButton(parent), image_queue rec_btn_size = 150; setVisible(false); + setEnabled(false); setFixedSize(rec_btn_size, rec_btn_size); setFocusPolicy(Qt::NoFocus); QObject::connect(this, &QPushButton::clicked, [=]() { @@ -183,4 +184,5 @@ void ScreenRecoder::update_screen() { void ScreenRecoder::updateState(const UIState &s) { bool show_toggle = params.getBool("ScreenRecorder") || recording; setVisible(show_toggle); + setEnabled(show_toggle); } diff --git a/selfdrive/ui/qt/setup/reset.cc b/selfdrive/ui/qt/setup/reset.cc index 7999dd640b..c9e0525784 100644 --- a/selfdrive/ui/qt/setup/reset.cc +++ b/selfdrive/ui/qt/setup/reset.cc @@ -57,7 +57,7 @@ Reset::Reset(ResetMode mode, QWidget *parent) : QWidget(parent) { main_layout->addSpacing(60); - body = new QLabel(tr("Press confirm to erase all content and settings. Press cancel to resume boot.")); + body = new QLabel(tr("System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.")); body->setWordWrap(true); body->setStyleSheet("font-size: 80px; font-weight: light;"); main_layout->addWidget(body, 1, Qt::AlignTop | Qt::AlignLeft); @@ -97,11 +97,6 @@ Reset::Reset(ResetMode mode, QWidget *parent) : QWidget(parent) { body->setText(tr("Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device.")); } - // automatically start if we're just finishing up an ABL reset - if (mode == ResetMode::FORMAT) { - startReset(); - } - setStyleSheet(R"( * { font-family: Inter; @@ -129,8 +124,6 @@ int main(int argc, char *argv[]) { if (argc > 1) { if (strcmp(argv[1], "--recover") == 0) { mode = ResetMode::RECOVER; - } else if (strcmp(argv[1], "--format") == 0) { - mode = ResetMode::FORMAT; } } diff --git a/selfdrive/ui/qt/setup/reset.h b/selfdrive/ui/qt/setup/reset.h index 04a191d829..8bf368e3e8 100644 --- a/selfdrive/ui/qt/setup/reset.h +++ b/selfdrive/ui/qt/setup/reset.h @@ -5,7 +5,6 @@ enum ResetMode { USER_RESET, // user initiated a factory reset from openpilot RECOVER, // userdata is corrupt for some reason, give a chance to recover - FORMAT, // finish up an ABL factory reset }; class Reset : public QWidget { diff --git a/selfdrive/ui/qt/setup/setup.cc b/selfdrive/ui/qt/setup/setup.cc index 3b3666b19a..4f2e4f48cb 100644 --- a/selfdrive/ui/qt/setup/setup.cc +++ b/selfdrive/ui/qt/setup/setup.cc @@ -20,7 +20,7 @@ #include "selfdrive/ui/qt/widgets/input.h" const std::string USER_AGENT = "AGNOSSetup-"; -const QString DASHCAM_URL = "https://dashcam.comma.ai"; +const QString TEST_URL = "https://openpilot.comma.ai"; bool is_elf(char *fname) { FILE *fp = fopen(fname, "rb"); @@ -34,6 +34,11 @@ bool is_elf(char *fname) { } void Setup::download(QString url) { + // autocomplete incomplete urls + if (QRegularExpression("^([^/.]+)/([^/]+)$").match(url).hasMatch()) { + url.prepend("https://installer.comma.ai/"); + } + CURL *curl = curl_easy_init(); if (!curl) { emit finished(url, tr("Something went wrong. Reboot the device.")); @@ -224,11 +229,11 @@ QWidget * Setup::network_setup() { } repaint(); }); - request->sendRequest(DASHCAM_URL); + request->sendRequest(TEST_URL); QTimer *timer = new QTimer(this); QObject::connect(timer, &QTimer::timeout, [=]() { if (!request->active() && cont->isVisible()) { - request->sendRequest(DASHCAM_URL); + request->sendRequest(TEST_URL); } }); timer->start(1000); diff --git a/selfdrive/ui/qt/sidebar.cc b/selfdrive/ui/qt/sidebar.cc index 874a0857c5..f79745dca9 100644 --- a/selfdrive/ui/qt/sidebar.cc +++ b/selfdrive/ui/qt/sidebar.cc @@ -95,12 +95,14 @@ void Sidebar::updateState(const UIState &s) { if (sm.frame % UI_FREQ == 0) { // Update every 1 Hz switch (s.scene.sidebar_temp_options) { case 0: - sidebar_temp = QString::number((int)deviceState.getAmbientTempC()); break; case 1: + sidebar_temp = QString::number((int)deviceState.getAmbientTempC()); + break; + case 2: sidebar_temp = QString::number((int)deviceState.getMemoryTempC()); break; - case 2: { + case 3: { const auto& cpu_temp_list = deviceState.getCpuTempC(); float max_cpu_temp = std::numeric_limits::lowest(); @@ -113,7 +115,7 @@ void Sidebar::updateState(const UIState &s) { } break; } - case 3: { + case 4: { const auto& gpu_temp_list = deviceState.getGpuTempC(); float max_gpu_temp = std::numeric_limits::lowest(); @@ -126,7 +128,7 @@ void Sidebar::updateState(const UIState &s) { } break; } - case 4: + case 5: sidebar_temp = QString::number((int)deviceState.getMaxTempC()); break; default: @@ -136,12 +138,13 @@ void Sidebar::updateState(const UIState &s) { setProperty("sidebarTemp", sidebar_temp + "°C"); } - ItemStatus tempStatus = {{tr("TEMP"), s.scene.sidebar_temp ? sidebar_temp_str : tr("HIGH")}, danger_color}; + bool show_sidebar_temp = s.scene.sidebar_temp_options != 0; + ItemStatus tempStatus = {{tr("TEMP"), show_sidebar_temp ? sidebar_temp_str : tr("HIGH")}, danger_color}; auto ts = deviceState.getThermalStatus(); if (ts == cereal::DeviceState::ThermalStatus::GREEN) { - tempStatus = {{tr("TEMP"), s.scene.sidebar_temp ? sidebar_temp_str : tr("GOOD")}, good_color}; + tempStatus = {{tr("TEMP"), show_sidebar_temp ? sidebar_temp_str : tr("GOOD")}, good_color}; } else if (ts == cereal::DeviceState::ThermalStatus::YELLOW) { - tempStatus = {{tr("TEMP"), s.scene.sidebar_temp ? sidebar_temp_str : tr("OK")}, warning_color}; + tempStatus = {{tr("TEMP"), show_sidebar_temp ? sidebar_temp_str : tr("OK")}, warning_color}; } setProperty("tempStatus", QVariant::fromValue(tempStatus)); diff --git a/selfdrive/ui/qt/spinner_larch64 b/selfdrive/ui/qt/spinner_larch64 index 645bc4430e..3d3011ed7f 100755 Binary files a/selfdrive/ui/qt/spinner_larch64 and b/selfdrive/ui/qt/spinner_larch64 differ diff --git a/selfdrive/ui/qt/text_larch64 b/selfdrive/ui/qt/text_larch64 index eb0f535bf3..b032104cb8 100755 Binary files a/selfdrive/ui/qt/text_larch64 and b/selfdrive/ui/qt/text_larch64 differ diff --git a/selfdrive/ui/qt/util.cc b/selfdrive/ui/qt/util.cc index 4dd4acf56d..f111453dbe 100644 --- a/selfdrive/ui/qt/util.cc +++ b/selfdrive/ui/qt/util.cc @@ -25,7 +25,7 @@ QString getVersion() { } QString getBrand() { - return Params().getBool("Passive") ? QObject::tr("dashcam") : QObject::tr("sunnypilot"); + return QObject::tr("sunnypilot"); } QString getUserAgent() { @@ -125,6 +125,8 @@ void initApp(int argc, char *argv[], bool disable_hidpi) { #endif } + qputenv("QT_DBL_CLICK_DIST", QByteArray::number(150)); + setQtSurfaceFormat(); } diff --git a/selfdrive/ui/qt/widgets/cameraview.cc b/selfdrive/ui/qt/widgets/cameraview.cc index 67eeb81f54..8a42be1e2b 100644 --- a/selfdrive/ui/qt/widgets/cameraview.cc +++ b/selfdrive/ui/qt/widgets/cameraview.cc @@ -31,8 +31,8 @@ const char frame_vertex_shader[] = " vTexCoord = aTexCoord;\n" "}\n"; -#ifdef QCOM2 const char frame_fragment_shader[] = +#ifdef QCOM2 "#version 300 es\n" "#extension GL_OES_EGL_image_external_essl3 : enable\n" "precision mediump float;\n" @@ -41,11 +41,8 @@ const char frame_fragment_shader[] = "out vec4 colorOut;\n" "void main() {\n" " colorOut = texture(uTexture, vTexCoord);\n" - // gamma to improve worst case visibility when dark - " colorOut.rgb = pow(colorOut.rgb, vec3(1.0/1.28));\n" "}\n"; #else -const char frame_fragment_shader[] = #ifdef __APPLE__ "#version 330 core\n" #else @@ -66,13 +63,11 @@ const char frame_fragment_shader[] = "}\n"; #endif -mat4 get_driver_view_transform(int screen_width, int screen_height, int stream_width, int stream_height) { - UIState *s = uiState(); - +mat4 get_driver_view_transform(int screen_width, int screen_height, int stream_width, int stream_height, bool reverse_dm_cam = false) { const float driver_view_ratio = 2.0; const float yscale = stream_height * driver_view_ratio / stream_width; const float xscale = yscale*screen_height/screen_width*stream_width/stream_height; - float xscale_invert = (s->scene.reverse_dm_cam ? -xscale : xscale); + float xscale_invert = (reverse_dm_cam ? -xscale : xscale); mat4 transform = (mat4){{ xscale_invert, 0.0, 0.0, 0.0, 0.0, yscale, 0.0, 0.0, @@ -193,12 +188,23 @@ void CameraWidget::showEvent(QShowEvent *event) { } void CameraWidget::stopVipcThread() { + makeCurrent(); if (vipc_thread) { vipc_thread->requestInterruption(); vipc_thread->quit(); vipc_thread->wait(); vipc_thread = nullptr; } + +#ifdef QCOM2 + EGLDisplay egl_display = eglGetCurrentDisplay(); + assert(egl_display != EGL_NO_DISPLAY); + for (auto &pair : egl_images) { + eglDestroyImageKHR(egl_display, pair.second); + assert(eglGetError() == EGL_SUCCESS); + } + egl_images.clear(); +#endif } void CameraWidget::availableStreamsUpdated(std::set streams) { @@ -211,7 +217,7 @@ void CameraWidget::updateFrameMat() { if (zoomed_view) { if (active_stream_type == VISION_STREAM_DRIVER) { if (stream_width > 0 && stream_height > 0) { - frame_mat = get_driver_view_transform(w, h, stream_width, stream_height); + frame_mat = get_driver_view_transform(w, h, stream_width, stream_height, is_reverse); } } else { // Project point at "infinity" to compute x and y offsets @@ -329,8 +335,8 @@ void CameraWidget::vipcConnected(VisionIpcClient *vipc_client) { stream_stride = vipc_client->buffers[0].stride; #ifdef QCOM2 - egl_display = eglGetCurrentDisplay(); - + EGLDisplay egl_display = eglGetCurrentDisplay(); + assert(egl_display != EGL_NO_DISPLAY); for (auto &pair : egl_images) { eglDestroyImageKHR(egl_display, pair.second); } @@ -421,13 +427,6 @@ void CameraWidget::vipcThread() { } } } - -#ifdef QCOM2 - for (auto &pair : egl_images) { - eglDestroyImageKHR(egl_display, pair.second); - } - egl_images.clear(); -#endif } void CameraWidget::clearFrames() { diff --git a/selfdrive/ui/qt/widgets/cameraview.h b/selfdrive/ui/qt/widgets/cameraview.h index fcd5b1b18f..0ce780c2d1 100644 --- a/selfdrive/ui/qt/widgets/cameraview.h +++ b/selfdrive/ui/qt/widgets/cameraview.h @@ -38,7 +38,7 @@ public: ~CameraWidget(); void setBackgroundColor(const QColor &color) { bg = color; } void setFrameId(int frame_id) { draw_frame_id = frame_id; } - void setStreamType(VisionStreamType type) { requested_stream_type = type; } + void setStreamType(VisionStreamType type, bool reverse = false) { requested_stream_type = type; is_reverse = reverse;} VisionStreamType getStreamType() { return active_stream_type; } void stopVipcThread(); @@ -70,7 +70,6 @@ protected: QColor bg = QColor("#000000"); #ifdef QCOM2 - EGLDisplay egl_display; std::map egl_images; #endif @@ -99,6 +98,9 @@ protected slots: void vipcConnected(VisionIpcClient *vipc_client); void vipcFrameReceived(); void availableStreamsUpdated(std::set streams); + +private: + bool is_reverse = false; }; Q_DECLARE_METATYPE(std::set); diff --git a/selfdrive/ui/qt/widgets/controls.cc b/selfdrive/ui/qt/widgets/controls.cc index 87304a4585..238051cf5e 100644 --- a/selfdrive/ui/qt/widgets/controls.cc +++ b/selfdrive/ui/qt/widgets/controls.cc @@ -3,6 +3,18 @@ #include #include +QFrame *horizontal_line(QWidget *parent) { + QFrame *line = new QFrame(parent); + line->setFrameShape(QFrame::StyledPanel); + line->setStyleSheet(R"( + border-width: 2px; + border-bottom-style: solid; + border-color: gray; + )"); + line->setFixedHeight(10); + return line; +} + AbstractControl::AbstractControl(const QString &title, const QString &desc, const QString &icon, QWidget *parent) : QFrame(parent) { QVBoxLayout *main_layout = new QVBoxLayout(this); main_layout->setMargin(0); @@ -12,18 +24,19 @@ AbstractControl::AbstractControl(const QString &title, const QString &desc, cons hlayout->setSpacing(20); // left icon - icon_label = new QLabel(); + icon_label = new QLabel(this); + hlayout->addWidget(icon_label); if (!icon.isEmpty()) { icon_pixmap = QPixmap(icon).scaledToWidth(80, Qt::SmoothTransformation); icon_label->setPixmap(icon_pixmap); icon_label->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); - hlayout->addWidget(icon_label); } + icon_label->setVisible(!icon.isEmpty()); // title title_label = new QPushButton(title); title_label->setFixedHeight(120); - title_label->setStyleSheet("font-size: 50px; font-weight: 400; text-align: left; border: none;"); + title_label->setStyleSheet("font-size: 50px; font-weight: 450; text-align: left; border: none;"); hlayout->addWidget(title_label, 1); // value next to control button @@ -61,6 +74,51 @@ void AbstractControl::hideEvent(QHideEvent *e) { } } +SPAbstractControl::SPAbstractControl(const QString &title, const QString &desc, const QString &icon, QWidget *parent) : QFrame(parent) { + QVBoxLayout *main_layout = new QVBoxLayout(this); + main_layout->setMargin(0); + + hlayout = new QHBoxLayout; + hlayout->setMargin(0); + hlayout->setSpacing(0); + + // title + if (!title.isEmpty()) { + title_label = new QPushButton(title); + title_label->setFixedHeight(120); + title_label->setStyleSheet("font-size: 50px; font-weight: 450; text-align: left; border: none;"); + main_layout->addWidget(title_label, 1); + + connect(title_label, &QPushButton::clicked, [=]() { + if (!description->isVisible()) { + emit showDescriptionEvent(); + } + + if (!description->text().isEmpty()) { + description->setVisible(!description->isVisible()); + } + }); + } else { + main_layout->addSpacing(20); + } + + main_layout->addLayout(hlayout); + main_layout->addSpacing(2); + + // description + description = new QLabel(desc); + description->setContentsMargins(0, 20, 40, 20); + description->setStyleSheet("font-size: 40px; color: grey"); + description->setWordWrap(true); + description->setVisible(false); + main_layout->addWidget(description); + + main_layout->addStretch(); +} + +void SPAbstractControl::hideEvent(QHideEvent *e) { +} + // controls ButtonControl::ButtonControl(const QString &title, const QString &text, const QString &desc, QWidget *parent) : AbstractControl(title, desc, "", parent) { @@ -113,3 +171,37 @@ void ElidedLabel::paintEvent(QPaintEvent *event) { opt.initFrom(this); style()->drawItemText(&painter, contentsRect(), alignment(), opt.palette, isEnabled(), elidedText_, foregroundRole()); } + +// ParamControl + +ParamControl::ParamControl(const QString ¶m, const QString &title, const QString &desc, const QString &icon, QWidget *parent) + : ToggleControl(title, desc, icon, false, parent) { + key = param.toStdString(); + QObject::connect(this, &ParamControl::toggleFlipped, this, &ParamControl::toggleClicked); + + hlayout->removeWidget(&toggle); + hlayout->insertWidget(0, &toggle); + + hlayout->removeWidget(this->icon_label); + this->icon_pixmap = QPixmap(icon).scaledToWidth(20, Qt::SmoothTransformation); + this->icon_label->setPixmap(this->icon_pixmap); + this->icon_label->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); + hlayout->insertWidget(1, this->icon_label); +} + +void ParamControl::toggleClicked(bool state) { + auto do_confirm = [this]() { + QString content("

" + title_label->text() + "


" + "

" + getDescription() + "

"); + return ConfirmationDialog(content, tr("Enable"), tr("Cancel"), true, this).exec(); + }; + + bool confirmed = store_confirm && params.getBool(key + "Confirmed"); + if (!confirm || confirmed || !state || do_confirm()) { + if (store_confirm && state) params.putBool(key + "Confirmed", true); + params.putBool(key, state); + setIcon(state); + } else { + toggle.togglePosition(); + } +} diff --git a/selfdrive/ui/qt/widgets/controls.h b/selfdrive/ui/qt/widgets/controls.h index 2b209c1b63..583d7e2d79 100644 --- a/selfdrive/ui/qt/widgets/controls.h +++ b/selfdrive/ui/qt/widgets/controls.h @@ -14,6 +14,8 @@ #include "selfdrive/ui/qt/widgets/input.h" #include "selfdrive/ui/qt/widgets/toggle.h" +QFrame *horizontal_line(QWidget *parent = nullptr); + class ElidedLabel : public QLabel { Q_OBJECT @@ -64,6 +66,10 @@ public slots: description->setVisible(true); } + void hideDescription() { + description->setVisible(false); + } + signals: void showDescriptionEvent(); @@ -103,6 +109,7 @@ public: ButtonControl(const QString &title, const QString &text, const QString &desc = "", QWidget *parent = nullptr); inline void setText(const QString &text) { btn.setText(text); } inline QString text() const { return btn.text(); } + inline void click() { btn.click(); } signals: void clicked(); @@ -144,24 +151,7 @@ class ParamControl : public ToggleControl { Q_OBJECT public: - ParamControl(const QString ¶m, const QString &title, const QString &desc, const QString &icon, QWidget *parent = nullptr) : ToggleControl(title, desc, icon, false, parent) { - key = param.toStdString(); - QObject::connect(this, &ParamControl::toggleFlipped, [=](bool state) { - QString content("

" + title + "


" - "

" + getDescription() + "

"); - ConfirmationDialog dialog(content, tr("Enable"), tr("Cancel"), true, this); - - bool confirmed = store_confirm && params.getBool(key + "Confirmed"); - if (!confirm || confirmed || !state || dialog.exec()) { - if (store_confirm && state) params.putBool(key + "Confirmed", true); - params.putBool(key, state); - setIcon(state); - } else { - toggle.togglePosition(); - } - }); - } - + ParamControl(const QString ¶m, const QString &title, const QString &desc, const QString &icon, QWidget *parent = nullptr); void setConfirmation(bool _confirm, bool _store_confirm) { confirm = _confirm; store_confirm = _store_confirm; @@ -186,6 +176,7 @@ public: bool isToggled() { return params.getBool(key); } private: + void toggleClicked(bool state); void setIcon(bool state) { if (state && !active_icon_pixmap.isNull()) { icon_label->setPixmap(active_icon_pixmap); @@ -201,29 +192,71 @@ private: bool store_confirm = false; }; -class ButtonParamControl : public AbstractControl { +class SPAbstractControl : public QFrame { + Q_OBJECT + +public: + void setDescription(const QString &desc) { + if (description) description->setText(desc); + } + + void setTitle(const QString &title) { + title_label->setText(title); + } + + const QString getDescription() { + return description->text(); + } + +public slots: + void showDescription() { + description->setVisible(true); + } + + void hideDescription() { + description->setVisible(false); + } + +signals: + void showDescriptionEvent(); + +protected: + SPAbstractControl(const QString &title, const QString &desc = "", const QString &icon = "", QWidget *parent = nullptr); + void hideEvent(QHideEvent *e) override; + + QHBoxLayout *hlayout; + QPushButton *title_label; + +private: + QLabel *description = nullptr; +}; + +class ButtonParamControl : public SPAbstractControl { Q_OBJECT public: ButtonParamControl(const QString ¶m, const QString &title, const QString &desc, const QString &icon, - const std::vector &button_texts, const int minimum_button_width = 225) : AbstractControl(title, desc, icon) { + const std::vector &button_texts, const int minimum_button_width = 300) : SPAbstractControl(title, desc, icon) { const QString style = R"( QPushButton { - border-radius: 50px; - font-size: 40px; - font-weight: 500; - height:100px; + border-radius: 20px; + font-size: 50px; + font-weight: 450; + height:150px; padding: 0 25 0 25; - color: #E4E4E4; - background-color: #393939; + color: #FFFFFF; } QPushButton:pressed { background-color: #4a4a4a; } QPushButton:checked:enabled { - background-color: #1e79e8; + background-color: #696868; } QPushButton:disabled { - color: #33E4E4E4; + color: #33FFFFFF; + } + QPushButton:checked:disabled { + background-color: #121212; + color: #33FFFFFF; } )"; key = param.toStdString(); @@ -237,13 +270,17 @@ public: button->setChecked(i == value); button->setStyleSheet(style); button->setMinimumWidth(minimum_button_width); + if (i == 0) hlayout->addSpacing(2); hlayout->addWidget(button); button_group->addButton(button, i); } + hlayout->setAlignment(Qt::AlignLeft); + QObject::connect(button_group, QOverload::of(&QButtonGroup::buttonToggled), [=](int id, bool checked) { if (checked) { params.put(key, std::to_string(id)); + emit buttonToggled(id); } }); } @@ -252,6 +289,9 @@ public: for (auto btn : button_group->buttons()) { btn->setEnabled(enable); } + button_group_enabled = enable; + + update(); } void setButton(QString param) { @@ -262,16 +302,50 @@ public: } } + void setDisabledSelectedButton(std::string val) { + int value = atoi(val.c_str()); + for (int i = 0; i < button_group->buttons().size(); i++) { + button_group->buttons()[i]->setEnabled(i != value); + } + } + +protected: + void paintEvent(QPaintEvent *event) override { + QPainter p(this); + p.setRenderHint(QPainter::Antialiasing); + + // Calculate the total width and height for the background rectangle + int w = 0; + int h = 150; + + for (int i = 0; i < hlayout->count(); ++i) { + QPushButton *button = qobject_cast(hlayout->itemAt(i)->widget()); + if (button) { + w += button->width(); + } + } + + // Draw the rectangle + QRect rect(0 + 2, h - 24, w, h); + p.setPen(QPen(QColor(button_group_enabled ? "#696868" : "#121212"), 3)); + p.drawRoundedRect(rect, 20, 20); + } + +signals: + void buttonToggled(int btn_id); + private: std::string key; Params params; QButtonGroup *button_group; + + bool button_group_enabled = true; }; class ListWidget : public QWidget { Q_OBJECT public: - explicit ListWidget(QWidget *parent = 0) : QWidget(parent), outer_layout(this) { + explicit ListWidget(QWidget *parent = 0, const bool split_line = true) : QWidget(parent), _split_line(split_line), outer_layout(this) { outer_layout.setMargin(0); outer_layout.setSpacing(0); outer_layout.addLayout(&inner_layout); @@ -283,13 +357,30 @@ class ListWidget : public QWidget { inline void addItem(QLayout *layout) { inner_layout.addLayout(layout); } inline void setSpacing(int spacing) { inner_layout.setSpacing(spacing); } + inline void AddWidgetAt(const int index, QWidget *new_widget) { inner_layout.insertWidget(index, new_widget); } + inline void RemoveWidgetAt(const int index) { + if (QLayoutItem* item; (item = inner_layout.takeAt(index)) != nullptr) { + if(item->widget()) delete item->widget(); + delete item; + } + } + + inline void ReplaceOrAddWidget(QWidget *old_widget, QWidget *new_widget) { + if (const int index = inner_layout.indexOf(old_widget); index != -1) { + RemoveWidgetAt(index); + AddWidgetAt(index, new_widget); + } else { + addItem(new_widget); + } + } + private: void paintEvent(QPaintEvent *) override { QPainter p(this); p.setPen(Qt::gray); for (int i = 0; i < inner_layout.count() - 1; ++i) { QWidget *widget = inner_layout.itemAt(i)->widget(); - if (widget == nullptr || widget->isVisible()) { + if ((widget == nullptr || widget->isVisible()) && _split_line) { QRect r = inner_layout.itemAt(i)->geometry(); int bottom = r.bottom() + inner_layout.spacing() / 2; p.drawLine(r.left() + 40, bottom, r.right() - 40, bottom); @@ -298,6 +389,8 @@ private: } QVBoxLayout outer_layout; QVBoxLayout inner_layout; + + bool _split_line; }; // convenience class for wrapping layouts @@ -309,3 +402,175 @@ public: setLayout(l); } }; + +class SPOptionControl : public SPAbstractControl { + Q_OBJECT + +private: + struct MinMaxValue { + int min_value; + int max_value; + }; + +public: + SPOptionControl(const QString ¶m, const QString &title, const QString &desc, const QString &icon, + const MinMaxValue &range, const int per_value_change = 1) : _title(title), SPAbstractControl(title, desc, icon) { + const QString style = R"( + QPushButton { + border-radius: 20px; + font-size: 60px; + font-weight: 500; + width: 150px; + height: 150px; + padding: -3 25 3 25; + color: #FFFFFF; + font-weight: bold; + } + QPushButton:pressed { + color: #5C5C5C; + } + QPushButton:disabled { + color: #5C5C5C; + } + )"; + + label.setStyleSheet(label_enabled_style); + label.setFixedWidth(300); + label.setAlignment(Qt::AlignCenter); + + const std::vector button_texts{"-", "+"}; + + key = param.toStdString(); + value = atoi(params.get(key).c_str()); + + button_group = new QButtonGroup(this); + button_group->setExclusive(true); + for (int i = 0; i < button_texts.size(); i++) { + QPushButton *button = new QPushButton(button_texts[i], this); + button->setStyleSheet(style + ((i == 0) ? "QPushButton { text-align: left; }" : + "QPushButton { text-align: right; }")); + hlayout->addWidget(button, 0, ((i == 0) ? Qt::AlignLeft : Qt::AlignRight) | Qt::AlignVCenter); + if (i == 0) { + hlayout->addWidget(&label, 0, Qt::AlignCenter); + } + button_group->addButton(button, i); + + int change_value = (i == 0) ? -per_value_change : per_value_change; + + QObject::connect(button, &QPushButton::clicked, [=]() { + key = param.toStdString(); + value = atoi(params.get(key).c_str()); + value += change_value; + value = std::clamp(value, range.min_value, range.max_value); + params.put(key, QString::number(value).toStdString()); + updateLabels(); + + if (request_update) { + emit updateOtherToggles(); + } + }); + } + + hlayout->setAlignment(Qt::AlignLeft); + } + + void setUpdateOtherToggles(bool _update) { + request_update = _update; + } + + inline void setLabel(const QString &text) { label.setText(text); } + + void setEnabled(bool enabled) { + for (auto btn : button_group->buttons()) { + btn->setEnabled(enabled); + } + label.setEnabled(enabled); + label.setStyleSheet(enabled ? label_enabled_style : label_disabled_style); + button_enabled = enabled; + + update(); + } + +protected: + void paintEvent(QPaintEvent *event) override { + QPainter p(this); + p.setRenderHint(QPainter::Antialiasing); + + // Calculate the total width and height for the background rectangle + int w = 0; + int h = 150; + + for (int i = 0; i < hlayout->count(); ++i) { + QWidget *widget = qobject_cast(hlayout->itemAt(i)->widget()); + if (widget) { + w += widget->width(); + } + } + + // Draw the rectangle + QRect rect(0, !_title.isEmpty() ? (h - 24) : 20, w, h); + p.setBrush(QColor(button_enabled ? "#b24a4a4a" : "#121212")); // Background color + p.setPen(QPen(Qt::NoPen)); + p.drawRoundedRect(rect, 20, 20); + } + +signals: + void updateLabels(); + void updateOtherToggles(); + +private: + std::string key; + int value; + QButtonGroup *button_group; + QLabel label; + Params params; + std::map option_label = {}; + bool request_update = false; + QString _title = ""; + + const QString label_enabled_style = "font-size: 50px; font-weight: 450; color: #FFFFFF;"; + const QString label_disabled_style = "font-size: 50px; font-weight: 450; color: #5C5C5C;"; + + bool button_enabled = true; +}; + +class SubPanelButton : public QPushButton { + Q_OBJECT + +public: + SubPanelButton(const QString &text, const int minimum_button_width = 800, QWidget *parent = nullptr) : QPushButton(text, parent) { + const QString buttonStyle = R"( + QPushButton { + border-radius: 20px; + font-size: 50px; + font-weight: 450; + height: 150px; + padding: 0 25px 0 25px; + color: #FFFFFF; + } + QPushButton:enabled { + background-color: #393939; + } + QPushButton:pressed { + background-color: #4A4A4A; + } + QPushButton:disabled { + background-color: #121212; + color: #5C5C5C; + } + )"; + + setStyleSheet(buttonStyle); + setFixedWidth(minimum_button_width); + } +}; + +class PanelBackButton : public QPushButton { + Q_OBJECT + +public: + PanelBackButton(const QString &label = "Back", QWidget *parent = nullptr) : QPushButton(label, parent) { + setObjectName("back_btn"); + setFixedSize(400, 100); + } +}; diff --git a/selfdrive/ui/qt/widgets/input.cc b/selfdrive/ui/qt/widgets/input.cc index 52d0c5cd6e..4ff0de29f9 100644 --- a/selfdrive/ui/qt/widgets/input.cc +++ b/selfdrive/ui/qt/widgets/input.cc @@ -129,7 +129,8 @@ InputDialog::InputDialog(const QString &title, QWidget *parent, const QString &s line->setEchoMode(QLineEdit::Normal); } }); - eye_btn->setChecked(true); + eye_btn->toggle(); + eye_btn->setChecked(false); textbox_layout->addWidget(eye_btn); } diff --git a/selfdrive/ui/qt/widgets/input.h b/selfdrive/ui/qt/widgets/input.h index 917ea21b57..089e54e4a0 100644 --- a/selfdrive/ui/qt/widgets/input.h +++ b/selfdrive/ui/qt/widgets/input.h @@ -26,7 +26,7 @@ class InputDialog : public DialogBase { public: explicit InputDialog(const QString &title, QWidget *parent, const QString &subtitle = "", bool secret = false); - static QString getText(const QString &title, QWidget *parent, const QString &substitle = "", + static QString getText(const QString &title, QWidget *parent, const QString &subtitle = "", bool secret = false, int minLength = -1, const QString &defaultText = ""); QString text(); void setMessage(const QString &message, bool clearInputField = true); diff --git a/selfdrive/ui/qt/widgets/scrollview.cc b/selfdrive/ui/qt/widgets/scrollview.cc index 978bf83a63..7f6a5ff1cc 100644 --- a/selfdrive/ui/qt/widgets/scrollview.cc +++ b/selfdrive/ui/qt/widgets/scrollview.cc @@ -47,3 +47,11 @@ ScrollView::ScrollView(QWidget *w, QWidget *parent) : QScrollArea(parent) { void ScrollView::hideEvent(QHideEvent *e) { verticalScrollBar()->setValue(0); } + +void ScrollView::setLastScrollPosition() { + lastScrollPosition = verticalScrollBar()->value(); +} + +void ScrollView::restoreScrollPosition() { + verticalScrollBar()->setValue(lastScrollPosition); +} diff --git a/selfdrive/ui/qt/widgets/scrollview.h b/selfdrive/ui/qt/widgets/scrollview.h index 024331aa39..7e4084412c 100644 --- a/selfdrive/ui/qt/widgets/scrollview.h +++ b/selfdrive/ui/qt/widgets/scrollview.h @@ -9,4 +9,11 @@ public: explicit ScrollView(QWidget *w = nullptr, QWidget *parent = nullptr); protected: void hideEvent(QHideEvent *e) override; + +public slots: + void setLastScrollPosition(); + void restoreScrollPosition(); + +private: + int lastScrollPosition = 0; }; diff --git a/selfdrive/ui/qt/widgets/drive_stats.cc b/selfdrive/ui/qt/widgets/sunnypilot/drive_stats.cc similarity index 98% rename from selfdrive/ui/qt/widgets/drive_stats.cc rename to selfdrive/ui/qt/widgets/sunnypilot/drive_stats.cc index 31009f03ca..e4c127e6b5 100644 --- a/selfdrive/ui/qt/widgets/drive_stats.cc +++ b/selfdrive/ui/qt/widgets/sunnypilot/drive_stats.cc @@ -1,4 +1,4 @@ -#include "selfdrive/ui/qt/widgets/drive_stats.h" +#include "selfdrive/ui/qt/widgets/sunnypilot/drive_stats.h" #include #include diff --git a/selfdrive/ui/qt/widgets/drive_stats.h b/selfdrive/ui/qt/widgets/sunnypilot/drive_stats.h similarity index 100% rename from selfdrive/ui/qt/widgets/drive_stats.h rename to selfdrive/ui/qt/widgets/sunnypilot/drive_stats.h diff --git a/selfdrive/ui/qt/widgets/wifi.cc b/selfdrive/ui/qt/widgets/wifi.cc index ed5825ab77..9c5289a22d 100644 --- a/selfdrive/ui/qt/widgets/wifi.cc +++ b/selfdrive/ui/qt/widgets/wifi.cc @@ -18,8 +18,8 @@ WiFiPromptWidget::WiFiPromptWidget(QWidget *parent) : QFrame(parent) { title_layout->setSpacing(32); { QLabel *icon = new QLabel; - QPixmap *pixmap = new QPixmap("../assets/offroad/icon_wifi_strength_full.svg"); - icon->setPixmap(pixmap->scaledToWidth(80, Qt::SmoothTransformation)); + QPixmap pixmap("../assets/offroad/icon_wifi_strength_full.svg"); + icon->setPixmap(pixmap.scaledToWidth(80, Qt::SmoothTransformation)); title_layout->addWidget(icon); QLabel *title = new QLabel(tr("Setup Wi-Fi")); @@ -68,8 +68,8 @@ WiFiPromptWidget::WiFiPromptWidget(QWidget *parent) : QFrame(parent) { title_layout->addStretch(); QLabel *icon = new QLabel; - QPixmap *pixmap = new QPixmap("../assets/offroad/icon_wifi_uploading.svg"); - icon->setPixmap(pixmap->scaledToWidth(120, Qt::SmoothTransformation)); + QPixmap pixmap("../assets/offroad/icon_wifi_uploading.svg"); + icon->setPixmap(pixmap.scaledToWidth(120, Qt::SmoothTransformation)); title_layout->addWidget(icon); } uploading_layout->addLayout(title_layout); diff --git a/selfdrive/ui/soundd.py b/selfdrive/ui/soundd.py new file mode 100644 index 0000000000..de7f67209e --- /dev/null +++ b/selfdrive/ui/soundd.py @@ -0,0 +1,187 @@ +import math +import numpy as np +import time +import wave + +from typing import Dict, Optional, Tuple + +from cereal import car, messaging +from openpilot.common.basedir import BASEDIR +from openpilot.common.filter_simple import FirstOrderFilter +from openpilot.common.params import Params +from openpilot.common.realtime import Ratekeeper +from openpilot.common.retry import retry +from openpilot.common.swaglog import cloudlog + +from openpilot.system import micd + +SAMPLE_RATE = 48000 +SAMPLE_BUFFER = 4096 # (approx 100ms) +MAX_VOLUME = 1.0 +MIN_VOLUME = 0.1 +CONTROLS_TIMEOUT = 5 # 5 seconds +FILTER_DT = 1. / (micd.SAMPLE_RATE / micd.FFT_SAMPLES) + +AMBIENT_DB = 30 # DB where MIN_VOLUME is applied +DB_SCALE = 30 # AMBIENT_DB + DB_SCALE is where MAX_VOLUME is applied + +AudibleAlert = car.CarControl.HUDControl.AudibleAlert + + +sound_list: Dict[int, Tuple[str, Optional[int], float]] = { + # AudibleAlert, file name, play count (none for infinite) + AudibleAlert.engage: ("engage.wav", 1, MAX_VOLUME), + AudibleAlert.disengage: ("disengage.wav", 1, MAX_VOLUME), + AudibleAlert.refuse: ("refuse.wav", 1, MAX_VOLUME), + + AudibleAlert.prompt: ("prompt.wav", 1, MAX_VOLUME), + AudibleAlert.promptSingleLow: ("prompt_single_low.wav", None, MAX_VOLUME), + AudibleAlert.promptSingleHigh: ("prompt_single_high.wav", 1, MAX_VOLUME), + AudibleAlert.promptRepeat: ("prompt.wav", None, MAX_VOLUME), + AudibleAlert.promptStarting: ("prompt.wav", 1, MAX_VOLUME), + AudibleAlert.promptDistracted: ("prompt_distracted.wav", None, MAX_VOLUME), + + AudibleAlert.warningSoft: ("warning_soft.wav", None, MAX_VOLUME), + AudibleAlert.warningImmediate: ("warning_immediate.wav", None, MAX_VOLUME), +} + +def check_controls_timeout_alert(sm): + controls_missing = time.monotonic() - sm.rcv_time['controlsState'] + + if controls_missing > CONTROLS_TIMEOUT: + if sm['controlsState'].enabled and (controls_missing - CONTROLS_TIMEOUT) < 10: + return True + + return False + + +class Soundd: + def __init__(self): + self.load_sounds() + + self.current_alert = AudibleAlert.none + self.current_volume = MIN_VOLUME + self.current_sound_frame = 0 + + self.controls_timeout_alert = False + + self.spl_filter_weighted = FirstOrderFilter(0, 2.5, FILTER_DT, initialized=False) + + self.param_s = Params() + self.quiet_drive = self.param_s.get_bool("QuietDrive") + + self._frame = 0 + + def load_param(self): + self._frame += 1 + if self._frame == 50: + self.quiet_drive = self.param_s.get_bool("QuietDrive") + + def should_play_sound(self): + return (self.current_alert == AudibleAlert.warningSoft or self.current_alert == AudibleAlert.warningImmediate or + self.current_alert == AudibleAlert.promptDistracted or self.current_alert == AudibleAlert.promptRepeat or + self.current_alert == AudibleAlert.promptStarting or self.current_alert == AudibleAlert.promptSingleLow or + self.current_alert == AudibleAlert.promptSingleHigh) or (not self.quiet_drive and self.current_alert != AudibleAlert.none) + + def load_sounds(self): + self.loaded_sounds: Dict[int, np.ndarray] = {} + + # Load all sounds + for sound in sound_list: + filename, play_count, volume = sound_list[sound] + + wavefile = wave.open(BASEDIR + "/selfdrive/assets/sounds/" + filename, 'r') + + assert wavefile.getnchannels() == 1 + assert wavefile.getsampwidth() == 2 + assert wavefile.getframerate() == SAMPLE_RATE + + length = wavefile.getnframes() + self.loaded_sounds[sound] = np.frombuffer(wavefile.readframes(length), dtype=np.int16).astype(np.float32) / (2**16/2) + + def get_sound_data(self, frames): # get "frames" worth of data from the current alert sound, looping when required + + ret = np.zeros(frames, dtype=np.float32) + + if self.should_play_sound(): + num_loops = sound_list[self.current_alert][1] + sound_data = self.loaded_sounds[self.current_alert] + written_frames = 0 + + current_sound_frame = self.current_sound_frame % len(sound_data) + loops = self.current_sound_frame // len(sound_data) + + while written_frames < frames and (num_loops is None or loops < num_loops): + available_frames = sound_data.shape[0] - current_sound_frame + frames_to_write = min(available_frames, frames - written_frames) + ret[written_frames:written_frames+frames_to_write] = sound_data[current_sound_frame:current_sound_frame+frames_to_write] + written_frames += frames_to_write + self.current_sound_frame += frames_to_write + + return ret * self.current_volume + + def callback(self, data_out: np.ndarray, frames: int, time, status) -> None: + if status: + cloudlog.warning(f"soundd stream over/underflow: {status}") + data_out[:frames, 0] = self.get_sound_data(frames) + + def update_alert(self, new_alert): + current_alert_played_once = self.current_alert == AudibleAlert.none or self.current_sound_frame > len(self.loaded_sounds[self.current_alert]) + if self.current_alert != new_alert and (new_alert != AudibleAlert.none or current_alert_played_once): + self.current_alert = new_alert + self.current_sound_frame = 0 + + def get_audible_alert(self, sm): + if sm.updated['controlsState']: + new_alert = sm['controlsState'].alertSound.raw + self.update_alert(new_alert) + elif check_controls_timeout_alert(sm): + self.update_alert(AudibleAlert.warningImmediate) + self.controls_timeout_alert = True + elif self.controls_timeout_alert: + self.update_alert(AudibleAlert.none) + self.controls_timeout_alert = False + + def calculate_volume(self, weighted_db): + volume = ((weighted_db - AMBIENT_DB) / DB_SCALE) * (MAX_VOLUME - MIN_VOLUME) + MIN_VOLUME + return math.pow(10, (np.clip(volume, MIN_VOLUME, MAX_VOLUME) - 1)) + + @retry(attempts=7, delay=3) + def get_stream(self, sd): + # reload sounddevice to reinitialize portaudio + sd._terminate() + sd._initialize() + return sd.OutputStream(channels=1, samplerate=SAMPLE_RATE, callback=self.callback, blocksize=SAMPLE_BUFFER) + + def soundd_thread(self): + # sounddevice must be imported after forking processes + import sounddevice as sd + + sm = messaging.SubMaster(['controlsState', 'microphone']) + + with self.get_stream(sd) as stream: + rk = Ratekeeper(20) + + cloudlog.info(f"soundd stream started: {stream.samplerate=} {stream.channels=} {stream.dtype=} {stream.device=}, {stream.blocksize=}") + while True: + self.load_param() + sm.update(0) + + if sm.updated['microphone'] and self.current_alert == AudibleAlert.none: # only update volume filter when not playing alert + self.spl_filter_weighted.update(sm["microphone"].soundPressureWeightedDb) + self.current_volume = self.calculate_volume(float(self.spl_filter_weighted.x)) + + self.get_audible_alert(sm) + + rk.keep_time() + + assert stream.active + + +def main(): + s = Soundd() + s.soundd_thread() + + +if __name__ == "__main__": + main() diff --git a/selfdrive/ui/soundd/.gitignore b/selfdrive/ui/soundd/.gitignore deleted file mode 100644 index c47f949d37..0000000000 --- a/selfdrive/ui/soundd/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_soundd diff --git a/selfdrive/ui/soundd/main.cc b/selfdrive/ui/soundd/main.cc deleted file mode 100644 index c6c7434ca4..0000000000 --- a/selfdrive/ui/soundd/main.cc +++ /dev/null @@ -1,18 +0,0 @@ -#include - -#include - -#include "selfdrive/ui/qt/util.h" -#include "selfdrive/ui/soundd/sound.h" - -int main(int argc, char **argv) { - qInstallMessageHandler(swagLogMessageHandler); - setpriority(PRIO_PROCESS, 0, -20); - - QApplication a(argc, argv); - std::signal(SIGINT, sigTermHandler); - std::signal(SIGTERM, sigTermHandler); - - Sound sound; - return a.exec(); -} diff --git a/selfdrive/ui/soundd/sound.cc b/selfdrive/ui/soundd/sound.cc deleted file mode 100644 index 5e3f3b637e..0000000000 --- a/selfdrive/ui/soundd/sound.cc +++ /dev/null @@ -1,75 +0,0 @@ -#include "selfdrive/ui/soundd/sound.h" - -#include - -#include -#include -#include - -#include "cereal/messaging/messaging.h" -#include "common/util.h" - -// TODO: detect when we can't play sounds -// TODO: detect when we can't display the UI - -Sound::Sound(QObject *parent) : sm({"controlsState", "microphone"}) { - qInfo() << "default audio device: " << QAudioDeviceInfo::defaultOutputDevice().deviceName(); - - for (auto &[alert, fn, loops, volume] : sound_list) { - QSoundEffect *s = new QSoundEffect(this); - QObject::connect(s, &QSoundEffect::statusChanged, [=]() { - assert(s->status() != QSoundEffect::Error); - }); - s->setSource(QUrl::fromLocalFile("../../assets/sounds/" + fn)); - s->setVolume(volume); - sounds[alert] = {s, loops}; - } - - QTimer *timer = new QTimer(this); - QObject::connect(timer, &QTimer::timeout, this, &Sound::update); - timer->start(1000 / UI_FREQ); -} - -void Sound::update() { - sm.update(0); - - // scale volume using ambient noise level - if (sm.updated("microphone")) { - float volume = util::map_val(sm["microphone"].getMicrophone().getFilteredSoundPressureWeightedDb(), 30.f, 60.f, 0.f, 1.f); - volume = QAudio::convertVolume(volume, QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale); - // set volume on changes - if (std::exchange(current_volume, std::nearbyint(volume * 10)) != current_volume) { - Hardware::set_volume(volume); - } - } - - setAlert(Alert::get(sm, 0)); -} - -void Sound::setAlert(const Alert &alert) { - if (!current_alert.equal(alert)) { - current_alert = alert; - // stop sounds - for (auto &[s, loops] : sounds) { - // Only stop repeating sounds - if (s->loopsRemaining() > 1 || s->loopsRemaining() == QSoundEffect::Infinite) { - s->stop(); - } - } - - // play sound - if (shouldPlaySound(alert)) { - auto &[s, loops] = sounds[alert.sound]; - s->setLoopCount(loops); - s->play(); - } - } -} - -bool Sound::shouldPlaySound(const Alert &alert) { - bool isQuietDrive = params.getBool("QuietDrive"); - return (alert.sound == AudibleAlert::WARNING_SOFT || alert.sound == AudibleAlert::WARNING_IMMEDIATE || - alert.sound == AudibleAlert::PROMPT_DISTRACTED || alert.sound == AudibleAlert::PROMPT_REPEAT || - alert.sound == AudibleAlert::PROMPT_STARTING) || - (!isQuietDrive && alert.sound != AudibleAlert::NONE); -} diff --git a/selfdrive/ui/soundd/sound.h b/selfdrive/ui/soundd/sound.h deleted file mode 100644 index 0d4bc4b91e..0000000000 --- a/selfdrive/ui/soundd/sound.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include - -#include -#include -#include - -#include "system/hardware/hw.h" -#include "selfdrive/ui/ui.h" - - -const float MAX_VOLUME = 1.0; - -const std::tuple sound_list[] = { - // AudibleAlert, file name, loop count - {AudibleAlert::ENGAGE, "engage.wav", 0, MAX_VOLUME}, - {AudibleAlert::DISENGAGE, "disengage.wav", 0, MAX_VOLUME}, - {AudibleAlert::REFUSE, "refuse.wav", 0, MAX_VOLUME}, - - {AudibleAlert::PROMPT, "prompt.wav", 0, MAX_VOLUME}, - {AudibleAlert::PROMPT_REPEAT, "prompt.wav", QSoundEffect::Infinite, MAX_VOLUME}, - {AudibleAlert::PROMPT_STARTING, "prompt.wav", 0, MAX_VOLUME}, - {AudibleAlert::PROMPT_DISTRACTED, "prompt_distracted.wav", QSoundEffect::Infinite, MAX_VOLUME}, - - {AudibleAlert::WARNING_SOFT, "warning_soft.wav", QSoundEffect::Infinite, MAX_VOLUME}, - {AudibleAlert::WARNING_IMMEDIATE, "warning_immediate.wav", QSoundEffect::Infinite, MAX_VOLUME}, -}; - -class Sound : public QObject { -public: - explicit Sound(QObject *parent = 0); - -protected: - void update(); - void setAlert(const Alert &alert); - bool shouldPlaySound(const Alert &alert); - - SubMaster sm; - Alert current_alert = {}; - QMap> sounds; - int current_volume = -1; - -private: - Params params; -}; diff --git a/selfdrive/ui/soundd/soundd b/selfdrive/ui/soundd/soundd deleted file mode 100755 index 66dda46d5b..0000000000 --- a/selfdrive/ui/soundd/soundd +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -cd "$(dirname "$0")" -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" -export QT_QPA_PLATFORM="offscreen" -exec ./_soundd diff --git a/selfdrive/ui/spinner b/selfdrive/ui/spinner index 6c8e533cc8..35feab3f7e 100755 --- a/selfdrive/ui/spinner +++ b/selfdrive/ui/spinner @@ -4,5 +4,4 @@ if [ -f /TICI ] && [ ! -f qt/spinner ]; then cp qt/spinner_larch64 qt/spinner fi -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" exec ./qt/spinner "$1" diff --git a/selfdrive/ui/tests/.gitignore b/selfdrive/ui/tests/.gitignore index 94ba9a3a97..6c624b66d3 100644 --- a/selfdrive/ui/tests/.gitignore +++ b/selfdrive/ui/tests/.gitignore @@ -3,3 +3,4 @@ playsound test_sound test_translations ui_snapshot +test_ui/report \ No newline at end of file diff --git a/selfdrive/ui/tests/test_sound.cc b/selfdrive/ui/tests/test_sound.cc deleted file mode 100644 index d9cb5c0a7f..0000000000 --- a/selfdrive/ui/tests/test_sound.cc +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include -#include - -#include "catch2/catch.hpp" -#include "selfdrive/ui/soundd/sound.h" - -class TestSound : public Sound { -public: - TestSound() : Sound() { - for (auto i = sounds.constBegin(); i != sounds.constEnd(); ++i) { - sound_stats[i.key()] = {0, 0}; - QObject::connect(i.value().first, &QSoundEffect::playingChanged, [=, s = i.value().first, a = i.key()]() { - if (s->isPlaying()) { - sound_stats[a].first++; - } else { - sound_stats[a].second++; - } - }); - } - } - - QMap> sound_stats; -}; - -void controls_thread(int loop_cnt) { - PubMaster pm({"controlsState", "deviceState"}); - MessageBuilder deviceStateMsg; - auto deviceState = deviceStateMsg.initEvent().initDeviceState(); - deviceState.setStarted(true); - - const int DT_CTRL = 10; // ms - for (int i = 0; i < loop_cnt; ++i) { - for (auto &[alert, fn, loops, volume] : sound_list) { - printf("testing %s\n", qPrintable(fn)); - for (int j = 0; j < 1000 / DT_CTRL; ++j) { - MessageBuilder msg; - auto cs = msg.initEvent().initControlsState(); - cs.setAlertSound(alert); - cs.setAlertType(fn.toStdString()); - pm.send("controlsState", msg); - pm.send("deviceState", deviceStateMsg); - QThread::msleep(DT_CTRL); - } - } - } - - // send no alert sound - for (int j = 0; j < 1000 / DT_CTRL; ++j) { - MessageBuilder msg; - msg.initEvent().initControlsState(); - pm.send("controlsState", msg); - QThread::msleep(DT_CTRL); - } - - QThread::currentThread()->quit(); -} - -TEST_CASE("test soundd") { - QEventLoop loop; - TestSound test_sound; - const int test_loop_cnt = 2; - - QThread t; - QObject::connect(&t, &QThread::started, [=]() { controls_thread(test_loop_cnt); }); - QObject::connect(&t, &QThread::finished, [&]() { loop.quit(); }); - t.start(); - loop.exec(); - - for (const AudibleAlert alert : test_sound.sound_stats.keys()) { - auto [play, stop] = test_sound.sound_stats[alert]; - REQUIRE(play == test_loop_cnt); - REQUIRE(stop == test_loop_cnt); - } -} diff --git a/selfdrive/ui/tests/test_soundd.py b/selfdrive/ui/tests/test_soundd.py index 80a261e6d9..94ce26eb47 100755 --- a/selfdrive/ui/tests/test_soundd.py +++ b/selfdrive/ui/tests/test_soundd.py @@ -1,75 +1,41 @@ #!/usr/bin/env python3 -import subprocess -import time import unittest -from cereal import log, car -import cereal.messaging as messaging -from openpilot.selfdrive.test.helpers import phone_only, with_processes -# TODO: rewrite for unittest -from openpilot.common.realtime import DT_CTRL -from openpilot.system.hardware import HARDWARE +from cereal import car +from cereal import messaging +from cereal.messaging import SubMaster, PubMaster +from openpilot.selfdrive.ui.soundd import CONTROLS_TIMEOUT, check_controls_timeout_alert + +import time AudibleAlert = car.CarControl.HUDControl.AudibleAlert -SOUNDS = { - # sound: total writes - AudibleAlert.none: 0, - AudibleAlert.engage: 184, - AudibleAlert.disengage: 186, - AudibleAlert.refuse: 194, - AudibleAlert.prompt: 184, - AudibleAlert.promptRepeat: 487, - AudibleAlert.promptDistracted: 508, - AudibleAlert.warningSoft: 471, - AudibleAlert.warningImmediate: 470, -} - -def get_total_writes(): - audio_flinger = subprocess.check_output('dumpsys media.audio_flinger', shell=True, encoding='utf-8').strip() - write_lines = [l for l in audio_flinger.split('\n') if l.strip().startswith('Total writes')] - return sum(int(l.split(':')[1]) for l in write_lines) class TestSoundd(unittest.TestCase): - def test_sound_card_init(self): - assert HARDWARE.get_sound_card_online() + def test_check_controls_timeout_alert(self): + sm = SubMaster(['controlsState']) + pm = PubMaster(['controlsState']) - @phone_only - @with_processes(['soundd']) - def test_alert_sounds(self): - pm = messaging.PubMaster(['deviceState', 'controlsState']) + for _ in range(100): + cs = messaging.new_message('controlsState') + cs.controlsState.enabled = True - # make sure they're all defined - alert_sounds = {v: k for k, v in car.CarControl.HUDControl.AudibleAlert.schema.enumerants.items()} - diff = set(SOUNDS.keys()).symmetric_difference(alert_sounds.keys()) - assert len(diff) == 0, f"not all sounds defined in test: {diff}" + pm.send("controlsState", cs) - # wait for procs to init - time.sleep(1) + time.sleep(0.01) - for sound, expected_writes in SOUNDS.items(): - print(f"testing {alert_sounds[sound]}") - start_writes = get_total_writes() + sm.update(0) - for i in range(int(10 / DT_CTRL)): - msg = messaging.new_message('deviceState') - msg.deviceState.started = True - pm.send('deviceState', msg) + self.assertFalse(check_controls_timeout_alert(sm)) - msg = messaging.new_message('controlsState') - if i < int(6 / DT_CTRL): - msg.controlsState.alertSound = sound - msg.controlsState.alertType = str(sound) - msg.controlsState.alertText1 = "Testing Sounds" - msg.controlsState.alertText2 = f"playing {alert_sounds[sound]}" - msg.controlsState.alertSize = log.ControlsState.AlertSize.mid - pm.send('controlsState', msg) - time.sleep(DT_CTRL) + for _ in range(CONTROLS_TIMEOUT * 110): + sm.update(0) + time.sleep(0.01) + + self.assertTrue(check_controls_timeout_alert(sm)) + + # TODO: add test with micd for checking that soundd actually outputs sounds - tolerance = expected_writes / 8 - actual_writes = get_total_writes() - start_writes - print(f" expected {expected_writes} writes, got {actual_writes}") - assert abs(expected_writes - actual_writes) <= tolerance, f"{alert_sounds[sound]}: expected {expected_writes} writes, got {actual_writes}" if __name__ == "__main__": unittest.main() diff --git a/selfdrive/ui/tests/test_translations.py b/selfdrive/ui/tests/test_translations.py index 1ff203b97d..9ba9054ea1 100755 --- a/selfdrive/ui/tests/test_translations.py +++ b/selfdrive/ui/tests/test_translations.py @@ -2,30 +2,28 @@ import json import os import re -import shutil import unittest +import shutil +import tempfile import xml.etree.ElementTree as ET +import string +import requests +from parameterized import parameterized_class from openpilot.selfdrive.ui.update_translations import TRANSLATIONS_DIR, LANGUAGES_FILE, update_translations -TMP_TRANSLATIONS_DIR = os.path.join(TRANSLATIONS_DIR, "tmp") +with open(LANGUAGES_FILE, "r") as f: + translation_files = json.load(f) + UNFINISHED_TRANSLATION_TAG = "" not in cur_translations, - f"{file} ({name}) translation file has obsolete translations. Run selfdrive/ui/update_translations.py --vanish to remove them") + cur_translations = self._read_translation_file(TRANSLATIONS_DIR, self.file) + self.assertTrue("" not in cur_translations, + f"{self.file} ({self.name}) translation file has obsolete translations. Run selfdrive/ui/update_translations.py --vanish to remove them") def test_finished_translations(self): """ @@ -78,41 +66,68 @@ class TestTranslations(unittest.TestCase): - that translation is not empty - that translation format arguments are consistent """ - for name, file in self.translation_files.items(): - with self.subTest(name=name, file=file): - tr_xml = ET.parse(os.path.join(TRANSLATIONS_DIR, f"{file}.ts")) + tr_xml = ET.parse(os.path.join(TRANSLATIONS_DIR, f"{self.file}.ts")) - for context in tr_xml.getroot(): - for message in context.iterfind("message"): - translation = message.find("translation") - source_text = message.find("source").text + for context in tr_xml.getroot(): + for message in context.iterfind("message"): + translation = message.find("translation") + source_text = message.find("source").text - # Do not test unfinished translations - if translation.get("type") == "unfinished": - continue + # Do not test unfinished translations + if translation.get("type") == "unfinished": + continue - if message.get("numerus") == "yes": - numerusform = [t.text for t in translation.findall("numerusform")] + if message.get("numerus") == "yes": + numerusform = [t.text for t in translation.findall("numerusform")] - for nf in numerusform: - self.assertIsNotNone(nf, f"Ensure all plural translation forms are completed: {source_text}") - self.assertIn("%n", nf, "Ensure numerus argument (%n) exists in translation.") - self.assertIsNone(FORMAT_ARG.search(nf), "Plural translations must use %n, not %1, %2, etc.: {}".format(numerusform)) + for nf in numerusform: + self.assertIsNotNone(nf, f"Ensure all plural translation forms are completed: {source_text}") + self.assertIn("%n", nf, "Ensure numerus argument (%n) exists in translation.") + self.assertIsNone(FORMAT_ARG.search(nf), "Plural translations must use %n, not %1, %2, etc.: {}".format(numerusform)) - else: - self.assertIsNotNone(translation.text, f"Ensure translation is completed: {source_text}") + else: + self.assertIsNotNone(translation.text, f"Ensure translation is completed: {source_text}") - source_args = FORMAT_ARG.findall(source_text) - translation_args = FORMAT_ARG.findall(translation.text) - self.assertEqual(sorted(source_args), sorted(translation_args), - f"Ensure format arguments are consistent: `{source_text}` vs. `{translation.text}`") + source_args = FORMAT_ARG.findall(source_text) + translation_args = FORMAT_ARG.findall(translation.text) + self.assertEqual(sorted(source_args), sorted(translation_args), + f"Ensure format arguments are consistent: `{source_text}` vs. `{translation.text}`") def test_no_locations(self): - for name, file in self.translation_files.items(): - with self.subTest(name=name, file=file): - for line in self._read_translation_file(TRANSLATIONS_DIR, file).splitlines(): - self.assertFalse(line.strip().startswith(LOCATION_TAG), - f"Line contains location tag: {line.strip()}, remove all line numbers.") + for line in self._read_translation_file(TRANSLATIONS_DIR, self.file).splitlines(): + self.assertFalse(line.strip().startswith(LOCATION_TAG), + f"Line contains location tag: {line.strip()}, remove all line numbers.") + + def test_entities_error(self): + cur_translations = self._read_translation_file(TRANSLATIONS_DIR, self.file) + matches = re.findall(r'@(\w+);', cur_translations) + self.assertEqual(len(matches), 0, f"The string(s) {matches} were found with '@' instead of '&'") + + def test_bad_language(self): + IGNORED_WORDS = {'pédale'} + + match = re.search(r'_([a-zA-Z]{2,3})', self.file) + assert match, f"{self.name} - could not parse language" + + response = requests.get(f"https://raw.githubusercontent.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words/master/{match.group(1)}") + response.raise_for_status() + + banned_words = {line.strip() for line in response.text.splitlines()} + + for context in ET.parse(os.path.join(TRANSLATIONS_DIR, f"{self.file}.ts")).getroot(): + for message in context.iterfind("message"): + translation = message.find("translation") + if translation.get("type") == "unfinished": + continue + + translation_text = " ".join([t.text for t in translation.findall("numerusform")]) if message.get("numerus") == "yes" else translation.text + + if not translation_text: + continue + + words = set(translation_text.translate(str.maketrans('', '', string.punctuation + '%n')).lower().split()) + bad_words_found = words & (banned_words - IGNORED_WORDS) + assert not bad_words_found, f"Bad language found in {self.name}: '{translation_text}'. Bad word(s): {', '.join(bad_words_found)}" if __name__ == "__main__": diff --git a/selfdrive/ui/tests/test_ui/run.py b/selfdrive/ui/tests/test_ui/run.py new file mode 100644 index 0000000000..7a2ac9a110 --- /dev/null +++ b/selfdrive/ui/tests/test_ui/run.py @@ -0,0 +1,197 @@ +from collections import namedtuple +import pathlib +import shutil +import sys +import jinja2 +import matplotlib.pyplot as plt +import numpy as np +import os +import pywinctl +import time +import unittest + +from parameterized import parameterized +from cereal import messaging, car, log +from cereal.visionipc import VisionIpcServer, VisionStreamType + +from cereal.messaging import SubMaster, PubMaster +from openpilot.common.mock import mock_messages +from openpilot.common.params import Params +from openpilot.common.realtime import DT_MDL +from openpilot.common.transformations.camera import tici_f_frame_size +from openpilot.selfdrive.test.helpers import with_processes +from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_camera_state +from openpilot.tools.webcam.camera import Camera + +UI_DELAY = 0.5 # may be slower on CI? + +NetworkType = log.DeviceState.NetworkType +NetworkStrength = log.DeviceState.NetworkStrength + +EventName = car.CarEvent.EventName +EVENTS_BY_NAME = {v: k for k, v in EventName.schema.enumerants.items()} + + +def setup_common(click, pm: PubMaster): + Params().put("DongleId", "123456789012345") + dat = messaging.new_message('deviceState') + dat.deviceState.started = True + dat.deviceState.networkType = NetworkType.cell4G + dat.deviceState.networkStrength = NetworkStrength.moderate + dat.deviceState.freeSpacePercent = 80 + dat.deviceState.memoryUsagePercent = 2 + dat.deviceState.cpuTempC = [2,]*3 + dat.deviceState.gpuTempC = [2,]*3 + dat.deviceState.cpuUsagePercent = [2,]*8 + + pm.send("deviceState", dat) + +def setup_homescreen(click, pm: PubMaster): + setup_common(click, pm) + +def setup_settings_device(click, pm: PubMaster): + setup_common(click, pm) + + click(100, 100) + +def setup_settings_network(click, pm: PubMaster): + setup_common(click, pm) + + setup_settings_device(click, pm) + click(300, 600) + +def setup_onroad(click, pm: PubMaster): + setup_common(click, pm) + + dat = messaging.new_message('pandaStates', 1) + dat.pandaStates[0].ignitionLine = True + dat.pandaStates[0].pandaType = log.PandaState.PandaType.uno + + pm.send("pandaStates", dat) + + server = VisionIpcServer("camerad") + server.create_buffers(VisionStreamType.VISION_STREAM_ROAD, 40, False, *tici_f_frame_size) + server.create_buffers(VisionStreamType.VISION_STREAM_DRIVER, 40, False, *tici_f_frame_size) + server.create_buffers(VisionStreamType.VISION_STREAM_WIDE_ROAD, 40, False, *tici_f_frame_size) + server.start_listener() + + time.sleep(0.5) # give time for vipc server to start + + IMG = Camera.bgr2nv12(np.random.randint(0, 255, (*tici_f_frame_size,3), dtype=np.uint8)) + IMG_BYTES = IMG.flatten().tobytes() + + cams = ('roadCameraState', 'wideRoadCameraState') + + frame_id = 0 + for cam in cams: + msg = messaging.new_message(cam) + cs = getattr(msg, cam) + cs.frameId = frame_id + cs.timestampSof = int((frame_id * DT_MDL) * 1e9) + cs.timestampEof = int((frame_id * DT_MDL) * 1e9) + cam_meta = meta_from_camera_state(cam) + + pm.send(msg.which(), msg) + server.send(cam_meta.stream, IMG_BYTES, cs.frameId, cs.timestampSof, cs.timestampEof) + +@mock_messages(['liveLocationKalman']) +def setup_onroad_map(click, pm: PubMaster): + setup_onroad(click, pm) + + click(500, 500) + + time.sleep(UI_DELAY) # give time for the map to render + +def setup_onroad_sidebar(click, pm: PubMaster): + setup_onroad_map(click, pm) + click(500, 500) + +CASES = { + "homescreen": setup_homescreen, + "settings_device": setup_settings_device, + "settings_network": setup_settings_network, + "onroad": setup_onroad, + "onroad_map": setup_onroad_map, + "onroad_sidebar": setup_onroad_sidebar +} + +TEST_DIR = pathlib.Path(__file__).parent + +TEST_OUTPUT_DIR = TEST_DIR / "report" +SCREENSHOTS_DIR = TEST_OUTPUT_DIR / "screenshots" + + +class TestUI(unittest.TestCase): + @classmethod + def setUpClass(cls): + os.environ["SCALE"] = "1" + sys.modules["mouseinfo"] = False + + @classmethod + def tearDownClass(cls): + del sys.modules["mouseinfo"] + + def setup(self): + self.sm = SubMaster(["uiDebug"]) + self.pm = PubMaster(["deviceState", "pandaStates", "controlsState", 'roadCameraState', 'wideRoadCameraState', 'liveLocationKalman']) + while not self.sm.valid["uiDebug"]: + self.sm.update(1) + time.sleep(UI_DELAY) # wait a bit more for the UI to start rendering + try: + self.ui = pywinctl.getWindowsWithTitle("ui")[0] + except Exception as e: + print(f"failed to find ui window, assuming that it's in the top left (for Xvfb) {e}") + self.ui = namedtuple("bb", ["left", "top", "width", "height"])(0,0,2160,1080) + + def screenshot(self): + import pyautogui + im = pyautogui.screenshot(region=(self.ui.left, self.ui.top, self.ui.width, self.ui.height)) + self.assertEqual(im.width, 2160) + self.assertEqual(im.height, 1080) + img = np.array(im) + im.close() + return img + + def click(self, x, y, *args, **kwargs): + import pyautogui + pyautogui.click(self.ui.left + x, self.ui.top + y, *args, **kwargs) + time.sleep(UI_DELAY) # give enough time for the UI to react + + @parameterized.expand(CASES.items()) + @with_processes(["ui"]) + def test_ui(self, name, setup_case): + self.setup() + + setup_case(self.click, self.pm) + + time.sleep(UI_DELAY) # wait a bit more for the UI to finish rendering + + im = self.screenshot() + plt.imsave(SCREENSHOTS_DIR / f"{name}.png", im) + + +def create_html_report(): + OUTPUT_FILE = TEST_OUTPUT_DIR / "index.html" + + with open(TEST_DIR / "template.html") as f: + template = jinja2.Template(f.read()) + + cases = {f.stem: (str(f.relative_to(TEST_OUTPUT_DIR)), "reference.png") for f in SCREENSHOTS_DIR.glob("*.png")} + cases = dict(sorted(cases.items())) + + with open(OUTPUT_FILE, "w") as f: + f.write(template.render(cases=cases)) + +def create_screenshots(): + if TEST_OUTPUT_DIR.exists(): + shutil.rmtree(TEST_OUTPUT_DIR) + + SCREENSHOTS_DIR.mkdir(parents=True) + unittest.main(exit=False) + +if __name__ == "__main__": + print("creating test screenshots") + create_screenshots() + + print("creating html report") + create_html_report() diff --git a/selfdrive/ui/tests/test_ui/template.html b/selfdrive/ui/tests/test_ui/template.html new file mode 100644 index 0000000000..68df5879e6 --- /dev/null +++ b/selfdrive/ui/tests/test_ui/template.html @@ -0,0 +1,34 @@ + + + + +{% for name, (image, ref_image) in cases.items() %} + +

{{name}}

+
+
+ +
+
+ +
+ +{% endfor %} + \ No newline at end of file diff --git a/selfdrive/ui/text b/selfdrive/ui/text index 2577e3006b..b44bec42bd 100755 --- a/selfdrive/ui/text +++ b/selfdrive/ui/text @@ -4,5 +4,4 @@ if [ -f /TICI ] && [ ! -f qt/text ]; then cp qt/text_larch64 qt/text fi -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" exec ./qt/text "$1" diff --git a/selfdrive/ui/translations/auto_translate.py b/selfdrive/ui/translations/auto_translate.py new file mode 100755 index 0000000000..8613feb245 --- /dev/null +++ b/selfdrive/ui/translations/auto_translate.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import argparse +import json +import os +import pathlib +import xml.etree.ElementTree as ET +from typing import cast + +import requests + +TRANSLATIONS_DIR = pathlib.Path(__file__).resolve().parent +TRANSLATIONS_LANGUAGES = TRANSLATIONS_DIR / "languages.json" + +OPENAI_MODEL = "gpt-4" +OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") +OPENAI_PROMPT = "You are a professional translator from English to {language} (ISO 639 language code). " + \ + "The following sentence or word is in the GUI of a software called openpilot, translate it accordingly." + + +def get_language_files(languages: list[str] | None = None) -> dict[str, pathlib.Path]: + files = {} + + with open(TRANSLATIONS_LANGUAGES) as fp: + language_dict = json.load(fp) + + for filename in language_dict.values(): + path = TRANSLATIONS_DIR / f"{filename}.ts" + language = path.stem.split("main_")[1] + + if languages is None or language in languages: + files[language] = path + + return files + + +def translate_phrase(text: str, language: str) -> str: + response = requests.post( + "https://api.openai.com/v1/chat/completions", + json={ + "model": OPENAI_MODEL, + "messages": [ + { + "role": "system", + "content": OPENAI_PROMPT.format(language=language), + }, + { + "role": "user", + "content": text, + }, + ], + "temperature": 0.8, + "max_tokens": 1024, + "top_p": 1, + }, + headers={ + "Authorization": f"Bearer {OPENAI_API_KEY}", + "Content-Type": "application/json", + }, + ) + + if 400 <= response.status_code < 600: + raise requests.HTTPError(f'Error {response.status_code}: {response.json()}', response=response) + + data = response.json() + + return cast(str, data["choices"][0]["message"]["content"]) + + +def translate_file(path: pathlib.Path, language: str, all_: bool) -> None: + tree = ET.parse(path) + + root = tree.getroot() + + for context in root.findall("./context"): + name = context.find("name") + if name is None: + raise ValueError("name not found") + + print(f"Context: {name.text}") + + for message in context.findall("./message"): + source = message.find("source") + translation = message.find("translation") + + if source is None or translation is None: + raise ValueError("source or translation not found") + + if not all_ and translation.attrib.get("type") != "unfinished": + continue + + llm_translation = translate_phrase(cast(str, source.text), language) + + print(f"Source: {source.text}\n" + + f"Current translation: {translation.text}\n" + + f"LLM translation: {llm_translation}") + + translation.text = llm_translation + + with path.open("w", encoding="utf-8") as fp: + fp.write('\n' + + '\n' + + ET.tostring(root, encoding="utf-8").decode()) + + +def main(): + arg_parser = argparse.ArgumentParser("Auto translate") + + group = arg_parser.add_mutually_exclusive_group(required=True) + group.add_argument("-a", "--all-files", action="store_true", help="Translate all files") + group.add_argument("-f", "--file", nargs="+", help="Translate the selected files. (Example: -f fr de)") + + arg_parser.add_argument("-t", "--all-translations", action="store_true", default=False, help="Translate all sections. (Default: only unfinished)") + + args = arg_parser.parse_args() + + if OPENAI_API_KEY is None: + print("OpenAI API key is missing. (Hint: use `export OPENAI_API_KEY=YOUR-KEY` before you run the script).\n" + + "If you don't have one go to: https://beta.openai.com/account/api-keys.") + exit(1) + + files = get_language_files(None if args.all_files else args.file) + + if args.file: + missing_files = set(args.file) - set(files) + if len(missing_files): + print(f"No language files found: {missing_files}") + exit(1) + + print(f"Translation mode: {'all' if args.all_translations else 'only unfinished'}. Files: {list(files)}") + + for lang, path in files.items(): + print(f"Translate {lang} ({path})") + translate_file(path, lang, args.all_translations) + + +if __name__ == "__main__": + main() diff --git a/selfdrive/ui/translations/create_badges.py b/selfdrive/ui/translations/create_badges.py index a1b2ecb289..f6c8aae448 100755 --- a/selfdrive/ui/translations/create_badges.py +++ b/selfdrive/ui/translations/create_badges.py @@ -54,8 +54,8 @@ if __name__ == "__main__": badge_svg.extend([f'', content_svg, ""]) - badge_svg.insert(0, f'') + badge_svg.insert(0, '') badge_svg.append("") with open(os.path.join(BASEDIR, "translation_badge.svg"), "w") as badge_f: diff --git a/selfdrive/ui/translations/languages.json b/selfdrive/ui/translations/languages.json index fa659e18ba..321cdeedd2 100644 --- a/selfdrive/ui/translations/languages.json +++ b/selfdrive/ui/translations/languages.json @@ -4,6 +4,7 @@ "Français": "main_fr", "Português": "main_pt-BR", "Türkçe": "main_tr", + "العربية": "main_ar", "ไทย": "main_th", "中文(繁體)": "main_zh-CHT", "中文(简体)": "main_zh-CHS", diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts index 07a84fca08..eb6a580c01 100644 --- a/selfdrive/ui/translations/main_ar.ts +++ b/selfdrive/ui/translations/main_ar.ts @@ -5,7 +5,7 @@ AbstractAlert Close - أغلق + إغلاق Snooze Update @@ -20,7 +20,7 @@ AdvancedNetworking Back - خلف + السابق Enable Tethering @@ -28,7 +28,7 @@ Tethering Password - كلمة مرور للربط + كلمة مرور الربط EDIT @@ -36,7 +36,7 @@ Enter new tethering password - أدخل كلمة مرور جديدة للربط + أدخل كلمة مرور الربط الجديدة IP Address @@ -48,46 +48,66 @@ APN Setting - إعداد APN + إعدادات APN Enter APN - أدخل 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 - km/h + كم/س mph - mph + ميل/س MAX - الأعلى + MAX SPEED - سرعة + SPEED LIMIT - حد + LIMIT @@ -109,11 +129,38 @@ Back - خلف + السابق Decline, uninstall %1 - رفض ، قم بإلغاء تثبيت %1 + رفض، إلغاء التثبيت %1 + + + + DestinationWidget + + Home + المنزل + + + Work + العمل + + + No destination set + لم يتم ضبط الوجهة + + + home + المنزل + + + work + العمل + + + No %1 location set + لم يتم ضبط %1 موقع @@ -128,19 +175,19 @@ Serial - التسلسلي + الرقم التسلسلي Driver Camera - كاميرا السائق + كاميرة السائق PREVIEW - لمح + معاينة Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off) - قم بمعاينة الكاميرا المواجهة للسائق للتأكد من أن نظام مراقبة السائق يتمتع برؤية جيدة. (يجب أن تكون السيارة معطلة) + قم بمعاينة الكاميرا المواجهة للسائق للتأكد من أن نظام مراقبة السائق يتمتع برؤية جيدة. (يجب أن تكون السيارة متوقفة) Reset Calibration @@ -148,7 +195,7 @@ RESET - إعادة تعيين + إعادة الضبط Are you sure you want to reset calibration? @@ -164,7 +211,7 @@ Review the rules, features, and limitations of openpilot - راجع القواعد والميزات والقيود الخاصة بـ openpilot + مراجعة الأدوار والميزات والقيود في openpilot Are you sure you want to review the training guide? @@ -172,7 +219,7 @@ Regulatory - تنظيمية + التنظيمية VIEW @@ -192,43 +239,43 @@ Reboot - اعادة التشغيل + إعادة التشغيل Power Off - أطفاء + إيقاف التشغيل - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - يتطلب openpilot أن يتم تركيب الجهاز في حدود 4 درجات يسارًا أو يمينًا و 5 درجات لأعلى أو 8 درجات لأسفل. يقوم برنامج openpilot بالمعايرة بشكل مستمر ، ونادراً ما تكون إعادة الضبط مطلوبة. + 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. + يشير جهازك إلى %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? @@ -236,43 +283,35 @@ Disengage to Power Off - فك الارتباط لإيقاف التشغيل + فك الارتباط من أجل إيقاف التشغيل + + + Reset + إعادة الضبط + + + Review + مراجعة - DriveStats - - Drives - أرقام القيادة - - - Hours - ساعات - - - ALL TIME - في كل وقت - - - PAST WEEK - الأسبوع الماضي - - - KM - كم - - - Miles - اميال - - - - DriverViewScene + DriverViewWindow camera starting بدء تشغيل الكاميرا + + ExperimentalModeButton + + EXPERIMENTAL MODE ON + تشغيل الوضع التجريبي + + + CHILL MODE ON + تشغيل وضع الراحة + + InputDialog @@ -282,12 +321,12 @@ Need at least %n character(s)! - تحتاج على الأقل %n حرف! - تحتاج على الأقل %n حرف! - تحتاج على الأقل %n احرف! - تحتاج على الأقل %n احرف! - تحتاج على الأقل %n احرف! - تحتاج على الأقل %n احرف! + تحتاج إلى حرف %n على الأقل! + تحتاج إلى حرف %n على الأقل! + تحتاج إلى حرفين %n على الأقل! + تحتاج إلى %n أحرف على الأقل! + تحتاج إلى %n أحرف على الأقل! + تحتاج إلى %n حرف على الأقل! @@ -295,102 +334,33 @@ Installer Installing... - جارٍ التثبيت ... - - - Receiving objects: - استقبال الكائنات: - - - Resolving deltas: - حل دلتا: - - - Updating files: - جارٍ تحديث الملفات: + جارٍ التثبيت... MapETA eta - eta + الوصول min - دق + د hr - سع - - - km - كم - - - mi - مل + س - MapInstructions + MapSettings - km - كم + NAVIGATION + التنقل - m - م - - - mi - مل - - - ft - قد - - - - MapPanel - - Current Destination - الوجهة الحالية - - - CLEAR - مسح - - - Recent Destinations - الوجهات الأخيرة - - - Try the Navigation Beta - جرب التنقل التجريبي - - - Get turn-by-turn directions displayed and more with a comma -prime subscription. Sign up now: https://connect.comma.ai - احصل على الاتجاهات خطوة بخطوة معروضة والمزيد باستخدام comma -الاشتراك الرئيسي. اشترك الآن: https://connect.comma.ai - - - No home -location set - لم يتم تعيين -موقع المنزل - - - No work -location set - لم يتم تعيين -موقع العمل - - - no recent destinations - لا توجد وجهات حديثة + Manage at connect.comma.ai + الإدارة في connect.comma.ai @@ -401,14 +371,18 @@ location set Waiting for GPS - في انتظار GPS + بانتظار GPS + + + Waiting for route + بانتظار الطريق MultiOptionDialog Select - اختر + اختيار Cancel @@ -427,13 +401,70 @@ location set for "%1" - ل "%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 + + + Invalid date and time settings, system won't start. Connect to internet to set time. + إعدادات التاريخ والتوقيت غير صحيحة، لن يبدأ النظام. اتصل بالإنترنت من أجل ضبط الوقت. + + + 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 قادراً على تحديد سيارتك. إما أن تكون سيارتك غير مدعومة أو أنه لم يتم التعرف على وحدة التحكم الإلكتروني (ECUs) فيها. يرجى تقديم طلب سحب من أجل إضافة نسخ برمجيات ثابتة إلى السيارة المناسبة. هل تحتاج إلى أي مساعدة؟ لا تتردد في التواصل مع doscord.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 من تحديد سيارتك. تحقق من سلامة الكابلات وتأكد من تأمين جميع الوصلات، لا سيما أنه قد تم إدخال طاقة الفاصلة بالكامل في منفذ 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 @@ -442,7 +473,7 @@ location set ALERTS - تنبيهات + التنبهات ALERT @@ -453,46 +484,61 @@ location set PairingPopup Pair your device to your comma account - قم بإقران جهازك بحساب comma الخاص بك + اقرن جهازك مع حسابك على comma Go to https://connect.comma.ai on your phone - اذهب إلى https://connect.comma.ai من هاتفك + انتقل إلى https://connect.comma.ai على جوالك Click "add new device" and scan the QR code on the right - انقر على "إضافة جهاز جديد" وامسح رمز الاستجابة السريعة على اليمين + انقر "،إضافة جهاز جديد"، وامسح رمز الاستجابة السريعة (QR) على اليمين Bookmark connect.comma.ai to your home screen to use it like an app - ضع إشارة مرجعية على connect.comma.ai على شاشتك الرئيسية لاستخدامه مثل أي تطبيق + اجعل لـconnect.comma.ai إشارة مرجعية على شاشتك الرئيسية من أجل استخدامه مثل أي تطبيق + + + + ParamControl + + Enable + تمكين + + + Cancel + إلغاء PrimeAdWidget Upgrade Now - قم بالترقية الآن + الترقية الآن Become a comma prime member at connect.comma.ai - كن عضوًا comme prime في connect.comma.ai + كن عضوًا في comma prime على connect.comma.ai PRIME FEATURES: - ميزات PRIME: + الميزات الأساسية: Remote access - الوصول عن بعد + التحكم عن بعد - 1 year of storage - سنة واحدة من التخزين + 24/7 LTE connectivity + اتصال LTE على مدار الساعة 24/7 - Developer perks - امتيازات المطور + 1 year of drive storage + سنة واحدة من تخزين القرص + + + Turn-by-turn navigation + التنقل خطوة بخطوة @@ -505,28 +551,16 @@ location set comma prime comma prime - - CONNECT.COMMA.AI - CONNECT.COMMA.AI - - - COMMA POINTS - COMMA POINTS - QObject Reboot - اعادة التشغيل + إعادة التشغيل Exit - أغلق - - - dashcam - dashcam + إغلاق openpilot @@ -537,10 +571,10 @@ location set منذ %n دقيقة منذ %n دقيقة + منذ دقيقتين %n منذ %n دقائق منذ %n دقائق - منذ %n دقائق - منذ %n دقائق + منذ %n دقيقة @@ -548,10 +582,10 @@ location set منذ %n ساعة منذ %n ساعة + منذ ساعتين %n منذ %n ساعات منذ %n ساعات - منذ %n ساعات - منذ %n ساعات + منذ %n ساعة @@ -559,34 +593,42 @@ location set منذ %n يوم منذ %n يوم - منذ %n ايام - منذ %n ايام - منذ %n ايام - منذ %n ايام + منذ يومين %n + منذ %n أيام + منذ %n أيام + منذ %n يوم + + km + كم + + + m + م + + + mi + ميل + + + ft + قدم + Reset Reset failed. Reboot to try again. - فشل إعادة التعيين. أعد التشغيل للمحاولة مرة أخرى. + فشل إعاة الضبط. أعد التشغيل للمحاولة من جديد. Are you sure you want to reset your device? هل أنت متأكد أنك تريد إعادة ضبط جهازك؟ - - Resetting device... - جارٍ إعادة ضبط الجهاز ... - System Reset - إعادة تعيين النظام - - - System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. - تم تشغيل إعادة تعيين النظام. اضغط على تأكيد لمسح كل المحتوى والإعدادات. اضغط على إلغاء لاستئناف التمهيد. + إعادة ضبط النظام Cancel @@ -594,108 +636,95 @@ location set Reboot - اعادة التشغيل + إعادة التشغيل Confirm تأكيد - Unable to mount data partition. Press confirm to reset your device. - تعذر تحميل قسم البيانات. اضغط على تأكيد لإعادة ضبط جهازك. + Resetting device... +This may take up to a minute. + يتم إعادة ضبط الجهاز... +قد يستغرق الأمر حوالي الدقيقة. - - - RichTextDialog - Ok - موافق + Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. + غير قادر على تحميل جزء البيانات. قد يكون الجزء تالفاً. اضغط على تأكيد لمسح جهازك وإعادة ضبطه. + + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + SettingsWindow × - x + × Device - جهاز + الجهاز Network - شبكة الاتصال + الشبكة Toggles - التبديل + المثبتتات Software - برمجة - - - Navigation - ملاحة + البرنامج Setup 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 - اختر البرنامج المراد تثبيته - - - Dashcam - Dashcam - - - Custom Software - برامج مخصصة + بانتظار الاتصال بالإنترنت Enter URL - إدخال عنوان الموقع + أدخل رابط URL for Custom Software @@ -703,7 +732,7 @@ location set Downloading... - جارى التحميل... + يتم الآن التنزيل... Download Failed @@ -711,15 +740,27 @@ location set Ensure the entered URL is valid, and the device’s internet connection is good. - تأكد من أن عنوان موقع الويب الذي تم إدخاله صالح ، وأن اتصال الجهاز بالإنترنت جيد. + تأكد من أن رابط URL الذي أدخلته صالح، وأن اتصال الجهاز بالإنترنت جيد. Reboot device - إعادة تشغيل الجهاز + إعادة التشغيل Start over - ابدأ من جديد + البدء من جديد + + + Something went wrong. Reboot the device. + حدث خطأ ما. أعد التشغيل الجهاز. + + + No custom software found at this URL. + لم يتم العثور على برنامج خاص لعنوان URL ها. + + + Select a language + اختر لغة @@ -730,11 +771,11 @@ location set Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer. - قم بإقران جهازك بفاصلة connect (connect.comma.ai) واطلب عرض comma prime الخاص بك. + اقرن جهازك بجهاز (connect.comma.ai) واحصل على عرضك من comma prime. Pair device - إقران الجهاز + اقتران الجهاز @@ -761,7 +802,7 @@ location set HIGH - عالي + مرتفع GOOD @@ -773,7 +814,7 @@ location set VEHICLE - مركبة + المركبة NO @@ -822,140 +863,112 @@ location set SoftwarePanel - - Git Branch - Git Branch - - - Git Commit - Git Commit - - - OS Version - إصدار نظام التشغيل - - - Version - إصدار - - - Last Update Check - التحقق من آخر تحديث - - - The last time openpilot successfully checked for an update. The updater only runs while the car is off. - آخر مرة نجح برنامج openpilot في التحقق من التحديث. يعمل المحدث فقط أثناء إيقاف تشغيل السيارة. - - - Check for Update - فحص التحديثات - - - CHECKING - تدقيق - - - Switch Branch - تبديل الفرع - - - ENTER - أدخل - - - The new branch will be pulled the next time the updater runs. - سيتم سحب الفرع الجديد في المرة التالية التي يتم فيها تشغيل أداة التحديث. - - - Enter branch name - أدخل اسم الفرع - UNINSTALL - الغاء التثبيت + إلغاء التثبيت Uninstall %1 - الغاء التثبيت %1 + إلغاء التثبيت %1 Are you sure you want to uninstall? هل أنت متأكد أنك تريد إلغاء التثبيت؟ - - failed to fetch update - فشل في جلب التحديث - CHECK - تأكد الان + التحقق Updates are only downloaded while the car is off. - + يتم تحميل التحديثات فقط عندما تكون السيارة متوقفة. Current Version - + النسخة الحالية Download - + تنزيل Install Update - + تثبيت التحديث INSTALL - + تثبيت Target Branch - + فرع الهدف SELECT - + اختيار Select a branch - + اختر فرعاً + + + Uninstall + إلغاء التثبيت + + + failed to check for update + فشل التحقق من التحديث + + + DOWNLOAD + تنزيل + + + update available + يتوفر تحديث + + + never + إطلاقاً + + + up to date, last checked %1 + أحدث نسخة، آخر تحقق %1 SshControl SSH Keys - 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 الخاص به. + تنبيه: هذا يمنح SSH إمكانية الوصول إلى جميع المفاتيح العامة في إعدادات GitHub. لا تقم بإدخال اسم مستخدم GitHub بدلاً من اسمك. لن تطلب منك comma employee إطلاقاً أن تضيف اسم مستخدم GitHub الخاص بهم. ADD - أضف + إضافة Enter your GitHub username - أدخل اسم مستخدم GitHub الخاص بك + ادخل اسم المستخدم GitHub الخاص بك LOADING - جار التحميل + يتم التحميل REMOVE - نزع + إزالة Username '%1' has no keys on GitHub - لا يحتوي اسم المستخدم '%1' على مفاتيح على GitHub + لا يحتوي اسم المستخدم '%1' أي مفاتيح على GitHub Request timed out - انتهت مهلة الطلب + انتهى وقت الطلب Username '%1' doesn't exist on GitHub @@ -966,18 +979,18 @@ location set SshToggle Enable SSH - تفعيل SSH + تمكين SSH TermsPage Terms & Conditions - البنود و الظروف + الشروط والأحكام Decline - انحدار + رفض Scroll to accept @@ -985,34 +998,34 @@ location set 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 من أجل الضبط التكيفي للسرعة والحفاظ على مساعدة السائق للبقاء في المسار. انتباهك مطلوب في جميع الأوقات مع استخدام هذه الميزة. يعمل هذا التغيير في الإعدادات عند إيقاف تشغيل السيارة. 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 كم / ساعة). + تلقي التنبيهات من أجل الالتفاف للعودة إلى المسار عندما تنحرف سيارتك فوق الخط المحدد للمسار دون تشغيل إشارة الانعطاف عند القيادة لمسافة تزيد عن 31 ميل/سا (50 كم/سا). Use Metric System - استخدم النظام المتري + استخدام النظام المتري Display speed in km/h instead of mph. - عرض السرعة بالكيلو متر في الساعة بدلاً من ميل في الساعة. + عرض السرعة بواحدات كم/سا بدلاً من ميل/سا. Record and Upload Driver Camera @@ -1020,117 +1033,192 @@ location set Upload data from the driver facing camera and help improve the driver monitoring algorithm. - قم بتحميل البيانات من الكاميرا المواجهة للسائق وساعد في تحسين خوارزمية مراقبة السائق. + تحميل البيانات من الكاميرا المواجهة للسائق، والمساعدة في تحسين خوارزمية مراقبة السائق. Disengage on Accelerator Pedal - فك الارتباط على دواسة التسريع + فك الارتباط عن دواسة الوقود When enabled, pressing the accelerator pedal will disengage openpilot. - عند التمكين ، سيؤدي الضغط على دواسة الوقود إلى فصل الطيار المفتوح. + عند تمكين هذه الميزة، فإن الضغط على دواسة الوقود سيؤدي إلى فك ارتباط openpilot. Show ETA in 24h Format - إظهار الوقت المقدر للوصول بتنسيق 24 ساعة + إظهار الوقت المقدر للوصول بصيغة 24 ساعة Use 24h format instead of am/pm - استخدم تنسيق 24 ساعة بدلاً من صباحًا / مساءً + استخدام صيغة 24 ساعة بدلاً من صباحاً/مساء Show Map on Left Side of UI - إظهار الخريطة على الجانب الأيسر من واجهة المستخدم + عرض الخريطة على الجانب الأيسر من واجهة المستخدم Show map on left side when in split screen view. - إظهار الخريطة على الجانب الأيسر عندما تكون في طريقة عرض الشاشة المنقسمة. + عرض الخريطة عل الجانب الأيسر عندما تكون وضعية العرض بطريقة الشاشة المنقسمة. - openpilot Longitudinal Control - openpilot التحكم الطولي + openpilot Longitudinal Control (Alpha) + التحكم الطولي openpilot (ألفا) - openpilot will disable the car's radar and will take over control of gas and brakes. Warning: this disables AEB! - سوف يقوم برنامج openpilot بتعطيل رادار السيارة وسيتولى التحكم في الغاز والمكابح. تحذير: هذا يعطل AEB! + WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). + تحذير: التحكم الطولي في openpilot في المرحلة ألفا لهذه السيارة، وسيقوم بتعطيل مكابح الطوارئ الآلية (AEB). - 🌮 End-to-end longitudinal (extremely alpha) 🌮 - + 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 افتراضياً بالشكل المدمج في التحكم التكيفي في السرعة بدلاً من التحكم الطولي. قم بتمكين هذا الخيار من أجل الانتقال إلى التحكم الطولي. يوصى بتمكين الوضع التجريبي عند استخدام وضع التحكم الطولي ألفا من openpilot. - Experimental openpilot Longitudinal Control - + Experimental Mode + الوضع التجريبي - <b>WARNING: openpilot longitudinal control is experimental for this car and will disable AEB.</b> - + Aggressive + الهجومي - Let the driving model control the gas and brakes. openpilot will drive as it thinks a human would. Super experimental. - + Standard + القياسي - openpilot longitudinal control is not currently available for this car. - + Relaxed + الراحة - Enable experimental longitudinal control to enable this. - + 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. + يوصى بالوضع القياسي. في الوضع الهجومي، سيتبع openpilot السيارات الرائدة بشكل أقرب، ويصبح أكثر هجومية في دواسات الوقود والمكابح. في وضعية الراحة يبقى openplot بعيداً لمسافة جيدة عن السيارة الرائدة. + + + 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 بالقيادة كما لو أنه كائن بشري، بما في ذلك التوقف عند الإشارة الحمراء، وإشارات التوقف. وبما أن نمط القيادة يحدد سرعة القيادة، فإن السرعة المضبوطة تشكل الحد الأقصى فقط. هذه خاصية الجودة ألفا، فيجب توقع حدوث الأخطاء. + + + Navigate on openpilot + التنقل على openpilot + + + When navigation has a destination, openpilot will input the map information into the model. This provides useful context for the model and allows openpilot to keep left or right appropriately at forks/exits. Lane change behavior is unchanged and still activated by the driver. This is an alpha quality feature; mistakes should be expected, particularly around exits and forks. These mistakes can include unintended laneline crossings, late exit taking, driving towards dividing barriers in the gore areas, etc. + عندما يكون هناك وجهة للتنقل، فإن openpilot سيقوم بإدخال معلومات الخريطة في هذا النموذج. وهذا يقدم سياقاً مفيداً ويسمح لـ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. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green. + تصور القيادة سينتقل إلى الكاميرا واسعة الزاوية المواجهة للطريق في السرعات المنخفضة من أجل إظهار بعض المنعطفات بشكل أفضل. سيتم أيضاً إظهار شعار الوضع التجريبي في الزاوية العلوية اليمنى. عند تحديد وجهة التنقل، واستخدام نظام القيادة لها كوضع مدخل، سيتحول مسار القيادة على الخريطة إلى اللون الأخضر. + + + Experimental mode is currently unavailable on this car since the car's stock ACC is used for longitudinal control. + الوضع التجريبي غير متوفر حالياً في هذه السيارة نظراً لاستخدام رصيد التحكم التكيفي بالسرعة من أجل التحكم الطولي. + + + openpilot longitudinal control may come in a future update. + قد يتم الحصول على التحكم الطولي في openpilot في عمليات التحديث المستقبلية. + + + An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches. + يمكن اختبار نسخة ألفا من التحكم الطولي من 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 غيغابايت تقريبًا. + تحديث نظام التشغيل مطلوب. قم بوصل جهازك بشبكة واي فاي من أجل تحديث أسرع. حجم التحميل حوالي 1 غيغا بايت تقريباً. Connect to Wi-Fi - اتصل بشبكة Wi-Fi + الاتصال بشبكة الواي فاي Install - ثبيت + تثبيت Back - خلف + السابق Loading... - جار التحميل... + يتم التحميل... Reboot - اعادة التشغيل + إعادة التشغيل Update failed فشل التحديث + + WiFiPromptWidget + + Setup Wi-Fi + إعداد شبكة الواي فاي + + + Connect to Wi-Fi to upload driving data and help improve openpilot + الاتصال بشبكة الواي فاي لتحميل بيانات القيادة والمساهمة في تحسين openpilot + + + Open Settings + فتح الإعدادات + + + Ready to upload + جاهز للتحميل + + + Training data will be pulled periodically while your device is on Wi-Fi + سيتم سحب بيانات التدريب دورياً عندما يكون جهازك متصل بشبكة واي فاي + + WifiUI Scanning for networks... - جارٍ البحث عن شبكات ... + يتم البحث عن شبكات... CONNECTING... - جارٍ الاتصال ... + يتم الاتصال... FORGET - نزع + نسيان هذه الشبكة Forget Wi-Fi Network "%1"? - نزع شبكة اWi-Fi "%1"? + هل تريد نسيان شبكة الواي فاي "%1"؟ + + + Forget + نسيان diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index d1820fd423..6d814b9625 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection Hochladen großer Dateien über getaktete Verbindungen unterbinden + + Hidden Network + + + + CONNECT + CONNECT + + + Enter SSID + SSID eingeben + + + Enter password + Passwort eingeben + + + for "%1" + für "%1" + AnnotatedCameraWidget @@ -226,8 +246,8 @@ Ausschalten - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - Damit Openpilot funktioniert, darf die Installationsposition nicht mehr als 4° nach rechts/links, 5° nach oben und 8° nach unten abweichen. Openpilot kalibriert sich durchgehend, ein Zurücksetzen ist selten notwendig. + 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. + Damit Openpilot funktioniert, darf die Installationsposition nicht mehr als 4° nach rechts/links, 5° nach oben und 9° nach unten abweichen. Openpilot kalibriert sich durchgehend, ein Zurücksetzen ist selten notwendig. Your device is pointed %1° %2 and %3° %4. @@ -275,34 +295,7 @@ - DriveStats - - Drives - Fahrten - - - Hours - Stunden - - - ALL TIME - Gesamtzeit - - - PAST WEEK - Letzte Woche - - - KM - KM - - - Miles - Meilen - - - - DriverViewScene + DriverViewWindow camera starting Kamera startet @@ -564,10 +557,6 @@ Exit Verlassen - - dashcam - dashcam - openpilot openpilot @@ -641,12 +630,12 @@ - Press confirm to erase all content and settings. Press cancel to resume boot. + Resetting device... +This may take up to a minute. - Resetting device... -This may take up to a minute. + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index 79c4ae5596..cd96c466e9 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection Éviter les transferts de données importants sur une connexion limitée + + Hidden Network + Réseau Caché + + + CONNECT + CONNECTER + + + Enter SSID + Entrer le SSID + + + Enter password + Entrer le mot de passe + + + for "%1" + pour "%1" + AnnotatedCameraWidget @@ -234,8 +254,8 @@ Éteindre - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - openpilot nécessite que l'appareil soit monté à 4° à gauche ou à droite et à 5° vers le haut ou 8° vers le bas. openpilot se calibre en continu, la réinitialisation est rarement nécessaire. + 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 nécessite que l'appareil soit monté à 4° à gauche ou à droite et à 5° vers le haut ou 9° vers le bas. openpilot se calibre en continu, la réinitialisation est rarement nécessaire. Your device is pointed %1° %2 and %3° %4. @@ -275,34 +295,7 @@ - DriveStats - - Drives - Trajets - - - Hours - Heures - - - ALL TIME - DEPUIS TOUJOURS - - - PAST WEEK - CETTE SEMAINE - - - KM - KM - - - Miles - Miles - - - - DriverViewScene + DriverViewWindow camera starting démarrage de la caméra @@ -565,10 +558,6 @@ Exit Quitter - - dashcam - dashcam - openpilot openpilot @@ -631,10 +620,6 @@ Cela peut prendre jusqu'à une minute.
System Reset Réinitialisation du système - - Press confirm to erase all content and settings. Press cancel to resume boot. - Appuyez sur confirmer pour effacer tout le contenu et les paramètres. Appuyez sur annuler pour reprendre le démarrage. - Cancel Annuler @@ -651,6 +636,10 @@ Cela peut prendre jusqu'à une minute.
Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. Impossible de monter la partition data. La partition peut être corrompue. Appuyez sur confirmer pour effacer et réinitialiser votre appareil. + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + + SettingsWindow diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index 16595f8ebf..d07c7d525a 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection 大量のデータのアップロードを防止します。 + + Hidden Network + + + + CONNECT + 接続 + + + Enter SSID + SSID を入力 + + + Enter password + パスワードを入力 + + + for "%1" + ネットワーク名:%1 + AnnotatedCameraWidget @@ -226,8 +246,8 @@ 電源を切る - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - openpilotの本体は、左右4°以内、上5°、下8°以内の角度で取付ける必要があります。継続してキャリブレーションを続けているので、手動でリセットを行う必要はほぼありません。 + 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°以内の角度で取付ける必要があります。継続してキャリブレーションを続けているので、手動でリセットを行う必要はほぼありません。 Your device is pointed %1° %2 and %3° %4. @@ -275,34 +295,7 @@ - DriveStats - - Drives - 運転履歴 - - - Hours - 時間 - - - ALL TIME - 累計 - - - PAST WEEK - 先週 - - - KM - km - - - Miles - マイル - - - - DriverViewScene + DriverViewWindow camera starting カメラを起動しています @@ -563,10 +556,6 @@ Exit 閉じる - - dashcam - ドライブレコーダー - openpilot openpilot @@ -637,12 +626,12 @@ - Press confirm to erase all content and settings. Press cancel to resume boot. + Resetting device... +This may take up to a minute. - Resetting device... -This may take up to a minute. + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index cbd8e668ac..a903978329 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -9,7 +9,7 @@ Snooze Update - 업데이트 일시중지 + 업데이트 일시 중지 Reboot and Update @@ -56,7 +56,7 @@ leave blank for automatic configuration - 자동설정하려면 공백으로 두세요 + 자동 설정하려면 빈 칸으로 두세요 Cellular Metered @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection 데이터 요금제 연결 시 대용량 데이터 업로드를 방지합니다 + + Hidden Network + 숨겨진 네트워크 + + + CONNECT + 연결됨 + + + Enter SSID + SSID 입력 + + + Enter password + 비밀번호를 입력하세요 + + + for "%1" + "%1"에 접속하려면 비밀번호가 필요합니다 + AnnotatedCameraWidget @@ -147,7 +167,7 @@ DevicePanel Dongle ID - Dongle ID + 동글 ID N/A @@ -155,7 +175,7 @@ Serial - Serial + 시리얼 Driver Camera @@ -167,23 +187,23 @@ 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? - 캘리브레이션을 재설정하시겠습니까? + 캘리브레이션을 초기화하시겠습니까? Review Training Guide - 트레이닝 가이드 + 트레이닝 가이드 다시보기 REVIEW @@ -191,11 +211,11 @@ Review the rules, features, and limitations of openpilot - openpilot의 규칙, 기능 및 제한 다시보기 + openpilot의 규칙, 기능 및 제한 다시 확인 Are you sure you want to review the training guide? - 트레이닝 가이드를 다시보시겠습니까? + 트레이닝 가이드를 다시 확인하시겠습니까? Regulatory @@ -223,15 +243,15 @@ Power Off - 전원 종료 + 전원 끄기 - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - openpilot 장치는 좌우측 4° 이내, 위쪽 5° 아래쪽 8° 이내로 장착되어야 합니다. openpilot은 지속적으로 보정되며 재설정은 거의 필요하지 않습니다. + 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 의 위치에 장착되어 있습니다. + 사용자의 장치는 %2 %1° 및 %4 %3° 의 방향으로 장착되어 있습니다. down @@ -251,23 +271,23 @@ Are you sure you want to reboot? - 재부팅 하시겠습니까? + 재부팅하시겠습니까? Disengage to Reboot - 재부팅 하려면 해제하세요 + 재부팅하려면 연결을 해제하세요 Are you sure you want to power off? - 전원을 종료하시겠습니까? + 전원을 끄시겠습니까? Disengage to Power Off - 전원을 종료하려면 해제하세요 + 전원을 끄려면 연결을 해제하세요 Reset - 리셋 + 초기화 Review @@ -275,48 +295,21 @@ - DriveStats - - Drives - 주행 - - - Hours - 시간 - - - ALL TIME - 전체 - - - PAST WEEK - 지난주 - - - KM - Km - - - Miles - Miles - - - - DriverViewScene + DriverViewWindow camera starting - 카메라 시작중 + 카메라 시작 중 ExperimentalModeButton EXPERIMENTAL MODE ON - 실험적 모드 사용 + 실험 모드 사용 CHILL MODE ON - 안정적 모드 사용 + 안정 모드 사용 @@ -328,7 +321,7 @@ Need at least %n character(s)! - 최소 %n 자가 필요합니다! + 최소 %n자 이상이어야 합니다! @@ -336,7 +329,7 @@ Installer Installing... - 설치중... + 설치 중... @@ -362,22 +355,22 @@ Manage at connect.comma.ai - connect.comma.ai에서 관리됩니다 + connect.comma.ai에서 관리하세요 MapWindow Map Loading - 지도 로딩 + 지도 로딩 중 Waiting for GPS - GPS 수신중 + GPS 수신 중 Waiting for route - 경로를 기다리는중 + 경로를 기다리는 중 @@ -423,7 +416,7 @@ Unable to download updates %1 - 업데이트를 다운로드할수 없습니다 + 업데이트를 다운로드할 수 없습니다 %1 @@ -436,11 +429,11 @@ 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 에 방문하여 문의하세요. + 장치를 등록하지 못했습니다. comma.ai 서버에 연결하거나 데이터를 업로드하지 않으며 comma.ai에서 지원을 받지 않습니다. 공식 장치인 경우 https://comma.ai/support 에 방문하여 문의하세요. NVMe drive not mounted. @@ -448,23 +441,23 @@ Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe. - 지원되지 않는 NVMe 드라이브가 감지되었습니다. 지원되지 않는 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. - opepilot이 차량을 식별할수 없었습니다. 지원되지 않는 차량이거나 ECU가 인식되지 않습니다. 해당 차량에 펌웨어 버전을 추가하려면 PR을 제출하세요. 도움이 필요하시면 discord.comma.ai에 가입하세요. + openpilot이 차량을 식별할 수 없었습니다. 지원되지 않는 차량이거나 ECU가 인식되지 않습니다. 해당 차량에 맞는 펌웨어 버전을 추가하려면 PR을 제출하세요. 도움이 필요하시면 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 power가 차량의 OBD-II 포트에 완전히 삽입되었는지 확인하세요. 도움이 필요하시면 discord.comma.ai에 가입하세요. + openpilot이 차량을 식별할 수 없었습니다. 케이블의 무결성을 점검하고 모든 연결부, 특히 comma power가 차량의 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 장치의 장착 위치 변경을 감지했습니다. 장치가 마운트에 완전히 장착되고 마운트가 앞유리에 단단히 고정되었는지 확인하세요. + openpilot 장치의 장착 위치가 변경되었습니다. 장치가 마운트에 완전히 장착되고 마운트가 앞유리에 단단히 고정되었는지 확인하세요. Device temperature too high. System cooling down before starting. Current internal component temperature: %1 - 장치 온도가 너무 높습니다. 시작하기 전에 장치온도를 낮춰주세요. 현재 내부 구성 요소 온도: %1 + 장치 온도가 너무 높습니다. 시작하기 전에 온도를 낮춰주세요. 현재 내부 부품 온도: %1 @@ -486,7 +479,7 @@ PairingPopup Pair your device to your comma account - 장치를 comma 계정과 페어링합니다 + 장치를 comma 계정에 페어링합니다 Go to https://connect.comma.ai on your phone @@ -494,11 +487,11 @@ Click "add new device" and scan the QR code on the right - "새 장치 추가"를 클릭하고 오른쪽 QR 코드를 검색합니다 + "새 장치 추가"를 클릭하고 오른쪽 QR 코드를 스캔하세요 Bookmark connect.comma.ai to your home screen to use it like an app - connect.comma.ai를 앱처럼 사용하려면 홈 화면에 바로가기를 만드세요. + connect.comma.ai를 앱처럼 사용하려면 홈 화면에 바로가기를 만드세요 @@ -509,22 +502,22 @@ Enable - 사용 + 활성화 PrimeAdWidget Upgrade Now - 지금 업그레이드 하세요 + 지금 업그레이드하세요 Become a comma prime member at connect.comma.ai - connect.comma.ai에 접속하여 comma prime 회원이 되세요 + connect.comma.ai에 접속하여 comma prime 회원으로 등록하세요 PRIME FEATURES: - PRIME 기능: + PRIME 기능: Remote access @@ -540,7 +533,7 @@ 1 year of drive storage - 1년간 저장 + 1년간 드라이브 로그 저장 @@ -564,10 +557,6 @@ Exit 종료 - - dashcam - dashcam - openpilot openpilot @@ -575,19 +564,19 @@ %n minute(s) ago - %n 분전 + %n 분 전 %n hour(s) ago - %n 시간전 + %n 시간 전 %n day(s) ago - %n 일전 + %n 일 전 @@ -611,11 +600,11 @@ Reset Reset failed. Reboot to try again. - 초기화 실패. 재부팅후 다시 시도하세요. + 초기화 실패. 재부팅 후 다시 시도하세요. Are you sure you want to reset your device? - 장치를 초기화 하시겠습니까? + 장치를 초기화하시겠습니까? System Reset @@ -635,11 +624,7 @@ Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. - 데이터 파티션을 마운트할 수 없습니다. 파티션이 손상되었을 수 있습니다. 모든 내용을 지우고 장치를 초기화하려면 확인을 누르세요. - - - Press confirm to erase all content and settings. Press cancel to resume boot. - 모든 콘텐츠와 설정을 지우려면 확인을 누르세요. 부팅을 재개하려면 취소를 누르세요. + 데이터 파티션을 마운트할 수 없습니다. 파티션이 손상되었을 수 있습니다. 모든 설정을 삭제하고 장치를 초기화하려면 확인을 누르세요. Resetting device... @@ -647,6 +632,10 @@ This may take up to a minute. 장치를 초기화하는 중... 최대 1분이 소요될 수 있습니다. + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + + SettingsWindow @@ -679,11 +668,11 @@ This may take up to a minute. Power your device in a car with a harness or proceed at your own risk. - 하네스 보드에 차량의 전원을 연결하세요. + 장치를 하네스를 통해 차량 전원에 연결하세요. USB 전원에서는 예상치 못한 문제가 생길 수 있습니다. Power off - 전원 종료 + 전원 끄기 Continue @@ -691,15 +680,15 @@ This may take up to a minute. Getting Started - 설정 시작 + 시작하기 Before we get on the road, let’s finish installation and cover some details. - 출발하기 전에 설정을 완료하고 몇 가지 세부 사항을 살펴보겠습니다. + 출발 전 설정을 완료하고 세부 사항을 살펴봅니다. Connect to Wi-Fi - wifi 연결 + Wi-Fi 연결 Back @@ -707,11 +696,11 @@ This may take up to a minute. Continue without Wi-Fi - wifi 연결없이 계속하기 + Wi-Fi 연결 없이 진행 Waiting for internet - 인터넷 대기중 + 인터넷 연결 대기 중 Enter URL @@ -723,7 +712,7 @@ This may take up to a minute. Downloading... - 다운로드중... + 다운로드 중... Download Failed @@ -731,11 +720,11 @@ This may take up to a minute. Ensure the entered URL is valid, and the device’s internet connection is good. - 입력된 URL이 유효하고 장치의 인터넷 연결이 양호한지 확인하세요. + 입력된 URL이 유효하고 인터넷 연결이 원활한지 확인하세요. Reboot device - 재부팅 + 장치 재부팅 Start over @@ -762,7 +751,7 @@ This may take up to a minute. Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer. - 장치를 comma connect (connect.comma.ai)에서 페어링하고 comma prime 제안을 요청하세요. + 장치를 comma connect (connect.comma.ai)에서 페어링하고 comma prime 무료 이용권을 사용하세요. Pair device @@ -773,11 +762,11 @@ This may take up to a minute. Sidebar CONNECT - 연결 + 연결됨 OFFLINE - 오프라인 + 연결 안됨 ONLINE @@ -801,7 +790,7 @@ This may take up to a minute. OK - 경고 + OK VEHICLE @@ -829,7 +818,7 @@ This may take up to a minute. Wi-Fi - wifi + Wi-Fi ETH @@ -856,7 +845,7 @@ This may take up to a minute. SoftwarePanel Updates are only downloaded while the car is off. - 업데이트는 차량 연결이 해제되어 있는 동안에만 다운로드됩니다. + 업데이트는 차량 시동이 꺼졌을 때 다운로드됩니다. Current Version @@ -908,11 +897,11 @@ This may take up to a minute. failed to check for update - 업데이트 확인 실패 + 업데이트를 확인하지 못했습니다 up to date, last checked %1 - 최신 상태 입니다, %1에 마지막으로 확인 + 최신 버전입니다. 마지막 확인: %1 DOWNLOAD @@ -935,7 +924,7 @@ This may take up to a minute. 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. - 경고: 허용으로 설정하면 GitHub 설정의 모든 공용 키에 대한 SSH 액세스 권한이 부여됩니다. GitHub 사용자 ID 이외에는 입력하지 마십시오. comma에서는 GitHub ID를 추가하라는 요청을 하지 않습니다. + 경고: 이 설정은 GitHub에 등록된 모든 공용 키에 대해 SSH 액세스 권한을 부여합니다. 본인의 GitHub 사용자 아이디 이외에는 입력하지 마십시오. comma에서는 GitHub 아이디를 추가하라는 요청을 하지 않습니다. ADD @@ -947,15 +936,15 @@ This may take up to a minute. LOADING - 로딩 + 로딩 중 REMOVE - 제거 + 삭제 Username '%1' has no keys on GitHub - 사용자 '%1'의 키가 GitHub에 없습니다 + 사용자 '%1'의 GitHub에 키가 등록되어 있지 않습니다 Request timed out @@ -963,7 +952,7 @@ This may take up to a minute. Username '%1' doesn't exist on GitHub - 사용자 '%1'는 GitHub에 없습니다 + GitHub 사용자 '%1'를 찾지 못했습니다 @@ -977,7 +966,7 @@ This may take up to a minute. TermsPage Terms & Conditions - 약관 + 이용약관 Decline @@ -1000,15 +989,15 @@ This may take up to a minute. 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 시스템을 사용할 수 있습니다. 이 기능을 사용할 때에는 언제나 주의를 기울여야 합니다. 설정을 변경하면 차량 시동이 꺼졌을 때 적용됩니다. 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). - 차량이 50km/h(31mph) 이상의 속도로 주행하는 동안 방향지시등이 켜지지 않은 상태에서 차량이 감지된 차선을 벗어나면 차선이탈 경고를 합니다. + 차량이 50km/h(31mph) 이상의 속도로 주행할 때 방향지시등이 켜지지 않은 상태에서 차선을 벗어나면 경고합니다. Use Metric System @@ -1024,11 +1013,11 @@ This may take up to a minute. Upload data from the driver facing camera and help improve the driver monitoring algorithm. - 운전자 카메라에서 데이터를 업로드하고 운전자 모니터링 알고리즘을 개선합니다. + 운전자 카메라의 영상 데이터를 업로드하여 운전자 모니터링 알고리즘을 개선합니다. Disengage on Accelerator Pedal - 가속페달 조작시 해제 + 가속페달 조작 시 해제 When enabled, pressing the accelerator pedal will disengage openpilot. @@ -1036,7 +1025,7 @@ This may take up to a minute. Show ETA in 24h Format - 24시간 형식으로 도착예정시간 표시 + 24시간 형식으로 도착 예정 시간 표시 Use 24h format instead of am/pm @@ -1052,15 +1041,15 @@ This may take up to a minute. Experimental Mode - 실험적 모드 + 실험 모드 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>을 활성화 합니다. 실험적 모드의 특징은 아래에 나열되어 있습니다 + openpilot은 기본적으로 <b>안정 모드</b>로 주행합니다. 실험 모드는 안정화되지 않은 <b>알파 수준의 기능</b>을 활성화합니다. 실험 모드의 기능은 아래와 같습니다: 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은 신호등과 정지표지판을 보고 멈추는 것을 포함하여 운전자가 생각하는것처럼 주행합니다. 주행 모델이 주행할 속도를 결정하므로 설정된 속도는 상한선으로만 작용합니다. 이것은 알파 기능이므로 사용에 주의해야 합니다. + openpilot의 주행모델이 가감속을 제어합니다. openpilot은 신호등과 정지 표지판을 보고 멈추는 것을 포함하여 인간이 운전하는 것처럼 생각하고 주행합니다. 주행 모델이 주행할 속도를 결정하므로 설정된 속도는 최대 주행 속도로만 기능합니다. 이 기능은 알파 수준이므로 사용에 각별히 주의해야 합니다. New Driving Visualization @@ -1068,23 +1057,23 @@ This may take up to a minute. Experimental mode is currently unavailable on this car since the car's stock ACC is used for longitudinal control. - 차량에 장착된 ACC가 롱컨트롤에 사용되기 때문에 현재 이 차량은 실험적 모드를 사용할 수 없습니다. + 차량에 장착된 ACC로 가감속을 제어하기 때문에 현재 이 차량에서는 실험 모드를 사용할 수 없습니다. openpilot longitudinal control may come in a future update. - openpilot 롱컨트롤은 향후 업데이트에서 제공될 수 있습니다. + openpilot 가감속 제어는 향후 업데이트에서 지원될 수 있습니다. openpilot Longitudinal Control (Alpha) - openpilot 롱컨트롤 (알파) + openpilot 가감속 제어 (알파) WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). - 경고: openpilot 롱컨트롤은 알파 기능으로 차량의 자동긴급제동(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 가감속 제어 대신 기본적으로 차량의 ACC로 가감속을 제어합니다. openpilot의 가감속 제어로 전환하려면 이 기능을 활성화하세요. openpilot 가감속 제어 알파를 활성화하는 경우 실험 모드 활성화를 권장합니다. Aggressive @@ -1104,31 +1093,31 @@ This may take up to a minute. 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. - 표준 모드를 권장합니다. 공격적 모드에서는 openpilot은 앞차를 더 가까이 따라가며 가속과 감속을 더 공격적으로 사용합니다. 편안한 모드에서 openpilot은 선두 차량에서 더 멀리 떨어져 있습니다. + 표준 모드를 권장합니다. 공격적 모드에서 openpilot은 앞 차량을 더 가까이 따라가며 적극적으로 가감속합니다. 편안한 모드에서 openpilot은 앞 차량을 더 멀리서 따라갑니다. An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches. - openpilot 롱컨트롤 알파 버전은 비 릴리스 분기에서 실험적 모드와 함께 테스트할 수 있습니다. + openpilot 가감속 제어 알파 버전은 비 릴리즈 브랜치에서 실험 모드와 함께 테스트할 수 있습니다. Navigate on openpilot - Navigate on openpilot (NOO) + openpilot 내비게이트 Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode. - openpilot E2E 롱컨트롤 (알파) 토글을 활성화하여 실험적 모드를 허용합니다. + 실험 모드를 사용하려면 openpilot E2E 가감속 제어 (알파) 토글을 활성화하세요. End-to-End Longitudinal Control - E2E 롱컨트롤 + E2E 가감속 제어 When navigation has a destination, openpilot will input the map information into the model. This provides useful context for the model and allows openpilot to keep left or right appropriately at forks/exits. Lane change behavior is unchanged and still activated by the driver. This is an alpha quality feature; mistakes should be expected, particularly around exits and forks. These mistakes can include unintended laneline crossings, late exit taking, driving towards dividing barriers in the gore areas, etc. - 내비게이션에 목적지가 있으면 openpilot이 지도 정보를 모델에 입력합니다. 이는 모델에 유용한 컨텍스트를 제공하고 openpilot이 분기점에서 적절하게 왼쪽 또는 오른쪽을 유지할 수 있도록 합니다. 차선 변경 기능은 여전히 운전자의 조작에 의해 활성화됩니다. 이것은 알파 상태의 기능입니다. 특히 출구 분기점 주변에서 실수가 발생될수 있으며 이러한 실수에는 의도하지 않은 차선 이탈, 늦은 출구 이용, 도로 가장자리의 분리대 또는 경계석을 향해 운전하는 등이 포함될 수 있습니다. + 내비게이션에 목적지가 설정되어 있으면 openpilot이 지도 정보를 주행 모델에 입력합니다. 이는 모델에 유용한 정보를 제공하고 openpilot이 진출입로 및 램프에서 적절하게 왼쪽 또는 오른쪽을 유지할 수 있도록 해 줍니다. 차선 변경 기능은 여전히 운전자의 조작에 의해 활성화됩니다. 이 기능은 알파 버전입니다. 특히 진출입로 및 분기점 주변에서 실수가 발생할 수 있으며 이러한 실수에는 의도하지 않은 차선 이탈, 늦은 진출, 도로 가장자리의 분리대 또는 경계석을 향해 운전하는 행동 등이 포함됩니다. 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. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green. - 주행 시각화는 저속으로 주행시 도로를 향한 광각 카메라로 전환되어 일부 회전을 더 잘 보여줍니다. 실험적 모드 로고도 우측 상단에 표시됩니다. 내비게이션 목적지가 설정되고 주행 모델에 입력되면 지도의 주행 경로가 녹색으로 바뀝니다. + 주행 시각화는 저속으로 주행 시 도로를 향한 광각 카메라로 자동 전환되어 일부 곡선 경로를 더 잘 보여줍니다. 실험 모드 로고는 우측 상단에 표시됩니다. 내비게이션 목적지가 설정되고 주행 모델에 입력되면 지도의 주행 경로가 녹색으로 바뀝니다. @@ -1139,11 +1128,11 @@ This may take up to a minute. An operating system update is required. Connect your device to Wi-Fi for the fastest update experience. The download size is approximately 1GB. - OS 업데이트가 필요합니다. 장치를 wifi에 연결하면 가장 빠른 업데이트 경험을 제공합니다. 다운로드 크기는 약 1GB입니다. + OS 업데이트가 필요합니다. 장치를 Wi-Fi에 연결하면 가장 빠르게 업데이트할 수 있습니다. 다운로드 크기는 약 1GB입니다. Connect to Wi-Fi - wifi 연결 + Wi-Fi 연결 Install @@ -1155,7 +1144,7 @@ This may take up to a minute. Loading... - 로딩중... + 로딩 중... Reboot @@ -1170,11 +1159,11 @@ This may take up to a minute. WiFiPromptWidget Setup Wi-Fi - wifi 설정 + Wi-Fi 설정 Connect to Wi-Fi to upload driving data and help improve openpilot - wifi에 연결하여 주행 데이터를 업로드하고 openpilot 개선에 참여하세요. + Wi-Fi에 연결하여 주행 데이터를 업로드하고 openpilot 개선에 기여하세요 Open Settings @@ -1182,11 +1171,11 @@ This may take up to a minute. Ready to upload - 업로드 준비완료 + 업로드 준비 완료 Training data will be pulled periodically while your device is on Wi-Fi - 기기가 wifi에 연결되어 있는 동안 트레이닝 데이터를 주기적으로 전송합니다. + 기기가 Wi-Fi에 연결되어 있는 동안 트레이닝 데이터를 주기적으로 전송합니다 @@ -1197,19 +1186,19 @@ This may take up to a minute. CONNECTING... - 연결중... + 연결 중... FORGET - 저장안함 + 삭제 Forget Wi-Fi Network "%1"? - "%1"를 저장하지 않겠습니까? + Wi-Fi "%1"에 자동으로 연결하지 않겠습니까? Forget - 저장안함 + 삭제 diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index a55d31034e..fce5a8a8ff 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection Evite grandes uploads de dados quando estiver em uma conexão limitada + + Hidden Network + Rede Oculta + + + CONNECT + CONECTE + + + Enter SSID + Digite o SSID + + + Enter password + Insira a senha + + + for "%1" + para "%1" + AnnotatedCameraWidget @@ -226,8 +246,8 @@ Desligar - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - O openpilot requer que o dispositivo seja montado dentro de 4° esquerda ou direita e dentro de 5° para cima ou 8° para baixo. O openpilot está continuamente calibrando, resetar raramente é necessário. + 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. + O openpilot requer que o dispositivo seja montado dentro de 4° esquerda ou direita e dentro de 5° para cima ou 9° para baixo. O openpilot está continuamente calibrando, resetar raramente é necessário. Your device is pointed %1° %2 and %3° %4. @@ -275,34 +295,7 @@ - DriveStats - - Drives - Dirigidas - - - Hours - Horas - - - ALL TIME - TOTAL - - - PAST WEEK - SEMANA PASSADA - - - KM - KM - - - Miles - Milhas - - - - DriverViewScene + DriverViewWindow camera starting câmera iniciando @@ -565,10 +558,6 @@ Exit Sair - - dashcam - dashcam - openpilot openpilot @@ -641,16 +630,16 @@ Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. Não é possível montar a partição de dados. Partição corrompida. Confirme para apagar e redefinir o dispositivo. - - Press confirm to erase all content and settings. Press cancel to resume boot. - Pressione confirmar para apagar todo o conteúdo e configurações. Pressione cancelar para voltar. - Resetting device... This may take up to a minute. Redefinindo o dispositivo Isso pode levar até um minuto. + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + Reinicialização do sistema acionada. Pressione confirmar para apagar todo o conteúdo e configurações. Pressione cancel para retomar a inicialização. + SettingsWindow diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index abc6210956..f4d097b2a2 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection ปิดการอัพโหลดข้อมูลขนาดใหญ่เมื่อเชื่อมต่อผ่านเซลลูล่าร์ + + Hidden Network + + + + CONNECT + เชื่อมต่อ + + + Enter SSID + ป้อนค่า SSID + + + Enter password + ใส่รหัสผ่าน + + + for "%1" + สำหรับ "%1" + AnnotatedCameraWidget @@ -226,8 +246,8 @@ ปิดเครื่อง - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - openpilot กำหนดให้ติดตั้งอุปกรณ์ โดยสามารถเอียงด้านซ้ายหรือขวาไม่เกิน 4° และเอียงขึ้นด้านบนไม่เกิน 5° หรือเอียงลงด้านล่างไม่เกิน 8° openpilot ทำการคาลิเบรทอย่างต่อเนื่อง แทบจะไม่จำเป็นต้องทำการรีเซ็ตการคาลิเบรท + 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. @@ -275,34 +295,7 @@ - DriveStats - - Drives - การขับขี่ - - - Hours - ชั่วโมง - - - ALL TIME - ทั้งหมด - - - PAST WEEK - สัปดาห์ที่ผ่านมา - - - KM - กิโลเมตร - - - Miles - ไมล์ - - - - DriverViewScene + DriverViewWindow camera starting กำลังเปิดกล้อง @@ -564,10 +557,6 @@ Exit ปิด - - dashcam - กล้องติดรถยนต์ - openpilot openpilot @@ -639,14 +628,14 @@ This may take up to a minute. กำลังรีเซ็ตอุปกรณ์... อาจใช้เวลาถึงหนึ่งนาที - - Press confirm to erase all content and settings. Press cancel to resume boot. - กดยืนยันเพื่อลบข้อมูลและการตั้งค่าทั้งหมด กดยกเลิกเพื่อบูตต่อ - Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. ไม่สามารถเมานต์พาร์ติชั่นข้อมูลได้ พาร์ติชั่นอาจเสียหาย กดยืนยันเพื่อลบและรีเซ็ตอุปกรณ์ของคุณ + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + + SettingsWindow diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index febded8f59..ec6f71f5b0 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection + + Hidden Network + + + + CONNECT + BAĞLANTI + + + Enter SSID + APN Gir + + + Enter password + Parolayı girin + + + for "%1" + için "%1" + AnnotatedCameraWidget @@ -226,8 +246,8 @@ Sistemi kapat - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - openpilot, cihazın 4° sola veya 5° yukarı yada 8° aşağı bakıcak şekilde monte edilmesi gerekmektedir. openpilot sürekli kendisini kalibre edilmektedir ve nadiren sıfırlama gerebilir. + 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, cihazın 4° sola veya 5° yukarı yada 9° aşağı bakıcak şekilde monte edilmesi gerekmektedir. openpilot sürekli kendisini kalibre edilmektedir ve nadiren sıfırlama gerebilir. Your device is pointed %1° %2 and %3° %4. @@ -275,34 +295,7 @@ - DriveStats - - Drives - Sürücüler - - - Hours - Saat - - - ALL TIME - TÜM ZAMANLAR - - - PAST WEEK - GEÇEN HAFTA - - - KM - KM - - - Miles - Mil - - - - DriverViewScene + DriverViewWindow camera starting kamera başlatılıyor @@ -563,10 +556,6 @@ Exit Çık - - dashcam - araç yol kamerası - openpilot openpilot @@ -638,11 +627,11 @@ This may take up to a minute. - Press confirm to erase all content and settings. Press cancel to resume boot. + Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. - Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index 040dae0b30..91f55c6e94 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection 当使用按流量计费的连接时,避免上传大流量数据 + + Hidden Network + + + + CONNECT + CONNECT + + + Enter SSID + 输入SSID + + + Enter password + 输入密码 + + + for "%1" + 网络名称:"%1" + AnnotatedCameraWidget @@ -226,8 +246,8 @@ 关机 - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - openpilot要求设备安装的偏航角在左4°和右4°之间,俯仰角在上5°和下8°之间。一般来说,openpilot会持续更新校准,很少需要重置。 + 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°和右4°之间,俯仰角在上5°和下9°之间。一般来说,openpilot会持续更新校准,很少需要重置。 Your device is pointed %1° %2 and %3° %4. @@ -275,34 +295,7 @@ - DriveStats - - Drives - 旅程数 - - - Hours - 小时 - - - ALL TIME - 全部 - - - PAST WEEK - 过去一周 - - - KM - 公里 - - - Miles - 英里 - - - - DriverViewScene + DriverViewWindow camera starting 正在启动相机 @@ -564,10 +557,6 @@ Exit 退出 - - dashcam - 行车记录仪 - openpilot openpilot @@ -637,16 +626,16 @@ Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. 无法挂载数据分区。分区可能已经损坏。请确认是否要删除并重新设置。 - - Press confirm to erase all content and settings. Press cancel to resume boot. - 按下确认以删除所有内容及设置。按下取消来继续开机。 - Resetting device... This may take up to a minute. 设备重置中… 这可能需要一分钟的时间。 + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + + SettingsWindow diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 57d9f91fec..e8c8854d0e 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -66,6 +66,26 @@ Prevent large data uploads when on a metered connection 防止使用行動網路上傳大量的數據 + + Hidden Network + + + + CONNECT + 雲端服務 + + + Enter SSID + 輸入 SSID + + + Enter password + 輸入密碼 + + + for "%1" + 給 "%1" + AnnotatedCameraWidget @@ -171,15 +191,15 @@ Reset Calibration - 重置校準 + 重設校準 RESET - 重置 + 重設 Are you sure you want to reset calibration? - 您確定要重置校準嗎? + 您確定要重設校準嗎? Review Training Guide @@ -226,8 +246,8 @@ 關機 - openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required. - openpilot 需要將設備固定在左右偏差 4° 以內,朝上偏差 5° 以内或朝下偏差 8° 以内。鏡頭在後台會持續自動校準,很少有需要重置的情况。 + 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° 以內。鏡頭在後台會持續自動校準,很少有需要重設的情況。 Your device is pointed %1° %2 and %3° %4. @@ -275,34 +295,7 @@ - DriveStats - - Drives - 旅程 - - - Hours - 小時 - - - ALL TIME - 總共 - - - PAST WEEK - 上周 - - - KM - 公里 - - - Miles - 英里 - - - - DriverViewScene + DriverViewWindow camera starting 開啟相機中 @@ -369,7 +362,7 @@ MapWindow Map Loading - 地圖加載中 + 地圖載入中 Waiting for GPS @@ -452,11 +445,11 @@ 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 無法識別您的車輛。您的車輛可能未被支援,或是其電控單元 (ECU) 未被識別。請提交一個 Pull Request 為您的車輛添加正確的固件版本。需要幫助嗎?請加入 discord.comma.ai 。 + openpilot 無法識別您的車輛。您的車輛可能未被支援,或是其電控單元 (ECU) 未被識別。請提交一個 Pull Request 為您的車輛添加正確的韌體版本。需要幫助嗎?請加入 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 power 完全插入車輛的 OBD-II 接口。需要幫助嗎?請加入 discord.comma.ai 。 + openpilot 無法識別您的車輛。請檢查線路是否正確的安裝並確保所有的連接都牢固,特別是確保 comma power 完全插入車輛的 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. @@ -498,7 +491,7 @@ Bookmark connect.comma.ai to your home screen to use it like an app - 將 connect.comma.ai 加入您的主屏幕,以便像手機 App 一樣使用它 + 將 connect.comma.ai 加入您的主螢幕,以便像手機 App 一樣使用它 @@ -528,7 +521,7 @@ Remote access - 遠程訪問 + 遠端存取 24/7 LTE connectivity @@ -564,10 +557,6 @@ Exit 離開 - - dashcam - 行車記錄器 - openpilot openpilot @@ -611,15 +600,15 @@ Reset Reset failed. Reboot to try again. - 重置失敗。請重新啟動後再試。 + 重設失敗。請重新啟動後再試。 Are you sure you want to reset your device? - 您確定要重置你的設備嗎? + 您確定要重設你的設備嗎? System Reset - 系統重置 + 系統重設 Cancel @@ -637,16 +626,16 @@ Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. 無法掛載資料分割區。分割區可能已經毀損。請確認是否要刪除並重新設定。 - - Press confirm to erase all content and settings. Press cancel to resume boot. - 按下確認以刪除所有內容及設定。按下取消來繼續開機。 - Resetting device... This may take up to a minute. - 設備重置中… + 設備重設中… 這可能需要一分鐘的時間。 + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + + SettingsWindow @@ -699,7 +688,7 @@ This may take up to a minute. Connect to Wi-Fi - 連接到無線網絡 + 連接到無線網路 Back @@ -719,7 +708,7 @@ This may take up to a minute. for Custom Software - 定制的軟體 + 訂製的軟體 Downloading... @@ -829,27 +818,27 @@ This may take up to a minute. Wi-Fi - + Wi-Fi ETH - + ETH 2G - + 2G 3G - + 3G LTE - + LTE 5G - + 5G @@ -931,11 +920,11 @@ This may take up to a minute. SshControl SSH Keys - SSH 密鑰 + 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. - 警告:這將授權給 GitHub 帳號中所有公鑰 SSH 訪問權限。切勿輸入非您自己的 GitHub 用戶名。comma 員工「永遠不會」要求您添加他們的 GitHub 用戶名。 + 警告:這將授權給 GitHub 帳號中所有公鑰 SSH 訪問權限。切勿輸入非您自己的 GitHub 使用者名稱。comma 員工「永遠不會」要求您添加他們的 GitHub 使用者名稱。 ADD @@ -943,7 +932,7 @@ This may take up to a minute. Enter your GitHub username - 請輸入您 GitHub 的用戶名 + 請輸入您 GitHub 的使用者名稱 LOADING @@ -955,7 +944,7 @@ This may take up to a minute. Username '%1' has no keys on GitHub - GitHub 用戶 '%1' 沒有設定任何密鑰 + GitHub 用戶 '%1' 沒有設定任何金鑰 Request timed out @@ -1024,7 +1013,7 @@ This may take up to a minute. Upload data from the driver facing camera and help improve the driver monitoring algorithm. - 上傳駕駛監控的錄像來協助我們提升駕駛監控的準確率。 + 上傳駕駛監控的錄影來協助我們提升駕駛監控的準確率。 Disengage on Accelerator Pedal @@ -1080,7 +1069,7 @@ This may take up to a minute. WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). - 警告:此車輛的 openpilot 縱向控制功能目前處於 Alpha 版本,使用此功能將會停用自動緊急制動(AEB)功能。 + 警告:此車輛的 openpilot 縱向控制功能目前處於 Alpha 版本,使用此功能將會停用自動緊急煞車(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. @@ -1124,11 +1113,11 @@ This may take up to a minute. When navigation has a destination, openpilot will input the map information into the model. This provides useful context for the model and allows openpilot to keep left or right appropriately at forks/exits. Lane change behavior is unchanged and still activated by the driver. This is an alpha quality feature; mistakes should be expected, particularly around exits and forks. These mistakes can include unintended laneline crossings, late exit taking, driving towards dividing barriers in the gore areas, etc. - 当导航有目的地时,openpilot 将把地图信息输入模型中。这为模型提供了有用的背景信息,使 openpilot 能够在叉路/出口时适当地保持左侧或右侧行驶。车道变换行为保持不变,仍由驾驶员激活。这是一个 Alpha 版的功能;可能会出现错误,特别是在出口和分叉处。这些错误可能包括意外的车道越界、晚出口、朝着分隔栏驶向分隔带区域等。 + 當導航有目的地時,openpilot 將把地圖資訊輸入模型中。這為模型提供了有用的背景資訊,使 openpilot 能夠在叉路/出口時適當地保持左側或右側行駛。車道變換行為保持不變,仍由駕駛員啟用。這是一個 Alpha 版的功能;可能會出現錯誤,特別是在出口和分叉處。這些錯誤可能包括意外的車道越界、晚出口、朝著分隔欄駛向分隔帶區域等。 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. When a navigation destination is set and the driving model is using it as input, the driving path on the map will turn green. - 行駛畫面將在低速時切換至道路朝向的廣角鏡頭,以更好地顯示一些轉彎。實驗模式圖標也將顯示在右上角。當設定了導航目的地並且行駛模型正在將其作為輸入時,地圖上的行駛路徑將變為綠色。 + 行駛畫面將在低速時切換至道路朝向的廣角鏡頭,以更好地顯示一些轉彎。實驗模式圖示也將顯示在右上角。當設定了導航目的地並且行駛模型正在將其作為輸入時,地圖上的行駛路徑將變為綠色。 @@ -1143,7 +1132,7 @@ This may take up to a minute. Connect to Wi-Fi - 連接到無線網絡 + 連接到無線網路 Install diff --git a/selfdrive/ui/ui b/selfdrive/ui/ui deleted file mode 100755 index c9f81c0539..0000000000 --- a/selfdrive/ui/ui +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -cd "$(dirname "$0")" -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" -export QT_DBL_CLICK_DIST=150 -exec ./_ui diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 9f58ede777..b5f1d67fd9 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -38,7 +38,7 @@ static bool calib_frame_to_full_frame(const UIState *s, float in_x, float in_y, int get_path_length_idx(const cereal::XYZTData::Reader &line, const float path_height) { const auto line_x = line.getX(); int max_idx = 0; - for (int i = 1; i < TRAJECTORY_SIZE && line_x[i] <= path_height; ++i) { + for (int i = 1; i < line_x.size() && line_x[i] <= path_height; ++i) { max_idx = i; } return max_idx; @@ -84,10 +84,10 @@ void update_model(UIState *s, const cereal::UiPlan::Reader &plan) { UIScene &scene = s->scene; auto plan_position = plan.getPosition(); - if (plan_position.getX().size() < TRAJECTORY_SIZE){ + if (plan_position.getX().size() < model.getPosition().getX().size()) { plan_position = model.getPosition(); } - float max_distance = std::clamp(plan_position.getX()[TRAJECTORY_SIZE - 1], + float max_distance = std::clamp(*(plan_position.getX().end() - 1), MIN_DRAW_DISTANCE, MAX_DRAW_DISTANCE); // update lane lines @@ -214,8 +214,15 @@ static void update_state(UIState *s) { scene.light_sensor = std::max(100.0f - scale * cam_state.getExposureValPercent(), 0.0f); } scene.started = sm["deviceState"].getDeviceState().getStarted() && scene.ignition; - if (sm.updated("lateralPlanSP")) { - scene.dynamic_lane_profile_status = sm["lateralPlanSP"].getLateralPlanSP().getDynamicLaneProfileStatus(); + + scene.world_objects_visible = scene.world_objects_visible || + (scene.started && + sm.rcv_frame("liveCalibration") > scene.started_frame && + sm.rcv_frame("modelV2") > scene.started_frame && + sm.rcv_frame("uiPlan") > scene.started_frame); + // TODO: SP - Set this dynamically on init with manual toggle or driving model selection + if (sm.updated("lateralPlanSPDEPRECATED")) { + scene.dynamic_lane_profile_status = sm["lateralPlanSPDEPRECATED"].getLateralPlanSPDEPRECATED().getDynamicLaneProfileStatus(); } if (sm.updated("controlsState")) { scene.controlsState = sm["controlsState"].getControlsState(); @@ -232,20 +239,16 @@ void ui_update_params(UIState *s) { s->scene.is_metric = params.getBool("IsMetric"); s->scene.map_on_left = params.getBool("NavSettingLeftSide"); - s->scene.dynamic_lane_profile_toggle = params.getBool("DynamicLaneProfileToggle"); s->scene.visual_brake_lights = params.getBool("BrakeLights"); s->scene.onroadScreenOff = std::atoi(params.get("OnroadScreenOff").c_str()); s->scene.onroadScreenOffBrightness = std::atoi(params.get("OnroadScreenOffBrightness").c_str()); s->scene.onroadScreenOffEvent = params.getBool("OnroadScreenOffEvent"); s->scene.brightness = std::atoi(params.get("BrightnessControl").c_str()); s->scene.stand_still_timer = params.getBool("StandStillTimer"); - s->scene.speed_limit_perc_offset = params.getBool("SpeedLimitPercOffset"); s->scene.show_debug_ui = params.getBool("ShowDebugUI"); - s->scene.debug_snapshot_enabled = params.getBool("EnableDebugSnapshot"); s->scene.hide_vego_ui = params.getBool("HideVEgoUi"); s->scene.true_vego_ui = params.getBool("TrueVEgoUi"); s->scene.chevron_data = std::atoi(params.get("ChevronInfo").c_str()); - s->scene.dev_ui_enabled = params.getBool("DevUI"); s->scene.dev_ui_info = std::atoi(params.get("DevUIInfo").c_str()); s->scene.button_auto_hide = params.getBool("ButtonAutoHide"); s->scene.reverse_dm_cam = params.getBool("ReverseDmCam"); @@ -255,6 +258,12 @@ void ui_update_params(UIState *s) { s->scene.map_3d_buildings = params.getBool("Map3DBuildings"); s->scene.live_torque_toggle = params.getBool("LiveTorque"); s->scene.torqued_override = params.getBool("TorquedOverride"); + s->scene.speed_limit_control_engage_type = std::atoi(params.get("SpeedLimitEngageType").c_str()); + s->scene.mapbox_fullscreen = params.getBool("MapboxFullScreen"); + s->scene.speed_limit_warning_flash = params.getBool("SpeedLimitWarningFlash"); + s->scene.speed_limit_warning_type = std::atoi(params.get("SpeedLimitWarningType").c_str()); + s->scene.speed_limit_warning_value_offset = std::atoi(params.get("SpeedLimitWarningValueOffset").c_str()); + s->scene.driving_model_gen = std::atoi(params.get("DrivingModelGeneration").c_str()); // Handle Onroad Screen Off params if (s->scene.onroadScreenOff > 0) { @@ -309,6 +318,7 @@ void UIState::updateStatus() { scene.started_frame = sm->frame; } started_prev = scene.started; + scene.world_objects_visible = false; emit offroadTransition(!scene.started); } @@ -366,17 +376,16 @@ void UIState::updateStatus() { } if (sm->frame % UI_FREQ == 0) { // Update every 1 Hz - scene.sidebar_temp = params.getBool("SidebarTemperature"); scene.sidebar_temp_options = std::atoi(params.get("SidebarTemperatureOptions").c_str()); } } UIState::UIState(QObject *parent) : QObject(parent) { sm = std::make_unique>({ - "modelV2", "controlsState", "liveCalibration", "radarState", "deviceState", "roadCameraState", + "modelV2", "controlsState", "liveCalibration", "radarState", "deviceState", "pandaStates", "carParams", "driverMonitoringState", "carState", "liveLocationKalman", "driverStateV2", "wideRoadCameraState", "managerState", "navInstruction", "navRoute", "uiPlan", "longitudinalPlanSP", "liveMapDataSP", - "carControl", "lateralPlanSP", "gpsLocationExternal", "liveParameters", "liveTorqueParameters", "controlsStateSP" + "carControl", "lateralPlanSPDEPRECATED", "gpsLocation", "gpsLocationExternal", "liveParameters", "liveTorqueParameters", "controlsStateSP" }); Params params; diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 741dd82186..9595357fab 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -3,7 +3,6 @@ #include #include #include -#include #include #include @@ -13,25 +12,26 @@ #include #include "cereal/messaging/messaging.h" -#include "common/modeldata.h" +#include "common/mat.h" #include "common/params.h" #include "common/timing.h" +#include "system/hardware/hw.h" const int UI_BORDER_SIZE = 30; const int UI_HEADER_HEIGHT = 420; -const QRect speed_sgn_rc(UI_BORDER_SIZE * 2, UI_BORDER_SIZE * 2.5 + 202, 184, 184); +const int UI_ROAD_NAME_MARGIN_X = 14; struct FeatureStatusText { const QStringList dlp_list_text = { "Laneful", "Laneless", "Auto" }; const QStringList gac_list_text = { "Maniac", "Aggressive", "Standard", "Relaxed" }; - const QStringList slc_list_text = { "Inactive", "Temp Off", "Adapting", "Active" }; + const QStringList slc_list_text = { "Inactive", "Temp Off", "Adapting", "Active", "Pre Active" }; }; struct FeatureStatusColor { const QStringList dlp_list_color = { "#2020f8", "#0df87a", "#0df8f8" }; const QStringList gac_list_color = { "#ff4b4b", "#fcff4b", "#4bff66", "#6a0ac9" }; - const QStringList slc_list_color = { "#ffffff", "#ffffff", "#fcff4b", "#4bff66" }; + const QStringList slc_list_color = { "#ffffff", "#ffffff", "#fcff4b", "#4bff66", "#fcff4b" }; }; const float DRIVING_PATH_WIDE = 0.9; @@ -41,9 +41,20 @@ const int UI_FREQ = 20; // Hz const int BACKLIGHT_OFFROAD = 50; typedef cereal::CarControl::HUDControl::AudibleAlert AudibleAlert; -const mat3 DEFAULT_CALIBRATION = {{ 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0 }}; +const float MIN_DRAW_DISTANCE = 10.0; +const float MAX_DRAW_DISTANCE = 100.0; +constexpr mat3 DEFAULT_CALIBRATION = {{ 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0 }}; +constexpr mat3 FCAM_INTRINSIC_MATRIX = (mat3){{2648.0, 0.0, 1928.0 / 2, + 0.0, 2648.0, 1208.0 / 2, + 0.0, 0.0, 1.0}}; +// tici ecam focal probably wrong? magnification is not consistent across frame +// Need to retrain model before this can be changed +constexpr mat3 ECAM_INTRINSIC_MATRIX = (mat3){{567.0, 0.0, 1928.0 / 2, + 0.0, 567.0, 1208.0 / 2, + 0.0, 0.0, 1.0}}; -const vec3 default_face_kpts_3d[] = { + +constexpr vec3 default_face_kpts_3d[] = { {-5.98, -51.20, 8.00}, {-17.64, -49.14, 8.00}, {-23.81, -46.40, 8.00}, {-29.98, -40.91, 8.00}, {-32.04, -37.49, 8.00}, {-34.10, -32.00, 8.00}, {-36.16, -21.03, 8.00}, {-36.16, 6.40, 8.00}, {-35.47, 10.51, 8.00}, {-32.73, 19.43, 8.00}, {-29.30, 26.29, 8.00}, {-24.50, 33.83, 8.00}, {-19.01, 41.37, 8.00}, {-14.21, 46.17, 8.00}, {-12.16, 47.54, 8.00}, @@ -65,17 +76,12 @@ struct Alert { return text1 == a2.text1 && text2 == a2.text2 && type == a2.type && sound == a2.sound; } - static Alert get(const SubMaster &sm, uint64_t started_frame, uint64_t display_debug_alert_frame = 0) { + static Alert get(const SubMaster &sm, uint64_t started_frame) { const cereal::ControlsState::Reader &cs = sm["controlsState"].getControlsState(); const uint64_t controls_frame = sm.rcv_frame("controlsState"); Alert alert = {}; - if (display_debug_alert_frame > 0 && (sm.frame - display_debug_alert_frame) <= 1 * UI_FREQ) { - return {"Debug snapshot collected", "", - "debugTapDetected", cereal::ControlsState::AlertSize::SMALL, - cereal::ControlsState::AlertStatus::NORMAL, - AudibleAlert::WARNING_SOFT}; - } else if (controls_frame >= started_frame) { // Don't get old alert. + if (controls_frame >= started_frame) { // Don't get old alert. alert = {cs.getAlertText1().cStr(), cs.getAlertText2().cStr(), cs.getAlertType().cStr(), cs.getAlertSize(), cs.getAlertStatus(), @@ -126,6 +132,7 @@ enum PrimeType { LITE = 2, BLUE = 3, MAGENTA_NEW = 4, + PURPLE = 5, }; const QColor bg_colors [] = { @@ -159,12 +166,10 @@ typedef struct UIScene { // Debug UI bool show_debug_ui; - bool debug_snapshot_enabled; - uint64_t display_debug_alert_frame; // Speed limit control bool speed_limit_control_enabled; - bool speed_limit_perc_offset; + int speed_limit_control_policy; double last_speed_limit_sign_tap; // modelV2 @@ -190,11 +195,11 @@ typedef struct UIScene { float light_sensor; bool started, ignition, is_metric, map_on_left, longitudinal_control; + bool world_objects_visible = false; uint64_t started_frame; int dynamic_lane_profile; bool dynamic_lane_profile_status = true; - bool dynamic_lane_profile_toggle; bool visual_brake_lights; @@ -213,7 +218,6 @@ typedef struct UIScene { int longitudinal_personality; bool map_visible; - bool dev_ui_enabled; int dev_ui_info; int rn_offset; bool live_torque_toggle; @@ -229,7 +233,6 @@ typedef struct UIScene { bool e2e_long_alert_light, e2e_long_alert_lead, e2e_long_alert_ui; float e2eX[13] = {0}; - bool sidebar_temp; int sidebar_temp_options; float mads_path_scale = DRIVING_PATH_WIDE - DRIVING_PATH_NARROW; @@ -240,6 +243,20 @@ typedef struct UIScene { bool map_3d_buildings; bool torqued_override; + + bool dynamic_experimental_control; + + QRect sl_sign_rect; + + int speed_limit_control_engage_type; + + bool mapbox_fullscreen; + + bool speed_limit_warning_flash; + int speed_limit_warning_type; + int speed_limit_warning_value_offset; + + int driving_model_gen; } UIScene; class UIState : public QObject { @@ -248,9 +265,6 @@ class UIState : public QObject { public: UIState(QObject* parent = 0); void updateStatus(); - inline bool worldObjectsVisible() const { - return sm->rcv_frame("liveCalibration") > scene.started_frame; - } inline bool engaged() const { return scene.started && (*sm)["controlsState"].getControlsState().getEnabled(); } diff --git a/selfdrive/ui/update_translations.py b/selfdrive/ui/update_translations.py index 004c6425dc..e988a13b7f 100755 --- a/selfdrive/ui/update_translations.py +++ b/selfdrive/ui/update_translations.py @@ -9,6 +9,7 @@ UI_DIR = os.path.join(BASEDIR, "selfdrive", "ui") TRANSLATIONS_DIR = os.path.join(UI_DIR, "translations") LANGUAGES_FILE = os.path.join(TRANSLATIONS_DIR, "languages.json") TRANSLATIONS_INCLUDE_FILE = os.path.join(TRANSLATIONS_DIR, "alerts_generated.h") +PLURAL_ONLY = ["main_en"] # base language, only create entries for strings with plural forms def generate_translations_include(): @@ -22,21 +23,20 @@ def generate_translations_include(): with open(TRANSLATIONS_INCLUDE_FILE, "w") as f: f.write(content) -def update_translations(vanish=False, plural_only=None, translations_dir=TRANSLATIONS_DIR): + +def update_translations(vanish: bool = False, translation_files: None | list[str] = None, translations_dir: str = TRANSLATIONS_DIR): generate_translations_include() - if plural_only is None: - plural_only = [] + if translation_files is None: + with open(LANGUAGES_FILE, "r") as f: + translation_files = json.load(f).values() - with open(LANGUAGES_FILE, "r") as f: - translation_files = json.load(f) - - for file in translation_files.values(): + for file in translation_files: tr_file = os.path.join(translations_dir, f"{file}.ts") args = f"lupdate -locations none -recursive {UI_DIR} -ts {tr_file} -I {BASEDIR}" if vanish: args += " -no-obsolete" - if file in plural_only: + if file in PLURAL_ONLY: args += " -pluralonly" ret = os.system(args) assert ret == 0 @@ -46,8 +46,6 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="Update translation files for UI", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("--vanish", action="store_true", help="Remove translations with source text no longer found") - parser.add_argument("--plural-only", type=str, nargs="*", default=["main_en"], - help="Translation codes to only create plural translations for (ie. the base language)") args = parser.parse_args() - update_translations(args.vanish, args.plural_only) + update_translations(args.vanish) diff --git a/selfdrive/updated.py b/selfdrive/updated.py index 86a4071c19..4ac21eb292 100755 --- a/selfdrive/updated.py +++ b/selfdrive/updated.py @@ -18,7 +18,7 @@ from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params from openpilot.common.time import system_time_valid from openpilot.system.hardware import AGNOS, HARDWARE -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.controls.lib.alertmanager import set_offroad_alert from openpilot.system.version import is_tested_branch @@ -35,26 +35,42 @@ OVERLAY_INIT = Path(os.path.join(BASEDIR, ".overlay_init")) DAYS_NO_CONNECTIVITY_MAX = 14 # do not allow to engage after this many days DAYS_NO_CONNECTIVITY_PROMPT = 10 # send an offroad prompt after this many days +class UserRequest: + NONE = 0 + CHECK = 1 + FETCH = 2 + class WaitTimeHelper: def __init__(self): self.ready_event = threading.Event() - self.only_check_for_update = False + self.user_request = UserRequest.NONE signal.signal(signal.SIGHUP, self.update_now) signal.signal(signal.SIGUSR1, self.check_now) def update_now(self, signum: int, frame) -> None: cloudlog.info("caught SIGHUP, attempting to downloading update") - self.only_check_for_update = False + self.user_request = UserRequest.FETCH self.ready_event.set() def check_now(self, signum: int, frame) -> None: cloudlog.info("caught SIGUSR1, checking for updates") - self.only_check_for_update = True + self.user_request = UserRequest.CHECK self.ready_event.set() def sleep(self, t: float) -> None: self.ready_event.wait(timeout=t) +def write_time_to_param(params, param) -> None: + t = datetime.datetime.utcnow() + params.put(param, t.isoformat().encode('utf8')) + +def read_time_from_param(params, param) -> Optional[datetime.datetime]: + t = params.get(param, encoding='utf8') + try: + return datetime.datetime.fromisoformat(t) + except (TypeError, ValueError): + pass + return None def run(cmd: List[str], cwd: Optional[str] = None) -> str: return subprocess.check_output(cmd, cwd=cwd, stderr=subprocess.STDOUT, encoding='utf8') @@ -230,7 +246,6 @@ class Updater: b: Union[str, None] = self.params.get("UpdaterTargetBranch", encoding='utf-8') if b is None: b = self.get_branch(BASEDIR) - self.params.put("UpdaterTargetBranch", b) return b @property @@ -245,7 +260,7 @@ class Updater: @property def update_available(self) -> bool: - if os.path.isdir(OVERLAY_MERGED): + if os.path.isdir(OVERLAY_MERGED) and len(self.branches) > 0: hash_mismatch = self.get_commit_hash(OVERLAY_MERGED) != self.branches[self.target_branch] branch_mismatch = self.get_branch(OVERLAY_MERGED) != self.target_branch return hash_mismatch or branch_mismatch @@ -259,20 +274,19 @@ class Updater: def set_params(self, update_success: bool, failed_count: int, exception: Optional[str]) -> None: self.params.put("UpdateFailedCount", str(failed_count)) + self.params.put("UpdaterTargetBranch", self.target_branch) self.params.put_bool("UpdaterFetchAvailable", self.update_available) - self.params.put("UpdaterAvailableBranches", ','.join(self.branches.keys())) + if len(self.branches): + self.params.put("UpdaterAvailableBranches", ','.join(self.branches.keys())) last_update = datetime.datetime.utcnow() if update_success: - t = last_update.isoformat() - self.params.put("LastUpdateTime", t.encode('utf8')) + write_time_to_param(self.params, "LastUpdateTime") else: - try: - t = self.params.get("LastUpdateTime", encoding='utf8') - last_update = datetime.datetime.fromisoformat(t) - except (TypeError, ValueError): - pass + t = read_time_from_param(self.params, "LastUpdateTime") + if t is not None: + last_update = t if exception is None: self.params.remove("LastUpdateException") @@ -328,7 +342,7 @@ class Updater: def check_for_update(self) -> None: cloudlog.info("checking for updates") - excluded_branches = ('release2', 'release2-staging', 'dashcam', 'dashcam-staging') + excluded_branches = ('release2', 'release2-staging') try: run(["git", "ls-remote", "origin", "HEAD"], OVERLAY_MERGED) @@ -420,15 +434,16 @@ def main() -> None: updater = Updater() update_failed_count = 0 # TODO: Load from param? - - # no fetch on the first time wait_helper = WaitTimeHelper() - wait_helper.only_check_for_update = True # invalidate old finalized update set_consistent_flag(False) + # set initial state + params.put("UpdaterState", "idle") + # Run the update loop + first_run = True while True: wait_helper.ready_event.clear() @@ -441,7 +456,8 @@ def main() -> None: # ensure we have some params written soon after startup updater.set_params(False, update_failed_count, exception) - if not system_time_valid(): + if not system_time_valid() or first_run: + first_run = False wait_helper.sleep(60) continue @@ -452,10 +468,16 @@ def main() -> None: updater.check_for_update() # download update - if wait_helper.only_check_for_update: - cloudlog.info("skipping fetch this cycle") + last_fetch = read_time_from_param(params, "UpdaterLastFetchTime") + timed_out = last_fetch is None or (datetime.datetime.utcnow() - last_fetch > datetime.timedelta(days=3)) + user_requested_fetch = wait_helper.user_request == UserRequest.FETCH + if params.get_bool("NetworkMetered") and not timed_out and not user_requested_fetch: + cloudlog.info("skipping fetch, connection metered") + elif wait_helper.user_request == UserRequest.CHECK: + cloudlog.info("skipping fetch, only checking") else: updater.fetch_update() + write_time_to_param(params, "UpdaterLastFetchTime") update_failed_count = 0 except subprocess.CalledProcessError as e: cloudlog.event( @@ -479,7 +501,7 @@ def main() -> None: cloudlog.exception("uncaught updated exception while setting params, shouldn't happen") # infrequent attempts if we successfully updated recently - wait_helper.only_check_for_update = False + wait_helper.user_request = UserRequest.NONE wait_helper.sleep(5*60 if update_failed_count > 0 else 1.5*60*60) diff --git a/system/camerad/SConscript b/system/camerad/SConscript index ffd7278bbb..8f19e7ee19 100644 --- a/system/camerad/SConscript +++ b/system/camerad/SConscript @@ -2,13 +2,9 @@ Import('env', 'arch', 'cereal', 'messaging', 'common', 'gpucommon', 'visionipc') libs = ['m', 'pthread', common, 'jpeg', 'OpenCL', 'yuv', cereal, messaging, 'zmq', 'capnp', 'kj', visionipc, gpucommon, 'atomic'] -camera_obj = env.Object(['cameras/camera_qcom2.cc', 'cameras/camera_common.cc', 'cameras/camera_util.cc']) -env.Program('camerad', [ - 'main.cc', - camera_obj, - ], LIBS=libs) +camera_obj = env.Object(['cameras/camera_qcom2.cc', 'cameras/camera_common.cc', 'cameras/camera_util.cc', + 'sensors/ar0231.cc', 'sensors/ox03c10.cc', 'sensors/os04c10.cc']) +env.Program('camerad', ['main.cc', camera_obj], LIBS=libs) if GetOption("extras") and arch == "x86_64": - env.Program('test/ae_gray_test', - ['test/ae_gray_test.cc', camera_obj], - LIBS=libs) + env.Program('test/test_ae_gray', ['test/test_ae_gray.cc', camera_obj], LIBS=libs) diff --git a/system/camerad/cameras/camera_common.cc b/system/camerad/cameras/camera_common.cc index 23b28357da..91c6d44f84 100644 --- a/system/camerad/cameras/camera_common.cc +++ b/system/camerad/cameras/camera_common.cc @@ -1,22 +1,14 @@ #include "system/camerad/cameras/camera_common.h" -#include - #include -#include -#include #include -#include #include "third_party/libyuv/include/libyuv.h" #include -#include "system/camerad/imgproc/utils.h" #include "common/clutil.h" -#include "common/modeldata.h" #include "common/swaglog.h" #include "common/util.h" -#include "system/hardware/hw.h" #include "third_party/linux/include/msm_media_info.h" #include "system/camerad/cameras/camera_qcom2.h" @@ -30,15 +22,15 @@ class Debayer { public: Debayer(cl_device_id device_id, cl_context context, const CameraBuf *b, const CameraState *s, int buf_width, int uv_offset) { char args[4096]; - const CameraInfo *ci = &s->ci; + const SensorInfo *ci = s->ci.get(); snprintf(args, sizeof(args), "-cl-fast-relaxed-math -cl-denorms-are-zero " "-DFRAME_WIDTH=%d -DFRAME_HEIGHT=%d -DFRAME_STRIDE=%d -DFRAME_OFFSET=%d " - "-DRGB_WIDTH=%d -DRGB_HEIGHT=%d -DRGB_STRIDE=%d -DYUV_STRIDE=%d -DUV_OFFSET=%d " + "-DRGB_WIDTH=%d -DRGB_HEIGHT=%d -DYUV_STRIDE=%d -DUV_OFFSET=%d " "-DIS_OX=%d -DCAM_NUM=%d%s", ci->frame_width, ci->frame_height, ci->frame_stride, ci->frame_offset, - b->rgb_width, b->rgb_height, b->rgb_stride, buf_width, uv_offset, - s->camera_id==CAMERA_ID_OX03C10 ? 1 : 0, s->camera_num, s->camera_num==1 ? " -DVIGNETTING" : ""); + b->rgb_width, b->rgb_height, buf_width, uv_offset, + ci->image_sensor == cereal::FrameData::ImageSensor::OX03C10, s->camera_num, s->camera_num==1 ? " -DVIGNETTING" : ""); const char *cl_file = "cameras/real_debayer.cl"; cl_program prg_debayer = cl_program_from_file(context, device_id, cl_file, args); krnl_ = CL_CHECK_ERR(clCreateKernel(prg_debayer, "debayer10", &err)); @@ -63,12 +55,12 @@ private: cl_kernel krnl_; }; -void CameraBuf::init(cl_device_id device_id, cl_context context, CameraState *s, VisionIpcServer * v, int frame_cnt, VisionStreamType init_yuv_type) { +void CameraBuf::init(cl_device_id device_id, cl_context context, CameraState *s, VisionIpcServer * v, int frame_cnt, VisionStreamType type) { vipc_server = v; - this->yuv_type = init_yuv_type; + stream_type = type; frame_buf_count = frame_cnt; - const CameraInfo *ci = &s->ci; + const SensorInfo *ci = s->ci.get(); // RAW frame const int frame_size = (ci->frame_height + ci->extra_height) * ci->frame_stride; camera_bufs = std::make_unique(frame_buf_count); @@ -89,17 +81,13 @@ void CameraBuf::init(cl_device_id device_id, cl_context context, CameraState *s, assert(nv12_height/2 == VENUS_UV_SCANLINES(COLOR_FMT_NV12, rgb_height)); size_t nv12_size = 2346 * nv12_width; // comes from v4l2_format.fmt.pix_mp.plane_fmt[0].sizeimage size_t nv12_uv_offset = nv12_width * nv12_height; - vipc_server->create_buffers_with_sizes(yuv_type, YUV_BUFFER_COUNT, false, rgb_width, rgb_height, nv12_size, nv12_width, nv12_uv_offset); + vipc_server->create_buffers_with_sizes(stream_type, YUV_BUFFER_COUNT, false, rgb_width, rgb_height, nv12_size, nv12_width, nv12_uv_offset); LOGD("created %d YUV vipc buffers with size %dx%d", YUV_BUFFER_COUNT, nv12_width, nv12_height); debayer = new Debayer(device_id, context, this, s, nv12_width, nv12_uv_offset); -#ifdef __APPLE__ - q = CL_CHECK_ERR(clCreateCommandQueue(context, device_id, 0, &err)); -#else const cl_queue_properties props[] = {0}; //CL_QUEUE_PRIORITY_KHR, CL_QUEUE_PRIORITY_HIGH_KHR, 0}; q = CL_CHECK_ERR(clCreateCommandQueueWithProperties(context, device_id, props, &err)); -#endif } CameraBuf::~CameraBuf() { @@ -119,7 +107,7 @@ bool CameraBuf::acquire() { } cur_frame_data = camera_bufs_metadata[cur_buf_idx]; - cur_yuv_buf = vipc_server->get_buffer(yuv_type); + cur_yuv_buf = vipc_server->get_buffer(stream_type); cur_camera_buf = &camera_bufs[cur_buf_idx]; double start_time = millis_since_boot(); @@ -148,6 +136,7 @@ void CameraBuf::queue(size_t buf_idx) { void fill_frame_data(cereal::FrameData::Builder &framed, const FrameMetadata &frame_data, CameraState *c) { framed.setFrameId(frame_data.frame_id); + framed.setRequestId(frame_data.request_id); framed.setTimestampEof(frame_data.timestamp_eof); framed.setTimestampSof(frame_data.timestamp_sof); framed.setIntegLines(frame_data.integ_lines); @@ -158,14 +147,9 @@ void fill_frame_data(cereal::FrameData::Builder &framed, const FrameMetadata &fr framed.setProcessingTime(frame_data.processing_time); const float ev = c->cur_ev[frame_data.frame_id % 3]; - const float perc = util::map_val(ev, c->min_ev, c->max_ev, 0.0f, 100.0f); + const float perc = util::map_val(ev, c->ci->min_ev, c->ci->max_ev, 0.0f, 100.0f); framed.setExposureValPercent(perc); - - if (c->camera_id == CAMERA_ID_AR0231) { - framed.setSensor(cereal::FrameData::ImageSensor::AR0231); - } else if (c->camera_id == CAMERA_ID_OX03C10) { - framed.setSensor(cereal::FrameData::ImageSensor::OX03C10); - } + framed.setSensor(c->ci->image_sensor); } kj::Array get_raw_frame_image(const CameraBuf *b) { @@ -282,7 +266,6 @@ float set_exposure_target(const CameraBuf *b, int x_start, int x_end, int x_skip } } - // Find mean lumimance value unsigned int lum_cur = 0; for (lum_med = 255; lum_med >= 0; lum_med--) { diff --git a/system/camerad/cameras/camera_common.h b/system/camerad/cameras/camera_common.h index 3e56f5690d..f98691ef00 100644 --- a/system/camerad/cameras/camera_common.h +++ b/system/camerad/cameras/camera_common.h @@ -1,32 +1,14 @@ #pragma once -#include -#include +#include #include #include #include "cereal/messaging/messaging.h" -#include "cereal/visionipc/visionbuf.h" -#include "cereal/visionipc/visionipc.h" #include "cereal/visionipc/visionipc_server.h" -#include "common/mat.h" #include "common/queue.h" -#include "common/swaglog.h" -#include "system/hardware/hw.h" -#define CAMERA_ID_IMX298 0 -#define CAMERA_ID_IMX179 1 -#define CAMERA_ID_S5K3P8SP 2 -#define CAMERA_ID_OV8865 3 -#define CAMERA_ID_IMX298_FLIPPED 4 -#define CAMERA_ID_OV10640 5 -#define CAMERA_ID_LGC920 6 -#define CAMERA_ID_LGC615 7 -#define CAMERA_ID_AR0231 8 -#define CAMERA_ID_OX03C10 9 -#define CAMERA_ID_MAX 10 - -const int YUV_BUFFER_COUNT = 40; +const int YUV_BUFFER_COUNT = 20; enum CameraType { RoadCam = 0, @@ -42,20 +24,12 @@ const bool env_debug_frames = getenv("DEBUG_FRAMES") != NULL; const bool env_log_raw_frames = getenv("LOG_RAW_FRAMES") != NULL; const bool env_ctrl_exp_from_params = getenv("CTRL_EXP_FROM_PARAMS") != NULL; -typedef struct CameraInfo { - uint32_t frame_width, frame_height; - uint32_t frame_stride; - uint32_t frame_offset = 0; - uint32_t extra_height = 0; - int registers_offset = -1; - int stats_offset = -1; -} CameraInfo; - typedef struct FrameMetadata { uint32_t frame_id; + uint32_t request_id; // Timestamps - uint64_t timestamp_sof; // only set on tici + uint64_t timestamp_sof; uint64_t timestamp_eof; // Exposure @@ -76,7 +50,7 @@ class CameraBuf { private: VisionIpcServer *vipc_server; Debayer *debayer = nullptr; - VisionStreamType yuv_type; + VisionStreamType stream_type; int cur_buf_idx; SafeQueue safe_queue; int frame_buf_count; @@ -88,11 +62,11 @@ public: VisionBuf *cur_camera_buf; std::unique_ptr camera_bufs; std::unique_ptr camera_bufs_metadata; - int rgb_width, rgb_height, rgb_stride; + int rgb_width, rgb_height; CameraBuf() = default; ~CameraBuf(); - void init(cl_device_id device_id, cl_context context, CameraState *s, VisionIpcServer * v, int frame_cnt, VisionStreamType yuv_type); + void init(cl_device_id device_id, cl_context context, CameraState *s, VisionIpcServer * v, int frame_cnt, VisionStreamType type); bool acquire(); void queue(size_t buf_idx); }; diff --git a/system/camerad/cameras/camera_qcom2.cc b/system/camerad/cameras/camera_qcom2.cc index 3a9ecb467b..e17203a7dd 100644 --- a/system/camerad/cameras/camera_qcom2.cc +++ b/system/camerad/cameras/camera_qcom2.cc @@ -1,17 +1,12 @@ #include "system/camerad/cameras/camera_qcom2.h" -#include #include #include -#include -#include #include -#include #include #include #include -#include #include #include #include @@ -19,105 +14,18 @@ #include "media/cam_defs.h" #include "media/cam_isp.h" #include "media/cam_isp_ife.h" -#include "media/cam_sensor.h" +#include "media/cam_req_mgr.h" #include "media/cam_sensor_cmn_header.h" #include "media/cam_sync.h" #include "common/swaglog.h" -#include "system/camerad/cameras/sensor2_i2c.h" + +const int MIPI_SETTLE_CNT = 33; // Calculated by camera_freqs.py // For debugging: // echo "4294967295" > /sys/module/cam_debug_util/parameters/debug_mdl extern ExitHandler do_exit; -const size_t FRAME_WIDTH = 1928; -const size_t FRAME_HEIGHT = 1208; -const size_t FRAME_STRIDE = 2896; // for 12 bit output. 1928 * 12 / 8 + 4 (alignment) - -const size_t AR0231_REGISTERS_HEIGHT = 2; -// TODO: this extra height is universal and doesn't apply per camera -const size_t AR0231_STATS_HEIGHT = 2+8; - -const int MIPI_SETTLE_CNT = 33; // Calculated by camera_freqs.py - -CameraInfo cameras_supported[CAMERA_ID_MAX] = { - [CAMERA_ID_AR0231] = { - .frame_width = FRAME_WIDTH, - .frame_height = FRAME_HEIGHT, - .frame_stride = FRAME_STRIDE, - .extra_height = AR0231_REGISTERS_HEIGHT + AR0231_STATS_HEIGHT, - - .registers_offset = 0, - .frame_offset = AR0231_REGISTERS_HEIGHT, - .stats_offset = AR0231_REGISTERS_HEIGHT + FRAME_HEIGHT, - }, - [CAMERA_ID_OX03C10] = { - .frame_width = FRAME_WIDTH, - .frame_height = FRAME_HEIGHT, - .frame_stride = FRAME_STRIDE, // (0xa80*12//8) - .extra_height = 16, // top 2 + bot 14 - .frame_offset = 2, - }, -}; - -const float DC_GAIN_AR0231 = 2.5; -const float DC_GAIN_OX03C10 = 7.32; - -const float DC_GAIN_ON_GREY_AR0231 = 0.2; -const float DC_GAIN_OFF_GREY_AR0231 = 0.3; -const float DC_GAIN_ON_GREY_OX03C10 = 0.9; -const float DC_GAIN_OFF_GREY_OX03C10 = 1.0; - -const int DC_GAIN_MIN_WEIGHT_AR0231 = 0; -const int DC_GAIN_MAX_WEIGHT_AR0231 = 1; -const int DC_GAIN_MIN_WEIGHT_OX03C10 = 1; // always on is fine -const int DC_GAIN_MAX_WEIGHT_OX03C10 = 1; - -const float TARGET_GREY_FACTOR_AR0231 = 1.0; -const float TARGET_GREY_FACTOR_OX03C10 = 0.01; - -const float sensor_analog_gains_AR0231[] = { - 1.0/8.0, 2.0/8.0, 2.0/7.0, 3.0/7.0, // 0, 1, 2, 3 - 3.0/6.0, 4.0/6.0, 4.0/5.0, 5.0/5.0, // 4, 5, 6, 7 - 5.0/4.0, 6.0/4.0, 6.0/3.0, 7.0/3.0, // 8, 9, 10, 11 - 7.0/2.0, 8.0/2.0, 8.0/1.0}; // 12, 13, 14, 15 = bypass - -const float sensor_analog_gains_OX03C10[] = { - 1.0, 1.0625, 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, 1.6875, - 1.8125, 1.9375, 2.0, 2.125, 2.25, 2.375, 2.5, 2.625, 2.75, 2.875, 3.0, - 3.125, 3.375, 3.625, 3.875, 4.0, 4.25, 4.5, 4.75, 5.0, 5.25, 5.5, - 5.75, 6.0, 6.25, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0, - 10.5, 11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5}; - -const uint32_t ox03c10_analog_gains_reg[] = { - 0x100, 0x110, 0x120, 0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1B0, - 0x1D0, 0x1F0, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0, 0x300, - 0x320, 0x360, 0x3A0, 0x3E0, 0x400, 0x440, 0x480, 0x4C0, 0x500, 0x540, 0x580, - 0x5C0, 0x600, 0x640, 0x680, 0x700, 0x780, 0x800, 0x880, 0x900, 0x980, 0xA00, - 0xA80, 0xB00, 0xB80, 0xC00, 0xC80, 0xD00, 0xD80, 0xE00, 0xE80, 0xF00, 0xF80}; - -const int ANALOG_GAIN_MIN_IDX_AR0231 = 0x1; // 0.25x -const int ANALOG_GAIN_REC_IDX_AR0231 = 0x6; // 0.8x -const int ANALOG_GAIN_MAX_IDX_AR0231 = 0xD; // 4.0x -const int ANALOG_GAIN_COST_DELTA_AR0231 = 0; -const float ANALOG_GAIN_COST_LOW_AR0231 = 0.1; -const float ANALOG_GAIN_COST_HIGH_AR0231 = 5.0; - -const int ANALOG_GAIN_MIN_IDX_OX03C10 = 0x0; -const int ANALOG_GAIN_REC_IDX_OX03C10 = 0x0; // 1x -const int ANALOG_GAIN_MAX_IDX_OX03C10 = 0x36; -const int ANALOG_GAIN_COST_DELTA_OX03C10 = -1; -const float ANALOG_GAIN_COST_LOW_OX03C10 = 0.4; -const float ANALOG_GAIN_COST_HIGH_OX03C10 = 6.4; - -const int EXPOSURE_TIME_MIN_AR0231 = 2; // with HDR, fastest ss -const int EXPOSURE_TIME_MAX_AR0231 = 0x0855; // with HDR, slowest ss, 40ms - -const int EXPOSURE_TIME_MIN_OX03C10 = 2; // 1x -const int EXPOSURE_TIME_MAX_OX03C10 = 2016; -const uint32_t VS_TIME_MIN_OX03C10 = 1; -const uint32_t VS_TIME_MAX_OX03C10 = 34; // vs < 35 - int CameraState::clear_req_queue() { struct cam_req_mgr_flush_info req_mgr_flush_request = {0}; req_mgr_flush_request.session_hdl = session_handle; @@ -134,13 +42,7 @@ int CameraState::clear_req_queue() { void CameraState::sensors_start() { if (!enabled) return; LOGD("starting sensor %d", camera_num); - if (camera_id == CAMERA_ID_AR0231) { - sensors_i2c(start_reg_array_ar0231, std::size(start_reg_array_ar0231), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, true); - } else if (camera_id == CAMERA_ID_OX03C10) { - sensors_i2c(start_reg_array_ox03c10, std::size(start_reg_array_ox03c10), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, false); - } else { - assert(false); - } + sensors_i2c(ci->start_reg_array.data(), ci->start_reg_array.size(), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, ci->data_word); } void CameraState::sensors_poke(int request_id) { @@ -161,7 +63,7 @@ void CameraState::sensors_poke(int request_id) { } } -void CameraState::sensors_i2c(struct i2c_random_wr_payload* dat, int len, int op_code, bool data_word) { +void CameraState::sensors_i2c(const struct i2c_random_wr_payload* dat, int len, int op_code, bool data_word) { // LOGD("sensors_i2c: %d", len); uint32_t cam_packet_handle = 0; int size = sizeof(struct cam_packet)+sizeof(struct cam_cmd_buf_desc)*1; @@ -215,21 +117,7 @@ int CameraState::sensors_init() { auto probe = (struct cam_cmd_probe *)(i2c_info.get() + 1); probe->camera_id = camera_num; - switch (camera_num) { - case 0: - // port 0 - i2c_info->slave_addr = (camera_id == CAMERA_ID_AR0231) ? 0x20 : 0x6C; // 6C = 0x36*2 - break; - case 1: - // port 1 - i2c_info->slave_addr = (camera_id == CAMERA_ID_AR0231) ? 0x30 : 0x20; - break; - case 2: - // port 2 - i2c_info->slave_addr = (camera_id == CAMERA_ID_AR0231) ? 0x20 : 0x6C; - break; - } - + i2c_info->slave_addr = ci->getSlaveAddress(camera_num); // 0(I2C_STANDARD_MODE) = 100khz, 1(I2C_FAST_MODE) = 400khz //i2c_info->i2c_freq_mode = I2C_STANDARD_MODE; i2c_info->i2c_freq_mode = I2C_FAST_MODE; @@ -239,22 +127,14 @@ int CameraState::sensors_init() { probe->addr_type = CAMERA_SENSOR_I2C_TYPE_WORD; probe->op_code = 3; // don't care? probe->cmd_type = CAMERA_SENSOR_CMD_TYPE_PROBE; - if (camera_id == CAMERA_ID_AR0231) { - probe->reg_addr = 0x3000; - probe->expected_data = 0x354; - } else if (camera_id == CAMERA_ID_OX03C10) { - probe->reg_addr = 0x300a; - probe->expected_data = 0x5803; - } else { - assert(false); - } + probe->reg_addr = ci->probe_reg_addr; + probe->expected_data = ci->probe_expected_data; probe->data_mask = 0; //buf_desc[1].size = buf_desc[1].length = 148; buf_desc[1].size = buf_desc[1].length = 196; buf_desc[1].type = CAM_CMD_BUF_I2C; auto power_settings = mm.alloc(buf_desc[1].size, (uint32_t*)&buf_desc[1].mem_handle); - memset(power_settings.get(), 0, buf_desc[1].size); // power on struct cam_cmd_power *power = power_settings.get(); @@ -270,7 +150,7 @@ int CameraState::sensors_init() { power->count = 1; power->cmd_type = CAMERA_SENSOR_CMD_TYPE_PWR_UP; power->power_settings[0].power_seq_type = 0; - power->power_settings[0].config_val_low = (camera_id == CAMERA_ID_AR0231) ? 19200000 : 24000000; //Hz + power->power_settings[0].config_val_low = ci->mclk_frequency; power = power_set_wait(power, 1); // reset high @@ -423,10 +303,10 @@ void CameraState::config_isp(int io_mem_handle, int fence, int request_id, int b if (io_mem_handle != 0) { io_cfg[0].mem_handle[0] = io_mem_handle; io_cfg[0].planes[0] = (struct cam_plane_cfg){ - .width = ci.frame_width, - .height = ci.frame_height + ci.extra_height, - .plane_stride = ci.frame_stride, - .slice_height = ci.frame_height + ci.extra_height, + .width = ci->frame_width, + .height = ci->frame_height + ci->extra_height, + .plane_stride = ci->frame_stride, + .slice_height = ci->frame_height + ci->extra_height, .meta_stride = 0x0, // YUV has meta(stride=0x400, size=0x5000) .meta_size = 0x0, .meta_offset = 0x0, @@ -436,10 +316,10 @@ void CameraState::config_isp(int io_mem_handle, int fence, int request_id, int b .h_init = 0x0, .v_init = 0x0, }; - io_cfg[0].format = CAM_FORMAT_MIPI_RAW_12; // CAM_FORMAT_UBWC_TP10 for YUV + io_cfg[0].format = ci->mipi_format; // CAM_FORMAT_UBWC_TP10 for YUV io_cfg[0].color_space = CAM_COLOR_SPACE_BASE; // CAM_COLOR_SPACE_BT601_FULL for YUV io_cfg[0].color_pattern = 0x5; // 0x0 for YUV - io_cfg[0].bpp = 0xc; + io_cfg[0].bpp = (ci->mipi_format == CAM_FORMAT_MIPI_RAW_10 ? 0xa : 0xc); // bits per pixel io_cfg[0].resource_type = CAM_ISP_IFE_OUT_RES_RDI_0; // CAM_ISP_IFE_OUT_RES_FULL for YUV io_cfg[0].fence = fence; io_cfg[0].direction = CAM_BUF_OUTPUT; @@ -516,57 +396,14 @@ void CameraState::enqueue_req_multi(int start, int n, bool dp) { // ******************* camera ******************* -void CameraState::camera_set_parameters() { - if (camera_id == CAMERA_ID_AR0231) { - dc_gain_factor = DC_GAIN_AR0231; - dc_gain_min_weight = DC_GAIN_MIN_WEIGHT_AR0231; - dc_gain_max_weight = DC_GAIN_MAX_WEIGHT_AR0231; - dc_gain_on_grey = DC_GAIN_ON_GREY_AR0231; - dc_gain_off_grey = DC_GAIN_OFF_GREY_AR0231; - exposure_time_min = EXPOSURE_TIME_MIN_AR0231; - exposure_time_max = EXPOSURE_TIME_MAX_AR0231; - analog_gain_min_idx = ANALOG_GAIN_MIN_IDX_AR0231; - analog_gain_rec_idx = ANALOG_GAIN_REC_IDX_AR0231; - analog_gain_max_idx = ANALOG_GAIN_MAX_IDX_AR0231; - analog_gain_cost_delta = ANALOG_GAIN_COST_DELTA_AR0231; - analog_gain_cost_low = ANALOG_GAIN_COST_LOW_AR0231; - analog_gain_cost_high = ANALOG_GAIN_COST_HIGH_AR0231; - for (int i=0; i<=analog_gain_max_idx; i++) { - sensor_analog_gains[i] = sensor_analog_gains_AR0231[i]; - } - min_ev = exposure_time_min * sensor_analog_gains[analog_gain_min_idx]; - target_grey_factor = TARGET_GREY_FACTOR_AR0231; - } else if (camera_id == CAMERA_ID_OX03C10) { - dc_gain_factor = DC_GAIN_OX03C10; - dc_gain_min_weight = DC_GAIN_MIN_WEIGHT_OX03C10; - dc_gain_max_weight = DC_GAIN_MAX_WEIGHT_OX03C10; - dc_gain_on_grey = DC_GAIN_ON_GREY_OX03C10; - dc_gain_off_grey = DC_GAIN_OFF_GREY_OX03C10; - exposure_time_min = EXPOSURE_TIME_MIN_OX03C10; - exposure_time_max = EXPOSURE_TIME_MAX_OX03C10; - analog_gain_min_idx = ANALOG_GAIN_MIN_IDX_OX03C10; - analog_gain_rec_idx = ANALOG_GAIN_REC_IDX_OX03C10; - analog_gain_max_idx = ANALOG_GAIN_MAX_IDX_OX03C10; - analog_gain_cost_delta = ANALOG_GAIN_COST_DELTA_OX03C10; - analog_gain_cost_low = ANALOG_GAIN_COST_LOW_OX03C10; - analog_gain_cost_high = ANALOG_GAIN_COST_HIGH_OX03C10; - for (int i=0; i<=analog_gain_max_idx; i++) { - sensor_analog_gains[i] = sensor_analog_gains_OX03C10[i]; - } - min_ev = (exposure_time_min + VS_TIME_MIN_OX03C10) * sensor_analog_gains[analog_gain_min_idx]; - target_grey_factor = TARGET_GREY_FACTOR_OX03C10; - } else { - assert(false); - } - - max_ev = exposure_time_max * dc_gain_factor * sensor_analog_gains[analog_gain_max_idx]; +void CameraState::sensor_set_parameters() { target_grey_fraction = 0.3; dc_gain_enabled = false; - dc_gain_weight = dc_gain_min_weight; - gain_idx = analog_gain_rec_idx; + dc_gain_weight = ci->dc_gain_min_weight; + gain_idx = ci->analog_gain_rec_idx; exposure_time = 5; - cur_ev[0] = cur_ev[1] = cur_ev[2] = (1 + dc_gain_weight * (dc_gain_factor-1) / dc_gain_max_weight) * sensor_analog_gains[gain_idx] * exposure_time; + cur_ev[0] = cur_ev[1] = cur_ev[2] = (1 + dc_gain_weight * (ci->dc_gain_factor-1) / ci->dc_gain_max_weight) * ci->sensor_analog_gains[gain_idx] * exposure_time; } void CameraState::camera_map_bufs(MultiCameraState *s) { @@ -584,20 +421,13 @@ void CameraState::camera_map_bufs(MultiCameraState *s) { enqueue_req_multi(1, FRAME_BUF_COUNT, 0); } -void CameraState::camera_init(MultiCameraState *s, VisionIpcServer * v, int camera_id_, unsigned int fps, cl_device_id device_id, cl_context ctx, VisionStreamType yuv_type) { +void CameraState::camera_init(MultiCameraState *s, VisionIpcServer * v, cl_device_id device_id, cl_context ctx, VisionStreamType yuv_type) { if (!enabled) return; - camera_id = camera_id_; LOGD("camera init %d", camera_num); - assert(camera_id < std::size(cameras_supported)); - ci = cameras_supported[camera_id]; - assert(ci.frame_width != 0); - request_id_last = 0; skipped = true; - camera_set_parameters(); - buf.init(device_id, ctx, this, v, FRAME_BUF_COUNT, yuv_type); camera_map_bufs(s); } @@ -616,22 +446,26 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num // init memorymanager for this camera mm.init(multi_cam_state->video0_fd); - // probe the sensor LOGD("-- Probing sensor %d", camera_num); - camera_id = CAMERA_ID_AR0231; - ret = sensors_init(); - if (ret != 0) { - // TODO: use build flag instead? - LOGD("AR0231 init failed, trying OX03C10"); - camera_id = CAMERA_ID_OX03C10; - ret = sensors_init(); - } - LOGD("-- Probing sensor %d done with %d", camera_num, ret); - if (ret != 0) { + + auto init_sensor_lambda = [this](SensorInfo *sensor) { + ci.reset(sensor); + int ret = sensors_init(); + if (ret == 0) { + sensor_set_parameters(); + } + return ret == 0; + }; + + // Try different sensors one by one until it success. + if (!init_sensor_lambda(new AR0231) && + !init_sensor_lambda(new OX03C10) && + !init_sensor_lambda(new OS04C10)) { LOGE("** sensor %d FAILED bringup, disabling", camera_num); enabled = false; return; } + LOGD("-- Probing sensor %d success", camera_num); // create session struct cam_req_mgr_session_info session_info = {}; @@ -647,69 +481,58 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num LOGD("acquire sensor dev"); LOG("-- Configuring sensor"); - uint32_t dt; - if (camera_id == CAMERA_ID_AR0231) { - sensors_i2c(init_array_ar0231, std::size(init_array_ar0231), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, true); - dt = 0x12; // Changing stats to 0x2C doesn't work, so change pixels to 0x12 instead - } else if (camera_id == CAMERA_ID_OX03C10) { - sensors_i2c(init_array_ox03c10, std::size(init_array_ox03c10), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, false); - // one is 0x2a, two are 0x2b - dt = 0x2c; - } else { - assert(false); - } - printf("dt is %x\n", dt); + sensors_i2c(ci->init_reg_array.data(), ci->init_reg_array.size(), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, ci->data_word); // NOTE: to be able to disable road and wide road, we still have to configure the sensor over i2c // If you don't do this, the strobe GPIO is an output (even in reset it seems!) if (!enabled) return; struct cam_isp_in_port_info in_port_info = { - .res_type = (uint32_t[]){CAM_ISP_IFE_IN_RES_PHY_0, CAM_ISP_IFE_IN_RES_PHY_1, CAM_ISP_IFE_IN_RES_PHY_2}[camera_num], + .res_type = (uint32_t[]){CAM_ISP_IFE_IN_RES_PHY_0, CAM_ISP_IFE_IN_RES_PHY_1, CAM_ISP_IFE_IN_RES_PHY_2}[camera_num], - .lane_type = CAM_ISP_LANE_TYPE_DPHY, - .lane_num = 4, - .lane_cfg = 0x3210, + .lane_type = CAM_ISP_LANE_TYPE_DPHY, + .lane_num = 4, + .lane_cfg = 0x3210, - .vc = 0x0, - .dt = dt, - .format = CAM_FORMAT_MIPI_RAW_12, + .vc = 0x0, + .dt = ci->frame_data_type, + .format = ci->mipi_format, - .test_pattern = 0x2, // 0x3? - .usage_type = 0x0, + .test_pattern = 0x2, // 0x3? + .usage_type = 0x0, - .left_start = 0, - .left_stop = ci.frame_width - 1, - .left_width = ci.frame_width, + .left_start = 0, + .left_stop = ci->frame_width - 1, + .left_width = ci->frame_width, - .right_start = 0, - .right_stop = ci.frame_width - 1, - .right_width = ci.frame_width, + .right_start = 0, + .right_stop = ci->frame_width - 1, + .right_width = ci->frame_width, - .line_start = 0, - .line_stop = ci.frame_height + ci.extra_height - 1, - .height = ci.frame_height + ci.extra_height, + .line_start = 0, + .line_stop = ci->frame_height + ci->extra_height - 1, + .height = ci->frame_height + ci->extra_height, - .pixel_clk = 0x0, - .batch_size = 0x0, - .dsp_mode = CAM_ISP_DSP_MODE_NONE, - .hbi_cnt = 0x0, - .custom_csid = 0x0, + .pixel_clk = 0x0, + .batch_size = 0x0, + .dsp_mode = CAM_ISP_DSP_MODE_NONE, + .hbi_cnt = 0x0, + .custom_csid = 0x0, - .num_out_res = 0x1, - .data[0] = (struct cam_isp_out_port_info){ - .res_type = CAM_ISP_IFE_OUT_RES_RDI_0, - .format = CAM_FORMAT_MIPI_RAW_12, - .width = ci.frame_width, - .height = ci.frame_height + ci.extra_height, - .comp_grp_id = 0x0, .split_point = 0x0, .secure_mode = 0x0, - }, + .num_out_res = 0x1, + .data[0] = (struct cam_isp_out_port_info){ + .res_type = CAM_ISP_IFE_OUT_RES_RDI_0, + .format = ci->mipi_format, + .width = ci->frame_width, + .height = ci->frame_height + ci->extra_height, + .comp_grp_id = 0x0, .split_point = 0x0, .secure_mode = 0x0, + }, }; struct cam_isp_resource isp_resource = { - .resource_id = CAM_ISP_RES_ID_PORT, - .handle_type = CAM_HANDLE_USER_POINTER, - .res_hdl = (uint64_t)&in_port_info, - .length = sizeof(in_port_info), + .resource_id = CAM_ISP_RES_ID_PORT, + .handle_type = CAM_HANDLE_USER_POINTER, + .res_hdl = (uint64_t)&in_port_info, + .length = sizeof(in_port_info), }; auto isp_dev_handle_ = device_acquire(multi_cam_state->isp_fd, session_handle, &isp_resource); @@ -790,9 +613,9 @@ void CameraState::camera_open(MultiCameraState *multi_cam_state_, int camera_num } void cameras_init(VisionIpcServer *v, MultiCameraState *s, cl_device_id device_id, cl_context ctx) { - s->driver_cam.camera_init(s, v, s->driver_cam.camera_id, 20, device_id, ctx, VISION_STREAM_DRIVER); - s->road_cam.camera_init(s, v, s->road_cam.camera_id, 20, device_id, ctx, VISION_STREAM_ROAD); - s->wide_road_cam.camera_init(s, v, s->wide_road_cam.camera_id, 20, device_id, ctx, VISION_STREAM_WIDE_ROAD); + s->driver_cam.camera_init(s, v, device_id, ctx, VISION_STREAM_DRIVER); + s->road_cam.camera_init(s, v, device_id, ctx, VISION_STREAM_ROAD); + s->wide_road_cam.camera_init(s, v, device_id, ctx, VISION_STREAM_WIDE_ROAD); s->pm = new PubMaster({"roadCameraState", "driverCameraState", "wideRoadCameraState", "thumbnail"}); } @@ -907,70 +730,6 @@ void cameras_close(MultiCameraState *s) { delete s->pm; } -std::map> CameraState::ar0231_build_register_lut(uint8_t *data) { - // This function builds a lookup table from register address, to a pair of indices in the - // buffer where to read this address. The buffer contains padding bytes, - // as well as markers to indicate the type of the next byte. - // - // 0xAA is used to indicate the MSB of the address, 0xA5 for the LSB of the address. - // Every byte of data (MSB and LSB) is preceded by 0x5A. Specifying an address is optional - // for contiguous ranges. See page 27-29 of the AR0231 Developer guide for more information. - - int max_i[] = {1828 / 2 * 3, 1500 / 2 * 3}; - auto get_next_idx = [](int cur_idx) { - return (cur_idx % 3 == 1) ? cur_idx + 2 : cur_idx + 1; // Every third byte is padding - }; - - std::map> registers; - for (int register_row = 0; register_row < 2; register_row++) { - uint8_t *registers_raw = data + ci.frame_stride * register_row; - assert(registers_raw[0] == 0x0a); // Start of line - - int value_tag_count = 0; - int first_val_idx = 0; - uint16_t cur_addr = 0; - - for (int i = 1; i <= max_i[register_row]; i = get_next_idx(get_next_idx(i))) { - int val_idx = get_next_idx(i); - - uint8_t tag = registers_raw[i]; - uint16_t val = registers_raw[val_idx]; - - if (tag == 0xAA) { // Register MSB tag - cur_addr = val << 8; - } else if (tag == 0xA5) { // Register LSB tag - cur_addr |= val; - cur_addr -= 2; // Next value tag will increment address again - } else if (tag == 0x5A) { // Value tag - - // First tag - if (value_tag_count % 2 == 0) { - cur_addr += 2; - first_val_idx = val_idx; - } else { - registers[cur_addr] = std::make_pair(first_val_idx + ci.frame_stride * register_row, val_idx + ci.frame_stride * register_row); - } - - value_tag_count++; - } - } - } - return registers; -} - -std::map CameraState::ar0231_parse_registers(uint8_t *data, std::initializer_list addrs) { - if (ar0231_register_lut.empty()) { - ar0231_register_lut = ar0231_build_register_lut(data); - } - - std::map registers; - for (uint16_t addr : addrs) { - auto offset = ar0231_register_lut[addr]; - registers[addr] = ((uint16_t)data[offset.first] << 8) | data[offset.second]; - } - return registers; -} - void CameraState::handle_camera_event(void *evdat) { if (!enabled) return; struct cam_req_mgr_message *event_data = (struct cam_req_mgr_message *)evdat; @@ -1007,9 +766,10 @@ void CameraState::handle_camera_event(void *evdat) { auto &meta_data = buf.camera_bufs_metadata[buf_idx]; meta_data.frame_id = main_id - idx_offset; + meta_data.request_id = real_id; meta_data.timestamp_sof = timestamp; exp_lock.lock(); - meta_data.gain = analog_gain_frac * (1 + dc_gain_weight * (dc_gain_factor-1) / dc_gain_max_weight); + meta_data.gain = analog_gain_frac * (1 + dc_gain_weight * (ci->dc_gain_factor-1) / ci->dc_gain_max_weight); meta_data.high_conversion_gain = dc_gain_enabled; meta_data.integ_lines = exposure_time; meta_data.measured_grey_fraction = measured_grey_fraction; @@ -1030,22 +790,7 @@ void CameraState::handle_camera_event(void *evdat) { } void CameraState::update_exposure_score(float desired_ev, int exp_t, int exp_g_idx, float exp_gain) { - float score = 1e6; - if (camera_id == CAMERA_ID_AR0231) { - // Cost of ev diff - score = std::abs(desired_ev - (exp_t * exp_gain)) * 10; - // Cost of absolute gain - float m = exp_g_idx > analog_gain_rec_idx ? analog_gain_cost_high : analog_gain_cost_low; - score += std::abs(exp_g_idx - (int)analog_gain_rec_idx) * m; - // Cost of changing gain - score += std::abs(exp_g_idx - gain_idx) * (score + 1.0) / 10.0; - } else if (camera_id == CAMERA_ID_OX03C10) { - score = std::abs(desired_ev - (exp_t * exp_gain)); - float m = exp_g_idx > analog_gain_rec_idx ? analog_gain_cost_high : analog_gain_cost_low; - score += std::abs(exp_g_idx - (int)analog_gain_rec_idx) * m; - score += ((1 - analog_gain_cost_delta) + analog_gain_cost_delta * (exp_g_idx - analog_gain_min_idx) / (analog_gain_max_idx - analog_gain_min_idx)) * std::abs(exp_g_idx - gain_idx) * 5.0; - } - + float score = ci->getExposureScore(desired_ev, exp_t, exp_g_idx, exp_gain, gain_idx); if (score < best_ev_score) { new_exp_t = exp_t; new_exp_g = exp_g_idx; @@ -1071,10 +816,10 @@ void CameraState::set_camera_exposure(float grey_frac) { const float cur_ev_ = cur_ev[buf.cur_frame_data.frame_id % 3]; // Scale target grey between 0.1 and 0.4 depending on lighting conditions - float new_target_grey = std::clamp(0.4 - 0.3 * log2(1.0 + target_grey_factor*cur_ev_) / log2(6000.0), 0.1, 0.4); + float new_target_grey = std::clamp(0.4 - 0.3 * log2(1.0 + ci->target_grey_factor*cur_ev_) / log2(6000.0), 0.1, 0.4); float target_grey = (1.0 - k_grey) * target_grey_fraction + k_grey * new_target_grey; - float desired_ev = std::clamp(cur_ev_ * target_grey / grey_frac, min_ev, max_ev); + float desired_ev = std::clamp(cur_ev_ * target_grey / grey_frac, ci->min_ev, ci->max_ev); float k = (1.0 - k_ev) / 3.0; desired_ev = (k * cur_ev[0]) + (k * cur_ev[1]) + (k * cur_ev[2]) + (k_ev * desired_ev); @@ -1085,21 +830,21 @@ void CameraState::set_camera_exposure(float grey_frac) { // Hysteresis around high conversion gain // We usually want this on since it results in lower noise, but turn off in very bright day scenes bool enable_dc_gain = dc_gain_enabled; - if (!enable_dc_gain && target_grey < dc_gain_on_grey) { + if (!enable_dc_gain && target_grey < ci->dc_gain_on_grey) { enable_dc_gain = true; - dc_gain_weight = dc_gain_min_weight; - } else if (enable_dc_gain && target_grey > dc_gain_off_grey) { + dc_gain_weight = ci->dc_gain_min_weight; + } else if (enable_dc_gain && target_grey > ci->dc_gain_off_grey) { enable_dc_gain = false; - dc_gain_weight = dc_gain_max_weight; + dc_gain_weight = ci->dc_gain_max_weight; } - if (enable_dc_gain && dc_gain_weight < dc_gain_max_weight) {dc_gain_weight += 1;} - if (!enable_dc_gain && dc_gain_weight > dc_gain_min_weight) {dc_gain_weight -= 1;} + if (enable_dc_gain && dc_gain_weight < ci->dc_gain_max_weight) {dc_gain_weight += 1;} + if (!enable_dc_gain && dc_gain_weight > ci->dc_gain_min_weight) {dc_gain_weight -= 1;} std::string gain_bytes, time_bytes; if (env_ctrl_exp_from_params) { - gain_bytes = Params().get("CameraDebugExpGain"); - time_bytes = Params().get("CameraDebugExpTime"); + gain_bytes = params.get("CameraDebugExpGain"); + time_bytes = params.get("CameraDebugExpTime"); } if (gain_bytes.size() > 0 && time_bytes.size() > 0) { @@ -1113,14 +858,14 @@ void CameraState::set_camera_exposure(float grey_frac) { } else { // Simple brute force optimizer to choose sensor parameters // to reach desired EV - for (int g = std::max((int)analog_gain_min_idx, gain_idx - 1); g <= std::min((int)analog_gain_max_idx, gain_idx + 1); g++) { - float gain = sensor_analog_gains[g] * (1 + dc_gain_weight * (dc_gain_factor-1) / dc_gain_max_weight); + for (int g = std::max((int)ci->analog_gain_min_idx, gain_idx - 1); g <= std::min((int)ci->analog_gain_max_idx, gain_idx + 1); g++) { + float gain = ci->sensor_analog_gains[g] * (1 + dc_gain_weight * (ci->dc_gain_factor-1) / ci->dc_gain_max_weight); // Compute optimal time for given gain - int t = std::clamp(int(std::round(desired_ev / gain)), exposure_time_min, exposure_time_max); + int t = std::clamp(int(std::round(desired_ev / gain)), ci->exposure_time_min, ci->exposure_time_max); // Only go below recommended gain when absolutely necessary to not overexpose - if (g < analog_gain_rec_idx && t > 20 && g < gain_idx) { + if (g < ci->analog_gain_rec_idx && t > 20 && g < gain_idx) { continue; } @@ -1133,12 +878,12 @@ void CameraState::set_camera_exposure(float grey_frac) { measured_grey_fraction = grey_frac; target_grey_fraction = target_grey; - analog_gain_frac = sensor_analog_gains[new_exp_g]; + analog_gain_frac = ci->sensor_analog_gains[new_exp_g]; gain_idx = new_exp_g; exposure_time = new_exp_t; dc_gain_enabled = enable_dc_gain; - float gain = analog_gain_frac * (1 + dc_gain_weight * (dc_gain_factor-1) / dc_gain_max_weight); + float gain = analog_gain_frac * (1 + dc_gain_weight * (ci->dc_gain_factor-1) / ci->dc_gain_max_weight); cur_ev[buf.cur_frame_data.frame_id % 3] = exposure_time * gain; exp_lock.unlock(); @@ -1151,59 +896,8 @@ void CameraState::set_camera_exposure(float grey_frac) { } // LOGE("ae - camera %d, cur_t %.5f, sof %.5f, dt %.5f", camera_num, 1e-9 * nanos_since_boot(), 1e-9 * buf.cur_frame_data.timestamp_sof, 1e-9 * (nanos_since_boot() - buf.cur_frame_data.timestamp_sof)); - if (camera_id == CAMERA_ID_AR0231) { - uint16_t analog_gain_reg = 0xFF00 | (new_exp_g << 4) | new_exp_g; - struct i2c_random_wr_payload exp_reg_array[] = { - {0x3366, analog_gain_reg}, - {0x3362, (uint16_t)(dc_gain_enabled ? 0x1 : 0x0)}, - {0x3012, (uint16_t)exposure_time}, - }; - sensors_i2c(exp_reg_array, sizeof(exp_reg_array)/sizeof(struct i2c_random_wr_payload), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, true); - } else if (camera_id == CAMERA_ID_OX03C10) { - // t_HCG&t_LCG + t_VS on LPD, t_SPD on SPD - uint32_t hcg_time = exposure_time; - uint32_t lcg_time = hcg_time; - uint32_t spd_time = std::min(std::max((uint32_t)exposure_time, (exposure_time_max + VS_TIME_MAX_OX03C10) / 3), exposure_time_max + VS_TIME_MAX_OX03C10); - uint32_t vs_time = std::min(std::max((uint32_t)exposure_time / 40, VS_TIME_MIN_OX03C10), VS_TIME_MAX_OX03C10); - - uint32_t real_gain = ox03c10_analog_gains_reg[new_exp_g]; - - struct i2c_random_wr_payload exp_reg_array[] = { - {0x3501, hcg_time>>8}, {0x3502, hcg_time&0xFF}, - {0x3581, lcg_time>>8}, {0x3582, lcg_time&0xFF}, - {0x3541, spd_time>>8}, {0x3542, spd_time&0xFF}, - {0x35c2, vs_time&0xFF}, - - {0x3508, real_gain>>8}, {0x3509, real_gain&0xFF}, - }; - sensors_i2c(exp_reg_array, sizeof(exp_reg_array)/sizeof(struct i2c_random_wr_payload), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, false); - } -} - -static float ar0231_parse_temp_sensor(uint16_t calib1, uint16_t calib2, uint16_t data_reg) { - // See AR0231 Developer Guide - page 36 - float slope = (125.0 - 55.0) / ((float)calib1 - (float)calib2); - float t0 = 55.0 - slope * (float)calib2; - return t0 + slope * (float)data_reg; -} - -static void ar0231_process_registers(MultiCameraState *s, CameraState *c, cereal::FrameData::Builder &framed){ - const uint8_t expected_preamble[] = {0x0a, 0xaa, 0x55, 0x20, 0xa5, 0x55}; - uint8_t *data = (uint8_t*)c->buf.cur_camera_buf->addr + c->ci.registers_offset; - - if (memcmp(data, expected_preamble, std::size(expected_preamble)) != 0){ - LOGE("unexpected register data found"); - return; - } - - auto registers = c->ar0231_parse_registers(data, {0x2000, 0x2002, 0x20b0, 0x20b2, 0x30c6, 0x30c8, 0x30ca, 0x30cc}); - - uint32_t frame_id = ((uint32_t)registers[0x2000] << 16) | registers[0x2002]; - framed.setFrameIdSensor(frame_id); - - float temp_0 = ar0231_parse_temp_sensor(registers[0x30c6], registers[0x30c8], registers[0x20b0]); - float temp_1 = ar0231_parse_temp_sensor(registers[0x30ca], registers[0x30cc], registers[0x20b2]); - framed.setTemperaturesC({temp_0, temp_1}); + auto exp_reg_array = ci->getExposureRegisters(exposure_time, new_exp_g, dc_gain_enabled); + sensors_i2c(exp_reg_array.data(), exp_reg_array.size(), CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG, ci->data_word); } static void process_driver_camera(MultiCameraState *s, CameraState *c, int cnt) { @@ -1214,9 +908,7 @@ static void process_driver_camera(MultiCameraState *s, CameraState *c, int cnt) framed.setFrameType(cereal::FrameData::FrameType::FRONT); fill_frame_data(framed, c->buf.cur_frame_data, c); - if (c->camera_id == CAMERA_ID_AR0231) { - ar0231_process_registers(s, c, framed); - } + c->ci->processRegisters(c, framed); s->pm->send("driverCameraState", msg); } @@ -1231,10 +923,7 @@ void process_road_camera(MultiCameraState *s, CameraState *c, int cnt) { } LOGT(c->buf.cur_frame_data.frame_id, "%s: Image set", c == &s->road_cam ? "RoadCamera" : "WideRoadCamera"); - if (c->camera_id == CAMERA_ID_AR0231) { - ar0231_process_registers(s, c, framed); - } - + c->ci->processRegisters(c, framed); s->pm->send(c == &s->road_cam ? "roadCameraState" : "wideRoadCameraState", msg); const auto [x, y, w, h] = (c == &s->wide_road_cam) ? std::tuple(96, 250, 1734, 524) : std::tuple(96, 160, 1734, 986); @@ -1282,6 +971,9 @@ void cameras_run(MultiCameraState *s) { event_data->u.frame_msg.frame_id, event_data->u.frame_msg.request_id, event_data->u.frame_msg.timestamp/1e6, event_data->u.frame_msg.sof_status); } + // for debugging + //do_exit = do_exit || event_data->u.frame_msg.frame_id > (30*20); + if (event_data->session_hdl == s->road_cam.session_handle) { s->road_cam.handle_camera_event(event_data); } else if (event_data->session_hdl == s->wide_road_cam.session_handle) { @@ -1292,6 +984,8 @@ void cameras_run(MultiCameraState *s) { LOGE("Unknown vidioc event source"); assert(false); } + } else { + LOGE("unhandled event %d\n", ev.type); } } else { LOGE("VIDIOC_DQEVENT failed, errno=%d", errno); diff --git a/system/camerad/cameras/camera_qcom2.h b/system/camerad/cameras/camera_qcom2.h index 9e0109ab20..47ca578b99 100644 --- a/system/camerad/cameras/camera_qcom2.h +++ b/system/camerad/cameras/camera_qcom2.h @@ -1,23 +1,20 @@ #pragma once -#include -#include +#include #include -#include - #include "system/camerad/cameras/camera_common.h" #include "system/camerad/cameras/camera_util.h" +#include "system/camerad/sensors/sensor.h" #include "common/params.h" #include "common/util.h" #define FRAME_BUF_COUNT 4 -#define ANALOG_GAIN_MAX_CNT 55 class CameraState { public: MultiCameraState *multi_cam_state; - CameraInfo ci; + std::unique_ptr ci; bool enabled; std::mutex exp_lock; @@ -28,32 +25,13 @@ public: int gain_idx; float analog_gain_frac; - int exposure_time_min; - int exposure_time_max; - - float dc_gain_factor; - int dc_gain_min_weight; - int dc_gain_max_weight; - float dc_gain_on_grey; - float dc_gain_off_grey; - - float sensor_analog_gains[ANALOG_GAIN_MAX_CNT]; - int analog_gain_min_idx; - int analog_gain_max_idx; - int analog_gain_rec_idx; - int analog_gain_cost_delta; - float analog_gain_cost_low; - float analog_gain_cost_high; - float cur_ev[3]; - float min_ev, max_ev; float best_ev_score; int new_exp_g; int new_exp_t; float measured_grey_fraction; float target_grey_fraction; - float target_grey_factor; unique_fd sensor_fd; unique_fd csiphy_fd; @@ -67,13 +45,11 @@ public: void sensors_start(); void camera_open(MultiCameraState *multi_cam_state, int camera_num, bool enabled); - void camera_set_parameters(); + void sensor_set_parameters(); void camera_map_bufs(MultiCameraState *s); - void camera_init(MultiCameraState *s, VisionIpcServer *v, int camera_id, unsigned int fps, cl_device_id device_id, cl_context ctx, VisionStreamType yuv_type); + void camera_init(MultiCameraState *s, VisionIpcServer *v, cl_device_id device_id, cl_context ctx, VisionStreamType yuv_type); void camera_close(); - std::map ar0231_parse_registers(uint8_t *data, std::initializer_list addrs); - int32_t session_handle; int32_t sensor_dev_handle; int32_t isp_dev_handle; @@ -89,12 +65,10 @@ public: int frame_id_last; int idx_offset; bool skipped; - int camera_id; CameraBuf buf; MemoryManager mm; -private: void config_isp(int io_mem_handle, int fence, int request_id, int buf0_mem_handle, int buf0_offset); void enqueue_req_multi(int start, int n, bool dp); void enqueue_buffer(int i, bool dp); @@ -102,11 +76,11 @@ private: int sensors_init(); void sensors_poke(int request_id); - void sensors_i2c(struct i2c_random_wr_payload* dat, int len, int op_code, bool data_word); + void sensors_i2c(const struct i2c_random_wr_payload* dat, int len, int op_code, bool data_word); - // Register parsing - std::map> ar0231_register_lut; - std::map> ar0231_build_register_lut(uint8_t *data); +private: + // for debugging + Params params; }; typedef struct MultiCameraState { diff --git a/system/camerad/cameras/camera_util.cc b/system/camerad/cameras/camera_util.cc index 74c81a878a..4fe38997ce 100644 --- a/system/camerad/cameras/camera_util.cc +++ b/system/camerad/cameras/camera_util.cc @@ -1,5 +1,7 @@ #include "system/camerad/cameras/camera_util.h" +#include + #include #include @@ -30,10 +32,10 @@ int do_cam_control(int fd, int op_code, void *handle, int size) { std::optional device_acquire(int fd, int32_t session_handle, void *data, uint32_t num_resources) { struct cam_acquire_dev_cmd cmd = { - .session_handle = session_handle, - .handle_type = CAM_HANDLE_USER_POINTER, - .num_resources = (uint32_t)(data ? num_resources : 0), - .resource_hdl = (uint64_t)data, + .session_handle = session_handle, + .handle_type = CAM_HANDLE_USER_POINTER, + .num_resources = (uint32_t)(data ? num_resources : 0), + .resource_hdl = (uint64_t)data, }; int err = do_cam_control(fd, CAM_ACQUIRE_DEV, &cmd, sizeof(cmd)); return err == 0 ? std::make_optional(cmd.dev_handle) : std::nullopt; @@ -41,9 +43,9 @@ std::optional device_acquire(int fd, int32_t session_handle, void *data int device_config(int fd, int32_t session_handle, int32_t dev_handle, uint64_t packet_handle) { struct cam_config_dev_cmd cmd = { - .session_handle = session_handle, - .dev_handle = dev_handle, - .packet_handle = packet_handle, + .session_handle = session_handle, + .dev_handle = dev_handle, + .packet_handle = packet_handle, }; return do_cam_control(fd, CAM_CONFIG_DEV, &cmd, sizeof(cmd)); } @@ -111,6 +113,7 @@ void *MemoryManager::alloc_buf(int size, uint32_t *handle) { size_lookup[ptr] = size; } lock.unlock(); + memset(ptr, 0, size); return ptr; } diff --git a/system/camerad/cameras/camera_util.h b/system/camerad/cameras/camera_util.h index b36f404c0f..891ce3e793 100644 --- a/system/camerad/cameras/camera_util.h +++ b/system/camerad/cameras/camera_util.h @@ -1,6 +1,6 @@ #pragma once - #include +#include #include #include #include diff --git a/system/camerad/imgproc/conv.cl b/system/camerad/imgproc/conv.cl deleted file mode 100644 index a7115ae76c..0000000000 --- a/system/camerad/imgproc/conv.cl +++ /dev/null @@ -1,110 +0,0 @@ -// const __constant float3 rgb_weights = (0.299, 0.587, 0.114); // opencv rgb2gray weights -// const __constant float3 bgr_weights = (0.114, 0.587, 0.299); // bgr2gray weights - -// convert input rgb image to single channel then conv -__kernel void rgb2gray_conv2d( - const __global uchar * input, - __global short * output, - __constant short * filter, - __local uchar3 * cached -) -{ - const int rowOffset = get_global_id(1) * IMAGE_W; - const int my = get_global_id(0) + rowOffset; - - const int localRowLen = TWICE_HALF_FILTER_SIZE + get_local_size(0); - const int localRowOffset = ( get_local_id(1) + HALF_FILTER_SIZE ) * localRowLen; - const int myLocal = localRowOffset + get_local_id(0) + HALF_FILTER_SIZE; - - // cache local pixels - cached[ myLocal ].x = input[ my * 3 ]; // r - cached[ myLocal ].y = input[ my * 3 + 1]; // g - cached[ myLocal ].z = input[ my * 3 + 2]; // b - - // pad - if ( - get_global_id(0) < HALF_FILTER_SIZE || - get_global_id(0) > IMAGE_W - HALF_FILTER_SIZE - 1 || - get_global_id(1) < HALF_FILTER_SIZE || - get_global_id(1) > IMAGE_H - HALF_FILTER_SIZE - 1 - ) - { - barrier(CLK_LOCAL_MEM_FENCE); - return; - } - else - { - int localColOffset = -1; - int globalColOffset = -1; - - // cache extra - if ( get_local_id(0) < HALF_FILTER_SIZE ) - { - localColOffset = get_local_id(0); - globalColOffset = -HALF_FILTER_SIZE; - - cached[ localRowOffset + get_local_id(0) ].x = input[ my * 3 - HALF_FILTER_SIZE * 3 ]; - cached[ localRowOffset + get_local_id(0) ].y = input[ my * 3 - HALF_FILTER_SIZE * 3 + 1]; - cached[ localRowOffset + get_local_id(0) ].z = input[ my * 3 - HALF_FILTER_SIZE * 3 + 2]; - } - else if ( get_local_id(0) >= get_local_size(0) - HALF_FILTER_SIZE ) - { - localColOffset = get_local_id(0) + TWICE_HALF_FILTER_SIZE; - globalColOffset = HALF_FILTER_SIZE; - - cached[ myLocal + HALF_FILTER_SIZE ].x = input[ my * 3 + HALF_FILTER_SIZE * 3 ]; - cached[ myLocal + HALF_FILTER_SIZE ].y = input[ my * 3 + HALF_FILTER_SIZE * 3 + 1]; - cached[ myLocal + HALF_FILTER_SIZE ].z = input[ my * 3 + HALF_FILTER_SIZE * 3 + 2]; - } - - - if ( get_local_id(1) < HALF_FILTER_SIZE ) - { - cached[ get_local_id(1) * localRowLen + get_local_id(0) + HALF_FILTER_SIZE ].x = input[ my * 3 - HALF_FILTER_SIZE_IMAGE_W * 3 ]; - cached[ get_local_id(1) * localRowLen + get_local_id(0) + HALF_FILTER_SIZE ].y = input[ my * 3 - HALF_FILTER_SIZE_IMAGE_W * 3 + 1]; - cached[ get_local_id(1) * localRowLen + get_local_id(0) + HALF_FILTER_SIZE ].z = input[ my * 3 - HALF_FILTER_SIZE_IMAGE_W * 3 + 2]; - if (localColOffset > 0) - { - cached[ get_local_id(1) * localRowLen + localColOffset ].x = input[ my * 3 - HALF_FILTER_SIZE_IMAGE_W * 3 + globalColOffset * 3]; - cached[ get_local_id(1) * localRowLen + localColOffset ].y = input[ my * 3 - HALF_FILTER_SIZE_IMAGE_W * 3 + globalColOffset * 3 + 1]; - cached[ get_local_id(1) * localRowLen + localColOffset ].z = input[ my * 3 - HALF_FILTER_SIZE_IMAGE_W * 3 + globalColOffset * 3 + 2]; - } - } - else if ( get_local_id(1) >= get_local_size(1) -HALF_FILTER_SIZE ) - { - int offset = ( get_local_id(1) + TWICE_HALF_FILTER_SIZE ) * localRowLen; - cached[ offset + get_local_id(0) + HALF_FILTER_SIZE ].x = input[ my * 3 + HALF_FILTER_SIZE_IMAGE_W * 3 ]; - cached[ offset + get_local_id(0) + HALF_FILTER_SIZE ].y = input[ my * 3 + HALF_FILTER_SIZE_IMAGE_W * 3 + 1]; - cached[ offset + get_local_id(0) + HALF_FILTER_SIZE ].z = input[ my * 3 + HALF_FILTER_SIZE_IMAGE_W * 3 + 2]; - if (localColOffset > 0) - { - cached[ offset + localColOffset ].x = input[ my * 3 + HALF_FILTER_SIZE_IMAGE_W * 3 + globalColOffset * 3]; - cached[ offset + localColOffset ].y = input[ my * 3 + HALF_FILTER_SIZE_IMAGE_W * 3 + globalColOffset * 3 + 1]; - cached[ offset + localColOffset ].z = input[ my * 3 + HALF_FILTER_SIZE_IMAGE_W * 3 + globalColOffset * 3 + 2]; - } - } - - // sync - barrier(CLK_LOCAL_MEM_FENCE); - - // perform convolution - int fIndex = 0; - short sum = 0; - - for (int r = -HALF_FILTER_SIZE; r <= HALF_FILTER_SIZE; r++) - { - int curRow = r * localRowLen; - for (int c = -HALF_FILTER_SIZE; c <= HALF_FILTER_SIZE; c++, fIndex++) - { - if (!FLIP_RB){ - // sum += dot(rgb_weights, cached[ myLocal + curRow + c ]) * filter[ fIndex ]; - sum += (cached[ myLocal + curRow + c ].x / 3 + cached[ myLocal + curRow + c ].y / 2 + cached[ myLocal + curRow + c ].z / 9) * filter[ fIndex ]; - } else { - // sum += dot(bgr_weights, cached[ myLocal + curRow + c ]) * filter[ fIndex ]; - sum += (cached[ myLocal + curRow + c ].x / 9 + cached[ myLocal + curRow + c ].y / 2 + cached[ myLocal + curRow + c ].z / 3) * filter[ fIndex ]; - } - } - } - output[my] = sum; - } -} \ No newline at end of file diff --git a/system/camerad/imgproc/pool.cl b/system/camerad/imgproc/pool.cl deleted file mode 100644 index d674b5f363..0000000000 --- a/system/camerad/imgproc/pool.cl +++ /dev/null @@ -1,34 +0,0 @@ -// calculate variance in each subregion -__kernel void var_pool( - const __global char * input, - __global ushort * output // should not be larger than 128*128 so uint16 -) -{ - const int xidx = get_global_id(0) + ROI_X_MIN; - const int yidx = get_global_id(1) + ROI_Y_MIN; - - const int size = X_PITCH * Y_PITCH; - - float fsum = 0; - char mean, max; - - for (int i = 0; i < size; i++) { - int x_offset = i % X_PITCH; - int y_offset = i / X_PITCH; - fsum += input[xidx*X_PITCH + yidx*Y_PITCH*FULL_STRIDE_X + x_offset + y_offset*FULL_STRIDE_X]; - max = input[xidx*X_PITCH + yidx*Y_PITCH*FULL_STRIDE_X + x_offset + y_offset*FULL_STRIDE_X]>max ? input[xidx*X_PITCH + yidx*Y_PITCH*FULL_STRIDE_X + x_offset + y_offset*FULL_STRIDE_X]:max; - } - - mean = convert_char_rte(fsum / size); - - float fvar = 0; - for (int i = 0; i < size; i++) { - int x_offset = i % X_PITCH; - int y_offset = i / X_PITCH; - fvar += (input[xidx*X_PITCH + yidx*Y_PITCH*FULL_STRIDE_X + x_offset + y_offset*FULL_STRIDE_X] - mean) * (input[xidx*X_PITCH + yidx*Y_PITCH*FULL_STRIDE_X + x_offset + y_offset*FULL_STRIDE_X] - mean); - } - - fvar = fvar / size; - - output[(xidx-ROI_X_MIN)+(yidx-ROI_Y_MIN)*(ROI_X_MAX-ROI_X_MIN+1)] = convert_ushort_rte(5 * fvar + convert_float_rte(max)); -} \ No newline at end of file diff --git a/system/camerad/imgproc/utils.cc b/system/camerad/imgproc/utils.cc deleted file mode 100644 index a7bbeb9e86..0000000000 --- a/system/camerad/imgproc/utils.cc +++ /dev/null @@ -1,106 +0,0 @@ -#include "system/camerad/imgproc/utils.h" - -#include -#include -#include -#include -#include - -const int16_t lapl_conv_krnl[9] = {0, 1, 0, - 1, -4, 1, - 0, 1, 0}; - -// calculate score based on laplacians in one area -uint16_t get_lapmap_one(const int16_t *lap, int x_pitch, int y_pitch) { - const int size = x_pitch * y_pitch; - // avg and max of roi - int16_t max = 0; - int sum = 0; - for (int i = 0; i < size; ++i) { - const int16_t v = lap[i]; - sum += v; - if (v > max) max = v; - } - - const int16_t mean = sum / size; - - // var of roi - int var = 0; - for (int i = 0; i < size; ++i) { - var += std::pow(lap[i] - mean, 2); - } - - const float fvar = (float)var / size; - return std::min(5 * fvar + max, (float)65535); -} - -bool is_blur(const uint16_t *lapmap, const size_t size) { - float bad_sum = 0; - for (int i = 0; i < size; i++) { - if (lapmap[i] < LM_THRESH) { - bad_sum += 1 / (float)size; - } - } - return (bad_sum > LM_PREC_THRESH); -} - -static cl_program build_conv_program(cl_device_id device_id, cl_context context, int image_w, int image_h, int filter_size) { - char args[4096]; - snprintf(args, sizeof(args), - "-cl-fast-relaxed-math -cl-denorms-are-zero " - "-DIMAGE_W=%d -DIMAGE_H=%d -DFLIP_RB=%d " - "-DFILTER_SIZE=%d -DHALF_FILTER_SIZE=%d -DTWICE_HALF_FILTER_SIZE=%d -DHALF_FILTER_SIZE_IMAGE_W=%d", - image_w, image_h, 1, - filter_size, filter_size/2, (filter_size/2)*2, (filter_size/2)*image_w); - return cl_program_from_file(context, device_id, "imgproc/conv.cl", args); -} - -LapConv::LapConv(cl_device_id device_id, cl_context ctx, int rgb_width, int rgb_height, int rgb_stride, int filter_size) - : width(rgb_width / NUM_SEGMENTS_X), height(rgb_height / NUM_SEGMENTS_Y), rgb_stride(rgb_stride), - roi_buf(width * height * 3), result_buf(width * height) { - - prg = build_conv_program(device_id, ctx, width, height, filter_size); - krnl = CL_CHECK_ERR(clCreateKernel(prg, "rgb2gray_conv2d", &err)); - // TODO: Removed CL_MEM_SVM_FINE_GRAIN_BUFFER, confirm it doesn't matter - roi_cl = CL_CHECK_ERR(clCreateBuffer(ctx, CL_MEM_READ_WRITE, roi_buf.size() * sizeof(roi_buf[0]), NULL, &err)); - result_cl = CL_CHECK_ERR(clCreateBuffer(ctx, CL_MEM_READ_WRITE, result_buf.size() * sizeof(result_buf[0]), NULL, &err)); - filter_cl = CL_CHECK_ERR(clCreateBuffer(ctx, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, - 9 * sizeof(int16_t), (void *)&lapl_conv_krnl, &err)); -} - -LapConv::~LapConv() { - CL_CHECK(clReleaseMemObject(roi_cl)); - CL_CHECK(clReleaseMemObject(result_cl)); - CL_CHECK(clReleaseMemObject(filter_cl)); - CL_CHECK(clReleaseKernel(krnl)); - CL_CHECK(clReleaseProgram(prg)); -} - -uint16_t LapConv::Update(cl_command_queue q, const uint8_t *rgb_buf, const int roi_id) { - // sharpness scores - const int x_offset = ROI_X_MIN + roi_id % (ROI_X_MAX - ROI_X_MIN + 1); - const int y_offset = ROI_Y_MIN + roi_id / (ROI_X_MAX - ROI_X_MIN + 1); - - const uint8_t *rgb_offset = rgb_buf + y_offset * height * rgb_stride + x_offset * width * 3; - for (int i = 0; i < height; ++i) { - memcpy(&roi_buf[i * width * 3], &rgb_offset[i * rgb_stride], width * 3); - } - - constexpr int local_mem_size = (CONV_LOCAL_WORKSIZE + 2 * (3 / 2)) * (CONV_LOCAL_WORKSIZE + 2 * (3 / 2)) * (3 * sizeof(uint8_t)); - const size_t global_work_size[] = {(size_t)width, (size_t)height}; - const size_t local_work_size[] = {CONV_LOCAL_WORKSIZE, CONV_LOCAL_WORKSIZE}; - - CL_CHECK(clEnqueueWriteBuffer(q, roi_cl, CL_TRUE, 0, roi_buf.size() * sizeof(roi_buf[0]), roi_buf.data(), 0, 0, 0)); - CL_CHECK(clSetKernelArg(krnl, 0, sizeof(cl_mem), (void *)&roi_cl)); - CL_CHECK(clSetKernelArg(krnl, 1, sizeof(cl_mem), (void *)&result_cl)); - CL_CHECK(clSetKernelArg(krnl, 2, sizeof(cl_mem), (void *)&filter_cl)); - CL_CHECK(clSetKernelArg(krnl, 3, local_mem_size, 0)); - cl_event conv_event; - CL_CHECK(clEnqueueNDRangeKernel(q, krnl, 2, NULL, global_work_size, local_work_size, 0, 0, &conv_event)); - CL_CHECK(clWaitForEvents(1, &conv_event)); - CL_CHECK(clReleaseEvent(conv_event)); - CL_CHECK(clEnqueueReadBuffer(q, result_cl, CL_TRUE, 0, - result_buf.size() * sizeof(result_buf[0]), result_buf.data(), 0, 0, 0)); - - return get_lapmap_one(result_buf.data(), width, height); -} diff --git a/system/camerad/imgproc/utils.h b/system/camerad/imgproc/utils.h deleted file mode 100644 index 94323b15c5..0000000000 --- a/system/camerad/imgproc/utils.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "common/clutil.h" - -#define NUM_SEGMENTS_X 8 -#define NUM_SEGMENTS_Y 6 - -#define ROI_X_MIN 1 -#define ROI_X_MAX 6 -#define ROI_Y_MIN 2 -#define ROI_Y_MAX 3 - -#define LM_THRESH 120 -#define LM_PREC_THRESH 0.9 // 90 perc is blur -#define CONV_LOCAL_WORKSIZE 16 - -class LapConv { -public: - LapConv(cl_device_id device_id, cl_context ctx, int rgb_width, int rgb_height, int rgb_stride, int filter_size); - ~LapConv(); - uint16_t Update(cl_command_queue q, const uint8_t *rgb_buf, const int roi_id); - -private: - cl_mem roi_cl, result_cl, filter_cl; - cl_program prg; - cl_kernel krnl; - const int width, height; - const int rgb_stride; - std::vector roi_buf; - std::vector result_buf; -}; - -bool is_blur(const uint16_t *lapmap, const size_t size); diff --git a/system/camerad/main.cc b/system/camerad/main.cc index 35a3329f30..19de21c9bb 100644 --- a/system/camerad/main.cc +++ b/system/camerad/main.cc @@ -8,7 +8,7 @@ int main(int argc, char *argv[]) { if (Hardware::PC()) { - printf("camerad is not meant to run on PC\n"); + printf("exiting, camerad is not meant to run on PC\n"); return 0; } diff --git a/system/camerad/sensors/ar0231.cc b/system/camerad/sensors/ar0231.cc new file mode 100644 index 0000000000..1ca4b3f1ad --- /dev/null +++ b/system/camerad/sensors/ar0231.cc @@ -0,0 +1,171 @@ +#include + +#include "common/swaglog.h" +#include "system/camerad/cameras/camera_common.h" +#include "system/camerad/cameras/camera_qcom2.h" +#include "system/camerad/sensors/sensor.h" + +namespace { + +const size_t AR0231_REGISTERS_HEIGHT = 2; +// TODO: this extra height is universal and doesn't apply per camera +const size_t AR0231_STATS_HEIGHT = 2 + 8; + +const float sensor_analog_gains_AR0231[] = { + 1.0 / 8.0, 2.0 / 8.0, 2.0 / 7.0, 3.0 / 7.0, // 0, 1, 2, 3 + 3.0 / 6.0, 4.0 / 6.0, 4.0 / 5.0, 5.0 / 5.0, // 4, 5, 6, 7 + 5.0 / 4.0, 6.0 / 4.0, 6.0 / 3.0, 7.0 / 3.0, // 8, 9, 10, 11 + 7.0 / 2.0, 8.0 / 2.0, 8.0 / 1.0}; // 12, 13, 14, 15 = bypass + +std::map> ar0231_build_register_lut(CameraState *c, uint8_t *data) { + // This function builds a lookup table from register address, to a pair of indices in the + // buffer where to read this address. The buffer contains padding bytes, + // as well as markers to indicate the type of the next byte. + // + // 0xAA is used to indicate the MSB of the address, 0xA5 for the LSB of the address. + // Every byte of data (MSB and LSB) is preceded by 0x5A. Specifying an address is optional + // for contiguous ranges. See page 27-29 of the AR0231 Developer guide for more information. + + int max_i[] = {1828 / 2 * 3, 1500 / 2 * 3}; + auto get_next_idx = [](int cur_idx) { + return (cur_idx % 3 == 1) ? cur_idx + 2 : cur_idx + 1; // Every third byte is padding + }; + + std::map> registers; + for (int register_row = 0; register_row < 2; register_row++) { + uint8_t *registers_raw = data + c->ci->frame_stride * register_row; + assert(registers_raw[0] == 0x0a); // Start of line + + int value_tag_count = 0; + int first_val_idx = 0; + uint16_t cur_addr = 0; + + for (int i = 1; i <= max_i[register_row]; i = get_next_idx(get_next_idx(i))) { + int val_idx = get_next_idx(i); + + uint8_t tag = registers_raw[i]; + uint16_t val = registers_raw[val_idx]; + + if (tag == 0xAA) { // Register MSB tag + cur_addr = val << 8; + } else if (tag == 0xA5) { // Register LSB tag + cur_addr |= val; + cur_addr -= 2; // Next value tag will increment address again + } else if (tag == 0x5A) { // Value tag + + // First tag + if (value_tag_count % 2 == 0) { + cur_addr += 2; + first_val_idx = val_idx; + } else { + registers[cur_addr] = std::make_pair(first_val_idx + c->ci->frame_stride * register_row, val_idx + c->ci->frame_stride * register_row); + } + + value_tag_count++; + } + } + } + return registers; +} + +float ar0231_parse_temp_sensor(uint16_t calib1, uint16_t calib2, uint16_t data_reg) { + // See AR0231 Developer Guide - page 36 + float slope = (125.0 - 55.0) / ((float)calib1 - (float)calib2); + float t0 = 55.0 - slope * (float)calib2; + return t0 + slope * (float)data_reg; +} + +} // namespace + +AR0231::AR0231() { + image_sensor = cereal::FrameData::ImageSensor::AR0231; + data_word = true; + frame_width = FRAME_WIDTH; + frame_height = FRAME_HEIGHT; + frame_stride = FRAME_STRIDE; + extra_height = AR0231_REGISTERS_HEIGHT + AR0231_STATS_HEIGHT; + + registers_offset = 0; + frame_offset = AR0231_REGISTERS_HEIGHT; + stats_offset = AR0231_REGISTERS_HEIGHT + FRAME_HEIGHT; + + start_reg_array.assign(std::begin(start_reg_array_ar0231), std::end(start_reg_array_ar0231)); + init_reg_array.assign(std::begin(init_array_ar0231), std::end(init_array_ar0231)); + probe_reg_addr = 0x3000; + probe_expected_data = 0x354; + mipi_format = CAM_FORMAT_MIPI_RAW_12; + frame_data_type = 0x12; // Changing stats to 0x2C doesn't work, so change pixels to 0x12 instead + mclk_frequency = 19200000; //Hz + + dc_gain_factor = 2.5; + dc_gain_min_weight = 0; + dc_gain_max_weight = 1; + dc_gain_on_grey = 0.2; + dc_gain_off_grey = 0.3; + exposure_time_min = 2; // with HDR, fastest ss + exposure_time_max = 0x0855; // with HDR, slowest ss, 40ms + analog_gain_min_idx = 0x1; // 0.25x + analog_gain_rec_idx = 0x6; // 0.8x + analog_gain_max_idx = 0xD; // 4.0x + analog_gain_cost_delta = 0; + analog_gain_cost_low = 0.1; + analog_gain_cost_high = 5.0; + for (int i = 0; i <= analog_gain_max_idx; i++) { + sensor_analog_gains[i] = sensor_analog_gains_AR0231[i]; + } + min_ev = exposure_time_min * sensor_analog_gains[analog_gain_min_idx]; + max_ev = exposure_time_max * dc_gain_factor * sensor_analog_gains[analog_gain_max_idx]; + target_grey_factor = 1.0; +} + +void AR0231::processRegisters(CameraState *c, cereal::FrameData::Builder &framed) const { + const uint8_t expected_preamble[] = {0x0a, 0xaa, 0x55, 0x20, 0xa5, 0x55}; + uint8_t *data = (uint8_t *)c->buf.cur_camera_buf->addr + c->ci->registers_offset; + + if (memcmp(data, expected_preamble, std::size(expected_preamble)) != 0) { + LOGE("unexpected register data found"); + return; + } + + if (ar0231_register_lut.empty()) { + ar0231_register_lut = ar0231_build_register_lut(c, data); + } + std::map registers; + for (uint16_t addr : {0x2000, 0x2002, 0x20b0, 0x20b2, 0x30c6, 0x30c8, 0x30ca, 0x30cc}) { + auto offset = ar0231_register_lut[addr]; + registers[addr] = ((uint16_t)data[offset.first] << 8) | data[offset.second]; + } + + uint32_t frame_id = ((uint32_t)registers[0x2000] << 16) | registers[0x2002]; + framed.setFrameIdSensor(frame_id); + + float temp_0 = ar0231_parse_temp_sensor(registers[0x30c6], registers[0x30c8], registers[0x20b0]); + float temp_1 = ar0231_parse_temp_sensor(registers[0x30ca], registers[0x30cc], registers[0x20b2]); + framed.setTemperaturesC({temp_0, temp_1}); +} + + +std::vector AR0231::getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const { + uint16_t analog_gain_reg = 0xFF00 | (new_exp_g << 4) | new_exp_g; + return { + {0x3366, analog_gain_reg}, + {0x3362, (uint16_t)(dc_gain_enabled ? 0x1 : 0x0)}, + {0x3012, (uint16_t)exposure_time}, + }; +} + +int AR0231::getSlaveAddress(int port) const { + assert(port >= 0 && port <= 2); + return (int[]){0x20, 0x30, 0x20}[port]; +} + +float AR0231::getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const { + // Cost of ev diff + float score = std::abs(desired_ev - (exp_t * exp_gain)) * 10; + // Cost of absolute gain + float m = exp_g_idx > analog_gain_rec_idx ? analog_gain_cost_high : analog_gain_cost_low; + score += std::abs(exp_g_idx - (int)analog_gain_rec_idx) * m; + // Cost of changing gain + score += std::abs(exp_g_idx - gain_idx) * (score + 1.0) / 10.0; + return score; +} diff --git a/system/camerad/sensors/ar0231_registers.h b/system/camerad/sensors/ar0231_registers.h new file mode 100644 index 0000000000..6c4c251e8e --- /dev/null +++ b/system/camerad/sensors/ar0231_registers.h @@ -0,0 +1,119 @@ +#pragma once + +const struct i2c_random_wr_payload start_reg_array_ar0231[] = {{0x301A, 0x91C}}; +const struct i2c_random_wr_payload stop_reg_array_ar0231[] = {{0x301A, 0x918}}; + +const struct i2c_random_wr_payload init_array_ar0231[] = { + {0x301A, 0x0018}, // RESET_REGISTER + + // CLOCK Settings + // input clock is 19.2 / 2 * 0x37 = 528 MHz + // pixclk is 528 / 6 = 88 MHz + // full roll time is 1000/(PIXCLK/(LINE_LENGTH_PCK*FRAME_LENGTH_LINES)) = 39.99 ms + // img roll time is 1000/(PIXCLK/(LINE_LENGTH_PCK*Y_OUTPUT_CONTROL)) = 22.85 ms + {0x302A, 0x0006}, // VT_PIX_CLK_DIV + {0x302C, 0x0001}, // VT_SYS_CLK_DIV + {0x302E, 0x0002}, // PRE_PLL_CLK_DIV + {0x3030, 0x0037}, // PLL_MULTIPLIER + {0x3036, 0x000C}, // OP_PIX_CLK_DIV + {0x3038, 0x0001}, // OP_SYS_CLK_DIV + + // FORMAT + {0x3040, 0xC000}, // READ_MODE + {0x3004, 0x0000}, // X_ADDR_START_ + {0x3008, 0x0787}, // X_ADDR_END_ + {0x3002, 0x0000}, // Y_ADDR_START_ + {0x3006, 0x04B7}, // Y_ADDR_END_ + {0x3032, 0x0000}, // SCALING_MODE + {0x30A2, 0x0001}, // X_ODD_INC_ + {0x30A6, 0x0001}, // Y_ODD_INC_ + {0x3402, 0x0788}, // X_OUTPUT_CONTROL + {0x3404, 0x04B8}, // Y_OUTPUT_CONTROL + {0x3064, 0x1982}, // SMIA_TEST + {0x30BA, 0x11F2}, // DIGITAL_CTRL + + // Enable external trigger and disable GPIO outputs + {0x30CE, 0x0120}, // SLAVE_SH_SYNC_MODE | FRAME_START_MODE + {0x340A, 0xE0}, // GPIO3_INPUT_DISABLE | GPIO2_INPUT_DISABLE | GPIO1_INPUT_DISABLE + {0x340C, 0x802}, // GPIO_HIDRV_EN | GPIO0_ISEL=2 + + // Readout timing + {0x300C, 0x0672}, // LINE_LENGTH_PCK (valid for 3-exposure HDR) + {0x300A, 0x0855}, // FRAME_LENGTH_LINES + {0x3042, 0x0000}, // EXTRA_DELAY + + // Readout Settings + {0x31AE, 0x0204}, // SERIAL_FORMAT, 4-lane MIPI + {0x31AC, 0x0C0C}, // DATA_FORMAT_BITS, 12 -> 12 + {0x3342, 0x1212}, // MIPI_F1_PDT_EDT + {0x3346, 0x1212}, // MIPI_F2_PDT_EDT + {0x334A, 0x1212}, // MIPI_F3_PDT_EDT + {0x334E, 0x1212}, // MIPI_F4_PDT_EDT + {0x3344, 0x0011}, // MIPI_F1_VDT_VC + {0x3348, 0x0111}, // MIPI_F2_VDT_VC + {0x334C, 0x0211}, // MIPI_F3_VDT_VC + {0x3350, 0x0311}, // MIPI_F4_VDT_VC + {0x31B0, 0x0053}, // FRAME_PREAMBLE + {0x31B2, 0x003B}, // LINE_PREAMBLE + {0x301A, 0x001C}, // RESET_REGISTER + + // Noise Corrections + {0x3092, 0x0C24}, // ROW_NOISE_CONTROL + {0x337A, 0x0C80}, // DBLC_SCALE0 + {0x3370, 0x03B1}, // DBLC + {0x3044, 0x0400}, // DARK_CONTROL + + // Enable temperature sensor + {0x30B4, 0x0007}, // TEMPSENS0_CTRL_REG + {0x30B8, 0x0007}, // TEMPSENS1_CTRL_REG + + // Enable dead pixel correction using + // the 1D line correction scheme + {0x31E0, 0x0003}, + + // HDR Settings + {0x3082, 0x0004}, // OPERATION_MODE_CTRL + {0x3238, 0x0444}, // EXPOSURE_RATIO + + {0x1008, 0x0361}, // FINE_INTEGRATION_TIME_MIN + {0x100C, 0x0589}, // FINE_INTEGRATION_TIME2_MIN + {0x100E, 0x07B1}, // FINE_INTEGRATION_TIME3_MIN + {0x1010, 0x0139}, // FINE_INTEGRATION_TIME4_MIN + + // TODO: do these have to be lower than LINE_LENGTH_PCK? + {0x3014, 0x08CB}, // FINE_INTEGRATION_TIME_ + {0x321E, 0x0894}, // FINE_INTEGRATION_TIME2 + + {0x31D0, 0x0000}, // COMPANDING, no good in 10 bit? + {0x33DA, 0x0000}, // COMPANDING + {0x318E, 0x0200}, // PRE_HDR_GAIN_EN + + // DLO Settings + {0x3100, 0x4000}, // DLO_CONTROL0 + {0x3280, 0x0CCC}, // T1 G1 + {0x3282, 0x0CCC}, // T1 R + {0x3284, 0x0CCC}, // T1 B + {0x3286, 0x0CCC}, // T1 G2 + {0x3288, 0x0FA0}, // T2 G1 + {0x328A, 0x0FA0}, // T2 R + {0x328C, 0x0FA0}, // T2 B + {0x328E, 0x0FA0}, // T2 G2 + + // Initial Gains + {0x3022, 0x0001}, // GROUPED_PARAMETER_HOLD_ + {0x3366, 0xFF77}, // ANALOG_GAIN (1x) + + {0x3060, 0x3333}, // ANALOG_COLOR_GAIN + + {0x3362, 0x0000}, // DC GAIN + + {0x305A, 0x00F8}, // red gain + {0x3058, 0x0122}, // blue gain + {0x3056, 0x009A}, // g1 gain + {0x305C, 0x009A}, // g2 gain + + {0x3022, 0x0000}, // GROUPED_PARAMETER_HOLD_ + + // Initial Integration Time + {0x3012, 0x0005}, +}; diff --git a/system/camerad/sensors/os04c10.cc b/system/camerad/sensors/os04c10.cc new file mode 100644 index 0000000000..449e06be83 --- /dev/null +++ b/system/camerad/sensors/os04c10.cc @@ -0,0 +1,105 @@ +#include "system/camerad/sensors/sensor.h" + +namespace { + +const float sensor_analog_gains_OS04C10[] = { + 1.0, 1.0625, 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, 1.6875, + 1.8125, 1.9375, 2.0, 2.125, 2.25, 2.375, 2.5, 2.625, 2.75, 2.875, 3.0, + 3.125, 3.375, 3.625, 3.875, 4.0, 4.25, 4.5, 4.75, 5.0, 5.25, 5.5, + 5.75, 6.0, 6.25, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0, + 10.5, 11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5}; + +const uint32_t os04c10_analog_gains_reg[] = { + 0x100, 0x110, 0x120, 0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1B0, + 0x1D0, 0x1F0, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0, 0x300, + 0x320, 0x360, 0x3A0, 0x3E0, 0x400, 0x440, 0x480, 0x4C0, 0x500, 0x540, 0x580, + 0x5C0, 0x600, 0x640, 0x680, 0x700, 0x780, 0x800, 0x880, 0x900, 0x980, 0xA00, + 0xA80, 0xB00, 0xB80, 0xC00, 0xC80, 0xD00, 0xD80, 0xE00, 0xE80, 0xF00, 0xF80}; + +const uint32_t VS_TIME_MIN_OS04C10 = 1; +//const uint32_t VS_TIME_MAX_OS04C10 = 34; // vs < 35 + +} // namespace + +OS04C10::OS04C10() { + image_sensor = cereal::FrameData::ImageSensor::OS04C10; + data_word = false; + + frame_width = 1920; + frame_height = 1080; + frame_stride = (1920*10/8); + + /* + frame_width = 0xa80; + frame_height = 0x5f0; + frame_stride = 0xd20; + */ + + extra_height = 0; + frame_offset = 0; + + start_reg_array.assign(std::begin(start_reg_array_os04c10), std::end(start_reg_array_os04c10)); + init_reg_array.assign(std::begin(init_array_os04c10), std::end(init_array_os04c10)); + probe_reg_addr = 0x300a; + probe_expected_data = 0x5304; + mipi_format = CAM_FORMAT_MIPI_RAW_10; + frame_data_type = 0x2b; + mclk_frequency = 24000000; // Hz + + dc_gain_factor = 7.32; + dc_gain_min_weight = 1; // always on is fine + dc_gain_max_weight = 1; + dc_gain_on_grey = 0.9; + dc_gain_off_grey = 1.0; + exposure_time_min = 2; // 1x + exposure_time_max = 2016; + analog_gain_min_idx = 0x0; + analog_gain_rec_idx = 0x0; // 1x + analog_gain_max_idx = 0x36; + analog_gain_cost_delta = -1; + analog_gain_cost_low = 0.4; + analog_gain_cost_high = 6.4; + for (int i = 0; i <= analog_gain_max_idx; i++) { + sensor_analog_gains[i] = sensor_analog_gains_OS04C10[i]; + } + min_ev = (exposure_time_min + VS_TIME_MIN_OS04C10) * sensor_analog_gains[analog_gain_min_idx]; + max_ev = exposure_time_max * dc_gain_factor * sensor_analog_gains[analog_gain_max_idx]; + target_grey_factor = 0.01; +} + +std::vector OS04C10::getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const { + // t_HCG&t_LCG + t_VS on LPD, t_SPD on SPD + uint32_t hcg_time = exposure_time; + //uint32_t lcg_time = hcg_time; + //uint32_t spd_time = std::min(std::max((uint32_t)exposure_time, (exposure_time_max + VS_TIME_MAX_OS04C10) / 3), exposure_time_max + VS_TIME_MAX_OS04C10); + //uint32_t vs_time = std::min(std::max((uint32_t)exposure_time / 40, VS_TIME_MIN_OS04C10), VS_TIME_MAX_OS04C10); + + uint32_t real_gain = os04c10_analog_gains_reg[new_exp_g]; + + hcg_time = 100; + real_gain = 0x320; + + return { + {0x3501, hcg_time>>8}, {0x3502, hcg_time&0xFF}, + //{0x3581, lcg_time>>8}, {0x3582, lcg_time&0xFF}, + //{0x3541, spd_time>>8}, {0x3542, spd_time&0xFF}, + //{0x35c2, vs_time&0xFF}, + + {0x3508, real_gain>>8}, {0x3509, real_gain&0xFF}, + }; +} + +int OS04C10::getSlaveAddress(int port) const { + assert(port >= 0 && port <= 2); + return (int[]){0x6C, 0x20, 0x6C}[port]; +} + +float OS04C10::getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const { + float score = std::abs(desired_ev - (exp_t * exp_gain)); + float m = exp_g_idx > analog_gain_rec_idx ? analog_gain_cost_high : analog_gain_cost_low; + score += std::abs(exp_g_idx - (int)analog_gain_rec_idx) * m; + score += ((1 - analog_gain_cost_delta) + + analog_gain_cost_delta * (exp_g_idx - analog_gain_min_idx) / (analog_gain_max_idx - analog_gain_min_idx)) * + std::abs(exp_g_idx - gain_idx) * 5.0; + return score; +} diff --git a/system/camerad/sensors/os04c10_registers.h b/system/camerad/sensors/os04c10_registers.h new file mode 100644 index 0000000000..ad91a02950 --- /dev/null +++ b/system/camerad/sensors/os04c10_registers.h @@ -0,0 +1,298 @@ +#pragma once + +const struct i2c_random_wr_payload start_reg_array_os04c10[] = {{0x100, 1}}; +const struct i2c_random_wr_payload stop_reg_array_os04c10[] = {{0x100, 0}}; + +const struct i2c_random_wr_payload init_array_os04c10[] = { + // OS04C10_AA_00_02_17_wAO_1920x1080_MIPI728Mbps_Linear12bit_20FPS_4Lane_MCLK24MHz + {0x0103, 0x01}, + {0x0301, 0x84}, + {0x0303, 0x01}, + {0x0305, 0x5b}, + {0x0306, 0x01}, + {0x0307, 0x17}, + {0x0323, 0x04}, + {0x0324, 0x01}, + {0x0325, 0x62}, + {0x3012, 0x06}, + {0x3013, 0x02}, + {0x3016, 0x72}, + {0x3021, 0x03}, + {0x3106, 0x21}, + {0x3107, 0xa1}, + {0x3500, 0x00}, + {0x3501, 0x00}, + {0x3502, 0x40}, + {0x3503, 0x88}, + {0x3508, 0x07}, + {0x3509, 0xc0}, + {0x350a, 0x04}, + {0x350b, 0x00}, + {0x350c, 0x07}, + {0x350d, 0xc0}, + {0x350e, 0x04}, + {0x350f, 0x00}, + {0x3510, 0x00}, + {0x3511, 0x00}, + {0x3512, 0x20}, + {0x3624, 0x00}, + {0x3625, 0x4c}, + {0x3660, 0x00}, + {0x3666, 0xa5}, + {0x3667, 0xa5}, + {0x366a, 0x64}, + {0x3673, 0x0d}, + {0x3672, 0x0d}, + {0x3671, 0x0d}, + {0x3670, 0x0d}, + {0x3685, 0x00}, + {0x3694, 0x0d}, + {0x3693, 0x0d}, + {0x3692, 0x0d}, + {0x3691, 0x0d}, + {0x3696, 0x4c}, + {0x3697, 0x4c}, + {0x3698, 0x40}, + {0x3699, 0x80}, + {0x369a, 0x18}, + {0x369b, 0x1f}, + {0x369c, 0x14}, + {0x369d, 0x80}, + {0x369e, 0x40}, + {0x369f, 0x21}, + {0x36a0, 0x12}, + {0x36a1, 0x5d}, + {0x36a2, 0x66}, + {0x370a, 0x00}, + {0x370e, 0x0c}, + {0x3710, 0x00}, + {0x3713, 0x00}, + {0x3725, 0x02}, + {0x372a, 0x03}, + {0x3738, 0xce}, + {0x3748, 0x00}, + {0x374a, 0x00}, + {0x374c, 0x00}, + {0x374e, 0x00}, + {0x3756, 0x00}, + {0x3757, 0x0e}, + {0x3767, 0x00}, + {0x3771, 0x00}, + {0x377b, 0x20}, + {0x377c, 0x00}, + {0x377d, 0x0c}, + {0x3781, 0x03}, + {0x3782, 0x00}, + {0x3789, 0x14}, + {0x3795, 0x02}, + {0x379c, 0x00}, + {0x379d, 0x00}, + {0x37b8, 0x04}, + {0x37ba, 0x03}, + {0x37bb, 0x00}, + {0x37bc, 0x04}, + {0x37be, 0x08}, + {0x37c4, 0x11}, + {0x37c5, 0x80}, + {0x37c6, 0x14}, + {0x37c7, 0x08}, + {0x37da, 0x11}, + {0x381f, 0x08}, + {0x3829, 0x03}, + {0x3881, 0x00}, + {0x3888, 0x04}, + {0x388b, 0x00}, + {0x3c80, 0x10}, + {0x3c86, 0x00}, + {0x3c8c, 0x20}, + {0x3c9f, 0x01}, + {0x3d85, 0x1b}, + {0x3d8c, 0x71}, + {0x3d8d, 0xe2}, + {0x3f00, 0x0b}, + {0x3f06, 0x04}, + {0x400a, 0x01}, + {0x400b, 0x50}, + {0x400e, 0x08}, + {0x4043, 0x7e}, + {0x4045, 0x7e}, + {0x4047, 0x7e}, + {0x4049, 0x7e}, + {0x4090, 0x14}, + {0x40b0, 0x00}, + {0x40b1, 0x00}, + {0x40b2, 0x00}, + {0x40b3, 0x00}, + {0x40b4, 0x00}, + {0x40b5, 0x00}, + {0x40b7, 0x00}, + {0x40b8, 0x00}, + {0x40b9, 0x00}, + {0x40ba, 0x00}, + {0x4301, 0x00}, + {0x4303, 0x00}, + {0x4502, 0x04}, + {0x4503, 0x00}, + {0x4504, 0x06}, + {0x4506, 0x00}, + {0x4507, 0x64}, + {0x4803, 0x00}, + {0x480c, 0x32}, + {0x480e, 0x00}, + {0x4813, 0x00}, + {0x4819, 0x70}, + {0x481f, 0x30}, + {0x4823, 0x3f}, + {0x4825, 0x30}, + {0x4833, 0x10}, + {0x484b, 0x07}, + {0x488b, 0x00}, + {0x4d00, 0x04}, + {0x4d01, 0xad}, + {0x4d02, 0xbc}, + {0x4d03, 0xa1}, + {0x4d04, 0x1f}, + {0x4d05, 0x4c}, + {0x4d0b, 0x01}, + {0x4e00, 0x2a}, + {0x4e0d, 0x00}, + {0x5001, 0x09}, + {0x5004, 0x00}, + {0x5080, 0x04}, + {0x5036, 0x00}, + {0x5180, 0x70}, + {0x5181, 0x10}, + {0x520a, 0x03}, + {0x520b, 0x06}, + {0x520c, 0x0c}, + {0x580b, 0x0f}, + {0x580d, 0x00}, + {0x580f, 0x00}, + {0x5820, 0x00}, + {0x5821, 0x00}, + {0x301c, 0xf8}, + {0x301e, 0xb4}, + {0x301f, 0xd0}, + {0x3022, 0x01}, + {0x3109, 0xe7}, + {0x3600, 0x00}, + {0x3610, 0x65}, + {0x3611, 0x85}, + {0x3613, 0x3a}, + {0x3615, 0x60}, + {0x3621, 0x90}, + {0x3620, 0x0c}, + {0x3629, 0x00}, + {0x3661, 0x04}, + {0x3664, 0x70}, + {0x3665, 0x00}, + {0x3681, 0xa6}, + {0x3682, 0x53}, + {0x3683, 0x2a}, + {0x3684, 0x15}, + {0x3700, 0x2a}, + {0x3701, 0x12}, + {0x3703, 0x28}, + {0x3704, 0x0e}, + {0x3706, 0x4a}, + {0x3709, 0x4a}, + {0x370b, 0xa2}, + {0x370c, 0x01}, + {0x370f, 0x04}, + {0x3714, 0x24}, + {0x3716, 0x04}, + {0x3719, 0x11}, + {0x371a, 0x1e}, + {0x3720, 0x00}, + {0x3724, 0x13}, + {0x373f, 0xb0}, + {0x3741, 0x4a}, + {0x3743, 0x4a}, + {0x3745, 0x4a}, + {0x3747, 0x4a}, + {0x3749, 0xa2}, + {0x374b, 0xa2}, + {0x374d, 0xa2}, + {0x374f, 0xa2}, + {0x3755, 0x10}, + {0x376c, 0x00}, + {0x378d, 0x30}, + {0x3790, 0x4a}, + {0x3791, 0xa2}, + {0x3798, 0x40}, + {0x379e, 0x00}, + {0x379f, 0x04}, + {0x37a1, 0x10}, + {0x37a2, 0x1e}, + {0x37a8, 0x10}, + {0x37a9, 0x1e}, + {0x37ac, 0xa0}, + {0x37b9, 0x01}, + {0x37bd, 0x01}, + {0x37bf, 0x26}, + {0x37c0, 0x11}, + {0x37c2, 0x04}, + {0x37cd, 0x19}, + {0x37e0, 0x08}, + {0x37e6, 0x04}, + {0x37e5, 0x02}, + {0x37e1, 0x0c}, + {0x3737, 0x04}, + {0x37d8, 0x02}, + {0x37e2, 0x10}, + {0x3739, 0x10}, + {0x3662, 0x10}, + {0x37e4, 0x20}, + {0x37e3, 0x08}, + {0x37d9, 0x08}, + {0x4040, 0x00}, + {0x4041, 0x07}, + {0x4008, 0x02}, + {0x4009, 0x0d}, + {0x3800, 0x01}, + {0x3801, 0x80}, + {0x3802, 0x00}, + {0x3803, 0xdc}, + {0x3804, 0x09}, + {0x3805, 0x0f}, + {0x3806, 0x05}, + {0x3807, 0x23}, + {0x3808, 0x07}, + {0x3809, 0x80}, + {0x380a, 0x04}, + {0x380b, 0x38}, + {0x380c, 0x04}, + {0x380d, 0x2e}, + {0x380e, 0x12}, + {0x380f, 0x70}, + {0x3811, 0x08}, + {0x3813, 0x08}, + {0x3814, 0x01}, + {0x3815, 0x01}, + {0x3816, 0x01}, + {0x3817, 0x01}, + {0x3820, 0xB0}, + {0x3821, 0x00}, + {0x3880, 0x25}, + {0x3882, 0x20}, + {0x3c91, 0x0b}, + {0x3c94, 0x45}, + {0x3cad, 0x00}, + {0x3cae, 0x00}, + {0x4000, 0xf3}, + {0x4001, 0x60}, + {0x4003, 0x40}, + {0x4300, 0xff}, + {0x4302, 0x0f}, + {0x4305, 0x83}, + {0x4505, 0x84}, + {0x4809, 0x1e}, + {0x480a, 0x04}, + {0x4837, 0x15}, + {0x4c00, 0x08}, + {0x4c01, 0x08}, + {0x4c04, 0x00}, + {0x4c05, 0x00}, + {0x5000, 0xf9}, + {0x3c8c, 0x10}, +}; diff --git a/system/camerad/sensors/ox03c10.cc b/system/camerad/sensors/ox03c10.cc new file mode 100644 index 0000000000..1f0609820b --- /dev/null +++ b/system/camerad/sensors/ox03c10.cc @@ -0,0 +1,94 @@ +#include "system/camerad/sensors/sensor.h" + +namespace { + +const float sensor_analog_gains_OX03C10[] = { + 1.0, 1.0625, 1.125, 1.1875, 1.25, 1.3125, 1.375, 1.4375, 1.5, 1.5625, 1.6875, + 1.8125, 1.9375, 2.0, 2.125, 2.25, 2.375, 2.5, 2.625, 2.75, 2.875, 3.0, + 3.125, 3.375, 3.625, 3.875, 4.0, 4.25, 4.5, 4.75, 5.0, 5.25, 5.5, + 5.75, 6.0, 6.25, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0, + 10.5, 11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5}; + +const uint32_t ox03c10_analog_gains_reg[] = { + 0x100, 0x110, 0x120, 0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1B0, + 0x1D0, 0x1F0, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0, 0x300, + 0x320, 0x360, 0x3A0, 0x3E0, 0x400, 0x440, 0x480, 0x4C0, 0x500, 0x540, 0x580, + 0x5C0, 0x600, 0x640, 0x680, 0x700, 0x780, 0x800, 0x880, 0x900, 0x980, 0xA00, + 0xA80, 0xB00, 0xB80, 0xC00, 0xC80, 0xD00, 0xD80, 0xE00, 0xE80, 0xF00, 0xF80}; + +const uint32_t VS_TIME_MIN_OX03C10 = 1; +const uint32_t VS_TIME_MAX_OX03C10 = 34; // vs < 35 + +} // namespace + +OX03C10::OX03C10() { + image_sensor = cereal::FrameData::ImageSensor::OX03C10; + data_word = false; + frame_width = FRAME_WIDTH; + frame_height = FRAME_HEIGHT; + frame_stride = FRAME_STRIDE; // (0xa80*12//8) + extra_height = 16; // top 2 + bot 14 + frame_offset = 2; + + start_reg_array.assign(std::begin(start_reg_array_ox03c10), std::end(start_reg_array_ox03c10)); + init_reg_array.assign(std::begin(init_array_ox03c10), std::end(init_array_ox03c10)); + probe_reg_addr = 0x300a; + probe_expected_data = 0x5803; + mipi_format = CAM_FORMAT_MIPI_RAW_12; + frame_data_type = 0x2c; // one is 0x2a, two are 0x2b + mclk_frequency = 24000000; //Hz + + dc_gain_factor = 7.32; + dc_gain_min_weight = 1; // always on is fine + dc_gain_max_weight = 1; + dc_gain_on_grey = 0.9; + dc_gain_off_grey = 1.0; + exposure_time_min = 2; // 1x + exposure_time_max = 2016; + analog_gain_min_idx = 0x0; + analog_gain_rec_idx = 0x0; // 1x + analog_gain_max_idx = 0x36; + analog_gain_cost_delta = -1; + analog_gain_cost_low = 0.4; + analog_gain_cost_high = 6.4; + for (int i = 0; i <= analog_gain_max_idx; i++) { + sensor_analog_gains[i] = sensor_analog_gains_OX03C10[i]; + } + min_ev = (exposure_time_min + VS_TIME_MIN_OX03C10) * sensor_analog_gains[analog_gain_min_idx]; + max_ev = exposure_time_max * dc_gain_factor * sensor_analog_gains[analog_gain_max_idx]; + target_grey_factor = 0.01; +} + +std::vector OX03C10::getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const { + // t_HCG&t_LCG + t_VS on LPD, t_SPD on SPD + uint32_t hcg_time = exposure_time; + uint32_t lcg_time = hcg_time; + uint32_t spd_time = std::min(std::max((uint32_t)exposure_time, (exposure_time_max + VS_TIME_MAX_OX03C10) / 3), exposure_time_max + VS_TIME_MAX_OX03C10); + uint32_t vs_time = std::min(std::max((uint32_t)exposure_time / 40, VS_TIME_MIN_OX03C10), VS_TIME_MAX_OX03C10); + + uint32_t real_gain = ox03c10_analog_gains_reg[new_exp_g]; + + return { + {0x3501, hcg_time>>8}, {0x3502, hcg_time&0xFF}, + {0x3581, lcg_time>>8}, {0x3582, lcg_time&0xFF}, + {0x3541, spd_time>>8}, {0x3542, spd_time&0xFF}, + {0x35c2, vs_time&0xFF}, + + {0x3508, real_gain>>8}, {0x3509, real_gain&0xFF}, + }; +} + +int OX03C10::getSlaveAddress(int port) const { + assert(port >= 0 && port <= 2); + return (int[]){0x6C, 0x20, 0x6C}[port]; +} + +float OX03C10::getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const { + float score = std::abs(desired_ev - (exp_t * exp_gain)); + float m = exp_g_idx > analog_gain_rec_idx ? analog_gain_cost_high : analog_gain_cost_low; + score += std::abs(exp_g_idx - (int)analog_gain_rec_idx) * m; + score += ((1 - analog_gain_cost_delta) + + analog_gain_cost_delta * (exp_g_idx - analog_gain_min_idx) / (analog_gain_max_idx - analog_gain_min_idx)) * + std::abs(exp_g_idx - gain_idx) * 5.0; + return score; +} diff --git a/system/camerad/cameras/sensor2_i2c.h b/system/camerad/sensors/ox03c10_registers.h similarity index 82% rename from system/camerad/cameras/sensor2_i2c.h rename to system/camerad/sensors/ox03c10_registers.h index 9170c5183a..575a2cb934 100644 --- a/system/camerad/cameras/sensor2_i2c.h +++ b/system/camerad/sensors/ox03c10_registers.h @@ -1,9 +1,9 @@ -struct i2c_random_wr_payload start_reg_array_ar0231[] = {{0x301A, 0x91C}}; -struct i2c_random_wr_payload stop_reg_array_ar0231[] = {{0x301A, 0x918}}; -struct i2c_random_wr_payload start_reg_array_ox03c10[] = {{0x100, 1}}; -struct i2c_random_wr_payload stop_reg_array_ox03c10[] = {{0x100, 0}}; +#pragma once -struct i2c_random_wr_payload init_array_ox03c10[] = { +const struct i2c_random_wr_payload start_reg_array_ox03c10[] = {{0x100, 1}}; +const struct i2c_random_wr_payload stop_reg_array_ox03c10[] = {{0x100, 0}}; + +const struct i2c_random_wr_payload init_array_ox03c10[] = { {0x103, 1}, {0x107, 1}, @@ -759,118 +759,3 @@ struct i2c_random_wr_payload init_array_ox03c10[] = { {0x3548, 0x0F}, {0x3549, 0x00}, {0x35c1, 0x00}, }; - -struct i2c_random_wr_payload init_array_ar0231[] = { - {0x301A, 0x0018}, // RESET_REGISTER - - // CLOCK Settings - // input clock is 19.2 / 2 * 0x37 = 528 MHz - // pixclk is 528 / 6 = 88 MHz - // full roll time is 1000/(PIXCLK/(LINE_LENGTH_PCK*FRAME_LENGTH_LINES)) = 39.99 ms - // img roll time is 1000/(PIXCLK/(LINE_LENGTH_PCK*Y_OUTPUT_CONTROL)) = 22.85 ms - {0x302A, 0x0006}, // VT_PIX_CLK_DIV - {0x302C, 0x0001}, // VT_SYS_CLK_DIV - {0x302E, 0x0002}, // PRE_PLL_CLK_DIV - {0x3030, 0x0037}, // PLL_MULTIPLIER - {0x3036, 0x000C}, // OP_PIX_CLK_DIV - {0x3038, 0x0001}, // OP_SYS_CLK_DIV - - // FORMAT - {0x3040, 0xC000}, // READ_MODE - {0x3004, 0x0000}, // X_ADDR_START_ - {0x3008, 0x0787}, // X_ADDR_END_ - {0x3002, 0x0000}, // Y_ADDR_START_ - {0x3006, 0x04B7}, // Y_ADDR_END_ - {0x3032, 0x0000}, // SCALING_MODE - {0x30A2, 0x0001}, // X_ODD_INC_ - {0x30A6, 0x0001}, // Y_ODD_INC_ - {0x3402, 0x0788}, // X_OUTPUT_CONTROL - {0x3404, 0x04B8}, // Y_OUTPUT_CONTROL - {0x3064, 0x1982}, // SMIA_TEST - {0x30BA, 0x11F2}, // DIGITAL_CTRL - - // Enable external trigger and disable GPIO outputs - {0x30CE, 0x0120}, // SLAVE_SH_SYNC_MODE | FRAME_START_MODE - {0x340A, 0xE0}, // GPIO3_INPUT_DISABLE | GPIO2_INPUT_DISABLE | GPIO1_INPUT_DISABLE - {0x340C, 0x802}, // GPIO_HIDRV_EN | GPIO0_ISEL=2 - - // Readout timing - {0x300C, 0x0672}, // LINE_LENGTH_PCK (valid for 3-exposure HDR) - {0x300A, 0x0855}, // FRAME_LENGTH_LINES - {0x3042, 0x0000}, // EXTRA_DELAY - - // Readout Settings - {0x31AE, 0x0204}, // SERIAL_FORMAT, 4-lane MIPI - {0x31AC, 0x0C0C}, // DATA_FORMAT_BITS, 12 -> 12 - {0x3342, 0x1212}, // MIPI_F1_PDT_EDT - {0x3346, 0x1212}, // MIPI_F2_PDT_EDT - {0x334A, 0x1212}, // MIPI_F3_PDT_EDT - {0x334E, 0x1212}, // MIPI_F4_PDT_EDT - {0x3344, 0x0011}, // MIPI_F1_VDT_VC - {0x3348, 0x0111}, // MIPI_F2_VDT_VC - {0x334C, 0x0211}, // MIPI_F3_VDT_VC - {0x3350, 0x0311}, // MIPI_F4_VDT_VC - {0x31B0, 0x0053}, // FRAME_PREAMBLE - {0x31B2, 0x003B}, // LINE_PREAMBLE - {0x301A, 0x001C}, // RESET_REGISTER - - // Noise Corrections - {0x3092, 0x0C24}, // ROW_NOISE_CONTROL - {0x337A, 0x0C80}, // DBLC_SCALE0 - {0x3370, 0x03B1}, // DBLC - {0x3044, 0x0400}, // DARK_CONTROL - - // Enable temperature sensor - {0x30B4, 0x0007}, // TEMPSENS0_CTRL_REG - {0x30B8, 0x0007}, // TEMPSENS1_CTRL_REG - - // Enable dead pixel correction using - // the 1D line correction scheme - {0x31E0, 0x0003}, - - // HDR Settings - {0x3082, 0x0004}, // OPERATION_MODE_CTRL - {0x3238, 0x0444}, // EXPOSURE_RATIO - - {0x1008, 0x0361}, // FINE_INTEGRATION_TIME_MIN - {0x100C, 0x0589}, // FINE_INTEGRATION_TIME2_MIN - {0x100E, 0x07B1}, // FINE_INTEGRATION_TIME3_MIN - {0x1010, 0x0139}, // FINE_INTEGRATION_TIME4_MIN - - // TODO: do these have to be lower than LINE_LENGTH_PCK? - {0x3014, 0x08CB}, // FINE_INTEGRATION_TIME_ - {0x321E, 0x0894}, // FINE_INTEGRATION_TIME2 - - {0x31D0, 0x0000}, // COMPANDING, no good in 10 bit? - {0x33DA, 0x0000}, // COMPANDING - {0x318E, 0x0200}, // PRE_HDR_GAIN_EN - - // DLO Settings - {0x3100, 0x4000}, // DLO_CONTROL0 - {0x3280, 0x0CCC}, // T1 G1 - {0x3282, 0x0CCC}, // T1 R - {0x3284, 0x0CCC}, // T1 B - {0x3286, 0x0CCC}, // T1 G2 - {0x3288, 0x0FA0}, // T2 G1 - {0x328A, 0x0FA0}, // T2 R - {0x328C, 0x0FA0}, // T2 B - {0x328E, 0x0FA0}, // T2 G2 - - // Initial Gains - {0x3022, 0x0001}, // GROUPED_PARAMETER_HOLD_ - {0x3366, 0xFF77}, // ANALOG_GAIN (1x) - - {0x3060, 0x3333}, // ANALOG_COLOR_GAIN - - {0x3362, 0x0000}, // DC GAIN - - {0x305A, 0x00F8}, // red gain - {0x3058, 0x0122}, // blue gain - {0x3056, 0x009A}, // g1 gain - {0x305C, 0x009A}, // g2 gain - - {0x3022, 0x0000}, // GROUPED_PARAMETER_HOLD_ - - // Initial Integration Time - {0x3012, 0x0005}, -}; diff --git a/system/camerad/sensors/sensor.h b/system/camerad/sensors/sensor.h new file mode 100644 index 0000000000..4e2194d914 --- /dev/null +++ b/system/camerad/sensors/sensor.h @@ -0,0 +1,93 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "media/cam_sensor.h" +#include "system/camerad/cameras/camera_common.h" +#include "system/camerad/sensors/ar0231_registers.h" +#include "system/camerad/sensors/ox03c10_registers.h" +#include "system/camerad/sensors/os04c10_registers.h" + +#define ANALOG_GAIN_MAX_CNT 55 +const size_t FRAME_WIDTH = 1928; +const size_t FRAME_HEIGHT = 1208; +const size_t FRAME_STRIDE = 2896; // for 12 bit output. 1928 * 12 / 8 + 4 (alignment) + + +class SensorInfo { +public: + SensorInfo() = default; + virtual std::vector getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const { return {}; } + virtual float getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const {return 0; } + virtual int getSlaveAddress(int port) const { assert(0); } + virtual void processRegisters(CameraState *c, cereal::FrameData::Builder &framed) const {} + + cereal::FrameData::ImageSensor image_sensor = cereal::FrameData::ImageSensor::UNKNOWN; + uint32_t frame_width, frame_height; + uint32_t frame_stride; + uint32_t frame_offset = 0; + uint32_t extra_height = 0; + int registers_offset = -1; + int stats_offset = -1; + + int exposure_time_min; + int exposure_time_max; + + float dc_gain_factor; + int dc_gain_min_weight; + int dc_gain_max_weight; + float dc_gain_on_grey; + float dc_gain_off_grey; + + float sensor_analog_gains[ANALOG_GAIN_MAX_CNT]; + int analog_gain_min_idx; + int analog_gain_max_idx; + int analog_gain_rec_idx; + int analog_gain_cost_delta; + float analog_gain_cost_low; + float analog_gain_cost_high; + float target_grey_factor; + float min_ev; + float max_ev; + + bool data_word; + uint32_t probe_reg_addr; + uint32_t probe_expected_data; + std::vector start_reg_array; + std::vector init_reg_array; + + uint32_t mipi_format; + uint32_t mclk_frequency; + uint32_t frame_data_type; +}; + +class AR0231 : public SensorInfo { +public: + AR0231(); + std::vector getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const override; + float getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const override; + int getSlaveAddress(int port) const override; + void processRegisters(CameraState *c, cereal::FrameData::Builder &framed) const override; + +private: + mutable std::map> ar0231_register_lut; +}; + +class OX03C10 : public SensorInfo { +public: + OX03C10(); + std::vector getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const override; + float getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const override; + int getSlaveAddress(int port) const override; +}; + +class OS04C10 : public SensorInfo { +public: + OS04C10(); + std::vector getExposureRegisters(int exposure_time, int new_exp_g, bool dc_gain_enabled) const override; + float getExposureScore(float desired_ev, int exp_t, int exp_g_idx, float exp_gain, int gain_idx) const override; + int getSlaveAddress(int port) const override; +}; diff --git a/system/camerad/snapshot/snapshot.py b/system/camerad/snapshot/snapshot.py index ede97d1a79..8c1b6084c7 100755 --- a/system/camerad/snapshot/snapshot.py +++ b/system/camerad/snapshot/snapshot.py @@ -13,7 +13,6 @@ from openpilot.system.hardware import PC from openpilot.selfdrive.controls.lib.alertmanager import set_offroad_alert from openpilot.selfdrive.manager.process_config import managed_processes -LM_THRESH = 120 # defined in system/camerad/imgproc/utils.h VISION_STREAMS = { "roadCameraState": VisionStreamType.VISION_STREAM_ROAD, diff --git a/system/camerad/test/.gitignore b/system/camerad/test/.gitignore index 44cd0b2730..d67473ebcd 100644 --- a/system/camerad/test/.gitignore +++ b/system/camerad/test/.gitignore @@ -1 +1,2 @@ jpegs/ +test_ae_gray diff --git a/system/camerad/test/ae_gray_test.h b/system/camerad/test/ae_gray_test.h deleted file mode 100644 index 8953fb017f..0000000000 --- a/system/camerad/test/ae_gray_test.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#define W 240 -#define H 160 - -#define TONE_SPLITS 3 - -float gts[TONE_SPLITS * TONE_SPLITS * TONE_SPLITS * TONE_SPLITS] = { - 0.917969, 0.917969, 0.375000, 0.917969, 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.917969, - 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.093750, 0.093750, - 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.917969, 0.375000, 0.375000, - 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.093750, 0.093750, 0.093750, 0.093750, - 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, - 0.093750, 0.093750, 0.093750, 0.093750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, - 0.000000}; diff --git a/system/camerad/test/get_thumbnails_for_segment.py b/system/camerad/test/get_thumbnails_for_segment.py index 97667ede86..21409f398d 100755 --- a/system/camerad/test/get_thumbnails_for_segment.py +++ b/system/camerad/test/get_thumbnails_for_segment.py @@ -1,27 +1,19 @@ #!/usr/bin/env python3 - +import argparse import os - from tqdm import tqdm -from openpilot.common.file_helpers import mkdirs_exists_ok from openpilot.tools.lib.logreader import LogReader -from openpilot.tools.lib.route import Route - -import argparse if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("route", help="The route name") - parser.add_argument("segment", type=int, help="The index of the segment") args = parser.parse_args() - out_path = os.path.join("jpegs", f"{args.route.replace('|', '_')}_{args.segment}") - mkdirs_exists_ok(out_path) + out_path = os.path.join("jpegs", f"{args.route.replace('|', '_').replace('/', '_')}") + os.makedirs(out_path, exist_ok=True) - r = Route(args.route) - path = r.log_paths()[args.segment] or r.qlog_paths()[args.segment] - lr = list(LogReader(path)) + lr = LogReader(args.route) for msg in tqdm(lr): if msg.which() == 'thumbnail': diff --git a/system/camerad/test/ae_gray_test.cc b/system/camerad/test/test_ae_gray.cc similarity index 63% rename from system/camerad/test/ae_gray_test.cc rename to system/camerad/test/test_ae_gray.cc index 8d18f7e93b..06d784927a 100644 --- a/system/camerad/test/ae_gray_test.cc +++ b/system/camerad/test/test_ae_gray.cc @@ -1,6 +1,5 @@ -// unittest for set_exposure_target - -#include "system/camerad/test/ae_gray_test.h" +#define CATCH_CONFIG_MAIN +#include "catch2/catch.hpp" #include @@ -10,7 +9,25 @@ #include "common/util.h" #include "system/camerad/cameras/camera_common.h" -int main() { +#define W 240 +#define H 160 + + +#define TONE_SPLITS 3 + +float gts[TONE_SPLITS * TONE_SPLITS * TONE_SPLITS * TONE_SPLITS] = { + 0.917969, 0.917969, 0.375000, 0.917969, 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.917969, + 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.093750, 0.093750, + 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.917969, 0.375000, 0.375000, + 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.187500, 0.093750, 0.093750, 0.093750, 0.093750, + 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, 0.093750, + 0.093750, 0.093750, 0.093750, 0.093750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000}; + + +TEST_CASE("camera.test_set_exposure_target") { // set up fake camerabuf CameraBuf cb = {}; VisionBuf vb = {}; @@ -63,5 +80,4 @@ int main() { assert(passed); delete[] fb_y; - return 0; } diff --git a/system/camerad/test/test_camerad.py b/system/camerad/test/test_camerad.py index b2aca850d1..408115607e 100755 --- a/system/camerad/test/test_camerad.py +++ b/system/camerad/test/test_camerad.py @@ -1,14 +1,14 @@ #!/usr/bin/env python3 +import pytest import time -import unittest import numpy as np +from flaky import flaky from collections import defaultdict import cereal.messaging as messaging from cereal import log -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.selfdrive.manager.process_config import managed_processes -from openpilot.system.hardware import TICI TEST_TIMESPAN = 30 LAG_FRAME_TOLERANCE = {log.FrameData.ImageSensor.ar0231: 0.5, # ARs use synced pulses for frame starts @@ -18,49 +18,43 @@ FRAME_DELTA_TOLERANCE = {log.FrameData.ImageSensor.ar0231: 1.0, CAMERAS = ('roadCameraState', 'driverCameraState', 'wideRoadCameraState') - -class TestCamerad(unittest.TestCase): - @classmethod - def setUpClass(cls): - if not TICI: - raise unittest.SkipTest - +# TODO: this shouldn't be needed +@flaky(max_runs=3) +@pytest.mark.tici +class TestCamerad: + def setup_method(self): # run camerad and record logs managed_processes['camerad'].start() time.sleep(3) socks = {c: messaging.sub_sock(c, conflate=False, timeout=100) for c in CAMERAS} - cls.logs = defaultdict(list) + self.logs = defaultdict(list) start_time = time.monotonic() while time.monotonic()- start_time < TEST_TIMESPAN: for cam, s in socks.items(): - cls.logs[cam] += messaging.drain_sock(s) + self.logs[cam] += messaging.drain_sock(s) time.sleep(0.2) managed_processes['camerad'].stop() - cls.log_by_frame_id = defaultdict(list) - cls.sensor_type = None - for cam, msgs in cls.logs.items(): - if cls.sensor_type is None: - cls.sensor_type = getattr(msgs[0], msgs[0].which()).sensor.raw - expected_frames = service_list[cam].frequency * TEST_TIMESPAN + self.log_by_frame_id = defaultdict(list) + self.sensor_type = None + for cam, msgs in self.logs.items(): + if self.sensor_type is None: + self.sensor_type = getattr(msgs[0], msgs[0].which()).sensor.raw + expected_frames = SERVICE_LIST[cam].frequency * TEST_TIMESPAN assert expected_frames*0.95 < len(msgs) < expected_frames*1.05, f"unexpected frame count {cam}: {expected_frames=}, got {len(msgs)}" - dts = np.abs(np.diff([getattr(m, m.which()).timestampSof/1e6 for m in msgs]) - 1000/service_list[cam].frequency) - assert (dts < FRAME_DELTA_TOLERANCE[cls.sensor_type]).all(), f"{cam} dts(ms) out of spec: max diff {dts.max()}, 99 percentile {np.percentile(dts, 99)}" + dts = np.abs(np.diff([getattr(m, m.which()).timestampSof/1e6 for m in msgs]) - 1000/SERVICE_LIST[cam].frequency) + assert (dts < FRAME_DELTA_TOLERANCE[self.sensor_type]).all(), f"{cam} dts(ms) out of spec: max diff {dts.max()}, 99 percentile {np.percentile(dts, 99)}" for m in msgs: - cls.log_by_frame_id[getattr(m, m.which()).frameId].append(m) + self.log_by_frame_id[getattr(m, m.which()).frameId].append(m) # strip beginning and end for _ in range(3): - mn, mx = min(cls.log_by_frame_id.keys()), max(cls.log_by_frame_id.keys()) - del cls.log_by_frame_id[mn] - del cls.log_by_frame_id[mx] - - @classmethod - def tearDownClass(cls): - managed_processes['camerad'].stop() + mn, mx = min(self.log_by_frame_id.keys()), max(self.log_by_frame_id.keys()) + del self.log_by_frame_id[mn] + del self.log_by_frame_id[mx] def test_frame_skips(self): skips = {} @@ -87,6 +81,3 @@ class TestCamerad(unittest.TestCase): print("TODO: handle camera out of sync") else: assert len(laggy_frames) == 0, f"Frames not synced properly: {laggy_frames=}" - -if __name__ == "__main__": - unittest.main() diff --git a/system/clocksd/.gitignore b/system/clocksd/.gitignore deleted file mode 100644 index a6d841d65e..0000000000 --- a/system/clocksd/.gitignore +++ /dev/null @@ -1 +0,0 @@ -clocksd diff --git a/system/clocksd/SConscript b/system/clocksd/SConscript deleted file mode 100644 index d1cf13e9e8..0000000000 --- a/system/clocksd/SConscript +++ /dev/null @@ -1,2 +0,0 @@ -Import('env', 'common', 'cereal', 'messaging') -env.Program('clocksd.cc', LIBS=[common, cereal, messaging, 'capnp', 'zmq', 'kj']) diff --git a/system/clocksd/clocksd.cc b/system/clocksd/clocksd.cc deleted file mode 100644 index a5912cf51a..0000000000 --- a/system/clocksd/clocksd.cc +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include - -#include -#include - -// Apple doesn't have timerfd -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include -#include - -#include "cereal/messaging/messaging.h" -#include "common/timing.h" -#include "common/util.h" - -ExitHandler do_exit; - -int main() { - setpriority(PRIO_PROCESS, 0, -13); - PubMaster pm({"clocks"}); - -#ifndef __APPLE__ - int timerfd = timerfd_create(CLOCK_BOOTTIME, 0); - assert(timerfd >= 0); - - struct itimerspec spec = {0}; - spec.it_interval.tv_sec = 1; - spec.it_interval.tv_nsec = 0; - spec.it_value.tv_sec = 1; - spec.it_value.tv_nsec = 0; - - int err = timerfd_settime(timerfd, 0, &spec, 0); - assert(err == 0); - - uint64_t expirations = 0; - while (!do_exit && (err = read(timerfd, &expirations, sizeof(expirations)))) { - if (err < 0) { - if (errno == EINTR) continue; - break; - } -#else - // Just run at 1Hz on apple - while (!do_exit) { - util::sleep_for(1000); -#endif - - uint64_t boottime = nanos_since_boot(); - uint64_t monotonic = nanos_monotonic(); - uint64_t monotonic_raw = nanos_monotonic_raw(); - uint64_t wall_time = nanos_since_epoch(); - - MessageBuilder msg; - auto clocks = msg.initEvent().initClocks(); - - clocks.setBootTimeNanos(boottime); - clocks.setMonotonicNanos(monotonic); - clocks.setMonotonicRawNanos(monotonic_raw); - clocks.setWallTimeNanos(wall_time); - - pm.send("clocks", msg); - } - -#ifndef __APPLE__ - close(timerfd); -#endif - return 0; -} diff --git a/system/fleetmanager/fleet_manager.py b/system/fleetmanager/fleet_manager.py index aed9c556df..1b3a2355e1 100755 --- a/system/fleetmanager/fleet_manager.py +++ b/system/fleetmanager/fleet_manager.py @@ -8,7 +8,7 @@ from flask import Flask, render_template, Response, request, send_from_directory from openpilot.common.realtime import set_core_affinity import openpilot.system.fleetmanager.helpers as fleet from openpilot.system.hardware.hw import Paths -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog app = Flask(__name__) diff --git a/system/hardware/base.h b/system/hardware/base.h index d86b316843..dc2282a93a 100644 --- a/system/hardware/base.h +++ b/system/hardware/base.h @@ -29,11 +29,12 @@ public: static void poweroff() {} static void set_brightness(int percent) {} static void set_display_power(bool on) {} - static void set_volume(float volume) {} static bool get_ssh_enabled() { return false; } static void set_ssh_enabled(bool enabled) {} + static void config_cpu_rendering(bool offscreen); + static bool PC() { return false; } static bool TICI() { return false; } static bool AGNOS() { return false; } diff --git a/system/hardware/base.py b/system/hardware/base.py index 0b6ca44c3c..9c7a618337 100644 --- a/system/hardware/base.py +++ b/system/hardware/base.py @@ -23,6 +23,9 @@ class HardwareBase(ABC): except Exception: return default + def booted(self) -> bool: + return True + @abstractmethod def reboot(self, reason=None): pass @@ -51,10 +54,6 @@ class HardwareBase(ABC): def get_serial(self): pass - @abstractmethod - def get_subscriber_info(self): - pass - @abstractmethod def get_network_info(self): pass diff --git a/system/hardware/hw.h b/system/hardware/hw.h index 2f6ccfffda..394807ccb5 100644 --- a/system/hardware/hw.h +++ b/system/hardware/hw.h @@ -30,13 +30,13 @@ namespace Path { } inline std::string params() { - return Hardware::PC() ? util::getenv("PARAMS_ROOT", Path::comma_home() + "/params") : "/data/params"; + return util::getenv("PARAMS_ROOT", Hardware::PC() ? (Path::comma_home() + "/params") : "/data/params"); } inline std::string rsa_file() { return Hardware::PC() ? Path::comma_home() + "/persist/comma/id_rsa" : "/persist/comma/id_rsa"; } - + inline std::string swaglog_ipc() { return "ipc:///tmp/logmessage" + Path::openpilot_prefix(); } diff --git a/system/hardware/hw.py b/system/hardware/hw.py index 3f7eac02e9..694299d72e 100644 --- a/system/hardware/hw.py +++ b/system/hardware/hw.py @@ -1,7 +1,9 @@ import os from pathlib import Path -from openpilot.selfdrive.hardware import PC +from openpilot.system.hardware import PC + +DEFAULT_DOWNLOAD_CACHE_ROOT = "/tmp/comma_download_cache" class Paths: @staticmethod @@ -31,5 +33,26 @@ class Paths: @staticmethod def download_cache_root() -> str: if os.environ.get('COMMA_CACHE', False): - return os.environ['COMMA_CACHE'] - return "/tmp/comma_download_cache" + os.environ.get("OPENPILOT_PREFIX", "") + "/" + return os.environ['COMMA_CACHE'] + "/" + return DEFAULT_DOWNLOAD_CACHE_ROOT + os.environ.get("OPENPILOT_PREFIX", "") + "/" + + @staticmethod + def persist_root() -> str: + if PC: + return os.path.join(Paths.comma_home(), "persist") + else: + return "/persist/" + + @staticmethod + def stats_root() -> str: + if PC: + return str(Path(Paths.comma_home()) / "stats") + else: + return "/data/stats/" + + @staticmethod + def config_root() -> str: + if PC: + return Paths.comma_home() + else: + return "/tmp/.comma" diff --git a/system/hardware/pc/hardware.h b/system/hardware/pc/hardware.h index 5cd825d61d..5dea184ca6 100644 --- a/system/hardware/pc/hardware.h +++ b/system/hardware/pc/hardware.h @@ -13,11 +13,11 @@ public: static bool TICI() { return util::getenv("TICI", 0) == 1; } static bool AGNOS() { return util::getenv("TICI", 0) == 1; } - static void set_volume(float volume) { - volume = util::map_val(volume, 0.f, 1.f, MIN_VOLUME, MAX_VOLUME); - - char volume_str[6]; - snprintf(volume_str, sizeof(volume_str), "%.3f", volume); - std::system(("pactl set-sink-volume @DEFAULT_SINK@ " + std::string(volume_str)).c_str()); + static void config_cpu_rendering(bool offscreen) { + if (offscreen) { + setenv("QT_QPA_PLATFORM", "offscreen", 1); + } + setenv("__GLX_VENDOR_LIBRARY_NAME", "mesa", 1); + setenv("LP_NUM_THREADS", "0", 1); // disable threading so we stay on our assigned CPU } }; diff --git a/system/hardware/pc/hardware.py b/system/hardware/pc/hardware.py index 27c05f5904..4c2c104f94 100644 --- a/system/hardware/pc/hardware.py +++ b/system/hardware/pc/hardware.py @@ -29,9 +29,6 @@ class Pc(HardwareBase): def get_serial(self): return "cccccccc" - def get_subscriber_info(self): - return "" - def get_network_info(self): return None diff --git a/system/hardware/tici/agnos.json b/system/hardware/tici/agnos.json index 7e8cd480be..a87f3d278d 100644 --- a/system/hardware/tici/agnos.json +++ b/system/hardware/tici/agnos.json @@ -1,9 +1,9 @@ [ { "name": "boot", - "url": "https://commadist.azureedge.net/agnosupdate/boot-8d8d8620de8b2687f3a8fffdb81b2abd1fe2ead5bc831361a1a212e5589ac279.img.xz", - "hash": "8d8d8620de8b2687f3a8fffdb81b2abd1fe2ead5bc831361a1a212e5589ac279", - "hash_raw": "8d8d8620de8b2687f3a8fffdb81b2abd1fe2ead5bc831361a1a212e5589ac279", + "url": "https://commadist.azureedge.net/agnosupdate/boot-1cc21f31a7c09772fd759e6f2a614974bf4f2fc320c91a799ffadd11abc1f85f.img.xz", + "hash": "1cc21f31a7c09772fd759e6f2a614974bf4f2fc320c91a799ffadd11abc1f85f", + "hash_raw": "1cc21f31a7c09772fd759e6f2a614974bf4f2fc320c91a799ffadd11abc1f85f", "size": 15636480, "sparse": false, "full_check": true, @@ -11,9 +11,9 @@ }, { "name": "abl", - "url": "https://commadist.azureedge.net/agnosupdate/abl-0084fcf79fea067632a1c2d9519b6445ad484aa8b09f49f22e6b45b4dccacd2d.img.xz", - "hash": "0084fcf79fea067632a1c2d9519b6445ad484aa8b09f49f22e6b45b4dccacd2d", - "hash_raw": "0084fcf79fea067632a1c2d9519b6445ad484aa8b09f49f22e6b45b4dccacd2d", + "url": "https://commadist.azureedge.net/agnosupdate/abl-eeb89a74c968a5a2ffce96f23158b72e03e2814adf72ef59d1200ba8ea5d2f39.img.xz", + "hash": "eeb89a74c968a5a2ffce96f23158b72e03e2814adf72ef59d1200ba8ea5d2f39", + "hash_raw": "eeb89a74c968a5a2ffce96f23158b72e03e2814adf72ef59d1200ba8ea5d2f39", "size": 274432, "sparse": false, "full_check": true, @@ -21,9 +21,9 @@ }, { "name": "xbl", - "url": "https://commadist.azureedge.net/agnosupdate/xbl-942b9b2914d89c2a70fdf27380b59e04b549ac2fd53ecb29d6549d1a9c8daeaa.img.xz", - "hash": "942b9b2914d89c2a70fdf27380b59e04b549ac2fd53ecb29d6549d1a9c8daeaa", - "hash_raw": "942b9b2914d89c2a70fdf27380b59e04b549ac2fd53ecb29d6549d1a9c8daeaa", + "url": "https://commadist.azureedge.net/agnosupdate/xbl-bcef195b00a1ab685da601f4072722569773ab161e91c8753ad99ca4217a28f5.img.xz", + "hash": "bcef195b00a1ab685da601f4072722569773ab161e91c8753ad99ca4217a28f5", + "hash_raw": "bcef195b00a1ab685da601f4072722569773ab161e91c8753ad99ca4217a28f5", "size": 3282672, "sparse": false, "full_check": true, @@ -31,9 +31,9 @@ }, { "name": "xbl_config", - "url": "https://commadist.azureedge.net/agnosupdate/xbl_config-6881d94599f65d94c13bcc0bd860184dfba2dfe96ec776d08fb35ac5b5f85bbf.img.xz", - "hash": "6881d94599f65d94c13bcc0bd860184dfba2dfe96ec776d08fb35ac5b5f85bbf", - "hash_raw": "6881d94599f65d94c13bcc0bd860184dfba2dfe96ec776d08fb35ac5b5f85bbf", + "url": "https://commadist.azureedge.net/agnosupdate/xbl_config-19791056558c16f8dae787531b5e30b3b3db2ded9d666688df45ce1b91a72bac.img.xz", + "hash": "19791056558c16f8dae787531b5e30b3b3db2ded9d666688df45ce1b91a72bac", + "hash_raw": "19791056558c16f8dae787531b5e30b3b3db2ded9d666688df45ce1b91a72bac", "size": 98124, "sparse": false, "full_check": true, @@ -41,9 +41,9 @@ }, { "name": "devcfg", - "url": "https://commadist.azureedge.net/agnosupdate/devcfg-9bbf168baff6101f4890c5c95c118e30813c2610cfb35b8e19e363f04a32a262.img.xz", - "hash": "9bbf168baff6101f4890c5c95c118e30813c2610cfb35b8e19e363f04a32a262", - "hash_raw": "9bbf168baff6101f4890c5c95c118e30813c2610cfb35b8e19e363f04a32a262", + "url": "https://commadist.azureedge.net/agnosupdate/devcfg-be44b73dda5be840b09d5347d536459e31098da3fea97596956c0bdad19bdf27.img.xz", + "hash": "be44b73dda5be840b09d5347d536459e31098da3fea97596956c0bdad19bdf27", + "hash_raw": "be44b73dda5be840b09d5347d536459e31098da3fea97596956c0bdad19bdf27", "size": 40336, "sparse": false, "full_check": true, @@ -51,9 +51,9 @@ }, { "name": "aop", - "url": "https://commadist.azureedge.net/agnosupdate/aop-c1d9d712980f6b2a4b12196597f4d1bf3fe4fec6c59edf29ae63ef21f11b8222.img.xz", - "hash": "c1d9d712980f6b2a4b12196597f4d1bf3fe4fec6c59edf29ae63ef21f11b8222", - "hash_raw": "c1d9d712980f6b2a4b12196597f4d1bf3fe4fec6c59edf29ae63ef21f11b8222", + "url": "https://commadist.azureedge.net/agnosupdate/aop-5d764611a683d6a738cf06a1dcf8a926d0f47b5117ad40d3054167de6dd8bd0f.img.xz", + "hash": "5d764611a683d6a738cf06a1dcf8a926d0f47b5117ad40d3054167de6dd8bd0f", + "hash_raw": "5d764611a683d6a738cf06a1dcf8a926d0f47b5117ad40d3054167de6dd8bd0f", "size": 184364, "sparse": false, "full_check": true, @@ -61,16 +61,17 @@ }, { "name": "system", - "url": "https://commadist.azureedge.net/agnosupdate/system-e1fa3018bce9bad01c6967e5e21f1141cf5c8f02d2edfaed51c738f74a32a432.img.xz", - "hash": "611011f3e3f147bc24f371105a9dd3760ec11ba424c56d4a442a66b098c784c0", - "hash_raw": "e1fa3018bce9bad01c6967e5e21f1141cf5c8f02d2edfaed51c738f74a32a432", + "url": "https://commadist.azureedge.net/agnosupdate/system-38402b90b65729f8a4feb729c8a862cdf306659a85f27431d3ff7e52d4027082.img.xz", + "hash": "5dc1718e21c49e4fa910fbb3b2321381f497b38335a0cf3ca923157d589abe89", + "hash_raw": "38402b90b65729f8a4feb729c8a862cdf306659a85f27431d3ff7e52d4027082", "size": 10737418240, "sparse": true, "full_check": false, "has_ab": true, "alt": { - "hash": "256442a55fcb9e8f72969f003a4db91598dee1136f8dda85b553a557d36b93d8", - "url": "https://commadist.azureedge.net/agnosupdate/system-skip-chunks-e1fa3018bce9bad01c6967e5e21f1141cf5c8f02d2edfaed51c738f74a32a432.img.xz" + "hash": "1809e36d8e376e0a0c8348e3f684aba4100fe0382042c051efd0e946af1ce696", + "url": "https://commadist.azureedge.net/agnosupdate/system-skip-chunks-38402b90b65729f8a4feb729c8a862cdf306659a85f27431d3ff7e52d4027082.img.xz", + "size": 4077270244 } } -] +] \ No newline at end of file diff --git a/system/hardware/tici/esim.nmconnection b/system/hardware/tici/esim.nmconnection new file mode 100644 index 0000000000..74f6f8e82c --- /dev/null +++ b/system/hardware/tici/esim.nmconnection @@ -0,0 +1,30 @@ +[connection] +id=esim +uuid=fff6553c-3284-4707-a6b1-acc021caaafb +type=gsm +permissions= +autoconnect=true +autoconnect-retries=100 +autoconnect-priority=2 +metered=1 + +[gsm] +apn= +home-only=false +auto-config=true +sim-id= + +[ipv4] +route-metric=1000 +dns-priority=1000 +dns-search= +method=auto + +[ipv6] +ddr-gen-mode=stable-privacy +dns-search= +route-metric=1000 +dns-priority=1000 +method=auto + +[proxy] diff --git a/system/hardware/tici/esim.py b/system/hardware/tici/esim.py new file mode 100755 index 0000000000..df76c1a5fd --- /dev/null +++ b/system/hardware/tici/esim.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +import os +import math +import time +import binascii +import requests +import serial +import subprocess + + +def post(url, payload): + print() + print("POST to", url) + r = requests.post( + url, + data=payload, + verify=False, + headers={ + "Content-Type": "application/json", + "X-Admin-Protocol": "gsma/rsp/v2.2.0", + "charset": "utf-8", + "User-Agent": "gsma-rsp-lpad", + }, + ) + print("resp", r) + print("resp text", repr(r.text)) + print() + r.raise_for_status() + + ret = f"HTTP/1.1 {r.status_code}" + ret += ''.join(f"{k}: {v}" for k, v in r.headers.items() if k != 'Connection') + return ret.encode() + r.content + + +class LPA: + def __init__(self): + self.dev = serial.Serial('/dev/ttyUSB2', baudrate=57600, timeout=1, bytesize=8) + self.dev.reset_input_buffer() + self.dev.reset_output_buffer() + assert "OK" in self.at("AT") + + def at(self, cmd): + print(f"==> {cmd}") + self.dev.write(cmd.encode() + b'\r\n') + + r = b"" + cnt = 0 + while b"OK" not in r and b"ERROR" not in r and cnt < 20: + r += self.dev.read(8192).strip() + cnt += 1 + r = r.decode() + print(f"<== {repr(r)}") + return r + + def download_ota(self, qr): + return self.at(f'AT+QESIM="ota","{qr}"') + + def download(self, qr): + smdp = qr.split('$')[1] + out = self.at(f'AT+QESIM="download","{qr}"') + for _ in range(5): + line = out.split("+QESIM: ")[1].split("\r\n\r\nOK")[0] + + parts = [x.strip().strip('"') for x in line.split(',', maxsplit=4)] + print(repr(parts)) + trans, ret, url, payloadlen, payload = parts + assert trans == "trans" and ret == "0" + assert len(payload) == int(payloadlen) + + r = post(f"https://{smdp}/{url}", payload) + to_send = binascii.hexlify(r).decode() + + chunk_len = 1400 + for i in range(math.ceil(len(to_send) / chunk_len)): + state = 1 if (i+1)*chunk_len < len(to_send) else 0 + data = to_send[i * chunk_len : (i+1)*chunk_len] + out = self.at(f'AT+QESIM="trans",{len(to_send)},{state},{i},{len(data)},"{data}"') + assert "OK" in out + + if '+QESIM:"download",1' in out: + raise Exception("profile install failed") + elif '+QESIM:"download",0' in out: + print("done, successfully loaded") + break + + def enable(self, iccid): + self.at(f'AT+QESIM="enable","{iccid}"') + + def disable(self, iccid): + self.at(f'AT+QESIM="disable","{iccid}"') + + def delete(self, iccid): + self.at(f'AT+QESIM="delete","{iccid}"') + + def list_profiles(self): + out = self.at('AT+QESIM="list"') + return out.strip().splitlines()[1:] + + +if __name__ == "__main__": + import sys + + if "RESTART" in os.environ: + subprocess.check_call("sudo systemctl stop ModemManager", shell=True) + subprocess.check_call("/usr/comma/lte/lte.sh stop_blocking", shell=True) + subprocess.check_call("/usr/comma/lte/lte.sh start", shell=True) + while not os.path.exists('/dev/ttyUSB2'): + time.sleep(1) + time.sleep(3) + + lpa = LPA() + print(lpa.list_profiles()) + if len(sys.argv) > 1: + lpa.download(sys.argv[1]) + print(lpa.list_profiles()) diff --git a/system/hardware/tici/hardware.h b/system/hardware/tici/hardware.h index c1a2dcb169..f6ea86b002 100644 --- a/system/hardware/tici/hardware.h +++ b/system/hardware/tici/hardware.h @@ -67,14 +67,6 @@ public: bl_power_control.close(); } } - static void set_volume(float volume) { - volume = util::map_val(volume, 0.f, 1.f, MIN_VOLUME, MAX_VOLUME); - - char volume_str[6]; - snprintf(volume_str, sizeof(volume_str), "%.3f", volume); - std::system(("pactl set-sink-volume @DEFAULT_SINK@ " + std::string(volume_str)).c_str()); - } - static std::map get_init_logs() { std::map ret = { @@ -103,4 +95,11 @@ public: static bool get_ssh_enabled() { return Params().getBool("SshEnabled"); } static void set_ssh_enabled(bool enabled) { Params().putBool("SshEnabled", enabled); } + + static void config_cpu_rendering(bool offscreen) { + if (offscreen) { + setenv("QT_QPA_PLATFORM", "eglfs", 1); // offscreen doesn't work with EGL/GLES + } + setenv("LP_NUM_THREADS", "0", 1); // disable threading so we stay on our assigned CPU + } }; diff --git a/system/hardware/tici/hardware.py b/system/hardware/tici/hardware.py index 7f8ef37f1a..3431718e22 100644 --- a/system/hardware/tici/hardware.py +++ b/system/hardware/tici/hardware.py @@ -3,6 +3,7 @@ import math import os import subprocess import time +import tempfile from enum import IntEnum from functools import cached_property, lru_cache from pathlib import Path @@ -73,6 +74,11 @@ def sudo_write(val, path): # fallback for debugfs files os.system(f"sudo su -c 'echo {val} > {path}'") +def sudo_read(path: str) -> str: + try: + return subprocess.check_output(f"sudo cat {path}", shell=True, encoding='utf8') + except Exception: + return "" def affine_irq(val, action): irqs = get_irqs_for_action(action) @@ -104,7 +110,7 @@ class Tici(HardwareBase): def nm(self): return self.bus.get_object(NM, '/org/freedesktop/NetworkManager') - @cached_property + @property # this should not be cached, in case the modemmanager restarts def mm(self): return self.bus.get_object(MM, '/org/freedesktop/ModemManager1') @@ -200,9 +206,6 @@ class Tici(HardwareBase): 'data_connected': modem.Get(MM_MODEM, 'State', dbus_interface=DBUS_PROPS, timeout=TIMEOUT) == MM_MODEM_STATE.CONNECTED, } - def get_subscriber_info(self): - return "" - def get_imei(self, slot): if slot != 0: return "" @@ -210,8 +213,8 @@ class Tici(HardwareBase): return str(self.get_modem().Get(MM_MODEM, 'EquipmentIdentifier', dbus_interface=DBUS_PROPS, timeout=TIMEOUT)) def get_network_info(self): - modem = self.get_modem() try: + modem = self.get_modem() info = modem.Command("AT+QNWINFO", math.ceil(TIMEOUT), dbus_interface=MM_MODEM, timeout=TIMEOUT) extra = modem.Command('AT+QENG="servingcell"', math.ceil(TIMEOUT), dbus_interface=MM_MODEM, timeout=TIMEOUT) state = modem.Get(MM_MODEM, 'State', dbus_interface=DBUS_PROPS, timeout=TIMEOUT) @@ -292,67 +295,6 @@ class Tici(HardwareBase): return super().get_network_metered(network_type) - @staticmethod - def set_bandwidth_limit(upload_speed_kbps: int, download_speed_kbps: int) -> None: - upload_speed_kbps = int(upload_speed_kbps) # Ensure integer value - download_speed_kbps = int(download_speed_kbps) # Ensure integer value - - adapter = "wwan0" - ifb = "ifb0" - - sudo = ["sudo"] - tc = sudo + ["tc"] - - # check, cmd - cleanup = [ - # Clean up old rules - (False, tc + ["qdisc", "del", "dev", adapter, "root"]), - (False, tc + ["qdisc", "del", "dev", ifb, "root"]), - (False, tc + ["qdisc", "del", "dev", adapter, "ingress"]), - (False, tc + ["qdisc", "del", "dev", ifb, "ingress"]), - - # Bring ifb0 down - (False, sudo + ["ip", "link", "set", "dev", ifb, "down"]), - ] - - upload = [ - # Create root Hierarchy Token Bucket that sends all traffic to 1:20 - (True, tc + ["qdisc", "add", "dev", adapter, "root", "handle", "1:", "htb", "default", "20"]), - - # Create class 1:20 with specified rate limit - (True, tc + ["class", "add", "dev", adapter, "parent", "1:", "classid", "1:20", "htb", "rate", f"{upload_speed_kbps}kbit"]), - - # Create universal 32 bit filter on adapter that sends all outbound ip traffic through the class - (True, tc + ["filter", "add", "dev", adapter, "parent", "1:", "protocol", "ip", "prio", \ - "10", "u32", "match", "ip", "dst", "0.0.0.0/0", "flowid", "1:20"]), - ] - - download = [ - # Bring ifb0 up - (True, sudo + ["ip", "link", "set", "dev", ifb, "up"]), - - # Redirect ingress (incoming) to egress ifb0 - (True, tc + ["qdisc", "add", "dev", adapter, "handle", "ffff:", "ingress"]), - (True, tc + ["filter", "add", "dev", adapter, "parent", "ffff:", "protocol", "ip", "u32", \ - "match", "u32", "0", "0", "action", "mirred", "egress", "redirect", "dev", ifb]), - - # Add class and rules for virtual interface - (True, tc + ["qdisc", "add", "dev", ifb, "root", "handle", "2:", "htb"]), - (True, tc + ["class", "add", "dev", ifb, "parent", "2:", "classid", "2:1", "htb", "rate", f"{download_speed_kbps}kbit"]), - - # Add filter to rule for IP address - (True, tc + ["filter", "add", "dev", ifb, "protocol", "ip", "parent", "2:", "prio", "1", "u32", "match", "ip", "src", "0.0.0.0/0", "flowid", "2:1"]), - ] - - commands = cleanup - if upload_speed_kbps != -1: - commands += upload - if download_speed_kbps != -1: - commands += download - - for check, cmd in commands: - subprocess.run(cmd, check=check) - def get_modem_version(self): try: modem = self.get_modem() @@ -392,10 +334,6 @@ class Tici(HardwareBase): pass return ret - def get_usb_present(self): - # Not sure if relevant on tici, but the file exists - return self.read_param_file("/sys/class/power_supply/usb/present", lambda x: bool(int(x)), False) - def get_current_power_draw(self): return (self.read_param_file("/sys/class/hwmon/hwmon1/power1_input", int) / 1e6) @@ -505,7 +443,7 @@ class Tici(HardwareBase): sudo_write("1", "/sys/class/kgsl/kgsl-3d0/force_rail_on") sudo_write("1000", "/sys/class/kgsl/kgsl-3d0/idle_timer") sudo_write("performance", "/sys/class/kgsl/kgsl-3d0/devfreq/governor") - sudo_write("596", "/sys/class/kgsl/kgsl-3d0/max_clock_mhz") + sudo_write("710", "/sys/class/kgsl/kgsl-3d0/max_clock_mhz") # setup governors sudo_write("performance", "/sys/class/devfreq/soc:qcom,cpubw/governor") @@ -532,9 +470,23 @@ class Tici(HardwareBase): except Exception: pass - # blue prime config - if sim_id.startswith('8901410'): - os.system('mmcli -m any --3gpp-set-initial-eps-bearer-settings="apn=Broadband"') + # blue prime + blue_prime = sim_id.startswith('8901410') + initial_apn = "Broadband" if blue_prime else "" + os.system(f'mmcli -m any --3gpp-set-initial-eps-bearer-settings="apn={initial_apn}"') + + # eSIM prime + if sim_id.startswith('8985235'): + dest = "/etc/NetworkManager/system-connections/esim.nmconnection" + with open(Path(__file__).parent/'esim.nmconnection') as f, tempfile.NamedTemporaryFile(mode='w') as tf: + dat = f.read() + dat = dat.replace("sim-id=", f"sim-id={sim_id}") + tf.write(dat) + tf.flush() + + # needs to be root + os.system(f"sudo cp {tf.name} {dest}") + os.system(f"sudo nmcli con load {dest}") def get_networks(self): r = {} @@ -600,8 +552,15 @@ class Tici(HardwareBase): time.sleep(0.5) gpio_set(GPIO.STM_BOOT0, 0) + def booted(self): + # this normally boots within 8s, but on rare occasions takes 30+s + encoder_state = sudo_read("/sys/kernel/debug/msm_vidc/core0/info") + if "Core state: 0" in encoder_state and (time.monotonic() < 60*2): + return False + return True if __name__ == "__main__": t = Tici() + t.configure_modem() t.initialize_hardware() t.set_power_save(False) diff --git a/system/hardware/tici/power_draw_test.py b/system/hardware/tici/power_draw_test.py deleted file mode 100755 index a0520638b7..0000000000 --- a/system/hardware/tici/power_draw_test.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -import os -import time -import numpy as np -from openpilot.system.hardware.tici.hardware import Tici -from openpilot.system.hardware.tici.pins import GPIO -from openpilot.common.gpio import gpio_init, gpio_set, gpio_export - -def read_power(): - with open("/sys/bus/i2c/devices/0-0040/hwmon/hwmon1/in1_input") as f: - voltage_total = int(f.read()) / 1000. - - with open("/sys/bus/i2c/devices/0-0040/hwmon/hwmon1/curr1_input") as f: - current_total = int(f.read()) - - with open("/sys/class/power_supply/bms/voltage_now") as f: - voltage = int(f.read()) / 1e6 # volts - - with open("/sys/class/power_supply/bms/current_now") as f: - current = int(f.read()) / 1e3 # ma - - power_som = voltage*current - power_total = voltage_total*current_total - - return power_total, power_som - -def read_power_avg(): - pwrs = [] - for _ in range(100): - pwrs.append(read_power()) - time.sleep(0.01) - power_total, power_som = np.mean([x[0] for x in pwrs]), np.mean([x[1] for x in pwrs]) - return "total %7.2f mW SOM %7.2f mW" % (power_total, power_som) - - -if __name__ == "__main__": - gpio_export(GPIO.CAM0_AVDD_EN) - gpio_export(GPIO.CAM0_RSTN) - gpio_export(GPIO.CAM1_RSTN) - gpio_export(GPIO.CAM2_RSTN) - print("hello") - os.system('kill $(pgrep -f "manager.py")') - os.system('kill $(pgrep -f "python -m selfdrive.athena.manage_athenad")') - os.system('kill $(pgrep -f "selfdrive.athena.athenad")') - # stopping weston turns off lcd3v3 - os.system("sudo service weston stop") - os.system("sudo service ModemManager stop") - print("services stopped") - - t = Tici() - t.initialize_hardware() - t.set_power_save(True) - t.set_screen_brightness(0) - gpio_init(GPIO.STM_RST_N, True) - gpio_init(GPIO.HUB_RST_N, True) - gpio_init(GPIO.GNSS_PWR_EN, True) - gpio_init(GPIO.LTE_RST_N, True) - gpio_init(GPIO.LTE_PWRKEY, True) - gpio_init(GPIO.CAM0_AVDD_EN, True) - gpio_init(GPIO.CAM0_RSTN, True) - gpio_init(GPIO.CAM1_RSTN, True) - gpio_init(GPIO.CAM2_RSTN, True) - - - os.system("sudo su -c 'echo 0 > /sys/kernel/debug/regulator/camera_rear_ldo/enable'") # cam 1v2 off - gpio_set(GPIO.CAM0_AVDD_EN, False) # cam 2v8 off - gpio_set(GPIO.LTE_RST_N, True) # quectel off - gpio_set(GPIO.GNSS_PWR_EN, False) # gps off - gpio_set(GPIO.STM_RST_N, True) # panda off - gpio_set(GPIO.HUB_RST_N, False) # hub off - # cameras in reset - gpio_set(GPIO.CAM0_RSTN, False) - gpio_set(GPIO.CAM1_RSTN, False) - gpio_set(GPIO.CAM2_RSTN, False) - time.sleep(8) - - print("baseline: ", read_power_avg()) - gpio_set(GPIO.CAM0_AVDD_EN, True) - time.sleep(2) - print("cam avdd: ", read_power_avg()) - os.system("sudo su -c 'echo 1 > /sys/kernel/debug/regulator/camera_rear_ldo/enable'") - time.sleep(2) - print("cam dvdd: ", read_power_avg()) - gpio_set(GPIO.CAM0_RSTN, True) - gpio_set(GPIO.CAM1_RSTN, True) - gpio_set(GPIO.CAM2_RSTN, True) - time.sleep(2) - print("cams up: ", read_power_avg()) - gpio_set(GPIO.HUB_RST_N, True) - time.sleep(2) - print("usb hub: ", read_power_avg()) - gpio_set(GPIO.STM_RST_N, False) - time.sleep(5) - print("panda: ", read_power_avg()) - gpio_set(GPIO.GNSS_PWR_EN, True) - time.sleep(5) - print("gps: ", read_power_avg()) - gpio_set(GPIO.LTE_RST_N, False) - time.sleep(1) - gpio_set(GPIO.LTE_PWRKEY, True) - time.sleep(1) - gpio_set(GPIO.LTE_PWRKEY, False) - time.sleep(5) - print("quectel: ", read_power_avg()) - diff --git a/system/hardware/tici/tests/test_hardware.py b/system/hardware/tici/tests/test_hardware.py index 7d377ac3fb..4abc86107b 100755 --- a/system/hardware/tici/tests/test_hardware.py +++ b/system/hardware/tici/tests/test_hardware.py @@ -1,20 +1,19 @@ #!/usr/bin/env python3 +import pytest import time import unittest import numpy as np -from openpilot.system.hardware import TICI from openpilot.system.hardware.tici.hardware import Tici HARDWARE = Tici() + +@pytest.mark.tici class TestHardware(unittest.TestCase): @classmethod def setUpClass(cls): - if not TICI: - raise unittest.SkipTest - HARDWARE.initialize_hardware() HARDWARE.set_power_save(False) diff --git a/system/hardware/tici/tests/test_power_draw.py b/system/hardware/tici/tests/test_power_draw.py index fbca95f6f6..0518eec543 100755 --- a/system/hardware/tici/tests/test_power_draw.py +++ b/system/hardware/tici/tests/test_power_draw.py @@ -1,19 +1,20 @@ #!/usr/bin/env python3 +import pytest import unittest import time -import math -import threading +import numpy as np from dataclasses import dataclass from tabulate import tabulate from typing import List import cereal.messaging as messaging -from cereal.services import service_list -from openpilot.system.hardware import HARDWARE, TICI +from cereal.services import SERVICE_LIST +from openpilot.common.mock import mock_messages +from openpilot.selfdrive.car.car_helpers import write_car_param +from openpilot.system.hardware import HARDWARE from openpilot.system.hardware.tici.power_monitor import get_power from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.selfdrive.manager.manager import manager_cleanup -from openpilot.selfdrive.navd.tests.test_map_renderer import gen_llk SAMPLE_TIME = 8 # seconds to sample power @@ -28,32 +29,21 @@ class Proc: PROCS = [ Proc('camerad', 2.1, msgs=['roadCameraState', 'wideRoadCameraState', 'driverCameraState']), - Proc('modeld', 0.93, atol=0.2, msgs=['modelV2']), + Proc('modeld', 1.12, atol=0.2, msgs=['modelV2']), Proc('dmonitoringmodeld', 0.4, msgs=['driverStateV2']), Proc('encoderd', 0.23, msgs=[]), Proc('mapsd', 0.05, msgs=['mapRenderState']), Proc('navmodeld', 0.05, msgs=['navModel']), ] -def send_llk_msg(done): - # Send liveLocationKalman at 20Hz - pm = messaging.PubMaster(['liveLocationKalman']) - while not done.is_set(): - msg = gen_llk() - pm.send('liveLocationKalman', msg) - time.sleep(1/20.) - +@pytest.mark.tici class TestPowerDraw(unittest.TestCase): - @classmethod - def setUpClass(cls): - if not TICI: - raise unittest.SkipTest - def setUp(self): HARDWARE.initialize_hardware() HARDWARE.set_power_save(False) + write_car_param() # wait a bit for power save to disable time.sleep(5) @@ -61,11 +51,9 @@ class TestPowerDraw(unittest.TestCase): def tearDown(self): manager_cleanup() + @mock_messages(['liveLocationKalman']) def test_camera_procs(self): baseline = get_power() - done = threading.Event() - thread = threading.Thread(target=send_llk_msg, args=(done,), daemon=True) - thread.start() prev = baseline used = {} @@ -83,7 +71,6 @@ class TestPowerDraw(unittest.TestCase): for msg,sock in socks.items(): msg_counts[msg] = len(messaging.drain_sock_raw(sock)) - done.set() manager_cleanup() tab = [['process', 'expected (W)', 'measured (W)', '# msgs expected', '# msgs received']] @@ -91,11 +78,11 @@ class TestPowerDraw(unittest.TestCase): cur = used[proc.name] expected = proc.power msgs_received = sum(msg_counts[msg] for msg in proc.msgs) - msgs_expected = int(sum(SAMPLE_TIME * service_list[msg].frequency for msg in proc.msgs)) + msgs_expected = int(sum(SAMPLE_TIME * SERVICE_LIST[msg].frequency for msg in proc.msgs)) tab.append([proc.name, round(expected, 2), round(cur, 2), msgs_expected, msgs_received]) with self.subTest(proc=proc.name): - self.assertTrue(math.isclose(cur, expected, rel_tol=proc.rtol, abs_tol=proc.atol)) - self.assertTrue(math.isclose(msgs_expected, msgs_received, rel_tol=.02, abs_tol=2)) + np.testing.assert_allclose(msgs_expected, msgs_received, rtol=.02, atol=2) + np.testing.assert_allclose(cur, expected, rtol=proc.rtol, atol=proc.atol) print(tabulate(tab)) print(f"Baseline {baseline:.2f}W\n") diff --git a/system/hardware/tici/updater b/system/hardware/tici/updater index 1c57751200..7eb407988e 100755 Binary files a/system/hardware/tici/updater and b/system/hardware/tici/updater differ diff --git a/system/loggerd/bootlog.cc b/system/loggerd/bootlog.cc index 771594d20c..1b4a1e5eb5 100644 --- a/system/loggerd/bootlog.cc +++ b/system/loggerd/bootlog.cc @@ -49,22 +49,38 @@ static kj::Array build_boot_log() { } int main(int argc, char** argv) { - const std::string timestr = logger_get_route_name(); - const std::string path = Path::log_root() + "/boot/" + timestr; - LOGW("bootlog to %s", path.c_str()); + if (argc > 1) { + std::string arg1(argv[1]); + if (arg1 == "--started") { + const std::string path = Path::log_root() + "/params/" + Params().get("CurrentRoute").c_str(); + LOGW("params_log to %s", path.c_str()); - // Open bootlog - bool r = util::create_directories(Path::log_root() + "/boot/", 0775); - assert(r); + // Open params + bool r = util::create_directories(Path::log_root() + "/params/", 0775); + assert(r); - RawFile file(path.c_str()); - // Write initdata - file.write(logger_build_init_data().asBytes()); - // Write bootlog - file.write(build_boot_log().asBytes()); + RawFile file(path.c_str()); + // Write params + file.write(logger_build_params_data_car_start().asBytes()); + } + } else { + const std::string id = logger_get_identifier("BootCount"); + const std::string path = Path::log_root() + "/boot/" + id; + LOGW("bootlog to %s", path.c_str()); - // Write out bootlog param to match routes with bootlog - Params().put("CurrentBootlog", timestr.c_str()); + // Open bootlog + bool r = util::create_directories(Path::log_root() + "/boot/", 0775); + assert(r); + + RawFile file(path.c_str()); + // Write initdata + file.write(logger_build_init_data().asBytes()); + // Write bootlog + file.write(build_boot_log().asBytes()); + + // Write out bootlog param to match routes with bootlog + Params().put("CurrentBootlog", id.c_str()); + } return 0; } diff --git a/system/loggerd/config.py b/system/loggerd/config.py index 0245585fc0..5c2c89b73f 100644 --- a/system/loggerd/config.py +++ b/system/loggerd/config.py @@ -1,7 +1,5 @@ import os -from pathlib import Path -from openpilot.system.hardware import PC -from openpilot.selfdrive.hardware.hw import Paths +from openpilot.system.hardware.hw import Paths CAMERA_FPS = 20 @@ -9,10 +7,6 @@ SEGMENT_LENGTH = 60 STATS_DIR_FILE_LIMIT = 10000 STATS_SOCKET = "ipc:///tmp/stats" -if PC: - STATS_DIR = str(Path.home() / ".comma" / "stats") -else: - STATS_DIR = "/data/stats/" STATS_FLUSH_TIME_S = 60 def get_available_percent(default=None): diff --git a/system/loggerd/deleter.py b/system/loggerd/deleter.py index b060232b6e..868340150a 100755 --- a/system/loggerd/deleter.py +++ b/system/loggerd/deleter.py @@ -4,7 +4,7 @@ import shutil import threading from typing import List from openpilot.system.hardware.hw import Paths -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.system.loggerd.config import get_available_bytes, get_available_percent from openpilot.system.loggerd.uploader import listdir_by_creation from openpilot.system.loggerd.xattr_cache import getxattr diff --git a/system/loggerd/encoder/encoder.cc b/system/loggerd/encoder/encoder.cc index 869b4617b3..0aba4b8b49 100644 --- a/system/loggerd/encoder/encoder.cc +++ b/system/loggerd/encoder/encoder.cc @@ -27,8 +27,11 @@ void VideoEncoder::publisher_publish(VideoEncoder *e, int segment_num, uint32_t edat.setData(dat); if (flags & V4L2_BUF_FLAG_KEYFRAME) edat.setHeader(header); - auto words = new kj::Array(capnp::messageToFlatArray(msg)); - auto bytes = words->asBytes(); - e->pm->send(e->encoder_info.publish_name, bytes.begin(), bytes.size()); - delete words; + uint32_t bytes_size = capnp::computeSerializedSizeInWords(msg) * sizeof(capnp::word); + if (e->msg_cache.size() < bytes_size) { + e->msg_cache.resize(bytes_size); + } + kj::ArrayOutputStream output_stream(kj::ArrayPtr(e->msg_cache.data(), bytes_size)); + capnp::writeMessage(output_stream, msg); + e->pm->send(e->encoder_info.publish_name, e->msg_cache.data(), bytes_size); } diff --git a/system/loggerd/encoder/encoder.h b/system/loggerd/encoder/encoder.h index a8bfd5c054..9c23928cc6 100644 --- a/system/loggerd/encoder/encoder.h +++ b/system/loggerd/encoder/encoder.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "cereal/messaging/messaging.h" #include "cereal/visionipc/visionipc.h" @@ -23,7 +24,6 @@ public: static void publisher_publish(VideoEncoder *e, int segment_num, uint32_t idx, VisionIpcBufExtra &extra, unsigned int flags, kj::ArrayPtr header, kj::ArrayPtr dat); - protected: int in_width, in_height; const EncoderInfo encoder_info; @@ -32,4 +32,5 @@ private: // total frames encoded int cnt = 0; std::unique_ptr pm; + std::vector msg_cache; }; diff --git a/system/loggerd/logger.cc b/system/loggerd/logger.cc index 31b302ffe6..f6f0a23dad 100644 --- a/system/loggerd/logger.cc +++ b/system/loggerd/logger.cc @@ -1,22 +1,11 @@ #include "system/loggerd/logger.h" -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include #include -#include #include -#include -#include #include +#include +#include +#include #include "common/params.h" #include "common/swaglog.h" @@ -24,9 +13,12 @@ // ***** log metadata ***** kj::Array logger_build_init_data() { + uint64_t wall_time = nanos_since_epoch(); + MessageBuilder msg; auto init = msg.initEvent().initInitData(); + init.setWallTimeNanos(wall_time); init.setVersion(COMMA_VERSION); init.setDirty(!getenv("CLEAN")); init.setDeviceType(Hardware::get_device_type()); @@ -54,7 +46,7 @@ kj::Array logger_build_init_data() { init.setGitCommit(params_map["GitCommit"]); init.setGitBranch(params_map["GitBranch"]); init.setGitRemote(params_map["GitRemote"]); - init.setPassive(params.getBool("Passive")); + init.setPassive(false); init.setDongleId(params_map["DongleId"]); auto lparams = init.initParams().initEntries(params_map.size()); @@ -96,6 +88,28 @@ kj::Array logger_build_init_data() { return capnp::messageToFlatArray(msg); } +kj::Array logger_build_params_data_car_start() { + MessageBuilder msg; + auto init = msg.initEvent().initInitData(); + + // log params + auto params = Params(); + std::map params_map = params.readAll(); + + auto lparams = init.initParams().initEntries(params_map.size()); + int j = 0; + for (auto& [key, value] : params_map) { + auto lentry = lparams[j]; + lentry.setKey(key); + if ( !(params.getKeyType(key) & DONT_LOG) ) { + lentry.setValue(capnp::Data::Reader((const kj::byte*)value.data(), value.size())); + } + j++; + } + + return capnp::messageToFlatArray(msg); +} + std::string logger_get_route_name() { char route_name[64] = {'\0'}; time_t rawtime = time(NULL); @@ -105,159 +119,75 @@ std::string logger_get_route_name() { return route_name; } -void log_init_data(LoggerState *s) { - auto bytes = s->init_data.asBytes(); - logger_log(s, bytes.begin(), bytes.size(), s->has_qlog); +std::string logger_get_identifier(std::string key) { + // a log identifier is a 32 bit counter, plus a 10 character unique ID. + // e.g. 000001a3--c20ba54385 + + Params params; + uint32_t cnt; + try { + cnt = std::stol(params.get(key)); + } catch (std::exception &e) { + cnt = 0; + } + params.put(key, std::to_string(cnt + 1)); + + std::stringstream ss; + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution dist(0, 15); + for (int i = 0; i < 10; ++i) { + ss << std::hex << dist(mt); + } + + return util::string_format("%08x--%s", cnt, ss.str().c_str()); } - -static void lh_log_sentinel(LoggerHandle *h, SentinelType type) { +static void log_sentinel(LoggerState *log, SentinelType type, int eixt_signal = 0) { MessageBuilder msg; auto sen = msg.initEvent().initSentinel(); sen.setType(type); - sen.setSignal(h->exit_signal); - auto bytes = msg.toBytes(); - - lh_log(h, bytes.begin(), bytes.size(), true); + sen.setSignal(eixt_signal); + log->write(msg.toBytes(), true); } -// ***** logging functions ***** - -void logger_init(LoggerState *s, bool has_qlog) { - pthread_mutex_init(&s->lock, NULL); - - s->part = -1; - s->has_qlog = has_qlog; - s->route_name = logger_get_route_name(); - s->init_data = logger_build_init_data(); +LoggerState::LoggerState(const std::string &log_root) { + route_name = logger_get_route_name(); + route_path = log_root + "/" + route_name; + init_data = logger_build_init_data(); } -static LoggerHandle* logger_open(LoggerState *s, const char* root_path) { - LoggerHandle *h = NULL; - for (int i=0; ihandles[i].refcnt == 0) { - h = &s->handles[i]; - break; - } +LoggerState::~LoggerState() { + if (rlog) { + log_sentinel(this, SentinelType::END_OF_ROUTE, exit_signal); + std::remove(lock_file.c_str()); } - assert(h); - - snprintf(h->segment_path, sizeof(h->segment_path), - "%s/%s--%d", root_path, s->route_name.c_str(), s->part); - - snprintf(h->log_path, sizeof(h->log_path), "%s/rlog", h->segment_path); - snprintf(h->qlog_path, sizeof(h->qlog_path), "%s/qlog", h->segment_path); - snprintf(h->lock_path, sizeof(h->lock_path), "%s.lock", h->log_path); - h->end_sentinel_type = SentinelType::END_OF_SEGMENT; - h->exit_signal = 0; - - if (!util::create_directories(h->segment_path, 0775)) return nullptr; - - FILE* lock_file = fopen(h->lock_path, "wb"); - if (lock_file == NULL) return NULL; - fclose(lock_file); - - h->log = std::make_unique(h->log_path); - if (s->has_qlog) { - h->q_log = std::make_unique(h->qlog_path); - } - - pthread_mutex_init(&h->lock, NULL); - h->refcnt++; - return h; } -int logger_next(LoggerState *s, const char* root_path, - char* out_segment_path, size_t out_segment_path_len, - int* out_part) { - bool is_start_of_route = !s->cur_handle; - - pthread_mutex_lock(&s->lock); - s->part++; - - LoggerHandle* next_h = logger_open(s, root_path); - if (!next_h) { - pthread_mutex_unlock(&s->lock); - return -1; +bool LoggerState::next() { + if (rlog) { + log_sentinel(this, SentinelType::END_OF_SEGMENT); + std::remove(lock_file.c_str()); } - if (s->cur_handle) { - lh_close(s->cur_handle); - } - s->cur_handle = next_h; + segment_path = route_path + "--" + std::to_string(++part); + bool ret = util::create_directories(segment_path, 0775); + assert(ret == true); - if (out_segment_path) { - snprintf(out_segment_path, out_segment_path_len, "%s", next_h->segment_path); - } - if (out_part) { - *out_part = s->part; - } + const std::string rlog_path = segment_path + "/rlog"; + lock_file = rlog_path + ".lock"; + std::ofstream{lock_file}; - pthread_mutex_unlock(&s->lock); + rlog.reset(new RawFile(rlog_path)); + qlog.reset(new RawFile(segment_path + "/qlog")); - // write beginning of log metadata - log_init_data(s); - lh_log_sentinel(s->cur_handle, is_start_of_route ? SentinelType::START_OF_ROUTE : SentinelType::START_OF_SEGMENT); - return 0; + // log init data & sentinel type. + write(init_data.asBytes(), true); + log_sentinel(this, part > 0 ? SentinelType::START_OF_SEGMENT : SentinelType::START_OF_ROUTE); + return true; } -LoggerHandle* logger_get_handle(LoggerState *s) { - pthread_mutex_lock(&s->lock); - LoggerHandle* h = s->cur_handle; - if (h) { - pthread_mutex_lock(&h->lock); - h->refcnt++; - pthread_mutex_unlock(&h->lock); - } - pthread_mutex_unlock(&s->lock); - return h; -} - -void logger_log(LoggerState *s, uint8_t* data, size_t data_size, bool in_qlog) { - pthread_mutex_lock(&s->lock); - if (s->cur_handle) { - lh_log(s->cur_handle, data, data_size, in_qlog); - } - pthread_mutex_unlock(&s->lock); -} - -void logger_close(LoggerState *s, ExitHandler *exit_handler) { - pthread_mutex_lock(&s->lock); - if (s->cur_handle) { - s->cur_handle->exit_signal = exit_handler && exit_handler->signal.load(); - s->cur_handle->end_sentinel_type = SentinelType::END_OF_ROUTE; - lh_close(s->cur_handle); - } - pthread_mutex_unlock(&s->lock); -} - -void lh_log(LoggerHandle* h, uint8_t* data, size_t data_size, bool in_qlog) { - pthread_mutex_lock(&h->lock); - assert(h->refcnt > 0); - h->log->write(data, data_size); - if (in_qlog && h->q_log) { - h->q_log->write(data, data_size); - } - pthread_mutex_unlock(&h->lock); -} - -void lh_close(LoggerHandle* h) { - pthread_mutex_lock(&h->lock); - assert(h->refcnt > 0); - if (h->refcnt == 1) { - // a very ugly hack. only here can guarantee sentinel is the last msg - pthread_mutex_unlock(&h->lock); - lh_log_sentinel(h, h->end_sentinel_type); - pthread_mutex_lock(&h->lock); - } - h->refcnt--; - if (h->refcnt == 0) { - h->log.reset(nullptr); - h->q_log.reset(nullptr); - unlink(h->lock_path); - pthread_mutex_unlock(&h->lock); - pthread_mutex_destroy(&h->lock); - return; - } - pthread_mutex_unlock(&h->lock); +void LoggerState::write(uint8_t* data, size_t size, bool in_qlog) { + rlog->write(data, size); + if (in_qlog) qlog->write(data, size); } diff --git a/system/loggerd/logger.h b/system/loggerd/logger.h index 06b11e72f9..3a7fd21bb6 100644 --- a/system/loggerd/logger.h +++ b/system/loggerd/logger.h @@ -1,27 +1,17 @@ #pragma once -#include - #include -#include -#include #include #include -#include -#include - #include "cereal/messaging/messaging.h" #include "common/util.h" -#include "common/swaglog.h" #include "system/hardware/hw.h" -#define LOGGER_MAX_HANDLES 16 - class RawFile { public: - RawFile(const char* path) { - file = util::safe_fopen(path, "wb"); + RawFile(const std::string &path) { + file = util::safe_fopen(path.c_str(), "wb"); assert(file != nullptr); } ~RawFile() { @@ -41,39 +31,27 @@ class RawFile { typedef cereal::Sentinel::SentinelType SentinelType; -typedef struct LoggerHandle { - pthread_mutex_t lock; - SentinelType end_sentinel_type; - int exit_signal; - int refcnt; - char segment_path[4096]; - char log_path[4096]; - char qlog_path[4096]; - char lock_path[4096]; - std::unique_ptr log, q_log; -} LoggerHandle; -typedef struct LoggerState { - pthread_mutex_t lock; - int part; +class LoggerState { +public: + LoggerState(const std::string& log_root = Path::log_root()); + ~LoggerState(); + bool next(); + void write(uint8_t* data, size_t size, bool in_qlog); + inline int segment() const { return part; } + inline const std::string& segmentPath() const { return segment_path; } + inline const std::string& routeName() const { return route_name; } + inline void write(kj::ArrayPtr bytes, bool in_qlog) { write(bytes.begin(), bytes.size(), in_qlog); } + inline void setExitSignal(int signal) { exit_signal = signal; } + +protected: + int part = -1, exit_signal = 0; + std::string route_path, route_name, segment_path, lock_file; kj::Array init_data; - std::string route_name; - char log_name[64]; - bool has_qlog; - - LoggerHandle handles[LOGGER_MAX_HANDLES]; - LoggerHandle* cur_handle; -} LoggerState; + std::unique_ptr rlog, qlog; +}; kj::Array logger_build_init_data(); +kj::Array logger_build_params_data_car_start(); std::string logger_get_route_name(); -void logger_init(LoggerState *s, bool has_qlog); -int logger_next(LoggerState *s, const char* root_path, - char* out_segment_path, size_t out_segment_path_len, - int* out_part); -LoggerHandle* logger_get_handle(LoggerState *s); -void logger_close(LoggerState *s, ExitHandler *exit_handler=nullptr); -void logger_log(LoggerState *s, uint8_t* data, size_t data_size, bool in_qlog); - -void lh_log(LoggerHandle* h, uint8_t* data, size_t data_size, bool in_qlog); -void lh_close(LoggerHandle* h); +std::string logger_get_identifier(std::string key); diff --git a/system/loggerd/loggerd.cc b/system/loggerd/loggerd.cc index adb24c913c..27dfa187c4 100644 --- a/system/loggerd/loggerd.cc +++ b/system/loggerd/loggerd.cc @@ -6,6 +6,7 @@ #include #include +#include "common/params.h" #include "system/loggerd/encoder/encoder.h" #include "system/loggerd/loggerd.h" #include "system/loggerd/video_writer.h" @@ -13,9 +14,7 @@ ExitHandler do_exit; struct LoggerdState { - LoggerState logger = {}; - char segment_path[4096]; - std::atomic rotate_segment; + LoggerState logger; std::atomic last_camera_seen_tms; std::atomic ready_to_rotate; // count of encoders ready to rotate int max_waiting = 0; @@ -23,13 +22,11 @@ struct LoggerdState { }; void logger_rotate(LoggerdState *s) { - int segment = -1; - int err = logger_next(&s->logger, Path::log_root().c_str(), s->segment_path, sizeof(s->segment_path), &segment); - assert(err == 0); - s->rotate_segment = segment; + bool ret =s->logger.next(); + assert(ret); s->ready_to_rotate = 0; s->last_rotate_tms = millis_since_boot(); - LOGW((s->logger.part == 0) ? "logging to %s" : "rotated to %s", s->segment_path); + LOGW((s->logger.segment() == 0) ? "logging to %s" : "rotated to %s", s->logger.segmentPath().c_str()); } void rotate_if_needed(LoggerdState *s) { @@ -85,16 +82,16 @@ int handle_encoder_msg(LoggerdState *s, Message *msg, std::string &name, struct } int offset_segment_num = idx.getSegmentNum() - re.encoderd_segment_offset; - if (offset_segment_num == s->rotate_segment) { + if (offset_segment_num == s->logger.segment()) { // loggerd is now on the segment that matches this packet // if this is a new segment, we close any possible old segments, move to the new, and process any queued packets - if (re.current_segment != s->rotate_segment) { + if (re.current_segment != s->logger.segment()) { if (re.recording) { re.writer.reset(); re.recording = false; } - re.current_segment = s->rotate_segment; + re.current_segment = s->logger.segment(); re.marked_ready_to_rotate = false; // we are in this segment now, process any queued messages before this one if (!re.q.empty()) { @@ -117,7 +114,7 @@ int handle_encoder_msg(LoggerdState *s, Message *msg, std::string &name, struct // if we aren't actually recording, don't create the writer if (encoder_info.record) { assert(encoder_info.filename != NULL); - re.writer.reset(new VideoWriter(s->segment_path, + re.writer.reset(new VideoWriter(s->logger.segmentPath().c_str(), encoder_info.filename, idx.getType() != cereal::EncodeIndex::Type::FULL_H_E_V_C, encoder_info.frame_width, encoder_info.frame_height, encoder_info.fps, idx.getType())); // write the header @@ -149,28 +146,28 @@ int handle_encoder_msg(LoggerdState *s, Message *msg, std::string &name, struct evt.setLogMonoTime(event.getLogMonoTime()); (evt.*(encoder_info.set_encode_idx_func))(idx); auto new_msg = bmsg.toBytes(); - logger_log(&s->logger, (uint8_t *)new_msg.begin(), new_msg.size(), true); // always in qlog? + s->logger.write((uint8_t *)new_msg.begin(), new_msg.size(), true); // always in qlog? bytes_count += new_msg.size(); // free the message, we used it delete msg; - } else if (offset_segment_num > s->rotate_segment) { + } else if (offset_segment_num > s->logger.segment()) { // encoderd packet has a newer segment, this means encoderd has rolled over if (!re.marked_ready_to_rotate) { re.marked_ready_to_rotate = true; ++s->ready_to_rotate; LOGD("rotate %d -> %d ready %d/%d for %s", - s->rotate_segment.load(), offset_segment_num, + s->logger.segment(), offset_segment_num, s->ready_to_rotate.load(), s->max_waiting, name.c_str()); } // queue up all the new segment messages, they go in after the rotate re.q.push_back(msg); } else { - LOGE("%s: encoderd packet has a older segment!!! idx.getSegmentNum():%d s->rotate_segment:%d re.encoderd_segment_offset:%d", - name.c_str(), idx.getSegmentNum(), s->rotate_segment.load(), re.encoderd_segment_offset); + LOGE("%s: encoderd packet has a older segment!!! idx.getSegmentNum():%d s->logger.segment():%d re.encoderd_segment_offset:%d", + name.c_str(), idx.getSegmentNum(), s->logger.segment(), re.encoderd_segment_offset); // free the message, it's useless. this should never happen // actually, this can happen if you restart encoderd - re.encoderd_segment_offset = -s->rotate_segment.load(); + re.encoderd_segment_offset = -s->logger.segment(); delete msg; } @@ -179,19 +176,25 @@ int handle_encoder_msg(LoggerdState *s, Message *msg, std::string &name, struct void handle_user_flag(LoggerdState *s) { static int prev_segment = -1; - if (s->rotate_segment == prev_segment) return; + if (s->logger.segment() == prev_segment) return; - LOGW("preserving %s", s->segment_path); + LOGW("preserving %s", s->logger.segmentPath().c_str()); #ifdef __APPLE__ - int ret = setxattr(s->segment_path, PRESERVE_ATTR_NAME, &PRESERVE_ATTR_VALUE, 1, 0, 0); + int ret = setxattr(s->logger.segmentPath().c_str(), PRESERVE_ATTR_NAME, &PRESERVE_ATTR_VALUE, 1, 0, 0); #else - int ret = setxattr(s->segment_path, PRESERVE_ATTR_NAME, &PRESERVE_ATTR_VALUE, 1, 0); + int ret = setxattr(s->logger.segmentPath().c_str(), PRESERVE_ATTR_NAME, &PRESERVE_ATTR_VALUE, 1, 0); #endif if (ret) { - LOGE("setxattr %s failed for %s: %s", PRESERVE_ATTR_NAME, s->segment_path, strerror(errno)); + LOGE("setxattr %s failed for %s: %s", PRESERVE_ATTR_NAME, s->logger.segmentPath().c_str(), strerror(errno)); } - prev_segment = s->rotate_segment.load(); + + // mark route for uploading + Params params; + std::string routes = Params().get("AthenadRecentlyViewedRoutes"); + params.put("AthenadRecentlyViewedRoutes", routes + "," + s->logger.routeName()); + + prev_segment = s->logger.segment(); } void loggerd_thread() { @@ -228,9 +231,8 @@ void loggerd_thread() { LoggerdState s; // init logger - logger_init(&s.logger, true); logger_rotate(&s); - Params().put("CurrentRoute", s.logger.route_name); + Params().put("CurrentRoute", s.logger.routeName()); std::map encoder_infos_dict; for (const auto &cam : cameras_logged) { @@ -261,7 +263,7 @@ void loggerd_thread() { s.last_camera_seen_tms = millis_since_boot(); bytes_count += handle_encoder_msg(&s, msg, service.name, remote_encoders[sock], encoder_infos_dict[service.name]); } else { - logger_log(&s.logger, (uint8_t *)msg->getData(), msg->getSize(), in_qlog); + s.logger.write((uint8_t *)msg->getData(), msg->getSize(), in_qlog); bytes_count += msg->getSize(); delete msg; } @@ -283,7 +285,7 @@ void loggerd_thread() { } LOGW("closing logger"); - logger_close(&s.logger, &do_exit); + s.logger.setExitSignal(do_exit.signal); if (do_exit.power_failure) { LOGE("power failure"); diff --git a/system/loggerd/tests/fill.py b/system/loggerd/tests/fill.py deleted file mode 100755 index 5e6f887b12..0000000000 --- a/system/loggerd/tests/fill.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python3 -"""Script to fill up storage with fake data""" - -from pathlib import Path - -from openpilot.system.hardware.hw import Paths -from openpilot.system.loggerd.config import get_available_percent -from openpilot.system.loggerd.tests.loggerd_tests_common import create_random_file - - -if __name__ == "__main__": - segment_idx = 0 - while True: - seg_name = f"1970-01-01--00-00-00--{segment_idx}" - seg_path = Path(Paths.log_root()) / seg_name - - print(seg_path) - - create_random_file(seg_path / "fcamera.hevc", 36) - create_random_file(seg_path / "rlog.bz2", 2) - - segment_idx += 1 - - # Fill up to 99 percent - available_percent = get_available_percent() - if available_percent < 1.0: - break diff --git a/system/loggerd/tests/loggerd_tests_common.py b/system/loggerd/tests/loggerd_tests_common.py index 8bfb571861..3aa9e40531 100644 --- a/system/loggerd/tests/loggerd_tests_common.py +++ b/system/loggerd/tests/loggerd_tests_common.py @@ -3,10 +3,12 @@ import random import unittest from pathlib import Path from typing import Optional -from openpilot.system.hardware.hw import Paths + import openpilot.system.loggerd.deleter as deleter import openpilot.system.loggerd.uploader as uploader +from openpilot.common.params import Params +from openpilot.system.hardware.hw import Paths from openpilot.system.loggerd.xattr_cache import setxattr @@ -53,25 +55,6 @@ class MockApiIgnore(): def get_token(self): return "fake-token" -class MockParams(): - def __init__(self): - self.params = { - "DongleId": b"0000000000000000", - "IsOffroad": b"1", - } - - def get(self, k, block=False, encoding=None): - val = self.params[k] - - if encoding is not None: - return val.decode(encoding) - else: - return val - - def get_bool(self, k): - val = self.params[k] - return (val == b'1') - class UploaderTestCase(unittest.TestCase): f_type = "UNKNOWN" @@ -86,7 +69,6 @@ class UploaderTestCase(unittest.TestCase): def setUp(self): uploader.Api = MockApi - uploader.Params = MockParams uploader.fake_upload = True uploader.force_wifi = True uploader.allow_sleep = False @@ -95,6 +77,10 @@ class UploaderTestCase(unittest.TestCase): self.seg_format2 = "2019-05-18--11-22-33--{}" self.seg_dir = self.seg_format.format(self.seg_num) + self.params = Params() + self.params.put("IsOffroad", "1") + self.params.put("DongleId", "0000000000000000") + def make_file_with_data(self, f_dir: str, fn: str, size_mb: float = .1, lock: bool = False, upload_xattr: Optional[bytes] = None, preserve_xattr: Optional[bytes] = None) -> Path: file_path = Path(Paths.log_root()) / f_dir / fn diff --git a/system/loggerd/tests/test_encoder.py b/system/loggerd/tests/test_encoder.py index bec956a316..bd076dc5f3 100755 --- a/system/loggerd/tests/test_encoder.py +++ b/system/loggerd/tests/test_encoder.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import math import os +import pytest import random import shutil import subprocess @@ -16,7 +17,7 @@ from openpilot.common.timeout import Timeout from openpilot.system.hardware import TICI from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.tools.lib.logreader import LogReader -from openpilot.selfdrive.hardware.hw import Paths +from openpilot.system.hardware.hw import Paths SEGMENT_LENGTH = 2 FULL_SIZE = 2507572 @@ -31,14 +32,9 @@ CAMERAS = [ FILE_SIZE_TOLERANCE = 0.5 +@pytest.mark.tici # TODO: all of loggerd should work on PC class TestEncoder(unittest.TestCase): - # TODO: all of loggerd should work on PC - @classmethod - def setUpClass(cls): - if not TICI: - raise unittest.SkipTest - def setUp(self): self._clear_logs() os.environ["LOGGERD_TEST"] = "1" diff --git a/system/loggerd/tests/test_logger.cc b/system/loggerd/tests/test_logger.cc index 9f815c2189..2dae136e13 100644 --- a/system/loggerd/tests/test_logger.cc +++ b/system/loggerd/tests/test_logger.cc @@ -1,16 +1,5 @@ -#include - -#include -#include -#include -#include -#include - #include "catch2/catch.hpp" -#include "cereal/messaging/messaging.h" -#include "common/util.h" #include "system/loggerd/logger.h" -#include "tools/replay/util.h" typedef cereal::Sentinel::SentinelType SentinelType; @@ -57,91 +46,29 @@ void verify_segment(const std::string &route_path, int segment, int max_segment, } } -void write_msg(LoggerHandle *logger) { +void write_msg(LoggerState *logger) { MessageBuilder msg; msg.initEvent().initClocks(); - auto bytes = msg.toBytes(); - lh_log(logger, bytes.begin(), bytes.size(), true); + logger->write(msg.toBytes(), true); } TEST_CASE("logger") { + const int segment_cnt = 100; const std::string log_root = "/tmp/test_logger"; system(("rm " + log_root + " -rf").c_str()); - - ExitHandler do_exit; - - LoggerState logger = {}; - logger_init(&logger, true); - char segment_path[PATH_MAX] = {}; - int segment = -1; - - SECTION("single thread logging & rotation(100 segments, one thread)") { - const int segment_cnt = 100; + std::string route_name; + { + LoggerState logger(log_root); + route_name = logger.routeName(); for (int i = 0; i < segment_cnt; ++i) { - REQUIRE(logger_next(&logger, log_root.c_str(), segment_path, sizeof(segment_path), &segment) == 0); - REQUIRE(util::file_exists(std::string(segment_path) + "/rlog.lock")); - REQUIRE(segment == i); - write_msg(logger.cur_handle); - } - do_exit = true; - do_exit.signal = 1; - logger_close(&logger, &do_exit); - for (int i = 0; i < segment_cnt; ++i) { - verify_segment(log_root + "/" + logger.route_name, i, segment_cnt, 1); + REQUIRE(logger.next()); + REQUIRE(util::file_exists(logger.segmentPath() + "/rlog.lock")); + REQUIRE(logger.segment() == i); + write_msg(&logger); } + logger.setExitSignal(1); } - SECTION("multiple threads logging & rotation(100 segments, 10 threads") { - const int segment_cnt = 100, thread_cnt = 10; - std::atomic event_cnt[segment_cnt] = {}; - std::atomic main_segment = -1; - - auto logging_thread = [&]() -> void { - LoggerHandle *lh = logger_get_handle(&logger); - assert(lh != nullptr); - int segment = main_segment; - int delayed_cnt = 0; - while (!do_exit) { - // write 2 more messages in the current segment and then rotate to the new segment. - if (main_segment > segment && ++delayed_cnt == 2) { - lh_close(lh); - lh = logger_get_handle(&logger); - segment = main_segment; - delayed_cnt = 0; - } - write_msg(lh); - event_cnt[segment] += 1; - usleep(1); - } - lh_close(lh); - }; - - // start logging - std::vector threads; - for (int i = 0; i < segment_cnt; ++i) { - REQUIRE(logger_next(&logger, log_root.c_str(), segment_path, sizeof(segment_path), &segment) == 0); - REQUIRE(segment == i); - main_segment = segment; - if (i == 0) { - for (int j = 0; j < thread_cnt; ++j) { - threads.push_back(std::thread(logging_thread)); - } - } - for (int j = 0; j < 100; ++j) { - write_msg(logger.cur_handle); - usleep(1); - } - event_cnt[segment] += 100; - } - - // end logging - for (auto &t : threads) t.join(); - do_exit = true; - do_exit.signal = 1; - logger_close(&logger, &do_exit); - REQUIRE(logger.cur_handle->refcnt == 0); - - for (int i = 0; i < segment_cnt; ++i) { - verify_segment(log_root + "/" + logger.route_name, i, segment_cnt, event_cnt[i]); - } + for (int i = 0; i < segment_cnt; ++i) { + verify_segment(log_root + "/" + route_name, i, segment_cnt, 1); } } diff --git a/system/loggerd/tests/test_loggerd.py b/system/loggerd/tests/test_loggerd.py index 3ea29b0d82..0cd8548809 100755 --- a/system/loggerd/tests/test_loggerd.py +++ b/system/loggerd/tests/test_loggerd.py @@ -1,18 +1,19 @@ #!/usr/bin/env python3 import numpy as np import os +import re import random import string import subprocess import time -import unittest from collections import defaultdict from pathlib import Path from typing import Dict, List +from flaky import flaky import cereal.messaging as messaging from cereal import log -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.common.basedir import BASEDIR from openpilot.common.params import Params from openpilot.common.timeout import Timeout @@ -21,20 +22,18 @@ from openpilot.system.loggerd.xattr_cache import getxattr from openpilot.system.loggerd.deleter import PRESERVE_ATTR_NAME, PRESERVE_ATTR_VALUE from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.system.version import get_version +from openpilot.tools.lib.helpers import RE from openpilot.tools.lib.logreader import LogReader from cereal.visionipc import VisionIpcServer, VisionStreamType from openpilot.common.transformations.camera import tici_f_frame_size, tici_d_frame_size, tici_e_frame_size SentinelType = log.Sentinel.SentinelType -CEREAL_SERVICES = [f for f in log.Event.schema.union_fields if f in service_list - and service_list[f].should_log and "encode" not in f.lower()] +CEREAL_SERVICES = [f for f in log.Event.schema.union_fields if f in SERVICE_LIST + and SERVICE_LIST[f].should_log and "encode" not in f.lower()] -class TestLoggerd(unittest.TestCase): - def setUp(self): - os.environ.pop("LOG_ROOT", None) - +class TestLoggerd: def _get_latest_log_dir(self): log_dirs = sorted(Path(Paths.log_root()).iterdir(), key=lambda f: f.stat().st_mtime) return log_dirs[-1] @@ -68,21 +67,21 @@ class TestLoggerd(unittest.TestCase): def _check_init_data(self, msgs): msg = msgs[0] - self.assertEqual(msg.which(), 'initData') + assert msg.which() == 'initData' def _check_sentinel(self, msgs, route): start_type = SentinelType.startOfRoute if route else SentinelType.startOfSegment - self.assertTrue(msgs[1].sentinel.type == start_type) + assert msgs[1].sentinel.type == start_type end_type = SentinelType.endOfRoute if route else SentinelType.endOfSegment - self.assertTrue(msgs[-1].sentinel.type == end_type) + assert msgs[-1].sentinel.type == end_type def _publish_random_messages(self, services: List[str]) -> Dict[str, list]: pm = messaging.PubMaster(services) managed_processes["loggerd"].start() for s in services: - self.assertTrue(pm.wait_for_readers_to_update(s, timeout=5)) + assert pm.wait_for_readers_to_update(s, timeout=5) sent_msgs = defaultdict(list) for _ in range(random.randint(2, 10) * 100): @@ -93,10 +92,9 @@ class TestLoggerd(unittest.TestCase): m = messaging.new_message(s, random.randint(2, 10)) pm.send(s, m) sent_msgs[s].append(m) - time.sleep(0.01) for s in services: - self.assertTrue(pm.wait_for_readers_to_update(s, timeout=5)) + assert pm.wait_for_readers_to_update(s, timeout=5) managed_processes["loggerd"].stop() return sent_msgs @@ -113,35 +111,33 @@ class TestLoggerd(unittest.TestCase): ("GitRemote", "gitRemote", "remote"), ] params = Params() - params.clear_all() for k, _, v in fake_params: params.put(k, v) - params.put("LaikadEphemerisV3", "abc") + params.put("AccessToken", "abc") lr = list(LogReader(str(self._gen_bootlog()))) initData = lr[0].initData - self.assertTrue(initData.dirty != bool(os.environ["CLEAN"])) - self.assertEqual(initData.version, get_version()) + assert initData.dirty != bool(os.environ["CLEAN"]) + assert initData.version == get_version() if os.path.isfile("/proc/cmdline"): with open("/proc/cmdline") as f: - self.assertEqual(list(initData.kernelArgs), f.read().strip().split(" ")) + assert list(initData.kernelArgs) == f.read().strip().split(" ") with open("/proc/version") as f: - self.assertEqual(initData.kernelVersion, f.read()) + assert initData.kernelVersion == f.read() # check params logged_params = {entry.key: entry.value for entry in initData.params.entries} - expected_params = {k for k, _, __ in fake_params} | {'LaikadEphemerisV3'} + expected_params = {k for k, _, __ in fake_params} | {'AccessToken', 'BootCount'} assert set(logged_params.keys()) == expected_params, set(logged_params.keys()) ^ expected_params - assert logged_params['LaikadEphemerisV3'] == b'', f"DONT_LOG param value was logged: {repr(logged_params['LaikadEphemerisV3'])}" + assert logged_params['AccessToken'] == b'', f"DONT_LOG param value was logged: {repr(logged_params['AccessToken'])}" for param_key, initData_key, v in fake_params: - self.assertEqual(getattr(initData, initData_key), v) - self.assertEqual(logged_params[param_key].decode(), v) - - params.put("LaikadEphemerisV3", "") + assert getattr(initData, initData_key) == v + assert logged_params[param_key].decode() == v + @flaky(max_runs=3) def test_rotation(self): os.environ["LOGGERD_TEST"] = "1" Params().put("RecordFront", "1") @@ -162,11 +158,10 @@ class TestLoggerd(unittest.TestCase): os.environ["LOGGERD_SEGMENT_LENGTH"] = str(length) managed_processes["loggerd"].start() managed_processes["encoderd"].start() - time.sleep(1) + assert pm.wait_for_readers_to_update("roadCameraState", timeout=5) fps = 20.0 for n in range(1, int(num_segs*length*fps)+1): - time_start = time.monotonic() for stream_type, frame_spec, state in streams: dat = np.empty(frame_spec[2], dtype=np.uint8) vipc_server.send(stream_type, dat[:].flatten().tobytes(), n, n/fps, n/fps) @@ -175,7 +170,9 @@ class TestLoggerd(unittest.TestCase): frame = getattr(camera_state, state) frame.frameId = n pm.send(state, camera_state) - time.sleep(max((1.0/fps) - (time.monotonic() - time_start), 0)) + + for _, _, state in streams: + assert pm.wait_for_readers_to_update(state, timeout=5, dt=0.001) managed_processes["loggerd"].stop() managed_processes["encoderd"].stop() @@ -185,7 +182,7 @@ class TestLoggerd(unittest.TestCase): p = Path(f"{route_path}--{n}") logged = {f.name for f in p.iterdir() if f.is_file()} diff = logged ^ expected_files - self.assertEqual(len(diff), 0, f"didn't get all expected files. run={_} seg={n} {route_path=}, {diff=}\n{logged=} {expected_files=}") + assert len(diff) == 0, f"didn't get all expected files. run={_} seg={n} {route_path=}, {diff=}\n{logged=} {expected_files=}" def test_bootlog(self): # generate bootlog with fake launch log @@ -216,11 +213,17 @@ class TestLoggerd(unittest.TestCase): with open(path, "rb") as f: expected_val = f.read() bootlog_val = [e.value for e in boot.pstore.entries if e.key == fn][0] - self.assertEqual(expected_val, bootlog_val) + assert expected_val == bootlog_val + + # next one should increment by one + bl1 = re.match(RE.LOG_ID_V2, bootlog_path.name) + bl2 = re.match(RE.LOG_ID_V2, self._gen_bootlog().name) + assert bl1.group('uid') != bl2.group('uid') + assert int(bl1.group('count')) == 0 and int(bl2.group('count')) == 1 def test_qlog(self): - qlog_services = [s for s in CEREAL_SERVICES if service_list[s].decimation is not None] - no_qlog_services = [s for s in CEREAL_SERVICES if service_list[s].decimation is None] + qlog_services = [s for s in CEREAL_SERVICES if SERVICE_LIST[s].decimation is not None] + no_qlog_services = [s for s in CEREAL_SERVICES if SERVICE_LIST[s].decimation is None] services = random.sample(qlog_services, random.randint(2, min(10, len(qlog_services)))) + \ random.sample(no_qlog_services, random.randint(2, min(10, len(no_qlog_services)))) @@ -242,11 +245,11 @@ class TestLoggerd(unittest.TestCase): if s in no_qlog_services: # check services with no specific decimation aren't in qlog - self.assertEqual(recv_cnt, 0, f"got {recv_cnt} {s} msgs in qlog") + assert recv_cnt == 0, f"got {recv_cnt} {s} msgs in qlog" else: # check logged message count matches decimation - expected_cnt = (len(msgs) - 1) // service_list[s].decimation + 1 - self.assertEqual(recv_cnt, expected_cnt, f"expected {expected_cnt} msgs for {s}, got {recv_cnt}") + expected_cnt = (len(msgs) - 1) // SERVICE_LIST[s].decimation + 1 + assert recv_cnt == expected_cnt, f"expected {expected_cnt} msgs for {s}, got {recv_cnt}" def test_rlog(self): services = random.sample(CEREAL_SERVICES, random.randint(5, 10)) @@ -263,22 +266,19 @@ class TestLoggerd(unittest.TestCase): for m in lr: sent = sent_msgs[m.which()].pop(0) sent.clear_write_flag() - self.assertEqual(sent.to_bytes(), m.as_builder().to_bytes()) + assert sent.to_bytes() == m.as_builder().to_bytes() def test_preserving_flagged_segments(self): services = set(random.sample(CEREAL_SERVICES, random.randint(5, 10))) | {"userFlag"} self._publish_random_messages(services) segment_dir = self._get_latest_log_dir() - self.assertEqual(getxattr(segment_dir, PRESERVE_ATTR_NAME), PRESERVE_ATTR_VALUE) + assert getxattr(segment_dir, PRESERVE_ATTR_NAME) == PRESERVE_ATTR_VALUE def test_not_preserving_unflagged_segments(self): services = set(random.sample(CEREAL_SERVICES, random.randint(5, 10))) - {"userFlag"} self._publish_random_messages(services) segment_dir = self._get_latest_log_dir() - self.assertIsNone(getxattr(segment_dir, PRESERVE_ATTR_NAME)) + assert getxattr(segment_dir, PRESERVE_ATTR_NAME) is None - -if __name__ == "__main__": - unittest.main() diff --git a/system/loggerd/tests/test_uploader.py b/system/loggerd/tests/test_uploader.py index a7349fc5e4..b674de5438 100755 --- a/system/loggerd/tests/test_uploader.py +++ b/system/loggerd/tests/test_uploader.py @@ -9,8 +9,8 @@ from pathlib import Path from typing import List, Optional from openpilot.system.hardware.hw import Paths -from openpilot.system.swaglog import cloudlog -from openpilot.system.loggerd.uploader import uploader_fn, UPLOAD_ATTR_NAME, UPLOAD_ATTR_VALUE +from openpilot.common.swaglog import cloudlog +from openpilot.system.loggerd.uploader import main, UPLOAD_ATTR_NAME, UPLOAD_ATTR_VALUE from openpilot.system.loggerd.tests.loggerd_tests_common import UploaderTestCase @@ -45,7 +45,7 @@ class TestUploader(UploaderTestCase): def start_thread(self): self.end_event = threading.Event() - self.up_thread = threading.Thread(target=uploader_fn, args=[self.end_event]) + self.up_thread = threading.Thread(target=main, args=[self.end_event]) self.up_thread.daemon = True self.up_thread.start() diff --git a/system/loggerd/tools/mark_all_uploaded.py b/system/loggerd/tools/mark_all_uploaded.py deleted file mode 100644 index 0502184380..0000000000 --- a/system/loggerd/tools/mark_all_uploaded.py +++ /dev/null @@ -1,8 +0,0 @@ -import os -from openpilot.system.hardware.hw import Paths -from openpilot.system.loggerd.uploader import UPLOAD_ATTR_NAME, UPLOAD_ATTR_VALUE - -for folder in os.walk(Paths.log_root()): - for file1 in folder[2]: - full_path = os.path.join(folder[0], file1) - os.setxattr(full_path, UPLOAD_ATTR_NAME, UPLOAD_ATTR_VALUE) diff --git a/system/loggerd/tools/mark_unuploaded.py b/system/loggerd/tools/mark_unuploaded.py deleted file mode 100755 index ef50280441..0000000000 --- a/system/loggerd/tools/mark_unuploaded.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -from openpilot.system.loggerd.uploader import UPLOAD_ATTR_NAME - -for fn in sys.argv[1:]: - print(f"unmarking {fn}") - os.removexattr(fn, UPLOAD_ATTR_NAME) diff --git a/system/loggerd/uploader.py b/system/loggerd/uploader.py index b520adc94c..e7b76bcd27 100755 --- a/system/loggerd/uploader.py +++ b/system/loggerd/uploader.py @@ -8,29 +8,30 @@ import requests import threading import time import traceback -from pathlib import Path -from typing import BinaryIO, Iterator, List, Optional, Tuple, Union +import datetime +from typing import BinaryIO, Iterator, List, Optional, Tuple from cereal import log import cereal.messaging as messaging from openpilot.common.api import Api from openpilot.common.params import Params from openpilot.common.realtime import set_core_affinity -from openpilot.system.hardware import TICI from openpilot.system.hardware.hw import Paths from openpilot.system.loggerd.xattr_cache import getxattr, setxattr -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog NetworkType = log.DeviceState.NetworkType UPLOAD_ATTR_NAME = 'user.upload' UPLOAD_ATTR_VALUE = b'1' -UPLOAD_QLOG_QCAM_MAX_SIZE = 100 * 1e6 # MB +UPLOAD_QLOG_QCAM_MAX_SIZE = 5 * 1e6 # MB allow_sleep = bool(os.getenv("UPLOADER_SLEEP", "1")) force_wifi = os.getenv("FORCEWIFI") is not None fake_upload = os.getenv("FAKEUPLOAD") is not None +OFFROAD_TRANSITION_TIMEOUT = 900. # wait until offroad for 15 minutes before allowing uploads + class FakeRequest: def __init__(self): @@ -43,23 +44,24 @@ class FakeResponse: self.request = FakeRequest() -UploadResponse = Union[requests.Response, FakeResponse] - def get_directory_sort(d: str) -> List[str]: return [s.rjust(10, '0') for s in d.rsplit('--', 1)] def listdir_by_creation(d: str) -> List[str]: + if not os.path.isdir(d): + return [] + try: - paths = os.listdir(d) + paths = [f for f in os.listdir(d) if os.path.isdir(os.path.join(d, f))] paths = sorted(paths, key=get_directory_sort) return paths except OSError: cloudlog.exception("listdir_by_creation failed") - return list() + return [] def clear_locks(root: str) -> None: - for logname in os.listdir(root): - path = os.path.join(root, logname) + for logdir in os.listdir(root): + path = os.path.join(root, logdir) try: for fname in os.listdir(path): if fname.endswith(".lock"): @@ -74,34 +76,20 @@ class Uploader: self.api = Api(dongle_id) self.root = root - self.last_resp: Optional[UploadResponse] = None - self.last_exc: Optional[Tuple[Exception, str]] = None - - self.immediate_size = 0 - self.immediate_count = 0 + self.params = Params() # stats for last successfully uploaded file - self.last_time = 0.0 - self.last_speed = 0.0 self.last_filename = "" self.immediate_folders = ["crash/", "boot/"] self.immediate_priority = {"qlog": 0, "qlog.bz2": 0, "qcamera.ts": 1} - def get_upload_sort(self, name: str) -> int: - if name in self.immediate_priority: - return self.immediate_priority[name] - return 1000 + def list_upload_files(self, metered: bool) -> Iterator[Tuple[str, str, str]]: + r = self.params.get("AthenadRecentlyViewedRoutes", encoding="utf8") + requested_routes = [] if r is None else r.split(",") - def list_upload_files(self) -> Iterator[Tuple[str, str, str]]: - if not os.path.isdir(self.root): - return - - self.immediate_size = 0 - self.immediate_count = 0 - - for logname in listdir_by_creation(self.root): - path = os.path.join(self.root, logname) + for logdir in listdir_by_creation(self.root): + path = os.path.join(self.root, logdir) try: names = os.listdir(path) except OSError: @@ -110,29 +98,33 @@ class Uploader: if any(name.endswith(".lock") for name in names): continue - for name in sorted(names, key=self.get_upload_sort): - key = os.path.join(logname, name) + for name in sorted(names, key=lambda n: self.immediate_priority.get(n, 1000)): + key = os.path.join(logdir, name) fn = os.path.join(path, name) # skip files already uploaded try: + ctime = os.path.getctime(fn) is_uploaded = getxattr(fn, UPLOAD_ATTR_NAME) == UPLOAD_ATTR_VALUE except OSError: - cloudlog.event("uploader_getxattr_failed", exc=self.last_exc, key=key, fn=fn) - is_uploaded = True # deleter could have deleted + cloudlog.event("uploader_getxattr_failed", key=key, fn=fn) + # deleter could have deleted, so skip + continue if is_uploaded: continue - try: - if name in self.immediate_priority: - self.immediate_count += 1 - self.immediate_size += os.path.getsize(fn) - except OSError: - pass + # limit uploading on metered connections + if metered: + dt = datetime.timedelta(hours=12) + if logdir in self.immediate_folders and (datetime.datetime.now() - datetime.datetime.fromtimestamp(ctime)) < dt: + continue + + if name == "qcamera.ts" and not any(logdir.startswith(r.split('|')[-1]) for r in requested_routes): + continue yield name, key, fn - def next_file_to_upload(self) -> Optional[Tuple[str, str, str]]: - upload_files = list(self.list_upload_files()) + def next_file_to_upload(self, metered: bool) -> Optional[Tuple[str, str, str]]: + upload_files = list(self.list_upload_files(metered)) for name, key, fn in upload_files: if any(f in fn for f in self.immediate_folders): @@ -144,45 +136,28 @@ class Uploader: return None - def do_upload(self, key: str, fn: str) -> None: - try: - url_resp = self.api.get("v1.4/" + self.dongle_id + "/upload_url/", timeout=10, path=key, access_token=self.api.get_token()) - if url_resp.status_code == 412: - self.last_resp = url_resp - return + def do_upload(self, key: str, fn: str): + url_resp = self.api.get("v1.4/" + self.dongle_id + "/upload_url/", timeout=10, path=key, access_token=self.api.get_token()) + if url_resp.status_code == 412: + return url_resp - url_resp_json = json.loads(url_resp.text) - url = url_resp_json['url'] - headers = url_resp_json['headers'] - cloudlog.debug("upload_url v1.4 %s %s", url, str(headers)) + url_resp_json = json.loads(url_resp.text) + url = url_resp_json['url'] + headers = url_resp_json['headers'] + cloudlog.debug("upload_url v1.4 %s %s", url, str(headers)) - if fake_upload: - cloudlog.debug(f"*** WARNING, THIS IS A FAKE UPLOAD TO {url} ***") - self.last_resp = FakeResponse() + if fake_upload: + return FakeResponse() + + with open(fn, "rb") as f: + data: BinaryIO + if key.endswith('.bz2') and not fn.endswith('.bz2'): + compressed = bz2.compress(f.read()) + data = io.BytesIO(compressed) else: - with open(fn, "rb") as f: - data: BinaryIO - if key.endswith('.bz2') and not fn.endswith('.bz2'): - compressed = bz2.compress(f.read()) - data = io.BytesIO(compressed) - else: - data = f + data = f - self.last_resp = requests.put(url, data=data, headers=headers, timeout=10) - except Exception as e: - self.last_exc = (e, traceback.format_exc()) - raise - - def normal_upload(self, key: str, fn: str) -> Optional[UploadResponse]: - self.last_resp = None - self.last_exc = None - - try: - self.do_upload(key, fn) - except Exception: - pass - - return self.last_resp + return requests.put(url, data=data, headers=headers, timeout=10) def upload(self, name: str, key: str, fn: str, network_type: int, metered: bool) -> bool: try: @@ -201,44 +176,57 @@ class Uploader: success = True else: start_time = time.monotonic() - stat = self.normal_upload(key, fn) + + stat = None + last_exc = None + try: + stat = self.do_upload(key, fn) + except Exception as e: + last_exc = (e, traceback.format_exc()) + if stat is not None and stat.status_code in (200, 201, 401, 403, 412): self.last_filename = fn - self.last_time = time.monotonic() - start_time + dt = time.monotonic() - start_time if stat.status_code == 412: - self.last_speed = 0 cloudlog.event("upload_ignored", key=key, fn=fn, sz=sz, network_type=network_type, metered=metered) else: content_length = int(stat.request.headers.get("Content-Length", 0)) - self.last_speed = (content_length / 1e6) / self.last_time + speed = (content_length / 1e6) / dt cloudlog.event("upload_success", key=key, fn=fn, sz=sz, content_length=content_length, - network_type=network_type, metered=metered, speed=self.last_speed) + network_type=network_type, metered=metered, speed=speed) success = True else: success = False - cloudlog.event("upload_failed", stat=stat, exc=self.last_exc, key=key, fn=fn, sz=sz, network_type=network_type, metered=metered) + cloudlog.event("upload_failed", stat=stat, exc=last_exc, key=key, fn=fn, sz=sz, network_type=network_type, metered=metered) if success: # tag file as uploaded try: setxattr(fn, UPLOAD_ATTR_NAME, UPLOAD_ATTR_VALUE) except OSError: - cloudlog.event("uploader_setxattr_failed", exc=self.last_exc, key=key, fn=fn, sz=sz) + cloudlog.event("uploader_setxattr_failed", exc=last_exc, key=key, fn=fn, sz=sz) return success - def get_msg(self): - msg = messaging.new_message("uploaderState") - us = msg.uploaderState - us.immediateQueueSize = int(self.immediate_size / 1e6) - us.immediateQueueCount = self.immediate_count - us.lastTime = self.last_time - us.lastSpeed = self.last_speed - us.lastFilename = self.last_filename - return msg + + def step(self, network_type: int, metered: bool) -> bool: + d = self.next_file_to_upload(metered) + if d is None: + return True + + name, key, fn = d + + # qlogs and bootlogs need to be compressed before uploading + if key.endswith(('qlog', 'rlog')) or (key.startswith('boot/') and not key.endswith('.bz2')): + key += ".bz2" + + return self.upload(name, key, fn, network_type, metered) -def uploader_fn(exit_event: threading.Event) -> None: +def main(exit_event: Optional[threading.Event] = None) -> None: + if exit_event is None: + exit_event = threading.Event() + try: set_core_affinity([0, 1, 2, 3]) except Exception: @@ -249,19 +237,14 @@ def uploader_fn(exit_event: threading.Event) -> None: params = Params() dongle_id = params.get("DongleId", encoding='utf8') - transition_to_offroad_last = 0. - disable_onroad_upload_offroad_transition_timeout = 900. # wait until offroad for 15 minutes before starting uploads - offroad_last = params.get_bool("IsOffroad") + offroad_transition_prev = 0. + offroad_last = False if dongle_id is None: cloudlog.info("uploader missing dongle_id") raise Exception("uploader can't start without dongle id") - if TICI and not Path("/data/media").is_mount(): - cloudlog.warning("NVME not mounted") - sm = messaging.SubMaster(['deviceState']) - pm = messaging.PubMaster(['uploaderState']) uploader = Uploader(dongle_id, Paths.log_root()) backoff = 0.1 @@ -271,10 +254,9 @@ def uploader_fn(exit_event: threading.Event) -> None: offroad = params.get_bool("IsOffroad") t = time.monotonic() if offroad and not offroad_last and t > 300.: - transition_to_offroad_last = time.monotonic() + offroad_transition_prev = time.monotonic() offroad_last = offroad - offroad = params.get_bool("IsOffroad") network_type = sm['deviceState'].networkType if not force_wifi else NetworkType.wifi if network_type == NetworkType.none: if allow_sleep: @@ -282,12 +264,12 @@ def uploader_fn(exit_event: threading.Event) -> None: continue if params.get_bool("DisableOnroadUploads"): - if not offroad or (transition_to_offroad_last > 0. and t - transition_to_offroad_last < disable_onroad_upload_offroad_transition_timeout): + if not offroad or (offroad_transition_prev > 0. and t - offroad_transition_prev < OFFROAD_TRANSITION_TIMEOUT): if not offroad: cloudlog.info("not uploading: onroad uploads disabled") else: - wait_minutes = int(disable_onroad_upload_offroad_transition_timeout / 60) - time_left = disable_onroad_upload_offroad_transition_timeout - (t - transition_to_offroad_last) + wait_minutes = int(OFFROAD_TRANSITION_TIMEOUT / 60) + time_left = OFFROAD_TRANSITION_TIMEOUT - (t - offroad_transition_prev) if time_left / 60. > 2.: time_left_str = f"{int(time_left / 60)} minute(s)" else: @@ -297,31 +279,13 @@ def uploader_fn(exit_event: threading.Event) -> None: time.sleep(60) continue - d = uploader.next_file_to_upload() - if d is None: # Nothing to upload - if allow_sleep: - time.sleep(60 if offroad else 5) - continue - - name, key, fn = d - - # qlogs and bootlogs need to be compressed before uploading - if key.endswith(('qlog', 'rlog')) or (key.startswith('boot/') and not key.endswith('.bz2')): - key += ".bz2" - - success = uploader.upload(name, key, fn, sm['deviceState'].networkType.raw, sm['deviceState'].networkMetered) + success = uploader.step(sm['deviceState'].networkType.raw, sm['deviceState'].networkMetered) if success: backoff = 0.1 elif allow_sleep: cloudlog.info("upload backoff %r", backoff) - time.sleep(backoff + random.uniform(0, backoff)) backoff = min(backoff*2, 120) - - pm.send("uploaderState", uploader.get_msg()) - - -def main() -> None: - uploader_fn(threading.Event()) + time.sleep(backoff + random.uniform(0, backoff)) if __name__ == "__main__": diff --git a/system/logmessaged.py b/system/logmessaged.py index c53e20e483..46bf79b0b2 100755 --- a/system/logmessaged.py +++ b/system/logmessaged.py @@ -5,7 +5,7 @@ from typing import NoReturn import cereal.messaging as messaging from openpilot.common.logging_extra import SwagLogFileFormatter from openpilot.system.hardware.hw import Paths -from openpilot.system.swaglog import get_file_handler +from openpilot.common.swaglog import get_file_handler def main() -> NoReturn: @@ -35,13 +35,11 @@ def main() -> NoReturn: continue # then we publish them - msg = messaging.new_message() - msg.logMessage = record + msg = messaging.new_message(None, valid=True, logMessage=record) log_message_sock.send(msg.to_bytes()) if level >= 40: # logging.ERROR - msg = messaging.new_message() - msg.errorLogMessage = record + msg = messaging.new_message(None, valid=True, errorLogMessage=record) error_log_message_sock.send(msg.to_bytes()) finally: sock.close() diff --git a/system/micd.py b/system/micd.py index c7af1b0ad2..8b738ebe93 100755 --- a/system/micd.py +++ b/system/micd.py @@ -2,15 +2,15 @@ import numpy as np from cereal import messaging -from openpilot.common.filter_simple import FirstOrderFilter from openpilot.common.realtime import Ratekeeper -from openpilot.system.swaglog import cloudlog +from openpilot.common.retry import retry +from openpilot.common.swaglog import cloudlog RATE = 10 FFT_SAMPLES = 4096 REFERENCE_SPL = 2e-5 # newtons/m^2 SAMPLE_RATE = 44100 -FILTER_DT = 1. / (SAMPLE_RATE / FFT_SAMPLES) +SAMPLE_BUFFER = 4096 # (approx 100ms) def calculate_spl(measurements): @@ -40,9 +40,9 @@ def apply_a_weighting(measurements: np.ndarray) -> np.ndarray: class Mic: - def __init__(self, pm): - self.pm = pm + def __init__(self): self.rk = Ratekeeper(RATE) + self.pm = messaging.PubMaster(['microphone']) self.measurements = np.empty(0) @@ -50,15 +50,12 @@ class Mic: self.sound_pressure_weighted = 0 self.sound_pressure_level_weighted = 0 - self.spl_filter_weighted = FirstOrderFilter(0, 2.5, FILTER_DT, initialized=False) - def update(self): - msg = messaging.new_message('microphone') + msg = messaging.new_message('microphone', valid=True) msg.microphone.soundPressure = float(self.sound_pressure) msg.microphone.soundPressureWeighted = float(self.sound_pressure_weighted) msg.microphone.soundPressureWeightedDb = float(self.sound_pressure_level_weighted) - msg.microphone.filteredSoundPressureWeightedDb = float(self.spl_filter_weighted.x) self.pm.send('microphone', msg) self.rk.keep_time() @@ -79,25 +76,28 @@ class Mic: self.sound_pressure, _ = calculate_spl(measurements) measurements_weighted = apply_a_weighting(measurements) self.sound_pressure_weighted, self.sound_pressure_level_weighted = calculate_spl(measurements_weighted) - self.spl_filter_weighted.update(self.sound_pressure_level_weighted) self.measurements = self.measurements[FFT_SAMPLES:] + @retry(attempts=7, delay=3) + def get_stream(self, sd): + # reload sounddevice to reinitialize portaudio + sd._terminate() + sd._initialize() + return sd.InputStream(channels=1, samplerate=SAMPLE_RATE, callback=self.callback, blocksize=SAMPLE_BUFFER) + def micd_thread(self): # sounddevice must be imported after forking processes import sounddevice as sd - with sd.InputStream(channels=1, samplerate=SAMPLE_RATE, callback=self.callback) as stream: - cloudlog.info(f"micd stream started: {stream.samplerate=} {stream.channels=} {stream.dtype=} {stream.device=}") + with self.get_stream(sd) as stream: + cloudlog.info(f"micd stream started: {stream.samplerate=} {stream.channels=} {stream.dtype=} {stream.device=}, {stream.blocksize=}") while True: self.update() -def main(pm=None): - if pm is None: - pm = messaging.PubMaster(['microphone']) - - mic = Mic(pm) +def main(): + mic = Mic() mic.micd_thread() diff --git a/system/proclogd/tests/test_proclog.cc b/system/proclogd/tests/test_proclog.cc index 33fccd4f30..b86229a499 100644 --- a/system/proclogd/tests/test_proclog.cc +++ b/system/proclogd/tests/test_proclog.cc @@ -33,15 +33,16 @@ TEST_CASE("Parser::procStat") { SECTION("all processes") { std::vector pids = Parser::pids(); REQUIRE(pids.size() > 1); - int parsed_cnt = 0; for (int pid : pids) { - if (auto stat = Parser::procStat(util::read_file("/proc/" + std::to_string(pid) + "/stat"))) { + std::string stat_path = "/proc/" + std::to_string(pid) + "/stat"; + INFO(stat_path); + if (auto stat = Parser::procStat(util::read_file(stat_path))) { REQUIRE(stat->pid == pid); REQUIRE(allowed_states.find(stat->state) != std::string::npos); - ++parsed_cnt; + } else { + REQUIRE(util::file_exists(stat_path) == false); } } - REQUIRE(parsed_cnt == pids.size()); } } @@ -108,9 +109,7 @@ TEST_CASE("Parser::cmdline") { test_cmdline(std::string("a\0b\0c\0\0\0", 9), {"a", "b", "c"}); } -TEST_CASE("buildProcLogerMessage") { - std::vector current_pids = Parser::pids(); - +TEST_CASE("buildProcLoggerMessage") { MessageBuilder msg; buildProcLogMessage(msg); @@ -131,26 +130,13 @@ TEST_CASE("buildProcLogerMessage") { // test cereal::ProcLog::Process auto procs = log.getProcs(); - REQUIRE(procs.size() == current_pids.size()); - for (auto p : procs) { - REQUIRE_THAT(current_pids, Catch::Matchers::VectorContains(p.getPid())); REQUIRE(allowed_states.find(p.getState()) != std::string::npos); if (p.getPid() == ::getpid()) { REQUIRE(p.getName() == "test_proclog"); REQUIRE(p.getState() == 'R'); REQUIRE_THAT(p.getExe().cStr(), Catch::Matchers::Contains("test_proclog")); REQUIRE_THAT(p.getCmdline()[0], Catch::Matchers::Contains("test_proclog")); - } else { - std::string cmd_path = "/proc/" + std::to_string(p.getPid()) + "/cmdline"; - if (util::file_exists(cmd_path)) { - std::ifstream stream(cmd_path); - auto cmdline = Parser::cmdline(stream); - REQUIRE(cmdline.size() == p.getCmdline().size()); - for (int i = 0; i < p.getCmdline().size(); ++i) { - REQUIRE(cmdline[i] == p.getCmdline()[i].cStr()); - } - } } } } diff --git a/system/sensord/rawgps/modemdiag.py b/system/qcomgpsd/modemdiag.py similarity index 100% rename from system/sensord/rawgps/modemdiag.py rename to system/qcomgpsd/modemdiag.py diff --git a/system/sensord/rawgps/nmeaport.py b/system/qcomgpsd/nmeaport.py similarity index 96% rename from system/sensord/rawgps/nmeaport.py rename to system/qcomgpsd/nmeaport.py index 01b9b179b9..231096fc5d 100644 --- a/system/sensord/rawgps/nmeaport.py +++ b/system/qcomgpsd/nmeaport.py @@ -120,11 +120,11 @@ def process_nmea_port_messages(device:str="/dev/ttyUSB1") -> NoReturn: def main() -> NoReturn: from openpilot.common.gpio import gpio_init, gpio_set from openpilot.system.hardware.tici.pins import GPIO - from openpilot.system.sensord.rawgps.rawgpsd import at_cmd + from openpilot.system.qcomgpsd.qcomgpsd import at_cmd try: - check_output(["pidof", "rawgpsd"]) - print("rawgpsd is running, please kill openpilot before running this script! (aborted)") + check_output(["pidof", "qcomgpsd"]) + print("qcomgpsd is running, please kill openpilot before running this script! (aborted)") sys.exit(1) except CalledProcessError as e: if e.returncode != 1: # 1 == no process found (boardd not running) diff --git a/system/sensord/rawgps/rawgpsd.py b/system/qcomgpsd/qcomgpsd.py similarity index 83% rename from system/sensord/rawgps/rawgpsd.py rename to system/qcomgpsd/qcomgpsd.py index e710a16920..3f72350234 100755 --- a/system/sensord/rawgps/rawgpsd.py +++ b/system/qcomgpsd/qcomgpsd.py @@ -5,10 +5,10 @@ import signal import itertools import math import time -import pycurl +import requests import shutil import subprocess -from datetime import datetime +import datetime from multiprocessing import Process, Event from typing import NoReturn, Optional from struct import unpack_from, calcsize, pack @@ -16,13 +16,11 @@ from struct import unpack_from, calcsize, pack from cereal import log import cereal.messaging as messaging from openpilot.common.gpio import gpio_init, gpio_set -from laika.gps_time import GPSTime, utc_to_gpst, get_leap_seconds -from laika.helpers import get_prn_from_nmea_id -from laika.constants import SECS_IN_HR, SECS_IN_DAY, SECS_IN_WEEK +from openpilot.common.retry import retry from openpilot.system.hardware.tici.pins import GPIO -from openpilot.system.swaglog import cloudlog -from openpilot.system.sensord.rawgps.modemdiag import ModemDiag, DIAG_LOG_F, setup_logs, send_recv -from openpilot.system.sensord.rawgps.structs import (dict_unpacker, position_report, relist, +from openpilot.common.swaglog import cloudlog +from openpilot.system.qcomgpsd.modemdiag import ModemDiag, DIAG_LOG_F, setup_logs, send_recv +from openpilot.system.qcomgpsd.structs import (dict_unpacker, position_report, relist, gps_measurement_report, gps_measurement_report_sv, glonass_measurement_report, glonass_measurement_report_sv, oemdre_measurement_report, oemdre_measurement_report_sv, oemdre_svpoly_report, @@ -87,27 +85,13 @@ measurementStatusGlonassFields = { "glonassTimeMarkValid": 17 } +@retry(attempts=10, delay=1.0) +def try_setup_logs(diag, logs): + return setup_logs(diag, logs) -def try_setup_logs(diag, log_types): - for _ in range(10): - try: - setup_logs(diag, log_types) - break - except Exception: - cloudlog.exception("setup logs failed, trying again") - time.sleep(1.0) - else: - raise Exception(f"setup logs failed, {log_types=}") - +@retry(attempts=3, delay=1.0) def at_cmd(cmd: str) -> Optional[str]: - for _ in range(3): - try: - return subprocess.check_output(f"mmcli -m any --timeout 30 --command='{cmd}'", shell=True, encoding='utf8') - except subprocess.CalledProcessError: - cloudlog.exception("rawgps.mmcli_command_failed") - time.sleep(1.0) - raise Exception(f"failed to execute mmcli command {cmd=}") - + return subprocess.check_output(f"mmcli -m any --timeout 30 --command='{cmd}'", shell=True, encoding='utf8') def gps_enabled() -> bool: try: @@ -118,27 +102,18 @@ def gps_enabled() -> bool: def download_assistance(): try: - c = pycurl.Curl() - c.setopt(pycurl.URL, ASSISTANCE_URL) - c.setopt(pycurl.NOBODY, 1) - c.setopt(pycurl.CONNECTTIMEOUT, 2) - c.perform() - bytes_n = c.getinfo(pycurl.CONTENT_LENGTH_DOWNLOAD) - c.close() - if bytes_n > 1e5: - cloudlog.error("Qcom assistance data larger than expected") - return + response = requests.get(ASSISTANCE_URL, timeout=5, stream=True) with open(ASSIST_DATA_FILE_DOWNLOAD, 'wb') as fp: - c = pycurl.Curl() - c.setopt(pycurl.URL, ASSISTANCE_URL) - c.setopt(pycurl.CONNECTTIMEOUT, 5) + for chunk in response.iter_content(chunk_size=8192): + fp.write(chunk) + if fp.tell() > 1e5: + cloudlog.error("Qcom assistance data larger than expected") + return - c.setopt(pycurl.WRITEDATA, fp) - c.perform() - c.close() - os.rename(ASSIST_DATA_FILE_DOWNLOAD, ASSIST_DATA_FILE) - except pycurl.error: + os.rename(ASSIST_DATA_FILE_DOWNLOAD, ASSIST_DATA_FILE) + + except requests.exceptions.RequestException: cloudlog.exception("Failed to download assistance file") return @@ -157,24 +132,13 @@ def downloader_loop(event): except KeyboardInterrupt: pass +@retry(attempts=5, delay=0.2, ignore_failure=True) def inject_assistance(): - for _ in range(5): - try: - cmd = f"mmcli -m any --timeout 30 --location-inject-assistance-data={ASSIST_DATA_FILE}" - subprocess.check_output(cmd, stderr=subprocess.PIPE, shell=True) - cloudlog.info("successfully loaded assistance data") - return - except subprocess.CalledProcessError as e: - cloudlog.event( - "rawgps.assistance_loading_failed", - error=True, - cmd=e.cmd, - output=e.output, - returncode=e.returncode - ) - time.sleep(0.2) - cloudlog.error("failed to load assistance after retry") + cmd = f"mmcli -m any --timeout 30 --location-inject-assistance-data={ASSIST_DATA_FILE}" + subprocess.check_output(cmd, stderr=subprocess.PIPE, shell=True) + cloudlog.info("successfully loaded assistance data") +@retry(attempts=5, delay=1.0) def setup_quectel(diag: ModemDiag) -> bool: ret = False @@ -190,7 +154,13 @@ def setup_quectel(diag: ModemDiag) -> bool: if gps_enabled(): at_cmd("AT+QGPSEND") - #at_cmd("AT+QGPSDEL=0") + + if "GPS_COLD_START" in os.environ: + # deletes all assistance + at_cmd("AT+QGPSDEL=0") + else: + # allow module to perform hot start + at_cmd("AT+QGPSDEL=1") # disable DPO power savings for more accuracy at_cmd("AT+QGPSCFG=\"dpoenable\",0") @@ -205,7 +175,7 @@ def setup_quectel(diag: ModemDiag) -> bool: inject_assistance() os.remove(ASSIST_DATA_FILE) #at_cmd("AT+QGPSXTRADATA?") - time_str = datetime.utcnow().strftime("%Y/%m/%d,%H:%M:%S") + time_str = datetime.datetime.utcnow().strftime("%Y/%m/%d,%H:%M:%S") at_cmd(f"AT+QGPSXTRATIME=0,\"{time_str}\",1,1,1000") at_cmd("AT+QGPSCFG=\"outport\",\"usbnmea\"") @@ -287,7 +257,6 @@ def main() -> NoReturn: diag = ModemDiag() r = setup_quectel(diag) want_assistance = not r - current_gps_time = utc_to_gpst(GPSTime.from_datetime(datetime.utcnow())) cloudlog.warning("quectel setup done") gpio_init(GPIO.GNSS_PWR_EN, True) gpio_set(GPIO.GNSS_PWR_EN, True) @@ -319,7 +288,7 @@ def main() -> NoReturn: print("%.4f: got log: %x len %d" % (time.time(), log_type, len(log_payload))) if log_type == LOG_GNSS_OEMDRE_MEASUREMENT_REPORT: - msg = messaging.new_message('qcomGnss') + msg = messaging.new_message('qcomGnss', valid=True) gnss = msg.qcomGnss gnss.logTs = log_time @@ -360,8 +329,6 @@ def main() -> NoReturn: setattr(sv.measurementStatus, kk, bool(v & (1< NoReturn: vNED = [report["q_FltVelEnuMps[1]"], report["q_FltVelEnuMps[0]"], -report["q_FltVelEnuMps[2]"]] vNEDsigma = [report["q_FltVelSigmaMps[1]"], report["q_FltVelSigmaMps[0]"], -report["q_FltVelSigmaMps[2]"]] - msg = messaging.new_message('gpsLocation') + msg = messaging.new_message('gpsLocation', valid=True) gps = msg.gpsLocation gps.latitude = report["t_DblFinalPosLatLon[0]"] * 180/math.pi gps.longitude = report["t_DblFinalPosLatLon[1]"] * 180/math.pi gps.altitude = report["q_FltFinalPosAlt"] gps.speed = math.sqrt(sum([x**2 for x in vNED])) gps.bearingDeg = report["q_FltHeadingRad"] * 180/math.pi - gps.unixTimestampMillis = GPSTime(report['w_GpsWeekNumber'], - 1e-3*report['q_GpsFixTimeMs']).as_unix_timestamp()*1e3 + + # TODO needs update if there is another leap second, after june 2024? + dt_timestamp = (datetime.datetime(1980, 1, 6, 0, 0, 0, 0, datetime.timezone.utc) + + datetime.timedelta(weeks=report['w_GpsWeekNumber']) + + datetime.timedelta(seconds=(1e-3*report['q_GpsFixTimeMs'] - 18))) + gps.unixTimestampMillis = dt_timestamp.timestamp()*1e3 gps.source = log.GpsLocationData.SensorSource.qcomdiag gps.vNED = vNED gps.verticalAccuracy = report["q_FltVdop"] @@ -389,12 +360,10 @@ def main() -> NoReturn: if gps.flags: want_assistance = False stop_download_event.set() - - pm.send('gpsLocation', msg) elif log_type == LOG_GNSS_OEMDRE_SVPOLY_REPORT: - msg = messaging.new_message('qcomGnss') + msg = messaging.new_message('qcomGnss', valid=True) dat = unpack_svpoly(log_payload) dat = relist(dat) gnss = msg.qcomGnss @@ -409,6 +378,10 @@ def main() -> NoReturn: else: setattr(poly, k, v) + ''' + # Timestamp glonass polys with GPSTime + from laika.gps_time import GPSTime, utc_to_gpst, get_leap_seconds + from laika.helpers import get_prn_from_nmea_id prn = get_prn_from_nmea_id(poly.svId) if prn[0] == 'R': epoch = GPSTime(current_gps_time.week, (poly.t0 - 3*SECS_IN_HR + SECS_IN_DAY) % (SECS_IN_WEEK) + get_leap_seconds(current_gps_time)) @@ -423,10 +396,11 @@ def main() -> NoReturn: poly.gpsWeek = epoch.week poly.gpsTow = epoch.tow + ''' pm.send('qcomGnss', msg) elif log_type in [LOG_GNSS_GPS_MEASUREMENT_REPORT, LOG_GNSS_GLONASS_MEASUREMENT_REPORT]: - msg = messaging.new_message('qcomGnss') + msg = messaging.new_message('qcomGnss', valid=True) gnss = msg.qcomGnss gnss.logTs = log_time diff --git a/system/sensord/rawgps/structs.py b/system/qcomgpsd/structs.py similarity index 100% rename from system/sensord/rawgps/structs.py rename to system/qcomgpsd/structs.py diff --git a/system/sensord/rawgps/test_rawgps.py b/system/qcomgpsd/tests/test_qcomgpsd.py similarity index 67% rename from system/sensord/rawgps/test_rawgps.py rename to system/qcomgpsd/tests/test_qcomgpsd.py index 02777d5a1d..8291f2cc32 100755 --- a/system/sensord/rawgps/test_rawgps.py +++ b/system/qcomgpsd/tests/test_qcomgpsd.py @@ -1,34 +1,30 @@ #!/usr/bin/env python3 import os +import pytest import json import time import datetime import unittest import subprocess -import numpy as np import cereal.messaging as messaging -from openpilot.system.hardware import TICI -from openpilot.system.sensord.rawgps.rawgpsd import at_cmd, wait_for_modem +from openpilot.system.qcomgpsd.qcomgpsd import at_cmd, wait_for_modem from openpilot.selfdrive.manager.process_config import managed_processes -from openpilot.common.transformations.coordinates import ecef_from_geodetic GOOD_SIGNAL = bool(int(os.getenv("GOOD_SIGNAL", '0'))) +@pytest.mark.tici class TestRawgpsd(unittest.TestCase): @classmethod def setUpClass(cls): - if not TICI: - raise unittest.SkipTest - os.system("sudo systemctl start systemd-resolved") os.system("sudo systemctl restart ModemManager lte") wait_for_modem() @classmethod def tearDownClass(cls): - managed_processes['rawgpsd'].stop() + managed_processes['qcomgpsd'].stop() os.system("sudo systemctl restart systemd-resolved") os.system("sudo systemctl restart ModemManager lte") @@ -37,7 +33,7 @@ class TestRawgpsd(unittest.TestCase): self.sm = messaging.SubMaster(['qcomGnss', 'gpsLocation', 'gnssMeasurements']) def tearDown(self): - managed_processes['rawgpsd'].stop() + managed_processes['qcomgpsd'].stop() os.system("sudo systemctl restart systemd-resolved") def _wait_for_output(self, t): @@ -55,7 +51,7 @@ class TestRawgpsd(unittest.TestCase): def test_wait_for_modem(self): os.system("sudo systemctl stop ModemManager") - managed_processes['rawgpsd'].start() + managed_processes['qcomgpsd'].start() assert not self._wait_for_output(5) os.system("sudo systemctl restart ModemManager") @@ -66,15 +62,15 @@ class TestRawgpsd(unittest.TestCase): if not internet: os.system("sudo systemctl stop systemd-resolved") with self.subTest(internet=internet): - managed_processes['rawgpsd'].start() + managed_processes['qcomgpsd'].start() assert self._wait_for_output(7) - managed_processes['rawgpsd'].stop() + managed_processes['qcomgpsd'].stop() def test_turns_off_gnss(self): for s in (0.1, 1, 5): - managed_processes['rawgpsd'].start() + managed_processes['qcomgpsd'].start() time.sleep(s) - managed_processes['rawgpsd'].stop() + managed_processes['qcomgpsd'].stop() ls = subprocess.check_output("mmcli -m any --location-status --output-json", shell=True, encoding='utf-8') loc_status = json.loads(ls) @@ -98,47 +94,30 @@ class TestRawgpsd(unittest.TestCase): assert valid_duration == '0' def test_assistance_loading(self): - managed_processes['rawgpsd'].start() + managed_processes['qcomgpsd'].start() assert self._wait_for_output(10) - managed_processes['rawgpsd'].stop() + managed_processes['qcomgpsd'].stop() self.check_assistance(True) def test_no_assistance_loading(self): os.system("sudo systemctl stop systemd-resolved") - managed_processes['rawgpsd'].start() + managed_processes['qcomgpsd'].start() assert self._wait_for_output(10) - managed_processes['rawgpsd'].stop() + managed_processes['qcomgpsd'].stop() self.check_assistance(False) def test_late_assistance_loading(self): os.system("sudo systemctl stop systemd-resolved") - managed_processes['rawgpsd'].start() + managed_processes['qcomgpsd'].start() self._wait_for_output(17) assert self.sm.updated['qcomGnss'] os.system("sudo systemctl restart systemd-resolved") time.sleep(15) - managed_processes['rawgpsd'].stop() + managed_processes['qcomgpsd'].stop() self.check_assistance(True) - @unittest.skipIf(not GOOD_SIGNAL, "No good GPS signal") - def test_fix(self): - managed_processes['rawgpsd'].start() - managed_processes['laikad'].start() - assert self._wait_for_output(60) - assert self.sm.updated['qcomGnss'] - assert self.sm.updated['gpsLocation'] - assert self.sm['gpsLocation'].flags == 1 - module_fix = ecef_from_geodetic([self.sm['gpsLocation'].latitude, - self.sm['gpsLocation'].longitude, - self.sm['gpsLocation'].altitude]) - assert self.sm['gnssMeasurements'].positionECEF.valid - total_diff = np.array(self.sm['gnssMeasurements'].positionECEF.value) - module_fix - self.assertLess(np.linalg.norm(total_diff), 100) - managed_processes['laikad'].stop() - managed_processes['rawgpsd'].stop() - if __name__ == "__main__": unittest.main(failfast=True) diff --git a/system/sensord/.gitignore b/system/sensord/.gitignore index e9b8071b4b..e17675e254 100644 --- a/system/sensord/.gitignore +++ b/system/sensord/.gitignore @@ -1 +1 @@ -_sensord +sensord diff --git a/system/sensord/SConscript b/system/sensord/SConscript index 63d1d0d690..7974eb07ae 100644 --- a/system/sensord/SConscript +++ b/system/sensord/SConscript @@ -14,4 +14,4 @@ sensors = [ libs = [common, cereal, messaging, 'capnp', 'zmq', 'kj', 'pthread'] if arch == "larch64": libs.append('i2c') -env.Program('_sensord', ['sensors_qcom2.cc'] + sensors, LIBS=libs) +env.Program('sensord', ['sensors_qcom2.cc'] + sensors, LIBS=libs) diff --git a/system/sensord/pigeond.py b/system/sensord/pigeond.py index fc5c05e64f..78b3b07498 100755 --- a/system/sensord/pigeond.py +++ b/system/sensord/pigeond.py @@ -11,7 +11,7 @@ from typing import List, Optional, Tuple from cereal import messaging from openpilot.common.params import Params -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog from openpilot.system.hardware import TICI from openpilot.common.gpio import gpio_init, gpio_set from openpilot.system.hardware.tici.pins import GPIO @@ -164,12 +164,12 @@ def initialize_pigeon(pigeon: TTYPigeon) -> bool: pigeon.send_with_ack(b"\xB5\x62\x06\x08\x06\x00\x64\x00\x01\x00\x00\x00\x79\x10") # UBX-CFG-NAV5 (0x06 0x24) - pigeon.send_with_ack(b"\xB5\x62\x06\x24\x24\x00\x05\x00\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5A\x63") # noqa: E501 + pigeon.send_with_ack(b"\xB5\x62\x06\x24\x24\x00\x05\x00\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5A\x63") # UBX-CFG-ODO (0x06 0x1E) pigeon.send_with_ack(b"\xB5\x62\x06\x1E\x14\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3C\x37") pigeon.send_with_ack(b"\xB5\x62\x06\x39\x08\x00\xFF\xAD\x62\xAD\x1E\x63\x00\x00\x83\x0C") - pigeon.send_with_ack(b"\xB5\x62\x06\x23\x28\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x24") # noqa: E501 + pigeon.send_with_ack(b"\xB5\x62\x06\x23\x28\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x24") # UBX-CFG-NAV5 (0x06 0x24) pigeon.send_with_ack(b"\xB5\x62\x06\x24\x00\x00\x2A\x84") @@ -291,7 +291,7 @@ def run_receiving(pigeon: TTYPigeon, pm: messaging.PubMaster, duration: int = 0) continue # send out to socket - msg = messaging.new_message('ubloxRaw', len(dat)) + msg = messaging.new_message('ubloxRaw', len(dat), valid=True) msg.ubloxRaw = dat[:] pm.send('ubloxRaw', msg) else: diff --git a/system/sensord/rawgps/compare.py b/system/sensord/rawgps/compare.py deleted file mode 100755 index e1daa7f918..0000000000 --- a/system/sensord/rawgps/compare.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python3 -import cereal.messaging as messaging -from laika import constants - -if __name__ == "__main__": - sm = messaging.SubMaster(['ubloxGnss', 'qcomGnss']) - - meas = None - while 1: - sm.update() - if sm['ubloxGnss'].which() == "measurementReport": - meas = sm['ubloxGnss'].measurementReport.measurements - if not sm.updated['qcomGnss'] or meas is None: - continue - report = sm['qcomGnss'].measurementReport - if report.source not in [0, 1]: - continue - GLONASS = report.source == 1 - recv_time = report.milliseconds / 1000 - - car = [] - print("qcom has ", sorted([x.svId for x in report.sv])) - print("ublox has", sorted([x.svId for x in meas if x.gnssId == (6 if GLONASS else 0)])) - for i in report.sv: - # match to ublox - tm = None - for m in meas: - if i.svId == m.svId and m.gnssId == 0 and m.sigId == 0 and not GLONASS: - tm = m - if (i.svId-64) == m.svId and m.gnssId == 6 and m.sigId == 0 and GLONASS: - tm = m - if tm is None: - continue - - if not i.measurementStatus.measurementNotUsable and i.measurementStatus.satelliteTimeIsKnown: - sat_time = (i.unfilteredMeasurementIntegral + i.unfilteredMeasurementFraction + i.latency) / 1000 - ublox_psuedorange = tm.pseudorange - qcom_psuedorange = (recv_time - sat_time)*constants.SPEED_OF_LIGHT - if GLONASS: - glonass_freq = tm.glonassFrequencyIndex - 7 - ublox_speed = -(constants.SPEED_OF_LIGHT / (constants.GLONASS_L1 + glonass_freq*constants.GLONASS_L1_DELTA)) * (tm.doppler) - else: - ublox_speed = -(constants.SPEED_OF_LIGHT / constants.GPS_L1) * tm.doppler - qcom_speed = i.unfilteredSpeed - car.append((i.svId, tm.pseudorange, ublox_speed, qcom_psuedorange, qcom_speed, tm.cno)) - - if len(car) == 0: - print("nothing to compare") - continue - - pr_err, speed_err = 0., 0. - for c in car: - ublox_psuedorange, ublox_speed, qcom_psuedorange, qcom_speed = c[1:5] - pr_err += ublox_psuedorange - qcom_psuedorange - speed_err += ublox_speed - qcom_speed - pr_err /= len(car) - speed_err /= len(car) - print("avg psuedorange err %f avg speed err %f" % (pr_err, speed_err)) - for c in sorted(car, key=lambda x: abs(x[1] - x[3] - pr_err)): - svid, ublox_psuedorange, ublox_speed, qcom_psuedorange, qcom_speed, cno = c - print("svid: %3d pseudorange: %10.2f m speed: %8.2f m/s meas: %12.2f speed: %10.2f meas_err: %10.3f speed_err: %8.3f cno: %d" % - (svid, ublox_psuedorange, ublox_speed, qcom_psuedorange, qcom_speed, - ublox_psuedorange - qcom_psuedorange - pr_err, ublox_speed - qcom_speed - speed_err, cno)) - - - diff --git a/system/sensord/sensord b/system/sensord/sensord deleted file mode 100755 index 9ea848d577..0000000000 --- a/system/sensord/sensord +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -cd "$(dirname "$0")" -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" -exec ./_sensord diff --git a/system/sensord/tests/test_pigeond.py b/system/sensord/tests/test_pigeond.py index 90cbf06340..f2ab43bbb7 100755 --- a/system/sensord/tests/test_pigeond.py +++ b/system/sensord/tests/test_pigeond.py @@ -1,22 +1,19 @@ #!/usr/bin/env python3 +import pytest import time import unittest import cereal.messaging as messaging -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.common.gpio import gpio_read from openpilot.selfdrive.test.helpers import with_processes from openpilot.selfdrive.manager.process_config import managed_processes -from openpilot.system.hardware import TICI from openpilot.system.hardware.tici.pins import GPIO # TODO: test TTFF when we have good A-GNSS +@pytest.mark.tici class TestPigeond(unittest.TestCase): - @classmethod - def setUpClass(cls): - if not TICI: - raise unittest.SkipTest def tearDown(self): managed_processes['pigeond'].stop() @@ -26,10 +23,10 @@ class TestPigeond(unittest.TestCase): sm = messaging.SubMaster(['ubloxRaw']) # setup time - for _ in range(int(5 * service_list['ubloxRaw'].frequency)): + for _ in range(int(5 * SERVICE_LIST['ubloxRaw'].frequency)): sm.update() - for _ in range(int(10 * service_list['ubloxRaw'].frequency)): + for _ in range(int(10 * SERVICE_LIST['ubloxRaw'].frequency)): sm.update() assert sm.all_checks() diff --git a/system/sensord/tests/test_sensord.py b/system/sensord/tests/test_sensord.py index ccdce3b4e5..3075c8a343 100755 --- a/system/sensord/tests/test_sensord.py +++ b/system/sensord/tests/test_sensord.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import os +import pytest import time import unittest import numpy as np @@ -7,10 +8,9 @@ from collections import namedtuple, defaultdict import cereal.messaging as messaging from cereal import log -from cereal.services import service_list +from cereal.services import SERVICE_LIST from openpilot.common.gpio import get_irqs_for_action from openpilot.common.timeout import Timeout -from openpilot.system.hardware import TICI from openpilot.selfdrive.manager.process_config import managed_processes BMX = { @@ -81,7 +81,7 @@ def read_sensor_events(duration_sec): socks[stype] = messaging.sub_sock(stype, poller=poller, timeout=100) # wait for sensors to come up - with Timeout(60, "sensors didn't come up"): + with Timeout(int(os.environ.get("SENSOR_WAIT", "5")), "sensors didn't come up"): while len(poller.poll(250)) == 0: pass time.sleep(1) @@ -98,17 +98,15 @@ def read_sensor_events(duration_sec): return {k: v for k, v in events.items() if len(v) > 0} +@pytest.mark.tici class TestSensord(unittest.TestCase): @classmethod def setUpClass(cls): - if not TICI: - raise unittest.SkipTest - # enable LSM self test os.environ["LSM_SELF_TEST"] = "1" # read initial sensor values every test case can use - os.system("pkill -f ./_sensord") + os.system("pkill -f \\\\./sensord") try: managed_processes["sensord"].start() cls.sample_secs = int(os.getenv("SAMPLE_SECS", "10")) @@ -172,7 +170,7 @@ class TestSensord(unittest.TestCase): for s, msgs in self.events.items(): with self.subTest(sensor=s): freq = len(msgs) / self.sample_secs - ef = service_list[s].frequency + ef = SERVICE_LIST[s].frequency assert ef*0.85 <= freq <= ef*1.15 def test_logmonottime_timestamp_diff(self): diff --git a/system/tests/test_logmessaged.py b/system/tests/test_logmessaged.py index 5d0e1bfc82..d27dae46ad 100755 --- a/system/tests/test_logmessaged.py +++ b/system/tests/test_logmessaged.py @@ -7,7 +7,7 @@ import unittest import cereal.messaging as messaging from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.system.hardware.hw import Paths -from openpilot.system.swaglog import cloudlog, ipchandler +from openpilot.common.swaglog import cloudlog, ipchandler class TestLogmessaged(unittest.TestCase): diff --git a/system/timed.py b/system/timed.py new file mode 100755 index 0000000000..21fb47b680 --- /dev/null +++ b/system/timed.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +import datetime +import os +import subprocess +import time +from typing import NoReturn + +from timezonefinder import TimezoneFinder + +import cereal.messaging as messaging +from openpilot.common.params import Params +from openpilot.common.swaglog import cloudlog +from openpilot.system.hardware import AGNOS + + +def set_timezone(timezone): + valid_timezones = subprocess.check_output('timedatectl list-timezones', shell=True, encoding='utf8').strip().split('\n') + if timezone not in valid_timezones: + cloudlog.error(f"Timezone not supported {timezone}") + return + + cloudlog.debug(f"Setting timezone to {timezone}") + try: + if AGNOS: + tzpath = os.path.join("/usr/share/zoneinfo/", timezone) + subprocess.check_call(f'sudo su -c "ln -snf {tzpath} /data/etc/tmptime && \ + mv /data/etc/tmptime /data/etc/localtime"', shell=True) + subprocess.check_call(f'sudo su -c "echo \"{timezone}\" > /data/etc/timezone"', shell=True) + else: + subprocess.check_call(f'sudo timedatectl set-timezone {timezone}', shell=True) + except subprocess.CalledProcessError: + cloudlog.exception(f"Error setting timezone to {timezone}") + + +def set_time(new_time): + diff = datetime.datetime.now() - new_time + if diff < datetime.timedelta(seconds=10): + cloudlog.debug(f"Time diff too small: {diff}") + return + + cloudlog.debug(f"Setting time to {new_time}") + try: + subprocess.run(f"TZ=UTC date -s '{new_time}'", shell=True, check=True) + except subprocess.CalledProcessError: + cloudlog.exception("timed.failed_setting_time") + + +def main() -> NoReturn: + """ + timed has two responsibilities: + - getting the current time + - getting the current timezone + + GPS directly gives time, and timezone is looked up from GPS position. + AGNOS will also use NTP to update the time. + """ + + params = Params() + tf = TimezoneFinder() + + # Restore timezone from param + tz = params.get("Timezone", encoding='utf8') + tf = TimezoneFinder() + if tz is not None: + cloudlog.debug("Restoring timezone from param") + set_timezone(tz) + + sm = messaging.SubMaster(['liveLocationKalman']) + while True: + sm.update(1000) + + llk = sm['liveLocationKalman'] + if not llk.gpsOK or (time.monotonic() - sm.logMonoTime['liveLocationKalman']/1e9) > 0.2: + continue + + # set time + # TODO: account for unixTimesatmpMillis being a (usually short) time in the past + gps_time = datetime.datetime.fromtimestamp(llk.unixTimestampMillis / 1000.) + set_time(gps_time) + + # set timezone + pos = llk.positionGeodetic.value + if len(pos) == 3: + gps_timezone = tf.timezone_at(lat=pos[0], lng=pos[1]) + if gps_timezone is None: + cloudlog.critical(f"No timezone found based on {pos=}") + else: + set_timezone(gps_timezone) + params.put_nonblocking("Timezone", gps_timezone) + + time.sleep(10) + +if __name__ == "__main__": + main() diff --git a/system/timezoned.py b/system/timezoned.py deleted file mode 100755 index 91424d33b5..0000000000 --- a/system/timezoned.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -import json -import os -import time -import subprocess -from typing import NoReturn - -import requests -from timezonefinder import TimezoneFinder - -from openpilot.common.params import Params -from openpilot.system.hardware import AGNOS -from openpilot.system.swaglog import cloudlog -from openpilot.system.version import get_version - -REQUEST_HEADERS = {'User-Agent': "openpilot-" + get_version()} - - -def set_timezone(valid_timezones, timezone): - if timezone not in valid_timezones: - cloudlog.error(f"Timezone not supported {timezone}") - return - - cloudlog.info(f"Setting timezone to {timezone}") - try: - if AGNOS: - tzpath = os.path.join("/usr/share/zoneinfo/", timezone) - subprocess.check_call(f'sudo su -c "ln -snf {tzpath} /data/etc/tmptime && \ - mv /data/etc/tmptime /data/etc/localtime"', shell=True) - subprocess.check_call(f'sudo su -c "echo \"{timezone}\" > /data/etc/timezone"', shell=True) - else: - subprocess.check_call(f'sudo timedatectl set-timezone {timezone}', shell=True) - except subprocess.CalledProcessError: - cloudlog.exception(f"Error setting timezone to {timezone}") - - -def main() -> NoReturn: - params = Params() - tf = TimezoneFinder() - - # Get allowed timezones - valid_timezones = subprocess.check_output('timedatectl list-timezones', shell=True, encoding='utf8').strip().split('\n') - - while True: - time.sleep(60) - - is_onroad = not params.get_bool("IsOffroad") - if is_onroad: - continue - - # Set based on param - timezone = params.get("Timezone", encoding='utf8') - if timezone is not None: - cloudlog.debug("Setting timezone based on param") - set_timezone(valid_timezones, timezone) - continue - - location = params.get("LastGPSPosition", encoding='utf8') - - # Find timezone based on IP geolocation if no gps location is available - if location is None: - cloudlog.debug("Setting timezone based on IP lookup") - try: - r = requests.get("https://ipapi.co/timezone", headers=REQUEST_HEADERS, timeout=10) - if r.status_code == 200: - set_timezone(valid_timezones, r.text) - else: - cloudlog.error(f"Unexpected status code from api {r.status_code}") - - time.sleep(3600) # Don't make too many API requests - except requests.exceptions.RequestException: - cloudlog.exception("Error getting timezone based on IP") - continue - - # Find timezone by reverse geocoding the last known gps location - else: - cloudlog.debug("Setting timezone based on GPS location") - try: - location = json.loads(location) - except Exception: - cloudlog.exception("Error parsing location") - continue - - timezone = tf.timezone_at(lng=location['longitude'], lat=location['latitude']) - if timezone is None: - cloudlog.error(f"No timezone found based on location, {location}") - continue - set_timezone(valid_timezones, timezone) - - -if __name__ == "__main__": - main() diff --git a/system/ubloxd/tests/test_ublox_processing.py b/system/ubloxd/tests/test_ublox_processing.py deleted file mode 100755 index 311604881a..0000000000 --- a/system/ubloxd/tests/test_ublox_processing.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -import unittest -import time -import numpy as np - -from laika import AstroDog -from laika.helpers import ConstellationId -from laika.raw_gnss import correct_measurements, process_measurements, read_raw_ublox -from laika.opt import calc_pos_fix -from openpilot.selfdrive.test.openpilotci import get_url -from openpilot.system.hardware.hw import Paths -from openpilot.tools.lib.logreader import LogReader -from openpilot.selfdrive.test.helpers import with_processes -import cereal.messaging as messaging - -def get_gnss_measurements(log_reader): - gnss_measurements = [] - for msg in log_reader: - if msg.which() == "ubloxGnss": - ublox_msg = msg.ubloxGnss - if ublox_msg.which == 'measurementReport': - report = ublox_msg.measurementReport - if len(report.measurements) > 0: - gnss_measurements.append(read_raw_ublox(report)) - return gnss_measurements - -def get_ublox_raw(log_reader): - ublox_raw = [] - for msg in log_reader: - if msg.which() == "ubloxRaw": - ublox_raw.append(msg) - return ublox_raw - -class TestUbloxProcessing(unittest.TestCase): - NUM_TEST_PROCESS_MEAS = 10 - - @classmethod - def setUpClass(cls): - lr = LogReader(get_url("4cf7a6ad03080c90|2021-09-29--13-46-36", 0)) - cls.gnss_measurements = get_gnss_measurements(lr) - - # test gps ephemeris continuity check (drive has ephemeris issues with cutover data) - lr = LogReader(get_url("37b6542f3211019a|2023-01-15--23-45-10", 14)) - cls.ublox_raw = get_ublox_raw(lr) - - def test_read_ublox_raw(self): - count_gps = 0 - count_glonass = 0 - for measurements in self.gnss_measurements: - for m in measurements: - if m.constellation_id == ConstellationId.GPS: - count_gps += 1 - elif m.constellation_id == ConstellationId.GLONASS: - count_glonass += 1 - - self.assertEqual(count_gps, 5036) - self.assertEqual(count_glonass, 3651) - - def test_get_fix(self): - dog = AstroDog(cache_dir=Paths.download_cache_root()) - position_fix_found = 0 - count_processed_measurements = 0 - count_corrected_measurements = 0 - position_fix_found_after_correcting = 0 - - pos_ests = [] - for measurements in self.gnss_measurements[:self.NUM_TEST_PROCESS_MEAS]: - processed_meas = process_measurements(measurements, dog) - count_processed_measurements += len(processed_meas) - pos_fix = calc_pos_fix(processed_meas) - if len(pos_fix) > 0 and all(p != 0 for p in pos_fix[0]): - position_fix_found += 1 - - corrected_meas = correct_measurements(processed_meas, pos_fix[0][:3], dog) - count_corrected_measurements += len(corrected_meas) - - pos_fix = calc_pos_fix(corrected_meas) - if len(pos_fix) > 0 and all(p != 0 for p in pos_fix[0]): - pos_ests.append(pos_fix[0]) - position_fix_found_after_correcting += 1 - - mean_fix = np.mean(np.array(pos_ests)[:, :3], axis=0) - np.testing.assert_allclose(mean_fix, [-2452306.662377, -4778343.136806, 3428550.090557], rtol=0, atol=1) - - # Note that can happen that there are less corrected measurements compared to processed when they are invalid. - # However, not for the current segment - self.assertEqual(position_fix_found, self.NUM_TEST_PROCESS_MEAS) - self.assertEqual(position_fix_found_after_correcting, self.NUM_TEST_PROCESS_MEAS) - self.assertEqual(count_processed_measurements, 69) - self.assertEqual(count_corrected_measurements, 69) - - @with_processes(['ubloxd']) - def test_ublox_gps_cutover(self): - time.sleep(2) - ugs = messaging.sub_sock("ubloxGnss", timeout=0.1) - ur_pm = messaging.PubMaster(['ubloxRaw']) - - def replay_segment(): - rcv_msgs = [] - for msg in self.ublox_raw: - ur_pm.send(msg.which(), msg.as_builder()) - time.sleep(0.001) - rcv_msgs += messaging.drain_sock(ugs) - - time.sleep(0.1) - rcv_msgs += messaging.drain_sock(ugs) - return rcv_msgs - - # replay twice to enforce cutover data on rewind - rcv_msgs = replay_segment() - rcv_msgs += replay_segment() - - ephems_cnt = sum(m.ubloxGnss.which() == 'ephemeris' for m in rcv_msgs) - self.assertEqual(ephems_cnt, 15) - -if __name__ == "__main__": - unittest.main() diff --git a/system/version.py b/system/version.py index 331895fd42..ac51d86279 100755 --- a/system/version.py +++ b/system/version.py @@ -5,10 +5,11 @@ from typing import List, Optional from functools import lru_cache from openpilot.common.basedir import BASEDIR -from openpilot.system.swaglog import cloudlog +from openpilot.common.swaglog import cloudlog -RELEASE_BRANCHES = ['release3-staging', 'dashcam3-staging', 'release3', 'dashcam3', 'nightly'] -TESTED_BRANCHES = RELEASE_BRANCHES + ['devel', 'devel-staging', 'staging-c3', 'release-c3'] +RELEASE_BRANCHES = ['release3-staging', 'release3', 'nightly'] +RELEASE_SP_BRANCHES = ['release-c3'] +TESTED_BRANCHES = RELEASE_BRANCHES + RELEASE_SP_BRANCHES + ['devel', 'devel-staging', 'staging-c3'] training_version: bytes = b"0.2.0" terms_version: bytes = b"2" @@ -101,6 +102,10 @@ def is_tested_branch() -> bool: def is_release_branch() -> bool: return get_short_branch() in RELEASE_BRANCHES +@cache +def is_release_sp_branch() -> bool: + return get_short_branch() in RELEASE_SP_BRANCHES + @cache def is_dirty() -> bool: origin = get_origin() diff --git a/common/kalman/tests/__init__.py b/system/webrtc/__init__.py similarity index 100% rename from common/kalman/tests/__init__.py rename to system/webrtc/__init__.py diff --git a/system/webrtc/device/audio.py b/system/webrtc/device/audio.py new file mode 100644 index 0000000000..3c78be6752 --- /dev/null +++ b/system/webrtc/device/audio.py @@ -0,0 +1,110 @@ +import asyncio +import io +from typing import Optional, List, Tuple + +import aiortc +import av +import numpy as np +import pyaudio + + +class AudioInputStreamTrack(aiortc.mediastreams.AudioStreamTrack): + PYAUDIO_TO_AV_FORMAT_MAP = { + pyaudio.paUInt8: 'u8', + pyaudio.paInt16: 's16', + pyaudio.paInt24: 's24', + pyaudio.paInt32: 's32', + pyaudio.paFloat32: 'flt', + } + + def __init__(self, audio_format: int = pyaudio.paInt16, rate: int = 16000, channels: int = 1, packet_time: float = 0.020, device_index: Optional[int] = None): + super().__init__() + + self.p = pyaudio.PyAudio() + chunk_size = int(packet_time * rate) + self.stream = self.p.open(format=audio_format, + channels=channels, + rate=rate, + frames_per_buffer=chunk_size, + input=True, + input_device_index=device_index) + self.format = audio_format + self.rate = rate + self.channels = channels + self.packet_time = packet_time + self.chunk_size = chunk_size + self.pts = 0 + + async def recv(self): + mic_data = self.stream.read(self.chunk_size) + mic_array = np.frombuffer(mic_data, dtype=np.int16) + mic_array = np.expand_dims(mic_array, axis=0) + layout = 'stereo' if self.channels > 1 else 'mono' + frame = av.AudioFrame.from_ndarray(mic_array, format=self.PYAUDIO_TO_AV_FORMAT_MAP[self.format], layout=layout) + frame.rate = self.rate + frame.pts = self.pts + self.pts += frame.samples + + return frame + + +class AudioOutputSpeaker: + def __init__(self, audio_format: int = pyaudio.paInt16, rate: int = 48000, channels: int = 2, packet_time: float = 0.2, device_index: Optional[int] = None): + + chunk_size = int(packet_time * rate) + self.p = pyaudio.PyAudio() + self.buffer = io.BytesIO() + self.channels = channels + self.stream = self.p.open(format=audio_format, + channels=channels, + rate=rate, + frames_per_buffer=chunk_size, + output=True, + output_device_index=device_index, + stream_callback=self.__pyaudio_callback) + self.tracks_and_tasks: List[Tuple[aiortc.MediaStreamTrack, Optional[asyncio.Task]]] = [] + + def __pyaudio_callback(self, in_data, frame_count, time_info, status): + if self.buffer.getbuffer().nbytes < frame_count * self.channels * 2: + buff = b'\x00\x00' * frame_count * self.channels + elif self.buffer.getbuffer().nbytes > 115200: # 3x the usual read size + self.buffer.seek(0) + buff = self.buffer.read(frame_count * self.channels * 4) + buff = buff[:frame_count * self.channels * 2] + self.buffer.seek(2) + else: + self.buffer.seek(0) + buff = self.buffer.read(frame_count * self.channels * 2) + self.buffer.seek(2) + return (buff, pyaudio.paContinue) + + async def __consume(self, track): + while True: + try: + frame = await track.recv() + except aiortc.MediaStreamError: + return + + self.buffer.write(bytes(frame.planes[0])) + + def hasTrack(self, track: aiortc.MediaStreamTrack) -> bool: + return any(t == track for t, _ in self.tracks_and_tasks) + + def addTrack(self, track: aiortc.MediaStreamTrack): + if not self.hasTrack(track): + self.tracks_and_tasks.append((track, None)) + + def start(self): + for index, (track, task) in enumerate(self.tracks_and_tasks): + if task is None: + self.tracks_and_tasks[index] = (track, asyncio.create_task(self.__consume(track))) + + def stop(self): + for _, task in self.tracks_and_tasks: + if task is not None: + task.cancel() + + self.tracks_and_tasks = [] + self.stream.stop_stream() + self.stream.close() + self.p.terminate() diff --git a/system/webrtc/device/video.py b/system/webrtc/device/video.py new file mode 100644 index 0000000000..1ecb6dbd74 --- /dev/null +++ b/system/webrtc/device/video.py @@ -0,0 +1,69 @@ +import asyncio +from typing import Optional + +import av +from teleoprtc.tracks import TiciVideoStreamTrack + +from cereal import messaging +from openpilot.tools.lib.framereader import FrameReader +from openpilot.common.realtime import DT_MDL, DT_DMON + + +class LiveStreamVideoStreamTrack(TiciVideoStreamTrack): + camera_to_sock_mapping = { + "driver": "livestreamDriverEncodeData", + "wideRoad": "livestreamWideRoadEncodeData", + "road": "livestreamRoadEncodeData", + } + + def __init__(self, camera_type: str): + dt = DT_DMON if camera_type == "driver" else DT_MDL + super().__init__(camera_type, dt) + + self._sock = messaging.sub_sock(self.camera_to_sock_mapping[camera_type], conflate=True) + self._pts = 0 + + async def recv(self): + while True: + msg = messaging.recv_one_or_none(self._sock) + if msg is not None: + break + await asyncio.sleep(0.005) + + evta = getattr(msg, msg.which()) + + packet = av.Packet(evta.header + evta.data) + packet.time_base = self._time_base + packet.pts = self._pts + + self.log_debug("track sending frame %s", self._pts) + self._pts += self._dt * self._clock_rate + + return packet + + def codec_preference(self) -> Optional[str]: + return "H264" + + +class FrameReaderVideoStreamTrack(TiciVideoStreamTrack): + def __init__(self, input_file: str, dt: float = DT_MDL, camera_type: str = "driver"): + super().__init__(camera_type, dt) + + frame_reader = FrameReader(input_file) + self._frames = [frame_reader.get(i, pix_fmt="rgb24") for i in range(frame_reader.frame_count)] + self._frame_count = len(self.frames) + self._frame_index = 0 + self._pts = 0 + + async def recv(self): + self.log_debug("track sending frame %s", self._pts) + img = self._frames[self._frame_index] + + new_frame = av.VideoFrame.from_ndarray(img, format="rgb24") + new_frame.pts = self._pts + new_frame.time_base = self._time_base + + self._frame_index = (self._frame_index + 1) % self._frame_count + self._pts = await self.next_pts(self._pts) + + return new_frame diff --git a/system/webrtc/schema.py b/system/webrtc/schema.py new file mode 100644 index 0000000000..f659b34293 --- /dev/null +++ b/system/webrtc/schema.py @@ -0,0 +1,43 @@ +import capnp +from typing import Union, List, Dict, Any + + +def generate_type(type_walker, schema_walker) -> Union[str, List[Any], Dict[str, Any]]: + data_type = next(type_walker) + if data_type.which() == 'struct': + return generate_struct(next(schema_walker)) + elif data_type.which() == 'list': + _ = next(schema_walker) + return [generate_type(type_walker, schema_walker)] + elif data_type.which() == 'enum': + return "text" + else: + return str(data_type.which()) + + +def generate_struct(schema: capnp.lib.capnp._StructSchema) -> Dict[str, Any]: + return {field: generate_field(schema.fields[field]) for field in schema.fields if not field.endswith("DEPRECATED")} + + +def generate_field(field: capnp.lib.capnp._StructSchemaField) -> Union[str, List[Any], Dict[str, Any]]: + def schema_walker(field): + yield field.schema + + s = field.schema + while hasattr(s, 'elementType'): + s = s.elementType + yield s + + def type_walker(field): + yield field.proto.slot.type + + t = field.proto.slot.type + while hasattr(getattr(t, t.which()), 'elementType'): + t = getattr(t, t.which()).elementType + yield t + + if field.proto.which() == "slot": + schema_gen, type_gen = schema_walker(field), type_walker(field) + return generate_type(type_gen, schema_gen) + else: + return generate_struct(field.schema) diff --git a/system/webrtc/tests/test_stream_session.py b/system/webrtc/tests/test_stream_session.py new file mode 100755 index 0000000000..2173c3806b --- /dev/null +++ b/system/webrtc/tests/test_stream_session.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +import asyncio +import unittest +from unittest.mock import Mock, MagicMock, patch +import json +# for aiortc and its dependencies +import warnings +warnings.filterwarnings("ignore", category=DeprecationWarning) + +from aiortc import RTCDataChannel +from aiortc.mediastreams import VIDEO_CLOCK_RATE, VIDEO_TIME_BASE +import capnp +import pyaudio + +from cereal import messaging, log + +from openpilot.system.webrtc.webrtcd import CerealOutgoingMessageProxy, CerealIncomingMessageProxy +from openpilot.system.webrtc.device.video import LiveStreamVideoStreamTrack +from openpilot.system.webrtc.device.audio import AudioInputStreamTrack +from openpilot.common.realtime import DT_DMON + + +class TestStreamSession(unittest.TestCase): + def setUp(self): + self.loop = asyncio.new_event_loop() + + def tearDown(self): + self.loop.stop() + self.loop.close() + + def test_outgoing_proxy(self): + test_msg = log.Event.new_message() + test_msg.logMonoTime = 123 + test_msg.valid = True + test_msg.customReservedRawData0 = b"test" + expected_dict = {"type": "customReservedRawData0", "logMonoTime": 123, "valid": True, "data": "test"} + expected_json = json.dumps(expected_dict).encode() + + channel = Mock(spec=RTCDataChannel) + mocked_submaster = messaging.SubMaster(["customReservedRawData0"]) + def mocked_update(t): + mocked_submaster.update_msgs(0, [test_msg]) + + with patch.object(messaging.SubMaster, "update", side_effect=mocked_update): + proxy = CerealOutgoingMessageProxy(mocked_submaster) + proxy.add_channel(channel) + + proxy.update() + + channel.send.assert_called_once_with(expected_json) + + def test_incoming_proxy(self): + tested_msgs = [ + {"type": "customReservedRawData0", "data": "test"}, # primitive + {"type": "can", "data": [{"address": 0, "busTime": 0, "dat": "", "src": 0}]}, # list + {"type": "testJoystick", "data": {"axes": [0, 0], "buttons": [False]}}, # dict + ] + + mocked_pubmaster = MagicMock(spec=messaging.PubMaster) + + proxy = CerealIncomingMessageProxy(mocked_pubmaster) + + for msg in tested_msgs: + proxy.send(json.dumps(msg).encode()) + + mocked_pubmaster.send.assert_called_once() + mt, md = mocked_pubmaster.send.call_args.args + self.assertEqual(mt, msg["type"]) + self.assertIsInstance(md, capnp._DynamicStructBuilder) + self.assertTrue(hasattr(md, msg["type"])) + + mocked_pubmaster.reset_mock() + + def test_livestream_track(self): + fake_msg = messaging.new_message("livestreamDriverEncodeData") + + config = {"receive.return_value": fake_msg.to_bytes()} + with patch("cereal.messaging.SubSocket", spec=True, **config): + track = LiveStreamVideoStreamTrack("driver") + + self.assertTrue(track.id.startswith("driver")) + self.assertEqual(track.codec_preference(), "H264") + + for i in range(5): + packet = self.loop.run_until_complete(track.recv()) + self.assertEqual(packet.time_base, VIDEO_TIME_BASE) + self.assertEqual(packet.pts, int(i * DT_DMON * VIDEO_CLOCK_RATE)) + self.assertEqual(packet.size, 0) + + def test_input_audio_track(self): + packet_time, rate = 0.02, 16000 + sample_count = int(packet_time * rate) + mocked_stream = MagicMock(spec=pyaudio.Stream) + mocked_stream.read.return_value = b"\x00" * 2 * sample_count + + config = {"open.side_effect": lambda *args, **kwargs: mocked_stream} + with patch("pyaudio.PyAudio", spec=True, **config): + track = AudioInputStreamTrack(audio_format=pyaudio.paInt16, packet_time=packet_time, rate=rate) + + for i in range(5): + frame = self.loop.run_until_complete(track.recv()) + self.assertEqual(frame.rate, rate) + self.assertEqual(frame.samples, sample_count) + self.assertEqual(frame.pts, i * sample_count) + + +if __name__ == "__main__": + unittest.main() diff --git a/system/webrtc/tests/test_webrtcd.py b/system/webrtc/tests/test_webrtcd.py new file mode 100755 index 0000000000..b48bf6bc19 --- /dev/null +++ b/system/webrtc/tests/test_webrtcd.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +import asyncio +import json +import unittest +from unittest.mock import MagicMock, AsyncMock +# for aiortc and its dependencies +import warnings +warnings.filterwarnings("ignore", category=DeprecationWarning) + +from openpilot.system.webrtc.webrtcd import get_stream + +import aiortc +from teleoprtc import WebRTCOfferBuilder + + +class TestWebrtcdProc(unittest.IsolatedAsyncioTestCase): + async def assertCompletesWithTimeout(self, awaitable, timeout=1): + try: + async with asyncio.timeout(timeout): + await awaitable + except asyncio.TimeoutError: + self.fail("Timeout while waiting for awaitable to complete") + + async def test_webrtcd(self): + mock_request = MagicMock() + async def connect(offer): + body = {'sdp': offer.sdp, 'cameras': offer.video, 'bridge_services_in': [], 'bridge_services_out': []} + mock_request.json.side_effect = AsyncMock(return_value=body) + response = await get_stream(mock_request) + response_json = json.loads(response.text) + return aiortc.RTCSessionDescription(**response_json) + + builder = WebRTCOfferBuilder(connect) + builder.offer_to_receive_video_stream("road") + builder.offer_to_receive_audio_stream() + builder.add_messaging() + + stream = builder.stream() + + await self.assertCompletesWithTimeout(stream.start()) + await self.assertCompletesWithTimeout(stream.wait_for_connection()) + + self.assertTrue(stream.has_incoming_video_track("road")) + self.assertTrue(stream.has_incoming_audio_track()) + self.assertTrue(stream.has_messaging_channel()) + + video_track, audio_track = stream.get_incoming_video_track("road"), stream.get_incoming_audio_track() + await self.assertCompletesWithTimeout(video_track.recv()) + await self.assertCompletesWithTimeout(audio_track.recv()) + + await self.assertCompletesWithTimeout(stream.stop()) + + # cleanup, very implementation specific, test may break if it changes + self.assertTrue(mock_request.app["streams"].__setitem__.called, "Implementation changed, please update this test") + _, session = mock_request.app["streams"].__setitem__.call_args.args + await self.assertCompletesWithTimeout(session.post_run_cleanup()) + + +if __name__ == "__main__": + unittest.main() diff --git a/system/webrtc/webrtcd.py b/system/webrtc/webrtcd.py new file mode 100755 index 0000000000..12f9328532 --- /dev/null +++ b/system/webrtc/webrtcd.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python3 + +import argparse +import asyncio +import json +import uuid +import logging +from dataclasses import dataclass, field +from typing import Any, List, Optional, Union + +# aiortc and its dependencies have lots of internal warnings :( +import warnings +warnings.filterwarnings("ignore", category=DeprecationWarning) + +import aiortc +from aiortc.mediastreams import VideoStreamTrack, AudioStreamTrack +from aiortc.contrib.media import MediaBlackhole +from aiortc.exceptions import InvalidStateError +from aiohttp import web +import capnp +from teleoprtc import WebRTCAnswerBuilder +from teleoprtc.info import parse_info_from_offer + +from openpilot.system.webrtc.device.video import LiveStreamVideoStreamTrack +from openpilot.system.webrtc.device.audio import AudioInputStreamTrack, AudioOutputSpeaker +from openpilot.system.webrtc.schema import generate_field + +from cereal import messaging, log + + +class CerealOutgoingMessageProxy: + def __init__(self, sm: messaging.SubMaster): + self.sm = sm + self.channels: List[aiortc.RTCDataChannel] = [] + + def add_channel(self, channel: aiortc.RTCDataChannel): + self.channels.append(channel) + + def to_json(self, msg_content: Any): + if isinstance(msg_content, capnp._DynamicStructReader): + msg_dict = msg_content.to_dict() + elif isinstance(msg_content, capnp._DynamicListReader): + msg_dict = [self.to_json(msg) for msg in msg_content] + elif isinstance(msg_content, bytes): + msg_dict = msg_content.decode() + else: + msg_dict = msg_content + + return msg_dict + + def update(self): + # this is blocking in async context... + self.sm.update(0) + for service, updated in self.sm.updated.items(): + if not updated: + continue + msg_dict = self.to_json(self.sm[service]) + mono_time, valid = self.sm.logMonoTime[service], self.sm.valid[service] + outgoing_msg = {"type": service, "logMonoTime": mono_time, "valid": valid, "data": msg_dict} + encoded_msg = json.dumps(outgoing_msg).encode() + for channel in self.channels: + channel.send(encoded_msg) + + +class CerealIncomingMessageProxy: + def __init__(self, pm: messaging.PubMaster): + self.pm = pm + + def send(self, message: bytes): + msg_json = json.loads(message) + msg_type, msg_data = msg_json["type"], msg_json["data"] + size = None + if not isinstance(msg_data, dict): + size = len(msg_data) + + msg = messaging.new_message(msg_type, size=size) + setattr(msg, msg_type, msg_data) + self.pm.send(msg_type, msg) + + +class CerealProxyRunner: + def __init__(self, proxy: CerealOutgoingMessageProxy): + self.proxy = proxy + self.is_running = False + self.task = None + self.logger = logging.getLogger("webrtcd") + + def start(self): + assert self.task is None + self.task = asyncio.create_task(self.run()) + + def stop(self): + if self.task is None or self.task.done(): + return + self.task.cancel() + self.task = None + + async def run(self): + while True: + try: + self.proxy.update() + except InvalidStateError: + self.logger.warning("Cereal outgoing proxy invalid state (connection closed)") + break + except Exception as ex: + self.logger.error("Cereal outgoing proxy failure: %s", ex) + await asyncio.sleep(0.01) + + +class StreamSession: + def __init__(self, sdp: str, cameras: List[str], incoming_services: List[str], outgoing_services: List[str], debug_mode: bool = False): + config = parse_info_from_offer(sdp) + builder = WebRTCAnswerBuilder(sdp) + + assert len(cameras) == config.n_expected_camera_tracks, "Incoming stream has misconfigured number of video tracks" + for cam in cameras: + track = LiveStreamVideoStreamTrack(cam) if not debug_mode else VideoStreamTrack() + builder.add_video_stream(cam, track) + if config.expected_audio_track: + track = AudioInputStreamTrack() if not debug_mode else AudioStreamTrack() + builder.add_audio_stream(track) + if config.incoming_audio_track: + self.audio_output_cls = AudioOutputSpeaker if not debug_mode else MediaBlackhole + builder.offer_to_receive_audio_stream() + + self.stream = builder.stream() + self.identifier = str(uuid.uuid4()) + + self.outgoing_bridge = CerealOutgoingMessageProxy(messaging.SubMaster(outgoing_services)) + self.incoming_bridge = CerealIncomingMessageProxy(messaging.PubMaster(incoming_services)) + self.outgoing_bridge_runner = CerealProxyRunner(self.outgoing_bridge) + + self.audio_output: Optional[Union[AudioOutputSpeaker, MediaBlackhole]] = None + self.run_task: Optional[asyncio.Task] = None + self.logger = logging.getLogger("webrtcd") + self.logger.info("New stream session (%s), cameras %s, audio in %s out %s, incoming services %s, outgoing services %s", + self.identifier, cameras, config.incoming_audio_track, config.expected_audio_track, incoming_services, outgoing_services) + + def start(self): + self.run_task = asyncio.create_task(self.run()) + + def stop(self): + if self.run_task.done(): + return + self.run_task.cancel() + self.run_task = None + asyncio.run(self.post_run_cleanup()) + + async def get_answer(self): + return await self.stream.start() + + async def message_handler(self, message: bytes): + try: + self.incoming_bridge.send(message) + except Exception as ex: + self.logger.error("Cereal incoming proxy failure: %s", ex) + + async def run(self): + try: + await self.stream.wait_for_connection() + if self.stream.has_messaging_channel(): + self.stream.set_message_handler(self.message_handler) + channel = self.stream.get_messaging_channel() + self.outgoing_bridge_runner.proxy.add_channel(channel) + self.outgoing_bridge_runner.start() + if self.stream.has_incoming_audio_track(): + track = self.stream.get_incoming_audio_track(buffered=False) + self.audio_output = self.audio_output_cls() + self.audio_output.addTrack(track) + self.audio_output.start() + self.logger.info("Stream session (%s) connected", self.identifier) + + await self.stream.wait_for_disconnection() + await self.post_run_cleanup() + + self.logger.info("Stream session (%s) ended", self.identifier) + except Exception as ex: + self.logger.error("Stream session failure: %s", ex) + + async def post_run_cleanup(self): + await self.stream.stop() + self.outgoing_bridge_runner.stop() + if self.audio_output: + self.audio_output.stop() + + +@dataclass +class StreamRequestBody: + sdp: str + cameras: List[str] + bridge_services_in: List[str] = field(default_factory=list) + bridge_services_out: List[str] = field(default_factory=list) + + +async def get_stream(request: web.Request): + stream_dict, debug_mode = request.app['streams'], request.app['debug'] + raw_body = await request.json() + body = StreamRequestBody(**raw_body) + + session = StreamSession(body.sdp, body.cameras, body.bridge_services_in, body.bridge_services_out, debug_mode) + answer = await session.get_answer() + session.start() + + stream_dict[session.identifier] = session + + return web.json_response({"sdp": answer.sdp, "type": answer.type}) + + +async def get_schema(request: web.Request): + services = request.query["services"].split(",") + services = [s for s in services if s] + assert all(s in log.Event.schema.fields and not s.endswith("DEPRECATED") for s in services), "Invalid service name" + schema_dict = {s: generate_field(log.Event.schema.fields[s]) for s in services} + return web.json_response(schema_dict) + + +async def on_shutdown(app: web.Application): + for session in app['streams'].values(): + session.stop() + del app['streams'] + + +def webrtcd_thread(host: str, port: int, debug: bool): + logging.basicConfig(level=logging.CRITICAL, handlers=[logging.StreamHandler()]) + logging_level = logging.DEBUG if debug else logging.INFO + logging.getLogger("WebRTCStream").setLevel(logging_level) + logging.getLogger("webrtcd").setLevel(logging_level) + + app = web.Application() + + app['streams'] = dict() + app['debug'] = debug + app.on_shutdown.append(on_shutdown) + app.router.add_post("/stream", get_stream) + app.router.add_get("/schema", get_schema) + + web.run_app(app, host=host, port=port) + + +def main(): + parser = argparse.ArgumentParser(description="WebRTC daemon") + parser.add_argument("--host", type=str, default="0.0.0.0", help="Host to listen on") + parser.add_argument("--port", type=int, default=5001, help="Port to listen on") + parser.add_argument("--debug", action="store_true", help="Enable debug mode") + args = parser.parse_args() + + webrtcd_thread(args.host, args.port, args.debug) + + +if __name__=="__main__": + main() diff --git a/teleoprtc b/teleoprtc new file mode 120000 index 0000000000..3d3dbc8dea --- /dev/null +++ b/teleoprtc @@ -0,0 +1 @@ +teleoprtc_repo/teleoprtc \ No newline at end of file diff --git a/teleoprtc_repo b/teleoprtc_repo new file mode 160000 index 0000000000..3f9e8176d1 --- /dev/null +++ b/teleoprtc_repo @@ -0,0 +1 @@ +Subproject commit 3f9e8176d1be3d217528baee09fc418fa980a0c3 diff --git a/third_party/acados/Darwin/lib/libacados.dylib b/third_party/acados/Darwin/lib/libacados.dylib index 3270553b02..8cd5a41f14 100755 Binary files a/third_party/acados/Darwin/lib/libacados.dylib and b/third_party/acados/Darwin/lib/libacados.dylib differ diff --git a/third_party/acados/Darwin/lib/libblasfeo.dylib b/third_party/acados/Darwin/lib/libblasfeo.dylib index a7b55b860a..442a6c736d 100755 Binary files a/third_party/acados/Darwin/lib/libblasfeo.dylib and b/third_party/acados/Darwin/lib/libblasfeo.dylib differ diff --git a/third_party/acados/Darwin/lib/libhpipm.dylib b/third_party/acados/Darwin/lib/libhpipm.dylib index d638913f98..019ec8019e 100755 Binary files a/third_party/acados/Darwin/lib/libhpipm.dylib and b/third_party/acados/Darwin/lib/libhpipm.dylib differ diff --git a/third_party/acados/Darwin/lib/libqpOASES_e.3.1.dylib b/third_party/acados/Darwin/lib/libqpOASES_e.3.1.dylib index ab9888ff82..caaa8ec775 100755 Binary files a/third_party/acados/Darwin/lib/libqpOASES_e.3.1.dylib and b/third_party/acados/Darwin/lib/libqpOASES_e.3.1.dylib differ diff --git a/third_party/acados/Darwin/t_renderer b/third_party/acados/Darwin/t_renderer index fa8e9933a8..83a74ea5a3 100755 Binary files a/third_party/acados/Darwin/t_renderer and b/third_party/acados/Darwin/t_renderer differ diff --git a/third_party/acados/include/qpOASES_e/Constants.h b/third_party/acados/include/qpOASES_e/Constants.h index 0e3dcd19f4..13c777d75b 100644 --- a/third_party/acados/include/qpOASES_e/Constants.h +++ b/third_party/acados/include/qpOASES_e/Constants.h @@ -1,134 +1,134 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/Constants.h - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2007-2015 - * - * Definition of all global constants. - */ - - -#ifndef QPOASES_CONSTANTS_H -#define QPOASES_CONSTANTS_H - - -#include - -#ifdef __CODE_GENERATION__ - - #define CONVERTTOSTRINGAUX(x) #x - #define CONVERTTOSTRING(x) CONVERTTOSTRINGAUX(x) - - #ifndef QPOASES_CUSTOM_INTERFACE - #include "acado_qpoases3_interface.h" - #else - #include CONVERTTOSTRING(QPOASES_CUSTOM_INTERFACE) - #endif - -#endif - - -BEGIN_NAMESPACE_QPOASES - - -#ifndef __EXTERNAL_DIMENSIONS__ - - /*#define QPOASES_NVMAX 50 - #define QPOASES_NCMAX 100*/ - #define QPOASES_NVMAX 287 - #define QPOASES_NCMAX 709 - -#endif /* __EXTERNAL_DIMENSIONS__ */ - - -/** Maximum number of variables within a QP formulation. - * Note: this value has to be positive! */ -#define NVMAX QPOASES_NVMAX - -/** Maximum number of constraints within a QP formulation. - * Note: this value has to be positive! */ -#define NCMAX QPOASES_NCMAX - -#if ( QPOASES_NVMAX > QPOASES_NCMAX ) -#define NVCMAX QPOASES_NVMAX -#else -#define NVCMAX QPOASES_NCMAX -#endif - -#if ( QPOASES_NVMAX > QPOASES_NCMAX ) -#define NVCMIN QPOASES_NCMAX -#else -#define NVCMIN QPOASES_NVMAX -#endif - - -/** Maximum number of QPs in a sequence solved by means of the OQP interface. - * Note: this value has to be positive! */ -#define NQPMAX 1000 - - -/** Numerical value of machine precision (min eps, s.t. 1+eps > 1). - * Note: this value has to be positive! */ -#ifndef __CODE_GENERATION__ - - #ifdef __USE_SINGLE_PRECISION__ - static const real_t QPOASES_EPS = 1.193e-07; - #else - static const real_t QPOASES_EPS = 2.221e-16; - #endif /* __USE_SINGLE_PRECISION__ */ - -#endif /* __CODE_GENERATION__ */ - - -/** Numerical value of zero (for situations in which it would be - * unreasonable to compare with 0.0). - * Note: this value has to be positive! */ -static const real_t QPOASES_ZERO = 1.0e-25; - -/** Numerical value of infinity (e.g. for non-existing bounds). - * Note: this value has to be positive! */ -static const real_t QPOASES_INFTY = 1.0e20; - -/** Tolerance to used for isEqual, isZero etc. - * Note: this value has to be positive! */ -static const real_t QPOASES_TOL = 1.0e-25; - - -/** Maximum number of characters within a string. - * Note: this value should be at least 41! */ -#define QPOASES_MAX_STRING_LENGTH 160 - - -END_NAMESPACE_QPOASES - - -#endif /* QPOASES_CONSTANTS_H */ - - -/* - * end of file - */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/Constants.h + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2007-2015 + * + * Definition of all global constants. + */ + + +#ifndef QPOASES_CONSTANTS_H +#define QPOASES_CONSTANTS_H + + +#include + +#ifdef __CODE_GENERATION__ + + #define CONVERTTOSTRINGAUX(x) #x + #define CONVERTTOSTRING(x) CONVERTTOSTRINGAUX(x) + + #ifndef QPOASES_CUSTOM_INTERFACE + #include "acado_qpoases3_interface.h" + #else + #include CONVERTTOSTRING(QPOASES_CUSTOM_INTERFACE) + #endif + +#endif + + +BEGIN_NAMESPACE_QPOASES + + +#ifndef __EXTERNAL_DIMENSIONS__ + + /*#define QPOASES_NVMAX 50 + #define QPOASES_NCMAX 100*/ + #define QPOASES_NVMAX 287 + #define QPOASES_NCMAX 709 + +#endif /* __EXTERNAL_DIMENSIONS__ */ + + +/** Maximum number of variables within a QP formulation. + * Note: this value has to be positive! */ +#define NVMAX QPOASES_NVMAX + +/** Maximum number of constraints within a QP formulation. + * Note: this value has to be positive! */ +#define NCMAX QPOASES_NCMAX + +#if ( QPOASES_NVMAX > QPOASES_NCMAX ) +#define NVCMAX QPOASES_NVMAX +#else +#define NVCMAX QPOASES_NCMAX +#endif + +#if ( QPOASES_NVMAX > QPOASES_NCMAX ) +#define NVCMIN QPOASES_NCMAX +#else +#define NVCMIN QPOASES_NVMAX +#endif + + +/** Maximum number of QPs in a sequence solved by means of the OQP interface. + * Note: this value has to be positive! */ +#define NQPMAX 1000 + + +/** Numerical value of machine precision (min eps, s.t. 1+eps > 1). + * Note: this value has to be positive! */ +#ifndef __CODE_GENERATION__ + + #ifdef __USE_SINGLE_PRECISION__ + static const real_t QPOASES_EPS = 1.193e-07; + #else + static const real_t QPOASES_EPS = 2.221e-16; + #endif /* __USE_SINGLE_PRECISION__ */ + +#endif /* __CODE_GENERATION__ */ + + +/** Numerical value of zero (for situations in which it would be + * unreasonable to compare with 0.0). + * Note: this value has to be positive! */ +static const real_t QPOASES_ZERO = 1.0e-25; + +/** Numerical value of infinity (e.g. for non-existing bounds). + * Note: this value has to be positive! */ +static const real_t QPOASES_INFTY = 1.0e20; + +/** Tolerance to used for isEqual, isZero etc. + * Note: this value has to be positive! */ +static const real_t QPOASES_TOL = 1.0e-25; + + +/** Maximum number of characters within a string. + * Note: this value should be at least 41! */ +#define QPOASES_MAX_STRING_LENGTH 160 + + +END_NAMESPACE_QPOASES + + +#endif /* QPOASES_CONSTANTS_H */ + + +/* + * end of file + */ diff --git a/third_party/acados/include/qpOASES_e/ConstraintProduct.h b/third_party/acados/include/qpOASES_e/ConstraintProduct.h index ddfcfbe5dc..eb5400c6cb 100644 --- a/third_party/acados/include/qpOASES_e/ConstraintProduct.h +++ b/third_party/acados/include/qpOASES_e/ConstraintProduct.h @@ -1,62 +1,62 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/ConstraintProduct.h - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches (thanks to D. Kwame Minde Kufoalor) - * \version 3.1embedded - * \date 2009-2015 - * - * Declaration of the ConstraintProduct interface which allows to specify a - * user-defined function for evaluating the constraint product at the - * current iterate to speed-up QP solution in case of a specially structured - * constraint matrix. - */ - - - -#ifndef QPOASES_CONSTRAINT_PRODUCT_H -#define QPOASES_CONSTRAINT_PRODUCT_H - - -BEGIN_NAMESPACE_QPOASES - - -/** - * \brief Interface for specifying user-defined evaluations of constraint products. - * - * An interface which allows to specify a user-defined function for evaluating the - * constraint product at the current iterate to speed-up QP solution in case - * of a specially structured constraint matrix. - * - * \author Hans Joachim Ferreau (thanks to Kwame Minde Kufoalor) - * \version 3.1embedded - * \date 2009-2015 - */ -typedef int(*ConstraintProduct)( int, const real_t* const, real_t* const ); - - -END_NAMESPACE_QPOASES - -#endif /* QPOASES_CONSTRAINT_PRODUCT_H */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/ConstraintProduct.h + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches (thanks to D. Kwame Minde Kufoalor) + * \version 3.1embedded + * \date 2009-2015 + * + * Declaration of the ConstraintProduct interface which allows to specify a + * user-defined function for evaluating the constraint product at the + * current iterate to speed-up QP solution in case of a specially structured + * constraint matrix. + */ + + + +#ifndef QPOASES_CONSTRAINT_PRODUCT_H +#define QPOASES_CONSTRAINT_PRODUCT_H + + +BEGIN_NAMESPACE_QPOASES + + +/** + * \brief Interface for specifying user-defined evaluations of constraint products. + * + * An interface which allows to specify a user-defined function for evaluating the + * constraint product at the current iterate to speed-up QP solution in case + * of a specially structured constraint matrix. + * + * \author Hans Joachim Ferreau (thanks to Kwame Minde Kufoalor) + * \version 3.1embedded + * \date 2009-2015 + */ +typedef int(*ConstraintProduct)( int, const real_t* const, real_t* const ); + + +END_NAMESPACE_QPOASES + +#endif /* QPOASES_CONSTRAINT_PRODUCT_H */ diff --git a/third_party/acados/include/qpOASES_e/Indexlist.h b/third_party/acados/include/qpOASES_e/Indexlist.h index c3026a7ffc..02d259d63d 100644 --- a/third_party/acados/include/qpOASES_e/Indexlist.h +++ b/third_party/acados/include/qpOASES_e/Indexlist.h @@ -1,221 +1,221 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/Indexlist.h - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2007-2015 - * - * Declaration of the Indexlist class designed to manage index lists of - * constraints and bounds within a SubjectTo object. - */ - - -#ifndef QPOASES_INDEXLIST_H -#define QPOASES_INDEXLIST_H - - -#include - - -BEGIN_NAMESPACE_QPOASES - - -/** - * \brief Stores and manages index lists. - * - * This class manages index lists of active/inactive bounds/constraints. - * - * \author Hans Joachim Ferreau - * \version 3.1embedded - * \date 2007-2015 - */ -typedef struct -{ - int *number; /**< Array to store numbers of constraints or bounds. */ - int *iSort; /**< Index list to sort vector \a number */ - - int length; /**< Length of index list. */ - int first; /**< Physical index of first element. */ - int last; /**< Physical index of last element. */ - int lastusedindex; /**< Physical index of last entry in index list. */ - int physicallength; /**< Physical length of index list. */ -} Indexlist; - -int Indexlist_calculateMemorySize( int n); - -char *Indexlist_assignMemory(int n, Indexlist **mem, void *raw_memory); - -Indexlist *Indexlist_createMemory( int n ); - -/** Constructor which takes the desired physical length of the index list. */ -void IndexlistCON( Indexlist* _THIS, - int n /**< Physical length of index list. */ - ); - -/** Copies all members from given rhs object. - * \return SUCCESSFUL_RETURN */ -void IndexlistCPY( Indexlist* FROM, - Indexlist* TO - ); - -/** Initialises index list of desired physical length. - * \return SUCCESSFUL_RETURN \n - RET_INVALID_ARGUMENTS */ -returnValue Indexlist_init( Indexlist* _THIS, - int n /**< Physical length of index list. */ - ); - -/** Creates an array of all numbers within the index set in correct order. - * \return SUCCESSFUL_RETURN \n - RET_INDEXLIST_CORRUPTED */ -returnValue Indexlist_getNumberArray( Indexlist* _THIS, - int** const numberarray /**< Output: Array of numbers (NULL on error). */ - ); - -/** Creates an array of all numbers within the index set in correct order. - * \return SUCCESSFUL_RETURN \n - RET_INDEXLIST_CORRUPTED */ -returnValue Indexlist_getISortArray( Indexlist* _THIS, - int** const iSortArray /**< Output: iSort Array. */ - ); - - -/** Determines the index within the index list at which a given number is stored. - * \return >= 0: Index of given number. \n - -1: Number not found. */ -int Indexlist_getIndex( Indexlist* _THIS, - int givennumber /**< Number whose index shall be determined. */ - ); - -/** Returns the number stored at a given physical index. - * \return >= 0: Number stored at given physical index. \n - -RET_INDEXLIST_OUTOFBOUNDS */ -static inline int Indexlist_getNumber( Indexlist* _THIS, - int physicalindex /**< Physical index of the number to be returned. */ - ); - - -/** Returns the current length of the index list. - * \return Current length of the index list. */ -static inline int Indexlist_getLength( Indexlist* _THIS - ); - -/** Returns last number within the index list. - * \return Last number within the index list. */ -static inline int Indexlist_getLastNumber( Indexlist* _THIS - ); - - -/** Adds number to index list. - * \return SUCCESSFUL_RETURN \n - RET_INDEXLIST_MUST_BE_REORDERD \n - RET_INDEXLIST_EXCEEDS_MAX_LENGTH */ -returnValue Indexlist_addNumber( Indexlist* _THIS, - int addnumber /**< Number to be added. */ - ); - -/** Removes number from index list. - * \return SUCCESSFUL_RETURN */ -returnValue Indexlist_removeNumber( Indexlist* _THIS, - int removenumber /**< Number to be removed. */ - ); - -/** Swaps two numbers within index list. - * \return SUCCESSFUL_RETURN */ -returnValue Indexlist_swapNumbers( Indexlist* _THIS, - int number1, /**< First number for swapping. */ - int number2 /**< Second number for swapping. */ - ); - -/** Determines if a given number is contained in the index set. - * \return BT_TRUE iff number is contain in the index set */ -static inline BooleanType Indexlist_isMember( Indexlist* _THIS, - int _number /**< Number to be tested for membership. */ - ); - - -/** Find first index j between -1 and length in sorted list of indices - * iSort such that numbers[iSort[j]] <= i < numbers[iSort[j+1]]. Uses - * bisection. - * \return j. */ -int Indexlist_findInsert( Indexlist* _THIS, - int i - ); - - - -/* - * g e t N u m b e r - */ -static inline int Indexlist_getNumber( Indexlist* _THIS, int physicalindex ) -{ - /* consistency check */ - if ( ( physicalindex < 0 ) || ( physicalindex > _THIS->length ) ) - return -RET_INDEXLIST_OUTOFBOUNDS; - - return _THIS->number[physicalindex]; -} - - -/* - * g e t L e n g t h - */ -static inline int Indexlist_getLength( Indexlist* _THIS ) -{ - return _THIS->length; -} - - -/* - * g e t L a s t N u m b e r - */ -static inline int Indexlist_getLastNumber( Indexlist* _THIS ) -{ - return _THIS->number[_THIS->length-1]; -} - - -/* - * g e t L a s t N u m b e r - */ -static inline BooleanType Indexlist_isMember( Indexlist* _THIS, int _number ) -{ - if ( Indexlist_getIndex( _THIS,_number ) >= 0 ) - return BT_TRUE; - else - return BT_FALSE; -} - - -END_NAMESPACE_QPOASES - - -#endif /* QPOASES_INDEXLIST_H */ - - -/* - * end of file - */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/Indexlist.h + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2007-2015 + * + * Declaration of the Indexlist class designed to manage index lists of + * constraints and bounds within a SubjectTo object. + */ + + +#ifndef QPOASES_INDEXLIST_H +#define QPOASES_INDEXLIST_H + + +#include + + +BEGIN_NAMESPACE_QPOASES + + +/** + * \brief Stores and manages index lists. + * + * This class manages index lists of active/inactive bounds/constraints. + * + * \author Hans Joachim Ferreau + * \version 3.1embedded + * \date 2007-2015 + */ +typedef struct +{ + int *number; /**< Array to store numbers of constraints or bounds. */ + int *iSort; /**< Index list to sort vector \a number */ + + int length; /**< Length of index list. */ + int first; /**< Physical index of first element. */ + int last; /**< Physical index of last element. */ + int lastusedindex; /**< Physical index of last entry in index list. */ + int physicallength; /**< Physical length of index list. */ +} Indexlist; + +int Indexlist_calculateMemorySize( int n); + +char *Indexlist_assignMemory(int n, Indexlist **mem, void *raw_memory); + +Indexlist *Indexlist_createMemory( int n ); + +/** Constructor which takes the desired physical length of the index list. */ +void IndexlistCON( Indexlist* _THIS, + int n /**< Physical length of index list. */ + ); + +/** Copies all members from given rhs object. + * \return SUCCESSFUL_RETURN */ +void IndexlistCPY( Indexlist* FROM, + Indexlist* TO + ); + +/** Initialises index list of desired physical length. + * \return SUCCESSFUL_RETURN \n + RET_INVALID_ARGUMENTS */ +returnValue Indexlist_init( Indexlist* _THIS, + int n /**< Physical length of index list. */ + ); + +/** Creates an array of all numbers within the index set in correct order. + * \return SUCCESSFUL_RETURN \n + RET_INDEXLIST_CORRUPTED */ +returnValue Indexlist_getNumberArray( Indexlist* _THIS, + int** const numberarray /**< Output: Array of numbers (NULL on error). */ + ); + +/** Creates an array of all numbers within the index set in correct order. + * \return SUCCESSFUL_RETURN \n + RET_INDEXLIST_CORRUPTED */ +returnValue Indexlist_getISortArray( Indexlist* _THIS, + int** const iSortArray /**< Output: iSort Array. */ + ); + + +/** Determines the index within the index list at which a given number is stored. + * \return >= 0: Index of given number. \n + -1: Number not found. */ +int Indexlist_getIndex( Indexlist* _THIS, + int givennumber /**< Number whose index shall be determined. */ + ); + +/** Returns the number stored at a given physical index. + * \return >= 0: Number stored at given physical index. \n + -RET_INDEXLIST_OUTOFBOUNDS */ +static inline int Indexlist_getNumber( Indexlist* _THIS, + int physicalindex /**< Physical index of the number to be returned. */ + ); + + +/** Returns the current length of the index list. + * \return Current length of the index list. */ +static inline int Indexlist_getLength( Indexlist* _THIS + ); + +/** Returns last number within the index list. + * \return Last number within the index list. */ +static inline int Indexlist_getLastNumber( Indexlist* _THIS + ); + + +/** Adds number to index list. + * \return SUCCESSFUL_RETURN \n + RET_INDEXLIST_MUST_BE_REORDERD \n + RET_INDEXLIST_EXCEEDS_MAX_LENGTH */ +returnValue Indexlist_addNumber( Indexlist* _THIS, + int addnumber /**< Number to be added. */ + ); + +/** Removes number from index list. + * \return SUCCESSFUL_RETURN */ +returnValue Indexlist_removeNumber( Indexlist* _THIS, + int removenumber /**< Number to be removed. */ + ); + +/** Swaps two numbers within index list. + * \return SUCCESSFUL_RETURN */ +returnValue Indexlist_swapNumbers( Indexlist* _THIS, + int number1, /**< First number for swapping. */ + int number2 /**< Second number for swapping. */ + ); + +/** Determines if a given number is contained in the index set. + * \return BT_TRUE iff number is contain in the index set */ +static inline BooleanType Indexlist_isMember( Indexlist* _THIS, + int _number /**< Number to be tested for membership. */ + ); + + +/** Find first index j between -1 and length in sorted list of indices + * iSort such that numbers[iSort[j]] <= i < numbers[iSort[j+1]]. Uses + * bisection. + * \return j. */ +int Indexlist_findInsert( Indexlist* _THIS, + int i + ); + + + +/* + * g e t N u m b e r + */ +static inline int Indexlist_getNumber( Indexlist* _THIS, int physicalindex ) +{ + /* consistency check */ + if ( ( physicalindex < 0 ) || ( physicalindex > _THIS->length ) ) + return -RET_INDEXLIST_OUTOFBOUNDS; + + return _THIS->number[physicalindex]; +} + + +/* + * g e t L e n g t h + */ +static inline int Indexlist_getLength( Indexlist* _THIS ) +{ + return _THIS->length; +} + + +/* + * g e t L a s t N u m b e r + */ +static inline int Indexlist_getLastNumber( Indexlist* _THIS ) +{ + return _THIS->number[_THIS->length-1]; +} + + +/* + * g e t L a s t N u m b e r + */ +static inline BooleanType Indexlist_isMember( Indexlist* _THIS, int _number ) +{ + if ( Indexlist_getIndex( _THIS,_number ) >= 0 ) + return BT_TRUE; + else + return BT_FALSE; +} + + +END_NAMESPACE_QPOASES + + +#endif /* QPOASES_INDEXLIST_H */ + + +/* + * end of file + */ diff --git a/third_party/acados/include/qpOASES_e/Matrices.h b/third_party/acados/include/qpOASES_e/Matrices.h index 1d6da8c3c1..e2a46b3a9d 100644 --- a/third_party/acados/include/qpOASES_e/Matrices.h +++ b/third_party/acados/include/qpOASES_e/Matrices.h @@ -1,287 +1,287 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/Matrices.h - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2009-2015 - * - * Various matrix classes: Abstract base matrix class, dense and sparse matrices, - * including symmetry exploiting specializations. - */ - - - -#ifndef QPOASES_MATRICES_H -#define QPOASES_MATRICES_H - -#ifdef __USE_SINGLE_PRECISION__ - - // single precision - #define GEMM sgemm_ - #define GEMV sgemv_ -// #define SYR ssyr_ -// #define SYR2 ssyr2_ - #define POTRF spotrf_ - -#else - - // double precision - #define GEMM dgemm_ - #define GEMV dgemv_ -// #define SYR dsyr_ -// #define SYR2 dsyr2_ - #define POTRF dpotrf_ - -#endif /* __USE_SINGLE_PRECISION__ */ - - -#ifdef EXTERNAL_BLAS - // double precision - void dgemm_(char *ta, char *tb, int *m, int *n, int *k, double *alpha, double *A, int *lda, double *B, int ldb, double *beta, double *C, int *ldc); - void dgemv_(char *ta, int *m, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy); - void dpotrf_(char *uplo, int *m, double *A, int *lda, int *info); - // single precision - void sgemm_(char *ta, char *tb, int *m, int *n, int *k, float *alpha, float *A, int *lda, float *B, int ldb, float *beta, float *C, int *ldc); - void sgemv_(char *ta, int *m, int *n, float *alpha, float *A, int *lda, float *x, int *incx, float *beta, float *y, int *incy); - void spotrf_(char *uplo, int *m, float *A, int *lda, int *info); -#else - /** Performs one of the matrix-matrix operation in double precision. */ - void dgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, - const double*, const double*, const unsigned long*, const double*, const unsigned long*, - const double*, double*, const unsigned long* ); - /** Performs one of the matrix-matrix operation in single precision. */ - void sgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, - const float*, const float*, const unsigned long*, const float*, const unsigned long*, - const float*, float*, const unsigned long* ); - - /** Calculates the Cholesky factorization of a real symmetric positive definite matrix in double precision. */ - void dpotrf_ ( const char *, const unsigned long *, double *, const unsigned long *, long * ); - /** Calculates the Cholesky factorization of a real symmetric positive definite matrix in single precision. */ - void spotrf_ ( const char *, const unsigned long *, float *, const unsigned long *, long * ); - -#endif - - /** Performs a symmetric rank 1 operation in double precision. */ -// void dsyr_ ( const char *, const unsigned long *, const double *, const double *, -// const unsigned long *, double *, const unsigned long *); - /** Performs a symmetric rank 1 operation in single precision. */ -// void ssyr_ ( const char *, const unsigned long *, const float *, const float *, -// const unsigned long *, float *, const unsigned long *); - - /** Performs a symmetric rank 2 operation in double precision. */ -// void dsyr2_ ( const char *, const unsigned long *, const double *, const double *, -// const unsigned long *, const double *, const unsigned long *, double *, const unsigned long *); - /** Performs a symmetric rank 2 operation in single precision. */ -// void ssyr2_ ( const char *, const unsigned long *, const float *, const float *, -// const unsigned long *, const float *, const unsigned long *, float *, const unsigned long *); - - -#include - - -BEGIN_NAMESPACE_QPOASES - - -/** - * \brief Interfaces matrix-vector operations tailored to general dense matrices. - * - * Dense matrix class (row major format). - * - * \author Andreas Potschka, Christian Kirches, Hans Joachim Ferreau - * \version 3.1embedded - * \date 2011-2015 - */ -typedef struct -{ - real_t *val; /**< Vector of entries. */ - int nRows; /**< Number of rows. */ - int nCols; /**< Number of columns. */ - int leaDim; /**< Leading dimension. */ -} DenseMatrix; - -int DenseMatrix_calculateMemorySize( int m, int n ); - -char *DenseMatrix_assignMemory( int m, int n, DenseMatrix **mem, void *raw_memory ); - -DenseMatrix *DenseMatrix_createMemory( int m, int n ); - -/** Constructor from vector of values. - * Caution: Data pointer must be valid throughout lifetime - */ -void DenseMatrixCON( DenseMatrix* _THIS, - int m, /**< Number of rows. */ - int n, /**< Number of columns. */ - int lD, /**< Leading dimension. */ - real_t *v /**< Values. */ - ); - -void DenseMatrixCPY( DenseMatrix* FROM, - DenseMatrix* TO - ); - - -/** Frees all internal memory. */ -void DenseMatrix_free( DenseMatrix* _THIS ); - -/** Constructor from vector of values. - * Caution: Data pointer must be valid throughout lifetime - */ -returnValue DenseMatrix_init( DenseMatrix* _THIS, - int m, /**< Number of rows. */ - int n, /**< Number of columns. */ - int lD, /**< Leading dimension. */ - real_t *v /**< Values. */ - ); - - -/** Returns i-th diagonal entry. - * \return i-th diagonal entry */ -real_t DenseMatrix_diag( DenseMatrix* _THIS, - int i /**< Index. */ - ); - -/** Checks whether matrix is square and diagonal. - * \return BT_TRUE iff matrix is square and diagonal; \n - * BT_FALSE otherwise. */ -BooleanType DenseMatrix_isDiag( DenseMatrix* _THIS ); - -/** Get the N-norm of the matrix - * \return N-norm of the matrix - */ -real_t DenseMatrix_getNorm( DenseMatrix* _THIS, - int type /**< Norm type, 1: one-norm, 2: Euclidean norm. */ - ); - -/** Get the N-norm of a row - * \return N-norm of row \a rNum - */ -real_t DenseMatrix_getRowNorm( DenseMatrix* _THIS, - int rNum, /**< Row number. */ - int type /**< Norm type, 1: one-norm, 2: Euclidean norm. */ - ); - -/** Retrieve indexed entries of matrix row multiplied by alpha. - * \return SUCCESSFUL_RETURN */ -returnValue DenseMatrix_getRow( DenseMatrix* _THIS, - int rNum, /**< Row number. */ - const Indexlist* const icols, /**< Index list specifying columns. */ - real_t alpha, /**< Scalar factor. */ - real_t *row /**< Output row vector. */ - ); - -/** Retrieve indexed entries of matrix column multiplied by alpha. - * \return SUCCESSFUL_RETURN */ - returnValue DenseMatrix_getCol( DenseMatrix* _THIS, - int cNum, /**< Column number. */ - const Indexlist* const irows, /**< Index list specifying rows. */ - real_t alpha, /**< Scalar factor. */ - real_t *col /**< Output column vector. */ - ); - -/** Evaluate Y=alpha*A*X + beta*Y. - * \return SUCCESSFUL_RETURN. */ -returnValue DenseMatrix_times( DenseMatrix* _THIS, - int xN, /**< Number of vectors to multiply. */ - real_t alpha, /**< Scalar factor for matrix vector product. */ - const real_t *x, /**< Input vector to be multiplied. */ - int xLD, /**< Leading dimension of input x. */ - real_t beta, /**< Scalar factor for y. */ - real_t *y, /**< Output vector of results. */ - int yLD /**< Leading dimension of output y. */ - ); - -/** Evaluate Y=alpha*A'*X + beta*Y. - * \return SUCCESSFUL_RETURN. */ -returnValue DenseMatrix_transTimes( DenseMatrix* _THIS, - int xN, /**< Number of vectors to multiply. */ - real_t alpha, /**< Scalar factor for matrix vector product. */ - const real_t *x, /**< Input vector to be multiplied. */ - int xLD, /**< Leading dimension of input x. */ - real_t beta, /**< Scalar factor for y. */ - real_t *y, /**< Output vector of results. */ - int yLD /**< Leading dimension of output y. */ - ); - -/** Evaluate matrix vector product with submatrix given by Indexlist. - * \return SUCCESSFUL_RETURN */ - returnValue DenseMatrix_subTimes( DenseMatrix* _THIS, - const Indexlist* const irows, /**< Index list specifying rows. */ - const Indexlist* const icols, /**< Index list specifying columns. */ - int xN, /**< Number of vectors to multiply. */ - real_t alpha, /**< Scalar factor for matrix vector product. */ - const real_t *x, /**< Input vector to be multiplied. */ - int xLD, /**< Leading dimension of input x. */ - real_t beta, /**< Scalar factor for y. */ - real_t *y, /**< Output vector of results. */ - int yLD, /**< Leading dimension of output y. */ - BooleanType yCompr /**< Compressed storage for y. */ - ); - -/** Evaluate matrix transpose vector product. - * \return SUCCESSFUL_RETURN */ -returnValue DenseMatrix_subTransTimes( DenseMatrix* _THIS, - const Indexlist* const irows, /**< Index list specifying rows. */ - const Indexlist* const icols, /**< Index list specifying columns. */ - int xN, /**< Number of vectors to multiply. */ - real_t alpha, /**< Scalar factor for matrix vector product. */ - const real_t *x, /**< Input vector to be multiplied. */ - int xLD, /**< Leading dimension of input x. */ - real_t beta, /**< Scalar factor for y. */ - real_t *y, /**< Output vector of results. */ - int yLD /**< Leading dimension of output y. */ - ); - -/** Adds given offset to diagonal of matrix. - * \return SUCCESSFUL_RETURN \n - RET_NO_DIAGONAL_AVAILABLE */ -returnValue DenseMatrix_addToDiag( DenseMatrix* _THIS, - real_t alpha /**< Diagonal offset. */ - ); - -/** Prints matrix to screen. - * \return SUCCESSFUL_RETURN */ -returnValue DenseMatrix_print( DenseMatrix* _THIS - ); - -static inline real_t* DenseMatrix_getVal( DenseMatrix* _THIS ) { return _THIS->val; } - -/** Compute bilinear form y = x'*H*x using submatrix given by index list. - * \return SUCCESSFUL_RETURN */ -returnValue DenseMatrix_bilinear( DenseMatrix* _THIS, - const Indexlist* const icols, /**< Index list specifying columns of x. */ - int xN, /**< Number of vectors to multiply. */ - const real_t *x, /**< Input vector to be multiplied (uncompressed). */ - int xLD, /**< Leading dimension of input x. */ - real_t *y, /**< Output vector of results (compressed). */ - int yLD /**< Leading dimension of output y. */ - ); - - - -END_NAMESPACE_QPOASES - - -#endif /* QPOASES_MATRICES_H */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/Matrices.h + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2009-2015 + * + * Various matrix classes: Abstract base matrix class, dense and sparse matrices, + * including symmetry exploiting specializations. + */ + + + +#ifndef QPOASES_MATRICES_H +#define QPOASES_MATRICES_H + +#ifdef __USE_SINGLE_PRECISION__ + + // single precision + #define GEMM sgemm_ + #define GEMV sgemv_ +// #define SYR ssyr_ +// #define SYR2 ssyr2_ + #define POTRF spotrf_ + +#else + + // double precision + #define GEMM dgemm_ + #define GEMV dgemv_ +// #define SYR dsyr_ +// #define SYR2 dsyr2_ + #define POTRF dpotrf_ + +#endif /* __USE_SINGLE_PRECISION__ */ + + +#ifdef EXTERNAL_BLAS + // double precision + void dgemm_(char *ta, char *tb, int *m, int *n, int *k, double *alpha, double *A, int *lda, double *B, int ldb, double *beta, double *C, int *ldc); + void dgemv_(char *ta, int *m, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy); + void dpotrf_(char *uplo, int *m, double *A, int *lda, int *info); + // single precision + void sgemm_(char *ta, char *tb, int *m, int *n, int *k, float *alpha, float *A, int *lda, float *B, int ldb, float *beta, float *C, int *ldc); + void sgemv_(char *ta, int *m, int *n, float *alpha, float *A, int *lda, float *x, int *incx, float *beta, float *y, int *incy); + void spotrf_(char *uplo, int *m, float *A, int *lda, int *info); +#else + /** Performs one of the matrix-matrix operation in double precision. */ + void dgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, + const double*, const double*, const unsigned long*, const double*, const unsigned long*, + const double*, double*, const unsigned long* ); + /** Performs one of the matrix-matrix operation in single precision. */ + void sgemm_ ( const char*, const char*, const unsigned long*, const unsigned long*, const unsigned long*, + const float*, const float*, const unsigned long*, const float*, const unsigned long*, + const float*, float*, const unsigned long* ); + + /** Calculates the Cholesky factorization of a real symmetric positive definite matrix in double precision. */ + void dpotrf_ ( const char *, const unsigned long *, double *, const unsigned long *, long * ); + /** Calculates the Cholesky factorization of a real symmetric positive definite matrix in single precision. */ + void spotrf_ ( const char *, const unsigned long *, float *, const unsigned long *, long * ); + +#endif + + /** Performs a symmetric rank 1 operation in double precision. */ +// void dsyr_ ( const char *, const unsigned long *, const double *, const double *, +// const unsigned long *, double *, const unsigned long *); + /** Performs a symmetric rank 1 operation in single precision. */ +// void ssyr_ ( const char *, const unsigned long *, const float *, const float *, +// const unsigned long *, float *, const unsigned long *); + + /** Performs a symmetric rank 2 operation in double precision. */ +// void dsyr2_ ( const char *, const unsigned long *, const double *, const double *, +// const unsigned long *, const double *, const unsigned long *, double *, const unsigned long *); + /** Performs a symmetric rank 2 operation in single precision. */ +// void ssyr2_ ( const char *, const unsigned long *, const float *, const float *, +// const unsigned long *, const float *, const unsigned long *, float *, const unsigned long *); + + +#include + + +BEGIN_NAMESPACE_QPOASES + + +/** + * \brief Interfaces matrix-vector operations tailored to general dense matrices. + * + * Dense matrix class (row major format). + * + * \author Andreas Potschka, Christian Kirches, Hans Joachim Ferreau + * \version 3.1embedded + * \date 2011-2015 + */ +typedef struct +{ + real_t *val; /**< Vector of entries. */ + int nRows; /**< Number of rows. */ + int nCols; /**< Number of columns. */ + int leaDim; /**< Leading dimension. */ +} DenseMatrix; + +int DenseMatrix_calculateMemorySize( int m, int n ); + +char *DenseMatrix_assignMemory( int m, int n, DenseMatrix **mem, void *raw_memory ); + +DenseMatrix *DenseMatrix_createMemory( int m, int n ); + +/** Constructor from vector of values. + * Caution: Data pointer must be valid throughout lifetime + */ +void DenseMatrixCON( DenseMatrix* _THIS, + int m, /**< Number of rows. */ + int n, /**< Number of columns. */ + int lD, /**< Leading dimension. */ + real_t *v /**< Values. */ + ); + +void DenseMatrixCPY( DenseMatrix* FROM, + DenseMatrix* TO + ); + + +/** Frees all internal memory. */ +void DenseMatrix_free( DenseMatrix* _THIS ); + +/** Constructor from vector of values. + * Caution: Data pointer must be valid throughout lifetime + */ +returnValue DenseMatrix_init( DenseMatrix* _THIS, + int m, /**< Number of rows. */ + int n, /**< Number of columns. */ + int lD, /**< Leading dimension. */ + real_t *v /**< Values. */ + ); + + +/** Returns i-th diagonal entry. + * \return i-th diagonal entry */ +real_t DenseMatrix_diag( DenseMatrix* _THIS, + int i /**< Index. */ + ); + +/** Checks whether matrix is square and diagonal. + * \return BT_TRUE iff matrix is square and diagonal; \n + * BT_FALSE otherwise. */ +BooleanType DenseMatrix_isDiag( DenseMatrix* _THIS ); + +/** Get the N-norm of the matrix + * \return N-norm of the matrix + */ +real_t DenseMatrix_getNorm( DenseMatrix* _THIS, + int type /**< Norm type, 1: one-norm, 2: Euclidean norm. */ + ); + +/** Get the N-norm of a row + * \return N-norm of row \a rNum + */ +real_t DenseMatrix_getRowNorm( DenseMatrix* _THIS, + int rNum, /**< Row number. */ + int type /**< Norm type, 1: one-norm, 2: Euclidean norm. */ + ); + +/** Retrieve indexed entries of matrix row multiplied by alpha. + * \return SUCCESSFUL_RETURN */ +returnValue DenseMatrix_getRow( DenseMatrix* _THIS, + int rNum, /**< Row number. */ + const Indexlist* const icols, /**< Index list specifying columns. */ + real_t alpha, /**< Scalar factor. */ + real_t *row /**< Output row vector. */ + ); + +/** Retrieve indexed entries of matrix column multiplied by alpha. + * \return SUCCESSFUL_RETURN */ + returnValue DenseMatrix_getCol( DenseMatrix* _THIS, + int cNum, /**< Column number. */ + const Indexlist* const irows, /**< Index list specifying rows. */ + real_t alpha, /**< Scalar factor. */ + real_t *col /**< Output column vector. */ + ); + +/** Evaluate Y=alpha*A*X + beta*Y. + * \return SUCCESSFUL_RETURN. */ +returnValue DenseMatrix_times( DenseMatrix* _THIS, + int xN, /**< Number of vectors to multiply. */ + real_t alpha, /**< Scalar factor for matrix vector product. */ + const real_t *x, /**< Input vector to be multiplied. */ + int xLD, /**< Leading dimension of input x. */ + real_t beta, /**< Scalar factor for y. */ + real_t *y, /**< Output vector of results. */ + int yLD /**< Leading dimension of output y. */ + ); + +/** Evaluate Y=alpha*A'*X + beta*Y. + * \return SUCCESSFUL_RETURN. */ +returnValue DenseMatrix_transTimes( DenseMatrix* _THIS, + int xN, /**< Number of vectors to multiply. */ + real_t alpha, /**< Scalar factor for matrix vector product. */ + const real_t *x, /**< Input vector to be multiplied. */ + int xLD, /**< Leading dimension of input x. */ + real_t beta, /**< Scalar factor for y. */ + real_t *y, /**< Output vector of results. */ + int yLD /**< Leading dimension of output y. */ + ); + +/** Evaluate matrix vector product with submatrix given by Indexlist. + * \return SUCCESSFUL_RETURN */ + returnValue DenseMatrix_subTimes( DenseMatrix* _THIS, + const Indexlist* const irows, /**< Index list specifying rows. */ + const Indexlist* const icols, /**< Index list specifying columns. */ + int xN, /**< Number of vectors to multiply. */ + real_t alpha, /**< Scalar factor for matrix vector product. */ + const real_t *x, /**< Input vector to be multiplied. */ + int xLD, /**< Leading dimension of input x. */ + real_t beta, /**< Scalar factor for y. */ + real_t *y, /**< Output vector of results. */ + int yLD, /**< Leading dimension of output y. */ + BooleanType yCompr /**< Compressed storage for y. */ + ); + +/** Evaluate matrix transpose vector product. + * \return SUCCESSFUL_RETURN */ +returnValue DenseMatrix_subTransTimes( DenseMatrix* _THIS, + const Indexlist* const irows, /**< Index list specifying rows. */ + const Indexlist* const icols, /**< Index list specifying columns. */ + int xN, /**< Number of vectors to multiply. */ + real_t alpha, /**< Scalar factor for matrix vector product. */ + const real_t *x, /**< Input vector to be multiplied. */ + int xLD, /**< Leading dimension of input x. */ + real_t beta, /**< Scalar factor for y. */ + real_t *y, /**< Output vector of results. */ + int yLD /**< Leading dimension of output y. */ + ); + +/** Adds given offset to diagonal of matrix. + * \return SUCCESSFUL_RETURN \n + RET_NO_DIAGONAL_AVAILABLE */ +returnValue DenseMatrix_addToDiag( DenseMatrix* _THIS, + real_t alpha /**< Diagonal offset. */ + ); + +/** Prints matrix to screen. + * \return SUCCESSFUL_RETURN */ +returnValue DenseMatrix_print( DenseMatrix* _THIS + ); + +static inline real_t* DenseMatrix_getVal( DenseMatrix* _THIS ) { return _THIS->val; } + +/** Compute bilinear form y = x'*H*x using submatrix given by index list. + * \return SUCCESSFUL_RETURN */ +returnValue DenseMatrix_bilinear( DenseMatrix* _THIS, + const Indexlist* const icols, /**< Index list specifying columns of x. */ + int xN, /**< Number of vectors to multiply. */ + const real_t *x, /**< Input vector to be multiplied (uncompressed). */ + int xLD, /**< Leading dimension of input x. */ + real_t *y, /**< Output vector of results (compressed). */ + int yLD /**< Leading dimension of output y. */ + ); + + + +END_NAMESPACE_QPOASES + + +#endif /* QPOASES_MATRICES_H */ diff --git a/third_party/acados/include/qpOASES_e/Options.h b/third_party/acados/include/qpOASES_e/Options.h index b471ee0668..ca8086d2cc 100644 --- a/third_party/acados/include/qpOASES_e/Options.h +++ b/third_party/acados/include/qpOASES_e/Options.h @@ -1,153 +1,153 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/Options.h - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2007-2015 - * - * Declaration of the Options class designed to manage user-specified - * options for solving a QProblem. - */ - - -#ifndef QPOASES_OPTIONS_H -#define QPOASES_OPTIONS_H - - -#include - - -BEGIN_NAMESPACE_QPOASES - - -/** - * \brief Manages all user-specified options for solving QPs. - * - * This class manages all user-specified options used for solving - * quadratic programs. - * - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2007-2015 - */ -typedef struct -{ - PrintLevel printLevel; /**< Print level. */ - - BooleanType enableRamping; /**< Specifies whether ramping shall be enabled or not. */ - BooleanType enableFarBounds; /**< Specifies whether far bounds shall be used or not. */ - BooleanType enableFlippingBounds; /**< Specifies whether flipping bounds shall be used or not. */ - BooleanType enableRegularisation; /**< Specifies whether Hessian matrix shall be regularised in case semi-definiteness is detected. */ - BooleanType enableFullLITests; /**< Specifies whether condition-hardened LI test shall be used or not. */ - BooleanType enableNZCTests; /**< Specifies whether nonzero curvature tests shall be used. */ - int enableDriftCorrection; /**< Specifies the frequency of drift corrections (0 = off). */ - int enableCholeskyRefactorisation; /**< Specifies the frequency of full refactorisation of proj. Hessian (otherwise updates). */ - BooleanType enableEqualities; /**< Specifies whether equalities shall be always treated as active constraints. */ - - real_t terminationTolerance; /**< Termination tolerance. */ - real_t boundTolerance; /**< Lower/upper (constraints') bound tolerance (an inequality constraint whose lower and upper bounds differ by less is regarded to be an equality constraint). */ - real_t boundRelaxation; /**< Offset for relaxing (constraints') bounds at beginning of an initial homotopy. It is also as initial value for far bounds. */ - real_t epsNum; /**< Numerator tolerance for ratio tests. */ - real_t epsDen; /**< Denominator tolerance for ratio tests. */ - real_t maxPrimalJump; /**< Maximum allowed jump in primal variables in nonzero curvature tests. */ - real_t maxDualJump; /**< Maximum allowed jump in dual variables in linear independence tests. */ - - real_t initialRamping; /**< Start value for Ramping Strategy. */ - real_t finalRamping; /**< Final value for Ramping Strategy. */ - real_t initialFarBounds; /**< Initial size of Far Bounds. */ - real_t growFarBounds; /**< Factor to grow Far Bounds. */ - SubjectToStatus initialStatusBounds; /**< Initial status of bounds at first iteration. */ - real_t epsFlipping; /**< Tolerance of squared Cholesky diagonal factor which triggers flipping bound. */ - int numRegularisationSteps; /**< Maximum number of successive regularisation steps. */ - real_t epsRegularisation; /**< Scaling factor of identity matrix used for Hessian regularisation. */ - int numRefinementSteps; /**< Maximum number of iterative refinement steps. */ - real_t epsIterRef; /**< Early termination tolerance for iterative refinement. */ - real_t epsLITests; /**< Tolerance for linear independence tests. */ - real_t epsNZCTests; /**< Tolerance for nonzero curvature tests. */ - - BooleanType enableDropInfeasibles; /**< ... */ - int dropBoundPriority; /**< ... */ - int dropEqConPriority; /**< ... */ - int dropIneqConPriority; /**< ... */ -} Options; - - -void OptionsCON( Options* _THIS - ); - -/** Copies all members from given rhs object. - * \return SUCCESSFUL_RETURN */ -void OptionsCPY( Options* FROM, - Options* TO - ); - - -/** Sets all options to default values. - * \return SUCCESSFUL_RETURN */ -returnValue Options_setToDefault( Options* _THIS - ); - -/** Sets all options to values resulting in maximum reliabilty. - * \return SUCCESSFUL_RETURN */ -returnValue Options_setToReliable( Options* _THIS - ); - -/** Sets all options to values resulting in minimum solution time. - * \return SUCCESSFUL_RETURN */ -returnValue Options_setToMPC( Options* _THIS - ); - -/** Same as setToMPC( ), for ensuring backwards compatibility. - * \return SUCCESSFUL_RETURN */ -returnValue Options_setToFast( Options* _THIS - ); - - -/** Ensures that all options have consistent values by automatically - * adjusting inconsistent ones. - * Note: This routine cannot (and does not try to) ensure that values - * are set to reasonable values that make the QP solution work! - * \return SUCCESSFUL_RETURN \n - * RET_OPTIONS_ADJUSTED */ -returnValue Options_ensureConsistency( Options* _THIS - ); - - -/** Prints values of all options. - * \return SUCCESSFUL_RETURN */ -returnValue Options_print( Options* _THIS - ); - - -END_NAMESPACE_QPOASES - - -#endif /* QPOASES_OPTIONS_H */ - - -/* - * end of file - */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/Options.h + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2007-2015 + * + * Declaration of the Options class designed to manage user-specified + * options for solving a QProblem. + */ + + +#ifndef QPOASES_OPTIONS_H +#define QPOASES_OPTIONS_H + + +#include + + +BEGIN_NAMESPACE_QPOASES + + +/** + * \brief Manages all user-specified options for solving QPs. + * + * This class manages all user-specified options used for solving + * quadratic programs. + * + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2007-2015 + */ +typedef struct +{ + PrintLevel printLevel; /**< Print level. */ + + BooleanType enableRamping; /**< Specifies whether ramping shall be enabled or not. */ + BooleanType enableFarBounds; /**< Specifies whether far bounds shall be used or not. */ + BooleanType enableFlippingBounds; /**< Specifies whether flipping bounds shall be used or not. */ + BooleanType enableRegularisation; /**< Specifies whether Hessian matrix shall be regularised in case semi-definiteness is detected. */ + BooleanType enableFullLITests; /**< Specifies whether condition-hardened LI test shall be used or not. */ + BooleanType enableNZCTests; /**< Specifies whether nonzero curvature tests shall be used. */ + int enableDriftCorrection; /**< Specifies the frequency of drift corrections (0 = off). */ + int enableCholeskyRefactorisation; /**< Specifies the frequency of full refactorisation of proj. Hessian (otherwise updates). */ + BooleanType enableEqualities; /**< Specifies whether equalities shall be always treated as active constraints. */ + + real_t terminationTolerance; /**< Termination tolerance. */ + real_t boundTolerance; /**< Lower/upper (constraints') bound tolerance (an inequality constraint whose lower and upper bounds differ by less is regarded to be an equality constraint). */ + real_t boundRelaxation; /**< Offset for relaxing (constraints') bounds at beginning of an initial homotopy. It is also as initial value for far bounds. */ + real_t epsNum; /**< Numerator tolerance for ratio tests. */ + real_t epsDen; /**< Denominator tolerance for ratio tests. */ + real_t maxPrimalJump; /**< Maximum allowed jump in primal variables in nonzero curvature tests. */ + real_t maxDualJump; /**< Maximum allowed jump in dual variables in linear independence tests. */ + + real_t initialRamping; /**< Start value for Ramping Strategy. */ + real_t finalRamping; /**< Final value for Ramping Strategy. */ + real_t initialFarBounds; /**< Initial size of Far Bounds. */ + real_t growFarBounds; /**< Factor to grow Far Bounds. */ + SubjectToStatus initialStatusBounds; /**< Initial status of bounds at first iteration. */ + real_t epsFlipping; /**< Tolerance of squared Cholesky diagonal factor which triggers flipping bound. */ + int numRegularisationSteps; /**< Maximum number of successive regularisation steps. */ + real_t epsRegularisation; /**< Scaling factor of identity matrix used for Hessian regularisation. */ + int numRefinementSteps; /**< Maximum number of iterative refinement steps. */ + real_t epsIterRef; /**< Early termination tolerance for iterative refinement. */ + real_t epsLITests; /**< Tolerance for linear independence tests. */ + real_t epsNZCTests; /**< Tolerance for nonzero curvature tests. */ + + BooleanType enableDropInfeasibles; /**< ... */ + int dropBoundPriority; /**< ... */ + int dropEqConPriority; /**< ... */ + int dropIneqConPriority; /**< ... */ +} Options; + + +void OptionsCON( Options* _THIS + ); + +/** Copies all members from given rhs object. + * \return SUCCESSFUL_RETURN */ +void OptionsCPY( Options* FROM, + Options* TO + ); + + +/** Sets all options to default values. + * \return SUCCESSFUL_RETURN */ +returnValue Options_setToDefault( Options* _THIS + ); + +/** Sets all options to values resulting in maximum reliabilty. + * \return SUCCESSFUL_RETURN */ +returnValue Options_setToReliable( Options* _THIS + ); + +/** Sets all options to values resulting in minimum solution time. + * \return SUCCESSFUL_RETURN */ +returnValue Options_setToMPC( Options* _THIS + ); + +/** Same as setToMPC( ), for ensuring backwards compatibility. + * \return SUCCESSFUL_RETURN */ +returnValue Options_setToFast( Options* _THIS + ); + + +/** Ensures that all options have consistent values by automatically + * adjusting inconsistent ones. + * Note: This routine cannot (and does not try to) ensure that values + * are set to reasonable values that make the QP solution work! + * \return SUCCESSFUL_RETURN \n + * RET_OPTIONS_ADJUSTED */ +returnValue Options_ensureConsistency( Options* _THIS + ); + + +/** Prints values of all options. + * \return SUCCESSFUL_RETURN */ +returnValue Options_print( Options* _THIS + ); + + +END_NAMESPACE_QPOASES + + +#endif /* QPOASES_OPTIONS_H */ + + +/* + * end of file + */ diff --git a/third_party/acados/include/qpOASES_e/QProblem.h b/third_party/acados/include/qpOASES_e/QProblem.h index 3c61a4d596..91a4a6f396 100644 --- a/third_party/acados/include/qpOASES_e/QProblem.h +++ b/third_party/acados/include/qpOASES_e/QProblem.h @@ -1,2369 +1,2369 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/QProblem.h - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2007-2015 - * - * Declaration of the QProblem class which is able to use the newly - * developed online active set strategy for parametric quadratic programming. - */ - - - -#ifndef QPOASES_QPROBLEM_H -#define QPOASES_QPROBLEM_H - - -#include -#include -#include -#include -#include -#include - - -BEGIN_NAMESPACE_QPOASES - -typedef struct { - Bounds *auxiliaryBounds; - Constraints *auxiliaryConstraints; - - real_t *ub_new_far; - real_t *lb_new_far; - real_t *ubA_new_far; - real_t *lbA_new_far; - - real_t *g_new; - real_t *lb_new; - real_t *ub_new; - real_t *lbA_new; - real_t *ubA_new; - - real_t *g_new2; - real_t *lb_new2; - real_t *ub_new2; - real_t *lbA_new2; - real_t *ubA_new2; - - real_t *delta_xFX5; - real_t *delta_xFR5; - real_t *delta_yAC5; - real_t *delta_yFX5; - - real_t *Hx; - - real_t *_H; - - real_t *g_original; - real_t *lb_original; - real_t *ub_original; - real_t *lbA_original; - real_t *ubA_original; - - real_t *delta_xFR; - real_t *delta_xFX; - real_t *delta_yAC; - real_t *delta_yFX; - real_t *delta_g; - real_t *delta_lb; - real_t *delta_ub; - real_t *delta_lbA; - real_t *delta_ubA; - - real_t *gMod; - - real_t *aFR; - real_t *wZ; - - real_t *delta_g2; - real_t *delta_xFX2; - real_t *delta_xFR2; - real_t *delta_yAC2; - real_t *delta_yFX2; - real_t *nul; - real_t *Arow; - - real_t *xiC; - real_t *xiC_TMP; - real_t *xiB; - real_t *Arow2; - real_t *num; - - real_t *w; - real_t *tmp; - - real_t *delta_g3; - real_t *delta_xFX3; - real_t *delta_xFR3; - real_t *delta_yAC3; - real_t *delta_yFX3; - real_t *nul2; - - real_t *xiC2; - real_t *xiC_TMP2; - real_t *xiB2; - real_t *num2; - - real_t *Hz; - real_t *z; - real_t *ZHz; - real_t *r; - - real_t *tmp2; - real_t *Hz2; - real_t *z2; - real_t *r2; - real_t *rhs; - - real_t *delta_xFX4; - real_t *delta_xFR4; - real_t *delta_yAC4; - real_t *delta_yFX4; - real_t *nul3; - real_t *ek; - real_t *x_W; - real_t *As; - real_t *Ax_W; - - real_t *num3; - real_t *den; - real_t *delta_Ax_l; - real_t *delta_Ax_u; - real_t *delta_Ax; - real_t *delta_x; - - real_t *_A; - - real_t *grad; - real_t *AX; -} QProblem_ws; - -int QProblem_ws_calculateMemorySize( unsigned int nV, unsigned int nC ); - -char *QProblem_ws_assignMemory( unsigned int nV, unsigned int nC, QProblem_ws **mem, void *raw_memory ); - -QProblem_ws *QProblem_ws_createMemory( unsigned int nV, unsigned int nC ); - -/** - * \brief Implements the online active set strategy for QPs with general constraints. - * - * A class for setting up and solving quadratic programs. The main feature is - * the possibily to use the newly developed online active set strategy for - * parametric quadratic programming. - * - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2007-2015 - */ -typedef struct -{ - QProblem_ws *ws; /**< Workspace */ - Bounds *bounds; /**< Data structure for problem's bounds. */ - Constraints *constraints; /**< Data structure for problem's constraints. */ - Flipper *flipper; /**< Struct for making a temporary copy of the matrix factorisations. */ - - DenseMatrix* H; /**< Hessian matrix pointer. */ - DenseMatrix* A; /**< Constraint matrix pointer. */ - - Options options; /**< Struct containing all user-defined options for solving QPs. */ - TabularOutput tabularOutput; /**< Struct storing information for tabular output (printLevel == PL_TABULAR). */ - - real_t *g; /**< Gradient. */ - - real_t *lb; /**< Lower bound vector (on variables). */ - real_t *ub; /**< Upper bound vector (on variables). */ - real_t *lbA; /**< Lower constraints' bound vector. */ - real_t *ubA; /**< Upper constraints' bound vector. */ - - real_t *R; /**< Cholesky factor of H (i.e. H = R^T*R). */ - - real_t *T; /**< Reverse triangular matrix, A = [0 T]*Q'. */ - real_t *Q; /**< Orthonormal quadratic matrix, A = [0 T]*Q'. */ - - real_t *Ax; /**< Stores the current A*x \n - * (for increased efficiency only). */ - real_t *Ax_l; /**< Stores the current distance to lower constraints' bounds A*x-lbA \n - * (for increased efficiency only). */ - real_t *Ax_u; /**< Stores the current distance to lower constraints' bounds ubA-A*x \n - * (for increased efficiency only). */ - - real_t *x; /**< Primal solution vector. */ - real_t *y; /**< Dual solution vector. */ - - real_t *delta_xFR_TMP; /**< Temporary for determineStepDirection */ - real_t *tempA; /**< Temporary for determineStepDirection. */ - real_t *tempB; /**< Temporary for determineStepDirection. */ - real_t *ZFR_delta_xFRz; /**< Temporary for determineStepDirection. */ - real_t *delta_xFRy; /**< Temporary for determineStepDirection. */ - real_t *delta_xFRz; /**< Temporary for determineStepDirection. */ - real_t *delta_yAC_TMP; /**< Temporary for determineStepDirection. */ - - ConstraintProduct constraintProduct; /**< Pointer to user-defined constraint product function. */ - - real_t tau; /**< Last homotopy step length. */ - real_t regVal; /**< Holds the offset used to regularise Hessian matrix (zero by default). */ - - real_t ramp0; /**< Start value for Ramping Strategy. */ - real_t ramp1; /**< Final value for Ramping Strategy. */ - - QProblemStatus status; /**< Current status of the solution process. */ - HessianType hessianType; /**< Type of Hessian matrix. */ - - BooleanType haveCholesky; /**< Flag indicating whether Cholesky decomposition has already been setup. */ - BooleanType infeasible; /**< QP infeasible? */ - BooleanType unbounded; /**< QP unbounded? */ - - int rampOffset; /**< Offset index for Ramping. */ - unsigned int count; /**< Counts the number of hotstart function calls (internal usage only!). */ - - int sizeT; /**< Matrix T is stored in a (sizeT x sizeT) array. */ -} QProblem; - -int QProblem_calculateMemorySize( unsigned int nV, unsigned int nC ); - -char *QProblem_assignMemory( unsigned int nV, unsigned int nC, QProblem **mem, void *raw_memory ); - -QProblem *QProblem_createMemory( unsigned int nV, unsigned int nC ); - - -/** Constructor which takes the QP dimension and Hessian type - * information. If the Hessian is the zero (i.e. HST_ZERO) or the - * identity matrix (i.e. HST_IDENTITY), respectively, no memory - * is allocated for it and a NULL pointer can be passed for it - * to the init() functions. */ -void QProblemCON( QProblem* _THIS, - int _nV, /**< Number of variables. */ - int _nC, /**< Number of constraints. */ - HessianType _hessianType /**< Type of Hessian matrix. */ - ); - -/** Copies all members from given rhs object. - * \return SUCCESSFUL_RETURN */ -void QProblemCPY( QProblem* FROM, - QProblem* TO - ); - - -/** Clears all data structures of QProblem except for QP data. - * \return SUCCESSFUL_RETURN \n - RET_RESET_FAILED */ -returnValue QProblem_reset( QProblem* _THIS ); - - -/** Initialises a QP problem with given QP data and tries to solve it - * using at most nWSR iterations. - * - * Note: This function internally calls solveInitialQP for initialisation! - * - * \return SUCCESSFUL_RETURN \n - RET_INIT_FAILED \n - RET_INIT_FAILED_CHOLESKY \n - RET_INIT_FAILED_TQ \n - RET_INIT_FAILED_HOTSTART \n - RET_INIT_FAILED_INFEASIBILITY \n - RET_INIT_FAILED_UNBOUNDEDNESS \n - RET_MAX_NWSR_REACHED \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_initM( QProblem* _THIS, - DenseMatrix *_H, /**< Hessian matrix. */ - const real_t* const _g, /**< Gradient vector. */ - DenseMatrix *_A, /**< Constraint matrix. */ - const real_t* const _lb, /**< Lower bound vector (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub, /**< Upper bound vector (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const _lbA, /**< Lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const _ubA, /**< Upper constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. - Output: Number of performed working set recalculations. */ - real_t* const cputime /**< Input: Maximum CPU time allowed for QP initialisation. \n - Output: CPU time spent for QP initialisation (if pointer passed). */ - ); - - -/** Initialises a QP problem with given QP data and tries to solve it - * using at most nWSR iterations. - * - * Note: This function internally calls solveInitialQP for initialisation! - * - * \return SUCCESSFUL_RETURN \n - RET_INIT_FAILED \n - RET_INIT_FAILED_CHOLESKY \n - RET_INIT_FAILED_TQ \n - RET_INIT_FAILED_HOTSTART \n - RET_INIT_FAILED_INFEASIBILITY \n - RET_INIT_FAILED_UNBOUNDEDNESS \n - RET_MAX_NWSR_REACHED \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_init( QProblem* _THIS, - real_t* const _H, /**< Hessian matrix. \n - If Hessian matrix is trivial, a NULL pointer can be passed. */ - const real_t* const _g, /**< Gradient vector. */ - real_t* const _A, /**< Constraint matrix. */ - const real_t* const _lb, /**< Lower bound vector (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub, /**< Upper bound vector (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const _lbA, /**< Lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const _ubA, /**< Upper constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. - Output: Number of performed working set recalculations. */ - real_t* const cputime /**< Input: Maximum CPU time allowed for QP initialisation. \n - Output: CPU time spent for QP initialisation (if pointer passed). */ - ); - -/** Initialises a QP problem with given QP data to be read from files and tries to solve it - * using at most nWSR iterations. - * - * Note: This function internally calls solveInitialQP for initialisation! - * - * \return SUCCESSFUL_RETURN \n - RET_INIT_FAILED \n - RET_INIT_FAILED_CHOLESKY \n - RET_INIT_FAILED_TQ \n - RET_INIT_FAILED_HOTSTART \n - RET_INIT_FAILED_INFEASIBILITY \n - RET_INIT_FAILED_UNBOUNDEDNESS \n - RET_MAX_NWSR_REACHED \n - RET_UNABLE_TO_READ_FILE */ -returnValue QProblem_initF( QProblem* _THIS, - const char* const H_file, /**< Name of file where Hessian matrix is stored. \n - If Hessian matrix is trivial, a NULL pointer can be passed. */ - const char* const g_file, /**< Name of file where gradient vector is stored. */ - const char* const A_file, /**< Name of file where constraint matrix is stored. */ - const char* const lb_file, /**< Name of file where lower bound vector. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file, /**< Name of file where upper bound vector. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const char* const lbA_file, /**< Name of file where lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const char* const ubA_file, /**< Name of file where upper constraints' bound vector. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. - Output: Number of performed working set recalculations. */ - real_t* const cputime /**< Input: Maximum CPU time allowed for QP initialisation. \n - Output: CPU time spent for QP initialisation (if pointer passed). */ - ); - -/** Initialises a QP problem with given QP data and tries to solve it - * using at most nWSR iterations. Depending on the parameter constellation it: \n - * 1. 0, 0, 0 : starts with xOpt = 0, yOpt = 0 and gB/gC empty (or all implicit equality bounds), \n - * 2. xOpt, 0, 0 : starts with xOpt, yOpt = 0 and obtain gB/gC by "clipping", \n - * 3. 0, yOpt, 0 : starts with xOpt = 0, yOpt and obtain gB/gC from yOpt != 0, \n - * 4. 0, 0, gB/gC: starts with xOpt = 0, yOpt = 0 and gB/gC, \n - * 5. xOpt, yOpt, 0 : starts with xOpt, yOpt and obtain gB/gC from yOpt != 0, \n - * 6. xOpt, 0, gB/gC: starts with xOpt, yOpt = 0 and gB/gC, \n - * 7. xOpt, yOpt, gB/gC: starts with xOpt, yOpt and gB/gC (assume them to be consistent!) - * - * Note: This function internally calls solveInitialQP for initialisation! - * - * \return SUCCESSFUL_RETURN \n - RET_INIT_FAILED \n - RET_INIT_FAILED_CHOLESKY \n - RET_INIT_FAILED_TQ \n - RET_INIT_FAILED_HOTSTART \n - RET_INIT_FAILED_INFEASIBILITY \n - RET_INIT_FAILED_UNBOUNDEDNESS \n - RET_MAX_NWSR_REACHED \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_initMW( QProblem* _THIS, - DenseMatrix *_H, /**< Hessian matrix. \n - If Hessian matrix is trivial, a NULL pointer can be passed. */ - const real_t* const _g, /**< Gradient vector. */ - DenseMatrix *_A, /**< Constraint matrix. */ - const real_t* const _lb, /**< Lower bound vector (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub, /**< Upper bound vector (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const _lbA, /**< Lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const _ubA, /**< Upper constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. - * Output: Number of performed working set recalculations. */ - real_t* const cputime, /**< Input: Maximum CPU time allowed for QP initialisation. \n - Output: CPU time spent for QP initialisation. */ - const real_t* const xOpt, /**< Optimal primal solution vector. \n - (If a null pointer is passed, the old primal solution is kept!) */ - const real_t* const yOpt, /**< Optimal dual solution vector. \n - (If a null pointer is passed, the old dual solution is kept!) */ - Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ - Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ - const real_t* const _R /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. - The Cholesky factor must be stored in a real_t array of size nV*nV - in row-major format. Note: Only used if xOpt/yOpt and gB are NULL! \n - (If a null pointer is passed, Cholesky decomposition is computed internally!) */ - ); - -/** Initialises a QP problem with given QP data and tries to solve it - * using at most nWSR iterations. Depending on the parameter constellation it: \n - * 1. 0, 0, 0 : starts with xOpt = 0, yOpt = 0 and gB/gC empty (or all implicit equality bounds), \n - * 2. xOpt, 0, 0 : starts with xOpt, yOpt = 0 and obtain gB/gC by "clipping", \n - * 3. 0, yOpt, 0 : starts with xOpt = 0, yOpt and obtain gB/gC from yOpt != 0, \n - * 4. 0, 0, gB/gC: starts with xOpt = 0, yOpt = 0 and gB/gC, \n - * 5. xOpt, yOpt, 0 : starts with xOpt, yOpt and obtain gB/gC from yOpt != 0, \n - * 6. xOpt, 0, gB/gC: starts with xOpt, yOpt = 0 and gB/gC, \n - * 7. xOpt, yOpt, gB/gC: starts with xOpt, yOpt and gB/gC (assume them to be consistent!) - * - * Note: This function internally calls solveInitialQP for initialisation! - * - * \return SUCCESSFUL_RETURN \n - RET_INIT_FAILED \n - RET_INIT_FAILED_CHOLESKY \n - RET_INIT_FAILED_TQ \n - RET_INIT_FAILED_HOTSTART \n - RET_INIT_FAILED_INFEASIBILITY \n - RET_INIT_FAILED_UNBOUNDEDNESS \n - RET_MAX_NWSR_REACHED \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_initW( QProblem* _THIS, - real_t* const _H, /**< Hessian matrix. \n - If Hessian matrix is trivial, a NULL pointer can be passed. */ - const real_t* const _g, /**< Gradient vector. */ - real_t* const _A, /**< Constraint matrix. */ - const real_t* const _lb, /**< Lower bound vector (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub, /**< Upper bound vector (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const _lbA, /**< Lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const _ubA, /**< Upper constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. - * Output: Number of performed working set recalculations. */ - real_t* const cputime, /**< Input: Maximum CPU time allowed for QP initialisation. \n - Output: CPU time spent for QP initialisation. */ - const real_t* const xOpt, /**< Optimal primal solution vector. \n - (If a null pointer is passed, the old primal solution is kept!) */ - const real_t* const yOpt, /**< Optimal dual solution vector. \n - (If a null pointer is passed, the old dual solution is kept!) */ - Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ - Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ - const real_t* const _R /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. - The Cholesky factor must be stored in a real_t array of size nV*nV - in row-major format. Note: Only used if xOpt/yOpt and gB are NULL! \n - (If a null pointer is passed, Cholesky decomposition is computed internally!) */ - ); - -/** Initialises a QP problem with given QP data to be ream from files and tries to solve it - * using at most nWSR iterations. Depending on the parameter constellation it: \n - * 1. 0, 0, 0 : starts with xOpt = 0, yOpt = 0 and gB/gC empty (or all implicit equality bounds), \n - * 2. xOpt, 0, 0 : starts with xOpt, yOpt = 0 and obtain gB/gC by "clipping", \n - * 3. 0, yOpt, 0 : starts with xOpt = 0, yOpt and obtain gB/gC from yOpt != 0, \n - * 4. 0, 0, gB/gC: starts with xOpt = 0, yOpt = 0 and gB/gC, \n - * 5. xOpt, yOpt, 0 : starts with xOpt, yOpt and obtain gB/gC from yOpt != 0, \n - * 6. xOpt, 0, gB/gC: starts with xOpt, yOpt = 0 and gB/gC, \n - * 7. xOpt, yOpt, gB/gC: starts with xOpt, yOpt and gB/gC (assume them to be consistent!) - * - * Note: This function internally calls solveInitialQP for initialisation! - * - * \return SUCCESSFUL_RETURN \n - RET_INIT_FAILED \n - RET_INIT_FAILED_CHOLESKY \n - RET_INIT_FAILED_TQ \n - RET_INIT_FAILED_HOTSTART \n - RET_INIT_FAILED_INFEASIBILITY \n - RET_INIT_FAILED_UNBOUNDEDNESS \n - RET_MAX_NWSR_REACHED \n - RET_UNABLE_TO_READ_FILE */ -returnValue QProblem_initFW( QProblem* _THIS, - const char* const H_file, /**< Name of file where Hessian matrix is stored. \n - If Hessian matrix is trivial, a NULL pointer can be passed. */ - const char* const g_file, /**< Name of file where gradient vector is stored. */ - const char* const A_file, /**< Name of file where constraint matrix is stored. */ - const char* const lb_file, /**< Name of file where lower bound vector. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file, /**< Name of file where upper bound vector. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const char* const lbA_file, /**< Name of file where lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const char* const ubA_file, /**< Name of file where upper constraints' bound vector. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. - Output: Number of performed working set recalculations. */ - real_t* const cputime, /**< Input: Maximum CPU time allowed for QP initialisation. \n - Output: CPU time spent for QP initialisation. */ - const real_t* const xOpt, /**< Optimal primal solution vector. \n - (If a null pointer is passed, the old primal solution is kept!) */ - const real_t* const yOpt, /**< Optimal dual solution vector. \n - (If a null pointer is passed, the old dual solution is kept!) */ - Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ - Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ - const char* const R_file /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. - The Cholesky factor must be stored in a real_t array of size nV*nV - in row-major format. Note: Only used if xOpt/yOpt and gB are NULL! \n - (If a null pointer is passed, Cholesky decomposition is computed internally!) */ - ); - -/** Solves an initialised QP sequence using the online active set strategy. - * QP solution is started from previous solution. - * - * Note: This function internally calls solveQP/solveRegularisedQP - * for solving an initialised QP! - * - * \return SUCCESSFUL_RETURN \n - RET_MAX_NWSR_REACHED \n - RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n - RET_HOTSTART_FAILED \n - RET_SHIFT_DETERMINATION_FAILED \n - RET_STEPDIRECTION_DETERMINATION_FAILED \n - RET_STEPLENGTH_DETERMINATION_FAILED \n - RET_HOMOTOPY_STEP_FAILED \n - RET_HOTSTART_STOPPED_INFEASIBILITY \n - RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ -returnValue QProblem_hotstart( QProblem* _THIS, - const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ - const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations; \n - Output: Number of performed working set recalculations. */ - real_t* const cputime /**< Input: Maximum CPU time allowed for QP solution. \n - Output: CPU time spent for QP solution (or to perform nWSR iterations). */ - ); - -/** Solves an initialised QP sequence using the online active set strategy, - * where QP data is read from files. QP solution is started from previous solution. - * - * Note: This function internally calls solveQP/solveRegularisedQP - * for solving an initialised QP! - * - * \return SUCCESSFUL_RETURN \n - RET_MAX_NWSR_REACHED \n - RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n - RET_HOTSTART_FAILED \n - RET_SHIFT_DETERMINATION_FAILED \n - RET_STEPDIRECTION_DETERMINATION_FAILED \n - RET_STEPLENGTH_DETERMINATION_FAILED \n - RET_HOMOTOPY_STEP_FAILED \n - RET_HOTSTART_STOPPED_INFEASIBILITY \n - RET_HOTSTART_STOPPED_UNBOUNDEDNESS \n - RET_UNABLE_TO_READ_FILE \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_hotstartF( QProblem* _THIS, - const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ - const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const char* const ubA_file, /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations; \n - Output: Number of performed working set recalculations. */ - real_t* const cputime /**< Input: Maximum CPU time allowed for QP solution. \n - Output: CPU time spent for QP solution (or to perform nWSR iterations). */ - ); - -/** Solves an initialised QP sequence using the online active set strategy. - * By default, QP solution is started from previous solution. If a guess - * for the working set is provided, an initialised homotopy is performed. - * - * Note: This function internally calls solveQP/solveRegularisedQP - * for solving an initialised QP! - * - * \return SUCCESSFUL_RETURN \n - RET_MAX_NWSR_REACHED \n - RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n - RET_HOTSTART_FAILED \n - RET_SHIFT_DETERMINATION_FAILED \n - RET_STEPDIRECTION_DETERMINATION_FAILED \n - RET_STEPLENGTH_DETERMINATION_FAILED \n - RET_HOMOTOPY_STEP_FAILED \n - RET_HOTSTART_STOPPED_INFEASIBILITY \n - RET_HOTSTART_STOPPED_UNBOUNDEDNESS \n - RET_SETUP_AUXILIARYQP_FAILED */ -returnValue QProblem_hotstartW( QProblem* _THIS, - const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ - const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations; \n - Output: Number of performed working set recalculations. */ - real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n - Output: CPU time spent for QP solution (or to perform nWSR iterations). */ - Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). \n - (If a null pointer is passed, the previous working set of bounds is kept!) */ - Constraints* const guessedConstraints /**< Optimal working set of constraints for solution (xOpt,yOpt). \n - (If a null pointer is passed, the previous working set of constraints is kept!) */ - ); - -/** Solves an initialised QP sequence using the online active set strategy, - * where QP data is read from files. - * By default, QP solution is started from previous solution. If a guess - * for the working set is provided, an initialised homotopy is performed. - * - * Note: This function internally calls solveQP/solveRegularisedQP - * for solving an initialised QP! - * - * \return SUCCESSFUL_RETURN \n - RET_MAX_NWSR_REACHED \n - RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n - RET_HOTSTART_FAILED \n - RET_SHIFT_DETERMINATION_FAILED \n - RET_STEPDIRECTION_DETERMINATION_FAILED \n - RET_STEPLENGTH_DETERMINATION_FAILED \n - RET_HOMOTOPY_STEP_FAILED \n - RET_HOTSTART_STOPPED_INFEASIBILITY \n - RET_HOTSTART_STOPPED_UNBOUNDEDNESS \n - RET_SETUP_AUXILIARYQP_FAILED \n - RET_UNABLE_TO_READ_FILE \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_hotstartFW( QProblem* _THIS, - const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ - const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const char* const ubA_file, /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations; \n - Output: Number of performed working set recalculations. */ - real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n - Output: CPU time spent for QP solution (or to perform nWSR iterations). */ - Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). \n - (If a null pointer is passed, the previous working set of bounds is kept!) */ - Constraints* const guessedConstraints /**< Optimal working set of constraints for solution (xOpt,yOpt). \n - (If a null pointer is passed, the previous working set of constraints is kept!) */ - ); - - -/** Solves using the current working set - * \return SUCCESSFUL_RETURN \n - * RET_STEPDIRECTION_FAILED_TQ \n - * RET_STEPDIRECTION_FAILED_CHOLESKY \n - * RET_INVALID_ARGUMENTS */ -returnValue QProblem_solveCurrentEQP ( QProblem* _THIS, - const int n_rhs, /**< Number of consecutive right hand sides */ - const real_t* g_in, /**< Gradient of neighbouring QP to be solved. */ - const real_t* lb_in, /**< Lower bounds of neighbouring QP to be solved. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* ub_in, /**< Upper bounds of neighbouring QP to be solved. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* lbA_in, /**< Lower constraints' bounds of neighbouring QP to be solved. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* ubA_in, /**< Upper constraints' bounds of neighbouring QP to be solved. \n */ - real_t* x_out, /**< Output: Primal solution */ - real_t* y_out /**< Output: Dual solution */ - ); - - - -/** Returns current constraints object of the QP (deep copy). - * \return SUCCESSFUL_RETURN \n - RET_QPOBJECT_NOT_SETUP */ -static inline returnValue QProblem_getConstraints( QProblem* _THIS, - Constraints* _constraints /** Output: Constraints object. */ - ); - - -/** Returns the number of constraints. - * \return Number of constraints. */ -static inline int QProblem_getNC( QProblem* _THIS ); - -/** Returns the number of (implicitly defined) equality constraints. - * \return Number of (implicitly defined) equality constraints. */ -static inline int QProblem_getNEC( QProblem* _THIS ); - -/** Returns the number of active constraints. - * \return Number of active constraints. */ -static inline int QProblem_getNAC( QProblem* _THIS ); - -/** Returns the number of inactive constraints. - * \return Number of inactive constraints. */ -static inline int QProblem_getNIAC( QProblem* _THIS ); - -/** Returns the dimension of null space. - * \return Dimension of null space. */ -int QProblem_getNZ( QProblem* _THIS ); - - -/** Returns the dual solution vector (deep copy). - * \return SUCCESSFUL_RETURN \n - RET_QP_NOT_SOLVED */ -returnValue QProblem_getDualSolution( QProblem* _THIS, - real_t* const yOpt /**< Output: Dual solution vector (if QP has been solved). */ - ); - - -/** Defines user-defined routine for calculating the constraint product A*x - * \return SUCCESSFUL_RETURN \n */ -returnValue QProblem_setConstraintProduct( QProblem* _THIS, - ConstraintProduct _constraintProduct - ); - - -/** Prints concise list of properties of the current QP. - * \return SUCCESSFUL_RETURN \n */ -returnValue QProblem_printProperties( QProblem* _THIS ); - - - -/** Writes a vector with the state of the working set -* \return SUCCESSFUL_RETURN */ -returnValue QProblem_getWorkingSet( QProblem* _THIS, - real_t* workingSet /** Output: array containing state of the working set. */ - ); - -/** Writes a vector with the state of the working set of bounds - * \return SUCCESSFUL_RETURN \n - * RET_INVALID_ARGUMENTS */ -returnValue QProblem_getWorkingSetBounds( QProblem* _THIS, - real_t* workingSetB /** Output: array containing state of the working set of bounds. */ - ); - -/** Writes a vector with the state of the working set of constraints - * \return SUCCESSFUL_RETURN \n - * RET_INVALID_ARGUMENTS */ -returnValue QProblem_getWorkingSetConstraints( QProblem* _THIS, - real_t* workingSetC /** Output: array containing state of the working set of constraints. */ - ); - - -/** Returns current bounds object of the QP (deep copy). - * \return SUCCESSFUL_RETURN \n - RET_QPOBJECT_NOT_SETUP */ -static inline returnValue QProblem_getBounds( QProblem* _THIS, - Bounds* _bounds /** Output: Bounds object. */ - ); - - -/** Returns the number of variables. - * \return Number of variables. */ -static inline int QProblem_getNV( QProblem* _THIS ); - -/** Returns the number of free variables. - * \return Number of free variables. */ -static inline int QProblem_getNFR( QProblem* _THIS ); - -/** Returns the number of fixed variables. - * \return Number of fixed variables. */ -static inline int QProblem_getNFX( QProblem* _THIS ); - -/** Returns the number of implicitly fixed variables. - * \return Number of implicitly fixed variables. */ -static inline int QProblem_getNFV( QProblem* _THIS ); - - -/** Returns the optimal objective function value. - * \return finite value: Optimal objective function value (QP was solved) \n - +infinity: QP was not yet solved */ -real_t QProblem_getObjVal( QProblem* _THIS ); - -/** Returns the objective function value at an arbitrary point x. - * \return Objective function value at point x */ -real_t QProblem_getObjValX( QProblem* _THIS, - const real_t* const _x /**< Point at which the objective function shall be evaluated. */ - ); - -/** Returns the primal solution vector. - * \return SUCCESSFUL_RETURN \n - RET_QP_NOT_SOLVED */ -returnValue QProblem_getPrimalSolution( QProblem* _THIS, - real_t* const xOpt /**< Output: Primal solution vector (if QP has been solved). */ - ); - - -/** Returns status of the solution process. - * \return Status of solution process. */ -static inline QProblemStatus QProblem_getStatus( QProblem* _THIS ); - - -/** Returns if the QProblem object is initialised. - * \return BT_TRUE: QProblem initialised \n - BT_FALSE: QProblem not initialised */ -static inline BooleanType QProblem_isInitialised( QProblem* _THIS ); - -/** Returns if the QP has been solved. - * \return BT_TRUE: QProblem solved \n - BT_FALSE: QProblem not solved */ -static inline BooleanType QProblem_isSolved( QProblem* _THIS ); - -/** Returns if the QP is infeasible. - * \return BT_TRUE: QP infeasible \n - BT_FALSE: QP feasible (or not known to be infeasible!) */ -static inline BooleanType QProblem_isInfeasible( QProblem* _THIS ); - -/** Returns if the QP is unbounded. - * \return BT_TRUE: QP unbounded \n - BT_FALSE: QP unbounded (or not known to be unbounded!) */ -static inline BooleanType QProblem_isUnbounded( QProblem* _THIS ); - - -/** Returns Hessian type flag (type is not determined due to _THIS call!). - * \return Hessian type. */ -static inline HessianType QProblem_getHessianType( QProblem* _THIS ); - -/** Changes the print level. - * \return SUCCESSFUL_RETURN */ -static inline returnValue QProblem_setHessianType( QProblem* _THIS, - HessianType _hessianType /**< New Hessian type. */ - ); - -/** Returns if the QP has been internally regularised. - * \return BT_TRUE: Hessian is internally regularised for QP solution \n - BT_FALSE: No internal Hessian regularisation is used for QP solution */ -static inline BooleanType QProblem_usingRegularisation( QProblem* _THIS ); - -/** Returns current options struct. - * \return Current options struct. */ -static inline Options QProblem_getOptions( QProblem* _THIS ); - -/** Overrides current options with given ones. - * \return SUCCESSFUL_RETURN */ -static inline returnValue QProblem_setOptions( QProblem* _THIS, - Options _options /**< New options. */ - ); - -/** Returns the print level. - * \return Print level. */ -static inline PrintLevel QProblem_getPrintLevel( QProblem* _THIS ); - -/** Changes the print level. - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_setPrintLevel( QProblem* _THIS, - PrintLevel _printlevel /**< New print level. */ - ); - - -/** Returns the current number of QP problems solved. - * \return Number of QP problems solved. */ -static inline unsigned int QProblem_getCount( QProblem* _THIS ); - -/** Resets QP problem counter (to zero). - * \return SUCCESSFUL_RETURN. */ -static inline returnValue QProblem_resetCounter( QProblem* _THIS ); - - -/** Prints a list of all options and their current values. - * \return SUCCESSFUL_RETURN \n */ -returnValue QProblem_printOptions( QProblem* _THIS ); - - -/** Solves a QProblem whose QP data is assumed to be stored in the member variables. - * A guess for its primal/dual optimal solution vectors and the corresponding - * working sets of bounds and constraints can be provided. - * Note: This function is internally called by all init functions! - * \return SUCCESSFUL_RETURN \n - RET_INIT_FAILED \n - RET_INIT_FAILED_CHOLESKY \n - RET_INIT_FAILED_TQ \n - RET_INIT_FAILED_HOTSTART \n - RET_INIT_FAILED_INFEASIBILITY \n - RET_INIT_FAILED_UNBOUNDEDNESS \n - RET_MAX_NWSR_REACHED */ -returnValue QProblem_solveInitialQP( QProblem* _THIS, - const real_t* const xOpt, /**< Optimal primal solution vector.*/ - const real_t* const yOpt, /**< Optimal dual solution vector. */ - Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ - Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ - const real_t* const _R, /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. */ - int* nWSR, /**< Input: Maximum number of working set recalculations; \n - * Output: Number of performed working set recalculations. */ - real_t* const cputime /**< Input: Maximum CPU time allowed for QP solution. \n - * Output: CPU time spent for QP solution (or to perform nWSR iterations). */ - ); - -/** Solves QProblem using online active set strategy. - * Note: This function is internally called by all hotstart functions! - * \return SUCCESSFUL_RETURN \n - RET_MAX_NWSR_REACHED \n - RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n - RET_HOTSTART_FAILED \n - RET_SHIFT_DETERMINATION_FAILED \n - RET_STEPDIRECTION_DETERMINATION_FAILED \n - RET_STEPLENGTH_DETERMINATION_FAILED \n - RET_HOMOTOPY_STEP_FAILED \n - RET_HOTSTART_STOPPED_INFEASIBILITY \n - RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ -returnValue QProblem_solveQP( QProblem* _THIS, - const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ - const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations; \n - Output: Number of performed working set recalculations. */ - real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n - Output: CPU time spent for QP solution (or to perform nWSR iterations). */ - int nWSRperformed, /**< Number of working set recalculations already performed to solve - this QP within previous solveQP() calls. This number is - always zero, except for successive calls from solveRegularisedQP() - or when using the far bound strategy. */ - BooleanType isFirstCall /**< Indicating whether this is the first call for current QP. */ - ); - - -/** Solves QProblem using online active set strategy. - * Note: This function is internally called by all hotstart functions! - * \return SUCCESSFUL_RETURN \n - RET_MAX_NWSR_REACHED \n - RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n - RET_HOTSTART_FAILED \n - RET_SHIFT_DETERMINATION_FAILED \n - RET_STEPDIRECTION_DETERMINATION_FAILED \n - RET_STEPLENGTH_DETERMINATION_FAILED \n - RET_HOMOTOPY_STEP_FAILED \n - RET_HOTSTART_STOPPED_INFEASIBILITY \n - RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ -returnValue QProblem_solveRegularisedQP( QProblem* _THIS, - const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ - const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - int* nWSR, /**< Input: Maximum number of working set recalculations; \n - Output: Number of performed working set recalculations. */ - real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n - Output: CPU time spent for QP solution (or to perform nWSR iterations). */ - int nWSRperformed, /**< Number of working set recalculations already performed to solve - this QP within previous solveRegularisedQP() calls. This number is - always zero, except for successive calls when using the far bound strategy. */ - BooleanType isFirstCall /**< Indicating whether this is the first call for current QP. */ - ); - - -/** Determines type of existing constraints and bounds (i.e. implicitly fixed, unbounded etc.). - * \return SUCCESSFUL_RETURN \n - RET_SETUPSUBJECTTOTYPE_FAILED */ -returnValue QProblem_setupSubjectToType( QProblem* _THIS ); - -/** Determines type of new constraints and bounds (i.e. implicitly fixed, unbounded etc.). - * \return SUCCESSFUL_RETURN \n - RET_SETUPSUBJECTTOTYPE_FAILED */ -returnValue QProblem_setupSubjectToTypeNew( QProblem* _THIS, - const real_t* const lb_new, /**< New lower bounds. */ - const real_t* const ub_new, /**< New upper bounds. */ - const real_t* const lbA_new, /**< New lower constraints' bounds. */ - const real_t* const ubA_new /**< New upper constraints' bounds. */ - ); - -/** Computes the Cholesky decomposition of the projected Hessian (i.e. R^T*R = Z^T*H*Z). - * Note: If Hessian turns out not to be positive definite, the Hessian type - * is set to HST_SEMIDEF accordingly. - * \return SUCCESSFUL_RETURN \n - * RET_HESSIAN_NOT_SPD \n - * RET_INDEXLIST_CORRUPTED */ -returnValue QProblem_computeProjectedCholesky( QProblem* _THIS ); - -/** Computes initial Cholesky decomposition of the projected Hessian making - * use of the function setupCholeskyDecomposition() or setupCholeskyDecompositionProjected(). - * \return SUCCESSFUL_RETURN \n - * RET_HESSIAN_NOT_SPD \n - * RET_INDEXLIST_CORRUPTED */ -returnValue QProblem_setupInitialCholesky( QProblem* _THIS ); - -/** Initialises TQ factorisation of A (i.e. A*Q = [0 T]) if NO constraint is active. - * \return SUCCESSFUL_RETURN \n - RET_INDEXLIST_CORRUPTED */ -returnValue QProblem_setupTQfactorisation( QProblem* _THIS ); - - -/** Obtains the desired working set for the auxiliary initial QP in - * accordance with the user specifications - * (assumes that member AX has already been initialised!) - * \return SUCCESSFUL_RETURN \n - RET_OBTAINING_WORKINGSET_FAILED \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_obtainAuxiliaryWorkingSet( QProblem* _THIS, - const real_t* const xOpt, /**< Optimal primal solution vector. - * If a NULL pointer is passed, all entries are assumed to be zero. */ - const real_t* const yOpt, /**< Optimal dual solution vector. - * If a NULL pointer is passed, all entries are assumed to be zero. */ - Bounds* const guessedBounds, /**< Guessed working set of bounds for solution (xOpt,yOpt). */ - Constraints* const guessedConstraints, /**< Guessed working set for solution (xOpt,yOpt). */ - Bounds* auxiliaryBounds, /**< Input: Allocated bound object. \n - * Ouput: Working set of constraints for auxiliary QP. */ - Constraints* auxiliaryConstraints /**< Input: Allocated bound object. \n - * Ouput: Working set for auxiliary QP. */ - ); - -/** Sets up bound and constraints data structures according to auxiliaryBounds/Constraints. - * (If the working set shall be setup afresh, make sure that - * bounds and constraints data structure have been resetted - * and the TQ factorisation has been initialised!) - * \return SUCCESSFUL_RETURN \n - RET_SETUP_WORKINGSET_FAILED \n - RET_INVALID_ARGUMENTS \n - RET_UNKNOWN_BUG */ -returnValue QProblem_setupAuxiliaryWorkingSet( QProblem* _THIS, - Bounds* const auxiliaryBounds, /**< Working set of bounds for auxiliary QP. */ - Constraints* const auxiliaryConstraints, /**< Working set of constraints for auxiliary QP. */ - BooleanType setupAfresh /**< Flag indicating if given working set shall be - * setup afresh or by updating the current one. */ - ); - -/** Sets up the optimal primal/dual solution of the auxiliary initial QP. - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_setupAuxiliaryQPsolution( QProblem* _THIS, - const real_t* const xOpt, /**< Optimal primal solution vector. - * If a NULL pointer is passed, all entries are set to zero. */ - const real_t* const yOpt /**< Optimal dual solution vector. - * If a NULL pointer is passed, all entries are set to zero. */ - ); - -/** Sets up gradient of the auxiliary initial QP for given - * optimal primal/dual solution and given initial working set - * (assumes that members X, Y and BOUNDS, CONSTRAINTS have already been initialised!). - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_setupAuxiliaryQPgradient( QProblem* _THIS ); - -/** Sets up (constraints') bounds of the auxiliary initial QP for given - * optimal primal/dual solution and given initial working set - * (assumes that members X, Y and BOUNDS, CONSTRAINTS have already been initialised!). - * \return SUCCESSFUL_RETURN \n - RET_UNKNOWN_BUG */ -returnValue QProblem_setupAuxiliaryQPbounds( QProblem* _THIS, - Bounds* const auxiliaryBounds, /**< Working set of bounds for auxiliary QP. */ - Constraints* const auxiliaryConstraints, /**< Working set of constraints for auxiliary QP. */ - BooleanType useRelaxation /**< Flag indicating if inactive (constraints') bounds shall be relaxed. */ - ); - - -/** Adds a constraint to active set. - * \return SUCCESSFUL_RETURN \n - RET_ADDCONSTRAINT_FAILED \n - RET_ADDCONSTRAINT_FAILED_INFEASIBILITY \n - RET_ENSURELI_FAILED */ -returnValue QProblem_addConstraint( QProblem* _THIS, - int number, /**< Number of constraint to be added to active set. */ - SubjectToStatus C_status, /**< Status of new active constraint. */ - BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ - BooleanType ensureLI /**< Ensure linear independence by exchange rules by default. */ - ); - -/** Checks if new active constraint to be added is linearly dependent from - * from row of the active constraints matrix. - * \return RET_LINEARLY_DEPENDENT \n - RET_LINEARLY_INDEPENDENT \n - RET_INDEXLIST_CORRUPTED */ -returnValue QProblem_addConstraint_checkLI( QProblem* _THIS, - int number /**< Number of constraint to be added to active set. */ - ); - -/** Ensures linear independence of constraint matrix when a new constraint is added. - * To _THIS end a bound or constraint is removed simultaneously if necessary. - * \return SUCCESSFUL_RETURN \n - RET_LI_RESOLVED \n - RET_ENSURELI_FAILED \n - RET_ENSURELI_FAILED_TQ \n - RET_ENSURELI_FAILED_NOINDEX \n - RET_REMOVE_FROM_ACTIVESET */ -returnValue QProblem_addConstraint_ensureLI( QProblem* _THIS, - int number, /**< Number of constraint to be added to active set. */ - SubjectToStatus C_status /**< Status of new active bound. */ - ); - -/** Adds a bound to active set. - * \return SUCCESSFUL_RETURN \n - RET_ADDBOUND_FAILED \n - RET_ADDBOUND_FAILED_INFEASIBILITY \n - RET_ENSURELI_FAILED */ -returnValue QProblem_addBound( QProblem* _THIS, - int number, /**< Number of bound to be added to active set. */ - SubjectToStatus B_status, /**< Status of new active bound. */ - BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ - BooleanType ensureLI /**< Ensure linear independence by exchange rules by default. */ - ); - -/** Checks if new active bound to be added is linearly dependent from - * from row of the active constraints matrix. - * \return RET_LINEARLY_DEPENDENT \n - RET_LINEARLY_INDEPENDENT */ -returnValue QProblem_addBound_checkLI( QProblem* _THIS, - int number /**< Number of bound to be added to active set. */ - ); - -/** Ensures linear independence of constraint matrix when a new bound is added. - * To _THIS end a bound or constraint is removed simultaneously if necessary. - * \return SUCCESSFUL_RETURN \n - RET_LI_RESOLVED \n - RET_ENSURELI_FAILED \n - RET_ENSURELI_FAILED_TQ \n - RET_ENSURELI_FAILED_NOINDEX \n - RET_REMOVE_FROM_ACTIVESET */ -returnValue QProblem_addBound_ensureLI( QProblem* _THIS, - int number, /**< Number of bound to be added to active set. */ - SubjectToStatus B_status /**< Status of new active bound. */ - ); - -/** Removes a constraint from active set. - * \return SUCCESSFUL_RETURN \n - RET_CONSTRAINT_NOT_ACTIVE \n - RET_REMOVECONSTRAINT_FAILED \n - RET_HESSIAN_NOT_SPD */ -returnValue QProblem_removeConstraint( QProblem* _THIS, - int number, /**< Number of constraint to be removed from active set. */ - BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ - BooleanType allowFlipping, /**< Flag indicating if flipping bounds are allowed. */ - BooleanType ensureNZC /**< Flag indicating if non-zero curvature is ensured by exchange rules. */ - ); - -/** Removes a bounds from active set. - * \return SUCCESSFUL_RETURN \n - RET_BOUND_NOT_ACTIVE \n - RET_HESSIAN_NOT_SPD \n - RET_REMOVEBOUND_FAILED */ -returnValue QProblem_removeBound( QProblem* _THIS, - int number, /**< Number of bound to be removed from active set. */ - BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ - BooleanType allowFlipping, /**< Flag indicating if flipping bounds are allowed. */ - BooleanType ensureNZC /**< Flag indicating if non-zero curvature is ensured by exchange rules. */ - ); - - -/** Performs robustified ratio test yield the maximum possible step length - * along the homotopy path. - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_performPlainRatioTest( QProblem* _THIS, - int nIdx, /**< Number of ratios to be checked. */ - const int* const idxList, /**< Array containing the indices of all ratios to be checked. */ - const real_t* const num, /**< Array containing all numerators for performing the ratio test. */ - const real_t* const den, /**< Array containing all denominators for performing the ratio test. */ - real_t epsNum, /**< Numerator tolerance. */ - real_t epsDen, /**< Denominator tolerance. */ - real_t* t, /**< Output: Maximum possible step length along the homotopy path. */ - int* BC_idx /**< Output: Index of blocking constraint. */ - ); - - -/** Ensure non-zero curvature by primal jump. - * \return SUCCESSFUL_RETURN \n - * RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ -returnValue QProblem_ensureNonzeroCurvature( QProblem* _THIS, - BooleanType removeBoundNotConstraint, /**< SubjectTo to be removed is a bound. */ - int remIdx, /**< Index of bound/constraint to be removed. */ - BooleanType* exchangeHappened, /**< Output: Exchange was necessary to ensure. */ - BooleanType* addBoundNotConstraint, /**< SubjectTo to be added is a bound. */ - int* addIdx, /**< Index of bound/constraint to be added. */ - SubjectToStatus* addStatus /**< Status of bound/constraint to be added. */ - ); - - -/** Solves the system Ta = b or T^Ta = b where T is a reverse upper triangular matrix. - * \return SUCCESSFUL_RETURN \n - RET_DIV_BY_ZERO */ -returnValue QProblem_backsolveT( QProblem* _THIS, - const real_t* const b, /**< Right hand side vector. */ - BooleanType transposed, /**< Indicates if the transposed system shall be solved. */ - real_t* const a /**< Output: Solution vector */ - ); - - -/** Determines step direction of the shift of the QP data. - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_determineDataShift( QProblem* _THIS, - const real_t* const g_new, /**< New gradient vector. */ - const real_t* const lbA_new, /**< New lower constraints' bounds. */ - const real_t* const ubA_new, /**< New upper constraints' bounds. */ - const real_t* const lb_new, /**< New lower bounds. */ - const real_t* const ub_new, /**< New upper bounds. */ - real_t* const delta_g, /**< Output: Step direction of gradient vector. */ - real_t* const delta_lbA, /**< Output: Step direction of lower constraints' bounds. */ - real_t* const delta_ubA, /**< Output: Step direction of upper constraints' bounds. */ - real_t* const delta_lb, /**< Output: Step direction of lower bounds. */ - real_t* const delta_ub, /**< Output: Step direction of upper bounds. */ - BooleanType* Delta_bC_isZero, /**< Output: Indicates if active constraints' bounds are to be shifted. */ - BooleanType* Delta_bB_isZero /**< Output: Indicates if active bounds are to be shifted. */ - ); - -/** Determines step direction of the homotopy path. - * \return SUCCESSFUL_RETURN \n - RET_STEPDIRECTION_FAILED_TQ \n - RET_STEPDIRECTION_FAILED_CHOLESKY */ -returnValue QProblem_determineStepDirection( QProblem* _THIS, - const real_t* const delta_g, /**< Step direction of gradient vector. */ - const real_t* const delta_lbA, /**< Step direction of lower constraints' bounds. */ - const real_t* const delta_ubA, /**< Step direction of upper constraints' bounds. */ - const real_t* const delta_lb, /**< Step direction of lower bounds. */ - const real_t* const delta_ub, /**< Step direction of upper bounds. */ - BooleanType Delta_bC_isZero, /**< Indicates if active constraints' bounds are to be shifted. */ - BooleanType Delta_bB_isZero, /**< Indicates if active bounds are to be shifted. */ - real_t* const delta_xFX, /**< Output: Primal homotopy step direction of fixed variables. */ - real_t* const delta_xFR, /**< Output: Primal homotopy step direction of free variables. */ - real_t* const delta_yAC, /**< Output: Dual homotopy step direction of active constraints' multiplier. */ - real_t* const delta_yFX /**< Output: Dual homotopy step direction of fixed variables' multiplier. */ - ); - -/** Determines the maximum possible step length along the homotopy path - * and performs _THIS step (without changing working set). - * \return SUCCESSFUL_RETURN \n - * RET_ERROR_IN_CONSTRAINTPRODUCT \n - * RET_QP_INFEASIBLE */ -returnValue QProblem_performStep( QProblem* _THIS, - const real_t* const delta_g, /**< Step direction of gradient. */ - const real_t* const delta_lbA, /**< Step direction of lower constraints' bounds. */ - const real_t* const delta_ubA, /**< Step direction of upper constraints' bounds. */ - const real_t* const delta_lb, /**< Step direction of lower bounds. */ - const real_t* const delta_ub, /**< Step direction of upper bounds. */ - const real_t* const delta_xFX, /**< Primal homotopy step direction of fixed variables. */ - const real_t* const delta_xFR, /**< Primal homotopy step direction of free variables. */ - const real_t* const delta_yAC, /**< Dual homotopy step direction of active constraints' multiplier. */ - const real_t* const delta_yFX, /**< Dual homotopy step direction of fixed variables' multiplier. */ - int* BC_idx, /**< Output: Index of blocking constraint. */ - SubjectToStatus* BC_status, /**< Output: Status of blocking constraint. */ - BooleanType* BC_isBound /**< Output: Indicates if blocking constraint is a bound. */ - ); - -/** Updates the active set. - * \return SUCCESSFUL_RETURN \n - RET_REMOVE_FROM_ACTIVESET_FAILED \n - RET_ADD_TO_ACTIVESET_FAILED */ -returnValue QProblem_changeActiveSet( QProblem* _THIS, - int BC_idx, /**< Index of blocking constraint. */ - SubjectToStatus BC_status, /**< Status of blocking constraint. */ - BooleanType BC_isBound /**< Indicates if blocking constraint is a bound. */ - ); - - -/** Compute relative length of homotopy in data space for termination - * criterion. - * \return Relative length in data space. */ -real_t QProblem_getRelativeHomotopyLength( QProblem* _THIS, - const real_t* const g_new, /**< Final gradient. */ - const real_t* const lb_new, /**< Final lower variable bounds. */ - const real_t* const ub_new, /**< Final upper variable bounds. */ - const real_t* const lbA_new, /**< Final lower constraint bounds. */ - const real_t* const ubA_new /**< Final upper constraint bounds. */ - ); - - -/** Ramping Strategy to avoid ties. Modifies homotopy start without - * changing current active set. - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_performRamping( QProblem* _THIS ); - - -/** ... */ -returnValue QProblem_updateFarBounds( QProblem* _THIS, - real_t curFarBound, /**< ... */ - int nRamp, /**< ... */ - const real_t* const lb_new, /**< ... */ - real_t* const lb_new_far, /**< ... */ - const real_t* const ub_new, /**< ... */ - real_t* const ub_new_far, /**< ... */ - const real_t* const lbA_new, /**< ... */ - real_t* const lbA_new_far, /**< ... */ - const real_t* const ubA_new, /**< ... */ - real_t* const ubA_new_far /**< ... */ - ); - -/** ... */ -returnValue QProblemBCPY_updateFarBounds( QProblem* _THIS, - real_t curFarBound, /**< ... */ - int nRamp, /**< ... */ - const real_t* const lb_new, /**< ... */ - real_t* const lb_new_far, /**< ... */ - const real_t* const ub_new, /**< ... */ - real_t* const ub_new_far /**< ... */ - ); - - - -/** Performs robustified ratio test yield the maximum possible step length - * along the homotopy path. - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_performRatioTestC( QProblem* _THIS, - int nIdx, /**< Number of ratios to be checked. */ - const int* const idxList, /**< Array containing the indices of all ratios to be checked. */ - Constraints* const subjectTo, /**< Constraint object corresponding to ratios to be checked. */ - const real_t* const num, /**< Array containing all numerators for performing the ratio test. */ - const real_t* const den, /**< Array containing all denominators for performing the ratio test. */ - real_t epsNum, /**< Numerator tolerance. */ - real_t epsDen, /**< Denominator tolerance. */ - real_t* t, /**< Output: Maximum possible step length along the homotopy path. */ - int* BC_idx /**< Output: Index of blocking constraint. */ - ); - - -/** Drift correction at end of each active set iteration - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_performDriftCorrection( QProblem* _THIS ); - - -/** Updates QP vectors, working sets and internal data structures in order to - start from an optimal solution corresponding to initial guesses of the working - set for bounds and constraints. - * \return SUCCESSFUL_RETURN \n - * RET_SETUP_AUXILIARYQP_FAILED \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_setupAuxiliaryQP( QProblem* _THIS, - Bounds* const guessedBounds, /**< Initial guess for working set of bounds. */ - Constraints* const guessedConstraints /**< Initial guess for working set of constraints. */ - ); - -/** Determines if it is more efficient to refactorise the matrices when - * hotstarting or not (i.e. better to update the existing factorisations). - * \return BT_TRUE iff matrices shall be refactorised afresh - */ -BooleanType QProblem_shallRefactorise( QProblem* _THIS, - Bounds* const guessedBounds, /**< Guessed new working set of bounds. */ - Constraints* const guessedConstraints /**< Guessed new working set of constraints. */ - ); - -/** Setups internal QP data. - * \return SUCCESSFUL_RETURN \n - RET_INVALID_ARGUMENTS \n - RET_UNKNONW_BUG */ -returnValue QProblem_setupQPdataM( QProblem* _THIS, - DenseMatrix *_H, /**< Hessian matrix. \n - If Hessian matrix is trivial,a NULL pointer can be passed. */ - const real_t* const _g, /**< Gradient vector. */ - DenseMatrix *_A, /**< Constraint matrix. */ - const real_t* const _lb, /**< Lower bound vector (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub, /**< Upper bound vector (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const _lbA, /**< Lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const _ubA /**< Upper constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - ); - - -/** Sets up dense internal QP data. If the current Hessian is trivial - * (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, - * memory for Hessian is allocated and it is set to the given one. - * \return SUCCESSFUL_RETURN \n - RET_INVALID_ARGUMENTS \n - RET_UNKNONW_BUG */ -returnValue QProblem_setupQPdata( QProblem* _THIS, - real_t* const _H, /**< Hessian matrix. \n - If Hessian matrix is trivial,a NULL pointer can be passed. */ - const real_t* const _g, /**< Gradient vector. */ - real_t* const _A, /**< Constraint matrix. */ - const real_t* const _lb, /**< Lower bound vector (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub, /**< Upper bound vector (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - const real_t* const _lbA, /**< Lower constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const real_t* const _ubA /**< Upper constraints' bound vector. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - ); - -/** Sets up internal QP data by loading it from files. If the current Hessian - * is trivial (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, - * memory for Hessian is allocated and it is set to the given one. - * \return SUCCESSFUL_RETURN \n - RET_UNABLE_TO_OPEN_FILE \n - RET_UNABLE_TO_READ_FILE \n - RET_INVALID_ARGUMENTS \n - RET_UNKNONW_BUG */ -returnValue QProblem_setupQPdataFromFile( QProblem* _THIS, - const char* const H_file, /**< Name of file where Hessian matrix, of neighbouring QP to be solved, is stored. \n - If Hessian matrix is trivial,a NULL pointer can be passed. */ - const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ - const char* const A_file, /**< Name of file where constraint matrix, of neighbouring QP to be solved, is stored. */ - const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const char* const ubA_file /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - ); - -/** Loads new QP vectors from files (internal members are not affected!). - * \return SUCCESSFUL_RETURN \n - RET_UNABLE_TO_OPEN_FILE \n - RET_UNABLE_TO_READ_FILE \n - RET_INVALID_ARGUMENTS */ -returnValue QProblem_loadQPvectorsFromFile( QProblem* _THIS, - const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ - const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n - If no upper bounds exist, a NULL pointer can be passed. */ - const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no lower constraints' bounds exist, a NULL pointer can be passed. */ - const char* const ubA_file, /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n - If no upper constraints' bounds exist, a NULL pointer can be passed. */ - real_t* const g_new, /**< Output: Gradient of neighbouring QP to be solved. */ - real_t* const lb_new, /**< Output: Lower bounds of neighbouring QP to be solved */ - real_t* const ub_new, /**< Output: Upper bounds of neighbouring QP to be solved */ - real_t* const lbA_new, /**< Output: Lower constraints' bounds of neighbouring QP to be solved */ - real_t* const ubA_new /**< Output: Upper constraints' bounds of neighbouring QP to be solved */ - ); - - -/** Prints concise information on the current iteration. - * \return SUCCESSFUL_RETURN \n */ -returnValue QProblem_printIteration( QProblem* _THIS, - int iter, /**< Number of current iteration. */ - int BC_idx, /**< Index of blocking constraint. */ - SubjectToStatus BC_status, /**< Status of blocking constraint. */ - BooleanType BC_isBound, /**< Indicates if blocking constraint is a bound. */ - real_t homotopyLength, /**< Current homotopy distance. */ - BooleanType isFirstCall /**< Indicating whether this is the first call for current QP. */ - ); - - -/** Sets constraint matrix of the QP. \n - Note: Also internal vector Ax is recomputed! - * \return SUCCESSFUL_RETURN \n - * RET_INVALID_ARGUMENTS */ -static inline returnValue QProblem_setAM( QProblem* _THIS, - DenseMatrix *A_new /**< New constraint matrix. */ - ); - -/** Sets dense constraint matrix of the QP. \n - Note: Also internal vector Ax is recomputed! - * \return SUCCESSFUL_RETURN \n - * RET_INVALID_ARGUMENTS */ -static inline returnValue QProblem_setA( QProblem* _THIS, - real_t* const A_new /**< New dense constraint matrix (with correct dimension!). */ - ); - - -/** Sets constraints' lower bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - * RET_QPOBJECT_NOT_SETUP */ -static inline returnValue QProblem_setLBA( QProblem* _THIS, - const real_t* const lbA_new /**< New constraints' lower bound vector (with correct dimension!). */ - ); - -/** Changes single entry of lower constraints' bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - * RET_QPOBJECT_NOT_SETUP \n - * RET_INDEX_OUT_OF_BOUNDS */ -static inline returnValue QProblem_setLBAn( QProblem* _THIS, - int number, /**< Number of entry to be changed. */ - real_t value /**< New value for entry of lower constraints' bound vector (with correct dimension!). */ - ); - -/** Sets constraints' upper bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - * RET_QPOBJECT_NOT_SETUP */ -static inline returnValue QProblem_setUBA( QProblem* _THIS, - const real_t* const ubA_new /**< New constraints' upper bound vector (with correct dimension!). */ - ); - -/** Changes single entry of upper constraints' bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - * RET_QPOBJECT_NOT_SETUP \n - * RET_INDEX_OUT_OF_BOUNDS */ -static inline returnValue QProblem_setUBAn( QProblem* _THIS, - int number, /**< Number of entry to be changed. */ - real_t value /**< New value for entry of upper constraints' bound vector (with correct dimension!). */ - ); - - -/** Decides if lower bounds are smaller than upper bounds - * - * \return SUCCESSFUL_RETURN \n - * RET_QP_INFEASIBLE */ -returnValue QProblem_areBoundsConsistent( QProblem* _THIS, - const real_t* const lb, /**< Vector of lower bounds*/ - const real_t* const ub, /**< Vector of upper bounds*/ - const real_t* const lbA, /**< Vector of lower constraints*/ - const real_t* const ubA /**< Vector of upper constraints*/ - ); - - -/** Drops the blocking bound/constraint that led to infeasibility, or finds another - * bound/constraint to drop according to drop priorities. - * \return SUCCESSFUL_RETURN \n - */ -returnValue QProblem_dropInfeasibles ( QProblem* _THIS, - int BC_number, /**< Number of the bound or constraint to be added */ - SubjectToStatus BC_status, /**< New status of the bound or constraint to be added */ - BooleanType BC_isBound, /**< Whether a bound or a constraint is to be added */ - real_t *xiB, - real_t *xiC - ); - - -/** If Hessian type has been set by the user, nothing is done. - * Otherwise the Hessian type is set to HST_IDENTITY, HST_ZERO, or - * HST_POSDEF (default), respectively. - * \return SUCCESSFUL_RETURN \n - RET_HESSIAN_INDEFINITE */ -returnValue QProblem_determineHessianType( QProblem* _THIS ); - -/** Computes the Cholesky decomposition of the (simply projected) Hessian - * (i.e. R^T*R = Z^T*H*Z). It only works in the case where Z is a simple - * projection matrix! - * Note: If Hessian turns out not to be positive definite, the Hessian type - * is set to HST_SEMIDEF accordingly. - * \return SUCCESSFUL_RETURN \n - * RET_HESSIAN_NOT_SPD \n - * RET_INDEXLIST_CORRUPTED */ -returnValue QProblemBCPY_computeCholesky( QProblem* _THIS ); - -/** Obtains the desired working set for the auxiliary initial QP in - * accordance with the user specifications - * \return SUCCESSFUL_RETURN \n - RET_OBTAINING_WORKINGSET_FAILED \n - RET_INVALID_ARGUMENTS */ -returnValue QProblemBCPY_obtainAuxiliaryWorkingSet( QProblem* _THIS, - const real_t* const xOpt, /**< Optimal primal solution vector. - * If a NULL pointer is passed, all entries are assumed to be zero. */ - const real_t* const yOpt, /**< Optimal dual solution vector. - * If a NULL pointer is passed, all entries are assumed to be zero. */ - Bounds* const guessedBounds, /**< Guessed working set for solution (xOpt,yOpt). */ - Bounds* auxiliaryBounds /**< Input: Allocated bound object. \n - * Output: Working set for auxiliary QP. */ - ); - - -/** Solves the system Ra = b or R^Ta = b where R is an upper triangular matrix. - * \return SUCCESSFUL_RETURN \n - RET_DIV_BY_ZERO */ -returnValue QProblem_backsolveR( QProblem* _THIS, - const real_t* const b, /**< Right hand side vector. */ - BooleanType transposed, /**< Indicates if the transposed system shall be solved. */ - real_t* const a /**< Output: Solution vector */ - ); - -/** Solves the system Ra = b or R^Ta = b where R is an upper triangular matrix. \n - * Special variant for the case that _THIS function is called from within "removeBound()". - * \return SUCCESSFUL_RETURN \n - RET_DIV_BY_ZERO */ -returnValue QProblem_backsolveRrem( QProblem* _THIS, - const real_t* const b, /**< Right hand side vector. */ - BooleanType transposed, /**< Indicates if the transposed system shall be solved. */ - BooleanType removingBound, /**< Indicates if function is called from "removeBound()". */ - real_t* const a /**< Output: Solution vector */ - ); - - -/** Determines step direction of the shift of the QP data. - * \return SUCCESSFUL_RETURN */ -returnValue QProblemBCPY_determineDataShift( QProblem* _THIS, - const real_t* const g_new, /**< New gradient vector. */ - const real_t* const lb_new, /**< New lower bounds. */ - const real_t* const ub_new, /**< New upper bounds. */ - real_t* const delta_g, /**< Output: Step direction of gradient vector. */ - real_t* const delta_lb, /**< Output: Step direction of lower bounds. */ - real_t* const delta_ub, /**< Output: Step direction of upper bounds. */ - BooleanType* Delta_bB_isZero /**< Output: Indicates if active bounds are to be shifted. */ - ); - - -/** Sets up internal QP data. - * \return SUCCESSFUL_RETURN \n - RET_INVALID_ARGUMENTS */ -returnValue QProblemBCPY_setupQPdataM( QProblem* _THIS, - DenseMatrix *_H, /**< Hessian matrix.*/ - const real_t* const _g, /**< Gradient vector. */ - const real_t* const _lb, /**< Lower bounds (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub /**< Upper bounds (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - ); - -/** Sets up internal QP data. If the current Hessian is trivial - * (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, - * memory for Hessian is allocated and it is set to the given one. - * \return SUCCESSFUL_RETURN \n - RET_INVALID_ARGUMENTS \n - RET_NO_HESSIAN_SPECIFIED */ -returnValue QProblemBCPY_setupQPdata( QProblem* _THIS, - real_t* const _H, /**< Hessian matrix. \n - If Hessian matrix is trivial,a NULL pointer can be passed. */ - const real_t* const _g, /**< Gradient vector. */ - const real_t* const _lb, /**< Lower bounds (on variables). \n - If no lower bounds exist, a NULL pointer can be passed. */ - const real_t* const _ub /**< Upper bounds (on variables). \n - If no upper bounds exist, a NULL pointer can be passed. */ - ); - -/** Sets up internal QP data by loading it from files. If the current Hessian - * is trivial (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, - * memory for Hessian is allocated and it is set to the given one. - * \return SUCCESSFUL_RETURN \n - RET_UNABLE_TO_OPEN_FILE \n - RET_UNABLE_TO_READ_FILE \n - RET_INVALID_ARGUMENTS \n - RET_NO_HESSIAN_SPECIFIED */ -returnValue QProblemBCPY_setupQPdataFromFile( QProblem* _THIS, - const char* const H_file, /**< Name of file where Hessian matrix, of neighbouring QP to be solved, is stored. \n - If Hessian matrix is trivial,a NULL pointer can be passed. */ - const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ - const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n - If no upper bounds exist, a NULL pointer can be passed. */ - ); - -/** Loads new QP vectors from files (internal members are not affected!). - * \return SUCCESSFUL_RETURN \n - RET_UNABLE_TO_OPEN_FILE \n - RET_UNABLE_TO_READ_FILE \n - RET_INVALID_ARGUMENTS */ -returnValue QProblemBCPY_loadQPvectorsFromFile( QProblem* _THIS, - const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ - const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n - If no lower bounds exist, a NULL pointer can be passed. */ - const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n - If no upper bounds exist, a NULL pointer can be passed. */ - real_t* const g_new, /**< Output: Gradient of neighbouring QP to be solved. */ - real_t* const lb_new, /**< Output: Lower bounds of neighbouring QP to be solved */ - real_t* const ub_new /**< Output: Upper bounds of neighbouring QP to be solved */ - ); - - -/** Sets internal infeasibility flag and throws given error in case the far bound - * strategy is not enabled (as QP might actually not be infeasible in _THIS case). - * \return RET_HOTSTART_STOPPED_INFEASIBILITY \n - RET_ENSURELI_FAILED_CYCLING \n - RET_ENSURELI_FAILED_NOINDEX */ -returnValue QProblem_setInfeasibilityFlag( QProblem* _THIS, - returnValue returnvalue, /**< Returnvalue to be tunneled. */ - BooleanType doThrowError /**< Flag forcing to throw an error. */ - ); - - -/** Determines if next QP iteration can be performed within given CPU time limit. - * \return BT_TRUE: CPU time limit is exceeded, stop QP solution. \n - BT_FALSE: Sufficient CPU time for next QP iteration. */ -BooleanType QProblem_isCPUtimeLimitExceeded( QProblem* _THIS, - const real_t* const cputime, /**< Maximum CPU time allowed for QP solution. */ - real_t starttime, /**< Start time of current QP solution. */ - int nWSR /**< Number of working set recalculations performed so far. */ - ); - - -/** Regularise Hessian matrix by adding a scaled identity matrix to it. - * \return SUCCESSFUL_RETURN \n - RET_HESSIAN_ALREADY_REGULARISED */ -returnValue QProblem_regulariseHessian( QProblem* _THIS ); - - -/** Sets Hessian matrix of the QP. - * \return SUCCESSFUL_RETURN */ -static inline returnValue QProblem_setHM( QProblem* _THIS, - DenseMatrix* H_new /**< New Hessian matrix. */ - ); - -/** Sets dense Hessian matrix of the QP. - * If a null pointer is passed and - * a) hessianType is HST_IDENTITY, nothing is done, - * b) hessianType is not HST_IDENTITY, Hessian matrix is set to zero. - * \return SUCCESSFUL_RETURN */ -static inline returnValue QProblem_setH( QProblem* _THIS, - real_t* const H_new /**< New dense Hessian matrix (with correct dimension!). */ - ); - -/** Changes gradient vector of the QP. - * \return SUCCESSFUL_RETURN \n - * RET_INVALID_ARGUMENTS */ -static inline returnValue QProblem_setG( QProblem* _THIS, - const real_t* const g_new /**< New gradient vector (with correct dimension!). */ - ); - -/** Changes lower bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - * RET_INVALID_ARGUMENTS */ -static inline returnValue QProblem_setLB( QProblem* _THIS, - const real_t* const lb_new /**< New lower bound vector (with correct dimension!). */ - ); - -/** Changes single entry of lower bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - RET_INDEX_OUT_OF_BOUNDS */ -static inline returnValue QProblem_setLBn( QProblem* _THIS, - int number, /**< Number of entry to be changed. */ - real_t value /**< New value for entry of lower bound vector. */ - ); - -/** Changes upper bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - * RET_INVALID_ARGUMENTS */ -static inline returnValue QProblem_setUB( QProblem* _THIS, - const real_t* const ub_new /**< New upper bound vector (with correct dimension!). */ - ); - -/** Changes single entry of upper bound vector of the QP. - * \return SUCCESSFUL_RETURN \n - RET_INDEX_OUT_OF_BOUNDS */ -static inline returnValue QProblem_setUBn( QProblem* _THIS, - int number, /**< Number of entry to be changed. */ - real_t value /**< New value for entry of upper bound vector. */ - ); - - - -/** Compute relative length of homotopy in data space for termination - * criterion. - * \return Relative length in data space. */ -real_t QProblemBCPY_getRelativeHomotopyLength( QProblem* _THIS, - const real_t* const g_new, /**< Final gradient. */ - const real_t* const lb_new, /**< Final lower variable bounds. */ - const real_t* const ub_new /**< Final upper variable bounds. */ - ); - - - -/** Performs robustified ratio test yield the maximum possible step length - * along the homotopy path. - * \return SUCCESSFUL_RETURN */ -returnValue QProblem_performRatioTestB( QProblem* _THIS, - int nIdx, /**< Number of ratios to be checked. */ - const int* const idxList, /**< Array containing the indices of all ratios to be checked. */ - Bounds* const subjectTo, /**< Bound object corresponding to ratios to be checked. */ - const real_t* const num, /**< Array containing all numerators for performing the ratio test. */ - const real_t* const den, /**< Array containing all denominators for performing the ratio test. */ - real_t epsNum, /**< Numerator tolerance. */ - real_t epsDen, /**< Denominator tolerance. */ - real_t* t, /**< Output: Maximum possible step length along the homotopy path. */ - int* BC_idx /**< Output: Index of blocking constraint. */ - ); - -/** Checks whether given ratio is blocking, i.e. limits the maximum step length - * along the homotopy path to a value lower than given one. - * \return SUCCESSFUL_RETURN */ -static inline BooleanType QProblem_isBlocking( QProblem* _THIS, - real_t num, /**< Numerator for performing the ratio test. */ - real_t den, /**< Denominator for performing the ratio test. */ - real_t epsNum, /**< Numerator tolerance. */ - real_t epsDen, /**< Denominator tolerance. */ - real_t* t /**< Input: Current maximum step length along the homotopy path, - * Output: Updated maximum possible step length along the homotopy path. */ - ); - - -/** ... - * \return SUCCESSFUL_RETURN \n - RET_UNABLE_TO_OPEN_FILE */ -returnValue QProblem_writeQpDataIntoMatFile( QProblem* _THIS, - const char* const filename /**< Mat file name. */ - ); - -/** ... -* \return SUCCESSFUL_RETURN \n - RET_UNABLE_TO_OPEN_FILE */ -returnValue QProblem_writeQpWorkspaceIntoMatFile( QProblem* _THIS, - const char* const filename /**< Mat file name. */ - ); - - -/* - * g e t B o u n d s - */ -static inline returnValue QProblem_getBounds( QProblem* _THIS, Bounds* _bounds ) -{ - int nV = QProblem_getNV( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - _bounds = _THIS->bounds; - - return SUCCESSFUL_RETURN; -} - - -/* - * g e t N V - */ -static inline int QProblem_getNV( QProblem* _THIS ) -{ - return Bounds_getNV( _THIS->bounds ); -} - - -/* - * g e t N F R - */ -static inline int QProblem_getNFR( QProblem* _THIS ) -{ - return Bounds_getNFR( _THIS->bounds ); -} - - -/* - * g e t N F X - */ -static inline int QProblem_getNFX( QProblem* _THIS ) -{ - return Bounds_getNFX( _THIS->bounds ); -} - - -/* - * g e t N F V - */ -static inline int QProblem_getNFV( QProblem* _THIS ) -{ - return Bounds_getNFV( _THIS->bounds ); -} - - -/* - * g e t S t a t u s - */ -static inline QProblemStatus QProblem_getStatus( QProblem* _THIS ) -{ - return _THIS->status; -} - - -/* - * i s I n i t i a l i s e d - */ -static inline BooleanType QProblem_isInitialised( QProblem* _THIS ) -{ - if ( _THIS->status == QPS_NOTINITIALISED ) - return BT_FALSE; - else - return BT_TRUE; -} - - -/* - * i s S o l v e d - */ -static inline BooleanType QProblem_isSolved( QProblem* _THIS ) -{ - if ( _THIS->status == QPS_SOLVED ) - return BT_TRUE; - else - return BT_FALSE; -} - - -/* - * i s I n f e a s i b l e - */ -static inline BooleanType QProblem_isInfeasible( QProblem* _THIS ) -{ - return _THIS->infeasible; -} - - -/* - * i s U n b o u n d e d - */ -static inline BooleanType QProblem_isUnbounded( QProblem* _THIS ) -{ - return _THIS->unbounded; -} - - -/* - * g e t H e s s i a n T y p e - */ -static inline HessianType QProblem_getHessianType( QProblem* _THIS ) -{ - return _THIS->hessianType; -} - - -/* - * s e t H e s s i a n T y p e - */ -static inline returnValue QProblem_setHessianType( QProblem* _THIS, HessianType _hessianType ) -{ - _THIS->hessianType = _hessianType; - return SUCCESSFUL_RETURN; -} - - -/* - * u s i n g R e g u l a r i s a t i o n - */ -static inline BooleanType QProblem_usingRegularisation( QProblem* _THIS ) -{ - if ( _THIS->regVal > QPOASES_ZERO ) - return BT_TRUE; - else - return BT_FALSE; -} - - -/* - * g e t O p t i o n s - */ -static inline Options QProblem_getOptions( QProblem* _THIS ) -{ - return _THIS->options; -} - - -/* - * s e t O p t i o n s - */ -static inline returnValue QProblem_setOptions( QProblem* _THIS, - Options _options - ) -{ - OptionsCPY( &_options,&(_THIS->options) ); - Options_ensureConsistency( &(_THIS->options) ); - - QProblem_setPrintLevel( _THIS,_THIS->options.printLevel ); - - return SUCCESSFUL_RETURN; -} - - -/* - * g e t P r i n t L e v e l - */ -static inline PrintLevel QProblem_getPrintLevel( QProblem* _THIS ) -{ - return _THIS->options.printLevel; -} - - -/* - * g e t C o u n t - */ -static inline unsigned int QProblem_getCount( QProblem* _THIS ) -{ - return _THIS->count; -} - - -/* - * r e s e t C o u n t e r - */ -static inline returnValue QProblem_resetCounter( QProblem* _THIS ) -{ - _THIS->count = 0; - return SUCCESSFUL_RETURN; -} - - - -/***************************************************************************** - * P R O T E C T E D * - *****************************************************************************/ - - -/* - * s e t H - */ -static inline returnValue QProblem_setHM( QProblem* _THIS, DenseMatrix* H_new ) -{ - if ( H_new == 0 ) - return QProblem_setH( _THIS,(real_t*)0 ); - else - return QProblem_setH( _THIS,DenseMatrix_getVal(H_new) ); -} - - -/* - * s e t H - */ -static inline returnValue QProblem_setH( QProblem* _THIS, real_t* const H_new ) -{ - /* if null pointer is passed, Hessian is set to zero matrix - * (or stays identity matrix) */ - if ( H_new == 0 ) - { - if ( _THIS->hessianType == HST_IDENTITY ) - return SUCCESSFUL_RETURN; - - _THIS->hessianType = HST_ZERO; - - _THIS->H = 0; - } - else - { - DenseMatrixCON( _THIS->H,QProblem_getNV( _THIS ),QProblem_getNV( _THIS ),QProblem_getNV( _THIS ),H_new ); - } - - return SUCCESSFUL_RETURN; -} - - -/* - * s e t G - */ -static inline returnValue QProblem_setG( QProblem* _THIS, const real_t* const g_new ) -{ - unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( g_new == 0 ) - return THROWERROR( RET_INVALID_ARGUMENTS ); - - memcpy( _THIS->g,g_new,nV*sizeof(real_t) ); - - return SUCCESSFUL_RETURN; -} - - -/* - * s e t L B - */ -static inline returnValue QProblem_setLB( QProblem* _THIS, const real_t* const lb_new ) -{ - unsigned int i; - unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( lb_new != 0 ) - { - memcpy( _THIS->lb,lb_new,nV*sizeof(real_t) ); - } - else - { - /* if no lower bounds are specified, set them to -infinity */ - for( i=0; ilb[i] = -QPOASES_INFTY; - } - - return SUCCESSFUL_RETURN; -} - - -/* - * s e t L B - */ -static inline returnValue QProblem_setLBn( QProblem* _THIS, int number, real_t value ) -{ - int nV = QProblem_getNV( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( ( number >= 0 ) && ( number < nV ) ) - { - _THIS->lb[number] = value; - return SUCCESSFUL_RETURN; - } - else - { - return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); - } -} - - -/* - * s e t U B - */ -static inline returnValue QProblem_setUB( QProblem* _THIS, const real_t* const ub_new ) -{ - unsigned int i; - unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( ub_new != 0 ) - { - memcpy( _THIS->ub,ub_new,nV*sizeof(real_t) ); - } - else - { - /* if no upper bounds are specified, set them to infinity */ - for( i=0; iub[i] = QPOASES_INFTY; - } - - return SUCCESSFUL_RETURN; -} - - -/* - * s e t U B - */ -static inline returnValue QProblem_setUBn( QProblem* _THIS, int number, real_t value ) -{ - int nV = QProblem_getNV( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( ( number >= 0 ) && ( number < nV ) ) - { - _THIS->ub[number] = value; - - return SUCCESSFUL_RETURN; - } - else - { - return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); - } -} - - - -/* - * i s B l o c k i n g - */ -static inline BooleanType QProblem_isBlocking( QProblem* _THIS, - real_t num, - real_t den, - real_t epsNum, - real_t epsDen, - real_t* t - ) -{ - if ( ( den >= epsDen ) && ( num >= epsNum ) ) - { - if ( num < (*t)*den ) - return BT_TRUE; - } - - return BT_FALSE; -} - - - -/* - * g e t C o n s t r a i n t s - */ -static inline returnValue QProblem_getConstraints( QProblem* _THIS, Constraints* _constraints ) -{ - int nV = QProblem_getNV( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - ConstraintsCPY( _THIS->constraints,_constraints ); - - return SUCCESSFUL_RETURN; -} - - - -/* - * g e t N C - */ -static inline int QProblem_getNC( QProblem* _THIS ) -{ - return Constraints_getNC( _THIS->constraints ); -} - - -/* - * g e t N E C - */ -static inline int QProblem_getNEC( QProblem* _THIS ) -{ - return Constraints_getNEC( _THIS->constraints ); -} - - -/* - * g e t N A C - */ -static inline int QProblem_getNAC( QProblem* _THIS ) -{ - return Constraints_getNAC( _THIS->constraints ); -} - - -/* - * g e t N I A C - */ -static inline int QProblem_getNIAC( QProblem* _THIS ) -{ - return Constraints_getNIAC( _THIS->constraints ); -} - - - -/***************************************************************************** - * P R O T E C T E D * - *****************************************************************************/ - - -/* - * s e t A - */ -static inline returnValue QProblem_setAM( QProblem* _THIS, DenseMatrix *A_new ) -{ - if ( A_new == 0 ) - return QProblem_setA( _THIS,(real_t*)0 ); - else - return QProblem_setA( _THIS,DenseMatrix_getVal(A_new) ); -} - - -/* - * s e t A - */ -static inline returnValue QProblem_setA( QProblem* _THIS, real_t* const A_new ) -{ - int j; - int nV = QProblem_getNV( _THIS ); - int nC = QProblem_getNC( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( A_new == 0 ) - return THROWERROR( RET_INVALID_ARGUMENTS ); - - DenseMatrixCON( _THIS->A,QProblem_getNC( _THIS ),QProblem_getNV( _THIS ),QProblem_getNV( _THIS ),A_new ); - - DenseMatrix_times( _THIS->A,1, 1.0, _THIS->x, nV, 0.0, _THIS->Ax, nC); - - for( j=0; jAx_u[j] = _THIS->ubA[j] - _THIS->Ax[j]; - _THIS->Ax_l[j] = _THIS->Ax[j] - _THIS->lbA[j]; - - /* (ckirches) disable constraints with empty rows */ - if ( qpOASES_isZero( DenseMatrix_getRowNorm( _THIS->A,j,2 ),QPOASES_ZERO ) == BT_TRUE ) - Constraints_setType( _THIS->constraints,j,ST_DISABLED ); - } - - return SUCCESSFUL_RETURN; -} - - -/* - * s e t L B A - */ -static inline returnValue QProblem_setLBA( QProblem* _THIS, const real_t* const lbA_new ) -{ - unsigned int i; - unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); - unsigned int nC = (unsigned int)QProblem_getNC( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( lbA_new != 0 ) - { - memcpy( _THIS->lbA,lbA_new,nC*sizeof(real_t) ); - } - else - { - /* if no lower constraints' bounds are specified, set them to -infinity */ - for( i=0; ilbA[i] = -QPOASES_INFTY; - } - - return SUCCESSFUL_RETURN; -} - - -/* - * s e t L B A - */ -static inline returnValue QProblem_setLBAn( QProblem* _THIS, int number, real_t value ) -{ - int nV = QProblem_getNV( _THIS ); - int nC = QProblem_getNC( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( ( number >= 0 ) && ( number < nC ) ) - { - _THIS->lbA[number] = value; - return SUCCESSFUL_RETURN; - } - else - return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); -} - - -/* - * s e t U B A - */ -static inline returnValue QProblem_setUBA( QProblem* _THIS, const real_t* const ubA_new ) -{ - unsigned int i; - unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); - unsigned int nC = (unsigned int)QProblem_getNC( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( ubA_new != 0 ) - { - memcpy( _THIS->ubA,ubA_new,nC*sizeof(real_t) ); - } - else - { - /* if no upper constraints' bounds are specified, set them to infinity */ - for( i=0; iubA[i] = QPOASES_INFTY; - } - - return SUCCESSFUL_RETURN; -} - - -/* - * s e t U B A - */ -static inline returnValue QProblem_setUBAn( QProblem* _THIS, int number, real_t value ) -{ - int nV = QProblem_getNV( _THIS ); - int nC = QProblem_getNC( _THIS ); - - if ( nV == 0 ) - return THROWERROR( RET_QPOBJECT_NOT_SETUP ); - - if ( ( number >= 0 ) && ( number < nC ) ) - { - _THIS->ubA[number] = value; - return SUCCESSFUL_RETURN; - } - else - return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); -} - - -END_NAMESPACE_QPOASES - - -#endif /* QPOASES_QPROBLEM_H */ - - -/* - * end of file - */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/QProblem.h + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2007-2015 + * + * Declaration of the QProblem class which is able to use the newly + * developed online active set strategy for parametric quadratic programming. + */ + + + +#ifndef QPOASES_QPROBLEM_H +#define QPOASES_QPROBLEM_H + + +#include +#include +#include +#include +#include +#include + + +BEGIN_NAMESPACE_QPOASES + +typedef struct { + Bounds *auxiliaryBounds; + Constraints *auxiliaryConstraints; + + real_t *ub_new_far; + real_t *lb_new_far; + real_t *ubA_new_far; + real_t *lbA_new_far; + + real_t *g_new; + real_t *lb_new; + real_t *ub_new; + real_t *lbA_new; + real_t *ubA_new; + + real_t *g_new2; + real_t *lb_new2; + real_t *ub_new2; + real_t *lbA_new2; + real_t *ubA_new2; + + real_t *delta_xFX5; + real_t *delta_xFR5; + real_t *delta_yAC5; + real_t *delta_yFX5; + + real_t *Hx; + + real_t *_H; + + real_t *g_original; + real_t *lb_original; + real_t *ub_original; + real_t *lbA_original; + real_t *ubA_original; + + real_t *delta_xFR; + real_t *delta_xFX; + real_t *delta_yAC; + real_t *delta_yFX; + real_t *delta_g; + real_t *delta_lb; + real_t *delta_ub; + real_t *delta_lbA; + real_t *delta_ubA; + + real_t *gMod; + + real_t *aFR; + real_t *wZ; + + real_t *delta_g2; + real_t *delta_xFX2; + real_t *delta_xFR2; + real_t *delta_yAC2; + real_t *delta_yFX2; + real_t *nul; + real_t *Arow; + + real_t *xiC; + real_t *xiC_TMP; + real_t *xiB; + real_t *Arow2; + real_t *num; + + real_t *w; + real_t *tmp; + + real_t *delta_g3; + real_t *delta_xFX3; + real_t *delta_xFR3; + real_t *delta_yAC3; + real_t *delta_yFX3; + real_t *nul2; + + real_t *xiC2; + real_t *xiC_TMP2; + real_t *xiB2; + real_t *num2; + + real_t *Hz; + real_t *z; + real_t *ZHz; + real_t *r; + + real_t *tmp2; + real_t *Hz2; + real_t *z2; + real_t *r2; + real_t *rhs; + + real_t *delta_xFX4; + real_t *delta_xFR4; + real_t *delta_yAC4; + real_t *delta_yFX4; + real_t *nul3; + real_t *ek; + real_t *x_W; + real_t *As; + real_t *Ax_W; + + real_t *num3; + real_t *den; + real_t *delta_Ax_l; + real_t *delta_Ax_u; + real_t *delta_Ax; + real_t *delta_x; + + real_t *_A; + + real_t *grad; + real_t *AX; +} QProblem_ws; + +int QProblem_ws_calculateMemorySize( unsigned int nV, unsigned int nC ); + +char *QProblem_ws_assignMemory( unsigned int nV, unsigned int nC, QProblem_ws **mem, void *raw_memory ); + +QProblem_ws *QProblem_ws_createMemory( unsigned int nV, unsigned int nC ); + +/** + * \brief Implements the online active set strategy for QPs with general constraints. + * + * A class for setting up and solving quadratic programs. The main feature is + * the possibily to use the newly developed online active set strategy for + * parametric quadratic programming. + * + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2007-2015 + */ +typedef struct +{ + QProblem_ws *ws; /**< Workspace */ + Bounds *bounds; /**< Data structure for problem's bounds. */ + Constraints *constraints; /**< Data structure for problem's constraints. */ + Flipper *flipper; /**< Struct for making a temporary copy of the matrix factorisations. */ + + DenseMatrix* H; /**< Hessian matrix pointer. */ + DenseMatrix* A; /**< Constraint matrix pointer. */ + + Options options; /**< Struct containing all user-defined options for solving QPs. */ + TabularOutput tabularOutput; /**< Struct storing information for tabular output (printLevel == PL_TABULAR). */ + + real_t *g; /**< Gradient. */ + + real_t *lb; /**< Lower bound vector (on variables). */ + real_t *ub; /**< Upper bound vector (on variables). */ + real_t *lbA; /**< Lower constraints' bound vector. */ + real_t *ubA; /**< Upper constraints' bound vector. */ + + real_t *R; /**< Cholesky factor of H (i.e. H = R^T*R). */ + + real_t *T; /**< Reverse triangular matrix, A = [0 T]*Q'. */ + real_t *Q; /**< Orthonormal quadratic matrix, A = [0 T]*Q'. */ + + real_t *Ax; /**< Stores the current A*x \n + * (for increased efficiency only). */ + real_t *Ax_l; /**< Stores the current distance to lower constraints' bounds A*x-lbA \n + * (for increased efficiency only). */ + real_t *Ax_u; /**< Stores the current distance to lower constraints' bounds ubA-A*x \n + * (for increased efficiency only). */ + + real_t *x; /**< Primal solution vector. */ + real_t *y; /**< Dual solution vector. */ + + real_t *delta_xFR_TMP; /**< Temporary for determineStepDirection */ + real_t *tempA; /**< Temporary for determineStepDirection. */ + real_t *tempB; /**< Temporary for determineStepDirection. */ + real_t *ZFR_delta_xFRz; /**< Temporary for determineStepDirection. */ + real_t *delta_xFRy; /**< Temporary for determineStepDirection. */ + real_t *delta_xFRz; /**< Temporary for determineStepDirection. */ + real_t *delta_yAC_TMP; /**< Temporary for determineStepDirection. */ + + ConstraintProduct constraintProduct; /**< Pointer to user-defined constraint product function. */ + + real_t tau; /**< Last homotopy step length. */ + real_t regVal; /**< Holds the offset used to regularise Hessian matrix (zero by default). */ + + real_t ramp0; /**< Start value for Ramping Strategy. */ + real_t ramp1; /**< Final value for Ramping Strategy. */ + + QProblemStatus status; /**< Current status of the solution process. */ + HessianType hessianType; /**< Type of Hessian matrix. */ + + BooleanType haveCholesky; /**< Flag indicating whether Cholesky decomposition has already been setup. */ + BooleanType infeasible; /**< QP infeasible? */ + BooleanType unbounded; /**< QP unbounded? */ + + int rampOffset; /**< Offset index for Ramping. */ + unsigned int count; /**< Counts the number of hotstart function calls (internal usage only!). */ + + int sizeT; /**< Matrix T is stored in a (sizeT x sizeT) array. */ +} QProblem; + +int QProblem_calculateMemorySize( unsigned int nV, unsigned int nC ); + +char *QProblem_assignMemory( unsigned int nV, unsigned int nC, QProblem **mem, void *raw_memory ); + +QProblem *QProblem_createMemory( unsigned int nV, unsigned int nC ); + + +/** Constructor which takes the QP dimension and Hessian type + * information. If the Hessian is the zero (i.e. HST_ZERO) or the + * identity matrix (i.e. HST_IDENTITY), respectively, no memory + * is allocated for it and a NULL pointer can be passed for it + * to the init() functions. */ +void QProblemCON( QProblem* _THIS, + int _nV, /**< Number of variables. */ + int _nC, /**< Number of constraints. */ + HessianType _hessianType /**< Type of Hessian matrix. */ + ); + +/** Copies all members from given rhs object. + * \return SUCCESSFUL_RETURN */ +void QProblemCPY( QProblem* FROM, + QProblem* TO + ); + + +/** Clears all data structures of QProblem except for QP data. + * \return SUCCESSFUL_RETURN \n + RET_RESET_FAILED */ +returnValue QProblem_reset( QProblem* _THIS ); + + +/** Initialises a QP problem with given QP data and tries to solve it + * using at most nWSR iterations. + * + * Note: This function internally calls solveInitialQP for initialisation! + * + * \return SUCCESSFUL_RETURN \n + RET_INIT_FAILED \n + RET_INIT_FAILED_CHOLESKY \n + RET_INIT_FAILED_TQ \n + RET_INIT_FAILED_HOTSTART \n + RET_INIT_FAILED_INFEASIBILITY \n + RET_INIT_FAILED_UNBOUNDEDNESS \n + RET_MAX_NWSR_REACHED \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_initM( QProblem* _THIS, + DenseMatrix *_H, /**< Hessian matrix. */ + const real_t* const _g, /**< Gradient vector. */ + DenseMatrix *_A, /**< Constraint matrix. */ + const real_t* const _lb, /**< Lower bound vector (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub, /**< Upper bound vector (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const _lbA, /**< Lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const _ubA, /**< Upper constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. + Output: Number of performed working set recalculations. */ + real_t* const cputime /**< Input: Maximum CPU time allowed for QP initialisation. \n + Output: CPU time spent for QP initialisation (if pointer passed). */ + ); + + +/** Initialises a QP problem with given QP data and tries to solve it + * using at most nWSR iterations. + * + * Note: This function internally calls solveInitialQP for initialisation! + * + * \return SUCCESSFUL_RETURN \n + RET_INIT_FAILED \n + RET_INIT_FAILED_CHOLESKY \n + RET_INIT_FAILED_TQ \n + RET_INIT_FAILED_HOTSTART \n + RET_INIT_FAILED_INFEASIBILITY \n + RET_INIT_FAILED_UNBOUNDEDNESS \n + RET_MAX_NWSR_REACHED \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_init( QProblem* _THIS, + real_t* const _H, /**< Hessian matrix. \n + If Hessian matrix is trivial, a NULL pointer can be passed. */ + const real_t* const _g, /**< Gradient vector. */ + real_t* const _A, /**< Constraint matrix. */ + const real_t* const _lb, /**< Lower bound vector (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub, /**< Upper bound vector (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const _lbA, /**< Lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const _ubA, /**< Upper constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. + Output: Number of performed working set recalculations. */ + real_t* const cputime /**< Input: Maximum CPU time allowed for QP initialisation. \n + Output: CPU time spent for QP initialisation (if pointer passed). */ + ); + +/** Initialises a QP problem with given QP data to be read from files and tries to solve it + * using at most nWSR iterations. + * + * Note: This function internally calls solveInitialQP for initialisation! + * + * \return SUCCESSFUL_RETURN \n + RET_INIT_FAILED \n + RET_INIT_FAILED_CHOLESKY \n + RET_INIT_FAILED_TQ \n + RET_INIT_FAILED_HOTSTART \n + RET_INIT_FAILED_INFEASIBILITY \n + RET_INIT_FAILED_UNBOUNDEDNESS \n + RET_MAX_NWSR_REACHED \n + RET_UNABLE_TO_READ_FILE */ +returnValue QProblem_initF( QProblem* _THIS, + const char* const H_file, /**< Name of file where Hessian matrix is stored. \n + If Hessian matrix is trivial, a NULL pointer can be passed. */ + const char* const g_file, /**< Name of file where gradient vector is stored. */ + const char* const A_file, /**< Name of file where constraint matrix is stored. */ + const char* const lb_file, /**< Name of file where lower bound vector. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file, /**< Name of file where upper bound vector. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const char* const lbA_file, /**< Name of file where lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const char* const ubA_file, /**< Name of file where upper constraints' bound vector. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. + Output: Number of performed working set recalculations. */ + real_t* const cputime /**< Input: Maximum CPU time allowed for QP initialisation. \n + Output: CPU time spent for QP initialisation (if pointer passed). */ + ); + +/** Initialises a QP problem with given QP data and tries to solve it + * using at most nWSR iterations. Depending on the parameter constellation it: \n + * 1. 0, 0, 0 : starts with xOpt = 0, yOpt = 0 and gB/gC empty (or all implicit equality bounds), \n + * 2. xOpt, 0, 0 : starts with xOpt, yOpt = 0 and obtain gB/gC by "clipping", \n + * 3. 0, yOpt, 0 : starts with xOpt = 0, yOpt and obtain gB/gC from yOpt != 0, \n + * 4. 0, 0, gB/gC: starts with xOpt = 0, yOpt = 0 and gB/gC, \n + * 5. xOpt, yOpt, 0 : starts with xOpt, yOpt and obtain gB/gC from yOpt != 0, \n + * 6. xOpt, 0, gB/gC: starts with xOpt, yOpt = 0 and gB/gC, \n + * 7. xOpt, yOpt, gB/gC: starts with xOpt, yOpt and gB/gC (assume them to be consistent!) + * + * Note: This function internally calls solveInitialQP for initialisation! + * + * \return SUCCESSFUL_RETURN \n + RET_INIT_FAILED \n + RET_INIT_FAILED_CHOLESKY \n + RET_INIT_FAILED_TQ \n + RET_INIT_FAILED_HOTSTART \n + RET_INIT_FAILED_INFEASIBILITY \n + RET_INIT_FAILED_UNBOUNDEDNESS \n + RET_MAX_NWSR_REACHED \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_initMW( QProblem* _THIS, + DenseMatrix *_H, /**< Hessian matrix. \n + If Hessian matrix is trivial, a NULL pointer can be passed. */ + const real_t* const _g, /**< Gradient vector. */ + DenseMatrix *_A, /**< Constraint matrix. */ + const real_t* const _lb, /**< Lower bound vector (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub, /**< Upper bound vector (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const _lbA, /**< Lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const _ubA, /**< Upper constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. + * Output: Number of performed working set recalculations. */ + real_t* const cputime, /**< Input: Maximum CPU time allowed for QP initialisation. \n + Output: CPU time spent for QP initialisation. */ + const real_t* const xOpt, /**< Optimal primal solution vector. \n + (If a null pointer is passed, the old primal solution is kept!) */ + const real_t* const yOpt, /**< Optimal dual solution vector. \n + (If a null pointer is passed, the old dual solution is kept!) */ + Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ + Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ + const real_t* const _R /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. + The Cholesky factor must be stored in a real_t array of size nV*nV + in row-major format. Note: Only used if xOpt/yOpt and gB are NULL! \n + (If a null pointer is passed, Cholesky decomposition is computed internally!) */ + ); + +/** Initialises a QP problem with given QP data and tries to solve it + * using at most nWSR iterations. Depending on the parameter constellation it: \n + * 1. 0, 0, 0 : starts with xOpt = 0, yOpt = 0 and gB/gC empty (or all implicit equality bounds), \n + * 2. xOpt, 0, 0 : starts with xOpt, yOpt = 0 and obtain gB/gC by "clipping", \n + * 3. 0, yOpt, 0 : starts with xOpt = 0, yOpt and obtain gB/gC from yOpt != 0, \n + * 4. 0, 0, gB/gC: starts with xOpt = 0, yOpt = 0 and gB/gC, \n + * 5. xOpt, yOpt, 0 : starts with xOpt, yOpt and obtain gB/gC from yOpt != 0, \n + * 6. xOpt, 0, gB/gC: starts with xOpt, yOpt = 0 and gB/gC, \n + * 7. xOpt, yOpt, gB/gC: starts with xOpt, yOpt and gB/gC (assume them to be consistent!) + * + * Note: This function internally calls solveInitialQP for initialisation! + * + * \return SUCCESSFUL_RETURN \n + RET_INIT_FAILED \n + RET_INIT_FAILED_CHOLESKY \n + RET_INIT_FAILED_TQ \n + RET_INIT_FAILED_HOTSTART \n + RET_INIT_FAILED_INFEASIBILITY \n + RET_INIT_FAILED_UNBOUNDEDNESS \n + RET_MAX_NWSR_REACHED \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_initW( QProblem* _THIS, + real_t* const _H, /**< Hessian matrix. \n + If Hessian matrix is trivial, a NULL pointer can be passed. */ + const real_t* const _g, /**< Gradient vector. */ + real_t* const _A, /**< Constraint matrix. */ + const real_t* const _lb, /**< Lower bound vector (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub, /**< Upper bound vector (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const _lbA, /**< Lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const _ubA, /**< Upper constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. + * Output: Number of performed working set recalculations. */ + real_t* const cputime, /**< Input: Maximum CPU time allowed for QP initialisation. \n + Output: CPU time spent for QP initialisation. */ + const real_t* const xOpt, /**< Optimal primal solution vector. \n + (If a null pointer is passed, the old primal solution is kept!) */ + const real_t* const yOpt, /**< Optimal dual solution vector. \n + (If a null pointer is passed, the old dual solution is kept!) */ + Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ + Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ + const real_t* const _R /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. + The Cholesky factor must be stored in a real_t array of size nV*nV + in row-major format. Note: Only used if xOpt/yOpt and gB are NULL! \n + (If a null pointer is passed, Cholesky decomposition is computed internally!) */ + ); + +/** Initialises a QP problem with given QP data to be ream from files and tries to solve it + * using at most nWSR iterations. Depending on the parameter constellation it: \n + * 1. 0, 0, 0 : starts with xOpt = 0, yOpt = 0 and gB/gC empty (or all implicit equality bounds), \n + * 2. xOpt, 0, 0 : starts with xOpt, yOpt = 0 and obtain gB/gC by "clipping", \n + * 3. 0, yOpt, 0 : starts with xOpt = 0, yOpt and obtain gB/gC from yOpt != 0, \n + * 4. 0, 0, gB/gC: starts with xOpt = 0, yOpt = 0 and gB/gC, \n + * 5. xOpt, yOpt, 0 : starts with xOpt, yOpt and obtain gB/gC from yOpt != 0, \n + * 6. xOpt, 0, gB/gC: starts with xOpt, yOpt = 0 and gB/gC, \n + * 7. xOpt, yOpt, gB/gC: starts with xOpt, yOpt and gB/gC (assume them to be consistent!) + * + * Note: This function internally calls solveInitialQP for initialisation! + * + * \return SUCCESSFUL_RETURN \n + RET_INIT_FAILED \n + RET_INIT_FAILED_CHOLESKY \n + RET_INIT_FAILED_TQ \n + RET_INIT_FAILED_HOTSTART \n + RET_INIT_FAILED_INFEASIBILITY \n + RET_INIT_FAILED_UNBOUNDEDNESS \n + RET_MAX_NWSR_REACHED \n + RET_UNABLE_TO_READ_FILE */ +returnValue QProblem_initFW( QProblem* _THIS, + const char* const H_file, /**< Name of file where Hessian matrix is stored. \n + If Hessian matrix is trivial, a NULL pointer can be passed. */ + const char* const g_file, /**< Name of file where gradient vector is stored. */ + const char* const A_file, /**< Name of file where constraint matrix is stored. */ + const char* const lb_file, /**< Name of file where lower bound vector. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file, /**< Name of file where upper bound vector. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const char* const lbA_file, /**< Name of file where lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const char* const ubA_file, /**< Name of file where upper constraints' bound vector. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations when using initial homotopy. + Output: Number of performed working set recalculations. */ + real_t* const cputime, /**< Input: Maximum CPU time allowed for QP initialisation. \n + Output: CPU time spent for QP initialisation. */ + const real_t* const xOpt, /**< Optimal primal solution vector. \n + (If a null pointer is passed, the old primal solution is kept!) */ + const real_t* const yOpt, /**< Optimal dual solution vector. \n + (If a null pointer is passed, the old dual solution is kept!) */ + Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ + Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ + const char* const R_file /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. + The Cholesky factor must be stored in a real_t array of size nV*nV + in row-major format. Note: Only used if xOpt/yOpt and gB are NULL! \n + (If a null pointer is passed, Cholesky decomposition is computed internally!) */ + ); + +/** Solves an initialised QP sequence using the online active set strategy. + * QP solution is started from previous solution. + * + * Note: This function internally calls solveQP/solveRegularisedQP + * for solving an initialised QP! + * + * \return SUCCESSFUL_RETURN \n + RET_MAX_NWSR_REACHED \n + RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n + RET_HOTSTART_FAILED \n + RET_SHIFT_DETERMINATION_FAILED \n + RET_STEPDIRECTION_DETERMINATION_FAILED \n + RET_STEPLENGTH_DETERMINATION_FAILED \n + RET_HOMOTOPY_STEP_FAILED \n + RET_HOTSTART_STOPPED_INFEASIBILITY \n + RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ +returnValue QProblem_hotstart( QProblem* _THIS, + const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ + const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations; \n + Output: Number of performed working set recalculations. */ + real_t* const cputime /**< Input: Maximum CPU time allowed for QP solution. \n + Output: CPU time spent for QP solution (or to perform nWSR iterations). */ + ); + +/** Solves an initialised QP sequence using the online active set strategy, + * where QP data is read from files. QP solution is started from previous solution. + * + * Note: This function internally calls solveQP/solveRegularisedQP + * for solving an initialised QP! + * + * \return SUCCESSFUL_RETURN \n + RET_MAX_NWSR_REACHED \n + RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n + RET_HOTSTART_FAILED \n + RET_SHIFT_DETERMINATION_FAILED \n + RET_STEPDIRECTION_DETERMINATION_FAILED \n + RET_STEPLENGTH_DETERMINATION_FAILED \n + RET_HOMOTOPY_STEP_FAILED \n + RET_HOTSTART_STOPPED_INFEASIBILITY \n + RET_HOTSTART_STOPPED_UNBOUNDEDNESS \n + RET_UNABLE_TO_READ_FILE \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_hotstartF( QProblem* _THIS, + const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ + const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const char* const ubA_file, /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations; \n + Output: Number of performed working set recalculations. */ + real_t* const cputime /**< Input: Maximum CPU time allowed for QP solution. \n + Output: CPU time spent for QP solution (or to perform nWSR iterations). */ + ); + +/** Solves an initialised QP sequence using the online active set strategy. + * By default, QP solution is started from previous solution. If a guess + * for the working set is provided, an initialised homotopy is performed. + * + * Note: This function internally calls solveQP/solveRegularisedQP + * for solving an initialised QP! + * + * \return SUCCESSFUL_RETURN \n + RET_MAX_NWSR_REACHED \n + RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n + RET_HOTSTART_FAILED \n + RET_SHIFT_DETERMINATION_FAILED \n + RET_STEPDIRECTION_DETERMINATION_FAILED \n + RET_STEPLENGTH_DETERMINATION_FAILED \n + RET_HOMOTOPY_STEP_FAILED \n + RET_HOTSTART_STOPPED_INFEASIBILITY \n + RET_HOTSTART_STOPPED_UNBOUNDEDNESS \n + RET_SETUP_AUXILIARYQP_FAILED */ +returnValue QProblem_hotstartW( QProblem* _THIS, + const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ + const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations; \n + Output: Number of performed working set recalculations. */ + real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n + Output: CPU time spent for QP solution (or to perform nWSR iterations). */ + Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). \n + (If a null pointer is passed, the previous working set of bounds is kept!) */ + Constraints* const guessedConstraints /**< Optimal working set of constraints for solution (xOpt,yOpt). \n + (If a null pointer is passed, the previous working set of constraints is kept!) */ + ); + +/** Solves an initialised QP sequence using the online active set strategy, + * where QP data is read from files. + * By default, QP solution is started from previous solution. If a guess + * for the working set is provided, an initialised homotopy is performed. + * + * Note: This function internally calls solveQP/solveRegularisedQP + * for solving an initialised QP! + * + * \return SUCCESSFUL_RETURN \n + RET_MAX_NWSR_REACHED \n + RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n + RET_HOTSTART_FAILED \n + RET_SHIFT_DETERMINATION_FAILED \n + RET_STEPDIRECTION_DETERMINATION_FAILED \n + RET_STEPLENGTH_DETERMINATION_FAILED \n + RET_HOMOTOPY_STEP_FAILED \n + RET_HOTSTART_STOPPED_INFEASIBILITY \n + RET_HOTSTART_STOPPED_UNBOUNDEDNESS \n + RET_SETUP_AUXILIARYQP_FAILED \n + RET_UNABLE_TO_READ_FILE \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_hotstartFW( QProblem* _THIS, + const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ + const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const char* const ubA_file, /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations; \n + Output: Number of performed working set recalculations. */ + real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n + Output: CPU time spent for QP solution (or to perform nWSR iterations). */ + Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). \n + (If a null pointer is passed, the previous working set of bounds is kept!) */ + Constraints* const guessedConstraints /**< Optimal working set of constraints for solution (xOpt,yOpt). \n + (If a null pointer is passed, the previous working set of constraints is kept!) */ + ); + + +/** Solves using the current working set + * \return SUCCESSFUL_RETURN \n + * RET_STEPDIRECTION_FAILED_TQ \n + * RET_STEPDIRECTION_FAILED_CHOLESKY \n + * RET_INVALID_ARGUMENTS */ +returnValue QProblem_solveCurrentEQP ( QProblem* _THIS, + const int n_rhs, /**< Number of consecutive right hand sides */ + const real_t* g_in, /**< Gradient of neighbouring QP to be solved. */ + const real_t* lb_in, /**< Lower bounds of neighbouring QP to be solved. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* ub_in, /**< Upper bounds of neighbouring QP to be solved. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* lbA_in, /**< Lower constraints' bounds of neighbouring QP to be solved. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* ubA_in, /**< Upper constraints' bounds of neighbouring QP to be solved. \n */ + real_t* x_out, /**< Output: Primal solution */ + real_t* y_out /**< Output: Dual solution */ + ); + + + +/** Returns current constraints object of the QP (deep copy). + * \return SUCCESSFUL_RETURN \n + RET_QPOBJECT_NOT_SETUP */ +static inline returnValue QProblem_getConstraints( QProblem* _THIS, + Constraints* _constraints /** Output: Constraints object. */ + ); + + +/** Returns the number of constraints. + * \return Number of constraints. */ +static inline int QProblem_getNC( QProblem* _THIS ); + +/** Returns the number of (implicitly defined) equality constraints. + * \return Number of (implicitly defined) equality constraints. */ +static inline int QProblem_getNEC( QProblem* _THIS ); + +/** Returns the number of active constraints. + * \return Number of active constraints. */ +static inline int QProblem_getNAC( QProblem* _THIS ); + +/** Returns the number of inactive constraints. + * \return Number of inactive constraints. */ +static inline int QProblem_getNIAC( QProblem* _THIS ); + +/** Returns the dimension of null space. + * \return Dimension of null space. */ +int QProblem_getNZ( QProblem* _THIS ); + + +/** Returns the dual solution vector (deep copy). + * \return SUCCESSFUL_RETURN \n + RET_QP_NOT_SOLVED */ +returnValue QProblem_getDualSolution( QProblem* _THIS, + real_t* const yOpt /**< Output: Dual solution vector (if QP has been solved). */ + ); + + +/** Defines user-defined routine for calculating the constraint product A*x + * \return SUCCESSFUL_RETURN \n */ +returnValue QProblem_setConstraintProduct( QProblem* _THIS, + ConstraintProduct _constraintProduct + ); + + +/** Prints concise list of properties of the current QP. + * \return SUCCESSFUL_RETURN \n */ +returnValue QProblem_printProperties( QProblem* _THIS ); + + + +/** Writes a vector with the state of the working set +* \return SUCCESSFUL_RETURN */ +returnValue QProblem_getWorkingSet( QProblem* _THIS, + real_t* workingSet /** Output: array containing state of the working set. */ + ); + +/** Writes a vector with the state of the working set of bounds + * \return SUCCESSFUL_RETURN \n + * RET_INVALID_ARGUMENTS */ +returnValue QProblem_getWorkingSetBounds( QProblem* _THIS, + real_t* workingSetB /** Output: array containing state of the working set of bounds. */ + ); + +/** Writes a vector with the state of the working set of constraints + * \return SUCCESSFUL_RETURN \n + * RET_INVALID_ARGUMENTS */ +returnValue QProblem_getWorkingSetConstraints( QProblem* _THIS, + real_t* workingSetC /** Output: array containing state of the working set of constraints. */ + ); + + +/** Returns current bounds object of the QP (deep copy). + * \return SUCCESSFUL_RETURN \n + RET_QPOBJECT_NOT_SETUP */ +static inline returnValue QProblem_getBounds( QProblem* _THIS, + Bounds* _bounds /** Output: Bounds object. */ + ); + + +/** Returns the number of variables. + * \return Number of variables. */ +static inline int QProblem_getNV( QProblem* _THIS ); + +/** Returns the number of free variables. + * \return Number of free variables. */ +static inline int QProblem_getNFR( QProblem* _THIS ); + +/** Returns the number of fixed variables. + * \return Number of fixed variables. */ +static inline int QProblem_getNFX( QProblem* _THIS ); + +/** Returns the number of implicitly fixed variables. + * \return Number of implicitly fixed variables. */ +static inline int QProblem_getNFV( QProblem* _THIS ); + + +/** Returns the optimal objective function value. + * \return finite value: Optimal objective function value (QP was solved) \n + +infinity: QP was not yet solved */ +real_t QProblem_getObjVal( QProblem* _THIS ); + +/** Returns the objective function value at an arbitrary point x. + * \return Objective function value at point x */ +real_t QProblem_getObjValX( QProblem* _THIS, + const real_t* const _x /**< Point at which the objective function shall be evaluated. */ + ); + +/** Returns the primal solution vector. + * \return SUCCESSFUL_RETURN \n + RET_QP_NOT_SOLVED */ +returnValue QProblem_getPrimalSolution( QProblem* _THIS, + real_t* const xOpt /**< Output: Primal solution vector (if QP has been solved). */ + ); + + +/** Returns status of the solution process. + * \return Status of solution process. */ +static inline QProblemStatus QProblem_getStatus( QProblem* _THIS ); + + +/** Returns if the QProblem object is initialised. + * \return BT_TRUE: QProblem initialised \n + BT_FALSE: QProblem not initialised */ +static inline BooleanType QProblem_isInitialised( QProblem* _THIS ); + +/** Returns if the QP has been solved. + * \return BT_TRUE: QProblem solved \n + BT_FALSE: QProblem not solved */ +static inline BooleanType QProblem_isSolved( QProblem* _THIS ); + +/** Returns if the QP is infeasible. + * \return BT_TRUE: QP infeasible \n + BT_FALSE: QP feasible (or not known to be infeasible!) */ +static inline BooleanType QProblem_isInfeasible( QProblem* _THIS ); + +/** Returns if the QP is unbounded. + * \return BT_TRUE: QP unbounded \n + BT_FALSE: QP unbounded (or not known to be unbounded!) */ +static inline BooleanType QProblem_isUnbounded( QProblem* _THIS ); + + +/** Returns Hessian type flag (type is not determined due to _THIS call!). + * \return Hessian type. */ +static inline HessianType QProblem_getHessianType( QProblem* _THIS ); + +/** Changes the print level. + * \return SUCCESSFUL_RETURN */ +static inline returnValue QProblem_setHessianType( QProblem* _THIS, + HessianType _hessianType /**< New Hessian type. */ + ); + +/** Returns if the QP has been internally regularised. + * \return BT_TRUE: Hessian is internally regularised for QP solution \n + BT_FALSE: No internal Hessian regularisation is used for QP solution */ +static inline BooleanType QProblem_usingRegularisation( QProblem* _THIS ); + +/** Returns current options struct. + * \return Current options struct. */ +static inline Options QProblem_getOptions( QProblem* _THIS ); + +/** Overrides current options with given ones. + * \return SUCCESSFUL_RETURN */ +static inline returnValue QProblem_setOptions( QProblem* _THIS, + Options _options /**< New options. */ + ); + +/** Returns the print level. + * \return Print level. */ +static inline PrintLevel QProblem_getPrintLevel( QProblem* _THIS ); + +/** Changes the print level. + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_setPrintLevel( QProblem* _THIS, + PrintLevel _printlevel /**< New print level. */ + ); + + +/** Returns the current number of QP problems solved. + * \return Number of QP problems solved. */ +static inline unsigned int QProblem_getCount( QProblem* _THIS ); + +/** Resets QP problem counter (to zero). + * \return SUCCESSFUL_RETURN. */ +static inline returnValue QProblem_resetCounter( QProblem* _THIS ); + + +/** Prints a list of all options and their current values. + * \return SUCCESSFUL_RETURN \n */ +returnValue QProblem_printOptions( QProblem* _THIS ); + + +/** Solves a QProblem whose QP data is assumed to be stored in the member variables. + * A guess for its primal/dual optimal solution vectors and the corresponding + * working sets of bounds and constraints can be provided. + * Note: This function is internally called by all init functions! + * \return SUCCESSFUL_RETURN \n + RET_INIT_FAILED \n + RET_INIT_FAILED_CHOLESKY \n + RET_INIT_FAILED_TQ \n + RET_INIT_FAILED_HOTSTART \n + RET_INIT_FAILED_INFEASIBILITY \n + RET_INIT_FAILED_UNBOUNDEDNESS \n + RET_MAX_NWSR_REACHED */ +returnValue QProblem_solveInitialQP( QProblem* _THIS, + const real_t* const xOpt, /**< Optimal primal solution vector.*/ + const real_t* const yOpt, /**< Optimal dual solution vector. */ + Bounds* const guessedBounds, /**< Optimal working set of bounds for solution (xOpt,yOpt). */ + Constraints* const guessedConstraints, /**< Optimal working set of constraints for solution (xOpt,yOpt). */ + const real_t* const _R, /**< Pre-computed (upper triangular) Cholesky factor of Hessian matrix. */ + int* nWSR, /**< Input: Maximum number of working set recalculations; \n + * Output: Number of performed working set recalculations. */ + real_t* const cputime /**< Input: Maximum CPU time allowed for QP solution. \n + * Output: CPU time spent for QP solution (or to perform nWSR iterations). */ + ); + +/** Solves QProblem using online active set strategy. + * Note: This function is internally called by all hotstart functions! + * \return SUCCESSFUL_RETURN \n + RET_MAX_NWSR_REACHED \n + RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n + RET_HOTSTART_FAILED \n + RET_SHIFT_DETERMINATION_FAILED \n + RET_STEPDIRECTION_DETERMINATION_FAILED \n + RET_STEPLENGTH_DETERMINATION_FAILED \n + RET_HOMOTOPY_STEP_FAILED \n + RET_HOTSTART_STOPPED_INFEASIBILITY \n + RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ +returnValue QProblem_solveQP( QProblem* _THIS, + const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ + const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations; \n + Output: Number of performed working set recalculations. */ + real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n + Output: CPU time spent for QP solution (or to perform nWSR iterations). */ + int nWSRperformed, /**< Number of working set recalculations already performed to solve + this QP within previous solveQP() calls. This number is + always zero, except for successive calls from solveRegularisedQP() + or when using the far bound strategy. */ + BooleanType isFirstCall /**< Indicating whether this is the first call for current QP. */ + ); + + +/** Solves QProblem using online active set strategy. + * Note: This function is internally called by all hotstart functions! + * \return SUCCESSFUL_RETURN \n + RET_MAX_NWSR_REACHED \n + RET_HOTSTART_FAILED_AS_QP_NOT_INITIALISED \n + RET_HOTSTART_FAILED \n + RET_SHIFT_DETERMINATION_FAILED \n + RET_STEPDIRECTION_DETERMINATION_FAILED \n + RET_STEPLENGTH_DETERMINATION_FAILED \n + RET_HOMOTOPY_STEP_FAILED \n + RET_HOTSTART_STOPPED_INFEASIBILITY \n + RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ +returnValue QProblem_solveRegularisedQP( QProblem* _THIS, + const real_t* const g_new, /**< Gradient of neighbouring QP to be solved. */ + const real_t* const lb_new, /**< Lower bounds of neighbouring QP to be solved. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const ub_new, /**< Upper bounds of neighbouring QP to be solved. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const lbA_new, /**< Lower constraints' bounds of neighbouring QP to be solved. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const ubA_new, /**< Upper constraints' bounds of neighbouring QP to be solved. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + int* nWSR, /**< Input: Maximum number of working set recalculations; \n + Output: Number of performed working set recalculations. */ + real_t* const cputime, /**< Input: Maximum CPU time allowed for QP solution. \n + Output: CPU time spent for QP solution (or to perform nWSR iterations). */ + int nWSRperformed, /**< Number of working set recalculations already performed to solve + this QP within previous solveRegularisedQP() calls. This number is + always zero, except for successive calls when using the far bound strategy. */ + BooleanType isFirstCall /**< Indicating whether this is the first call for current QP. */ + ); + + +/** Determines type of existing constraints and bounds (i.e. implicitly fixed, unbounded etc.). + * \return SUCCESSFUL_RETURN \n + RET_SETUPSUBJECTTOTYPE_FAILED */ +returnValue QProblem_setupSubjectToType( QProblem* _THIS ); + +/** Determines type of new constraints and bounds (i.e. implicitly fixed, unbounded etc.). + * \return SUCCESSFUL_RETURN \n + RET_SETUPSUBJECTTOTYPE_FAILED */ +returnValue QProblem_setupSubjectToTypeNew( QProblem* _THIS, + const real_t* const lb_new, /**< New lower bounds. */ + const real_t* const ub_new, /**< New upper bounds. */ + const real_t* const lbA_new, /**< New lower constraints' bounds. */ + const real_t* const ubA_new /**< New upper constraints' bounds. */ + ); + +/** Computes the Cholesky decomposition of the projected Hessian (i.e. R^T*R = Z^T*H*Z). + * Note: If Hessian turns out not to be positive definite, the Hessian type + * is set to HST_SEMIDEF accordingly. + * \return SUCCESSFUL_RETURN \n + * RET_HESSIAN_NOT_SPD \n + * RET_INDEXLIST_CORRUPTED */ +returnValue QProblem_computeProjectedCholesky( QProblem* _THIS ); + +/** Computes initial Cholesky decomposition of the projected Hessian making + * use of the function setupCholeskyDecomposition() or setupCholeskyDecompositionProjected(). + * \return SUCCESSFUL_RETURN \n + * RET_HESSIAN_NOT_SPD \n + * RET_INDEXLIST_CORRUPTED */ +returnValue QProblem_setupInitialCholesky( QProblem* _THIS ); + +/** Initialises TQ factorisation of A (i.e. A*Q = [0 T]) if NO constraint is active. + * \return SUCCESSFUL_RETURN \n + RET_INDEXLIST_CORRUPTED */ +returnValue QProblem_setupTQfactorisation( QProblem* _THIS ); + + +/** Obtains the desired working set for the auxiliary initial QP in + * accordance with the user specifications + * (assumes that member AX has already been initialised!) + * \return SUCCESSFUL_RETURN \n + RET_OBTAINING_WORKINGSET_FAILED \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_obtainAuxiliaryWorkingSet( QProblem* _THIS, + const real_t* const xOpt, /**< Optimal primal solution vector. + * If a NULL pointer is passed, all entries are assumed to be zero. */ + const real_t* const yOpt, /**< Optimal dual solution vector. + * If a NULL pointer is passed, all entries are assumed to be zero. */ + Bounds* const guessedBounds, /**< Guessed working set of bounds for solution (xOpt,yOpt). */ + Constraints* const guessedConstraints, /**< Guessed working set for solution (xOpt,yOpt). */ + Bounds* auxiliaryBounds, /**< Input: Allocated bound object. \n + * Ouput: Working set of constraints for auxiliary QP. */ + Constraints* auxiliaryConstraints /**< Input: Allocated bound object. \n + * Ouput: Working set for auxiliary QP. */ + ); + +/** Sets up bound and constraints data structures according to auxiliaryBounds/Constraints. + * (If the working set shall be setup afresh, make sure that + * bounds and constraints data structure have been resetted + * and the TQ factorisation has been initialised!) + * \return SUCCESSFUL_RETURN \n + RET_SETUP_WORKINGSET_FAILED \n + RET_INVALID_ARGUMENTS \n + RET_UNKNOWN_BUG */ +returnValue QProblem_setupAuxiliaryWorkingSet( QProblem* _THIS, + Bounds* const auxiliaryBounds, /**< Working set of bounds for auxiliary QP. */ + Constraints* const auxiliaryConstraints, /**< Working set of constraints for auxiliary QP. */ + BooleanType setupAfresh /**< Flag indicating if given working set shall be + * setup afresh or by updating the current one. */ + ); + +/** Sets up the optimal primal/dual solution of the auxiliary initial QP. + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_setupAuxiliaryQPsolution( QProblem* _THIS, + const real_t* const xOpt, /**< Optimal primal solution vector. + * If a NULL pointer is passed, all entries are set to zero. */ + const real_t* const yOpt /**< Optimal dual solution vector. + * If a NULL pointer is passed, all entries are set to zero. */ + ); + +/** Sets up gradient of the auxiliary initial QP for given + * optimal primal/dual solution and given initial working set + * (assumes that members X, Y and BOUNDS, CONSTRAINTS have already been initialised!). + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_setupAuxiliaryQPgradient( QProblem* _THIS ); + +/** Sets up (constraints') bounds of the auxiliary initial QP for given + * optimal primal/dual solution and given initial working set + * (assumes that members X, Y and BOUNDS, CONSTRAINTS have already been initialised!). + * \return SUCCESSFUL_RETURN \n + RET_UNKNOWN_BUG */ +returnValue QProblem_setupAuxiliaryQPbounds( QProblem* _THIS, + Bounds* const auxiliaryBounds, /**< Working set of bounds for auxiliary QP. */ + Constraints* const auxiliaryConstraints, /**< Working set of constraints for auxiliary QP. */ + BooleanType useRelaxation /**< Flag indicating if inactive (constraints') bounds shall be relaxed. */ + ); + + +/** Adds a constraint to active set. + * \return SUCCESSFUL_RETURN \n + RET_ADDCONSTRAINT_FAILED \n + RET_ADDCONSTRAINT_FAILED_INFEASIBILITY \n + RET_ENSURELI_FAILED */ +returnValue QProblem_addConstraint( QProblem* _THIS, + int number, /**< Number of constraint to be added to active set. */ + SubjectToStatus C_status, /**< Status of new active constraint. */ + BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ + BooleanType ensureLI /**< Ensure linear independence by exchange rules by default. */ + ); + +/** Checks if new active constraint to be added is linearly dependent from + * from row of the active constraints matrix. + * \return RET_LINEARLY_DEPENDENT \n + RET_LINEARLY_INDEPENDENT \n + RET_INDEXLIST_CORRUPTED */ +returnValue QProblem_addConstraint_checkLI( QProblem* _THIS, + int number /**< Number of constraint to be added to active set. */ + ); + +/** Ensures linear independence of constraint matrix when a new constraint is added. + * To _THIS end a bound or constraint is removed simultaneously if necessary. + * \return SUCCESSFUL_RETURN \n + RET_LI_RESOLVED \n + RET_ENSURELI_FAILED \n + RET_ENSURELI_FAILED_TQ \n + RET_ENSURELI_FAILED_NOINDEX \n + RET_REMOVE_FROM_ACTIVESET */ +returnValue QProblem_addConstraint_ensureLI( QProblem* _THIS, + int number, /**< Number of constraint to be added to active set. */ + SubjectToStatus C_status /**< Status of new active bound. */ + ); + +/** Adds a bound to active set. + * \return SUCCESSFUL_RETURN \n + RET_ADDBOUND_FAILED \n + RET_ADDBOUND_FAILED_INFEASIBILITY \n + RET_ENSURELI_FAILED */ +returnValue QProblem_addBound( QProblem* _THIS, + int number, /**< Number of bound to be added to active set. */ + SubjectToStatus B_status, /**< Status of new active bound. */ + BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ + BooleanType ensureLI /**< Ensure linear independence by exchange rules by default. */ + ); + +/** Checks if new active bound to be added is linearly dependent from + * from row of the active constraints matrix. + * \return RET_LINEARLY_DEPENDENT \n + RET_LINEARLY_INDEPENDENT */ +returnValue QProblem_addBound_checkLI( QProblem* _THIS, + int number /**< Number of bound to be added to active set. */ + ); + +/** Ensures linear independence of constraint matrix when a new bound is added. + * To _THIS end a bound or constraint is removed simultaneously if necessary. + * \return SUCCESSFUL_RETURN \n + RET_LI_RESOLVED \n + RET_ENSURELI_FAILED \n + RET_ENSURELI_FAILED_TQ \n + RET_ENSURELI_FAILED_NOINDEX \n + RET_REMOVE_FROM_ACTIVESET */ +returnValue QProblem_addBound_ensureLI( QProblem* _THIS, + int number, /**< Number of bound to be added to active set. */ + SubjectToStatus B_status /**< Status of new active bound. */ + ); + +/** Removes a constraint from active set. + * \return SUCCESSFUL_RETURN \n + RET_CONSTRAINT_NOT_ACTIVE \n + RET_REMOVECONSTRAINT_FAILED \n + RET_HESSIAN_NOT_SPD */ +returnValue QProblem_removeConstraint( QProblem* _THIS, + int number, /**< Number of constraint to be removed from active set. */ + BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ + BooleanType allowFlipping, /**< Flag indicating if flipping bounds are allowed. */ + BooleanType ensureNZC /**< Flag indicating if non-zero curvature is ensured by exchange rules. */ + ); + +/** Removes a bounds from active set. + * \return SUCCESSFUL_RETURN \n + RET_BOUND_NOT_ACTIVE \n + RET_HESSIAN_NOT_SPD \n + RET_REMOVEBOUND_FAILED */ +returnValue QProblem_removeBound( QProblem* _THIS, + int number, /**< Number of bound to be removed from active set. */ + BooleanType updateCholesky, /**< Flag indicating if Cholesky decomposition shall be updated. */ + BooleanType allowFlipping, /**< Flag indicating if flipping bounds are allowed. */ + BooleanType ensureNZC /**< Flag indicating if non-zero curvature is ensured by exchange rules. */ + ); + + +/** Performs robustified ratio test yield the maximum possible step length + * along the homotopy path. + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_performPlainRatioTest( QProblem* _THIS, + int nIdx, /**< Number of ratios to be checked. */ + const int* const idxList, /**< Array containing the indices of all ratios to be checked. */ + const real_t* const num, /**< Array containing all numerators for performing the ratio test. */ + const real_t* const den, /**< Array containing all denominators for performing the ratio test. */ + real_t epsNum, /**< Numerator tolerance. */ + real_t epsDen, /**< Denominator tolerance. */ + real_t* t, /**< Output: Maximum possible step length along the homotopy path. */ + int* BC_idx /**< Output: Index of blocking constraint. */ + ); + + +/** Ensure non-zero curvature by primal jump. + * \return SUCCESSFUL_RETURN \n + * RET_HOTSTART_STOPPED_UNBOUNDEDNESS */ +returnValue QProblem_ensureNonzeroCurvature( QProblem* _THIS, + BooleanType removeBoundNotConstraint, /**< SubjectTo to be removed is a bound. */ + int remIdx, /**< Index of bound/constraint to be removed. */ + BooleanType* exchangeHappened, /**< Output: Exchange was necessary to ensure. */ + BooleanType* addBoundNotConstraint, /**< SubjectTo to be added is a bound. */ + int* addIdx, /**< Index of bound/constraint to be added. */ + SubjectToStatus* addStatus /**< Status of bound/constraint to be added. */ + ); + + +/** Solves the system Ta = b or T^Ta = b where T is a reverse upper triangular matrix. + * \return SUCCESSFUL_RETURN \n + RET_DIV_BY_ZERO */ +returnValue QProblem_backsolveT( QProblem* _THIS, + const real_t* const b, /**< Right hand side vector. */ + BooleanType transposed, /**< Indicates if the transposed system shall be solved. */ + real_t* const a /**< Output: Solution vector */ + ); + + +/** Determines step direction of the shift of the QP data. + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_determineDataShift( QProblem* _THIS, + const real_t* const g_new, /**< New gradient vector. */ + const real_t* const lbA_new, /**< New lower constraints' bounds. */ + const real_t* const ubA_new, /**< New upper constraints' bounds. */ + const real_t* const lb_new, /**< New lower bounds. */ + const real_t* const ub_new, /**< New upper bounds. */ + real_t* const delta_g, /**< Output: Step direction of gradient vector. */ + real_t* const delta_lbA, /**< Output: Step direction of lower constraints' bounds. */ + real_t* const delta_ubA, /**< Output: Step direction of upper constraints' bounds. */ + real_t* const delta_lb, /**< Output: Step direction of lower bounds. */ + real_t* const delta_ub, /**< Output: Step direction of upper bounds. */ + BooleanType* Delta_bC_isZero, /**< Output: Indicates if active constraints' bounds are to be shifted. */ + BooleanType* Delta_bB_isZero /**< Output: Indicates if active bounds are to be shifted. */ + ); + +/** Determines step direction of the homotopy path. + * \return SUCCESSFUL_RETURN \n + RET_STEPDIRECTION_FAILED_TQ \n + RET_STEPDIRECTION_FAILED_CHOLESKY */ +returnValue QProblem_determineStepDirection( QProblem* _THIS, + const real_t* const delta_g, /**< Step direction of gradient vector. */ + const real_t* const delta_lbA, /**< Step direction of lower constraints' bounds. */ + const real_t* const delta_ubA, /**< Step direction of upper constraints' bounds. */ + const real_t* const delta_lb, /**< Step direction of lower bounds. */ + const real_t* const delta_ub, /**< Step direction of upper bounds. */ + BooleanType Delta_bC_isZero, /**< Indicates if active constraints' bounds are to be shifted. */ + BooleanType Delta_bB_isZero, /**< Indicates if active bounds are to be shifted. */ + real_t* const delta_xFX, /**< Output: Primal homotopy step direction of fixed variables. */ + real_t* const delta_xFR, /**< Output: Primal homotopy step direction of free variables. */ + real_t* const delta_yAC, /**< Output: Dual homotopy step direction of active constraints' multiplier. */ + real_t* const delta_yFX /**< Output: Dual homotopy step direction of fixed variables' multiplier. */ + ); + +/** Determines the maximum possible step length along the homotopy path + * and performs _THIS step (without changing working set). + * \return SUCCESSFUL_RETURN \n + * RET_ERROR_IN_CONSTRAINTPRODUCT \n + * RET_QP_INFEASIBLE */ +returnValue QProblem_performStep( QProblem* _THIS, + const real_t* const delta_g, /**< Step direction of gradient. */ + const real_t* const delta_lbA, /**< Step direction of lower constraints' bounds. */ + const real_t* const delta_ubA, /**< Step direction of upper constraints' bounds. */ + const real_t* const delta_lb, /**< Step direction of lower bounds. */ + const real_t* const delta_ub, /**< Step direction of upper bounds. */ + const real_t* const delta_xFX, /**< Primal homotopy step direction of fixed variables. */ + const real_t* const delta_xFR, /**< Primal homotopy step direction of free variables. */ + const real_t* const delta_yAC, /**< Dual homotopy step direction of active constraints' multiplier. */ + const real_t* const delta_yFX, /**< Dual homotopy step direction of fixed variables' multiplier. */ + int* BC_idx, /**< Output: Index of blocking constraint. */ + SubjectToStatus* BC_status, /**< Output: Status of blocking constraint. */ + BooleanType* BC_isBound /**< Output: Indicates if blocking constraint is a bound. */ + ); + +/** Updates the active set. + * \return SUCCESSFUL_RETURN \n + RET_REMOVE_FROM_ACTIVESET_FAILED \n + RET_ADD_TO_ACTIVESET_FAILED */ +returnValue QProblem_changeActiveSet( QProblem* _THIS, + int BC_idx, /**< Index of blocking constraint. */ + SubjectToStatus BC_status, /**< Status of blocking constraint. */ + BooleanType BC_isBound /**< Indicates if blocking constraint is a bound. */ + ); + + +/** Compute relative length of homotopy in data space for termination + * criterion. + * \return Relative length in data space. */ +real_t QProblem_getRelativeHomotopyLength( QProblem* _THIS, + const real_t* const g_new, /**< Final gradient. */ + const real_t* const lb_new, /**< Final lower variable bounds. */ + const real_t* const ub_new, /**< Final upper variable bounds. */ + const real_t* const lbA_new, /**< Final lower constraint bounds. */ + const real_t* const ubA_new /**< Final upper constraint bounds. */ + ); + + +/** Ramping Strategy to avoid ties. Modifies homotopy start without + * changing current active set. + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_performRamping( QProblem* _THIS ); + + +/** ... */ +returnValue QProblem_updateFarBounds( QProblem* _THIS, + real_t curFarBound, /**< ... */ + int nRamp, /**< ... */ + const real_t* const lb_new, /**< ... */ + real_t* const lb_new_far, /**< ... */ + const real_t* const ub_new, /**< ... */ + real_t* const ub_new_far, /**< ... */ + const real_t* const lbA_new, /**< ... */ + real_t* const lbA_new_far, /**< ... */ + const real_t* const ubA_new, /**< ... */ + real_t* const ubA_new_far /**< ... */ + ); + +/** ... */ +returnValue QProblemBCPY_updateFarBounds( QProblem* _THIS, + real_t curFarBound, /**< ... */ + int nRamp, /**< ... */ + const real_t* const lb_new, /**< ... */ + real_t* const lb_new_far, /**< ... */ + const real_t* const ub_new, /**< ... */ + real_t* const ub_new_far /**< ... */ + ); + + + +/** Performs robustified ratio test yield the maximum possible step length + * along the homotopy path. + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_performRatioTestC( QProblem* _THIS, + int nIdx, /**< Number of ratios to be checked. */ + const int* const idxList, /**< Array containing the indices of all ratios to be checked. */ + Constraints* const subjectTo, /**< Constraint object corresponding to ratios to be checked. */ + const real_t* const num, /**< Array containing all numerators for performing the ratio test. */ + const real_t* const den, /**< Array containing all denominators for performing the ratio test. */ + real_t epsNum, /**< Numerator tolerance. */ + real_t epsDen, /**< Denominator tolerance. */ + real_t* t, /**< Output: Maximum possible step length along the homotopy path. */ + int* BC_idx /**< Output: Index of blocking constraint. */ + ); + + +/** Drift correction at end of each active set iteration + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_performDriftCorrection( QProblem* _THIS ); + + +/** Updates QP vectors, working sets and internal data structures in order to + start from an optimal solution corresponding to initial guesses of the working + set for bounds and constraints. + * \return SUCCESSFUL_RETURN \n + * RET_SETUP_AUXILIARYQP_FAILED \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_setupAuxiliaryQP( QProblem* _THIS, + Bounds* const guessedBounds, /**< Initial guess for working set of bounds. */ + Constraints* const guessedConstraints /**< Initial guess for working set of constraints. */ + ); + +/** Determines if it is more efficient to refactorise the matrices when + * hotstarting or not (i.e. better to update the existing factorisations). + * \return BT_TRUE iff matrices shall be refactorised afresh + */ +BooleanType QProblem_shallRefactorise( QProblem* _THIS, + Bounds* const guessedBounds, /**< Guessed new working set of bounds. */ + Constraints* const guessedConstraints /**< Guessed new working set of constraints. */ + ); + +/** Setups internal QP data. + * \return SUCCESSFUL_RETURN \n + RET_INVALID_ARGUMENTS \n + RET_UNKNONW_BUG */ +returnValue QProblem_setupQPdataM( QProblem* _THIS, + DenseMatrix *_H, /**< Hessian matrix. \n + If Hessian matrix is trivial,a NULL pointer can be passed. */ + const real_t* const _g, /**< Gradient vector. */ + DenseMatrix *_A, /**< Constraint matrix. */ + const real_t* const _lb, /**< Lower bound vector (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub, /**< Upper bound vector (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const _lbA, /**< Lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const _ubA /**< Upper constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + ); + + +/** Sets up dense internal QP data. If the current Hessian is trivial + * (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, + * memory for Hessian is allocated and it is set to the given one. + * \return SUCCESSFUL_RETURN \n + RET_INVALID_ARGUMENTS \n + RET_UNKNONW_BUG */ +returnValue QProblem_setupQPdata( QProblem* _THIS, + real_t* const _H, /**< Hessian matrix. \n + If Hessian matrix is trivial,a NULL pointer can be passed. */ + const real_t* const _g, /**< Gradient vector. */ + real_t* const _A, /**< Constraint matrix. */ + const real_t* const _lb, /**< Lower bound vector (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub, /**< Upper bound vector (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + const real_t* const _lbA, /**< Lower constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const real_t* const _ubA /**< Upper constraints' bound vector. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + ); + +/** Sets up internal QP data by loading it from files. If the current Hessian + * is trivial (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, + * memory for Hessian is allocated and it is set to the given one. + * \return SUCCESSFUL_RETURN \n + RET_UNABLE_TO_OPEN_FILE \n + RET_UNABLE_TO_READ_FILE \n + RET_INVALID_ARGUMENTS \n + RET_UNKNONW_BUG */ +returnValue QProblem_setupQPdataFromFile( QProblem* _THIS, + const char* const H_file, /**< Name of file where Hessian matrix, of neighbouring QP to be solved, is stored. \n + If Hessian matrix is trivial,a NULL pointer can be passed. */ + const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ + const char* const A_file, /**< Name of file where constraint matrix, of neighbouring QP to be solved, is stored. */ + const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const char* const ubA_file /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + ); + +/** Loads new QP vectors from files (internal members are not affected!). + * \return SUCCESSFUL_RETURN \n + RET_UNABLE_TO_OPEN_FILE \n + RET_UNABLE_TO_READ_FILE \n + RET_INVALID_ARGUMENTS */ +returnValue QProblem_loadQPvectorsFromFile( QProblem* _THIS, + const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ + const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n + If no upper bounds exist, a NULL pointer can be passed. */ + const char* const lbA_file, /**< Name of file where lower constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no lower constraints' bounds exist, a NULL pointer can be passed. */ + const char* const ubA_file, /**< Name of file where upper constraints' bounds, of neighbouring QP to be solved, is stored. \n + If no upper constraints' bounds exist, a NULL pointer can be passed. */ + real_t* const g_new, /**< Output: Gradient of neighbouring QP to be solved. */ + real_t* const lb_new, /**< Output: Lower bounds of neighbouring QP to be solved */ + real_t* const ub_new, /**< Output: Upper bounds of neighbouring QP to be solved */ + real_t* const lbA_new, /**< Output: Lower constraints' bounds of neighbouring QP to be solved */ + real_t* const ubA_new /**< Output: Upper constraints' bounds of neighbouring QP to be solved */ + ); + + +/** Prints concise information on the current iteration. + * \return SUCCESSFUL_RETURN \n */ +returnValue QProblem_printIteration( QProblem* _THIS, + int iter, /**< Number of current iteration. */ + int BC_idx, /**< Index of blocking constraint. */ + SubjectToStatus BC_status, /**< Status of blocking constraint. */ + BooleanType BC_isBound, /**< Indicates if blocking constraint is a bound. */ + real_t homotopyLength, /**< Current homotopy distance. */ + BooleanType isFirstCall /**< Indicating whether this is the first call for current QP. */ + ); + + +/** Sets constraint matrix of the QP. \n + Note: Also internal vector Ax is recomputed! + * \return SUCCESSFUL_RETURN \n + * RET_INVALID_ARGUMENTS */ +static inline returnValue QProblem_setAM( QProblem* _THIS, + DenseMatrix *A_new /**< New constraint matrix. */ + ); + +/** Sets dense constraint matrix of the QP. \n + Note: Also internal vector Ax is recomputed! + * \return SUCCESSFUL_RETURN \n + * RET_INVALID_ARGUMENTS */ +static inline returnValue QProblem_setA( QProblem* _THIS, + real_t* const A_new /**< New dense constraint matrix (with correct dimension!). */ + ); + + +/** Sets constraints' lower bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + * RET_QPOBJECT_NOT_SETUP */ +static inline returnValue QProblem_setLBA( QProblem* _THIS, + const real_t* const lbA_new /**< New constraints' lower bound vector (with correct dimension!). */ + ); + +/** Changes single entry of lower constraints' bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + * RET_QPOBJECT_NOT_SETUP \n + * RET_INDEX_OUT_OF_BOUNDS */ +static inline returnValue QProblem_setLBAn( QProblem* _THIS, + int number, /**< Number of entry to be changed. */ + real_t value /**< New value for entry of lower constraints' bound vector (with correct dimension!). */ + ); + +/** Sets constraints' upper bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + * RET_QPOBJECT_NOT_SETUP */ +static inline returnValue QProblem_setUBA( QProblem* _THIS, + const real_t* const ubA_new /**< New constraints' upper bound vector (with correct dimension!). */ + ); + +/** Changes single entry of upper constraints' bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + * RET_QPOBJECT_NOT_SETUP \n + * RET_INDEX_OUT_OF_BOUNDS */ +static inline returnValue QProblem_setUBAn( QProblem* _THIS, + int number, /**< Number of entry to be changed. */ + real_t value /**< New value for entry of upper constraints' bound vector (with correct dimension!). */ + ); + + +/** Decides if lower bounds are smaller than upper bounds + * + * \return SUCCESSFUL_RETURN \n + * RET_QP_INFEASIBLE */ +returnValue QProblem_areBoundsConsistent( QProblem* _THIS, + const real_t* const lb, /**< Vector of lower bounds*/ + const real_t* const ub, /**< Vector of upper bounds*/ + const real_t* const lbA, /**< Vector of lower constraints*/ + const real_t* const ubA /**< Vector of upper constraints*/ + ); + + +/** Drops the blocking bound/constraint that led to infeasibility, or finds another + * bound/constraint to drop according to drop priorities. + * \return SUCCESSFUL_RETURN \n + */ +returnValue QProblem_dropInfeasibles ( QProblem* _THIS, + int BC_number, /**< Number of the bound or constraint to be added */ + SubjectToStatus BC_status, /**< New status of the bound or constraint to be added */ + BooleanType BC_isBound, /**< Whether a bound or a constraint is to be added */ + real_t *xiB, + real_t *xiC + ); + + +/** If Hessian type has been set by the user, nothing is done. + * Otherwise the Hessian type is set to HST_IDENTITY, HST_ZERO, or + * HST_POSDEF (default), respectively. + * \return SUCCESSFUL_RETURN \n + RET_HESSIAN_INDEFINITE */ +returnValue QProblem_determineHessianType( QProblem* _THIS ); + +/** Computes the Cholesky decomposition of the (simply projected) Hessian + * (i.e. R^T*R = Z^T*H*Z). It only works in the case where Z is a simple + * projection matrix! + * Note: If Hessian turns out not to be positive definite, the Hessian type + * is set to HST_SEMIDEF accordingly. + * \return SUCCESSFUL_RETURN \n + * RET_HESSIAN_NOT_SPD \n + * RET_INDEXLIST_CORRUPTED */ +returnValue QProblemBCPY_computeCholesky( QProblem* _THIS ); + +/** Obtains the desired working set for the auxiliary initial QP in + * accordance with the user specifications + * \return SUCCESSFUL_RETURN \n + RET_OBTAINING_WORKINGSET_FAILED \n + RET_INVALID_ARGUMENTS */ +returnValue QProblemBCPY_obtainAuxiliaryWorkingSet( QProblem* _THIS, + const real_t* const xOpt, /**< Optimal primal solution vector. + * If a NULL pointer is passed, all entries are assumed to be zero. */ + const real_t* const yOpt, /**< Optimal dual solution vector. + * If a NULL pointer is passed, all entries are assumed to be zero. */ + Bounds* const guessedBounds, /**< Guessed working set for solution (xOpt,yOpt). */ + Bounds* auxiliaryBounds /**< Input: Allocated bound object. \n + * Output: Working set for auxiliary QP. */ + ); + + +/** Solves the system Ra = b or R^Ta = b where R is an upper triangular matrix. + * \return SUCCESSFUL_RETURN \n + RET_DIV_BY_ZERO */ +returnValue QProblem_backsolveR( QProblem* _THIS, + const real_t* const b, /**< Right hand side vector. */ + BooleanType transposed, /**< Indicates if the transposed system shall be solved. */ + real_t* const a /**< Output: Solution vector */ + ); + +/** Solves the system Ra = b or R^Ta = b where R is an upper triangular matrix. \n + * Special variant for the case that _THIS function is called from within "removeBound()". + * \return SUCCESSFUL_RETURN \n + RET_DIV_BY_ZERO */ +returnValue QProblem_backsolveRrem( QProblem* _THIS, + const real_t* const b, /**< Right hand side vector. */ + BooleanType transposed, /**< Indicates if the transposed system shall be solved. */ + BooleanType removingBound, /**< Indicates if function is called from "removeBound()". */ + real_t* const a /**< Output: Solution vector */ + ); + + +/** Determines step direction of the shift of the QP data. + * \return SUCCESSFUL_RETURN */ +returnValue QProblemBCPY_determineDataShift( QProblem* _THIS, + const real_t* const g_new, /**< New gradient vector. */ + const real_t* const lb_new, /**< New lower bounds. */ + const real_t* const ub_new, /**< New upper bounds. */ + real_t* const delta_g, /**< Output: Step direction of gradient vector. */ + real_t* const delta_lb, /**< Output: Step direction of lower bounds. */ + real_t* const delta_ub, /**< Output: Step direction of upper bounds. */ + BooleanType* Delta_bB_isZero /**< Output: Indicates if active bounds are to be shifted. */ + ); + + +/** Sets up internal QP data. + * \return SUCCESSFUL_RETURN \n + RET_INVALID_ARGUMENTS */ +returnValue QProblemBCPY_setupQPdataM( QProblem* _THIS, + DenseMatrix *_H, /**< Hessian matrix.*/ + const real_t* const _g, /**< Gradient vector. */ + const real_t* const _lb, /**< Lower bounds (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub /**< Upper bounds (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + ); + +/** Sets up internal QP data. If the current Hessian is trivial + * (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, + * memory for Hessian is allocated and it is set to the given one. + * \return SUCCESSFUL_RETURN \n + RET_INVALID_ARGUMENTS \n + RET_NO_HESSIAN_SPECIFIED */ +returnValue QProblemBCPY_setupQPdata( QProblem* _THIS, + real_t* const _H, /**< Hessian matrix. \n + If Hessian matrix is trivial,a NULL pointer can be passed. */ + const real_t* const _g, /**< Gradient vector. */ + const real_t* const _lb, /**< Lower bounds (on variables). \n + If no lower bounds exist, a NULL pointer can be passed. */ + const real_t* const _ub /**< Upper bounds (on variables). \n + If no upper bounds exist, a NULL pointer can be passed. */ + ); + +/** Sets up internal QP data by loading it from files. If the current Hessian + * is trivial (i.e. HST_ZERO or HST_IDENTITY) but a non-trivial one is given, + * memory for Hessian is allocated and it is set to the given one. + * \return SUCCESSFUL_RETURN \n + RET_UNABLE_TO_OPEN_FILE \n + RET_UNABLE_TO_READ_FILE \n + RET_INVALID_ARGUMENTS \n + RET_NO_HESSIAN_SPECIFIED */ +returnValue QProblemBCPY_setupQPdataFromFile( QProblem* _THIS, + const char* const H_file, /**< Name of file where Hessian matrix, of neighbouring QP to be solved, is stored. \n + If Hessian matrix is trivial,a NULL pointer can be passed. */ + const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ + const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n + If no upper bounds exist, a NULL pointer can be passed. */ + ); + +/** Loads new QP vectors from files (internal members are not affected!). + * \return SUCCESSFUL_RETURN \n + RET_UNABLE_TO_OPEN_FILE \n + RET_UNABLE_TO_READ_FILE \n + RET_INVALID_ARGUMENTS */ +returnValue QProblemBCPY_loadQPvectorsFromFile( QProblem* _THIS, + const char* const g_file, /**< Name of file where gradient, of neighbouring QP to be solved, is stored. */ + const char* const lb_file, /**< Name of file where lower bounds, of neighbouring QP to be solved, is stored. \n + If no lower bounds exist, a NULL pointer can be passed. */ + const char* const ub_file, /**< Name of file where upper bounds, of neighbouring QP to be solved, is stored. \n + If no upper bounds exist, a NULL pointer can be passed. */ + real_t* const g_new, /**< Output: Gradient of neighbouring QP to be solved. */ + real_t* const lb_new, /**< Output: Lower bounds of neighbouring QP to be solved */ + real_t* const ub_new /**< Output: Upper bounds of neighbouring QP to be solved */ + ); + + +/** Sets internal infeasibility flag and throws given error in case the far bound + * strategy is not enabled (as QP might actually not be infeasible in _THIS case). + * \return RET_HOTSTART_STOPPED_INFEASIBILITY \n + RET_ENSURELI_FAILED_CYCLING \n + RET_ENSURELI_FAILED_NOINDEX */ +returnValue QProblem_setInfeasibilityFlag( QProblem* _THIS, + returnValue returnvalue, /**< Returnvalue to be tunneled. */ + BooleanType doThrowError /**< Flag forcing to throw an error. */ + ); + + +/** Determines if next QP iteration can be performed within given CPU time limit. + * \return BT_TRUE: CPU time limit is exceeded, stop QP solution. \n + BT_FALSE: Sufficient CPU time for next QP iteration. */ +BooleanType QProblem_isCPUtimeLimitExceeded( QProblem* _THIS, + const real_t* const cputime, /**< Maximum CPU time allowed for QP solution. */ + real_t starttime, /**< Start time of current QP solution. */ + int nWSR /**< Number of working set recalculations performed so far. */ + ); + + +/** Regularise Hessian matrix by adding a scaled identity matrix to it. + * \return SUCCESSFUL_RETURN \n + RET_HESSIAN_ALREADY_REGULARISED */ +returnValue QProblem_regulariseHessian( QProblem* _THIS ); + + +/** Sets Hessian matrix of the QP. + * \return SUCCESSFUL_RETURN */ +static inline returnValue QProblem_setHM( QProblem* _THIS, + DenseMatrix* H_new /**< New Hessian matrix. */ + ); + +/** Sets dense Hessian matrix of the QP. + * If a null pointer is passed and + * a) hessianType is HST_IDENTITY, nothing is done, + * b) hessianType is not HST_IDENTITY, Hessian matrix is set to zero. + * \return SUCCESSFUL_RETURN */ +static inline returnValue QProblem_setH( QProblem* _THIS, + real_t* const H_new /**< New dense Hessian matrix (with correct dimension!). */ + ); + +/** Changes gradient vector of the QP. + * \return SUCCESSFUL_RETURN \n + * RET_INVALID_ARGUMENTS */ +static inline returnValue QProblem_setG( QProblem* _THIS, + const real_t* const g_new /**< New gradient vector (with correct dimension!). */ + ); + +/** Changes lower bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + * RET_INVALID_ARGUMENTS */ +static inline returnValue QProblem_setLB( QProblem* _THIS, + const real_t* const lb_new /**< New lower bound vector (with correct dimension!). */ + ); + +/** Changes single entry of lower bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + RET_INDEX_OUT_OF_BOUNDS */ +static inline returnValue QProblem_setLBn( QProblem* _THIS, + int number, /**< Number of entry to be changed. */ + real_t value /**< New value for entry of lower bound vector. */ + ); + +/** Changes upper bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + * RET_INVALID_ARGUMENTS */ +static inline returnValue QProblem_setUB( QProblem* _THIS, + const real_t* const ub_new /**< New upper bound vector (with correct dimension!). */ + ); + +/** Changes single entry of upper bound vector of the QP. + * \return SUCCESSFUL_RETURN \n + RET_INDEX_OUT_OF_BOUNDS */ +static inline returnValue QProblem_setUBn( QProblem* _THIS, + int number, /**< Number of entry to be changed. */ + real_t value /**< New value for entry of upper bound vector. */ + ); + + + +/** Compute relative length of homotopy in data space for termination + * criterion. + * \return Relative length in data space. */ +real_t QProblemBCPY_getRelativeHomotopyLength( QProblem* _THIS, + const real_t* const g_new, /**< Final gradient. */ + const real_t* const lb_new, /**< Final lower variable bounds. */ + const real_t* const ub_new /**< Final upper variable bounds. */ + ); + + + +/** Performs robustified ratio test yield the maximum possible step length + * along the homotopy path. + * \return SUCCESSFUL_RETURN */ +returnValue QProblem_performRatioTestB( QProblem* _THIS, + int nIdx, /**< Number of ratios to be checked. */ + const int* const idxList, /**< Array containing the indices of all ratios to be checked. */ + Bounds* const subjectTo, /**< Bound object corresponding to ratios to be checked. */ + const real_t* const num, /**< Array containing all numerators for performing the ratio test. */ + const real_t* const den, /**< Array containing all denominators for performing the ratio test. */ + real_t epsNum, /**< Numerator tolerance. */ + real_t epsDen, /**< Denominator tolerance. */ + real_t* t, /**< Output: Maximum possible step length along the homotopy path. */ + int* BC_idx /**< Output: Index of blocking constraint. */ + ); + +/** Checks whether given ratio is blocking, i.e. limits the maximum step length + * along the homotopy path to a value lower than given one. + * \return SUCCESSFUL_RETURN */ +static inline BooleanType QProblem_isBlocking( QProblem* _THIS, + real_t num, /**< Numerator for performing the ratio test. */ + real_t den, /**< Denominator for performing the ratio test. */ + real_t epsNum, /**< Numerator tolerance. */ + real_t epsDen, /**< Denominator tolerance. */ + real_t* t /**< Input: Current maximum step length along the homotopy path, + * Output: Updated maximum possible step length along the homotopy path. */ + ); + + +/** ... + * \return SUCCESSFUL_RETURN \n + RET_UNABLE_TO_OPEN_FILE */ +returnValue QProblem_writeQpDataIntoMatFile( QProblem* _THIS, + const char* const filename /**< Mat file name. */ + ); + +/** ... +* \return SUCCESSFUL_RETURN \n + RET_UNABLE_TO_OPEN_FILE */ +returnValue QProblem_writeQpWorkspaceIntoMatFile( QProblem* _THIS, + const char* const filename /**< Mat file name. */ + ); + + +/* + * g e t B o u n d s + */ +static inline returnValue QProblem_getBounds( QProblem* _THIS, Bounds* _bounds ) +{ + int nV = QProblem_getNV( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + _bounds = _THIS->bounds; + + return SUCCESSFUL_RETURN; +} + + +/* + * g e t N V + */ +static inline int QProblem_getNV( QProblem* _THIS ) +{ + return Bounds_getNV( _THIS->bounds ); +} + + +/* + * g e t N F R + */ +static inline int QProblem_getNFR( QProblem* _THIS ) +{ + return Bounds_getNFR( _THIS->bounds ); +} + + +/* + * g e t N F X + */ +static inline int QProblem_getNFX( QProblem* _THIS ) +{ + return Bounds_getNFX( _THIS->bounds ); +} + + +/* + * g e t N F V + */ +static inline int QProblem_getNFV( QProblem* _THIS ) +{ + return Bounds_getNFV( _THIS->bounds ); +} + + +/* + * g e t S t a t u s + */ +static inline QProblemStatus QProblem_getStatus( QProblem* _THIS ) +{ + return _THIS->status; +} + + +/* + * i s I n i t i a l i s e d + */ +static inline BooleanType QProblem_isInitialised( QProblem* _THIS ) +{ + if ( _THIS->status == QPS_NOTINITIALISED ) + return BT_FALSE; + else + return BT_TRUE; +} + + +/* + * i s S o l v e d + */ +static inline BooleanType QProblem_isSolved( QProblem* _THIS ) +{ + if ( _THIS->status == QPS_SOLVED ) + return BT_TRUE; + else + return BT_FALSE; +} + + +/* + * i s I n f e a s i b l e + */ +static inline BooleanType QProblem_isInfeasible( QProblem* _THIS ) +{ + return _THIS->infeasible; +} + + +/* + * i s U n b o u n d e d + */ +static inline BooleanType QProblem_isUnbounded( QProblem* _THIS ) +{ + return _THIS->unbounded; +} + + +/* + * g e t H e s s i a n T y p e + */ +static inline HessianType QProblem_getHessianType( QProblem* _THIS ) +{ + return _THIS->hessianType; +} + + +/* + * s e t H e s s i a n T y p e + */ +static inline returnValue QProblem_setHessianType( QProblem* _THIS, HessianType _hessianType ) +{ + _THIS->hessianType = _hessianType; + return SUCCESSFUL_RETURN; +} + + +/* + * u s i n g R e g u l a r i s a t i o n + */ +static inline BooleanType QProblem_usingRegularisation( QProblem* _THIS ) +{ + if ( _THIS->regVal > QPOASES_ZERO ) + return BT_TRUE; + else + return BT_FALSE; +} + + +/* + * g e t O p t i o n s + */ +static inline Options QProblem_getOptions( QProblem* _THIS ) +{ + return _THIS->options; +} + + +/* + * s e t O p t i o n s + */ +static inline returnValue QProblem_setOptions( QProblem* _THIS, + Options _options + ) +{ + OptionsCPY( &_options,&(_THIS->options) ); + Options_ensureConsistency( &(_THIS->options) ); + + QProblem_setPrintLevel( _THIS,_THIS->options.printLevel ); + + return SUCCESSFUL_RETURN; +} + + +/* + * g e t P r i n t L e v e l + */ +static inline PrintLevel QProblem_getPrintLevel( QProblem* _THIS ) +{ + return _THIS->options.printLevel; +} + + +/* + * g e t C o u n t + */ +static inline unsigned int QProblem_getCount( QProblem* _THIS ) +{ + return _THIS->count; +} + + +/* + * r e s e t C o u n t e r + */ +static inline returnValue QProblem_resetCounter( QProblem* _THIS ) +{ + _THIS->count = 0; + return SUCCESSFUL_RETURN; +} + + + +/***************************************************************************** + * P R O T E C T E D * + *****************************************************************************/ + + +/* + * s e t H + */ +static inline returnValue QProblem_setHM( QProblem* _THIS, DenseMatrix* H_new ) +{ + if ( H_new == 0 ) + return QProblem_setH( _THIS,(real_t*)0 ); + else + return QProblem_setH( _THIS,DenseMatrix_getVal(H_new) ); +} + + +/* + * s e t H + */ +static inline returnValue QProblem_setH( QProblem* _THIS, real_t* const H_new ) +{ + /* if null pointer is passed, Hessian is set to zero matrix + * (or stays identity matrix) */ + if ( H_new == 0 ) + { + if ( _THIS->hessianType == HST_IDENTITY ) + return SUCCESSFUL_RETURN; + + _THIS->hessianType = HST_ZERO; + + _THIS->H = 0; + } + else + { + DenseMatrixCON( _THIS->H,QProblem_getNV( _THIS ),QProblem_getNV( _THIS ),QProblem_getNV( _THIS ),H_new ); + } + + return SUCCESSFUL_RETURN; +} + + +/* + * s e t G + */ +static inline returnValue QProblem_setG( QProblem* _THIS, const real_t* const g_new ) +{ + unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( g_new == 0 ) + return THROWERROR( RET_INVALID_ARGUMENTS ); + + memcpy( _THIS->g,g_new,nV*sizeof(real_t) ); + + return SUCCESSFUL_RETURN; +} + + +/* + * s e t L B + */ +static inline returnValue QProblem_setLB( QProblem* _THIS, const real_t* const lb_new ) +{ + unsigned int i; + unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( lb_new != 0 ) + { + memcpy( _THIS->lb,lb_new,nV*sizeof(real_t) ); + } + else + { + /* if no lower bounds are specified, set them to -infinity */ + for( i=0; ilb[i] = -QPOASES_INFTY; + } + + return SUCCESSFUL_RETURN; +} + + +/* + * s e t L B + */ +static inline returnValue QProblem_setLBn( QProblem* _THIS, int number, real_t value ) +{ + int nV = QProblem_getNV( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( ( number >= 0 ) && ( number < nV ) ) + { + _THIS->lb[number] = value; + return SUCCESSFUL_RETURN; + } + else + { + return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); + } +} + + +/* + * s e t U B + */ +static inline returnValue QProblem_setUB( QProblem* _THIS, const real_t* const ub_new ) +{ + unsigned int i; + unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( ub_new != 0 ) + { + memcpy( _THIS->ub,ub_new,nV*sizeof(real_t) ); + } + else + { + /* if no upper bounds are specified, set them to infinity */ + for( i=0; iub[i] = QPOASES_INFTY; + } + + return SUCCESSFUL_RETURN; +} + + +/* + * s e t U B + */ +static inline returnValue QProblem_setUBn( QProblem* _THIS, int number, real_t value ) +{ + int nV = QProblem_getNV( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( ( number >= 0 ) && ( number < nV ) ) + { + _THIS->ub[number] = value; + + return SUCCESSFUL_RETURN; + } + else + { + return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); + } +} + + + +/* + * i s B l o c k i n g + */ +static inline BooleanType QProblem_isBlocking( QProblem* _THIS, + real_t num, + real_t den, + real_t epsNum, + real_t epsDen, + real_t* t + ) +{ + if ( ( den >= epsDen ) && ( num >= epsNum ) ) + { + if ( num < (*t)*den ) + return BT_TRUE; + } + + return BT_FALSE; +} + + + +/* + * g e t C o n s t r a i n t s + */ +static inline returnValue QProblem_getConstraints( QProblem* _THIS, Constraints* _constraints ) +{ + int nV = QProblem_getNV( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + ConstraintsCPY( _THIS->constraints,_constraints ); + + return SUCCESSFUL_RETURN; +} + + + +/* + * g e t N C + */ +static inline int QProblem_getNC( QProblem* _THIS ) +{ + return Constraints_getNC( _THIS->constraints ); +} + + +/* + * g e t N E C + */ +static inline int QProblem_getNEC( QProblem* _THIS ) +{ + return Constraints_getNEC( _THIS->constraints ); +} + + +/* + * g e t N A C + */ +static inline int QProblem_getNAC( QProblem* _THIS ) +{ + return Constraints_getNAC( _THIS->constraints ); +} + + +/* + * g e t N I A C + */ +static inline int QProblem_getNIAC( QProblem* _THIS ) +{ + return Constraints_getNIAC( _THIS->constraints ); +} + + + +/***************************************************************************** + * P R O T E C T E D * + *****************************************************************************/ + + +/* + * s e t A + */ +static inline returnValue QProblem_setAM( QProblem* _THIS, DenseMatrix *A_new ) +{ + if ( A_new == 0 ) + return QProblem_setA( _THIS,(real_t*)0 ); + else + return QProblem_setA( _THIS,DenseMatrix_getVal(A_new) ); +} + + +/* + * s e t A + */ +static inline returnValue QProblem_setA( QProblem* _THIS, real_t* const A_new ) +{ + int j; + int nV = QProblem_getNV( _THIS ); + int nC = QProblem_getNC( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( A_new == 0 ) + return THROWERROR( RET_INVALID_ARGUMENTS ); + + DenseMatrixCON( _THIS->A,QProblem_getNC( _THIS ),QProblem_getNV( _THIS ),QProblem_getNV( _THIS ),A_new ); + + DenseMatrix_times( _THIS->A,1, 1.0, _THIS->x, nV, 0.0, _THIS->Ax, nC); + + for( j=0; jAx_u[j] = _THIS->ubA[j] - _THIS->Ax[j]; + _THIS->Ax_l[j] = _THIS->Ax[j] - _THIS->lbA[j]; + + /* (ckirches) disable constraints with empty rows */ + if ( qpOASES_isZero( DenseMatrix_getRowNorm( _THIS->A,j,2 ),QPOASES_ZERO ) == BT_TRUE ) + Constraints_setType( _THIS->constraints,j,ST_DISABLED ); + } + + return SUCCESSFUL_RETURN; +} + + +/* + * s e t L B A + */ +static inline returnValue QProblem_setLBA( QProblem* _THIS, const real_t* const lbA_new ) +{ + unsigned int i; + unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); + unsigned int nC = (unsigned int)QProblem_getNC( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( lbA_new != 0 ) + { + memcpy( _THIS->lbA,lbA_new,nC*sizeof(real_t) ); + } + else + { + /* if no lower constraints' bounds are specified, set them to -infinity */ + for( i=0; ilbA[i] = -QPOASES_INFTY; + } + + return SUCCESSFUL_RETURN; +} + + +/* + * s e t L B A + */ +static inline returnValue QProblem_setLBAn( QProblem* _THIS, int number, real_t value ) +{ + int nV = QProblem_getNV( _THIS ); + int nC = QProblem_getNC( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( ( number >= 0 ) && ( number < nC ) ) + { + _THIS->lbA[number] = value; + return SUCCESSFUL_RETURN; + } + else + return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); +} + + +/* + * s e t U B A + */ +static inline returnValue QProblem_setUBA( QProblem* _THIS, const real_t* const ubA_new ) +{ + unsigned int i; + unsigned int nV = (unsigned int)QProblem_getNV( _THIS ); + unsigned int nC = (unsigned int)QProblem_getNC( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( ubA_new != 0 ) + { + memcpy( _THIS->ubA,ubA_new,nC*sizeof(real_t) ); + } + else + { + /* if no upper constraints' bounds are specified, set them to infinity */ + for( i=0; iubA[i] = QPOASES_INFTY; + } + + return SUCCESSFUL_RETURN; +} + + +/* + * s e t U B A + */ +static inline returnValue QProblem_setUBAn( QProblem* _THIS, int number, real_t value ) +{ + int nV = QProblem_getNV( _THIS ); + int nC = QProblem_getNC( _THIS ); + + if ( nV == 0 ) + return THROWERROR( RET_QPOBJECT_NOT_SETUP ); + + if ( ( number >= 0 ) && ( number < nC ) ) + { + _THIS->ubA[number] = value; + return SUCCESSFUL_RETURN; + } + else + return THROWERROR( RET_INDEX_OUT_OF_BOUNDS ); +} + + +END_NAMESPACE_QPOASES + + +#endif /* QPOASES_QPROBLEM_H */ + + +/* + * end of file + */ diff --git a/third_party/acados/include/qpOASES_e/Types.h b/third_party/acados/include/qpOASES_e/Types.h index 1e452097f8..fc042aed82 100644 --- a/third_party/acados/include/qpOASES_e/Types.h +++ b/third_party/acados/include/qpOASES_e/Types.h @@ -1,310 +1,310 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/Types.h - * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches - * \version 3.1embedded - * \date 2007-2015 - * - * Declaration of all non-built-in types (except for classes). - */ - - -#ifndef QPOASES_TYPES_H -#define QPOASES_TYPES_H - -#ifdef USE_ACADOS_TYPES -#include "acados/utils/types.h" -#endif - -/* If your compiler does not support the snprintf() function, - * uncomment the following line and try to compile again. */ -/* #define __NO_SNPRINTF__ */ - - -/* Uncomment the following line for setting the __DSPACE__ flag. */ -/* #define __DSPACE__ */ - -/* Uncomment the following line for setting the __XPCTARGET__ flag. */ -/* #define __XPCTARGET__ */ - - -/* Uncomment the following line for setting the __NO_FMATH__ flag. */ -/* #define __NO_FMATH__ */ - -/* Uncomment the following line to enable debug information. */ -/* #define __DEBUG__ */ - -/* Uncomment the following line to enable suppress any kind of console output. */ -/* #define __SUPPRESSANYOUTPUT__ */ - - -/** Forces to always include all implicitly fixed bounds and all equality constraints - * into the initial working set when setting up an auxiliary QP. */ -#define __ALWAYS_INITIALISE_WITH_ALL_EQUALITIES__ - -/* Uncomment the following line to activate the use of an alternative Givens - * plane rotation requiring only three multiplications. */ -/* #define __USE_THREE_MULTS_GIVENS__ */ - -/* Uncomment the following line to activate the use of single precision arithmetic. */ -/* #define __USE_SINGLE_PRECISION__ */ - -/* The inline keyword is skipped by default as it is not part of the C90 standard. - * However, by uncommenting the following line, use of the inline keyword can be enforced. */ -/* #define __USE_INLINE__ */ - - -/* Work-around for Borland BCC 5.5 compiler. */ -#ifdef __BORLANDC__ -#if __BORLANDC__ < 0x0561 - #define __STDC__ 1 -#endif -#endif - - -/* Work-around for Microsoft compilers. */ -#ifdef _MSC_VER - #define __NO_SNPRINTF__ - #pragma warning( disable : 4061 4100 4250 4514 4996 ) -#endif - - -/* Apply pre-processor settings when using qpOASES within auto-generated code. */ -#ifdef __CODE_GENERATION__ - #define __NO_COPYRIGHT__ - #define __EXTERNAL_DIMENSIONS__ -#endif /* __CODE_GENERATION__ */ - - -/* Avoid using static variables declaration within functions. */ -#ifdef __NO_STATIC__ - #define myStatic -#else - #define myStatic static -#endif /* __NO_STATIC__ */ - - -/* Skip inline keyword if not specified otherwise. */ -#ifndef __USE_INLINE__ - #define inline -#endif - - -/* Avoid any printing on embedded platforms. */ -#if defined(__DSPACE__) || defined(__XPCTARGET__) - #define __SUPPRESSANYOUTPUT__ - #define __NO_SNPRINTF__ -#endif - - -#ifdef __NO_SNPRINTF__ - #if (!defined(_MSC_VER)) || defined(__DSPACE__) || defined(__XPCTARGET__) - /* If snprintf is not available, provide an empty implementation... */ - int snprintf( char* s, size_t n, const char* format, ... ); - #else - /* ... or substitute snprintf by _snprintf for Microsoft compilers. */ - #define snprintf _snprintf - #endif -#endif /* __NO_SNPRINTF__ */ - - -/** Macro for switching on/off the beginning of the qpOASES namespace definition. */ -#define BEGIN_NAMESPACE_QPOASES - -/** Macro for switching on/off the end of the qpOASES namespace definition. */ -#define END_NAMESPACE_QPOASES - -/** Macro for switching on/off the use of the qpOASES namespace. */ -#define USING_NAMESPACE_QPOASES - -/** Macro for switching on/off references to the qpOASES namespace. */ -#define REFER_NAMESPACE_QPOASES /*::*/ - - -/** Macro for accessing the Cholesky factor R. */ -#define RR( I,J ) _THIS->R[(I)+nV*(J)] - -/** Macro for accessing the orthonormal matrix Q of the QT factorisation. */ -#define QQ( I,J ) _THIS->Q[(I)+nV*(J)] - -/** Macro for accessing the triangular matrix T of the QT factorisation. */ -#define TT( I,J ) _THIS->T[(I)*nVC_min+(J)] - - - -BEGIN_NAMESPACE_QPOASES - - -/** Defines real_t for facilitating switching between double and float. */ - -#ifndef USE_ACADOS_TYPES -#ifndef __CODE_GENERATION__ - - #ifdef __USE_SINGLE_PRECISION__ - typedef float real_t; - #else - typedef double real_t; - #endif /* __USE_SINGLE_PRECISION__ */ - -#endif /* __CODE_GENERATION__ */ -#endif /* USE_ACADOS_TYPES */ - -/** Summarises all possible logical values. */ -typedef enum -{ - BT_FALSE = 0, /**< Logical value for "false". */ - BT_TRUE /**< Logical value for "true". */ -} BooleanType; - - -/** Summarises all possible print levels. Print levels are used to describe - * the desired amount of output during runtime of qpOASES. */ -typedef enum -{ - PL_DEBUG_ITER = -2, /**< Full tabular debugging output. */ - PL_TABULAR, /**< Tabular output. */ - PL_NONE, /**< No output. */ - PL_LOW, /**< Print error messages only. */ - PL_MEDIUM, /**< Print error and warning messages as well as concise info messages. */ - PL_HIGH /**< Print all messages with full details. */ -} PrintLevel; - - -/** Defines visibility status of a message. */ -typedef enum -{ - VS_HIDDEN, /**< Message not visible. */ - VS_VISIBLE /**< Message visible. */ -} VisibilityStatus; - - -/** Summarises all possible states of the (S)QProblem(B) object during the -solution process of a QP sequence. */ -typedef enum -{ - QPS_NOTINITIALISED, /**< QProblem object is freshly instantiated or reset. */ - QPS_PREPARINGAUXILIARYQP, /**< An auxiliary problem is currently setup, either at the very beginning - * via an initial homotopy or after changing the QP matrices. */ - QPS_AUXILIARYQPSOLVED, /**< An auxilary problem was solved, either at the very beginning - * via an initial homotopy or after changing the QP matrices. */ - QPS_PERFORMINGHOMOTOPY, /**< A homotopy according to the main idea of the online active - * set strategy is performed. */ - QPS_HOMOTOPYQPSOLVED, /**< An intermediate QP along the homotopy path was solved. */ - QPS_SOLVED /**< The solution of the actual QP was found. */ -} QProblemStatus; - - -/** Summarises all possible types of the QP's Hessian matrix. */ -typedef enum -{ - HST_ZERO, /**< Hessian is zero matrix (i.e. LP formulation). */ - HST_IDENTITY, /**< Hessian is identity matrix. */ - HST_POSDEF, /**< Hessian is (strictly) positive definite. */ - HST_POSDEF_NULLSPACE, /**< Hessian is positive definite on null space of active bounds/constraints. */ - HST_SEMIDEF, /**< Hessian is positive semi-definite. */ - HST_INDEF, /**< Hessian is indefinite. */ - HST_UNKNOWN /**< Hessian type is unknown. */ -} HessianType; - - -/** Summarises all possible types of bounds and constraints. */ -typedef enum -{ - ST_UNBOUNDED, /**< Bound/constraint is unbounded. */ - ST_BOUNDED, /**< Bound/constraint is bounded but not fixed. */ - ST_EQUALITY, /**< Bound/constraint is fixed (implicit equality bound/constraint). */ - ST_DISABLED, /**< Bound/constraint is disabled (i.e. ignored when solving QP). */ - ST_UNKNOWN /**< Type of bound/constraint unknown. */ -} SubjectToType; - - -/** Summarises all possible states of bounds and constraints. */ -typedef enum -{ - ST_LOWER = -1, /**< Bound/constraint is at its lower bound. */ - ST_INACTIVE, /**< Bound/constraint is inactive. */ - ST_UPPER, /**< Bound/constraint is at its upper bound. */ - ST_INFEASIBLE_LOWER, /**< (to be documented) */ - ST_INFEASIBLE_UPPER, /**< (to be documented) */ - ST_UNDEFINED /**< Status of bound/constraint undefined. */ -} SubjectToStatus; - - -/** - * \brief Stores internal information for tabular (debugging) output. - * - * Struct storing internal information for tabular (debugging) output - * when using the (S)QProblem(B) objects. - * - * \author Hans Joachim Ferreau - * \version 3.1embedded - * \date 2013-2015 - */ -typedef struct -{ - int idxAddB; /**< Index of bound that has been added to working set. */ - int idxRemB; /**< Index of bound that has been removed from working set. */ - int idxAddC; /**< Index of constraint that has been added to working set. */ - int idxRemC; /**< Index of constraint that has been removed from working set. */ - int excAddB; /**< Flag indicating whether a bound has been added to working set to keep a regular projected Hessian. */ - int excRemB; /**< Flag indicating whether a bound has been removed from working set to keep a regular projected Hessian. */ - int excAddC; /**< Flag indicating whether a constraint has been added to working set to keep a regular projected Hessian. */ - int excRemC; /**< Flag indicating whether a constraint has been removed from working set to keep a regular projected Hessian. */ -} TabularOutput; - -/** - * \brief Struct containing the variable header for mat file. - * - * Struct storing the header of a variable to be stored in - * Matlab's binary format (using the outdated Level 4 variant - * for simplictiy). - * - * Note, this code snippet has been inspired from the document - * "Matlab(R) MAT-file Format, R2013b" by MathWorks - * - * \author Hans Joachim Ferreau - * \version 3.1embedded - * \date 2013-2015 - */ -typedef struct -{ - long numericFormat; /**< Flag indicating numerical format. */ - long nRows; /**< Number of rows. */ - long nCols; /**< Number of rows. */ - long imaginaryPart; /**< (to be documented) */ - long nCharName; /**< Number of character in name. */ -} MatMatrixHeader; - - -END_NAMESPACE_QPOASES - - -#endif /* QPOASES_TYPES_H */ - - -/* - * end of file - */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/Types.h + * \author Hans Joachim Ferreau, Andreas Potschka, Christian Kirches + * \version 3.1embedded + * \date 2007-2015 + * + * Declaration of all non-built-in types (except for classes). + */ + + +#ifndef QPOASES_TYPES_H +#define QPOASES_TYPES_H + +#ifdef USE_ACADOS_TYPES +#include "acados/utils/types.h" +#endif + +/* If your compiler does not support the snprintf() function, + * uncomment the following line and try to compile again. */ +/* #define __NO_SNPRINTF__ */ + + +/* Uncomment the following line for setting the __DSPACE__ flag. */ +/* #define __DSPACE__ */ + +/* Uncomment the following line for setting the __XPCTARGET__ flag. */ +/* #define __XPCTARGET__ */ + + +/* Uncomment the following line for setting the __NO_FMATH__ flag. */ +/* #define __NO_FMATH__ */ + +/* Uncomment the following line to enable debug information. */ +/* #define __DEBUG__ */ + +/* Uncomment the following line to enable suppress any kind of console output. */ +/* #define __SUPPRESSANYOUTPUT__ */ + + +/** Forces to always include all implicitly fixed bounds and all equality constraints + * into the initial working set when setting up an auxiliary QP. */ +#define __ALWAYS_INITIALISE_WITH_ALL_EQUALITIES__ + +/* Uncomment the following line to activate the use of an alternative Givens + * plane rotation requiring only three multiplications. */ +/* #define __USE_THREE_MULTS_GIVENS__ */ + +/* Uncomment the following line to activate the use of single precision arithmetic. */ +/* #define __USE_SINGLE_PRECISION__ */ + +/* The inline keyword is skipped by default as it is not part of the C90 standard. + * However, by uncommenting the following line, use of the inline keyword can be enforced. */ +/* #define __USE_INLINE__ */ + + +/* Work-around for Borland BCC 5.5 compiler. */ +#ifdef __BORLANDC__ +#if __BORLANDC__ < 0x0561 + #define __STDC__ 1 +#endif +#endif + + +/* Work-around for Microsoft compilers. */ +#ifdef _MSC_VER + #define __NO_SNPRINTF__ + #pragma warning( disable : 4061 4100 4250 4514 4996 ) +#endif + + +/* Apply pre-processor settings when using qpOASES within auto-generated code. */ +#ifdef __CODE_GENERATION__ + #define __NO_COPYRIGHT__ + #define __EXTERNAL_DIMENSIONS__ +#endif /* __CODE_GENERATION__ */ + + +/* Avoid using static variables declaration within functions. */ +#ifdef __NO_STATIC__ + #define myStatic +#else + #define myStatic static +#endif /* __NO_STATIC__ */ + + +/* Skip inline keyword if not specified otherwise. */ +#ifndef __USE_INLINE__ + #define inline +#endif + + +/* Avoid any printing on embedded platforms. */ +#if defined(__DSPACE__) || defined(__XPCTARGET__) + #define __SUPPRESSANYOUTPUT__ + #define __NO_SNPRINTF__ +#endif + + +#ifdef __NO_SNPRINTF__ + #if (!defined(_MSC_VER)) || defined(__DSPACE__) || defined(__XPCTARGET__) + /* If snprintf is not available, provide an empty implementation... */ + int snprintf( char* s, size_t n, const char* format, ... ); + #else + /* ... or substitute snprintf by _snprintf for Microsoft compilers. */ + #define snprintf _snprintf + #endif +#endif /* __NO_SNPRINTF__ */ + + +/** Macro for switching on/off the beginning of the qpOASES namespace definition. */ +#define BEGIN_NAMESPACE_QPOASES + +/** Macro for switching on/off the end of the qpOASES namespace definition. */ +#define END_NAMESPACE_QPOASES + +/** Macro for switching on/off the use of the qpOASES namespace. */ +#define USING_NAMESPACE_QPOASES + +/** Macro for switching on/off references to the qpOASES namespace. */ +#define REFER_NAMESPACE_QPOASES /*::*/ + + +/** Macro for accessing the Cholesky factor R. */ +#define RR( I,J ) _THIS->R[(I)+nV*(J)] + +/** Macro for accessing the orthonormal matrix Q of the QT factorisation. */ +#define QQ( I,J ) _THIS->Q[(I)+nV*(J)] + +/** Macro for accessing the triangular matrix T of the QT factorisation. */ +#define TT( I,J ) _THIS->T[(I)*nVC_min+(J)] + + + +BEGIN_NAMESPACE_QPOASES + + +/** Defines real_t for facilitating switching between double and float. */ + +#ifndef USE_ACADOS_TYPES +#ifndef __CODE_GENERATION__ + + #ifdef __USE_SINGLE_PRECISION__ + typedef float real_t; + #else + typedef double real_t; + #endif /* __USE_SINGLE_PRECISION__ */ + +#endif /* __CODE_GENERATION__ */ +#endif /* USE_ACADOS_TYPES */ + +/** Summarises all possible logical values. */ +typedef enum +{ + BT_FALSE = 0, /**< Logical value for "false". */ + BT_TRUE /**< Logical value for "true". */ +} BooleanType; + + +/** Summarises all possible print levels. Print levels are used to describe + * the desired amount of output during runtime of qpOASES. */ +typedef enum +{ + PL_DEBUG_ITER = -2, /**< Full tabular debugging output. */ + PL_TABULAR, /**< Tabular output. */ + PL_NONE, /**< No output. */ + PL_LOW, /**< Print error messages only. */ + PL_MEDIUM, /**< Print error and warning messages as well as concise info messages. */ + PL_HIGH /**< Print all messages with full details. */ +} PrintLevel; + + +/** Defines visibility status of a message. */ +typedef enum +{ + VS_HIDDEN, /**< Message not visible. */ + VS_VISIBLE /**< Message visible. */ +} VisibilityStatus; + + +/** Summarises all possible states of the (S)QProblem(B) object during the +solution process of a QP sequence. */ +typedef enum +{ + QPS_NOTINITIALISED, /**< QProblem object is freshly instantiated or reset. */ + QPS_PREPARINGAUXILIARYQP, /**< An auxiliary problem is currently setup, either at the very beginning + * via an initial homotopy or after changing the QP matrices. */ + QPS_AUXILIARYQPSOLVED, /**< An auxilary problem was solved, either at the very beginning + * via an initial homotopy or after changing the QP matrices. */ + QPS_PERFORMINGHOMOTOPY, /**< A homotopy according to the main idea of the online active + * set strategy is performed. */ + QPS_HOMOTOPYQPSOLVED, /**< An intermediate QP along the homotopy path was solved. */ + QPS_SOLVED /**< The solution of the actual QP was found. */ +} QProblemStatus; + + +/** Summarises all possible types of the QP's Hessian matrix. */ +typedef enum +{ + HST_ZERO, /**< Hessian is zero matrix (i.e. LP formulation). */ + HST_IDENTITY, /**< Hessian is identity matrix. */ + HST_POSDEF, /**< Hessian is (strictly) positive definite. */ + HST_POSDEF_NULLSPACE, /**< Hessian is positive definite on null space of active bounds/constraints. */ + HST_SEMIDEF, /**< Hessian is positive semi-definite. */ + HST_INDEF, /**< Hessian is indefinite. */ + HST_UNKNOWN /**< Hessian type is unknown. */ +} HessianType; + + +/** Summarises all possible types of bounds and constraints. */ +typedef enum +{ + ST_UNBOUNDED, /**< Bound/constraint is unbounded. */ + ST_BOUNDED, /**< Bound/constraint is bounded but not fixed. */ + ST_EQUALITY, /**< Bound/constraint is fixed (implicit equality bound/constraint). */ + ST_DISABLED, /**< Bound/constraint is disabled (i.e. ignored when solving QP). */ + ST_UNKNOWN /**< Type of bound/constraint unknown. */ +} SubjectToType; + + +/** Summarises all possible states of bounds and constraints. */ +typedef enum +{ + ST_LOWER = -1, /**< Bound/constraint is at its lower bound. */ + ST_INACTIVE, /**< Bound/constraint is inactive. */ + ST_UPPER, /**< Bound/constraint is at its upper bound. */ + ST_INFEASIBLE_LOWER, /**< (to be documented) */ + ST_INFEASIBLE_UPPER, /**< (to be documented) */ + ST_UNDEFINED /**< Status of bound/constraint undefined. */ +} SubjectToStatus; + + +/** + * \brief Stores internal information for tabular (debugging) output. + * + * Struct storing internal information for tabular (debugging) output + * when using the (S)QProblem(B) objects. + * + * \author Hans Joachim Ferreau + * \version 3.1embedded + * \date 2013-2015 + */ +typedef struct +{ + int idxAddB; /**< Index of bound that has been added to working set. */ + int idxRemB; /**< Index of bound that has been removed from working set. */ + int idxAddC; /**< Index of constraint that has been added to working set. */ + int idxRemC; /**< Index of constraint that has been removed from working set. */ + int excAddB; /**< Flag indicating whether a bound has been added to working set to keep a regular projected Hessian. */ + int excRemB; /**< Flag indicating whether a bound has been removed from working set to keep a regular projected Hessian. */ + int excAddC; /**< Flag indicating whether a constraint has been added to working set to keep a regular projected Hessian. */ + int excRemC; /**< Flag indicating whether a constraint has been removed from working set to keep a regular projected Hessian. */ +} TabularOutput; + +/** + * \brief Struct containing the variable header for mat file. + * + * Struct storing the header of a variable to be stored in + * Matlab's binary format (using the outdated Level 4 variant + * for simplictiy). + * + * Note, this code snippet has been inspired from the document + * "Matlab(R) MAT-file Format, R2013b" by MathWorks + * + * \author Hans Joachim Ferreau + * \version 3.1embedded + * \date 2013-2015 + */ +typedef struct +{ + long numericFormat; /**< Flag indicating numerical format. */ + long nRows; /**< Number of rows. */ + long nCols; /**< Number of rows. */ + long imaginaryPart; /**< (to be documented) */ + long nCharName; /**< Number of character in name. */ +} MatMatrixHeader; + + +END_NAMESPACE_QPOASES + + +#endif /* QPOASES_TYPES_H */ + + +/* + * end of file + */ diff --git a/third_party/acados/include/qpOASES_e/UnitTesting.h b/third_party/acados/include/qpOASES_e/UnitTesting.h index 3fb31129a5..dbff201039 100644 --- a/third_party/acados/include/qpOASES_e/UnitTesting.h +++ b/third_party/acados/include/qpOASES_e/UnitTesting.h @@ -1,79 +1,79 @@ -/* - * This file is part of qpOASES. - * - * qpOASES -- An Implementation of the Online Active Set Strategy. - * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, - * Christian Kirches et al. All rights reserved. - * - * qpOASES is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * qpOASES is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with qpOASES; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -/** - * \file include/qpOASES_e/UnitTesting.h - * \author Hans Joachim Ferreau - * \version 3.1embedded - * \date 2014-2015 - * - * Definition of auxiliary functions/macros for unit testing. - */ - - -#ifndef QPOASES_UNIT_TESTING_H -#define QPOASES_UNIT_TESTING_H - - -#ifndef TEST_TOL_FACTOR -#define TEST_TOL_FACTOR 1 -#endif - - -/** Return value for tests that passed. */ -#define TEST_PASSED 0 - -/** Return value for tests that failed. */ -#define TEST_FAILED 1 - -/** Return value for tests that could not run due to missing external data. */ -#define TEST_DATA_NOT_FOUND 99 - - -/** Macro verifying that two numerical values are equal in order to pass unit test. */ -#define QPOASES_TEST_FOR_EQUAL( x,y ) if ( REFER_NAMESPACE_QPOASES isEqual( (x),(y) ) == BT_FALSE ) { return TEST_FAILED; } - -/** Macro verifying that two numerical values are close to each other in order to pass unit test. */ -#define QPOASES_TEST_FOR_NEAR( x,y ) if ( REFER_NAMESPACE_QPOASES getAbs((x)-(y)) / REFER_NAMESPACE_QPOASES getMax( 1.0,REFER_NAMESPACE_QPOASES getAbs(x) ) >= 1e-10 ) { return TEST_FAILED; } - -/** Macro verifying that first quantity is lower or equal than second one in order to pass unit test. */ -#define QPOASES_TEST_FOR_TOL( x,tol ) if ( (x) > (tol)*(TEST_TOL_FACTOR) ) { return TEST_FAILED; } - -/** Macro verifying that a logical expression holds in order to pass unit test. */ -#define QPOASES_TEST_FOR_TRUE( x ) if ( (x) == 0 ) { return TEST_FAILED; } - - - -BEGIN_NAMESPACE_QPOASES - - -END_NAMESPACE_QPOASES - - -#endif /* QPOASES_UNIT_TESTING_H */ - - -/* - * end of file - */ +/* + * This file is part of qpOASES. + * + * qpOASES -- An Implementation of the Online Active Set Strategy. + * Copyright (C) 2007-2015 by Hans Joachim Ferreau, Andreas Potschka, + * Christian Kirches et al. All rights reserved. + * + * qpOASES is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * qpOASES is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with qpOASES; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +/** + * \file include/qpOASES_e/UnitTesting.h + * \author Hans Joachim Ferreau + * \version 3.1embedded + * \date 2014-2015 + * + * Definition of auxiliary functions/macros for unit testing. + */ + + +#ifndef QPOASES_UNIT_TESTING_H +#define QPOASES_UNIT_TESTING_H + + +#ifndef TEST_TOL_FACTOR +#define TEST_TOL_FACTOR 1 +#endif + + +/** Return value for tests that passed. */ +#define TEST_PASSED 0 + +/** Return value for tests that failed. */ +#define TEST_FAILED 1 + +/** Return value for tests that could not run due to missing external data. */ +#define TEST_DATA_NOT_FOUND 99 + + +/** Macro verifying that two numerical values are equal in order to pass unit test. */ +#define QPOASES_TEST_FOR_EQUAL( x,y ) if ( REFER_NAMESPACE_QPOASES isEqual( (x),(y) ) == BT_FALSE ) { return TEST_FAILED; } + +/** Macro verifying that two numerical values are close to each other in order to pass unit test. */ +#define QPOASES_TEST_FOR_NEAR( x,y ) if ( REFER_NAMESPACE_QPOASES getAbs((x)-(y)) / REFER_NAMESPACE_QPOASES getMax( 1.0,REFER_NAMESPACE_QPOASES getAbs(x) ) >= 1e-10 ) { return TEST_FAILED; } + +/** Macro verifying that first quantity is lower or equal than second one in order to pass unit test. */ +#define QPOASES_TEST_FOR_TOL( x,tol ) if ( (x) > (tol)*(TEST_TOL_FACTOR) ) { return TEST_FAILED; } + +/** Macro verifying that a logical expression holds in order to pass unit test. */ +#define QPOASES_TEST_FOR_TRUE( x ) if ( (x) == 0 ) { return TEST_FAILED; } + + + +BEGIN_NAMESPACE_QPOASES + + +END_NAMESPACE_QPOASES + + +#endif /* QPOASES_UNIT_TESTING_H */ + + +/* + * end of file + */ diff --git a/third_party/acados/larch64/lib/libacados.so b/third_party/acados/larch64/lib/libacados.so index 9a28b4c9d6..a081e31ab1 100644 Binary files a/third_party/acados/larch64/lib/libacados.so and b/third_party/acados/larch64/lib/libacados.so differ diff --git a/third_party/acados/larch64/lib/libblasfeo.so b/third_party/acados/larch64/lib/libblasfeo.so index b97ed876e2..e2191897a1 100644 Binary files a/third_party/acados/larch64/lib/libblasfeo.so and b/third_party/acados/larch64/lib/libblasfeo.so differ diff --git a/third_party/acados/larch64/lib/libhpipm.so b/third_party/acados/larch64/lib/libhpipm.so index cd4b1f1b5b..002eda375a 100644 Binary files a/third_party/acados/larch64/lib/libhpipm.so and b/third_party/acados/larch64/lib/libhpipm.so differ diff --git a/third_party/acados/larch64/lib/libqpOASES_e.so.3.1 b/third_party/acados/larch64/lib/libqpOASES_e.so.3.1 index 19e7a69bd5..d64e40ec60 100644 Binary files a/third_party/acados/larch64/lib/libqpOASES_e.so.3.1 and b/third_party/acados/larch64/lib/libqpOASES_e.so.3.1 differ diff --git a/third_party/acados/larch64/t_renderer b/third_party/acados/larch64/t_renderer index b6f70bde06..f9e7d16601 100755 Binary files a/third_party/acados/larch64/t_renderer and b/third_party/acados/larch64/t_renderer differ diff --git a/third_party/acados/x86_64/lib/libacados.so b/third_party/acados/x86_64/lib/libacados.so index ae5fc363f2..4e80f7c76b 100644 Binary files a/third_party/acados/x86_64/lib/libacados.so and b/third_party/acados/x86_64/lib/libacados.so differ diff --git a/third_party/acados/x86_64/lib/libblasfeo.so b/third_party/acados/x86_64/lib/libblasfeo.so index 676ff67e98..26d5a3dbe9 100644 Binary files a/third_party/acados/x86_64/lib/libblasfeo.so and b/third_party/acados/x86_64/lib/libblasfeo.so differ diff --git a/third_party/acados/x86_64/lib/libhpipm.so b/third_party/acados/x86_64/lib/libhpipm.so index 8d026b1185..40e2e4e7d4 100644 Binary files a/third_party/acados/x86_64/lib/libhpipm.so and b/third_party/acados/x86_64/lib/libhpipm.so differ diff --git a/third_party/acados/x86_64/lib/libqpOASES_e.so.3.1 b/third_party/acados/x86_64/lib/libqpOASES_e.so.3.1 index c0c8b66650..cf5e550faa 100644 Binary files a/third_party/acados/x86_64/lib/libqpOASES_e.so.3.1 and b/third_party/acados/x86_64/lib/libqpOASES_e.so.3.1 differ diff --git a/third_party/acados/x86_64/t_renderer b/third_party/acados/x86_64/t_renderer index d84fc762c8..e995a209b7 100755 Binary files a/third_party/acados/x86_64/t_renderer and b/third_party/acados/x86_64/t_renderer differ diff --git a/third_party/bootstrap/bootstrap-icons.svg b/third_party/bootstrap/bootstrap-icons.svg index 61f2720db4..692a27ea55 100644 --- a/third_party/bootstrap/bootstrap-icons.svg +++ b/third_party/bootstrap/bootstrap-icons.svg @@ -1 +1,3 @@ - \ No newline at end of file +version https://git-lfs.github.com/spec/v1 +oid sha256:d7ecfaac355e51c9b95319fdf4681cf4c423109fd477e961af588b92607a76da +size 1087239 diff --git a/third_party/catch2/include/catch2/catch.hpp b/third_party/catch2/include/catch2/catch.hpp index d2a12427b2..6a31e5b0ca 100644 --- a/third_party/catch2/include/catch2/catch.hpp +++ b/third_party/catch2/include/catch2/catch.hpp @@ -1,17970 +1,3 @@ -/* - * Catch v2.13.9 - * Generated: 2022-04-12 22:37:23.260201 - * ---------------------------------------------------------- - * This file has been merged from multiple headers. Please don't edit it directly - * Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ -#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED -#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED -// start catch.hpp - - -#define CATCH_VERSION_MAJOR 2 -#define CATCH_VERSION_MINOR 13 -#define CATCH_VERSION_PATCH 9 - -#ifdef __clang__ -# pragma clang system_header -#elif defined __GNUC__ -# pragma GCC system_header -#endif - -// start catch_suppress_warnings.h - -#ifdef __clang__ -# ifdef __ICC // icpc defines the __clang__ macro -# pragma warning(push) -# pragma warning(disable: 161 1682) -# else // __ICC -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wpadded" -# pragma clang diagnostic ignored "-Wswitch-enum" -# pragma clang diagnostic ignored "-Wcovered-switch-default" -# endif -#elif defined __GNUC__ - // Because REQUIREs trigger GCC's -Wparentheses, and because still - // supported version of g++ have only buggy support for _Pragmas, - // Wparentheses have to be suppressed globally. -# pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details - -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-variable" -# pragma GCC diagnostic ignored "-Wpadded" -#endif -// end catch_suppress_warnings.h -#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) -# define CATCH_IMPL -# define CATCH_CONFIG_ALL_PARTS -#endif - -// In the impl file, we want to have access to all parts of the headers -// Can also be used to sanely support PCHs -#if defined(CATCH_CONFIG_ALL_PARTS) -# define CATCH_CONFIG_EXTERNAL_INTERFACES -# if defined(CATCH_CONFIG_DISABLE_MATCHERS) -# undef CATCH_CONFIG_DISABLE_MATCHERS -# endif -# if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER) -# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER -# endif -#endif - -#if !defined(CATCH_CONFIG_IMPL_ONLY) -// start catch_platform.h - -// See e.g.: -// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html -#ifdef __APPLE__ -# include -# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \ - (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1) -# define CATCH_PLATFORM_MAC -# elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) -# define CATCH_PLATFORM_IPHONE -# endif - -#elif defined(linux) || defined(__linux) || defined(__linux__) -# define CATCH_PLATFORM_LINUX - -#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) -# define CATCH_PLATFORM_WINDOWS -#endif - -// end catch_platform.h - -#ifdef CATCH_IMPL -# ifndef CLARA_CONFIG_MAIN -# define CLARA_CONFIG_MAIN_NOT_DEFINED -# define CLARA_CONFIG_MAIN -# endif -#endif - -// start catch_user_interfaces.h - -namespace Catch { - unsigned int rngSeed(); -} - -// end catch_user_interfaces.h -// start catch_tag_alias_autoregistrar.h - -// start catch_common.h - -// start catch_compiler_capabilities.h - -// Detect a number of compiler features - by compiler -// The following features are defined: -// -// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? -// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? -// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? -// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled? -// **************** -// Note to maintainers: if new toggles are added please document them -// in configuration.md, too -// **************** - -// In general each macro has a _NO_ form -// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature. -// Many features, at point of detection, define an _INTERNAL_ macro, so they -// can be combined, en-mass, with the _NO_ forms later. - -#ifdef __cplusplus - -# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) -# define CATCH_CPP14_OR_GREATER -# endif - -# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) -# define CATCH_CPP17_OR_GREATER -# endif - -#endif - -// Only GCC compiler should be used in this block, so other compilers trying to -// mask themselves as GCC should be ignored. -#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) - -# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) - -#endif - -#if defined(__clang__) - -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" ) - -// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug -// which results in calls to destructors being emitted for each temporary, -// without a matching initialization. In practice, this can result in something -// like `std::string::~string` being called on an uninitialized value. -// -// For example, this code will likely segfault under IBM XL: -// ``` -// REQUIRE(std::string("12") + "34" == "1234") -// ``` -// -// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented. -# if !defined(__ibmxl__) && !defined(__CUDACC__) -# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */ -# endif - -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ - _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") - -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) - -# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" ) - -# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" ) - -# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wunused-template\"" ) - -#endif // __clang__ - -//////////////////////////////////////////////////////////////////////////////// -// Assume that non-Windows platforms support posix signals by default -#if !defined(CATCH_PLATFORM_WINDOWS) - #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS -#endif - -//////////////////////////////////////////////////////////////////////////////// -// We know some environments not to support full POSIX signals -#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__) - #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS -#endif - -#ifdef __OS400__ -# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS -# define CATCH_CONFIG_COLOUR_NONE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Android somehow still does not support std::to_string -#if defined(__ANDROID__) -# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING -# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Not all Windows environments support SEH properly -#if defined(__MINGW32__) -# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH -#endif - -//////////////////////////////////////////////////////////////////////////////// -// PS4 -#if defined(__ORBIS__) -# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Cygwin -#ifdef __CYGWIN__ - -// Required for some versions of Cygwin to declare gettimeofday -// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin -# define _BSD_SOURCE -// some versions of cygwin (most) do not support std::to_string. Use the libstd check. -// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813 -# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \ - && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) - -# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING - -# endif -#endif // __CYGWIN__ - -//////////////////////////////////////////////////////////////////////////////// -// Visual C++ -#if defined(_MSC_VER) - -// Universal Windows platform does not support SEH -// Or console colours (or console at all...) -# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) -# define CATCH_CONFIG_COLOUR_NONE -# else -# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH -# endif - -# if !defined(__clang__) // Handle Clang masquerading for msvc - -// MSVC traditional preprocessor needs some workaround for __VA_ARGS__ -// _MSVC_TRADITIONAL == 0 means new conformant preprocessor -// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor -# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) -# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -# endif // MSVC_TRADITIONAL - -// Only do this if we're not using clang on Windows, which uses `diagnostic push` & `diagnostic pop` -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) ) -# endif // __clang__ - -#endif // _MSC_VER - -#if defined(_REENTRANT) || defined(_MSC_VER) -// Enable async processing, as -pthread is specified or no additional linking is required -# define CATCH_INTERNAL_CONFIG_USE_ASYNC -#endif // _MSC_VER - -//////////////////////////////////////////////////////////////////////////////// -// Check if we are compiled with -fno-exceptions or equivalent -#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND) -# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED -#endif - -//////////////////////////////////////////////////////////////////////////////// -// DJGPP -#ifdef __DJGPP__ -# define CATCH_INTERNAL_CONFIG_NO_WCHAR -#endif // __DJGPP__ - -//////////////////////////////////////////////////////////////////////////////// -// Embarcadero C++Build -#if defined(__BORLANDC__) - #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN -#endif - -//////////////////////////////////////////////////////////////////////////////// - -// Use of __COUNTER__ is suppressed during code analysis in -// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly -// handled by it. -// Otherwise all supported compilers support COUNTER macro, -// but user still might want to turn it off -#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L ) - #define CATCH_INTERNAL_CONFIG_COUNTER -#endif - -//////////////////////////////////////////////////////////////////////////////// - -// RTX is a special version of Windows that is real time. -// This means that it is detected as Windows, but does not provide -// the same set of capabilities as real Windows does. -#if defined(UNDER_RTSS) || defined(RTX64_BUILD) - #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH - #define CATCH_INTERNAL_CONFIG_NO_ASYNC - #define CATCH_CONFIG_COLOUR_NONE -#endif - -#if !defined(_GLIBCXX_USE_C99_MATH_TR1) -#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER -#endif - -// Various stdlib support checks that require __has_include -#if defined(__has_include) - // Check if string_view is available and usable - #if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW - #endif - - // Check if optional is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) - - // Check if byte is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # include - # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0) - # define CATCH_INTERNAL_CONFIG_CPP17_BYTE - # endif - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) - - // Check if variant is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # if defined(__clang__) && (__clang_major__ < 8) - // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 - // fix should be in clang 8, workaround in libstdc++ 8.2 - # include - # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) - # define CATCH_CONFIG_NO_CPP17_VARIANT - # else - # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT - # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) - # else - # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT - # endif // defined(__clang__) && (__clang_major__ < 8) - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) -#endif // defined(__has_include) - -#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) -# define CATCH_CONFIG_COUNTER -#endif -#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH) -# define CATCH_CONFIG_WINDOWS_SEH -#endif -// This is set by default, because we assume that unix compilers are posix-signal-compatible by default. -#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) -# define CATCH_CONFIG_POSIX_SIGNALS -#endif -// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions. -#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR) -# define CATCH_CONFIG_WCHAR -#endif - -#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING) -# define CATCH_CONFIG_CPP11_TO_STRING -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL) -# define CATCH_CONFIG_CPP17_OPTIONAL -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW) -# define CATCH_CONFIG_CPP17_STRING_VIEW -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT) -# define CATCH_CONFIG_CPP17_VARIANT -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE) -# define CATCH_CONFIG_CPP17_BYTE -#endif - -#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) -# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE -#endif - -#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE) -# define CATCH_CONFIG_NEW_CAPTURE -#endif - -#if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) -# define CATCH_CONFIG_DISABLE_EXCEPTIONS -#endif - -#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN) -# define CATCH_CONFIG_POLYFILL_ISNAN -#endif - -#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC) -# define CATCH_CONFIG_USE_ASYNC -#endif - -#if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE) -# define CATCH_CONFIG_ANDROID_LOGWRITE -#endif - -#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER) -# define CATCH_CONFIG_GLOBAL_NEXTAFTER -#endif - -// Even if we do not think the compiler has that warning, we still have -// to provide a macro that can be used by the code. -#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION) -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION -#endif -#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS -#endif - -// The goal of this macro is to avoid evaluation of the arguments, but -// still have the compiler warn on problems inside... -#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN) -# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) -#endif - -#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10) -# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#elif defined(__clang__) && (__clang_major__ < 5) -# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#endif - -#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#endif - -#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) -#define CATCH_TRY if ((true)) -#define CATCH_CATCH_ALL if ((false)) -#define CATCH_CATCH_ANON(type) if ((false)) -#else -#define CATCH_TRY try -#define CATCH_CATCH_ALL catch (...) -#define CATCH_CATCH_ANON(type) catch (type) -#endif - -#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) -#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#endif - -// end catch_compiler_capabilities.h -#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line -#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) -#ifdef CATCH_CONFIG_COUNTER -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) -#else -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) -#endif - -#include -#include -#include - -// We need a dummy global operator<< so we can bring it into Catch namespace later -struct Catch_global_namespace_dummy {}; -std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy); - -namespace Catch { - - struct CaseSensitive { enum Choice { - Yes, - No - }; }; - - class NonCopyable { - NonCopyable( NonCopyable const& ) = delete; - NonCopyable( NonCopyable && ) = delete; - NonCopyable& operator = ( NonCopyable const& ) = delete; - NonCopyable& operator = ( NonCopyable && ) = delete; - - protected: - NonCopyable(); - virtual ~NonCopyable(); - }; - - struct SourceLineInfo { - - SourceLineInfo() = delete; - SourceLineInfo( char const* _file, std::size_t _line ) noexcept - : file( _file ), - line( _line ) - {} - - SourceLineInfo( SourceLineInfo const& other ) = default; - SourceLineInfo& operator = ( SourceLineInfo const& ) = default; - SourceLineInfo( SourceLineInfo&& ) noexcept = default; - SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default; - - bool empty() const noexcept { return file[0] == '\0'; } - bool operator == ( SourceLineInfo const& other ) const noexcept; - bool operator < ( SourceLineInfo const& other ) const noexcept; - - char const* file; - std::size_t line; - }; - - std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); - - // Bring in operator<< from global namespace into Catch namespace - // This is necessary because the overload of operator<< above makes - // lookup stop at namespace Catch - using ::operator<<; - - // Use this in variadic streaming macros to allow - // >> +StreamEndStop - // as well as - // >> stuff +StreamEndStop - struct StreamEndStop { - std::string operator+() const; - }; - template - T const& operator + ( T const& value, StreamEndStop ) { - return value; - } -} - -#define CATCH_INTERNAL_LINEINFO \ - ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) - -// end catch_common.h -namespace Catch { - - struct RegistrarForTagAliases { - RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); - }; - -} // end namespace Catch - -#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION - -// end catch_tag_alias_autoregistrar.h -// start catch_test_registry.h - -// start catch_interfaces_testcase.h - -#include - -namespace Catch { - - class TestSpec; - - struct ITestInvoker { - virtual void invoke () const = 0; - virtual ~ITestInvoker(); - }; - - class TestCase; - struct IConfig; - - struct ITestCaseRegistry { - virtual ~ITestCaseRegistry(); - virtual std::vector const& getAllTests() const = 0; - virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; - }; - - bool isThrowSafe( TestCase const& testCase, IConfig const& config ); - bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); - std::vector const& getAllTestCasesSorted( IConfig const& config ); - -} - -// end catch_interfaces_testcase.h -// start catch_stringref.h - -#include -#include -#include -#include - -namespace Catch { - - /// A non-owning string class (similar to the forthcoming std::string_view) - /// Note that, because a StringRef may be a substring of another string, - /// it may not be null terminated. - class StringRef { - public: - using size_type = std::size_t; - using const_iterator = const char*; - - private: - static constexpr char const* const s_empty = ""; - - char const* m_start = s_empty; - size_type m_size = 0; - - public: // construction - constexpr StringRef() noexcept = default; - - StringRef( char const* rawChars ) noexcept; - - constexpr StringRef( char const* rawChars, size_type size ) noexcept - : m_start( rawChars ), - m_size( size ) - {} - - StringRef( std::string const& stdString ) noexcept - : m_start( stdString.c_str() ), - m_size( stdString.size() ) - {} - - explicit operator std::string() const { - return std::string(m_start, m_size); - } - - public: // operators - auto operator == ( StringRef const& other ) const noexcept -> bool; - auto operator != (StringRef const& other) const noexcept -> bool { - return !(*this == other); - } - - auto operator[] ( size_type index ) const noexcept -> char { - assert(index < m_size); - return m_start[index]; - } - - public: // named queries - constexpr auto empty() const noexcept -> bool { - return m_size == 0; - } - constexpr auto size() const noexcept -> size_type { - return m_size; - } - - // Returns the current start pointer. If the StringRef is not - // null-terminated, throws std::domain_exception - auto c_str() const -> char const*; - - public: // substrings and searches - // Returns a substring of [start, start + length). - // If start + length > size(), then the substring is [start, size()). - // If start > size(), then the substring is empty. - auto substr( size_type start, size_type length ) const noexcept -> StringRef; - - // Returns the current start pointer. May not be null-terminated. - auto data() const noexcept -> char const*; - - constexpr auto isNullTerminated() const noexcept -> bool { - return m_start[m_size] == '\0'; - } - - public: // iterators - constexpr const_iterator begin() const { return m_start; } - constexpr const_iterator end() const { return m_start + m_size; } - }; - - auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&; - auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&; - - constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { - return StringRef( rawChars, size ); - } -} // namespace Catch - -constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef { - return Catch::StringRef( rawChars, size ); -} - -// end catch_stringref.h -// start catch_preprocessor.hpp - - -#define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__ -#define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__))) - -#ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__ -// MSVC needs more evaluations -#define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__))) -#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__)) -#else -#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__) -#endif - -#define CATCH_REC_END(...) -#define CATCH_REC_OUT - -#define CATCH_EMPTY() -#define CATCH_DEFER(id) id CATCH_EMPTY() - -#define CATCH_REC_GET_END2() 0, CATCH_REC_END -#define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2 -#define CATCH_REC_GET_END(...) CATCH_REC_GET_END1 -#define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT -#define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0) -#define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next) - -#define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) - -#define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) - -// Applies the function macro `f` to each of the remaining parameters, inserts commas between the results, -// and passes userdata as the first parameter to each invocation, -// e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c) -#define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) - -#define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) - -#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param) -#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__ -#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__ -#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF -#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__) -#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__ -#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) -#else -// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF -#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__) -#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__ -#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) -#endif - -#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ -#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) - -#define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__) - -#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper()) -#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) -#else -#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper())) -#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) -#endif - -#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\ - CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__) - -#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0) -#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1) -#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2) -#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3) -#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4) -#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5) -#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6) -#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7) -#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8) -#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9) -#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) - -#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N - -#define INTERNAL_CATCH_TYPE_GEN\ - template struct TypeList {};\ - template\ - constexpr auto get_wrapper() noexcept -> TypeList { return {}; }\ - template class...> struct TemplateTypeList{};\ - template class...Cs>\ - constexpr auto get_wrapper() noexcept -> TemplateTypeList { return {}; }\ - template\ - struct append;\ - template\ - struct rewrap;\ - template class, typename...>\ - struct create;\ - template class, typename>\ - struct convert;\ - \ - template \ - struct append { using type = T; };\ - template< template class L1, typename...E1, template class L2, typename...E2, typename...Rest>\ - struct append, L2, Rest...> { using type = typename append, Rest...>::type; };\ - template< template class L1, typename...E1, typename...Rest>\ - struct append, TypeList, Rest...> { using type = L1; };\ - \ - template< template class Container, template class List, typename...elems>\ - struct rewrap, List> { using type = TypeList>; };\ - template< template class Container, template class List, class...Elems, typename...Elements>\ - struct rewrap, List, Elements...> { using type = typename append>, typename rewrap, Elements...>::type>::type; };\ - \ - template