diff --git a/.dockerignore b/.dockerignore index 5d2f070ee05..ac26bde50a1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -13,14 +13,10 @@ docker # Ignore a part of files under src src/**/.* src/**/*.asc -src/**/*.csv src/**/*.gif src/**/*.md src/**/*.pcd -src/**/*.png src/**/*.svg -!src/universe/autoware.universe/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/assets -!src/universe/autoware.universe/vehicle/autoware_raw_vehicle_cmd_converter/data/default # Ignore generated files by colcon build diff --git a/.github/actions/docker-build-and-push/action.yaml b/.github/actions/docker-build-and-push/action.yaml index 3d2af2f27ea..5bfd9102bd2 100644 --- a/.github/actions/docker-build-and-push/action.yaml +++ b/.github/actions/docker-build-and-push/action.yaml @@ -81,8 +81,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=base${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=base${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=base${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=base${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-base flavor: | latest=false @@ -93,8 +93,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=core-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=core-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=core-devel${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=core-devel${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-core-devel flavor: | latest=false @@ -105,8 +105,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe-sensing-perception-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe-sensing-perception-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe-sensing-perception-devel${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe-sensing-perception-devel${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-sensing-perception-devel flavor: | latest=false @@ -117,8 +117,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe-sensing-perception${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe-sensing-perception${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe-sensing-perception${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe-sensing-perception${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-sensing-perception flavor: | latest=false @@ -129,8 +129,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe-localization-mapping-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe-localization-mapping-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe-localization-mapping-devel${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe-localization-mapping-devel${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-localization-mapping-devel flavor: | latest=false @@ -141,8 +141,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe-localization-mapping${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe-localization-mapping${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe-localization-mapping${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe-localization-mapping${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-localization-mapping flavor: | latest=false @@ -153,8 +153,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe-planning-control-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe-planning-control-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe-planning-control-devel${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe-planning-control-devel${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-planning-control-devel flavor: | latest=false @@ -165,20 +165,44 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe-planning-control${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe-planning-control${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe-planning-control${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe-planning-control${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-planning-control flavor: | latest=false + - name: Docker meta for autoware:universe-vehicle-system-devel + id: meta-universe-vehicle-system-devel + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository_owner }}/${{ inputs.bake-target }} + tags: | + type=raw,value=universe-vehicle-system-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} + type=raw,value=universe-vehicle-system-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + bake-target: docker-metadata-action-universe-vehicle-system-devel + flavor: | + latest=false + + - name: Docker meta for autoware:universe-vehicle-system + id: meta-universe-vehicle-system + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository_owner }}/${{ inputs.bake-target }} + tags: | + type=raw,value=universe-vehicle-system${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} + type=raw,value=universe-vehicle-system${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + bake-target: docker-metadata-action-universe-vehicle-system + flavor: | + latest=false + - name: Docker meta for autoware:universe-devel id: meta-universe-devel uses: docker/metadata-action@v5 with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe-devel${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe-devel${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe-devel${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-devel flavor: | latest=false @@ -189,8 +213,8 @@ runs: with: images: ${{ github.repository_owner }}/${{ inputs.bake-target }} tags: | - type=raw,value=universe${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }} - type=raw,value=universe${{ inputs.tag-suffix && '-' }}${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }} + type=raw,value=universe${{ inputs.tag-suffix }}-${{ inputs.platform }} + type=raw,value=universe${{ inputs.tag-suffix }}-${{ steps.date.outputs.date }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe flavor: | latest=auto @@ -215,6 +239,8 @@ runs: ${{ steps.meta-universe-localization-mapping.outputs.bake-file }} ${{ steps.meta-universe-planning-control-devel.outputs.bake-file }} ${{ steps.meta-universe-planning-control.outputs.bake-file }} + ${{ steps.meta-universe-vehicle-system-devel.outputs.bake-file }} + ${{ steps.meta-universe-vehicle-system.outputs.bake-file }} ${{ steps.meta-universe-devel.outputs.bake-file }} ${{ steps.meta-universe.outputs.bake-file }} provenance: false diff --git a/.github/workflows/create-prs-to-update-vcs-repositories.yaml b/.github/workflows/create-prs-to-update-vcs-repositories.yaml new file mode 100644 index 00000000000..8eca0a8fb9b --- /dev/null +++ b/.github/workflows/create-prs-to-update-vcs-repositories.yaml @@ -0,0 +1,31 @@ +name: create-prs-to-update-vcs-repositories + +on: + schedule: + - cron: 0 0,6,12,18 * * * + workflow_dispatch: + +jobs: + create-version-update-pr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Generate GitHub App token + id: generate-token + uses: tibdex/github-app-token@v2 + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.PRIVATE_KEY }} + + - name: Create PRs to update VCS repositories + uses: autowarefoundation/autoware-github-actions/create-prs-to-update-vcs-repositories@v1 + with: + token: ${{ steps.generate-token.outputs.token }} + repo_name: autowarefoundation/autoware + parent_dir: . + targets: major minor patch + base_branch: main + new_branch_prefix: feat/update- + autoware_repos_file_name: autoware.repos + verbosity: 0 diff --git a/.github/workflows/docker-build-and-push-arm64.yaml b/.github/workflows/docker-build-and-push-arm64.yaml index 002f273b185..5448188c096 100644 --- a/.github/workflows/docker-build-and-push-arm64.yaml +++ b/.github/workflows/docker-build-and-push-arm64.yaml @@ -26,12 +26,12 @@ jobs: base_image_env: base_image lib_dir: aarch64 setup-args: --no-nvidia - additional-tag-suffix: "" + tag-suffix: "" - name: cuda platform: arm64 base_image_env: base_image lib_dir: aarch64 - additional-tag-suffix: cuda + tag-suffix: -cuda steps: - name: Check if PR author is the specific user id: author-check @@ -86,7 +86,7 @@ jobs: *.cache-from=type=registry,ref=${{ github.repository }}-buildcache:${{ matrix.name }}-${{ matrix.platform }}-${{ github.head_ref }} *.cache-from=type=registry,ref=${{ github.repository }}-buildcache:${{ matrix.name }}-${{ matrix.platform }}-main *.cache-to=type=registry,ref=${{ github.repository }}-buildcache:${{ matrix.name }}-${{ matrix.platform }}-${{ github.head_ref }},mode=max - tag-suffix: ${{ matrix.additional-tag-suffix }}-${{ matrix.platform }} + tag-suffix: ${{ matrix.tag-suffix }} dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }} - name: Show disk space diff --git a/.github/workflows/docker-build-and-push.yaml b/.github/workflows/docker-build-and-push.yaml index 29da33a5b1f..69bb1cd60ce 100644 --- a/.github/workflows/docker-build-and-push.yaml +++ b/.github/workflows/docker-build-and-push.yaml @@ -26,12 +26,12 @@ jobs: base_image_env: base_image lib_dir: x86_64 setup-args: --no-nvidia - additional-tag-suffix: "" + tag-suffix: "" - name: cuda platform: amd64 base_image_env: base_image lib_dir: x86_64 - additional-tag-suffix: cuda + tag-suffix: -cuda steps: - name: Check if PR author is the specific user id: author-check @@ -86,7 +86,7 @@ jobs: *.cache-from=type=registry,ref=${{ github.repository }}-buildcache:${{ matrix.name }}-${{ matrix.platform }}-${{ github.head_ref }} *.cache-from=type=registry,ref=${{ github.repository }}-buildcache:${{ matrix.name }}-${{ matrix.platform }}-main *.cache-to=type=registry,ref=${{ github.repository }}-buildcache:${{ matrix.name }}-${{ matrix.platform }}-${{ github.head_ref }},mode=max - tag-suffix: ${{ matrix.additional-tag-suffix }}-${{ matrix.platform }} + tag-suffix: ${{ matrix.tag-suffix }} dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }} - name: Show disk space diff --git a/.github/workflows/health-check-arm64.yaml b/.github/workflows/health-check-arm64.yaml index b90fac6b219..9ef1c8f5b61 100644 --- a/.github/workflows/health-check-arm64.yaml +++ b/.github/workflows/health-check-arm64.yaml @@ -24,12 +24,10 @@ jobs: base_image_env: base_image lib_dir: aarch64 setup-args: --no-nvidia - additional-tag-suffix: "" - name: cuda platform: arm64 base_image_env: base_image lib_dir: aarch64 - additional-tag-suffix: -cuda steps: # https://github.com/actions/checkout/issues/211 - name: Change permission of workspace diff --git a/.github/workflows/health-check.yaml b/.github/workflows/health-check.yaml index d0fbb81b554..3da9f52de8c 100644 --- a/.github/workflows/health-check.yaml +++ b/.github/workflows/health-check.yaml @@ -39,12 +39,10 @@ jobs: base_image_env: base_image lib_dir: x86_64 setup-args: --no-nvidia - additional-tag-suffix: "" - name: cuda platform: amd64 base_image_env: base_image lib_dir: x86_64 - additional-tag-suffix: -cuda steps: - name: Check out repository uses: actions/checkout@v4 diff --git a/.github/workflows/update-docker-manifest.yaml b/.github/workflows/update-docker-manifest.yaml index a0539b037ed..af9324fb162 100644 --- a/.github/workflows/update-docker-manifest.yaml +++ b/.github/workflows/update-docker-manifest.yaml @@ -2,7 +2,7 @@ name: update-docker-manifest on: schedule: - - cron: 0 0 * * * + - cron: 0 */2 * * * workflow_dispatch: jobs: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 26c5585f4fc..e6c3aba177d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,7 +38,7 @@ repos: - id: shellcheck - repo: https://github.com/scop/pre-commit-shfmt - rev: v3.8.0-1 + rev: v3.9.0-1 hooks: - id: shfmt args: [-w, -s, -i=4] diff --git a/ansible/playbooks/install_rviz_theme.yaml b/ansible/playbooks/install_rviz_theme.yaml new file mode 100644 index 00000000000..a30b0900ddf --- /dev/null +++ b/ansible/playbooks/install_rviz_theme.yaml @@ -0,0 +1,4 @@ +- name: Install RViz theme + hosts: localhost + roles: + - autoware.dev_env.qt5ct_setup diff --git a/ansible/playbooks/universe.yaml b/ansible/playbooks/universe.yaml index e443c041bc5..ce32248d98b 100644 --- a/ansible/playbooks/universe.yaml +++ b/ansible/playbooks/universe.yaml @@ -62,3 +62,6 @@ # ONNX files and other artifacts - role: autoware.dev_env.artifacts when: prompt_download_artifacts == 'y' + + # Qt5ct setup (RViz theme) + - role: autoware.dev_env.qt5ct_setup diff --git a/ansible/roles/qt5ct_setup/README.md b/ansible/roles/qt5ct_setup/README.md new file mode 100644 index 00000000000..41fc944eb4e --- /dev/null +++ b/ansible/roles/qt5ct_setup/README.md @@ -0,0 +1,60 @@ +# qt5ct_setup Ansible role + +## Overview + +The `qt5ct_setup` Ansible role automates the configuration of the `qt5ct` environment for Autoware. +It won't affect the system-wide configuration. + +## Installation + +Follow the instructions below to **install** or **update** the custom theme for `RViz2` in Autoware. + +> **Important:** Both commands must be run when you want to update the theme. + +```bash +cd ~/autoware # The root directory of the cloned repository +ansible-galaxy collection install -f -r "ansible-galaxy-requirements.yaml" +ansible-playbook autoware.dev_env.install_rviz_theme --ask-become-pass +``` + +## How to use the custom theme in RViz2 + +To apply a custom theme to RViz2, you can use the `qt5ct` platform theme. Follow these steps to ensure that the `QT_QPA_PLATFORMTHEME` environment variable is set correctly for your RViz2 instance when used with Autoware. + +### Manual setup for running RViz2 + +Before running RViz2 manually, set the `QT_QPA_PLATFORMTHEME` environment variable to `qt5ct`. +This ensures that the custom theme settings are applied. + +```bash +export QT_QPA_PLATFORMTHEME=qt5ct +``` + +Then, start RViz2 as usual. + +```bash +rviz2 +``` + +### Automatic setup in Autoware + +In Autoware, the `QT_QPA_PLATFORMTHEME` environment variable is automatically set within the main [autoware.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/autoware.launch.xml) file. +Therefore, you do not need to manually set this environment variable when launching Autoware. + +In the `autoware.launch.xml` file, RViz2 is configured with the following `` element: + +```xml + + + +``` + +This configuration automatically sets the `QT_QPA_PLATFORMTHEME` to `qt5ct` when RViz2 is launched as part of Autoware. +It also includes additional options such as respawn behavior and custom RViz2 configurations. diff --git a/ansible/roles/qt5ct_setup/defaults/main.yml b/ansible/roles/qt5ct_setup/defaults/main.yml new file mode 100644 index 00000000000..bdaab0e3e6d --- /dev/null +++ b/ansible/roles/qt5ct_setup/defaults/main.yml @@ -0,0 +1 @@ +# defaults file for qt5ct_setup diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/active/downarrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/active/downarrow.svg new file mode 100644 index 00000000000..22a70a5fbc9 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/active/downarrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/active/uparrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/active/uparrow.svg new file mode 100644 index 00000000000..b283329b32b --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/active/uparrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/branch-end.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/branch-end.svg new file mode 100755 index 00000000000..decd600a806 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/branch-end.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/branch-more.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/branch-more.svg new file mode 100755 index 00000000000..669c8ee6b77 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/branch-more.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/downarrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/downarrow.svg new file mode 100755 index 00000000000..22a70a5fbc9 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/downarrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/leftarrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/leftarrow.svg new file mode 100755 index 00000000000..a1b5eb770c3 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/leftarrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/radiobutton_checked.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/radiobutton_checked.svg new file mode 100755 index 00000000000..462030e6b75 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/radiobutton_checked.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/radiobutton_unchecked.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/radiobutton_unchecked.svg new file mode 100755 index 00000000000..73e58ac050b --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/radiobutton_unchecked.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/rightarrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/rightarrow.svg new file mode 100755 index 00000000000..31224808311 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/rightarrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/uparrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/uparrow.svg new file mode 100755 index 00000000000..b283329b32b --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/uparrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/vline.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/vline.svg new file mode 100755 index 00000000000..67f84120ce2 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/disabled/vline.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/add.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/add.svg new file mode 100644 index 00000000000..c747fc89c49 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-closed.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-closed.svg new file mode 100755 index 00000000000..43acdf27491 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-closed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-end.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-end.svg new file mode 100755 index 00000000000..87f7840f363 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-end.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-more.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-more.svg new file mode 100755 index 00000000000..9f8af0ba8c3 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-more.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-open.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-open.svg new file mode 100755 index 00000000000..d22353f4e9e --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/branch-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_disabled.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_disabled.svg new file mode 100644 index 00000000000..f737c436438 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_disabled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_enabled.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_enabled.svg new file mode 100644 index 00000000000..d9eee3a1e08 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_enabled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_hovered.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_hovered.svg new file mode 100644 index 00000000000..b49a8cf315b --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_hovered.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_pressed.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_pressed.svg new file mode 100644 index 00000000000..5d3bccb1941 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_checked_pressed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_disabled.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_disabled.svg new file mode 100644 index 00000000000..8f9b9ae512c --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_disabled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_enabled.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_enabled.svg new file mode 100644 index 00000000000..797fb421df9 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_enabled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_hovered.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_hovered.svg new file mode 100644 index 00000000000..43b20a76820 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_hovered.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_pressed.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_pressed.svg new file mode 100644 index 00000000000..a39172c056a --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_indeterminate_pressed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_disabled.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_disabled.svg new file mode 100644 index 00000000000..873587b1985 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_disabled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_enabled.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_enabled.svg new file mode 100644 index 00000000000..265a55067f5 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_enabled.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_hovered.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_hovered.svg new file mode 100644 index 00000000000..27990330dc2 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_hovered.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_pressed.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_pressed.svg new file mode 100644 index 00000000000..e9c0436eb7e --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/checkbox_unchecked_pressed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/close.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/close.svg new file mode 100755 index 00000000000..fed396b0d88 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/downarrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/downarrow.svg new file mode 100755 index 00000000000..8176e8f50b0 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/downarrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/float.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/float.svg new file mode 100755 index 00000000000..bb2383e4ec7 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/float.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/leftarrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/leftarrow.svg new file mode 100755 index 00000000000..e595c0d652d --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/leftarrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/minus.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/minus.svg new file mode 100644 index 00000000000..7be3c893e40 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/more.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/more.svg new file mode 100644 index 00000000000..c11e849e587 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_checked.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_checked.svg new file mode 100755 index 00000000000..ea2d8183e3d --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_checked.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_checked_invert.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_checked_invert.svg new file mode 100755 index 00000000000..92003b1b80c --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_checked_invert.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_unchecked.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_unchecked.svg new file mode 100755 index 00000000000..ec6ee7a3213 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_unchecked.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_unchecked_invert.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_unchecked_invert.svg new file mode 100755 index 00000000000..5defd965a50 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/radiobutton_unchecked_invert.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/rightarrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/rightarrow.svg new file mode 100755 index 00000000000..4845aa5975c --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/rightarrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/sizegrip.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/sizegrip.svg new file mode 100755 index 00000000000..6a3d5ec4839 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/sizegrip.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/slider.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/slider.svg new file mode 100755 index 00000000000..ecd7581285f --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/slider.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/splitter-horizontal.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/splitter-horizontal.svg new file mode 100644 index 00000000000..6be8cb04a16 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/splitter-horizontal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/splitter-vertical.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/splitter-vertical.svg new file mode 100644 index 00000000000..d4819f465e5 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/splitter-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/tab_close.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/tab_close.svg new file mode 100755 index 00000000000..3c758445d0a --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/tab_close.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/toolbar-handle-horizontal.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/toolbar-handle-horizontal.svg new file mode 100755 index 00000000000..0d639307250 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/toolbar-handle-horizontal.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/toolbar-handle-vertical.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/toolbar-handle-vertical.svg new file mode 100755 index 00000000000..b6b267ead6f --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/toolbar-handle-vertical.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/uparrow.svg b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/uparrow.svg new file mode 100755 index 00000000000..cab8eba2ab5 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware-rviz-icons/primary/uparrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ansible/roles/qt5ct_setup/files/autoware.qss b/ansible/roles/qt5ct_setup/files/autoware.qss new file mode 100644 index 00000000000..3bd40b42527 --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/autoware.qss @@ -0,0 +1,1392 @@ +/* ------------------------------------------------------------------------ */ +/* QtMaterial - https://github.com/UN-GCPDS/qt-material +/* By Yeison Cardona - GCPDS +/* ------------------------------------------------------------------------ */ + +* { + color: #ffffff; + font-family: Roboto, sans-serif; + font-size: 13px; + line-height: 13px; + selection-color: #0f1417; +} + +*:focus { + outline: none; +} + +/* Basic widgets */ + +QWidget { + background-color: #0f1417; +} + +QGroupBox, +QFrame { + background-color: #0f1417; +} + +QGroupBox.fill_background, +QFrame.fill_background { + background-color: #0f1417; +} + +QSplitter { + background-color: transparent; + border: none; +} + +QStatusBar { + color: #ffffff; + background-color: #0f1417; + border-radius: 0px; +} + +QScrollArea, +QStackedWidget, +QWidget > QToolBox, +QToolBox > QWidget, +QTabWidget > QWidget { + border: none; +} + +QTabWidget::pane { + border: none; +} + +/* ------------------------------------------------------------------------ */ +/* Inputs */ + +QDateEdit, +QDateTimeEdit, +QSpinBox, +QDoubleSpinBox, +QComboBox, +QLineEdit { + color: #ffffff; + padding-left: 16px; + border-radius: 0px; + height: 24px; + background-color: #0f1417; +} + +QListView { + color: #ffffff; + height: 24px; + background-color: #1b2023; + selection-background-color: #303538; + selection-color: #ffffff; +} + +QPlainTextEdit { + padding: 8px 0px; + background-color: #0f1417; + border: 2px solid #0f1417; +} + +QTextEdit { + padding: 8px 0px; + background-color: #0f1417; +} + +QSpinBox, +QDoubleSpinBox { + color: #ffffff; + background-color: #292d30; + height: 24px; + border-bottom: 1px solid #DFE3E7; + selection-background-color: #84c2e6; +} + +QAbstractSpinBox { + padding: 2px; +} + +QDateEdit:disabled, +QDateTimeEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QTextEdit:disabled, +QLineEdit:disabled { + color: rgba(255, 255, 255, 0.2); + background-color: rgba(35, 38, 41, 0.3); + border: 2px solid #232629; + border-width: 0 0 2px 0; + padding: 0px 16px; + border-radius: 0px; + height: 24px; +} + +/* ------------------------------------------------------------------------ */ +/* QComboBox */ + +QDateEdit, +QComboBox { + color: #ffffff; + height: 24px; + background-color: #292d30; + border-bottom: 1px solid #DFE3E7; +} + +QDateEdit:disabled, +QComboBox:disabled { + color: rgba(255, 255, 255, 0.2); + background-color: rgba(35, 38, 41, 0.3); + border-bottom: 2px solid #232629; +} + +QDateEdit::drop-down, +QComboBox::drop-down { + border: none; +} + +QDateEdit::down-arrow, +QComboBox::down-arrow { + image: url("/icons_path/active/downarrow.svg"); +} + +QDateEdit::down-arrow:focus, +QComboBox::down-arrow:focus { + image: url("/icons_path/primary/downarrow.svg"); +} + +QDateEdit::down-arrow:disabled, +QComboBox::down-arrow:disabled { + image: url("/icons_path/disabled/downarrow.svg"); +} + +QDateEdit QAbstractItemView, +QComboBox QAbstractItemView { + background-color: #0f1417; + padding: 4px; +} + +QDateEdit[frame="false"], +QComboBox[frame="false"] { + color: #ffffff; + background-color: transparent; + border: 1px solid transparent; +} + +QDateEdit[frame="false"]:disabled, +QComboBox[frame="false"]:disabled { + color: rgba(255, 255, 255, 0.2); +} + +/* ------------------------------------------------------------------------ */ +/* Spin buttons */ + +QDateTimeEdit::up-button, +QDoubleSpinBox::up-button, +QSpinBox::up-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 20px; + image: url("/icons_path/active/uparrow.svg"); + border-width: 0px; + margin-top: 5px; +} + +QTreeView QDateTimeEdit::up-button, +QTreeView QDoubleSpinBox::up-button, +QTreeView QSpinBox::up-button { + margin-top: 0px; +} + +QDateTimeEdit::up-button:disabled, +QDoubleSpinBox::up-button:disabled, +QSpinBox::up-button:disabled { + image: url("/icons_path/disabled/uparrow.svg"); +} + +QDateTimeEdit::down-button, +QDoubleSpinBox::down-button, +QSpinBox::down-button { + subcontrol-origin: border; + subcontrol-position: bottom right; + width: 20px; + image: url("/icons_path/active/downarrow.svg"); + border-width: 0px; + border-top-width: 0; + margin-bottom: 5px; +} + +QTreeView QDateTimeEdit::down-button, +QTreeView QDoubleSpinBox::down-button, +QTreeView QSpinBox::down-button { + margin-bottom: 0px; +} + +QDateTimeEdit::down-button:disabled, +QDoubleSpinBox::down-button:disabled, +QSpinBox::down-button:disabled { + image: url("/icons_path/disabled/downarrow.svg"); +} + +/* ------------------------------------------------------------------------ */ +/* QPushButton */ + +QPushButton { + text-transform: capitalize; + margin: 0px; + padding: 0px 16px; + height: 24px; + font-weight: bold; + color: #003546; + border: 2px solid rgba(255, 255, 255, 0); + border-radius: 14px; + background-color: #8bd0f0; +} + +QPushButton:checked, +QPushButton:pressed { + color: #003546; + background-color: #84c2e6; +} + +QPushButton:hover { + background-color: #84c2e6; + color: #003546; + border: 2px solid rgba(255, 255, 255, 0); +} + +QPushButton:flat { + margin: 0px; + color: #84c2e6; + border: none; + background-color: transparent; +} + +QPushButton:flat:hover { + background-color: #84c2e6; +} + +QPushButton:flat:pressed, +QPushButton:flat:checked { + background-color: #699bb8; +} + +QPushButton:disabled { + color: #6e7276; + background-color: #292d30; + border: 2px solid rgba(255, 255, 255, 0); +} + +QPushButton:flat:disabled { + color: #6e7276; + background-color: #292d30; + border: none; +} + +QPushButton:checked:disabled { + color: #6e7276; + background-color: #0f1417; + border: 2px solid rgba(255, 255, 255, 0); +} + +QToolButton:focus, +QPushButton:focus { + background-color: #84c2e6; +} + +QPushButton:checked:focus, +QPushButton:pressed:focus { + background-color: #699bb8; +} + +QPushButton:flat:focus { + border: none; + background-color: #84c2e6; +} + +/* ------------------------------------------------------------------------ */ +/* QTabBar */ + +QTabBar { + text-transform: capitalize; + font-weight: bold; +} + +QTabBar::tab { + color: #ffffff; + border-top: 2px solid rgba(255, 255, 255, 0); +} + +QTabBar::tab:bottom, +QTabBar::tab:top { + padding: 0 16px; + height: 28px; +} + +QTabBar::tab:left, +QTabBar::tab:right { + padding: 16px 0; + width: 28px; +} + +QTabBar::tab:top:selected, +QTabBar::tab:top:hover { + border-bottom: 2px solid #8bd0f0; +} + +QTabBar::tab:bottom:selected, +QTabBar::tab:bottom:hover { + border-top: 2px solid #8bd0f0; +} + +QTabBar::tab:right:selected, +QTabBar::tab:right:hover { + border-left: 2px solid #8bd0f0; +} + +QTabBar::tab:left:selected, +QTabBar::tab:left:hover { + border-right: 2px solid #8bd0f0; +} + +QTabBar::tab:hover { + color: #fff; + background-color: #303538; +} + +QTabBar::tab:selected { + color: #fff; + background-color: #292d30; +} + +/* pressed state */ +QTabBar::tab:pressed { + color: #fff; + background-color: #383b3f; +} + +QTabBar QToolButton:hover, +QTabBar QToolButton { + border: 0px; + background-color: #232629; +} + +QTabBar QToolButton::up-arrow { + image: url("/icons_path/primary/uparrow.svg"); + width: 28px; +} + +QTabBar QToolButton::down-arrow { + image: url("/icons_path/primary/downarrow.svg"); + width: 28px; +} + +QTabBar QToolButton::right-arrow { + image: url("/icons_path/disabled/rightarrow.svg"); + height: 28px; +} + +QTabBar QToolButton::left-arrow { + image: url("/icons_path/disabled/leftarrow.svg"); + height: 28px; +} + +QTabBar::close-button { + image: url("/icons_path/primary/tab_close.svg"); +} + +QTabBar::close-button:hover { + image: url("/icons_path/primary/tab_close.svg"); +} + +/* ------------------------------------------------------------------------ */ +/* QGroupBox */ + +QGroupBox { + padding: 16px; + padding-top: 36px; + text-transform: capitalize; +} + +QGroupBox::title { + color: #dfe3e7; + subcontrol-origin: margin; + subcontrol-position: top left; + padding: 16px; + background-color: transparent; + height: 36px; +} + +/* ------------------------------------------------------------------------ */ +/* QRadioButton and QCheckBox labels */ + +QRadioButton, +QCheckBox { + color: #84c2e6; + line-height: 12px; + height: 24px; + background-color: transparent; + spacing: 5px; +} + +QRadioButton:disabled, +QCheckBox:disabled { + color: #8bd0f0; +} + +/* ------------------------------------------------------------------------ */ +/* QRadioButton Indicator */ + +QRadioButton::indicator:checked { + image: url("/icons_path/primary/radiobutton_checked.svg"); +} + +QRadioButton::indicator:unchecked { + image: url("/icons_path/primary/radiobutton_unchecked.svg"); +} + +QRadioButton::indicator:checked:disabled { + image: url("/icons_path/disabled/radiobutton_checked.svg"); +} + +QRadioButton::indicator:unchecked:disabled { + image: url("/icons_path/disabled/radiobutton_unchecked.svg"); +} + +/* ------------------------------------------------------------------------ */ +/* QDockWidget */ + +QDockWidget { + color: #ffffff; + text-transform: capitalize; + border: 2px solid #232629; + titlebar-close-icon: url("/icons_path/primary/close.svg"); + titlebar-normal-icon: url("/icons_path/primary/float.svg"); + border-radius: 4px; +} + +QDockWidget::title { + text-align: left; + padding-left: 36px; + padding: 3px; + margin-top: 4px; +} + +/* ------------------------------------------------------------------------ */ +/* QMenu */ + +QMenu { + background-color: #1b2023; + margin: 10px; +} + +QMenu::item { + height: 14px; + margin: 4px; + padding: 0px; + color: #ffffff; +} + +QMenu::item:selected { + background-color: #303538; + margin-top: 0px; + margin-bottom: 0px; +} + +QMenu::item:disabled { + color: rgba(255, 255, 255, 0.3); +} + +QMenu::separator { + height: 1px; + margin: 2px; + background-color:#40484C; +} + +QMenu::right-arrow { + image: url("/icons_path/primary/rightarrow.svg"); + width: 16px; + height: 16px; +} + +QMenu::right-arrow:selected { + image: url("/icons_path/disabled/rightarrow.svg"); +} + +/* QMenu Checkboxes */ + +QMenu::indicator:non-exclusive:unchecked { + image: url("/icons_path/primary/checkbox_unchecked_enabled.svg"); +} + +QMenu::indicator:non-exclusive:unchecked:selected { + image: url("/icons_path/primary/checkbox_unchecked_hovered.svg"); +} + +QMenu::indicator:non-exclusive:checked { + image: url("/icons_path/primary/checkbox_checked_enabled.svg"); +} + +QMenu::indicator:non-exclusive:checked:selected { + image: url("/icons_path/primary/checkbox_checked_hovered.svg"); +} + +/* QMenu Radiobuttons */ + +QMenu::indicator:exclusive:unchecked { + image: url("/icons_path/primary/radiobutton_unchecked.svg"); +} + +QMenu::indicator:exclusive:unchecked:selected { + image: url("/icons_path/primary/radiobutton_unchecked_invert.svg"); +} + +QMenu::indicator:exclusive:checked { + image: url("/icons_path/primary/radiobutton_checked.svg"); +} + +QMenu::indicator:exclusive:checked:selected { + image: url("/icons_path/primary/radiobutton_checked_invert.svg"); +} + +/* ------------------------------------------------------------------------ */ +/* QMenuBar */ + +QMenuBar { + background-color: #0f1417; + color: #ffffff; + border-bottom: 2px solid rgba(255, 255, 255, 0); +} + +QMenuBar::item { + /* height: 32px; */ + padding: 4px; + background-color: transparent; + color: #ffffff; +} + +QMenuBar::item:selected, +QMenuBar::item:pressed { + color: #ffffff; + background-color: #303538; +} + +/* ------------------------------------------------------------------------ */ +/* QToolBox */ + +QToolBox::tab { + background-color: #0f1417; + color: #ffffff; + text-transform: capitalize; + border-radius: 4px; + padding-left: 15px; +} + +QToolBox::tab:selected, +QToolBox::tab:hover { + background-color: #84c2e6; +} + +/* ------------------------------------------------------------------------ */ +/* QProgressBar */ + +QProgressBar { + border-radius: 0; + background-color: #0f1417; + text-align: center; + color: transparent; +} + +QProgressBar::chunk { + background-color: #84c2e6; +} + +/* ------------------------------------------------------------------------ */ +/* QScrollBar */ + +QScrollBar { + border: 0; + background: rgba(255, 255, 255, 0.15); + border-radius: 5px; +} + +QScrollBar:horizontal { + height: 10px; +} + +QScrollBar:vertical { + width: 10px; +} + +QScrollBar::handle { + background: #8bd0f0; + border-radius: 5px; +} + +QScrollBar::handle:horizontal { + min-width: 24px; +} + +QScrollBar::handle:vertical { + min-height: 24px; +} + +QScrollBar::handle:hover { + background-color: #84c2e6; +} + +QScrollBar::handle:pressed { + background-color: #699bb8; +} + +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical, +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + border: 0; + background: transparent; + width: 0px; + height: 0px; +} + +QScrollBar::sub-page:horizontal, +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:vertical, +QScrollBar::add-page:vertical { + background: transparent; +} + +/* ------------------------------------------------------------------------ */ +/* QScrollBar-Big */ + +QScrollBar.big:horizontal { + border: 0; + background: #232629; + height: 36px; +} + +QScrollBar.big:vertical { + border: 0; + background: #232629; + width: 36px; +} + +QScrollBar.big::handle, +QScrollBar.big::handle:vertical:hover, +QScrollBar.big::handle:horizontal:hover { + background: #84c2e6; +} + +QScrollBar.big::handle:horizontal { + min-width: 24px; +} + +QScrollBar.big::handle:vertical { + min-height: 24px; +} + +QScrollBar.big::add-line:vertical, +QScrollBar.big::sub-line:vertical, +QScrollBar.big::add-line:horizontal, +QScrollBar.big::sub-line:horizontal { + border: 0; + background: transparent; + width: 0px; + height: 0px; +} + +/* ------------------------------------------------------------------------ */ +/* QSlider */ +QSlider { + min-height: 20px; + min-width: 20px; +} + +QSlider:horizontal { + min-height: 30px; + min-width: 30px; +} + +QSlider:vertical { +} + +QSlider::groove:horizontal { + border: 1px solid #262626; + height: 4px; + background: #0f1417; + margin: 0; +} + +QSlider::groove:vertical { + width: 4px; + background: #0f1417; + margin: 12px 0; +} + +QSlider::handle:horizontal { + width: 22px; + height: 18px; + margin: -9px -9px; +} + +QSlider::handle:vertical { + background: #84c2e6; + width: 9px; + height: 9px; + min-height: 0px; + margin: -9px -18px; +} + +QSlider::add-page { + background: #5e5e5e; +} + +QSlider::sub-page { + background: #84c2e6; +} + +/* ------------------------------------------------------------------------ */ +/* QLabel */ + +QLabel { + border: none; + background: transparent; + color: #ffffff; +} + +QLabel:disabled { + color: rgba(255, 255, 255, 0.2); +} + +/* ------------------------------------------------------------------------ */ +/* VLines and HLinex */ + +QFrame[frameShape="4"] { + border-width: 1px 0 0 0; + background: none; +} + +QFrame[frameShape="5"] { + border-width: 0 1px 0 0; + background: none; +} + +QFrame[frameShape="4"], +QFrame[frameShape="5"] { + border-color: #0f1417; +} + +/* ------------------------------------------------------------------------ */ +/* QToolBar */ + +QToolBar { + background: #0f1417; + border: 0px solid; +} + +QToolBar:horizontal { + /* border-bottom: 1px solid rgba(132, 194, 230, 0.7); */ + border-top: 1px solid rgba(132, 194, 230, 0.7); +} + +QToolBar:vertical { + border-right: 1px solid rgba(132, 194, 230, 0.7); + border-left: 1px solid rgba(132, 194, 230, 0.7); +} + +QToolBar::handle:horizontal { + image: url("/icons_path/primary/toolbar-handle-horizontal.svg"); +} + +QToolBar::handle:vertical { + image: url("/icons_path/primary/toolbar-handle-vertical.svg"); +} + +QToolBar::separator:horizontal { + border-top: 1px solid rgba(132, 194, 230, 0.7); + border-bottom: 1px solid rgba(132, 194, 230, 0.7); + width: 1px; +} + +QToolBar::separator:vertical { + border-top: 1px solid rgba(132, 194, 230, 0.7); + border-bottom: 1px solid rgba(132, 194, 230, 0.7); + height: 1px; +} + +/* ------------------------------------------------------------------------ */ +/* QToolButton */ + +QToolButton { + background: #171c1f; + border: 0px; + margin: 2px; + padding: 2px; + border-radius: 15px; + color: #8bd0f0; +} + +QToolButton:hover { + background: #262931; +} + +QToolButton:pressed { + background: #2d303a; +} + +QToolButton:checked { + background: #2d303a; + border: 1px solid #8bd0f0; +} + +/* ------------------------------------------------------------------------ */ +/* General viewers */ + +QTableView { + background-color: #0f1417; + border: 1px solid #232629; + border-radius: 4px; +} + +QTreeView, +QListView { + margin: 0px; + border: 0px; +} + +QTableView::item, +QTreeView::item, +QListView::item { + padding: 2px; + min-height: 12px; + color: #ffffff; + border-color: transparent; +} + +QListView::item { + margin-left: 0px; + margin-right: 2px; + background-color: #1b2023; +} + +/* ------------------------------------------------------------------------ */ +/* Items Selection */ + +QTableView::item:selected, +QTreeView::item:selected, +QListView::item:selected { + background-color: #303538; + color: #ffffff; +} + +QTableView::item:selected:focus, +QTreeView::item:selected:focus, +QListView::item:selected:focus { + color: #ffffff; +} + +QTableView::item:disabled { + color: #bdbdbd; + background-color: #303538; +} + +/* ------------------------------------------------------------------------ */ +/* QTreeView */ + +QTreeView::branch { + background-color: transparent; +} + +QTreeView::branch:hover { + background-color: transparent; +} + +QTreeView::branch:selected { + background-color: #303538; +} + +QTreeView::branch:closed:has-children:has-siblings, +QTreeView::branch:closed:has-children:!has-siblings { + image: url("/icons_path/primary/branch-closed.svg"); + margin-left: -8px; +} + +QTreeView::branch:open:has-children:!has-siblings, +QTreeView::branch:open:has-children:has-siblings { + image: url("/icons_path/primary/branch-open.svg"); + margin-left: -8px; +} + +/* Commented in case decided to show the branch icons */ +/* +QTreeView::branch:has-siblings:!adjoins-item { + border-image: url("/icons_path/disabled/vline.svg"); +} + +QTreeView::branch:has-siblings:adjoins-item { + border-image: url("/icons_path/disabled/branch-more.svg"); +} + +QTreeView::branch:!has-children:!has-siblings:adjoins-item, +QTreeView::branch:has-children:!has-siblings:adjoins-item { + border-image: url("/icons_path/disabled/branch-end.svg"); +} */ + +QTreeView QHeaderView::section { + border: none; +} + +/* QTableView */ + +QTableCornerButton::section { + background-color: #0f1417; + border-radius: 0px; + border-right: 1px solid; + border-bottom: 1px solid; + border-color: #31363b; +} + +QHeaderView { + border: none; +} + +QHeaderView::section { + color: rgba(255, 255, 255, 0.7); + text-transform: capitalize; + background-color: #0f1417; + padding: 4px 6px; + border-radius: 0px; + border-right: 1px solid; + border-bottom: 1px solid; + border-color: #31363b; +} + +QHeaderView::section:vertical { +} + +QHeaderView::section:horizontal { +} + +/* ------------------------------------------------------------------------ */ +/* QLCDNumber */ + +QLCDNumber { + color: #84c2e6; + background-color: #699bb8; + border: 1px solid rgba(132, 194, 230, 0.3); + border-radius: 4px; +} + +/* ------------------------------------------------------------------------ */ +/* QCalendarWidget */ + +QCalendarWidget { + min-height: 300px; +} + +#qt_calendar_prevmonth { + qproperty-icon: url("/icons_path/primary/leftarrow.svg"); +} + +#qt_calendar_nextmonth { + qproperty-icon: url("/icons_path/primary/rightarrow.svg"); +} + +/* ------------------------------------------------------------------------ */ +/* Inline QLineEdit */ + +QTreeView QLineEdit, +QTableView QLineEdit, +QListView QLineEdit { + color: #ffffff; + background-color: #0f1417; + /* border: 1px solid unset; */ + border-radius: unset; + padding: unset; + padding-left: unset; + height: unset; + border-width: unset; + border-top-left-radius: unset; + border-top-right-radius: unset; +} + +/* ------------------------------------------------------------------------ */ +/* QToolTip */ + +QToolTip { + padding: 4px; + border: 1px solid #31363b; + border-radius: 4px; + color: #ffffff; + background-color: #0f1417; +} + +/* ------------------------------------------------------------------------ */ +/* QDialog */ + +/* linux */ +QDialog QToolButton, +QDialog QToolButton:hover, +QDialog QToolButton:pressed, +QDialog QToolButton:checked { + border: 0px; + height: unset; + margin: unset; + padding: unset; + border-right: unset; + border-left: unset; + background-color: #84c2e6; + color: #ffffff; + border-radius: 8px; +} + +QDialog QToolButton:disabled { + background-color: #0f1417; + color: #ffffff; +} + +/* ------------------------------------------------------------------------ */ +/* Grips */ + +QMainWindow::separator:vertical, +QSplitter::handle:horizontal { + image: url("/icons_path/primary/splitter-vertical.svg"); + background-color: rgba(255, 255, 255, 0.03); + width: 15px; +} + +QMainWindow::separator:horizontal, +QSplitter::handle:vertical { + image: url("/icons_path/primary/splitter-horizontal.svg"); + background-color: rgba(255, 255, 255, 0.03); + height: 15px; +} + +QSizeGrip { + image: url("/icons_path/primary/sizegrip.svg"); + background-color: transparent; +} + +QMenuBar QToolButton:hover, +QMenuBar QToolButton:pressed, +QMenuBar QToolButton { + border-width: 0; + border-image: url("/icons_path/primary/rightarrow.svg"); + background-color: transparent; +} + +/* ------------------------------------------------------------------------ */ +/* Focus */ + +QDateTimeEdit:focus, +QSpinBox:focus, +QDoubleSpinBox:focus, +QComboBox:focus { + color: #fff; + border-bottom: 2px solid #8bd0f0; + background-color: #303538; +} + + +QDateTimeEdit::up-button:focus, +QDoubleSpinBox::up-button:focus, +QSpinBox::up-button:focus { + image: url("/icons_path/primary/uparrow.svg"); +} + +QDateTimeEdit::down-button:focus, +QDoubleSpinBox::down-button:focus, +QSpinBox::down-button:focus { + image: url("/icons_path/primary/downarrow.svg"); +} + +/* Special cases from rviz source code */ + +QToolButton[toolTip="Add a new tool"] { + qproperty-iconSize: 16px 16px; + qproperty-icon: url("/icons_path/primary/add.svg"); + background: #171c1f; + border: 0px; + margin: 2px; + padding: 0px; + border-radius: 12px; + width: 24px; + height: 24px; +} + +QToolButton[toolTip="Add a new tool"]:hover { + background: #262931; +} + +QToolButton[toolTip="Add a new tool"]:pressed { + background: #2d303a; +} + +QToolButton[toolTip="Remove a tool from the toolbar"] { + qproperty-iconSize: 16px 16px; + qproperty-icon: url("/icons_path/primary/minus.svg"); + background: #171c1f; + border: 0px; + margin: 2px; + padding: 0px; + border-radius: 12px; + width: 24px; + height: 24px; +} + +QToolButton[toolTip="Remove a tool from the toolbar"]:hover { + background: #262931; +} + +QToolButton[toolTip="Remove a tool from the toolbar"]:pressed { + background: #2d303a; +} + +QDialog { + background-color: #1b2023; +} + +QGroupBox[title="Tool Type"] > QTextBrowser { + background-color: #1b2023; +} + +QGroupBox[title="Tool Type"] { + background-color: #1b2023; +} +QGroupBox[title="Tool Type"] > QTreeView { + background-color: #1b2023; +} + +QGroupBox[title="Panel Name"] { + background-color: #1b2023; +} + +QGroupBox[title="Panel Name"] > QLineEdit { + background-color: #1b2023; +} + +QGroupBox[title="Panel Type"] > QTextBrowser { + background-color: #1b2023; +} + +QGroupBox[title="Panel Type"] { + background-color: #1b2023; +} +QGroupBox[title="Panel Type"] > QTreeView { + background-color: #1b2023; +} + +QGroupBox[title="Create visualization"] { + background-color: #1b2023; +} + +QGroupBox[title="Create visualization"] > QTextBrowser { + background-color: #1b2023; +} +QGroupBox[title="Display Name"] { + background-color: #1b2023; +} + +QGroupBox[title="Display Name"] > QLineEdit { + background-color: #1b2023; +} + +QGroupBox[title="Create visualization"] > QTabWidget { + background-color: #1b2023; +} + +QGroupBox[title="Create visualization"] QTabWidget QTreeWidget { + background-color: #1b2023; + color: white; +} +QGroupBox[title="Create visualization"] QCheckBox { + background-color: #1b2023; + color: white; +} + +QGroupBox[title="Create visualization"] QTabWidget::pane { + background-color: #1b2023; +} + +QGroupBox[title="Create visualization"] QTabBar::tab { + background-color: #1b2023; + color: white; +} + +QGroupBox[title="Create visualization"] QTabBar::tab:selected { + background-color: #383b3f; + border-bottom: 2px solid #8bd0f0; +} + +QGroupBox[title="Create visualization"] QTabBar::tab:!selected { + background-color: #1b2023; + border-bottom: 2px solid #1b2023; +} + +QGroupBox[title="Create visualization"] QTabBar::tab:hover { + color: #fff; + background-color: #292d30; + border-bottom: 2px solid #8bd0f0; +} + +QGroupBox[title="Create visualization"] QTabBar::tab:pressed { + color: #fff; + background-color: #383b3f; + border-bottom: 2px solid #8bd0f0; +} + +QGroupBox[title="Create visualization"] QFrame { + background-color: #1b2023; + border: none; + margin: 0px; + padding: 0px; +} + +QComboBox { + padding: 2px; + margin: 0px; +} + +/* QLineEdit */ +QLineEdit { + border-top-left-radius: 0px; + border-top-right-radius: 0px; + selection-background-color: #84c2e6; + +} + +QLineEdit > QPushButton { + qproperty-icon: url("/icons_path/primary/more.svg"); + qproperty-iconSize: 16px 16px; + qproperty-text: ""; + margin: 0px; + padding: 0px; + background: transparent; + border-radius: 0px; +} + +QLineEdit > QPushButton:hover { + background: transparent; + border-radius: 0px; +} + +/* Not entirely sure if this affects anything other than the close button */ +QDockWidget QToolButton { + qproperty-icon: url("/icons_path/primary/close.svg"); + qproperty-iconSize: 16px 16px; + background: transparent; +} + +QDockWidget QToolButton:hover { + background: #262931; +} + +/* Style the list view of the QComboBox */ +QComboBox QAbstractItemView { + background-color: #1b2023; + height: 16px; +} +QComboBox { + selection-background-color: #84c2e6; + selection-color: #1b2023; +} + + +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:checked, +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:checked:selected, +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:checked:focus, +QGroupBox[title="Create visualization"] QCheckBox::indicator:checked, +QTreeView::indicator:enabled:checked, +QTreeView::indicator:enabled:checked:selected, +QTreeView::indicator:enabled:checked:focus, +QTreeView::indicator:checked { + image: url("/icons_path/primary/checkbox_checked_enabled.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:checked:selected:active, +QTreeView::indicator:checked:selected:active { + image: url("/icons_path/primary/checkbox_checked_hovered.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:checked, +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:checked:selected, +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:checked:focus, +QGroupBox[title="Create visualization"] QCheckBox::indicator:checked:disabled, +QTreeView::indicator:disabled:checked, +QTreeView::indicator:disabled:checked:selected, +QTreeView::indicator:disabled:checked:focus, +QTreeView::indicator:checked:disabled { + image: url("/icons_path/primary/checkbox_checked_disabled.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:unchecked, +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:unchecked:selected, +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:unchecked:focus, +QGroupBox[title="Create visualization"] QCheckBox::indicator:unchecked, +QTreeView::indicator:enabled:unchecked, +QTreeView::indicator:enabled:unchecked:selected, +QTreeView::indicator:enabled:unchecked:focus, +QTreeView::indicator:unchecked { + image: url("/icons_path/primary/checkbox_unchecked_enabled.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:unchecked:selected:active, +QTreeView::indicator:unchecked:selected:active { + image: url("/icons_path/primary/checkbox_unchecked_hovered.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:unchecked, +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:unchecked:selected, +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:unchecked:focus, +QGroupBox[title="Create visualization"] QCheckBox::indicator:unchecked:disabled, +QTreeView::indicator:disabled:unchecked, +QTreeView::indicator:disabled:unchecked:selected, +QTreeView::indicator:disabled:unchecked:focus, +QTreeView::indicator:unchecked:disabled { + image: url("/icons_path/primary/checkbox_unchecked_disabled.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:indeterminate, +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:indeterminate:selected, +QGroupBox[title="Create visualization"] QCheckBox::indicator:enabled:indeterminate:focus, +QGroupBox[title="Create visualization"] QCheckBox::indicator:indeterminate, +QTreeView::indicator:enabled:indeterminate, +QTreeView::indicator:enabled:indeterminate:selected, +QTreeView::indicator:enabled:indeterminate:focus, +QTreeView::indicator:indeterminate { + image: url("/icons_path/primary/checkbox_indeterminate_enabled.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:indeterminate:selected:active, +QTreeView::indicator:indeterminate:selected:active { + image: url("/icons_path/primary/checkbox_indeterminate_hovered.svg"); +} + +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:indeterminate, +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:indeterminate:selected, +QGroupBox[title="Create visualization"] QCheckBox::indicator:disabled:indeterminate:focus, +QGroupBox[title="Create visualization"] QCheckBox::indicator:indeterminate:disabled, +QTreeView::indicator:disabled:indeterminate, +QTreeView::indicator:disabled:indeterminate:selected, +QTreeView::indicator:disabled:indeterminate:focus, +QTreeView::indicator:indeterminate:disabled { + image: url("/icons_path/primary/checkbox_indeterminate_disabled.svg"); +} +QGroupBox[title="Create visualization"] QCheckBox::indicator, +QTreeView::indicator { + width: 20px; + height: 20px; +} + + +QTreeView::item:disabled { + color: #888888; +} + + +QTreeView QComboBox, +QTreeView QSpinBox, +QTreeView QDoubleSpinBox { + border: 0px; +} + +QTreeView QComboBox:focus, +QTreeView QSpinBox:focus, +QTreeView QDoubleSpinBox:focus { + border: 0px; +} diff --git a/ansible/roles/qt5ct_setup/files/qt5ct.conf b/ansible/roles/qt5ct_setup/files/qt5ct.conf new file mode 100644 index 00000000000..90c386c617f --- /dev/null +++ b/ansible/roles/qt5ct_setup/files/qt5ct.conf @@ -0,0 +1,35 @@ +[Appearance] +color_scheme_path=/usr/share/qt5ct/colors/darker.conf +custom_palette=true +icon_theme=ubuntu-mono-dark +standard_dialogs=default +style=Fusion + +[Fonts] +fixed=@Variant(\0\0\0@\0\0\0\f\0R\0o\0\x62\0o\0t\0o\xbf\xf0\0\0\0\0\0\0\0\0\0\r\x5\x1\0\x32\x10) +general=@Variant(\0\0\0@\0\0\0\f\0R\0o\0\x62\0o\0t\0o\xbf\xf0\0\0\0\0\0\0\0\0\0\r\x5\x1\0\x32\x10) + +[Interface] +activate_item_on_single_click=1 +buttonbox_layout=3 +cursor_flash_time=1000 +dialog_buttons_have_icons=1 +double_click_interval=400 +gui_effects=@Invalid() +keyboard_scheme=2 +menus_have_icons=true +show_shortcuts_in_context_menus=true +stylesheets=autoware_stylesheet_path +toolbutton_style=0 +underline_shortcut=1 +wheel_scroll_lines=3 + +[QSSEditor] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\t\xde\0\0\x2~\0\0\f`\0\0\x4\x95\0\0\t\xde\0\0\x2\xa3\0\0\f`\0\0\x4\x95\0\0\0\0\0\0\0\0\n\0\0\0\t\xde\0\0\x2\xa3\0\0\f`\0\0\x4\x95) + +[SettingsWindow] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\f\x9c\0\0\x4\x19\0\0\xfz\0\0\a\x3\0\0\f\x9c\0\0\x4>\0\0\xfz\0\0\a\x3\0\0\0\0\0\0\0\0\xf\0\0\0\f\x9c\0\0\x4>\0\0\xfz\0\0\a\x3) + +[Troubleshooting] +force_raster_widgets=2 +ignored_applications=@Invalid() diff --git a/ansible/roles/qt5ct_setup/meta/main.yml b/ansible/roles/qt5ct_setup/meta/main.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/ansible/roles/qt5ct_setup/tasks/main.yml b/ansible/roles/qt5ct_setup/tasks/main.yml new file mode 100644 index 00000000000..fbb6c912117 --- /dev/null +++ b/ansible/roles/qt5ct_setup/tasks/main.yml @@ -0,0 +1,81 @@ +- name: Install qt5ct + ansible.builtin.apt: + name: qt5ct + state: present + become: true + +- name: Install rsync + ansible.builtin.package: + name: rsync + state: present + become: true + +- name: Remove qt5ct from auto-start + ansible.builtin.file: + path: /etc/X11/Xsession.d/99qt5ct + state: absent + become: true + +- name: Set variable qt5ct_config_dir + ansible.builtin.set_fact: + qt5ct_config_dir: "{{ ansible_env.HOME }}/.config/qt5ct" + +- name: Ensure qt5ct_config_dir exists + ansible.builtin.file: + path: "{{ qt5ct_config_dir }}" + state: directory + mode: "0755" + +- name: Print the role_path + ansible.builtin.debug: + msg: "The role_path is: {{ role_path }}" + +- name: Set icons_path variable + ansible.builtin.set_fact: + icons_path: "{{ qt5ct_config_dir }}/autoware-rviz-icons" + +- name: Remove autoware-rviz-icons folder if it exists + ansible.builtin.file: + path: "{{ icons_path }}" + state: absent + +# Replace rsync with synchronize which is an ansible wrapper for rsync +- name: Copy autoware-rviz-icons to the qt5ct config directory + ansible.posix.synchronize: + src: "{{ role_path }}/files/autoware-rviz-icons/" + dest: "{{ icons_path }}/" + mode: push + +- name: Fix the paths in the qss file + ansible.builtin.replace: + path: "{{ role_path }}/files/autoware.qss" + regexp: /icons_path/ + replace: "{{ icons_path }}/" + +- name: Ensure qt5ct_config_dir/qss exists + ansible.builtin.file: + path: "{{ qt5ct_config_dir }}/qss" + state: directory + mode: "0755" + +- name: Copy autoware.qss to the qt5ct qss directory + ansible.builtin.copy: + src: "{{ role_path }}/files/autoware.qss" + dest: "{{ qt5ct_config_dir }}/qss/autoware.qss" + force: true + backup: true + mode: "0644" + +- name: Fix the paths in the config file + ansible.builtin.replace: + path: "{{ role_path }}/files/qt5ct.conf" + regexp: autoware_stylesheet_path + replace: "{{ qt5ct_config_dir }}/qss/autoware.qss" + +- name: Copy qt5ct.conf to the config directory + ansible.builtin.copy: + src: "{{ role_path }}/files/qt5ct.conf" + dest: "{{ ansible_env.HOME }}/.config/qt5ct/qt5ct.conf" + force: true + backup: true + mode: "0644" diff --git a/autoware.repos b/autoware.repos index a61cd39ba5f..bd3b94c0240 100644 --- a/autoware.repos +++ b/autoware.repos @@ -3,7 +3,7 @@ repositories: core/autoware_msgs: type: git url: https://github.com/autowarefoundation/autoware_msgs.git - version: 1.1.0 + version: 1.2.0 core/autoware_adapi_msgs: type: git url: https://github.com/autowarefoundation/autoware_adapi_msgs.git @@ -100,17 +100,17 @@ repositories: sensor_component/external/nebula: type: git url: https://github.com/tier4/nebula.git - version: main + version: v0.2.1 # Fork of transport_drivers that enables reduction of copy operations sensor_component/transport_drivers: type: git url: https://github.com/autowarefoundation/transport_drivers - version: mutable-buffer-in-udp-callback + version: main # Continental compatible version of ROS 2 socket CAN sensor_component/ros2_socketcan: type: git url: https://github.com/autowarefoundation/ros2_socketcan - version: feat/continental_fd + version: main # sensor_kit sensor_kit/sample_sensor_kit_launch: type: git diff --git a/docker/Dockerfile b/docker/Dockerfile index bc2917ca949..efde0797845 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -141,6 +141,29 @@ RUN rosdep keys --dependency-types=exec --ignore-src --from-paths src \ > /rosdep-universe-planning-control-exec-depend-packages.txt \ && cat /rosdep-universe-planning-control-exec-depend-packages.txt +FROM rosdep-depend AS rosdep-universe-vehicle-system-depend +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO + +COPY src/universe/autoware.universe/vehicle /autoware/src/universe/autoware.universe/vehicle +COPY src/universe/autoware.universe/system /autoware/src/universe/autoware.universe/system +COPY src/universe/autoware.universe/map/autoware_map_height_fitter /autoware/src/universe/autoware.universe/map/autoware_map_height_fitter +COPY src/universe/autoware.universe/localization/autoware_pose2twist /autoware/src/universe/autoware.universe/localization/autoware_pose2twist +RUN rosdep keys --ignore-src --from-paths src \ + | xargs rosdep resolve --rosdistro ${ROS_DISTRO} \ + | grep -v '^#' \ + | sed 's/ \+/\n/g'\ + | sort \ + > /rosdep-universe-vehicle-system-depend-packages.txt \ + && cat /rosdep-universe-vehicle-system-depend-packages.txt +RUN rosdep keys --dependency-types=exec --ignore-src --from-paths src \ + | xargs rosdep resolve --rosdistro ${ROS_DISTRO} \ + | grep -v '^#' \ + | sed 's/ \+/\n/g'\ + | sort \ + > /rosdep-universe-vehicle-system-exec-depend-packages.txt \ + && cat /rosdep-universe-vehicle-system-exec-depend-packages.txt + FROM rosdep-depend AS rosdep-universe-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO @@ -334,6 +357,40 @@ RUN --mount=type=cache,target=${CCACHE_DIR} \ ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] +FROM universe-common-devel AS universe-vehicle-system-devel +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO +ENV CCACHE_DIR="/root/.ccache" + +# Install rosdep dependencies +COPY --from=rosdep-universe-vehicle-system-depend /rosdep-universe-vehicle-system-depend-packages.txt /tmp/rosdep-universe-vehicle-system-depend-packages.txt +# hadolint ignore=SC2002 +RUN --mount=type=ssh \ + apt-get update \ + && cat /tmp/rosdep-universe-vehicle-system-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ + && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache + +# hadolint ignore=SC1091 +RUN --mount=type=cache,target=${CCACHE_DIR} \ + --mount=type=bind,from=rosdep-universe-vehicle-system-depend,source=/autoware/src/universe/autoware.universe/vehicle,target=/autoware/src/universe/autoware.universe/vehicle \ + --mount=type=bind,from=rosdep-universe-vehicle-system-depend,source=/autoware/src/universe/autoware.universe/system,target=/autoware/src/universe/autoware.universe/system \ + --mount=type=bind,from=rosdep-universe-vehicle-system-depend,source=/autoware/src/universe/autoware.universe/map/autoware_map_height_fitter,target=/autoware/src/universe/autoware.universe/map/autoware_map_height_fitter \ + --mount=type=bind,from=rosdep-universe-vehicle-system-depend,source=/autoware/src/universe/autoware.universe/localization/autoware_pose2twist,target=/autoware/src/universe/autoware.universe/localization/autoware_pose2twist \ + source /opt/ros/"$ROS_DISTRO"/setup.bash \ + && source /opt/autoware/setup.bash \ + && du -sh ${CCACHE_DIR} && ccache -s \ + && colcon build --cmake-args \ + " -Wno-dev" \ + " --no-warn-unused-cli" \ + --merge-install \ + --install-base /opt/autoware \ + --mixin release compile-commands ccache \ + && du -sh ${CCACHE_DIR} && ccache -s \ + && rm -rf /autoware/build + +ENTRYPOINT ["/ros_entrypoint.sh"] +CMD ["/bin/bash"] + FROM universe-common-devel AS universe-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO @@ -350,6 +407,7 @@ RUN --mount=type=ssh \ COPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware COPY --from=universe-localization-mapping-devel /opt/autoware /opt/autoware COPY --from=universe-planning-control-devel /opt/autoware /opt/autoware +COPY --from=universe-vehicle-system-devel /opt/autoware /opt/autoware # hadolint ignore=SC1091 RUN --mount=type=cache,target=${CCACHE_DIR} \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/launcher,target=/autoware/src/launcher \ @@ -359,9 +417,7 @@ RUN --mount=type=cache,target=${CCACHE_DIR} \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/evaluator,target=/autoware/src/universe/autoware.universe/evaluator \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/launch,target=/autoware/src/universe/autoware.universe/launch \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/simulator,target=/autoware/src/universe/autoware.universe/simulator \ - --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/system,target=/autoware/src/universe/autoware.universe/system \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/tools,target=/autoware/src/universe/autoware.universe/tools \ - --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/vehicle,target=/autoware/src/universe/autoware.universe/vehicle \ --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/vehicle,target=/autoware/src/vehicle \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ @@ -480,6 +536,40 @@ RUN echo "source /opt/autoware/setup.bash" > /etc/bash.bashrc ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] +FROM base AS universe-vehicle-system +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO +ARG LIB_DIR +ARG SETUP_ARGS + +# Set up runtime environment and artifacts +COPY --from=rosdep-universe-vehicle-system-depend /rosdep-universe-vehicle-system-exec-depend-packages.txt /tmp/rosdep-universe-vehicle-system-exec-depend-packages.txt +# hadolint ignore=SC2002 +RUN --mount=type=ssh \ + --mount=type=cache,target=/var/cache/apt,sharing=locked \ + ./setup-dev-env.sh -y --module all ${SETUP_ARGS} --no-cuda-drivers --runtime openadkit \ + && pip uninstall -y ansible ansible-core \ + && apt-get update \ + && cat /tmp/rosdep-universe-vehicle-system-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ + && apt-get autoremove -y && rm -rf "$HOME"/.cache \ + && find /usr/lib/$LIB_DIR-linux-gnu -name "*.a" -type f -delete \ + && find / -name "*.o" -type f -delete \ + && find / -name "*.h" -type f -delete \ + && find / -name "*.hpp" -type f -delete \ + && rm -rf /autoware/ansible /autoware/ansible-galaxy-requirements.yaml /autoware/setup-dev-env.sh /autoware/*.env \ + /root/.local/pipx /opt/ros/"$ROS_DISTRO"/include /etc/apt/sources.list.d/cuda*.list \ + /etc/apt/sources.list.d/docker.list /etc/apt/sources.list.d/nvidia-docker.list \ + /usr/include /usr/share/doc /usr/lib/gcc /usr/lib/jvm /usr/lib/llvm* + +COPY --from=universe-vehicle-system-devel /opt/autoware /opt/autoware + +# Copy bash aliases +COPY docker/etc/.bash_aliases /root/.bash_aliases +RUN echo "source /opt/autoware/setup.bash" > /etc/bash.bashrc + +ENTRYPOINT ["/ros_entrypoint.sh"] +CMD ["/bin/bash"] + FROM base AS universe SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO diff --git a/docker/Dockerfile.svg b/docker/Dockerfile.svg index a54e635be43..a8d5d4e1d37 100644 --- a/docker/Dockerfile.svg +++ b/docker/Dockerfile.svg @@ -1,352 +1,414 @@ - - - + + G - + cluster_legend - + key -FROM ...  -COPY --from=...  -RUN --mount=(.*)from=...  +FROM ...  +COPY --from=...  +RUN --mount=(.*)from=...  key2 -  -  -  +  +  +  key:e->key2:w - - + + key:e->key2:w - - + + key:e->key2:w - - + + external_image_0 - -$BASE_IMAGE + +$BASE_IMAGE stage_0 - -base + +base external_image_0->stage_0 - - + + stage_1 - -rosdep-depend + +rosdep-depend external_image_0->stage_1 - - + + - + -stage_6 - -core-devel +stage_7 + +core-devel - + -stage_0->stage_6 - - +stage_0->stage_7 + + - + -stage_12 - -universe-sensing-perception +stage_14 + +universe-sensing-perception - + -stage_0->stage_12 - - - +stage_0->stage_14 + + + - + -stage_13 - -universe-localization-mapping +stage_15 + +universe-localization-mapping - + -stage_0->stage_13 - +stage_0->stage_15 + + - + -stage_14 - -universe-planning-control +stage_16 + +universe-planning-control - + -stage_0->stage_14 - - - +stage_0->stage_16 + + + + - + -stage_15 - -universe +stage_17 + +universe-vehicle-system - + -stage_0->stage_15 - - +stage_0->stage_17 + - - -stage_1->stage_6 - - + + +stage_18 + +universe + + + +stage_0->stage_18 + + + + + +stage_1->stage_7 + + - + stage_2 - -rosdep-universe-sensing-perception-depend + +rosdep-universe-sensing-perception-depend - + stage_1->stage_2 - - + + - + stage_3 - -rosdep-universe-localization-mapping-depend + +rosdep-universe-localization-mapping-depend - + stage_1->stage_3 - - + + - + stage_4 - -rosdep-universe-planning-control-depend + +rosdep-universe-planning-control-depend - + stage_1->stage_4 - - + + + - + stage_5 - -rosdep-universe-depend + +rosdep-universe-vehicle-system-depend - + stage_1->stage_5 - - - - - - -stage_7 - -universe-common-devel - - - -stage_1->stage_7 - - + + - - -stage_6->stage_7 - - + + +stage_6 + +rosdep-universe-depend - - -stage_2->stage_12 - - + + +stage_1->stage_6 + + + - + stage_8 - -universe-sensing-perception-devel + +universe-common-devel - - -stage_2->stage_8 - - + + +stage_1->stage_8 + + - - -stage_3->stage_13 - - - + + +stage_7->stage_8 + + + + + +stage_2->stage_14 + + - + stage_9 - -universe-localization-mapping-devel + +universe-sensing-perception-devel - - -stage_3->stage_9 - - + + +stage_2->stage_9 + + - - -stage_4->stage_14 - - + + +stage_3->stage_15 + + - + stage_10 - -universe-planning-control-devel + +universe-localization-mapping-devel - - -stage_4->stage_10 - - + + +stage_3->stage_10 + + - - -stage_5->stage_15 - - + + +stage_4->stage_16 + + - + stage_11 - -universe-devel + +universe-planning-control-devel - - -stage_5->stage_11 - - + + +stage_4->stage_11 + + - - -stage_7->stage_8 - - + + +stage_5->stage_17 + + + - - -stage_7->stage_9 - - + + +stage_12 + +universe-vehicle-system-devel - + + +stage_5->stage_12 + + + + -stage_7->stage_10 - - +stage_6->stage_18 + + - - -stage_7->stage_11 - - + + +stage_13 + +universe-devel - - -stage_8->stage_12 - - + + +stage_6->stage_13 + + - + -stage_8->stage_11 - - +stage_8->stage_9 + + - - -stage_9->stage_13 - - + + +stage_8->stage_10 + + - + -stage_9->stage_11 - - +stage_8->stage_11 + + - - -stage_10->stage_14 - - + + +stage_8->stage_12 + + - + -stage_10->stage_11 - - +stage_8->stage_13 + + - + -stage_11->stage_15 - - +stage_9->stage_14 + + + + + +stage_9->stage_13 + + + + + +stage_10->stage_15 + + + + + +stage_10->stage_13 + + + + + +stage_11->stage_16 + + + + + +stage_11->stage_13 + + + + + +stage_12->stage_17 + + + + + +stage_12->stage_13 + + + + + +stage_13->stage_18 + + diff --git a/docker/README.md b/docker/README.md index 3d600ccfe30..2dc13c925bf 100644 --- a/docker/README.md +++ b/docker/README.md @@ -4,6 +4,68 @@ Detailed instructions on how to use the containers can be found in the [Open AD Kit documentation](https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/docker-installation/). +## Development containers + +When using Open AD Kit as a development container, it is easy to use Autoware's all-in-one development container image, `ghcr.io/autowarefoundation/autoware:universe-devel-cuda`. +If you do not need the CUDA drivers, you can also use the smaller image `ghcr.io/autowarefoundation/autoware:universe-devel`. + +```shell +$ git clone git@github.com:autowarefoundation/autoware.git +$ cd autoware +$ vcs import src < autoware.repos +$ docker run -it --rm \ + –v $PWD/src/universe/autoware.universe/XXX/autoware_YYY:/autoware/src/autoware_YYY \ + ghcr.io/autowarefoundation/autoware:universe-devel-cuda +$ colcon build --mixin debug compile-commands +$ source install/setup.bash +$ ros2 run --prefix "gdb -ex run --args" autoware_YYY ZZZ +``` + +For example, if you want to make modifications to [`autoware.universe/perception/autoware_bytetrack`](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_bytetrack), you can execute the following commands to perform the volume mount and debug build and execution of only the `autoware_bytetrack`. + +Note that `gdb` is not currently installed in the development containers, but it would be installed in the near future. + +```shell +$ docker run -it --rm \ + -v $PWD/src/universe/autoware.universe/perception/autoware_bytetrack:/autoware/src/autoware_bytetrack \ + ghcr.io/autowarefoundation/autoware:universe-devel-cuda +$ root@a566e785c4d2:/autoware# colcon build --mixin debug compile-commands +Starting >>> autoware_bytetrack +[Processing: autoware_bytetrack] +Finished <<< autoware_bytetrack [37.9s] + +Summary: 1 package finished [38.1s] +$ root@a566e785c4d2:/autoware# source install/setup.bash +$ root@a566e785c4d2:/autoware# apt update && apt install gdb +$ root@a566e785c4d2:/autoware# ros2 run --prefix "gdb -ex run --args" autoware_bytetrack bytetrack_node_exe +GNU gdb (Ubuntu 12.1-0ubuntu1~22.04.2) 12.1 +... +[Thread debugging using libthread_db enabled] +... +[New Thread 0x7ff6f3fff640 (LWP 1205)] +Init ByteTrack! +``` + +## Runtime containers + +In the execution container, there is the all-in-one runtime container for Autoware, `ghcr.io/autowarefoundation/autoware:universe-cuda`, and the multi-containerized `ghcr.io/autowarefoundation/autoware:universe-***-cuda` for each component of Autoware Universe. + +The all-in-one execution container also has the autoware_launch package installed, allowing it to be started in the same way as a locally built Autoware. + +```shell +git clone git@github.com:autowarefoundation/autoware.git +cd autoware +docker run -it --rm ghcr.io/autowarefoundation/autoware:universe-cuda +ros2 launch autoware_launch planning_simulator.launch.xml map_path:=... +``` + +For example, if you want to run the runtime container that only includes the `sensing/perception` components, you can execute it as follows. + +```shell +docker run -it --rm ghcr.io/autowarefoundation/autoware:universe-sensing-perception-cuda +ros2 launch autoware_pointcloud_preprocessor preprocessor.launch.xml +``` + ## Multi-stage Dockerfile structure ![](./Dockerfile.svg) @@ -76,6 +138,17 @@ This stage installs the dependency packages based on `/rosdep-universe-planning- This stage is a Autoware Universe Planning/Control runtime container. It only includes the dependencies given by `/rosdep-universe-planning-control-exec-depend-packages.txt` and the binaries built in the `universe-planning-control-devel` stage. +### `universe-vehicle-system-devel` + +This stage installs the dependency packages based on `/rosdep-universe-vehicle-system-depend-packages.txt` and build the packages under the following directories of `autoware.repos`. + +- `universe/autoware.universe/vehicle` +- `universe/autoware.universe/system` + +### `universe-vehicle-system` + +This stage is a Autoware Universe Vehicle/System runtime container. It only includes the dependencies given by `/rosdep-universe-vehicle-system-exec-depend-packages.txt` and the binaries built in the `universe-vehicle-system-devel` stage. + ### `universe-devel` This stage installs the dependency packages based on `/rosdep-universe-depend-packages.txt` and build the remaining packages of `autoware.repos`: diff --git a/docker/docker-bake.hcl b/docker/docker-bake.hcl index cc544f2409e..35d0f7fdbfc 100644 --- a/docker/docker-bake.hcl +++ b/docker/docker-bake.hcl @@ -8,6 +8,8 @@ group "default" { "universe-localization-mapping", "universe-planning-control-devel", "universe-planning-control", + "universe-vehicle-system-devel", + "universe-vehicle-system", "universe-devel", "universe" ] @@ -22,6 +24,8 @@ target "docker-metadata-action-universe-localization-mapping-devel" {} target "docker-metadata-action-universe-localization-mapping" {} target "docker-metadata-action-universe-planning-control-devel" {} target "docker-metadata-action-universe-planning-control" {} +target "docker-metadata-action-universe-vehicle-system-devel" {} +target "docker-metadata-action-universe-vehicle-system" {} target "docker-metadata-action-universe-devel" {} target "docker-metadata-action-universe" {} @@ -73,6 +77,18 @@ target "universe-planning-control" { target = "universe-planning-control" } +target "universe-vehicle-system-devel" { + inherits = ["docker-metadata-action-universe-vehicle-system-devel"] + dockerfile = "docker/Dockerfile" + target = "universe-vehicle-system-devel" +} + +target "universe-vehicle-system" { + inherits = ["docker-metadata-action-universe-vehicle-system"] + dockerfile = "docker/Dockerfile" + target = "universe-vehicle-system" +} + target "universe-devel" { inherits = ["docker-metadata-action-universe-devel"] dockerfile = "docker/Dockerfile"