Repository: autowarefoundation/autoware Branch: main Commit: 181bab42929e Files: 209 Total size: 437.2 KB Directory structure: gitextract_poq88meg/ ├── .ansible-lint ├── .clang-format ├── .clang-tidy ├── .clang-tidy-ci ├── .devcontainer/ │ ├── Dockerfile │ ├── core-devel/ │ │ └── devcontainer.json │ ├── universe-devel/ │ │ └── devcontainer.json │ └── universe-devel-cuda/ │ └── devcontainer.json ├── .dockerignore ├── .fdignore ├── .github/ │ ├── CODEOWNERS │ ├── DISCUSSION_TEMPLATE/ │ │ └── general.yaml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.yaml │ │ ├── config.yml │ │ ├── simple-issue.yaml │ │ └── task.yaml │ ├── actions/ │ │ ├── combine-multi-arch-images/ │ │ │ └── action.yaml │ │ ├── docker-build/ │ │ │ └── action.yaml │ │ ├── docker-build-and-push/ │ │ │ └── action.yaml │ │ ├── docker-build-and-push-base/ │ │ │ └── action.yaml │ │ ├── docker-build-and-push-cuda/ │ │ │ └── action.yaml │ │ ├── docker-build-and-push-tools/ │ │ │ └── action.yaml │ │ └── free-disk-space/ │ │ └── action.yaml │ ├── dependabot.yaml │ ├── pull_request_template.md │ ├── stale.yml │ ├── sync-files.yaml │ └── workflows/ │ ├── autoware-base.yaml │ ├── backport.yaml │ ├── bump-repo-versions-autoware.yaml │ ├── bump-repo-versions-simulator.yaml │ ├── bump-repo-versions-tools.yaml │ ├── comment-on-pr.yaml │ ├── dco.yaml │ ├── docker-build-and-push.yaml │ ├── github-release.yaml │ ├── health-check.yaml │ ├── keep-build-cache-small.yaml │ ├── load-env.yaml │ ├── mirror-main-branch.yaml │ ├── pre-commit-ansible-autoupdate.yaml │ ├── pre-commit-ansible.yaml │ ├── pre-commit-optional.yaml │ ├── pre-commit.yaml │ ├── scenario-test-reusable.yaml │ ├── scenario-test.yaml │ ├── semantic-pull-request.yaml │ ├── setup-docker.yaml │ ├── setup-universe.yaml │ ├── spell-check-daily.yaml │ ├── spell-check-differential.yaml │ └── sync-files.yaml ├── .gitignore ├── .hadolint.yaml ├── .markdown-link-check.json ├── .markdownlint.yaml ├── .pre-commit-config-ansible.yaml ├── .pre-commit-config-optional.yaml ├── .pre-commit-config.yaml ├── .prettierignore ├── .prettierrc.yaml ├── .rgignore ├── .shellcheckrc ├── .webauto-ci/ │ └── main/ │ ├── autoware-build/ │ │ └── run.sh │ ├── autoware-setup/ │ │ └── run.sh │ └── environment-setup/ │ └── run.sh ├── .webauto-ci.yaml ├── .yamllint.yaml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CPPLINT.cfg ├── DISCLAIMER.md ├── LICENSE ├── NOTICE ├── README.md ├── amd64.env ├── amd64_jazzy.env ├── ansible/ │ ├── .gitignore │ ├── COLCON_IGNORE │ ├── README.md │ ├── galaxy.yml │ ├── playbooks/ │ │ ├── docker.yaml │ │ ├── download_artifacts.yaml │ │ ├── install_rviz_theme.yaml │ │ ├── install_spconv.yaml │ │ ├── openadkit.yaml │ │ ├── role_rmw_implementation.yaml │ │ ├── setup_acados.yaml │ │ ├── telegraf.yaml │ │ └── universe.yaml │ └── roles/ │ ├── acados/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── agnocast/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── artifacts/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── build_tools/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── cuda/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── dev_tools/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── docker_engine/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── gdown/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── geographiclib/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── kisak_mesa/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── nvidia_container_toolkit/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── qt5ct_setup/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── files/ │ │ │ ├── autoware.qss │ │ │ └── qt5ct.conf │ │ ├── meta/ │ │ │ └── main.yml │ │ └── tasks/ │ │ └── main.yml │ ├── rmw_implementation/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── ros2/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── ros2_dev_tools/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── spconv/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ ├── telegraf/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yaml │ │ ├── files/ │ │ │ ├── get_telegraf_proccpu_json.sh │ │ │ ├── get_telegraf_procmem_json.sh │ │ │ └── telegraf.conf │ │ ├── handlers/ │ │ │ └── main.yaml │ │ ├── meta/ │ │ │ └── main.yaml │ │ └── tasks/ │ │ └── main.yaml │ └── tensorrt/ │ ├── README.md │ ├── defaults/ │ │ └── main.yaml │ ├── meta/ │ │ └── main.yaml │ └── tasks/ │ └── main.yaml ├── ansible-galaxy-requirements.yaml ├── arm64.env ├── docker/ │ ├── Dockerfile │ ├── Dockerfile.base │ ├── README.md │ ├── build.sh │ ├── docker-bake-base.hcl │ ├── docker-bake-cuda.hcl │ ├── docker-bake.hcl │ ├── docker-compose.gpu.yaml │ ├── docker-compose.yaml │ ├── etc/ │ │ ├── .bash_aliases │ │ └── ros_entrypoint.sh │ ├── logging-simulation.env │ ├── logging-simulation.gpu.env │ ├── planning-simulation.env │ ├── run.sh │ ├── scripts/ │ │ ├── build_and_clean.sh │ │ ├── cleanup_apt.sh │ │ ├── cleanup_system.sh │ │ └── resolve_rosdep_keys.sh │ └── tools/ │ ├── README.md │ ├── docker-bake.hcl │ ├── scenario-simulator/ │ │ ├── Dockerfile │ │ ├── README.md │ │ └── entrypoint.sh │ └── visualizer/ │ ├── Dockerfile │ ├── README.md │ ├── entrypoint.sh │ └── xstartup ├── repositories/ │ ├── autoware-nightly.repos │ ├── autoware.repos │ ├── extra-packages.repos │ ├── simulator-nightly.repos │ ├── simulator.repos │ ├── tools-nightly.repos │ └── tools.repos ├── setup-dev-env.sh ├── setup.cfg └── src/ ├── .gitignore └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .ansible-lint ================================================ skip_list: - galaxy # We don't publish to Ansible Galaxy. - package-latest # Since this is a development environment, we allow the latest versions. warn_list: [] ================================================ FILE: .clang-format ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. # Modified from https://github.com/ament/ament_lint/blob/master/ament_clang_format/ament_clang_format/configuration/.clang-format Language: Cpp BasedOnStyle: Google AccessModifierOffset: -2 AlignAfterOpenBracket: AlwaysBreak AllowShortFunctionsOnASingleLine: InlineOnly BraceWrapping: AfterClass: true AfterFunction: true AfterNamespace: true AfterStruct: true BreakBeforeBraces: Custom ColumnLimit: 100 ConstructorInitializerIndentWidth: 0 ContinuationIndentWidth: 2 DerivePointerAlignment: false PointerAlignment: Middle ReflowComments: true IncludeCategories: # C++ system headers - Regex: <[a-z_]*> Priority: 6 CaseSensitive: true # C system headers - Regex: <.*\.h> Priority: 5 CaseSensitive: true # Boost headers - Regex: boost/.* Priority: 4 CaseSensitive: true # Message headers - Regex: .*_msgs/.* Priority: 3 CaseSensitive: true - Regex: .*_srvs/.* Priority: 3 CaseSensitive: true # Other Package headers - Regex: <.*> Priority: 2 CaseSensitive: true # Local package headers - Regex: '".*"' Priority: 1 CaseSensitive: true ================================================ FILE: .clang-tidy ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. Checks: " -*, boost-use-to-string, bugprone-argument-comment, bugprone-assert-side-effect, bugprone-bad-signal-to-kill-thread, bugprone-bool-pointer-implicit-conversion, bugprone-branch-clone, bugprone-copy-constructor-init, bugprone-dangling-handle, bugprone-dynamic-static-initializers, bugprone-exception-escape, bugprone-fold-init-type, bugprone-forward-declaration-namespace, bugprone-forwarding-reference-overload, bugprone-inaccurate-erase, bugprone-incorrect-roundings, bugprone-integer-division, bugprone-lambda-function-name, bugprone-macro-parentheses, bugprone-macro-repeated-side-effects, bugprone-misplaced-operator-in-strlen-in-alloc, bugprone-misplaced-widening-cast, bugprone-move-forwarding-reference, bugprone-multiple-statement-macro, bugprone-not-null-terminated-result, bugprone-parent-virtual-call, bugprone-posix-return, bugprone-signed-char-misuse, bugprone-sizeof-container, bugprone-sizeof-expression, bugprone-string-constructor, bugprone-string-integer-assignment, bugprone-string-literal-with-embedded-nul, bugprone-suspicious-enum-usage, bugprone-suspicious-memset-usage, bugprone-suspicious-missing-comma, bugprone-suspicious-semicolon, bugprone-suspicious-string-compare, bugprone-swapped-arguments, bugprone-terminating-continue, bugprone-throw-keyword-missing, bugprone-too-small-loop-variable, bugprone-unchecked-optional-access, bugprone-undefined-memory-manipulation, bugprone-undelegated-constructor, bugprone-unhandled-self-assignment, bugprone-unused-raii, bugprone-unused-return-value, bugprone-use-after-move, bugprone-virtual-near-miss, cppcoreguidelines-avoid-goto, cppcoreguidelines-init-variables, cppcoreguidelines-interfaces-global-init, cppcoreguidelines-macro-usage, cppcoreguidelines-narrowing-conversions, cppcoreguidelines-no-malloc, cppcoreguidelines-pro-bounds-pointer-arithmetic, cppcoreguidelines-pro-type-const-cast, cppcoreguidelines-pro-type-cstyle-cast, cppcoreguidelines-pro-type-member-init, cppcoreguidelines-pro-type-reinterpret-cast, cppcoreguidelines-pro-type-static-cast-downcast, cppcoreguidelines-pro-type-union-access, cppcoreguidelines-slicing, cppcoreguidelines-special-member-functions, google-build-explicit-make-pair, google-build-namespaces, google-build-using-namespace, google-explicit-constructor, google-global-names-in-headers, google-upgrade-googletest-case, hicpp-exception-baseclass, hicpp-multiway-paths-covered, hicpp-no-assembler, hicpp-signed-bitwise, llvm-namespace-comment, misc-definitions-in-headers, misc-misplaced-const, misc-new-delete-overloads, misc-non-copyable-objects, misc-redundant-expression, misc-static-assert, misc-throw-by-value-catch-by-reference, misc-unconventional-assign-operator, misc-uniqueptr-reset-release, misc-unused-alias-decls, misc-unused-parameters, misc-unused-using-decls, modernize-concat-nested-namespaces, modernize-deprecated-headers, modernize-deprecated-ios-base-aliases, modernize-loop-convert, modernize-make-shared, modernize-make-unique, modernize-pass-by-value, modernize-raw-string-literal, modernize-redundant-void-arg, modernize-replace-auto-ptr, modernize-replace-disallow-copy-and-assign-macro, modernize-replace-random-shuffle, modernize-return-braced-init-list, modernize-shrink-to-fit, modernize-unary-static-assert, modernize-use-auto, modernize-use-bool-literals, modernize-use-default-member-init, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-nodiscard, modernize-use-noexcept, modernize-use-nullptr, modernize-use-override, modernize-use-transparent-functors, modernize-use-uncaught-exceptions, modernize-use-using, openmp-use-default-none, performance-faster-string-find, performance-for-range-copy, performance-implicit-conversion-in-loop, performance-inefficient-algorithm, performance-inefficient-string-concatenation, performance-inefficient-vector-operation, performance-move-const-arg, performance-move-constructor-init, performance-no-automatic-move, performance-no-int-to-ptr, performance-noexcept-move-constructor, performance-trivially-destructible, performance-type-promotion-in-math-fn, performance-unnecessary-copy-initialization, performance-unnecessary-value-param, portability-simd-intrinsics, readability-const-return-type, readability-container-size-empty, readability-convert-member-functions-to-static, readability-delete-null-pointer, readability-else-after-return, readability-function-cognitive-complexity, readability-identifier-naming, readability-inconsistent-declaration-parameter-name, readability-isolate-declaration, readability-make-member-function-const, readability-misleading-indentation, readability-misplaced-array-index, readability-non-const-parameter, readability-redundant-access-specifiers, readability-redundant-control-flow, readability-redundant-declaration, readability-redundant-function-ptr-dereference, readability-redundant-member-init, readability-redundant-smartptr-get, readability-redundant-string-cstr, readability-redundant-string-init, readability-simplify-boolean-expr, readability-simplify-subscript-expr, readability-static-accessed-through-instance, readability-static-definition-in-anonymous-namespace, readability-string-compare, readability-uniqueptr-delete-release" WarningsAsErrors: " boost-use-to-string, bugprone-dangling-handle, bugprone-fold-init-type, bugprone-inaccurate-erase, bugprone-incorrect-roundings, bugprone-misplaced-widening-cast, bugprone-sizeof-container, bugprone-sizeof-expression, bugprone-string-constructor, bugprone-suspicious-enum-usage, bugprone-suspicious-memset-usage, bugprone-suspicious-missing-comma, bugprone-suspicious-semicolon, bugprone-swapped-arguments, bugprone-unused-raii, bugprone-use-after-move, llvm-namespace-comment, misc-non-copyable-objects, misc-redundant-expression, misc-throw-by-value-catch-by-reference, misc-unused-alias-decls, misc-unused-parameters, misc-unused-using-decls, modernize-deprecated-headers, modernize-redundant-void-arg, modernize-use-bool-literals, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-nullptr, modernize-use-override, modernize-use-using, performance-faster-string-find, performance-inefficient-algorithm, readability-make-member-function-const, readability-misleading-indentation, readability-misplaced-array-index, readability-string-compare" HeaderFilterRegex: ^(?!\/usr)(?!\/opt) ExtraArgs: - -std=c++17 FormatStyle: none CheckOptions: - key: bugprone-argument-comment.CommentBoolLiterals value: "0" - key: bugprone-argument-comment.CommentCharacterLiterals value: "0" - key: bugprone-argument-comment.CommentFloatLiterals value: "0" - key: bugprone-argument-comment.CommentIntegerLiterals value: "0" - key: bugprone-argument-comment.CommentNullPtrs value: "0" - key: bugprone-argument-comment.CommentStringLiterals value: "0" - key: bugprone-argument-comment.CommentUserDefinedLiterals value: "0" - key: bugprone-argument-comment.IgnoreSingleArgument value: "0" - key: bugprone-argument-comment.StrictMode value: "0" - key: bugprone-assert-side-effect.AssertMacros value: assert - key: bugprone-assert-side-effect.CheckFunctionCalls value: "0" - key: bugprone-dangling-handle.HandleClasses value: std::basic_string_view;std::experimental::basic_string_view - key: bugprone-dynamic-static-initializers.HeaderFileExtensions value: ",h,hh,hpp,hxx" - key: bugprone-exception-escape.FunctionsThatShouldNotThrow value: "" - key: bugprone-exception-escape.IgnoredExceptions value: "" - key: bugprone-misplaced-widening-cast.CheckImplicitCasts value: "0" - key: bugprone-not-null-terminated-result.WantToUseSafeFunctions value: "1" - key: bugprone-signed-char-misuse.CharTypdefsToIgnore value: "" - key: bugprone-sizeof-expression.WarnOnSizeOfCompareToConstant value: "1" - key: bugprone-sizeof-expression.WarnOnSizeOfConstant value: "1" - key: bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression value: "0" - key: bugprone-sizeof-expression.WarnOnSizeOfThis value: "1" - key: bugprone-string-constructor.LargeLengthThreshold value: "8388608" - key: bugprone-string-constructor.WarnOnLargeLength value: "1" - key: bugprone-suspicious-enum-usage.StrictMode value: "0" - key: bugprone-suspicious-missing-comma.MaxConcatenatedTokens value: "5" - key: bugprone-suspicious-missing-comma.RatioThreshold value: "0.200000" - key: bugprone-suspicious-missing-comma.SizeThreshold value: "5" - key: bugprone-suspicious-string-compare.StringCompareLikeFunctions value: "" - key: bugprone-suspicious-string-compare.WarnOnImplicitComparison value: "1" - key: bugprone-suspicious-string-compare.WarnOnLogicalNotComparison value: "0" - key: bugprone-too-small-loop-variable.MagnitudeBitsUpperLimit value: "16" - key: bugprone-unhandled-self-assignment.WarnOnlyIfThisHasSuspiciousField value: "1" - key: bugprone-unused-return-value.CheckedFunctions value: ::std::async;::std::launder;::std::remove;::std::remove_if;::std::unique;::std::unique_ptr::release;::std::basic_string::empty;::std::vector::empty - key: cert-dcl16-c.NewSuffixes value: L;LL;LU;LLU - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField value: "0" - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors value: "1" - key: cppcoreguidelines-macro-usage.AllowedRegexp value: ^DEBUG_* - key: cppcoreguidelines-macro-usage.CheckCapsOnly value: "0" - key: cppcoreguidelines-macro-usage.IgnoreCommandLineMacros value: "1" - key: cppcoreguidelines-no-malloc.Allocations value: ::malloc;::calloc - key: cppcoreguidelines-no-malloc.Deallocations value: ::free - key: cppcoreguidelines-no-malloc.Reallocations value: ::realloc - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic value: "1" - key: cppcoreguidelines-pro-type-member-init.IgnoreArrays value: "0" - key: cppcoreguidelines-pro-type-member-init.UseAssignment value: "0" - key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctions value: "0" - key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor value: "0" - key: google-readability-braces-around-statements.ShortStatementLines value: "1" - key: google-readability-function-size.StatementThreshold value: "800" - key: google-readability-namespace-comments.ShortNamespaceLines value: "10" - key: google-readability-namespace-comments.SpacesBeforeComments value: "2" - key: hicpp-multiway-paths-covered.WarnOnMissingElse value: "0" - key: hicpp-signed-bitwise.IgnorePositiveIntegerLiterals value: "0" - key: misc-definitions-in-headers.HeaderFileExtensions value: ",h,hh,hpp,hxx" - key: misc-definitions-in-headers.UseHeaderFileExtension value: "1" - key: misc-throw-by-value-catch-by-reference.CheckThrowTemporaries value: "1" - key: misc-unused-parameters.StrictMode value: "0" - key: modernize-loop-convert.MaxCopySize value: "16" - key: modernize-loop-convert.MinConfidence value: reasonable - key: modernize-loop-convert.NamingStyle value: CamelCase - key: modernize-make-shared.IgnoreMacros value: "1" - key: modernize-make-shared.IncludeStyle value: google - key: modernize-make-shared.MakeSmartPtrFunction value: std::make_shared - key: modernize-make-shared.MakeSmartPtrFunctionHeader value: memory - key: modernize-make-unique.IgnoreMacros value: "1" - key: modernize-make-unique.IncludeStyle value: google - key: modernize-make-unique.MakeSmartPtrFunction value: std::make_unique - key: modernize-make-unique.MakeSmartPtrFunctionHeader value: memory - key: modernize-pass-by-value.IncludeStyle value: google - key: modernize-pass-by-value.ValuesOnly value: "0" - key: modernize-raw-string-literal.ReplaceShorterLiterals value: "0" - key: modernize-replace-auto-ptr.IncludeStyle value: google - key: modernize-replace-random-shuffle.IncludeStyle value: google - key: modernize-use-auto.MinTypeNameLength value: "5" - key: modernize-use-auto.RemoveStars value: "0" - key: modernize-use-default-member-init.IgnoreMacros value: "1" - key: modernize-use-default-member-init.UseAssignment value: "0" - key: modernize-use-emplace.ContainersWithPushBack value: ::std::vector;::std::list;::std::deque - key: modernize-use-emplace.SmartPointers value: ::std::shared_ptr;::std::unique_ptr;::std::auto_ptr;::std::weak_ptr - key: modernize-use-emplace.TupleMakeFunctions value: ::std::make_pair;::std::make_tuple - key: modernize-use-emplace.TupleTypes value: ::std::pair;::std::tuple - key: modernize-use-equals-default.IgnoreMacros value: "1" - key: modernize-use-equals-delete.IgnoreMacros value: "1" - key: modernize-use-nodiscard.ReplacementString value: "[[nodiscard]]" - key: modernize-use-noexcept.ReplacementString value: "" - key: modernize-use-noexcept.UseNoexceptFalse value: "1" - key: modernize-use-nullptr.NullMacros value: "NULL" - key: modernize-use-override.AllowOverrideAndFinal value: "0" - key: modernize-use-override.FinalSpelling value: final - key: modernize-use-override.IgnoreDestructors value: "0" - key: modernize-use-override.OverrideSpelling value: override - key: modernize-use-transparent-functors.SafeMode value: "0" - key: modernize-use-using.IgnoreMacros value: "1" - key: performance-faster-string-find.StringLikeClasses value: std::basic_string - key: performance-for-range-copy.AllowedTypes value: "" - key: performance-for-range-copy.WarnOnAllAutoCopies value: "0" - key: performance-inefficient-string-concatenation.StrictMode value: "0" - key: performance-inefficient-vector-operation.EnableProto value: "0" - key: performance-inefficient-vector-operation.VectorLikeClasses value: ::std::vector - key: performance-move-const-arg.CheckTriviallyCopyableMove value: "1" - key: performance-move-constructor-init.IncludeStyle value: google - key: performance-no-automatic-move.AllowedTypes value: "" - key: performance-type-promotion-in-math-fn.IncludeStyle value: google - key: performance-unnecessary-copy-initialization.AllowedTypes value: "" - key: performance-unnecessary-value-param.AllowedTypes value: .*Ptr;.*SharedFuture - key: performance-unnecessary-value-param.IncludeStyle value: google - key: portability-simd-intrinsics.Std value: "" - key: portability-simd-intrinsics.Suggest value: "0" - key: readability-function-cognitive-complexity.IgnoreMacros value: "1" - key: readability-else-after-return.WarnOnUnfixable value: "1" - key: readability-identifier-naming.NamespaceCase value: lower_case - key: readability-identifier-naming.ClassCase value: CamelCase - key: readability-identifier-naming.PrivateMemberSuffix value: _ - key: readability-identifier-naming.StructCase value: CamelCase - key: readability-identifier-naming.FunctionCase value: lower_case - key: readability-identifier-naming.VariableCase value: lower_case - key: readability-identifier-naming.GlobalConstantCase value: lower_case - key: readability-identifier-naming.GlobalConstantPrefix value: g_ - key: readability-identifier-naming.ConstexprVariableCase value: lower_case - key: readability-inconsistent-declaration-parameter-name.IgnoreMacros value: "1" - key: readability-inconsistent-declaration-parameter-name.Strict value: "0" - key: readability-redundant-smartptr-get.IgnoreMacros value: "1" - key: readability-redundant-string-init.StringNames value: ::std::basic_string - key: readability-simplify-subscript-expr.Types value: ::std::basic_string;::std::basic_string_view;::std::vector;::std::array - key: readability-static-accessed-through-instance.NameSpecifierNestingThreshold value: "3" ================================================ FILE: .clang-tidy-ci ================================================ Checks: " -*, bugprone-*, -bugprone-branch-clone, -bugprone-easily-swappable-parameters, -bugprone-exception-escape, -bugprone-implicit-widening-of-multiplication-result, -bugprone-infinite-loop, -bugprone-integer-division, -bugprone-macro-parentheses, -bugprone-narrowing-conversions, -bugprone-parent-virtual-call, -bugprone-reserved-identifier, -bugprone-signed-char-misuse" WarningsAsErrors: "*" ExtraArgs: - -std=c++17 - -Wno-c11-extensions - -Wno-unknown-warning-option ================================================ FILE: .devcontainer/Dockerfile ================================================ # hadolint global ignore=DL3006 ARG BASE_IMAGE FROM $BASE_IMAGE ENV SHELL /bin/bash ARG USERNAME=autoware ARG USER_UID=1000 ARG USER_GID=$USER_UID RUN groupadd --gid $USER_GID $USERNAME \ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ && apt-get update \ && apt-get install -y sudo \ && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ && chmod 0440 /etc/sudoers.d/$USERNAME ================================================ FILE: .devcontainer/core-devel/devcontainer.json ================================================ { "name": "autoware:core-devel", "build": { "dockerfile": "../Dockerfile", "args": { "BASE_IMAGE": "ghcr.io/autowarefoundation/autoware:core-devel" } }, "remoteUser": "autoware", "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined", "--net=host", "--volume=/etc/localtime:/etc/localtime:ro" ], "customizations": { "vscode": { "settings.json": { "terminal.integrated.profiles.linux": { "bash": { "path": "/bin/bash" } } } } } } ================================================ FILE: .devcontainer/universe-devel/devcontainer.json ================================================ { "name": "autoware:universe-devel", "build": { "dockerfile": "../Dockerfile", "args": { "BASE_IMAGE": "ghcr.io/autowarefoundation/autoware:universe-devel" } }, "remoteUser": "autoware", "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined", "--net=host", "--volume=/etc/localtime:/etc/localtime:ro" ], "customizations": { "vscode": { "settings.json": { "terminal.integrated.profiles.linux": { "bash": { "path": "/bin/bash" } } } } } } ================================================ FILE: .devcontainer/universe-devel-cuda/devcontainer.json ================================================ { "name": "autoware:universe-devel-cuda", "build": { "dockerfile": "../Dockerfile", "args": { "BASE_IMAGE": "ghcr.io/autowarefoundation/autoware:universe-devel-cuda" } }, "remoteUser": "autoware", "hostRequirements": { "gpu": true }, "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined", "--net=host", "--volume=/etc/localtime:/etc/localtime:ro", "--gpus", "all" ], "customizations": { "vscode": { "settings.json": { "terminal.integrated.profiles.linux": { "bash": { "path": "/bin/bash" } } } } } } ================================================ FILE: .dockerignore ================================================ # Ignore git and metadata directories .git .github .vscode # Ignore all markdown files *.md # Ignore Docker files docker !docker/etc !docker/scripts !docker/tools # Ignore a part of files under src src/**/.* src/**/*.asc src/**/*.gif src/**/*.md src/**/*.svg # Ignore generated files by colcon build install log ================================================ FILE: .fdignore ================================================ !/src/ ================================================ FILE: .github/CODEOWNERS ================================================ * ryohsuke.mitsudome@tier4.jp mfc@autoware.org .devcontainer/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp .github/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp isamu.takagi@tier4.jp ansible/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp isamu.takagi@tier4.jp docker/** oguzkaganozt@gmail.com yutaka.kondo@tier4.jp isamu.takagi@tier4.jp ================================================ FILE: .github/DISCUSSION_TEMPLATE/general.yaml ================================================ body: - type: checkboxes attributes: label: Code of Conduct options: - label: I have read [CODE OF CONDUCT](https://github.com/autowarefoundation/autoware/blob/main/CODE_OF_CONDUCT.md) and [Support Guidelines](https://autowarefoundation.github.io/autoware-documentation/main/support/support-guidelines/#github-discussions) before creating this Discussion post. required: true - type: textarea attributes: label: Contents description: Write your contents here validations: required: true ================================================ FILE: .github/ISSUE_TEMPLATE/bug.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. name: Bug description: Report a bug body: - type: checkboxes attributes: label: Checklist description: Confirm the following items before proceeding. If one cannot be satisfied, create a discussion thread instead. options: - label: I've read the [contribution guidelines](https://github.com/autowarefoundation/autoware/blob/main/CONTRIBUTING.md). required: true - label: I've searched other issues and no duplicate issues were found. required: true - label: I'm convinced that this is not my fault but a bug. required: true - type: textarea attributes: label: Description description: Write a brief description of the bug. validations: required: true - type: textarea attributes: label: Expected behavior description: Describe the expected behavior. validations: required: true - type: textarea attributes: label: Actual behavior description: Describe the actual behavior. validations: required: true - type: textarea attributes: label: Steps to reproduce description: Write the steps to reproduce the bug. placeholder: |- 1. 2. 3. validations: required: true - type: textarea attributes: label: Versions description: Provide the version information. You can omit this if you believe it's irrelevant. placeholder: |- - OS: - ROS 2: - Autoware: validations: required: false - type: textarea attributes: label: Possible causes description: Write the possible causes if you have any ideas. validations: required: false - type: textarea attributes: label: Additional context description: Add any other additional context if it exists. validations: required: false ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. blank_issues_enabled: false contact_links: - name: Question url: https://github.com/autowarefoundation/autoware/discussions/new?category=q-a about: Ask a question - name: Feature request url: https://github.com/autowarefoundation/autoware/discussions/new?category=feature-requests about: Send a feature request - name: Idea url: https://github.com/autowarefoundation/autoware/discussions/new?category=ideas about: Post an idea ================================================ FILE: .github/ISSUE_TEMPLATE/simple-issue.yaml ================================================ name: Simple Issue description: Create a simple issue body: - type: checkboxes attributes: label: Checklist description: Confirm the following items before proceeding. If one cannot be satisfied, create a discussion thread instead. options: - label: I've read the [contribution guidelines](https://github.com/autowarefoundation/autoware/blob/main/CONTRIBUTING.md). required: true - label: I've searched other issues and no duplicate issues were found. required: true - type: textarea attributes: label: Description description: Write a brief description of the issue. validations: required: true ================================================ FILE: .github/ISSUE_TEMPLATE/task.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. name: Task description: Plan a task body: - type: checkboxes attributes: label: Checklist description: Confirm the following items before proceeding. If one cannot be satisfied, create a discussion thread instead. options: - label: I've read the [contribution guidelines](https://github.com/autowarefoundation/autoware/blob/main/CONTRIBUTING.md). required: true - label: I've searched other issues and no duplicate issues were found. required: true - label: I've agreed with the maintainers that I can plan this task. required: true - type: textarea attributes: label: Description description: Write a brief description of the task. validations: required: true - type: textarea attributes: label: Purpose description: Describe the purpose of the task. validations: required: true - type: textarea attributes: label: Possible approaches description: Describe possible approaches for the task. validations: required: true - type: textarea attributes: label: Definition of done description: Write the definition of done for the task. validations: required: true ================================================ FILE: .github/actions/combine-multi-arch-images/action.yaml ================================================ name: combine-multi-arch-images description: "" inputs: package-name: description: "" required: true runs: using: composite steps: - name: Login to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: Set image name id: set-image-name run: echo "image-name=ghcr.io/${{ github.repository_owner }}/${{ inputs.package-name }}" >> $GITHUB_OUTPUT shell: bash - name: Get all tags id: get-all-tags run: | base_url="https://api.github.com/orgs/${{ github.repository_owner }}/packages/container/${{ inputs.package-name }}/versions" echo "base_url: $base_url" all_tags=() for page in $(seq 1 10); do page_url="${base_url}?page=$page" echo -e "\npage_url: $page_url" page_tags=$(curl -fsSL "$page_url" -H "Authorization: token ${{ github.token }}" | jq ".[].metadata.container.tags[]" | cut -d '"' -f 2) echo -e "\n[page_tags]\n$page_tags" if [ "$page_tags" = "" ]; then echo "No tags found in the page $page." break fi for tag in $(IFS=$'\n'; echo "$page_tags"); do all_tags+=("$tag") done done all_tags=$(printf "%s\n" ${all_tags[@]}) echo -e "\n[all_tags]\n$all_tags" echo "tags=$(printf "%s " $all_tags | sed 's/\s*$//')" >> $GITHUB_OUTPUT shell: bash - name: Get base tags id: get-base-tags run: | amd64_tags=$(printf "%s\n" $ALL_TAGS | grep "\-amd64" | sed "s/-amd64$//g") arm64_tags=$(printf "%s\n" $ALL_TAGS | grep "\-arm64" | sed "s/-arm64$//g") base_tags=$(printf "%s\n" "$amd64_tags" "$arm64_tags" | sort | uniq) echo -e "\n[amd64_tags]\n$amd64_tags" echo -e "\n[arm64_tags]\n$arm64_tags" echo -e "\n[base_tags]\n$base_tags" echo "tags=$(printf "%s " $base_tags | sed 's/\s*$//')" >> $GITHUB_OUTPUT env: ALL_TAGS: ${{ steps.get-all-tags.outputs.tags }} shell: bash - name: Create Docker manifest and delete -amd64 and -arm64 tags run: | for base_tag in $BASE_TAGS; do echo -e "\nbase_tag: $base_tag" amd64_tag=$(printf "%s\n" $ALL_TAGS | grep "^$base_tag\-amd64" || true) arm64_tag=$(printf "%s\n" $ALL_TAGS | grep "^$base_tag\-arm64" || true) echo "amd64_tag: $amd64_tag" echo "arm64_tag: $arm64_tag" if [ "$amd64_tag" != "" ]; then amd64_image="${{ steps.set-image-name.outputs.image-name }}:$amd64_tag" else echo "No amd64 tag found for '$base_tag'." continue fi if [ "$arm64_tag" != "" ]; then arm64_image="${{ steps.set-image-name.outputs.image-name }}:$arm64_tag" else echo "No arm64 tag found for '$base_tag'." continue fi echo "amd64_image: $amd64_image" echo "arm64_image: $arm64_image" if docker manifest create ${{ steps.set-image-name.outputs.image-name }}:$base_tag \ $amd64_image \ $arm64_image; then docker manifest push ${{ steps.set-image-name.outputs.image-name }}:$base_tag # Delete amd64_image and arm64_image curl -X DELETE \ -H "Authorization: Bearer ${{ github.token }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/orgs/${{ github.repository_owner }}/packages/container/${{ inputs.package-name }}/versions/$amd64_tag curl -X DELETE \ -H "Authorization: Bearer ${{ github.token }}" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/orgs/${{ github.repository_owner }}/packages/container/${{ inputs.package-name }}/versions/$arm64_tag fi done env: ALL_TAGS: ${{ steps.get-all-tags.outputs.tags }} BASE_TAGS: ${{ steps.get-base-tags.outputs.tags }} shell: bash ================================================ FILE: .github/actions/docker-build/action.yaml ================================================ name: docker-build description: Composite action to build images only. inputs: platform: description: Target platform. required: true cache-tag-suffix: description: Suffix of the target cache tag. required: true additional-repos: description: Additional target .repos file. default: "" required: false build-args: description: Additional build args. required: false image-artifact-name: description: Name of the exported docker image artifact. default: "" required: false image-tag: description: Tag for the saved docker image. default: autoware:health-check-${{ github.sha }} required: false runs: using: composite steps: - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 - name: Install vcs2l run: | sudo apt-get -y update sudo apt-get -y install python3-pip pipx install vcs2l shell: bash - name: Run vcs import run: | mkdir -p src vcs import --shallow src < repositories/autoware.repos shell: bash - name: Import additional repositories if: ${{ inputs.additional-repos != '' }} run: | vcs import --shallow --force src < ${{ inputs.additional-repos }} shell: bash - name: Cache ccache uses: actions/cache@v4 if: ${{ github.ref == 'refs/heads/main'}} id: cache-ccache with: path: | root-ccache key: ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/*.cpp') }} restore-keys: | ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}- ccache-${{ inputs.platform }}- - name: Cache apt-get uses: actions/cache@v4 if: ${{ github.ref == 'refs/heads/main'}} id: cache-apt-get with: path: | var-cache-apt key: apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/package.xml') }} restore-keys: | apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}- apt-get-${{ inputs.platform }}- - name: Restore ccache uses: actions/cache/restore@v4 if: ${{ github.ref != 'refs/heads/main'}} with: path: | root-ccache key: ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/*.cpp') }} restore-keys: | ccache-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}- ccache-${{ inputs.platform }}- - name: Restore apt-get uses: actions/cache/restore@v4 if: ${{ github.ref != 'refs/heads/main'}} with: path: | var-cache-apt key: apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}-${{ hashFiles('src/**/package.xml') }} restore-keys: | apt-get-${{ inputs.platform }}-${{ inputs.cache-tag-suffix }}- apt-get-${{ inputs.platform }}- - name: Inject cache into docker # TODO(youtalk): Use the release version again uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239 with: utility-image: ghcr.io/containerd/busybox:latest cache-map: | { "root-ccache": "/root/.ccache", "var-cache-apt": "/var/cache/apt" } skip-extraction: ${{ steps.cache-ccache.outputs.cache-hit && steps.cache-apt-get.outputs.cache-hit }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: Run docker build uses: docker/build-push-action@v6 with: file: docker/Dockerfile context: . push: false load: true target: universe-devel build-args: ${{ inputs.build-args }} cache-from: type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ inputs.platform }}-main tags: ${{ inputs.image-tag }} - name: Save Docker image if: ${{ inputs.image-artifact-name != '' }} run: docker save ${{ inputs.image-tag }} | gzip > /tmp/autoware-image.tar.gz shell: bash - name: Upload Docker image artifact if: ${{ inputs.image-artifact-name != '' }} uses: actions/upload-artifact@v4 with: name: ${{ inputs.image-artifact-name }} path: /tmp/autoware-image.tar.gz ================================================ FILE: .github/actions/docker-build-and-push/action.yaml ================================================ name: docker-build-and-push description: Composite action to build and push non CUDA images to registry. inputs: platform: description: Target platform. required: true target-image: description: Target docker image name in the registry. required: true build-args: description: Additional build args. required: false max-parallelism: default: 2 description: Maximum parallelism for buildkitd. required: false suffix: description: Suffix for image tags. required: false default: "" set-latest: description: Whether to set the latest flavor for images. required: false default: true # TODO(mitsudome-r): Remove this input after Jazzy porting is complete core-only: description: Whether to build only the core images. required: false default: false runs: using: composite steps: - name: Install jq and vcs2l run: | sudo apt-get -y update sudo apt-get -y install jq python3-pip pip install --no-cache-dir vcs2l shell: bash - name: Run vcs import run: | mkdir -p src vcs import --shallow src < repositories/autoware.repos shell: bash - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 with: buildkitd-config-inline: | [worker.oci] max-parallelism = ${{ inputs.max-parallelism }} install: true - name: Restore ccache uses: actions/cache/restore@v4 with: path: | root-ccache key: ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/*.cpp') }} restore-keys: | ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }} ccache-${{ inputs.platform }}- - name: Restore apt-get uses: actions/cache/restore@v4 with: path: | var-cache-apt key: apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/package.xml') }} restore-keys: | apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }} apt-get-${{ inputs.platform }}- - name: Inject cache into docker # TODO(youtalk): Use the release version again uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239 with: utility-image: ghcr.io/containerd/busybox:latest cache-map: | { "root-ccache": "/root/.ccache", "var-cache-apt": "/var/cache/apt" } skip-extraction: true - name: Get current date id: date run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT shell: bash - name: Docker meta for autoware:core-common-devel id: meta-core-common-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=core-common-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=core-common-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=core-common-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-core-common-devel flavor: | latest=false - name: Docker meta for autoware:core id: meta-core uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=core${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=core-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=core-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-core flavor: | latest=false - name: Docker meta for autoware:core-devel id: meta-core-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=core-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=core-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=core-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-core-devel flavor: | latest=false - name: Docker meta for autoware:universe-common-devel id: meta-universe-common-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-common-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-common-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-common-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-common-devel flavor: | latest=false - name: Docker meta for autoware:universe-sensing-perception-devel id: meta-universe-sensing-perception-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-sensing-perception-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-sensing-perception-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-sensing-perception-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-sensing-perception-devel flavor: | latest=false - name: Docker meta for autoware:universe-sensing-perception id: meta-universe-sensing-perception uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-sensing-perception${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-sensing-perception-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-sensing-perception-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-sensing-perception flavor: | latest=false - name: Docker meta for autoware:universe-localization-mapping-devel id: meta-universe-localization-mapping-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-localization-mapping-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-localization-mapping-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-localization-mapping-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-localization-mapping-devel flavor: | latest=false - name: Docker meta for autoware:universe-localization-mapping id: meta-universe-localization-mapping uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-localization-mapping${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-localization-mapping-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-localization-mapping-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-localization-mapping flavor: | latest=false - name: Docker meta for autoware:universe-planning-control-devel id: meta-universe-planning-control-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-planning-control-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-planning-control-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-planning-control-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-planning-control-devel flavor: | latest=false - name: Docker meta for autoware:universe-planning-control id: meta-universe-planning-control uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-planning-control${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-planning-control-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-planning-control-,suffix=${{ inputs.suffix }}-${{ 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.target-image }} tags: | type=raw,value=universe-vehicle-system-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-vehicle-system-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-vehicle-system-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} 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.target-image }} tags: | type=raw,value=universe-vehicle-system${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-vehicle-system-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-vehicle-system-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-vehicle-system flavor: | latest=false - name: Docker meta for autoware:universe-visualization-devel id: meta-universe-visualization-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-visualization-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-visualization-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-visualization-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-visualization-devel flavor: | latest=false - name: Docker meta for autoware:universe-visualization id: meta-universe-visualization uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-visualization${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-visualization-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-visualization-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-visualization flavor: | latest=false - name: Docker meta for autoware:universe-api-devel id: meta-universe-api-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-api-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-api-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-api-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-api-devel flavor: | latest=false - name: Docker meta for autoware:universe-api id: meta-universe-api uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-api${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-api-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-api-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-api flavor: | latest=false - name: Docker meta for autoware:universe-devel id: meta-universe-devel uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-devel${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-devel-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-devel-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe-devel flavor: | latest=false - name: Docker meta for autoware:universe id: meta-universe uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe${{ inputs.suffix }}-${{ inputs.platform }} type=raw,value=universe-${{ steps.date.outputs.date }}${{ inputs.suffix }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-,suffix=${{ inputs.suffix }}-${{ inputs.platform }} bake-target: docker-metadata-action-universe flavor: | latest=${{ inputs.set-latest }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: set build targets id: set-build-targets run: | echo "build_targets=${{ fromJSON(inputs['core-only']) && 'core-common-devel' || 'core-common-devel,core,core-devel,universe-common-devel,universe-sensing-perception-devel,universe-sensing-perception,universe-localization-mapping-devel,universe-localization-mapping,universe-planning-control-devel,universe-planning-control,universe-vehicle-system-devel,universe-vehicle-system,universe-visualization-devel,universe-visualization,universe-api-devel,universe-api,universe-devel,universe'}}" >> $GITHUB_OUTPUT shell: bash - name: Build and Push to GitHub Container Registry uses: docker/bake-action@v5 with: push: true targets: | ${{ steps.set-build-targets.outputs.build_targets }} files: | docker/docker-bake.hcl ${{ steps.meta-core-common-devel.outputs.bake-file }} ${{ steps.meta-core.outputs.bake-file }} ${{ steps.meta-core-devel.outputs.bake-file }} ${{ steps.meta-universe-common-devel.outputs.bake-file }} ${{ steps.meta-universe-sensing-perception-devel.outputs.bake-file }} ${{ steps.meta-universe-sensing-perception.outputs.bake-file }} ${{ steps.meta-universe-localization-mapping-devel.outputs.bake-file }} ${{ 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-visualization-devel.outputs.bake-file }} ${{ steps.meta-universe-visualization.outputs.bake-file }} ${{ steps.meta-universe-api-devel.outputs.bake-file }} ${{ steps.meta-universe-api.outputs.bake-file }} ${{ steps.meta-universe-devel.outputs.bake-file }} ${{ steps.meta-universe.outputs.bake-file }} provenance: false set: | ${{ inputs.build-args }} ================================================ FILE: .github/actions/docker-build-and-push-base/action.yaml ================================================ name: docker-build-and-push-base description: Composite action to build and push base images to registry. inputs: target-image: description: Target docker image name in the registry. required: true build-args: description: Additional build args. required: false max-parallelism: default: 2 description: Maximum parallelism for buildkitd. required: false set-latest: description: Whether to set the latest flavor for images. required: false default: true suffix: description: Suffix for image tags. required: false default: "" runs: using: composite steps: - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 with: buildkitd-config-inline: | [worker.oci] max-parallelism = ${{ inputs.max-parallelism }} install: true - name: Get current date id: date run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT shell: bash - name: Docker meta for autoware-base:latest id: meta-base uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=${{ steps.date.outputs.date }}${{ inputs.suffix }} type=raw,value=latest${{ inputs.suffix }} bake-target: docker-metadata-action-base flavor: | latest=${{ inputs.set-latest }} - name: Docker meta for autoware-base:cuda-latest id: meta-base-cuda uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=cuda-latest${{ inputs.suffix }} type=raw,value=cuda-${{ steps.date.outputs.date }}${{ inputs.suffix }} bake-target: docker-metadata-action-base-cuda flavor: | latest=false - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: Build and Push to GitHub Container Registry uses: docker/bake-action@v5 with: push: true files: | docker/docker-bake-base.hcl ${{ steps.meta-base.outputs.bake-file }} ${{ steps.meta-base-cuda.outputs.bake-file }} provenance: false set: | ${{ inputs.build-args }} ================================================ FILE: .github/actions/docker-build-and-push-cuda/action.yaml ================================================ name: docker-build-and-push-cuda description: Composite action to build and push CUDA images to registry. inputs: platform: description: Target platform. required: true target-image: description: Target docker image name in the registry. required: true build-args: description: Additional build args. required: false max-parallelism: default: 2 description: Maximum parallelism for buildkitd. required: false suffix: description: Suffix for image tags (e.g., -jazzy). required: false default: "" runs: using: composite steps: - name: Install jq and vcs2l run: | sudo apt-get -y update sudo apt-get -y install curl gnupg lsb-release # Add the ROS 2 GPG key and repository sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | \ sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null sudo apt-get update sudo apt-get install -y jq python3-pip python3-vcs2l shell: bash - name: Run vcs import run: | mkdir -p src vcs import --shallow src < repositories/autoware.repos shell: bash - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 with: buildkitd-config-inline: | [worker.oci] max-parallelism = ${{ inputs.max-parallelism }} install: true - name: Restore ccache uses: actions/cache/restore@v4 with: path: | root-ccache key: ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/*.cpp') }} restore-keys: | ccache-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }} ccache-${{ inputs.platform }}- - name: Restore apt-get uses: actions/cache/restore@v4 with: path: | var-cache-apt key: apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }}${{ hashFiles('src/**/package.xml') }} restore-keys: | apt-get-${{ inputs.platform }}-main-${{ inputs.platform == 'arm64' && 'arm64-' || '' }} apt-get-${{ inputs.platform }}- - name: Inject cache into docker # TODO(youtalk): Use the release version again uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239 with: utility-image: ghcr.io/containerd/busybox:latest cache-map: | { "root-ccache": "/root/.ccache", "var-cache-apt": "/var/cache/apt" } skip-extraction: true - name: Get current date id: date run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT shell: bash - name: Docker meta for autoware:universe-common-devel-cuda id: meta-universe-common-devel-cuda uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-common-devel${{ inputs.suffix }}-cuda-${{ inputs.platform }} type=raw,value=universe-common-devel${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-common-devel${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }} bake-target: docker-metadata-action-universe-common-devel-cuda flavor: | latest=false - name: Docker meta for autoware:universe-sensing-perception-devel-cuda id: meta-universe-sensing-perception-devel-cuda uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-sensing-perception-devel${{ inputs.suffix }}-cuda-${{ inputs.platform }} type=raw,value=universe-sensing-perception-devel${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-sensing-perception-devel${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }} bake-target: docker-metadata-action-universe-sensing-perception-devel-cuda flavor: | latest=false - name: Docker meta for autoware:universe-sensing-perception-cuda id: meta-universe-sensing-perception-cuda uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-sensing-perception${{ inputs.suffix }}-cuda-${{ inputs.platform }} type=raw,value=universe-sensing-perception${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-sensing-perception${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }} bake-target: docker-metadata-action-universe-sensing-perception-cuda flavor: | latest=false - name: Docker meta for autoware:universe-devel-cuda id: meta-universe-devel-cuda uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe-devel${{ inputs.suffix }}-cuda-${{ inputs.platform }} type=raw,value=universe-devel${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe-devel${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }} bake-target: docker-metadata-action-universe-devel-cuda flavor: | latest=false - name: Docker meta for autoware:universe-cuda id: meta-universe-cuda uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=universe${{ inputs.suffix }}-cuda-${{ inputs.platform }} type=raw,value=universe${{ inputs.suffix }}-cuda-${{ steps.date.outputs.date }}-${{ inputs.platform }} type=ref,event=tag,prefix=universe${{ inputs.suffix }}-cuda-,suffix=-${{ inputs.platform }} bake-target: docker-metadata-action-universe-cuda flavor: | latest=false - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: Build and Push to GitHub Container Registry uses: docker/bake-action@v5 with: push: true files: | docker/docker-bake-cuda.hcl ${{ steps.meta-universe-common-devel-cuda.outputs.bake-file }} ${{ steps.meta-universe-sensing-perception-devel-cuda.outputs.bake-file }} ${{ steps.meta-universe-sensing-perception-cuda.outputs.bake-file }} ${{ steps.meta-universe-devel-cuda.outputs.bake-file }} ${{ steps.meta-universe-cuda.outputs.bake-file }} provenance: false set: | ${{ inputs.build-args }} ================================================ FILE: .github/actions/docker-build-and-push-tools/action.yaml ================================================ name: docker-build-and-push-tools description: Composite action to build and push tools images to registry. inputs: platform: description: Target platform. required: true target-image: description: Target docker image name in the registry. required: true build-args: description: Additional build args. required: false max-parallelism: default: 2 description: Maximum parallelism for buildkitd. required: false runs: using: composite steps: - name: Install jq and vcs2l run: | sudo apt-get -y update sudo apt-get -y install jq python3-pip pip install --no-cache-dir vcs2l shell: bash - name: Run vcs import run: | mkdir -p src vcs import --shallow src < repositories/simulator.repos shell: bash - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 with: buildkitd-config-inline: | [worker.oci] max-parallelism = ${{ inputs.max-parallelism }} install: true - name: Cache ccache uses: actions/cache@v4 with: path: | root-ccache key: ccache-tools-${{ inputs.platform }}-${{ hashFiles('src/**/*.cpp') }} restore-keys: | ccache-tools-${{ inputs.platform }}- - name: Cache apt-get uses: actions/cache@v4 with: path: | var-cache-apt key: apt-get-tools-${{ inputs.platform }}-${{ hashFiles('src/**/package.xml') }} restore-keys: | apt-get-tools-${{ inputs.platform }}- - name: Inject cache into docker # TODO(youtalk): Use the release version again uses: reproducible-containers/buildkit-cache-dance@7c892679bab8ff382a8c88ab7f973d5e30a8f239 with: utility-image: ghcr.io/containerd/busybox:latest cache-map: | { "root-ccache": "/root/.ccache", "var-cache-apt": "/var/cache/apt" } skip-extraction: ${{ steps.cache-ccache.outputs.cache-hit && steps.cache-apt-get.outputs.cache-hit }} - name: Get current date id: date run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT shell: bash - name: Docker meta for autoware-tools:visualizer id: meta-visualizer uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=visualizer-${{ inputs.platform }} type=raw,value=visualizer-${{ steps.date.outputs.date }}-${{ inputs.platform }} type=ref,event=tag,prefix=visualizer-,suffix=-${{ inputs.platform }} bake-target: docker-metadata-action-visualizer flavor: | latest=false - name: Docker meta for autoware-tools:scenario-simulator id: meta-scenario-simulator uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} tags: | type=raw,value=scenario-simulator-${{ inputs.platform }} type=raw,value=scenario-simulator-${{ steps.date.outputs.date }}-${{ inputs.platform }} type=ref,event=tag,prefix=scenario-simulator-,suffix=-${{ inputs.platform }} bake-target: docker-metadata-action-scenario-simulator flavor: | latest=false - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: Build and Push to GitHub Container Registry uses: docker/bake-action@v5 with: push: true files: | docker/tools/docker-bake.hcl ${{ steps.meta-visualizer.outputs.bake-file }} ${{ steps.meta-scenario-simulator.outputs.bake-file }} provenance: false set: | ${{ inputs.build-args }} ================================================ FILE: .github/actions/free-disk-space/action.yaml ================================================ name: free-disk-space description: "" runs: using: composite steps: - name: Install sudo run: | if ! (command -v sudo >/dev/null 2>&1); then apt-get -y update apt-get -y install sudo fi shell: bash - name: Free Disk Space (Ubuntu) uses: jlumbroso/free-disk-space@main with: # this might remove tools that are actually needed, # if set to "true" but frees about 6 GB tool-cache: true # all of these default to true, but feel free to set to # "false" if necessary for your workflow android: true dotnet: true haskell: true large-packages: true docker-images: true swap-storage: false ================================================ FILE: .github/dependabot.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. version: 2 updates: - package-ecosystem: github-actions directory: / # https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#scheduleinterval schedule: interval: monthly open-pull-requests-limit: 1 labels: - tag:bot - type:github-actions ================================================ FILE: .github/pull_request_template.md ================================================ ## Description ## How was this PR tested? ================================================ FILE: .github/stale.yml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. # Modified from https://github.com/probot/stale#usage # Number of days of inactivity before an Issue or Pull Request with the stale label is closed daysUntilClose: false # Label to use when marking as stale staleLabel: status:stale # Comment to post when marking as stale markComment: > This pull request has been automatically marked as stale because it has not had recent activity. ================================================ FILE: .github/sync-files.yaml ================================================ - repository: autowarefoundation/sync-file-templates source-dir: sources files: - source: .github/ISSUE_TEMPLATE/bug.yaml - source: .github/ISSUE_TEMPLATE/config.yml - source: .github/ISSUE_TEMPLATE/task.yaml - source: .github/dependabot.yaml - source: .github/stale.yml - source: .github/workflows/backport.yaml - source: .github/workflows/comment-on-pr.yaml - source: .github/workflows/github-release.yaml - source: .github/workflows/pre-commit-optional.yaml - source: .github/workflows/pre-commit.yaml - source: .github/workflows/semantic-pull-request.yaml - source: .github/workflows/spell-check-differential.yaml - source: .github/workflows/spell-check-daily.yaml - source: .github/workflows/sync-files.yaml - source: .clang-format - source: .clang-tidy - source: .markdown-link-check.json - source: .markdownlint.yaml - source: .pre-commit-config-optional.yaml - source: .pre-commit-config.yaml - source: .prettierignore - source: .prettierrc.yaml - source: .yamllint.yaml - source: CODE_OF_CONDUCT.md - source: CONTRIBUTING.md - source: CPPLINT.cfg - source: DISCLAIMER.md - source: LICENSE - source: setup.cfg ================================================ FILE: .github/workflows/autoware-base.yaml ================================================ name: autoware-base on: push: branches: - main paths: - .github/actions/docker-build-and-push-base - .github/workflows/autoware-base.yaml - amd64.env - ansible-galaxy-requirements.yaml - ansible/playbooks/openadkit.yaml - ansible/roles/** - arm64.env - docker/Dockerfile.base - docker/etc - docker/scripts/cleanup_*.sh - setup-dev-env.sh schedule: - cron: 0 0 15 * * # every 15th of the month workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: autoware-base: strategy: matrix: platform: [humble, jazzy] include: - platform: humble runner: ubuntu-22.04 env-file: amd64.env suffix: "" # no suffix for humble since it is default set-latest: true - platform: jazzy runner: ubuntu-24.04 env-file: amd64_jazzy.env suffix: -jazzy set-latest: false runs-on: ${{ matrix.runner }} steps: - name: Check out this repository uses: actions/checkout@v4 - name: Free disk space uses: ./.github/actions/free-disk-space - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: # cSpell:ignore tonistiigi, binfmt image: tonistiigi/binfmt:qemu-v7.0.0 - name: Load env file id: load-env uses: falti/dotenv-action@v1 with: path: ${{ matrix.env-file }} export-variables: true log-variables: true - name: Build Autoware's base images uses: ./.github/actions/docker-build-and-push-base with: target-image: autoware-base build-args: | *.platform=linux/amd64,linux/arm64 *.args.ROS_DISTRO=${{ steps.load-env.outputs.rosdistro }} *.args.BASE_IMAGE=${{ steps.load-env.outputs.base_image }} suffix: ${{ matrix.suffix }} set-latest: ${{ matrix.set-latest }} ================================================ FILE: .github/workflows/backport.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. name: backport on: pull_request_target: types: - closed - labeled jobs: backport: runs-on: ubuntu-22.04 # Only react to merged PRs for security reasons. # See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target. if: > github.event.pull_request.merged && ( github.event.action == 'closed' || ( github.event.action == 'labeled' && contains(github.event.label.name, 'backport') ) ) steps: - name: Generate token id: generate-token uses: tibdex/github-app-token@v2 with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.PRIVATE_KEY }} - uses: tibdex/backport@v2 id: backport with: github_token: ${{ steps.generate-token.outputs.token }} title_template: "<%= title %> (backport #<%= number %>)" - name: Request review from original author env: GH_TOKEN: ${{ steps.generate-token.outputs.token }} PR_JSON: ${{ steps.backport.outputs.created_pull_requests }} ORIGINAL_AUTHOR: ${{ github.event.pull_request.user.login }} run: | set -e echo "Created PRs JSON: $PR_JSON" echo "Original PR Author: $ORIGINAL_AUTHOR" # Use 'jq' to parse the JSON and extract all PR numbers pr_numbers=($(echo "$PR_JSON" | jq -r 'to_entries | .[] | .value')) # Loop through the array of PR numbers for pr_num in "${pr_numbers[@]}"; do if [ -n "$pr_num" ]; then echo "Requesting review for PR #$pr_num from $ORIGINAL_AUTHOR..." gh pr edit "$pr_num" --add-reviewer "$ORIGINAL_AUTHOR" --repo "${{ github.repository }}" fi done ================================================ FILE: .github/workflows/bump-repo-versions-autoware.yaml ================================================ name: bump-repo-versions-autoware on: schedule: - cron: 0 0,6,12,18 * * * workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: create-version-update-pr: runs-on: ubuntu-22.04 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 for autoware.repos 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: repositories/autoware.repos verbosity: 0 ================================================ FILE: .github/workflows/bump-repo-versions-simulator.yaml ================================================ name: bump-repo-versions-simulator on: schedule: - cron: 0 0,6,12,18 * * * workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: create-version-update-pr: runs-on: ubuntu-22.04 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 for simulator.repos 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 base_branch: main new_branch_prefix: feat/update- autoware_repos_file_name: repositories/simulator.repos verbosity: 0 ================================================ FILE: .github/workflows/bump-repo-versions-tools.yaml ================================================ name: bump-repo-versions-tools on: schedule: - cron: 0 0,6,12,18 * * * workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: create-version-update-pr: runs-on: ubuntu-22.04 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 for tools.repos 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: repositories/tools.repos verbosity: 0 ================================================ FILE: .github/workflows/comment-on-pr.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. name: comment-on-pr on: pull_request_target: jobs: comment-on-pr: runs-on: ubuntu-22.04 permissions: pull-requests: write steps: - name: Check out repository uses: actions/checkout@v4 - name: Initial PR comment uses: marocchino/sticky-pull-request-comment@v2 with: message: | Thank you for contributing to the Autoware project! 🚧 If your pull request is in progress, [switch it to draft mode](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft). Please ensure: - You've checked our [contribution guidelines](https://autowarefoundation.github.io/autoware-documentation/main/contributing/). - Your PR follows our [pull request guidelines](https://autowarefoundation.github.io/autoware-documentation/main/contributing/pull-request-guidelines/). - All required CI checks pass before [marking the PR ready for review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#marking-a-pull-request-as-ready-for-review). ================================================ FILE: .github/workflows/dco.yaml ================================================ name: DCO # ref: https://github.com/anchore/syft/pull/2926/files on: pull_request: jobs: dco: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Setup Python 3.x uses: actions/setup-python@v5 with: python-version: 3.x - name: Check DCO env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | pip3 install -U dco-check dco-check --verbose --exclude-pattern 'pre-commit-ci\[bot\]@users\.noreply\.github\.com' ================================================ FILE: .github/workflows/docker-build-and-push.yaml ================================================ name: docker-build-and-push on: push: branches: - main tags: - "*.*.*" workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: load-env: uses: ./.github/workflows/load-env.yaml with: env_file: amd64.env docker-build-and-push: needs: load-env strategy: matrix: platform: [amd64, arm64] include: - platform: amd64 runner: ubuntu-22.04 arch-platform: linux/amd64 lib-dir: x86_64 - platform: arm64 runner: ubuntu-22.04-arm arch-platform: linux/arm64 lib-dir: aarch64 runs-on: ${{ matrix.runner }} steps: # https://github.com/actions/checkout/issues/211 - name: Change permission of workspace run: | sudo chown -R $USER:$USER ${{ github.workspace }} - name: Check out repository uses: actions/checkout@v4 - name: Set git config uses: autowarefoundation/autoware-github-actions/set-git-config@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Get changed files id: changed-files uses: step-security/changed-files@v46 with: files: | *.env repositories/*.repos .github/actions/combine-multi-arch-images/action.yaml .github/actions/docker-build-and-push*/action.yaml .github/workflows/docker-build-and-push.yaml ansible-galaxy-requirements.yaml ansible/** docker/** - name: Free disk space if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/free-disk-space - name: Build 'Autoware' without CUDA if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/docker-build-and-push with: platform: ${{ matrix.platform }} target-image: autoware build-args: | *.platform=${{ matrix.arch-platform }} *.args.ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }} *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env.outputs.autoware_base_image }} *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env.outputs.autoware_base_cuda_image }} *.args.LIB_DIR=${{ matrix.lib-dir }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-main *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }},mode=max - name: Show disk space if: always() run: | df -h docker-build-and-push-tools: needs: [load-env, docker-build-and-push] strategy: matrix: platform: [amd64, arm64] include: - platform: amd64 runner: ubuntu-22.04 arch-platform: linux/amd64 lib-dir: x86_64 - platform: arm64 runner: ubuntu-22.04-arm arch-platform: linux/arm64 lib-dir: aarch64 runs-on: ${{ matrix.runner }} steps: - name: Check out repository uses: actions/checkout@v4 - name: Set git config uses: autowarefoundation/autoware-github-actions/set-git-config@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Get changed files id: changed-files uses: step-security/changed-files@v46 with: files: | *.env repositories/*.repos .github/actions/combine-multi-arch-images/action.yaml .github/actions/docker-build-and-push*/action.yaml .github/workflows/docker-build-and-push.yaml ansible-galaxy-requirements.yaml ansible/** docker/** - name: Free disk space if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/free-disk-space - name: Build 'autoware-tools' if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/docker-build-and-push-tools with: platform: ${{ matrix.platform }} target-image: autoware-tools build-args: | *.platform=${{ matrix.arch-platform }} *.args.ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }} *.args.LIB_DIR=${{ matrix.lib-dir }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-main *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }},mode=max - name: Show disk space if: always() run: | df -h docker-build-and-push-cuda: needs: [load-env, docker-build-and-push] strategy: matrix: platform: [amd64, arm64] include: - platform: amd64 runner: [self-hosted, Linux, X64] arch-platform: linux/amd64 lib-dir: x86_64 - platform: arm64 runner: [self-hosted, Linux, ARM64] arch-platform: linux/arm64 lib-dir: aarch64 runs-on: ${{ matrix.runner }} steps: # https://github.com/actions/checkout/issues/211 - name: Change permission of workspace run: | sudo chown -R $USER:$USER ${{ github.workspace }} - name: Check out repository uses: actions/checkout@v4 - name: Set git config uses: autowarefoundation/autoware-github-actions/set-git-config@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Get changed files id: changed-files uses: step-security/changed-files@v46 with: files: | *.env repositories/*.repos .github/actions/combine-multi-arch-images/action.yaml .github/actions/docker-build-and-push*/action.yaml .github/workflows/docker-build-and-push.yaml ansible-galaxy-requirements.yaml ansible/** docker/** - name: Free disk space if: ${{ runner.environment == 'github-hosted' && (steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag')) }} uses: ./.github/actions/free-disk-space - name: Build 'Autoware' with CUDA if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/docker-build-and-push-cuda with: platform: ${{ matrix.platform }} target-image: autoware build-args: | *.platform=${{ matrix.arch-platform }} *.args.ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }} *.args.BASE_IMAGE=${{ needs.load-env.outputs.base_image }} *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env.outputs.autoware_base_image }} *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env.outputs.autoware_base_cuda_image }} *.args.LIB_DIR=${{ matrix.lib-dir }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-main *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-${{ github.ref_name }},mode=max - name: Show disk space if: always() run: | df -h update-docker-manifest: needs: docker-build-and-push runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 - name: Combine multi arch images for 'autoware' without CUDA uses: ./.github/actions/combine-multi-arch-images with: package-name: autoware update-docker-manifest-cuda: needs: docker-build-and-push-cuda runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 - name: Combine multi arch images for 'autoware' with CUDA uses: ./.github/actions/combine-multi-arch-images with: package-name: autoware update-docker-manifest-tools: needs: docker-build-and-push-tools runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 - name: Combine multi arch images for 'autoware-tools' uses: ./.github/actions/combine-multi-arch-images with: package-name: autoware-tools load-env-jazzy: uses: ./.github/workflows/load-env.yaml with: env_file: amd64_jazzy.env docker-build-and-push-jazzy: needs: [load-env-jazzy] strategy: matrix: platform: [amd64, arm64] include: - platform: amd64 runner: ubuntu-24.04 arch-platform: linux/amd64 lib-dir: x86_64 - platform: arm64 runner: ubuntu-24.04-arm arch-platform: linux/arm64 lib-dir: aarch64 runs-on: ${{ matrix.runner }} steps: # https://github.com/actions/checkout/issues/211 - name: Change permission of workspace run: | sudo chown -R $USER:$USER ${{ github.workspace }} - name: Check out repository uses: actions/checkout@v4 - name: Set git config uses: autowarefoundation/autoware-github-actions/set-git-config@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Get changed files id: changed-files uses: step-security/changed-files@v46 with: files: | *.env repositories/*.repos .github/actions/combine-multi-arch-images/action.yaml .github/actions/docker-build-and-push*/action.yaml .github/workflows/docker-build-and-push.yaml ansible-galaxy-requirements.yaml ansible/** docker/** - name: Free disk space if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/free-disk-space - name: Build 'Autoware Jazzy Universe' without CUDA if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/docker-build-and-push with: platform: ${{ matrix.platform }} target-image: autoware build-args: | *.platform=${{ matrix.arch-platform }} *.args.ROS_DISTRO=${{ needs.load-env-jazzy.outputs.rosdistro }} *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_image }} *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_cuda_image }} *.args.LIB_DIR=${{ matrix.lib-dir }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-${{ github.ref_name }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-main *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-${{ github.ref_name }},mode=max set-latest: false suffix: -jazzy - name: Show disk space if: always() run: | df -h docker-build-and-push-jazzy-cuda: needs: [load-env-jazzy, docker-build-and-push-jazzy] strategy: matrix: platform: [amd64, arm64] include: - platform: amd64 runner: [self-hosted, Linux, X64] arch-platform: linux/amd64 lib-dir: x86_64 - platform: arm64 runner: [self-hosted, Linux, ARM64] arch-platform: linux/arm64 lib-dir: aarch64 runs-on: ${{ matrix.runner }} steps: # https://github.com/actions/checkout/issues/211 - name: Change permission of workspace run: | sudo chown -R $USER:$USER ${{ github.workspace }} - name: Check out repository uses: actions/checkout@v4 - name: Set git config uses: autowarefoundation/autoware-github-actions/set-git-config@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Get changed files id: changed-files uses: step-security/changed-files@v46 with: files: | *.env *.repos .github/actions/combine-multi-arch-images/action.yaml .github/actions/docker-build-and-push*/action.yaml .github/workflows/docker-build-and-push.yaml ansible-galaxy-requirements.yaml ansible/** docker/** - name: Free disk space if: ${{ runner.environment == 'github-hosted' && (steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag')) }} uses: ./.github/actions/free-disk-space - name: Build 'Autoware Jazzy Universe' with CUDA if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref_type == 'tag') }} uses: ./.github/actions/docker-build-and-push-cuda with: platform: ${{ matrix.platform }} target-image: autoware build-args: | *.platform=${{ matrix.arch-platform }} *.args.ROS_DISTRO=${{ needs.load-env-jazzy.outputs.rosdistro }} *.args.BASE_IMAGE=${{ needs.load-env-jazzy.outputs.base_image }} *.args.AUTOWARE_BASE_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_image }} *.args.AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env-jazzy.outputs.autoware_base_cuda_image }} *.args.LIB_DIR=${{ matrix.lib-dir }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-cuda-${{ github.ref_name }} *.cache-from=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-cuda-main *.cache-to=type=registry,ref=ghcr.io/${{ github.repository }}-buildcache:${{ matrix.platform }}-jazzy-cuda-${{ github.ref_name }},mode=max suffix: -jazzy - name: Show disk space if: always() run: | df -h update-docker-manifest-jazzy: needs: [docker-build-and-push-jazzy] runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 - name: Combine multi arch images for 'autoware' Jazzy uses: ./.github/actions/combine-multi-arch-images with: package-name: autoware update-docker-manifest-jazzy-cuda: needs: [docker-build-and-push-jazzy-cuda] runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 - name: Combine multi arch images for 'autoware' Jazzy with CUDA uses: ./.github/actions/combine-multi-arch-images with: package-name: autoware ================================================ FILE: .github/workflows/github-release.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. name: github-release on: push: tags: - "[0-9]+.[0-9]+.[0-9]+" workflow_dispatch: inputs: tag-name: description: The name of the tag to release type: string required: true concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: github-release: runs-on: ubuntu-22.04 steps: - name: Set tag name id: set-tag-name run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then REF_NAME="${{ github.event.inputs.tag-name }}" else REF_NAME="${{ github.ref_name }}" fi echo "tag-name=$REF_NAME" >> $GITHUB_OUTPUT - name: Check out repository uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ steps.set-tag-name.outputs.tag-name }} - name: Run generate-changelog id: generate-changelog uses: autowarefoundation/autoware-github-actions/generate-changelog@v1 with: git-cliff-args: --tag-pattern "^(\d+)\.(\d+)\.(\d+)$" --latest - name: Select verb id: select-verb run: | has_previous_draft=$(gh release view --json isDraft -q ".isDraft" "${{ steps.set-tag-name.outputs.tag-name }}") || true verb=create if [ "$has_previous_draft" = "true" ]; then verb=edit fi echo "verb=$verb" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Release to GitHub run: | gh release ${{ steps.select-verb.outputs.verb }} "${{ steps.set-tag-name.outputs.tag-name }}" \ --draft \ --title "${{ steps.set-tag-name.outputs.tag-name }}" \ --notes "$NOTES" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NOTES: ${{ steps.generate-changelog.outputs.changelog }} ================================================ FILE: .github/workflows/health-check.yaml ================================================ name: health-check on: pull_request: types: - opened - synchronize - reopened - labeled schedule: - cron: 0 12 * * * workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: label-check: uses: autowarefoundation/autoware-github-actions/.github/workflows/make-sure-label-is-present.yaml@v1 with: label: run:health-check load-env: needs: label-check if: ${{ needs.label-check.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} uses: ./.github/workflows/load-env.yaml docker-build: needs: load-env strategy: fail-fast: false matrix: build-type: [main, nightly, main-arm64] include: - build-type: main platform: amd64 runner: "['self-hosted','Linux','X64']" lib-dir: x86_64 container: ubuntu:22.04 - build-type: nightly platform: amd64 runner: "['ubuntu-24.04']" lib-dir: x86_64 - build-type: main-arm64 platform: arm64 runner: "['ubuntu-24.04-arm']" lib-dir: aarch64 runs-on: ${{ fromJson(matrix.runner) }} steps: - name: Clean up previous run artifacts run: sudo rm -rf ${{ github.workspace }}/scenario_out # https://github.com/actions/checkout/issues/211 - name: Change permission of workspace run: | sudo chown -R $USER:$USER ${{ github.workspace }} - name: Check out repository uses: actions/checkout@v4 - name: Set git config uses: autowarefoundation/autoware-github-actions/set-git-config@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Get changed files id: changed-files uses: step-security/changed-files@v46 with: files: | *.env repositories/*.repos .github/actions/docker-build/action.yaml .github/workflows/health-check.yaml ansible-galaxy-requirements.yaml ansible/** docker/** setup-dev-env.sh - name: Show disk space if: always() run: | df -h - name: Free disk space if: ${{ steps.changed-files.outputs.any_changed == 'true' && matrix.build-type != 'main' }} uses: ./.github/actions/free-disk-space - name: Build 'Autoware' if: ${{ steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} uses: ./.github/actions/docker-build with: platform: ${{ matrix.platform }} cache-tag-suffix: ${{ matrix.build-type }} image-artifact-name: ${{ matrix.build-type == 'main' && 'autoware-image' || '' }} additional-repos: ${{ matrix.build-type == 'nightly' && 'repositories/autoware-nightly.repos' || '' }} build-args: | ROS_DISTRO=${{ needs.load-env.outputs.rosdistro }} AUTOWARE_BASE_IMAGE=${{ needs.load-env.outputs.autoware_base_image }} AUTOWARE_BASE_CUDA_IMAGE=${{ needs.load-env.outputs.autoware_base_cuda_image }} LIB_DIR=${{ matrix.lib-dir }} - name: Show disk space if: always() run: | df -h scenario-test: needs: docker-build uses: ./.github/workflows/scenario-test-reusable.yaml with: autoware_container_image: autoware:health-check-${{ github.sha }} ================================================ FILE: .github/workflows/keep-build-cache-small.yaml ================================================ name: keep-build-cache-small on: workflow_dispatch: schedule: - cron: 0 6 * * * concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: keep-build-cache-small: runs-on: ubuntu-latest strategy: matrix: include: - image_tag: amd64-main cache_threshold_gb: 7.0 - image_tag: arm64-main cache_threshold_gb: 9.0 env: IMAGE_NAME: autoware-buildcache steps: - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y skopeo jq bc - name: Set up environment variables run: | echo "CACHE_THRESHOLD_GB=${{ matrix.cache_threshold_gb }}" >> "$GITHUB_ENV" echo "IMAGE_TAG=${{ matrix.image_tag }}" >> "$GITHUB_ENV" echo "BUILD_CACHE_IMAGE=ghcr.io/autowarefoundation/${{ env.IMAGE_NAME }}:${{ matrix.image_tag }}" >> "$GITHUB_ENV" - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Check if build cache image exists id: check_image run: | echo "🔍 Checking if build cache image exists..." if skopeo inspect --raw docker://${{ env.BUILD_CACHE_IMAGE }} > /dev/null 2>&1; then echo "✅ Build cache image found. Proceeding..." echo "exists=true" >> "$GITHUB_OUTPUT" else echo "⚠️ Build cache image does not exist. Skipping remaining steps." echo "exists=false" >> "$GITHUB_OUTPUT" fi - name: Calculate cache size id: calc_size if: steps.check_image.outputs.exists == 'true' run: | echo "🔍 Inspecting build cache size for image: ${{ env.BUILD_CACHE_IMAGE }}..." SIZE_BYTES=$(skopeo inspect --raw docker://${{ env.BUILD_CACHE_IMAGE }} | jq '.layers | map(.size) | add') SIZE_GB=$(echo "scale=2; $SIZE_BYTES / (1024 * 1024 * 1024)" | bc) echo "Cache size: ${SIZE_GB} GB" echo "size_gb=${SIZE_GB}" >> "$GITHUB_OUTPUT" - name: Compare cache size with threshold id: check_threshold if: steps.check_image.outputs.exists == 'true' run: | echo "📊 Checking cache size against threshold..." THRESHOLD_GB=${{ env.CACHE_THRESHOLD_GB }} CACHE_SIZE_GB=${{ steps.calc_size.outputs.size_gb }} if (( $(echo "$CACHE_SIZE_GB > $THRESHOLD_GB" | bc -l) )); then echo "❌ Cache size exceeds threshold. Action needed." echo "status=exceeded" >> "$GITHUB_OUTPUT" else echo "✅ Cache size is within threshold. No action needed." echo "status=ok" >> "$GITHUB_OUTPUT" fi - name: Delete build cache if exceeded uses: bots-house/ghcr-delete-image-action@v1.1.0 if: steps.check_threshold.outputs.status == 'exceeded' with: name: ${{ env.IMAGE_NAME }} tag: ${{ matrix.image_tag }} owner: ${{ github.repository_owner }} token: ${{ secrets.GITHUB_TOKEN }} - name: Verify cache deletion if: steps.check_threshold.outputs.status == 'exceeded' id: verify_deletion run: | echo "🔍 Verifying if build cache image has been deleted..." if skopeo inspect --raw docker://${{ env.BUILD_CACHE_IMAGE }} > /dev/null 2>&1; then echo "❌ Build cache image still exists!" echo "status=failed" >> "$GITHUB_OUTPUT" exit 1 else echo "✅ Build cache image successfully deleted." echo "status=success" >> "$GITHUB_OUTPUT" fi - name: Generate workflow summary if: always() run: | SUMMARY="# 📦 Build Cache Size Check\n" SUMMARY+="- **Image**: \`${{ env.BUILD_CACHE_IMAGE }}\`\n" if [[ "${{ steps.check_image.outputs.exists }}" == "false" ]]; then SUMMARY+="⚠️ **Build cache image does not exist. Skipping checks.**\n" else SUMMARY+="- **Cache Size**: ${{ steps.calc_size.outputs.size_gb }} GB\n" SUMMARY+="- **Threshold**: ${{ env.CACHE_THRESHOLD_GB }} GB\n" if [[ "${{ steps.check_threshold.outputs.status }}" == "exceeded" ]]; then if [[ "${{ steps.verify_deletion.outputs.status }}" != "success" ]]; then SUMMARY+="❌ **Cache size exceeded, but deletion failed!**\n" else SUMMARY+="🗑️✅ **Cache size exceeded. Image deleted successfully!**\n" fi else SUMMARY+="👌✅ **Cache size is within acceptable limits.**\n" fi fi echo -e "$SUMMARY" echo -e "$SUMMARY" >> $GITHUB_STEP_SUMMARY ================================================ FILE: .github/workflows/load-env.yaml ================================================ name: load-env on: workflow_call: inputs: env_file: description: Specify the env file to load (e.g., amd64.env, amd64_jazzy.env) required: false type: string default: "" outputs: rosdistro: value: ${{ jobs.load-env.outputs.rosdistro }} base_image: value: ${{ jobs.load-env.outputs.base_image }} autoware_base_image: value: ${{ jobs.load-env.outputs.autoware_base_image }} autoware_base_cuda_image: value: ${{ jobs.load-env.outputs.autoware_base_cuda_image }} jobs: load-env: runs-on: ubuntu-22.04 outputs: rosdistro: ${{ steps.set-env.outputs.rosdistro }} base_image: ${{ steps.set-env.outputs.base_image }} autoware_base_image: ${{ steps.set-env.outputs.autoware_base_image }} autoware_base_cuda_image: ${{ steps.set-env.outputs.autoware_base_cuda_image }} steps: - name: Check out repository uses: actions/checkout@v4 - name: Load env run: | # Check if env_file is specified if [ -n "${{ inputs.env_file }}" ]; then # Use specified env file echo "Loading specified env file: ${{ inputs.env_file }}" cat ${{ inputs.env_file }} | sed -e "s/^\s*//" -e "/^#/d" >> $GITHUB_ENV else # Auto-detect based on ROS_DISTRO rosdistro=${ROS_DISTRO:-humble} echo "rosdistro=$rosdistro" >> $GITHUB_ENV # Determine which env file to use based on rosdistro if [ "$rosdistro" = "humble" ]; then echo "Loading amd64.env for Humble" cat amd64.env | sed -e "s/^\s*//" -e "/^#/d" >> $GITHUB_ENV else echo "Loading amd64_jazzy.env for Jazzy" cat amd64_jazzy.env | sed -e "s/^\s*//" -e "/^#/d" >> $GITHUB_ENV fi fi # Load ARM64 specific env if on ARM64 architecture if [ "$(uname -m)" = "aarch64" ]; then echo "Loading arm64.env for ARM64 architecture" cat arm64.env | sed -e "s/^\s*//" -e "/^#/d" >> $GITHUB_ENV fi - name: Set env id: set-env run: | echo "rosdistro=${{ env.rosdistro }}" >> $GITHUB_OUTPUT echo "base_image=${{ env.base_image }}" >> $GITHUB_OUTPUT echo "autoware_base_image=${{ env.autoware_base_image }}" >> $GITHUB_OUTPUT echo "autoware_base_cuda_image=${{ env.autoware_base_cuda_image }}" >> $GITHUB_OUTPUT ================================================ FILE: .github/workflows/mirror-main-branch.yaml ================================================ name: mirror-main-branch on: push: branches: - main workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: mirror-main-branch: runs-on: ubuntu-22.04 steps: - uses: zofrex/mirror-branch@v1 with: target-branch: humble ================================================ FILE: .github/workflows/pre-commit-ansible-autoupdate.yaml ================================================ name: pre-commit-ansible-autoupdate on: schedule: - cron: 0 0 * * * workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: check-secret: uses: autowarefoundation/autoware-github-actions/.github/workflows/check-secret.yaml@v1 secrets: secret: ${{ secrets.APP_ID }} pre-commit-ansible-autoupdate: needs: check-secret if: ${{ needs.check-secret.outputs.set == 'true' }} runs-on: ubuntu-22.04 steps: - name: Generate token id: generate-token uses: tibdex/github-app-token@v2 with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.PRIVATE_KEY }} - name: Run pre-commit-autoupdate uses: autowarefoundation/autoware-github-actions/pre-commit-autoupdate@v1 with: token: ${{ steps.generate-token.outputs.token }} pre-commit-config: .pre-commit-config-ansible.yaml pr-labels: | tag:bot tag:pre-commit-autoupdate pr-branch: pre-commit-ansible-autoupdate pr-title: "ci(pre-commit-ansible): autoupdate" pr-commit-message: "ci(pre-commit-ansible): autoupdate" auto-merge-method: squash ================================================ FILE: .github/workflows/pre-commit-ansible.yaml ================================================ name: pre-commit-ansible on: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: pre-commit-ansible: runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 - name: Set git config uses: autowarefoundation/autoware-github-actions/set-git-config@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - name: Install Ansible Galaxy depends for ansible-lint run: | ansible-galaxy collection install -f -r ansible-galaxy-requirements.yaml - name: Run pre-commit uses: autowarefoundation/autoware-github-actions/pre-commit@v1 with: pre-commit-config: .pre-commit-config-ansible.yaml ================================================ FILE: .github/workflows/pre-commit-optional.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. name: pre-commit-optional on: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: pre-commit-optional: runs-on: ubuntu-22.04 steps: - name: Check out repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Run pre-commit uses: autowarefoundation/autoware-github-actions/pre-commit@v1 with: pre-commit-config: .pre-commit-config-optional.yaml base-branch: origin/${{ github.base_ref }} ================================================ FILE: .github/workflows/pre-commit.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. name: pre-commit on: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true jobs: pre-commit: if: ${{ github.event.repository.private }} # Use pre-commit.ci for public repositories runs-on: ubuntu-22.04 steps: - name: Generate token id: generate-token uses: tibdex/github-app-token@v2 with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.PRIVATE_KEY }} - name: Check out repository uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.ref }} - name: Run pre-commit uses: autowarefoundation/autoware-github-actions/pre-commit@v1 with: pre-commit-config: .pre-commit-config.yaml token: ${{ steps.generate-token.outputs.token }} ================================================ FILE: .github/workflows/scenario-test-reusable.yaml ================================================ name: scenario-test-reusable on: workflow_call: inputs: autoware_container_image: type: string required: true description: Autoware docker image tag to use for the scenario test runner: type: string default: "['self-hosted', 'Linux', 'X64']" required: false architecture-type: type: string default: awf/universe/20250130 required: false sensor-model: type: string default: sample_sensor_kit required: false vehicle-model: type: string default: sample_vehicle required: false jobs: scenario-test: runs-on: ${{ fromJson(inputs.runner) }} steps: - name: Clean up previous run artifacts run: | sudo rm -rf ${{ github.workspace }}/scenario_out sudo chown -R $USER:$USER ${{ github.workspace }} - name: Check out repository uses: actions/checkout@v4 - name: Download Docker image artifact uses: actions/download-artifact@v4 with: name: autoware-image path: /tmp - name: Load Docker image run: docker load < /tmp/autoware-image.tar.gz - name: Verify Docker image exists env: IMAGE_TAG: ${{ inputs.autoware_container_image }} run: | echo "Checking for image in local Docker daemon..." if ! docker inspect "$IMAGE_TAG" > /dev/null 2>&1; then echo "::error::Image $IMAGE_TAG not found!" exit 1 fi docker images "$IMAGE_TAG" df -h - name: Run scenario test in built Docker image env: IMAGE_TAG: ${{ inputs.autoware_container_image }} SENSOR_MODEL: ${{ inputs.sensor-model }} VEHICLE_MODEL: ${{ inputs.vehicle-model }} ARCHITECTURE_TYPE: ${{ inputs.architecture-type }} run: | mkdir -p ${{ github.workspace }}/scenario_out docker run --rm \ -e SENSOR_MODEL \ -e VEHICLE_MODEL \ -e ARCHITECTURE_TYPE \ -v "${{ github.workspace }}:/workspace" \ -v "${{ github.workspace }}/scenario_out:/out" \ "$IMAGE_TAG" \ bash -c ' set -e echo "Installing test dependencies..." apt-get update && apt-get install -y python3-pip git unzip wget curl pip3 install --upgrade gdown vcstool echo "Setting up simulator workspace..." cd /workspace mkdir -p /autoware_ws/src cd /autoware_ws vcs import src < /workspace/repositories/simulator.repos echo "Sourcing Autoware environment..." source /opt/ros/humble/setup.bash source /opt/autoware/setup.bash echo "Installing simulator dependencies..." rosdep update rosdep install --from-paths src --ignore-src -r -y || true echo "Downgrading xmlschema for compatibility..." pip3 install --user xmlschema==3.4.5 echo "Building scenario_test_runner..." export CMAKE_DISABLE_PRECOMPILE_HEADERS=ON colcon build --symlink-install \ --cmake-args -DCMAKE_BUILD_TYPE=Release \ --executor sequential echo "Sourcing the built workspace..." source /autoware_ws/install/setup.bash echo "Downloading test data..." cd /out # cspell: ignore Uownh Ietur gdown --id 1Tq7snfDPsuPHPtl50aL5fJY6paiC-HxV -O sample-scenario.yaml mkdir -p /out/autoware_map gdown --id 1499_nsbUbIeturZaDj7jhUownh5fvXHd -O sample-map-planning.zip if [ -f sample-map-planning.zip ]; then unzip -q sample-map-planning.zip -d /out/autoware_map fi echo "Fixing paths in scenario file..." sed -i "s@/home/user/@/out/@g" sample-scenario.yaml echo "Running scenario test..." export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp mkdir -p /out/results ros2 launch scenario_test_runner scenario_test_runner.launch.py \ architecture_type:=$ARCHITECTURE_TYPE \ record:=true \ scenario:="/out/sample-scenario.yaml" \ sensor_model:=$SENSOR_MODEL \ vehicle_model:=$VEHICLE_MODEL \ initialize_duration:=300 \ output_directory:=/out/results \ simulate_localization:=true \ initial_pose:="[0.0, 0.0, 0.0]" \ launch_rviz:=false \ frame_rate:=1 \ disable_lanelet_pose_validation:=true 2>&1 | tee /out/scenario_output.log || true echo "Cleaning up processes..." pkill -9 -f ros2 || true pkill -9 -f scenario_test_runner || true pkill -9 -f openscenario_interpreter_node || true ' - name: Check for test failures run: | RESULT_FILE="${{ github.workspace }}/scenario_out/results/scenario_test_runner/result.junit.xml" if [ ! -f "$RESULT_FILE" ]; then echo "::error::Result file not found! Simulation likely crashed." exit 1 fi echo "Checking for failures in $RESULT_FILE..." if grep -q -E '&1 | tee scenario_output.log || true else echo "ERROR: sample-scenario.yaml is missing!" exit 1 fi - name: Check for Test Failures shell: bash run: | RESULT_FILE="./results/scenario_test_runner/result.junit.xml" if [ ! -f "$RESULT_FILE" ]; then echo "::error::Result file not found! Simulation likely crashed." exit 1 fi echo "Checking for failures in $RESULT_FILE..." # Check for failure or error tags in the JUnit XML if grep -q -E '` use `apt-get install =` - DL3013 # Pin versions in pip. Instead of `pip install `, use `pip install ==` - DL3015 # Avoid additional packages by specifying `--no-install-recommends` - DL3009 # Delete the apt-get lists after installing something ================================================ FILE: .markdown-link-check.json ================================================ { "aliveStatusCodes": [200, 206, 403], "ignorePatterns": [ { "pattern": "^http://localhost" }, { "pattern": "^http://127\\.0\\.0\\.1" }, { "pattern": "^https://github.com/.*/discussions/new" } ], "retryOn429": true, "retryCount": 10 } ================================================ FILE: .markdownlint.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. # See https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md for all rules. default: true MD013: false MD024: siblings_only: true MD029: style: ordered MD033: false MD041: false MD045: false MD046: false MD049: false MD059: false ================================================ FILE: .pre-commit-config-ansible.yaml ================================================ repos: - repo: https://github.com/ansible/ansible-lint.git rev: v25.8.2 hooks: - id: ansible-lint args: - ansible/ additional_dependencies: - ansible ================================================ FILE: .pre-commit-config-optional.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. # https://pre-commit.ci/#configuration ci: autofix_commit_msg: "style(pre-commit-optional): autofix" autoupdate_schedule: quarterly autoupdate_commit_msg: "ci(pre-commit-optional): quarterly autoupdate" repos: - repo: https://github.com/tcort/markdown-link-check rev: v3.14.2 hooks: - id: markdown-link-check args: [--quiet, --config=.markdown-link-check.json] ================================================ FILE: .pre-commit-config.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. # https://pre-commit.ci/#configuration ci: autofix_commit_msg: "style(pre-commit): autofix" autoupdate_schedule: quarterly autoupdate_commit_msg: "ci(pre-commit): quarterly autoupdate" repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: check-json - id: check-merge-conflict - id: check-toml - id: check-xml - id: check-yaml args: [--unsafe] - id: detect-private-key - id: end-of-file-fixer - id: mixed-line-ending - id: trailing-whitespace args: [--markdown-linebreak-ext=md] - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.47.0 hooks: - id: markdownlint args: [-c, .markdownlint.yaml, --fix] - repo: https://github.com/pre-commit/mirrors-prettier rev: v4.0.0-alpha.8 hooks: - id: prettier args: [--no-error-on-unmatched-pattern] - repo: https://github.com/adrienverge/yamllint rev: v1.37.1 hooks: - id: yamllint - repo: https://github.com/autowarefoundation/autoware-guideline-check rev: 0.2.0 hooks: - id: check-package-depends - repo: https://github.com/tier4/pre-commit-hooks-ros rev: v0.10.0 hooks: - id: flake8-ros - id: prettier-xacro - id: prettier-launch-xml - id: prettier-package-xml - id: ros-include-guard - id: sort-package-xml - repo: https://github.com/shellcheck-py/shellcheck-py rev: v0.11.0.1 hooks: - id: shellcheck - repo: https://github.com/scop/pre-commit-shfmt rev: v3.12.0-2 hooks: - id: shfmt args: [-w, -s, -i=4] - repo: https://github.com/pycqa/isort rev: 7.0.0 hooks: - id: isort args: [--profile=black, --line-length=100] - repo: https://github.com/psf/black-pre-commit-mirror rev: 25.12.0 hooks: - id: black args: [--line-length=100] - repo: https://github.com/pre-commit/mirrors-clang-format rev: v21.1.8 hooks: - id: clang-format types_or: [c++, c, cuda] - repo: https://github.com/cpplint/cpplint rev: 2.0.2 hooks: - id: cpplint args: [--quiet] exclude: .cu - repo: https://github.com/python-jsonschema/check-jsonschema rev: 0.36.0 hooks: - id: check-metaschema files: ^.+/schema/.*schema\.json$ - repo: local hooks: - id: prettier-svg name: prettier svg description: Apply Prettier with plugin-xml to svg. entry: prettier --write --list-different --ignore-unknown --print-width 200 --xml-self-closing-space false --xml-whitespace-sensitivity ignore language: node files: .svg$ additional_dependencies: [prettier@2.7.1, "@prettier/plugin-xml@2.2.0"] - repo: https://github.com/AleksaC/hadolint-py rev: v2.14.0 hooks: - id: hadolint exclude: .svg$ ================================================ FILE: .prettierignore ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. *.param.yaml *.rviz ================================================ FILE: .prettierrc.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. printWidth: 100 tabWidth: 2 overrides: - files: package.xml options: printWidth: 1000 xmlSelfClosingSpace: false xmlWhitespaceSensitivity: ignore - files: "*.launch.xml" options: printWidth: 200 xmlSelfClosingSpace: false xmlWhitespaceSensitivity: ignore - files: "*.xacro" options: printWidth: 200 xmlSelfClosingSpace: false xmlWhitespaceSensitivity: ignore ================================================ FILE: .rgignore ================================================ !/src/ ================================================ FILE: .shellcheckrc ================================================ external-sources=true ================================================ FILE: .webauto-ci/main/autoware-build/run.sh ================================================ #!/bin/bash -e : "${WEBAUTO_CI_SOURCE_PATH:?is not set}" : "${WEBAUTO_CI_DEBUG_BUILD:?is not set}" : "${AUTOWARE_PATH:?is not set}" : "${CCACHE_DIR:=}" : "${CCACHE_SIZE:=1G}" : "${PARALLEL_WORKERS:=4}" sudo mkdir "$AUTOWARE_PATH" sudo chown "$(whoami)": "$AUTOWARE_PATH" cd "$WEBAUTO_CI_SOURCE_PATH" cp -r src .webauto-ci.* "$AUTOWARE_PATH" cd "$AUTOWARE_PATH" if [ -n "$CCACHE_DIR" ]; then mkdir -p "$CCACHE_DIR" export USE_CCACHE=1 export CCACHE_DIR="$CCACHE_DIR" export CC="/usr/lib/ccache/gcc" export CXX="/usr/lib/ccache/g++" ccache -M "$CCACHE_SIZE" fi # install xmlschema<4.0.0 before rosdep install as workaround for scenario_simulator_v2 sudo pip3 install xmlschema==3.4.5 sudo -E apt-get -y update # shellcheck disable=SC2012 ROS_DISTRO=$(ls -1 /opt/ros | head -1) # shellcheck disable=SC1090 source "/opt/ros/$ROS_DISTRO/setup.bash" rosdep update rosdep install -y --from-paths src --ignore-src --rosdistro "$ROS_DISTRO" [[ $WEBAUTO_CI_DEBUG_BUILD == "true" ]] && build_type="RelWithDebInfo" || build_type="Release" colcon build \ --cmake-args -DCMAKE_BUILD_TYPE="$build_type" -DBUILD_TESTING=off -Wno-dev --no-warn-unused-cli \ --symlink-install \ --catkin-skip-building-tests \ --executor parallel \ --parallel-workers "$PARALLEL_WORKERS" sudo -E apt-get -y autoremove ================================================ FILE: .webauto-ci/main/autoware-setup/run.sh ================================================ #!/bin/bash -e ansible_args=() ansible_args+=("--extra-vars" "prompt_install_nvidia=y") ansible_args+=("--extra-vars" "prompt_download_artifacts=y") ansible_args+=("--extra-vars" "data_dir=$HOME/autoware_data") ansible_args+=("--extra-vars" "ros2_installation_type=ros-base") ansible_args+=("--extra-vars" "install_devel=false") # read amd64 env file and expand ansible arguments source 'amd64.env' while read -r env_name; do ansible_args+=("--extra-vars" "${env_name}=${!env_name}") done < <( grep -v '^\s*#' amd64.env | grep -v '^\s*$' | sed 's/#.*//' | # remove trailing comments sed 's/=.*//' # extract variable name ) ansible-galaxy collection install -f -r "ansible-galaxy-requirements.yaml" ansible-playbook "ansible/playbooks/universe.yaml" \ "${ansible_args[@]}" \ -e WORKSPACE_ROOT="$(pwd)" \ --skip-tags vcs ================================================ FILE: .webauto-ci/main/environment-setup/run.sh ================================================ #!/bin/bash -e apt-get update apt-get -y install sudo curl wget unzip gnupg lsb-release ccache python3-apt python3-pip apt-utils software-properties-common jq add-apt-repository universe pip install --no-cache-dir 'ansible==10.*' user=autoware useradd -m "$user" -s /bin/bash echo "$user:$user" | chpasswd echo "$user ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers gpasswd -a "$user" sudo ================================================ FILE: .webauto-ci.yaml ================================================ # The configuration file for Web.Auto CI/CD tool. # https://docs.web.auto/user-manuals/evaluator/configuration/reference/introduction version: 2 artifacts: - name: main metadata: play-ondemand.ci.web.auto/buildspec: Autoware-Humble_v0.29.0 build: type: custom runtime: type: standard1/amd64/large source: vcstool: repositories_files: - repositories/autoware.repos - repositories/simulator.repos import_path: src environment_variables: AUTOWARE_PATH: /opt/autoware DEBIAN_FRONTEND: noninteractive LANG: C.UTF-8 linux_parameters: kernel_version: 5.19.0-50-generic phases: - name: environment-setup user: root exec: ./.webauto-ci/main/environment-setup/run.sh caches: - name: apt-lists mountpoint: /var/lib/apt/lists - name: apt-archives mountpoint: /var/cache/apt/archives build_result_reuse: key_files: - .webauto-ci/main/environment-setup/**/* - name: autoware-setup user: autoware exec: ./.webauto-ci/main/autoware-setup/run.sh caches: - name: apt-lists mountpoint: /var/lib/apt/lists - name: apt-archives mountpoint: /var/cache/apt/archives build_result_reuse: key_files: - .webauto-ci/main/autoware-setup/**/* - ansible/**/* - ansible-galaxy-requirements.yaml - amd64.env incremental_build: enabled: true - name: autoware-build user: autoware exec: ./.webauto-ci/main/autoware-build/run.sh environment_variables: PARALLEL_WORKERS: "32" CCACHE_DIR: /tmp/build/cache/ccache caches: - name: apt-lists mountpoint: /var/lib/apt/lists - name: apt-archives mountpoint: /var/cache/apt/archives - name: ccache mountpoint: /tmp/build/cache/ccache build_result_reuse: key_files: - .webauto-ci/main/autoware-build/**/* - src/**/* base_container_image: from: ubuntu:22.04 output_container_image: from: autoware-build workdir: /opt/autoware user: autoware simulations: - name: lexus_planning_sim type: planning_sim_v2 simulator: deployment: type: container artifact: main runtime: type: standard1/amd64/medium parameters: launch_autoware: "true" autoware_launch_package: autoware_launch autoware_launch_file: planning_simulator.launch.xml architecture_type: awf/universe/20250130 vehicle_model: sample_vehicle sensor_model: sample_sensor_kit initialize_duration: "90" launch_visualization: "false" release: components: - name: planning deployment: type: container artifact: main - name: perception deployment: type: container artifact: main ================================================ FILE: .yamllint.yaml ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. extends: default ignore: | *.param.yaml rules: braces: level: error max-spaces-inside: 1 # To format with Prettier comments: level: error min-spaces-from-content: 1 # To be compatible with C++ and Python document-start: level: error present: false # Don't need document start markers line-length: disable # Delegate to Prettier truthy: level: error check-keys: false # To allow 'on' of GitHub Actions quoted-strings: level: error required: only-when-needed # To keep consistent style ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: - Demonstrating empathy and kindness toward other people - Being respectful of differing opinions, viewpoints, and experiences - Giving and gracefully accepting constructive feedback - Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience - Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: - The use of sexualized language or imagery, and sexual attention or advances of any kind - Trolling, insulting or derogatory comments, and personal or political attacks - Public or private harassment - Publishing others' private information, such as a physical or email address, without their explicit permission - Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at . All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][mozilla coc]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][faq]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [mozilla coc]: https://github.com/mozilla/diversity [faq]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing See . ================================================ FILE: CPPLINT.cfg ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. # Modified from https://github.com/ament/ament_lint/blob/ebd524bb9973d5ec1dc48a670ce54f958a5a0243/ament_cpplint/ament_cpplint/main.py#L64-L120 set noparent linelength=100 includeorder=standardcfirst filter=-build/c++11 # we do allow C++11 filter=-build/c++17 # we allow filter=-build/namespaces_literals # we allow using namespace for literals filter=-runtime/references # we consider passing non-const references to be ok filter=-whitespace/braces # we wrap open curly braces for namespaces, classes and functions filter=-whitespace/indent # we don't indent keywords like public, protected and private with one space filter=-whitespace/newline # we allow the developer to decide about newline at the end of file (it's clashing with clang-format) filter=-whitespace/parens # we allow closing parenthesis to be on the next line filter=-whitespace/semicolon # we allow the developer to decide about whitespace after a semicolon filter=-build/header_guard # we automatically fix the names of header guards using pre-commit filter=-build/include_order # we use the custom include order filter=-build/include_subdir # we allow the style of "foo.hpp" ================================================ FILE: DISCLAIMER.md ================================================ DISCLAIMER “Autoware” will be provided by The Autoware Foundation under the Apache License 2.0. This “DISCLAIMER” will be applied to all users of Autoware (a “User” or “Users”) with the Apache License 2.0 and Users shall hereby approve and acknowledge all the contents specified in this disclaimer below and will be deemed to consent to this disclaimer without any objection upon utilizing or downloading Autoware. Disclaimer and Waiver of Warranties 1. AUTOWARE FOUNDATION MAKES NO REPRESENTATION OR WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH RESPECT TO PROVIDING AUTOWARE (the “Service”) including but not limited to any representation or warranty (i) of fitness or suitability for a particular purpose contemplated by the Users, (ii) of the expected functions, commercial value, accuracy, or usefulness of the Service, (iii) that the use by the Users of the Service complies with the laws and regulations applicable to the Users or any internal rules established by industrial organizations, (iv) that the Service will be free of interruption or defects, (v) of the non-infringement of any third party's right and (vi) the accuracy of the content of the Services and the software itself. 2. The Autoware Foundation shall not be liable for any damage incurred by the User that are attributable to the Autoware Foundation for any reasons whatsoever. UNDER NO CIRCUMSTANCES SHALL THE AUTOWARE FOUNDATION BE LIABLE FOR INCIDENTAL, INDIRECT, SPECIAL OR FUTURE DAMAGES OR LOSS OF PROFITS. 3. A User shall be entirely responsible for the content posted by the User and its use of any content of the Service or the Website. If the User is held responsible in a civil action such as a claim for damages or even in a criminal case, the Autoware Foundation and member companies, governments and academic & non-profit organizations and their directors, officers, employees and agents (collectively, the “Indemnified Parties”) shall be completely discharged from any rights or assertions the User may have against the Indemnified Parties, or from any legal action, litigation or similar procedures. Indemnity A User shall indemnify and hold the Indemnified Parties harmless from any of their damages, losses, liabilities, costs or expenses (including attorneys' fees or criminal compensation), or any claims or demands made against the Indemnified Parties by any third party, due to or arising out of, or in connection with utilizing Autoware (including the representations and warranties), the violation of applicable Product Liability Law of each country (including criminal case) or violation of any applicable laws by the Users, or the content posted by the User or its use of any content of the Service or the Website. ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: NOTICE ================================================ autowarefoundation/autoware Copyright 2021 The Autoware Foundation This product includes software developed at The Autoware Foundation (https://www.autoware.org/). This product includes code developed by TIER IV. Copyright 2021 TIER IV, Inc. ================================================ FILE: README.md ================================================ # Autoware - the world's leading open-source software project for autonomous driving ![Autoware_RViz](https://user-images.githubusercontent.com/63835446/158918717-58d6deaf-93fb-47f9-891d-e242b02cba7b.png)

Autoware Universe Contributors Autoware Contributors

Autoware Universe Activity Autoware Activity

License

health-check CI Code Coverage

Autoware Discord Autoware Twitter / X Autoware Linkedin

Autoware is an open-source software stack for self-driving vehicles, built on the [Robot Operating System (ROS)](https://www.ros.org/). It includes all of the necessary functions to drive an autonomous vehicles from localization and object detection to route planning and control, and was created with the aim of enabling as many individuals and organizations as possible to contribute to open innovations in autonomous driving technology. ![Autoware architecture](https://static.wixstatic.com/media/984e93_552e338be28543c7949717053cc3f11f~mv2.png/v1/crop/x_0,y_1,w_1500,h_879/fill/w_863,h_506,al_c,usm_0.66_1.00_0.01,enc_auto/Autoware-GFX_edited.png) ## Documentation To learn more about using or developing Autoware, refer to the [Autoware documentation site](https://autowarefoundation.github.io/autoware-documentation/main/). You can find the source for the documentation in [autowarefoundation/autoware-documentation](https://github.com/autowarefoundation/autoware-documentation). ## Repository overview - [autowarefoundation/autoware](https://github.com/autowarefoundation/autoware) - Meta-repository containing `.repos` files to construct an Autoware workspace. - It is anticipated that this repository will be frequently forked by users, and so it contains minimal information to avoid unnecessary differences. - [autowarefoundation/autoware_core](https://github.com/autowarefoundation/autoware_core) - Main repository for high-quality, stable ROS packages for Autonomous Driving. - Based on [Autoware.Auto](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto) and [Autoware.Universe](https://github.com/autowarefoundation/autoware_universe). - [autowarefoundation/autoware_universe](https://github.com/autowarefoundation/autoware_universe) - Repository for experimental, cutting-edge ROS packages for Autonomous Driving. - Autoware Universe was created to make it easier for researchers and developers to extend the functionality of Autoware Core - [autowarefoundation/autoware_launch](https://github.com/autowarefoundation/autoware_launch) - Launch configuration repository containing node configurations and their parameters. - [autowarefoundation/autoware-github-actions](https://github.com/autowarefoundation/autoware-github-actions) - Contains [reusable GitHub Actions workflows](https://docs.github.com/ja/actions/learn-github-actions/reusing-workflows) used by multiple repositories for CI. - Utilizes the [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) concept. - [autowarefoundation/autoware-documentation](https://github.com/autowarefoundation/autoware-documentation) - Documentation repository for Autoware users and developers. - Since Autoware Core/Universe has multiple repositories, a central documentation repository is important to make information accessible from a single place. ## Using Autoware.AI If you wish to use Autoware.AI, the previous version of Autoware based on ROS 1, switch to [autoware-ai](https://github.com/autowarefoundation/autoware_ai) repository. However, be aware that Autoware.AI has reached the end-of-life as of 2022, and we strongly recommend transitioning to Autoware Core/Universe for future use. ## Contributing - [There is no formal process to become a contributor](https://github.com/autowarefoundation/autoware-projects/wiki#contributors) - you can comment on any [existing issues](https://github.com/autowarefoundation/autoware_universe/issues) or make a pull request on any Autoware repository! - Make sure to follow the [Contribution Guidelines](https://autowarefoundation.github.io/autoware-documentation/main/contributing/). - Take a look at Autoware's [various working groups](https://github.com/autowarefoundation/autoware-projects/wiki#working-group-list) to gain an understanding of any work in progress and to see how projects are managed. - If you have any technical questions, you can start a discussion in the [Q&A category](https://github.com/autowarefoundation/autoware/discussions/categories/q-a) to request help and confirm if a potential issue is a bug or not. ## Useful resources - [Autoware Foundation homepage](https://www.autoware.org/) - [Support guidelines](https://autowarefoundation.github.io/autoware-documentation/main/support/support-guidelines/) - [CI metrics](https://autowarefoundation.github.io/autoware-ci-metrics/) ================================================ FILE: amd64.env ================================================ # ROS distribution (humble) rosdistro=humble rmw_implementation=rmw_cyclonedds_cpp # Base image selection for Humble base_image=ros:humble-ros-base-jammy autoware_base_image=ghcr.io/autowarefoundation/autoware-base:latest autoware_base_cuda_image=ghcr.io/autowarefoundation/autoware-base:cuda-latest cuda_version=12.8 tensorrt_version=10.8.0.43-1+cuda12.8 cumm_version=0.5.3 spconv_version=2.3.8 ================================================ FILE: amd64_jazzy.env ================================================ # ROS distribution (jazzy) rosdistro=jazzy rmw_implementation=rmw_cyclonedds_cpp # Jazzy-specific overrides (will be set by build.sh) base_image=ros:jazzy-ros-base-noble autoware_base_image=ghcr.io/autowarefoundation/autoware-base:latest-jazzy autoware_base_cuda_image=ghcr.io/autowarefoundation/autoware-base:cuda-latest-jazzy cuda_version=12.8 tensorrt_version=10.8.0.43-1+cuda12.8 cumm_version=0.5.3 spconv_version=2.3.8 ================================================ FILE: ansible/.gitignore ================================================ *.retry ================================================ FILE: ansible/COLCON_IGNORE ================================================ ================================================ FILE: ansible/README.md ================================================ # Ansible Collection - autoware.dev_env This collection contains the playbooks to set up the development environment for Autoware. ## Set up a development environment ### Ansible installation ```bash # Remove apt installed ansible (In Ubuntu 22.04, ansible the version is old) sudo apt-get purge ansible # Install pipx sudo apt-get -y update sudo apt-get -y install pipx # Add pipx to the system PATH python3 -m pipx ensurepath # Install ansible pipx install --include-deps --force "ansible==10.*" ``` ### Install ansible collections This step should be repeated when a new playbook is added. ```bash cd ~/autoware # The root directory of the cloned repository ansible-galaxy collection install -f -r "ansible-galaxy-requirements.yaml" ``` ================================================ FILE: ansible/galaxy.yml ================================================ # Required namespace: autoware name: dev_env version: 0.1.0 readme: README.md authors: - Kenji Miyake # Optional description: Set up development environment for Autoware license: - Apache-2.0 tags: - autoware dependencies: {} repository: https://github.com/autowarefoundation/autoware documentation: https://autowarefoundation.github.io/autoware-documentation homepage: https://www.autoware.org/ issues: https://github.com/autowarefoundation/autoware/issues build_ignore: [] ================================================ FILE: ansible/playbooks/docker.yaml ================================================ - name: Set up Docker development environments for Autoware hosts: localhost connection: local vars_prompt: - name: prompt_install_nvidia prompt: |- [Warning] Some Autoware components depend on the CUDA, and TensorRT NVIDIA libraries which have end-user license agreements that should be reviewed before installation. Install NVIDIA libraries? [y/N] private: false pre_tasks: - name: Print args ansible.builtin.debug: msg: - cuda_version: "{{ cuda_version }}" - name: Show a warning if the NVIDIA libraries will not be installed ansible.builtin.pause: seconds: 10 prompt: | [Warning] Skipping installation of NVIDIA libraries. Please manually install them if you plan to use any dependent components. when: prompt_install_nvidia != 'y' roles: - role: autoware.dev_env.cuda when: prompt_install_nvidia == 'y' - role: autoware.dev_env.docker_engine - role: autoware.dev_env.nvidia_container_toolkit ================================================ FILE: ansible/playbooks/download_artifacts.yaml ================================================ - name: Download Autoware artifacts hosts: localhost roles: - autoware.dev_env.artifacts ================================================ FILE: ansible/playbooks/install_rviz_theme.yaml ================================================ - name: Install RViz theme hosts: localhost roles: - autoware.dev_env.qt5ct_setup ================================================ FILE: ansible/playbooks/install_spconv.yaml ================================================ - name: Download and install the cumm and spconv packages hosts: localhost roles: - autoware.dev_env.spconv ================================================ FILE: ansible/playbooks/openadkit.yaml ================================================ - name: Set up source development environments for Autoware Universe hosts: localhost connection: local pre_tasks: - name: Verify OS ansible.builtin.fail: msg: Only Ubuntu 22.04 and 24.04 are supported for this branch. Please refer to https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/. when: ansible_distribution != 'Ubuntu' or (ansible_distribution_version != '22.04' and ansible_distribution_version != '24.04') - name: Print args ansible.builtin.debug: msg: - module: "{{ module }}" - rosdistro: "{{ rosdistro }}" - rmw_implementation: "{{ rmw_implementation }}" - cuda_version: "{{ cuda_version }}" - tensorrt_version: "{{ tensorrt_version }}" roles: # Autoware base dependencies - role: autoware.dev_env.rmw_implementation when: module == 'base' vars: rmw_implementation__rosdistro: "{{ rosdistro }}" rmw_implementation__name: "{{ rmw_implementation }}" - role: autoware.dev_env.gdown when: module == 'base' - role: autoware.dev_env.kisak_mesa when: module == 'base' and rosdistro != 'jazzy' - role: autoware.dev_env.build_tools when: module == 'all' and install_devel=='y' # Module specific dependencies - role: autoware.dev_env.acados when: module == 'all' - role: autoware.dev_env.geographiclib when: module == 'perception-localization' or module == 'all' - role: autoware.dev_env.cuda when: (module == 'base' or module == 'perception-localization' or module == 'all') and prompt_install_nvidia=='y' - role: autoware.dev_env.tensorrt when: (module == 'base' or module == 'perception-localization' or module == 'all') and prompt_install_nvidia=='y' - role: autoware.dev_env.spconv when: (module == 'base' or module == 'perception-localization' or module == 'all') and prompt_install_nvidia=='y' # Development environment - role: autoware.dev_env.dev_tools when: module == 'dev-tools' - role: autoware.dev_env.ros2_dev_tools when: module == 'dev-tools' # ONNX files and other artifacts - role: autoware.dev_env.artifacts when: prompt_download_artifacts == 'y' ================================================ FILE: ansible/playbooks/role_rmw_implementation.yaml ================================================ - name: Install RMW implementation hosts: localhost roles: - role: autoware.dev_env.rmw_implementation vars: rmw_implementation__rosdistro: "{{ rosdistro }}" rmw_implementation__name: "{{ rmw_implementation }}" ================================================ FILE: ansible/playbooks/setup_acados.yaml ================================================ - name: Setup acados hosts: localhost connection: local roles: - role: autoware.dev_env.acados ================================================ FILE: ansible/playbooks/telegraf.yaml ================================================ - name: Set up Telegraf and InfluxDB v2 hosts: localhost roles: - autoware.dev_env.telegraf ================================================ FILE: ansible/playbooks/universe.yaml ================================================ - name: Set up source development environments for Autoware Universe hosts: localhost connection: local vars_prompt: - name: prompt_install_nvidia prompt: |- [Warning] Some Autoware components depend on the CUDA, and TensorRT NVIDIA libraries which have end-user license agreements that should be reviewed before installation. Install NVIDIA libraries? [y/N] private: false - name: prompt_download_artifacts prompt: |- [Warning] Should the ONNX model files and other artifacts be downloaded alongside setting up the development environment. Download artifacts? [y/N] private: false - name: install_devel prompt: |- [Warning] Do you want to install recommended development tools for Autoware? [y/N] private: false default: y pre_tasks: - name: Verify OS ansible.builtin.fail: msg: Only Ubuntu 22.04 and 24.04 are supported for this branch. Please refer to https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/. when: ansible_distribution_version not in ['22.04', '24.04'] - name: Print args ansible.builtin.debug: msg: - rosdistro: "{{ rosdistro }}" - rmw_implementation: "{{ rmw_implementation }}" - cuda_version: "{{ cuda_version }}" - tensorrt_version: "{{ tensorrt_version }}" - name: Show a warning if the NVIDIA libraries will not be installed ansible.builtin.pause: seconds: 10 prompt: | [Warning] Skipping installation of NVIDIA libraries. Please manually install them if you plan to use any dependent components. when: prompt_install_nvidia != 'y' roles: # Autoware base dependencies - role: autoware.dev_env.ros2 - role: autoware.dev_env.ros2_dev_tools - role: autoware.dev_env.rmw_implementation vars: rmw_implementation__rosdistro: "{{ rosdistro }}" rmw_implementation__name: "{{ rmw_implementation }}" - role: autoware.dev_env.gdown - role: autoware.dev_env.build_tools - role: autoware.dev_env.agnocast when: rosdistro == 'humble' # Autoware module dependencies - role: autoware.dev_env.acados - role: autoware.dev_env.geographiclib - role: autoware.dev_env.cuda when: prompt_install_nvidia == 'y' - role: autoware.dev_env.tensorrt when: prompt_install_nvidia == 'y' - role: autoware.dev_env.spconv when: prompt_install_nvidia == 'y' # Autoware devel dependencies - role: autoware.dev_env.dev_tools when: install_devel == 'y' # 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 ================================================ FILE: ansible/roles/acados/README.md ================================================ # Setup acados Installs [acados](https://github.com/acados/acados), a fast and embedded solver for nonlinear optimal control, from source. ## What it does 1. Clones the acados repository (shallow) to `/opt/acados` 2. Initializes submodules (shallow) 3. Builds and installs acados in-tree with `QPOASES` and position-independent code enabled 4. Downloads the [tera renderer](https://github.com/acados/tera_renderer) binary to `/opt/acados/bin/t_renderer` (supports `x86_64` and `aarch64`) 5. Creates a Python virtual environment at `/opt/acados/.venv` 6. Installs `casadi`, `sympy`, and `acados_template` (editable) in the venv 7. Adds `CMAKE_PREFIX_PATH`, `ACADOS_SOURCE_DIR`, and `LD_LIBRARY_PATH` to the user's `.bashrc` ## Installation ⭐ Install ansible following the instructions in the [ansible installation guide](../../README.md#ansible-installation). ```bash cd ~/autoware # The root directory of the cloned repository ansible-galaxy collection install -f -r "ansible-galaxy-requirements.yaml" ``` This step should be repeated when the ansible directory is updated. ```bash ansible-playbook autoware.dev_env.setup_acados --ask-become-pass ``` ## Directory layout After running, `/opt/acados` contains both the source tree and installed artifacts: ```text /opt/acados/ ├── .venv/ # Python virtual environment ├── bin/t_renderer # tera renderer binary ├── build/ # cmake build directory ├── cmake/ # acadosConfig.cmake (used by find_package) ├── lib/ # built shared libraries ├── include/ # headers ├── interfaces/ # acados_template Python package (installed to .venv) ├── external/ # submodules (qpoases, etc.) └── ... # remaining source tree ``` ## Usage in CMake After provisioning, any CMake project can use acados with: ```cmake find_package(acados REQUIRED) target_link_libraries(your_target PRIVATE acados) ``` No additional path configuration is needed, `CMAKE_PREFIX_PATH` is set via `.bashrc`. ## Using the Python interface during `colcon build` If your ROS 2 package generates acados C code at build time (e.g. via a Python script that uses `acados_template` and `casadi`), you need to source the venv so the code-generation script can find the installed packages. The Ansible role already exports `ACADOS_SOURCE_DIR` and `LD_LIBRARY_PATH` in `.bashrc`, so those are available to `colcon build` as long as you've sourced your shell. The only extra step is pointing CMake at the venv Python so `casadi`, `sympy`, and `acados_template` are importable: ```cmake find_program(ACADOS_PYTHON NAMES python3 PATHS $ENV{ACADOS_SOURCE_DIR}/.venv/bin NO_DEFAULT_PATH) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/acados_solver.c COMMAND ${ACADOS_PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_solver.py --output-dir ${CMAKE_CURRENT_BINARY_DIR}/generated DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_solver.py COMMENT "Generating acados solver C code" ) ``` The generated C code is then compiled as part of your normal CMake target, no Python dependency at runtime. ## Requirements - CMake - A C compiler (gcc/clang) - `make` - `git` - `python3` with `venv` module (`python3-venv` on Ubuntu) ## Idempotency The role is safe to run multiple times. The git clone resets any local modifications, and the build steps re-run on each invocation to ensure correctness when the version is changed. The `.bashrc` entries use `lineinfile` with regex matching to avoid duplication. The venv creation is skipped if it already exists (`creates` guard). ================================================ FILE: ansible/roles/acados/defaults/main.yaml ================================================ acados_version: v0.5.3 acados_tera_renderer_version: v0.2.0 acados_pip_packages: - casadi - sympy ================================================ FILE: ansible/roles/acados/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/acados/tasks/main.yaml ================================================ - name: Clone acados repository (shallow) with submodules become: true ansible.builtin.git: repo: https://github.com/acados/acados.git dest: /opt/acados version: "{{ acados_version }}" depth: 1 force: true recursive: true - name: Create build directory become: true ansible.builtin.file: path: /opt/acados/build state: directory mode: "0755" # cspell:ignore DACADOS - name: Configure acados with CMake become: true ansible.builtin.command: cmd: > cmake -DACADOS_WITH_QPOASES=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. chdir: /opt/acados/build changed_when: false - name: Build and install acados become: true ansible.builtin.command: cmd: make install -j{{ ansible_processor_vcpus }} chdir: /opt/acados/build changed_when: false - name: Create acados bin directory become: true ansible.builtin.file: path: /opt/acados/bin state: directory mode: "0755" - name: Set tera renderer architecture ansible.builtin.set_fact: acados_tera_arch: "{{ {'x86_64': 'amd64', 'aarch64': 'arm64'}[ansible_architecture] }}" - name: Download tera renderer become: true ansible.builtin.get_url: url: https://github.com/acados/tera_renderer/releases/download/{{ acados_tera_renderer_version }}/t_renderer-{{ acados_tera_renderer_version }}-linux-{{ acados_tera_arch }} dest: /opt/acados/bin/t_renderer mode: "0755" # ---------- Python virtual environment ---------- - name: Create acados Python virtual environment become: true ansible.builtin.command: cmd: python3 -m venv /opt/acados/.venv creates: /opt/acados/.venv/bin/activate - name: Upgrade pip inside the virtual environment become: true ansible.builtin.command: cmd: /opt/acados/.venv/bin/pip install --upgrade pip changed_when: false - name: Install Python packages in acados venv become: true ansible.builtin.command: cmd: /opt/acados/.venv/bin/pip install {{ acados_pip_packages | join(' ') }} changed_when: false - name: Install acados_template (editable) in acados venv become: true ansible.builtin.command: cmd: /opt/acados/.venv/bin/pip install -e /opt/acados/interfaces/acados_template changed_when: false # ---------- Environment (.bashrc) ---------- - name: Add acados CMAKE_PREFIX_PATH to .bashrc become: true ansible.builtin.lineinfile: path: "{{ item }}" line: export CMAKE_PREFIX_PATH="/opt/acados:${CMAKE_PREFIX_PATH}" regexp: CMAKE_PREFIX_PATH.*acados state: present loop: - "{{ ansible_env.HOME }}/.bashrc" - /etc/skel/.bashrc - name: Add ACADOS_SOURCE_DIR to .bashrc become: true ansible.builtin.lineinfile: path: "{{ item }}" line: export ACADOS_SOURCE_DIR="/opt/acados" regexp: ACADOS_SOURCE_DIR state: present loop: - "{{ ansible_env.HOME }}/.bashrc" - /etc/skel/.bashrc - name: Add acados LD_LIBRARY_PATH to .bashrc become: true ansible.builtin.lineinfile: path: "{{ item }}" line: export LD_LIBRARY_PATH="/opt/acados/lib:${LD_LIBRARY_PATH}" regexp: LD_LIBRARY_PATH.*acados state: present loop: - "{{ ansible_env.HOME }}/.bashrc" - /etc/skel/.bashrc ================================================ FILE: ansible/roles/agnocast/README.md ================================================ # agnocast This role installs [Agnocast](https://github.com/tier4/agnocast), true zero-copy communication middleware for all ROS 2 message types. ## Inputs None. ## Manual Installation ```bash agnocast_version="2.1.2" agnocast_heaphook_package="agnocast-heaphook-v${agnocast_version}" agnocast_kmod_package="agnocast-kmod-v${agnocast_version}" sudo add-apt-repository -y ppa:t4-system-software/agnocast sudo apt update sudo apt install -y "${agnocast_heaphook_package}" if dkms status | grep agnocast | grep -q "{agnocast_version}"; then echo "agnocast-kmod-v${agnocast_version} is already registered in dkms. Skipping purge and install." else sudo apt purge -y "${agnocast_kmod_package}" sudo apt install -y "${agnocast_kmod_package}" fi ``` ================================================ FILE: ansible/roles/agnocast/defaults/main.yaml ================================================ agnocast_version: 2.3.1 agnocast_heaphook_package: agnocast-heaphook-v{{ agnocast_version }} agnocast_kmod_package: agnocast-kmod-v{{ agnocast_version }} ================================================ FILE: ansible/roles/agnocast/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/agnocast/tasks/main.yaml ================================================ # Remove legacy agnocast PPA configuration (if exists) - name: Remove legacy agnocast PPA via add-apt-repository ansible.builtin.command: add-apt-repository --remove ppa:t4-system-software/agnocast -y register: agnocast_legacy_ppa_remove failed_when: false changed_when: agnocast_legacy_ppa_remove.rc == 0 become: true - name: Remove legacy agnocast sources.list files ansible.builtin.shell: rm -f /etc/apt/sources.list.d/*agnocast*.list args: executable: /bin/bash register: agnocast_legacy_sources_remove changed_when: false become: true - name: Remove legacy agnocast GPG keys from trusted.gpg.d ansible.builtin.shell: rm -f /etc/apt/trusted.gpg.d/*agnocast*.gpg args: executable: /bin/bash register: agnocast_legacy_gpg_remove changed_when: false become: true # TODO(rej55, sykwer): IPv6 support - name: Save current IPv6 settings ansible.builtin.shell: | sysctl net.ipv6.conf.all.disable_ipv6 sysctl net.ipv6.conf.default.disable_ipv6 register: agnocast_ipv6_settings changed_when: false become: true - name: Temporarily disable IPv6 ansible.posix.sysctl: name: "{{ item.name }}" value: 1 sysctl_set: true state: present loop: - { name: net.ipv6.conf.all.disable_ipv6 } - { name: net.ipv6.conf.default.disable_ipv6 } become: true - name: Create /etc/apt/keyrings directory ansible.builtin.file: path: /etc/apt/keyrings state: directory mode: "0755" become: true - name: Download agnocast PPA GPG key while IPv6 is disabled ansible.builtin.get_url: url: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xCFDB1950382092423DF37D3E075CD8B5C91E5ACA dest: /tmp/agnocast-ppa.asc mode: "0644" become: true register: agnocast_gpg_key_download - name: Convert GPG key to binary format and install ansible.builtin.shell: | gpg --dearmor < /tmp/agnocast-ppa.asc > /etc/apt/keyrings/agnocast-ppa.gpg chmod 0644 /etc/apt/keyrings/agnocast-ppa.gpg args: creates: /etc/apt/keyrings/agnocast-ppa.gpg become: true - name: Remove temporary GPG key file ansible.builtin.file: path: /tmp/agnocast-ppa.asc state: absent become: true - name: Verify GPG key fingerprint ansible.builtin.shell: | set -o pipefail gpg --show-keys /etc/apt/keyrings/agnocast-ppa.gpg | grep -q 'CFDB1950382092423DF37D3E075CD8B5C91E5ACA' args: executable: /bin/bash register: agnocast_gpg_verify failed_when: agnocast_gpg_verify.rc != 0 changed_when: false - name: Display GPG key verification success ansible.builtin.debug: msg: "GPG key fingerprint verified successfully: CFDB1950382092423DF37D3E075CD8B5C91E5ACA" - name: Add agnocast repository ansible.builtin.copy: dest: /etc/apt/sources.list.d/agnocast.sources content: | Types: deb URIs: http://ppa.launchpad.net/t4-system-software/agnocast/ubuntu Suites: jammy Components: main Signed-By: /etc/apt/keyrings/agnocast-ppa.gpg mode: "0644" become: true - name: Restore original IPv6 settings # noqa: no-changed-when ansible.posix.sysctl: name: "{{ item.split('=')[0] | trim }}" value: 0 sysctl_set: true state: present loop: "{{ agnocast_ipv6_settings.stdout_lines }}" when: item is search('=\\s*0') become: true - name: Update apt cache ansible.builtin.apt: update_cache: true become: true - name: Install {{ agnocast_heaphook_package }} ansible.builtin.apt: name: "{{ agnocast_heaphook_package }}" state: present become: true # Detect container environment - name: Check if running in a container using systemd-detect-virt ansible.builtin.command: systemd-detect-virt -c register: agnocast_container_detection failed_when: false changed_when: false - name: Set container environment fact ansible.builtin.set_fact: agnocast_is_container: "{{ agnocast_container_detection.rc == 0 }}" - name: Display environment detection result ansible.builtin.debug: msg: "Running in container: {{ agnocast_is_container }} (detected: {{ agnocast_container_detection.stdout | default('none') }})" - name: Display info when skipping agnocast-kmod in container ansible.builtin.debug: msg: "WARNING: Running in container environment. Skipping agnocast-kmod installation. Please ensure agnocast-kmod is installed on the host system for proper functionality of agnocast." when: agnocast_is_container - name: Handle kernel-related tasks (headers + kmod, non-container only) when: not agnocast_is_container block: - name: Check if linux-headers package is available ansible.builtin.shell: | set -o pipefail apt-cache search ^linux-headers-{{ ansible_kernel }}$ | grep -q linux-headers-{{ ansible_kernel }} args: executable: /bin/bash register: agnocast_linux_headers_available failed_when: false changed_when: false become: true - name: Display warning if linux-headers is not available ansible.builtin.debug: msg: "WARNING: linux-headers-{{ ansible_kernel }} package not found. The agnocast-kmod installation may fail. Please manually install the kernel headers and re-run this role." when: agnocast_linux_headers_available.rc != 0 - name: Install linux headers for the running kernel ansible.builtin.apt: name: linux-headers-{{ ansible_kernel }} state: present register: agnocast_linux_headers_install ignore_errors: true become: true when: agnocast_linux_headers_available.rc == 0 - name: Display warning if linux-headers installation failed ansible.builtin.debug: msg: "WARNING: linux-headers-{{ ansible_kernel }} installation failed. DKMS installation may also fail." when: - agnocast_linux_headers_available.rc == 0 - agnocast_linux_headers_install.failed | default(false) - name: Check if agnocast-kmod is installed in dkms with version v{{ agnocast_version }} # noqa: risky-shell-pipe ansible.builtin.shell: dkms status agnocast/{{ agnocast_version }} | grep -q 'installed' register: agnocast_dkms_status failed_when: false changed_when: false - name: Purge agnocast-kmod if not found in dkms for version v{{ agnocast_version }} ansible.builtin.apt: name: "{{ agnocast_kmod_package }}" state: absent become: true when: agnocast_dkms_status.rc != 0 - name: Install agnocast-kmod if not found in dkms for version v{{ agnocast_version }} ansible.builtin.apt: name: "{{ agnocast_kmod_package }}" state: present register: agnocast_kmod_install ignore_errors: true become: true when: agnocast_dkms_status.rc != 0 - name: Display warning if agnocast-kmod installation failed ansible.builtin.debug: msg: "WARNING: agnocast-kmod installation failed. To use agnocast, please manually download the Linux kernel headers and re-run this script." when: - agnocast_dkms_status.rc != 0 - agnocast_kmod_install.failed | default(false) - name: Ensure agnocast module is loaded at boot via modules-load.d ansible.builtin.copy: dest: /etc/modules-load.d/agnocast.conf content: "agnocast\n" owner: root group: root mode: "0644" become: true ================================================ FILE: ansible/roles/artifacts/README.md ================================================ # Autoware artifacts The Autoware perception stack uses models for inference. These models are automatically downloaded as part of the `setup-dev-env.sh` script. The models are hosted by Web.Auto. Default `data_dir` location is `~/autoware_data`. ## Download instructions ### Check out to the correct commit hash if necessary First check this chart if you need to change your current commit hash. ```mermaid graph TD cond1{{What is your current commit hash?}} --> option_release_branch(A release tag) cond1 --> opt2(main branch) opt2 --> cond2{{Did you pull `autoware-nightly.repos`?}} --> option_nightly(Yes) cond2 --> option_autoware_main(No, I only pulled the `autoware.repos`.) option_release_branch --> final_normal(((No need to change the commit hash, keep following the rest of the instructions. ✅))) option_nightly --> final_normal option_autoware_main --> final_change(((Switch to the latest release tag. 🔄))) %% Define styles classDef conditional fill:#FFF3CD,stroke:#FFB100,stroke-width:2px,color:#000,font-weight:bold; classDef final_normal fill:#D4EDDA,stroke:#28A745,stroke-width:2px,color:#000,font-weight:bold; classDef final_change fill:#F8D7DA,stroke:#DC3545,stroke-width:2px,color:#000,font-weight:bold; classDef neutral fill:#F0F0F0,stroke:#B0B0B0,stroke-width:2px,color:#000,font-weight:normal; %% Apply classes class cond1,cond2 conditional; class final_normal final_normal; class final_change final_change; class option_release_branch,opt2,option_nightly,option_autoware_main neutral; ``` If you need to switch to the latest tag, run the following commands: ```bash cd ~/autoware git fetch --tags && git checkout $(git describe --tags $(git rev-list --tags --max-count=1)) ``` Once you've downloaded the artifacts, you can switch back to your desired branch or commit hash. ### Requirements Install ansible following the instructions in the [ansible installation guide](../../README.md#ansible-installation). ### Download artifacts #### Install ansible collections ```bash cd ~/autoware # The root directory of the cloned repository ansible-galaxy collection install -f -r "ansible-galaxy-requirements.yaml" ``` This step should be repeated when a new playbook is added. #### Run the playbook ```bash ansible-playbook autoware.dev_env.download_artifacts -e "data_dir=$HOME/autoware_data" --ask-become-pass ``` This will download and extract the artifacts to the specified directory and validate the checksums. ================================================ FILE: ansible/roles/artifacts/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/artifacts/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/artifacts/tasks/main.yaml ================================================ # yabloc_pose_initializer - name: Create yabloc_pose_initializer directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/yabloc_pose_initializer" mode: "755" state: directory - name: Download yabloc_pose_initializer/resources.tar.gz become: true ansible.builtin.get_url: url: https://s3.ap-northeast-2.wasabisys.com/pinto-model-zoo/136_road-segmentation-adas-0001/resources.tar.gz dest: "{{ data_dir }}/yabloc_pose_initializer/resources.tar.gz" mode: "644" checksum: sha256:1f660e15f95074bade32b1f80dbf618e9cee1f0b9f76d3f4671cb9be7f56eb3a - name: Extract yabloc_pose_initializer/resources.tar.gz ansible.builtin.unarchive: src: "{{ data_dir }}/yabloc_pose_initializer/resources.tar.gz" dest: "{{ data_dir }}/yabloc_pose_initializer/" # bevfusion - name: Create bevfusion directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/bevfusion" mode: "755" state: directory - name: Download bevfusion/bevfusion_lidar.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/bevfusion_lidar.onnx dest: "{{ data_dir }}/bevfusion/bevfusion_lidar.onnx" mode: "644" checksum: sha256:5c29087963bf2c4dc02bf45c29d459303be602d63f9b6adff22a75c9cfb459a6 - name: Download bevfusion/bevfusion_camera_lidar.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/bevfusion_camera_lidar.onnx dest: "{{ data_dir }}/bevfusion/bevfusion_camera_lidar.onnx" mode: "644" checksum: sha256:aa78d2f219146cb1423287643bbef81666d429ddcde4432a2e51db3f212a7c68 - name: Download bevfusion/bevfusion_image_backbone.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/bevfusion_image_backbone.onnx dest: "{{ data_dir }}/bevfusion/bevfusion_image_backbone.onnx" mode: "644" checksum: sha256:799af1e486b5c1245c8e2783bc77522d49e4a6535320ae77eba1b0f829385797 - name: Download bevfusion/ml_package_bevfusion_lidar.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/ml_package_bevfusion_lidar.param.yaml dest: "{{ data_dir }}/bevfusion/ml_package_bevfusion_lidar.param.yaml" mode: "644" checksum: sha256:866265b9f0fc8c17805c0974339d3c7c4e601c1aa212818971fc650d71782181 - name: Download bevfusion/ml_package_bevfusion_camera_lidar.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/ml_package_bevfusion_camera_lidar.param.yaml dest: "{{ data_dir }}/bevfusion/ml_package_bevfusion_camera_lidar.param.yaml" mode: "644" checksum: sha256:50707efcbb7fa80527d0a2effe677557d0be5df5cd72276f9af152399f27c719 - name: Download bevfusion/detection_class_remapper.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/bevfusion/t4base_120m/v2/detection_class_remapper.param.yaml dest: "{{ data_dir }}/bevfusion/detection_class_remapper.param.yaml" mode: "644" checksum: sha256:928f9eb14ac042d725909f12b2be1532c16b09a683485c5936cf04fb04728520 # streampetr - name: Create camera_streampetr directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/camera_streampetr" mode: "755" state: directory - name: Download camera_streampetr/simplify_pts_head_memory.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/simplify_pts_head_memory.onnx dest: "{{ data_dir }}/camera_streampetr/simplify_pts_head_memory.onnx" mode: "644" checksum: sha256:49b038bd280a1a4ee4f9e244d6e7315eb9c6f7b6f93e27717d9c21cb4d374015 - name: Download camera_streampetr/simplify_position_embedding.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/simplify_position_embedding.onnx dest: "{{ data_dir }}/camera_streampetr/simplify_position_embedding.onnx" mode: "644" checksum: sha256:629f14820cb8288659598f6c056c2f6cebe8df3758f1567e74fd1fb3c0f67163 - name: Download camera_streampetr/simplify_extract_img_feat.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/simplify_extract_img_feat.onnx dest: "{{ data_dir }}/camera_streampetr/simplify_extract_img_feat.onnx" mode: "644" checksum: sha256:322c2f426f9a01c43d28456f50b33f0fa2039535cf50db7329483097cd363efd - name: Download camera_streampetr/ml_package_camera_streampetr.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/streampetr/v1/ml_package_camera_streampetr.param.yaml dest: "{{ data_dir }}/camera_streampetr/ml_package_camera_streampetr.param.yaml" mode: "644" checksum: sha256:f539407f0b3aee65f7d6d30401dd0052dfed86fa7beefef86c79061362615218 # bevdet - name: Create tensorrt_bevdet directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/tensorrt_bevdet" mode: "755" state: directory - name: Download tensorrt_bevdet/tensorrt_bevdet.tar.gz become: true ansible.builtin.get_url: url: https://autoware-files.s3.us-west-2.amazonaws.com/models/tensorrt_bevdet.tar.gz dest: "{{ data_dir }}/tensorrt_bevdet/tensorrt_bevdet.tar.gz" mode: "644" checksum: sha256:c7d16ad395e949e7a654ab511fb3294135553f92c50f2595e63a1b3e0d142c6a - name: Extract tensorrt_bevdet/tensorrt_bevdet.tar.gz ansible.builtin.unarchive: src: "{{ data_dir }}/tensorrt_bevdet/tensorrt_bevdet.tar.gz" dest: "{{ data_dir }}/tensorrt_bevdet/" # image_projection_based_fusion - name: Create image_projection_based_fusion directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/image_projection_based_fusion" mode: "755" state: directory - name: Download image_projection_based_fusion/pts_voxel_encoder_pointpainting.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/pts_voxel_encoder_pointpainting.onnx dest: "{{ data_dir }}/image_projection_based_fusion/pts_voxel_encoder_pointpainting.onnx" mode: "644" checksum: sha256:3ca452ea5ca9467bf782955f75704ba8466841e275e8b8acd991b9911d53249e - name: Download image_projection_based_fusion/pts_backbone_neck_head_pointpainting.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/pts_backbone_neck_head_pointpainting.onnx dest: "{{ data_dir }}/image_projection_based_fusion/pts_backbone_neck_head_pointpainting.onnx" mode: "644" checksum: sha256:7fe62fcebe0e0f62a000d06aa94d779feb444d933671a4a3189fe01be8c19a00 - name: Download image_projection_based_fusion/detection_class_remapper.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/detection_class_remapper.param.yaml dest: "{{ data_dir }}/image_projection_based_fusion/detection_class_remapper.param.yaml" mode: "644" checksum: sha256:c711f8875ece9b527dfe31ffc75f8c0de2e77945ef67860a959a4e04c36772d5 - name: Download image_projection_based_fusion/pointpainting_ml_package.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/pointpainting_ml_package.param.yaml dest: "{{ data_dir }}/image_projection_based_fusion/pointpainting_ml_package.param.yaml" mode: "644" checksum: sha256:a70f8a01d592aa4e85d481d44377f37ea35ea5271c064723d6d0db7d375990a3 # lidar_apollo_instance_segmentation - name: Create lidar_apollo_instance_segmentation directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/lidar_apollo_instance_segmentation" mode: "755" state: directory - name: Download lidar_apollo_instance_segmentation/vlp-16.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/lidar_apollo_instance_segmentation/vlp-16.onnx dest: "{{ data_dir }}/lidar_apollo_instance_segmentation/vlp-16.onnx" mode: "644" checksum: sha256:eec521ebad7553d0ea2c90472a293aecb7499ab592632f0e100481c8196eb421 - name: Download lidar_apollo_instance_segmentation/hdl-64.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/lidar_apollo_instance_segmentation/hdl-64.onnx dest: "{{ data_dir }}/lidar_apollo_instance_segmentation/hdl-64.onnx" mode: "644" checksum: sha256:86348d8c4bced750f54288b01cc471c0d4f1ec9c693466169ef19413731e6ecc - name: Download lidar_apollo_instance_segmentation/vls-128.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/lidar_apollo_instance_segmentation/vls-128.onnx dest: "{{ data_dir }}/lidar_apollo_instance_segmentation/vls-128.onnx" mode: "644" checksum: sha256:95ef950bb694bd6de91b7e47f5d191d557e92a7f5e2a6bdf655a8b5eed4075cc # lidar_centerpoint - name: Create lidar_centerpoint directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/lidar_centerpoint" mode: "755" state: directory - name: Download lidar_centerpoint/pts_voxel_encoder_centerpoint.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_voxel_encoder_centerpoint.onnx dest: "{{ data_dir }}/lidar_centerpoint/pts_voxel_encoder_centerpoint.onnx" mode: "644" checksum: sha256:dc1a876580d86ee7a341d543f8ade2ede7f43bd032dc5b44155b1f0175405764 - name: Download lidar_centerpoint/pts_backbone_neck_head_centerpoint.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_backbone_neck_head_centerpoint.onnx dest: "{{ data_dir }}/lidar_centerpoint/pts_backbone_neck_head_centerpoint.onnx" mode: "644" checksum: sha256:3fe7e128955646740c41a25be0c8f141d5a94594fe79d7405fe2a859e391542e - name: Download lidar_centerpoint/pts_voxel_encoder_centerpoint_tiny.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_voxel_encoder_centerpoint_tiny.onnx dest: "{{ data_dir }}/lidar_centerpoint/pts_voxel_encoder_centerpoint_tiny.onnx" mode: "644" checksum: sha256:2c53465715c1fd2e9dc5727ef3fca74f4cdf0538f74286b0946e219d0ca5693b - name: Download lidar_centerpoint/pts_backbone_neck_head_centerpoint_tiny.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/pts_backbone_neck_head_centerpoint_tiny.onnx dest: "{{ data_dir }}/lidar_centerpoint/pts_backbone_neck_head_centerpoint_tiny.onnx" mode: "644" checksum: sha256:9bb0b634f3664bd098ce7d6a3d8a9fb7cc8d9b8252b27f302c71e43316bab551 - name: Download lidar_centerpoint/centerpoint_ml_package.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/centerpoint_ml_package.param.yaml dest: "{{ data_dir }}/lidar_centerpoint/centerpoint_ml_package.param.yaml" mode: "644" checksum: sha256:9bbc16e521dd87c91cbadf1cb89c8b81393d1f8e1069af385aaba677576f0e27 - name: Download lidar_centerpoint/centerpoint_tiny_ml_package.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/centerpoint_tiny_ml_package.param.yaml dest: "{{ data_dir }}/lidar_centerpoint/centerpoint_tiny_ml_package.param.yaml" mode: "644" checksum: sha256:e0846b08fbd023d6a7c085f5389d0ccaef8ad9cd2c5e1eb7dbc6583618e38424 - name: Download lidar_centerpoint/centerpoint_sigma_ml_package.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/centerpoint_sigma_ml_package.param.yaml dest: "{{ data_dir }}/lidar_centerpoint/centerpoint_sigma_ml_package.param.yaml" mode: "644" checksum: sha256:9bbc16e521dd87c91cbadf1cb89c8b81393d1f8e1069af385aaba677576f0e27 - name: Download lidar_centerpoint/detection_class_remapper.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/detection_class_remapper.param.yaml dest: "{{ data_dir }}/lidar_centerpoint/detection_class_remapper.param.yaml" mode: "644" checksum: sha256:c711f8875ece9b527dfe31ffc75f8c0de2e77945ef67860a959a4e04c36772d5 - name: Download lidar_centerpoint/deploy_metadata.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/centerpoint/v3/deploy_metadata.yaml dest: "{{ data_dir }}/lidar_centerpoint/deploy_metadata.yaml" mode: "644" checksum: sha256:152536f053c3750b60d349800e1b983b418029d6dadf087614a00c661942a178 # lidar_transfusion - name: Create lidar_transfusion directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/lidar_transfusion" mode: "755" state: directory - name: Download lidar_transfusion/transfusion.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2.1/transfusion.onnx dest: "{{ data_dir }}/lidar_transfusion/transfusion.onnx" mode: "644" checksum: sha256:1d8f0ee6d59ccc3cca914f9892f6ac8f0a9e35082abb91da183c00e3e2c2718a - name: Download lidar_transfusion/transfusion_ml_package.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2.1/transfusion_ml_package.param.yaml dest: "{{ data_dir }}/lidar_transfusion/transfusion_ml_package.param.yaml" mode: "644" checksum: sha256:476f7727adc17a823962f2e09ba23d40f3116c50be48361d98179d054cd131b6 - name: Download lidar_transfusion/detection_class_remapper.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2.1/detection_class_remapper.param.yaml dest: "{{ data_dir }}/lidar_transfusion/detection_class_remapper.param.yaml" mode: "644" checksum: sha256:c711f8875ece9b527dfe31ffc75f8c0de2e77945ef67860a959a4e04c36772d5 # tensorrt_yolox - name: Create tensorrt_yolox directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/tensorrt_yolox" mode: "755" state: directory - name: Download tensorrt_yolox/yolox-tiny.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/yolox-tiny.onnx dest: "{{ data_dir }}/tensorrt_yolox/yolox-tiny.onnx" mode: "644" checksum: sha256:471a665f4243e654dff62578394e508db22ee29fe65d9e389dfc3b0f2dee1255 - name: Download tensorrt_yolox/yolox-sPlus-opt.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/yolox-sPlus-opt.onnx dest: "{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt.onnx" mode: "644" checksum: sha256:36b0832177b01e6b278e00c7369f1de71e616c36261cbae50f0753d41289da01 - name: Download tensorrt_yolox/yolox-sPlus-opt.EntropyV2-calibration.table become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/yolox-sPlus-opt.EntropyV2-calibration.table dest: "{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt.EntropyV2-calibration.table" mode: "644" checksum: sha256:b9e9d7da33342262ccaea4469b4d02b8abb32b6d7bf737f9e0883fece1b8f580 - name: Download tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/object_detection_yolox_s/v1/yolox-sPlus-T4-960x960-pseudo-finetune.onnx dest: "{{ data_dir }}/tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.onnx" mode: "644" checksum: sha256:f5054e8a890c3be86dc1b4b89a5a36fb2279d4f6110b0159e793be062641bf65 - name: Download tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.EntropyV2-calibration.table become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/object_detection_yolox_s/v1/yolox-sPlus-T4-960x960-pseudo-finetune.EntropyV2-calibration.table dest: "{{ data_dir }}/tensorrt_yolox/yolox-sPlus-T4-960x960-pseudo-finetune.EntropyV2-calibration.table" mode: "644" checksum: sha256:cc378d327db5616b0b3a4d077bf37100c25a50ecd22d2b542f54098da100f34c - name: Download tensorrt_yolox/label.txt become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/label.txt dest: "{{ data_dir }}/tensorrt_yolox/label.txt" mode: "644" checksum: sha256:3540a365bfd6d8afb1b5d8df4ec47f82cb984760d3270c9b41dbbb3422d09a0c # cspell: ignore semseg - name: Download tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/object_detection_semseg_yolox_s/v1/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.onnx dest: "{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.onnx" mode: "644" checksum: sha256:73b3812432cedf65cebf02ca4cb630542fc3b1671c4c0fbf7cee50fa38e416a8 - name: Download tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.EntropyV2-calibration.table become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/object_detection_semseg_yolox_s/v1/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.EntropyV2-calibration.table dest: "{{ data_dir }}/tensorrt_yolox/yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls.EntropyV2-calibration.table" mode: "644" checksum: sha256:28cd6524d4bcdb2809592a225d28330433e58dc02c92169ea555b44c1a51a584 - name: Download tensorrt_yolox/semseg_color_map.csv become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/object_detection_semseg_yolox_s/v1/semseg_color_map.csv dest: "{{ data_dir }}/tensorrt_yolox/semseg_color_map.csv" mode: "644" checksum: sha256:3d93ca05f31b63424d7d7246a01a2365953705a0ed3323ba5b6fddd744a4bfea # tensorrt_rtmdet - name: Create tensorrt_rtmdet directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/tensorrt_rtmdet" mode: "755" state: directory - name: Download tensorrt_rtmdet_onnx_models.tar.gz become: true ansible.builtin.get_url: url: https://autoware-files.s3.us-west-2.amazonaws.com/models/tensorrt_rtmdet_onnx_models.tar.gz dest: "{{ data_dir }}/tensorrt_rtmdet/tensorrt_rtmdet_onnx_models.tar.gz" mode: "644" checksum: sha256:eaf6fe9caf1b4a0211dc3b0f4068b1fd6c1d35fe1582cc2aed95b8ed9468c598 - name: Extract tensorrt_rtmdet_onnx_models.tar.gz ansible.builtin.unarchive: src: "{{ data_dir }}/tensorrt_rtmdet/tensorrt_rtmdet_onnx_models.tar.gz" dest: "{{ data_dir }}/tensorrt_rtmdet/" extra_opts: - --strip-components=1 # Removes the top-level folder during extraction # tensorrt_yolox for whole_image_traffic_light_detector - name: Download tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/tl_detector_yolox_s/v1/yolox_s_car_ped_tl_detector_960_960_batch_1.onnx dest: "{{ data_dir }}/tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.onnx" mode: "644" checksum: sha256:0b8478553f2f0374a1236e65f669f11335b1fea7756ca7bcdfcf9646657ed594 - name: Download tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.EntropyV2-calibration.table become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/tl_detector_yolox_s/v1/yolox_s_car_ped_tl_detector_960_960_batch_1.EntropyV2-calibration.table dest: "{{ data_dir }}/tensorrt_yolox/yolox_s_car_ped_tl_detector_960_960_batch_1.EntropyV2-calibration.table" mode: "644" checksum: sha256:690cff409519aca26f4ec0fc56ed35d9aa23ee1c18d6205c43469ae06e2f4e02 - name: Download tensorrt/car_ped_tl_detector_labels.txt become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/tl_detector_yolox_s/v1/car_ped_tl_detector_labels.txt dest: "{{ data_dir }}/tensorrt_yolox/car_ped_tl_detector_labels.txt" mode: "644" checksum: sha256:a2a91f5fe9c2e68e3e3647a272bb9bb25cd07631a1990a3fb15efddce7691131 # traffic_light_classifier - name: Create traffic_light_classifier directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/traffic_light_classifier" mode: "755" state: directory - name: Download traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_1.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_mobilenetv2_batch_1.onnx dest: "{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_1.onnx" mode: "644" checksum: sha256:455b71b3b20d3a96aa0e49f32714ba50421f668a2f9b9907c30b1346ac8a3703 - name: Download traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_4.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_mobilenetv2_batch_4.onnx dest: "{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_4.onnx" mode: "644" checksum: sha256:41bb79a23a4ac57956adb8e9cb3904420db1b0cd032e97b670cc4f8b174ae3fe - name: Download traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_6.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_mobilenetv2_batch_6.onnx dest: "{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_6.onnx" mode: "644" checksum: sha256:e4792eed6a46fdbd02be2f3a4f1ce91f36fa77698493caf3102e445178c0f058 - name: Download traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_1.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_efficientNet_b1_batch_1.onnx dest: "{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_1.onnx" mode: "644" checksum: sha256:55ebb0d117a5e8943f8d1c6769f1d856b533079d4d871d8e923255cc992ad48a - name: Download traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_4.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_efficientNet_b1_batch_4.onnx dest: "{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_4.onnx" mode: "644" checksum: sha256:684e29843e3128eadb774018730644b3ab9b0a06dc4cdaeed579c2f3fa5d5265 - name: Download traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_6.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/traffic_light_classifier_efficientNet_b1_batch_6.onnx dest: "{{ data_dir }}/traffic_light_classifier/traffic_light_classifier_efficientNet_b1_batch_6.onnx" mode: "644" checksum: sha256:44d94540fa8b89dfb39cd9a8523cf010ddfb10ea2f1f9b53bf3618ce7f4912ad - name: Download traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_1.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/ped_traffic_light_classifier_mobilenetv2_batch_1.onnx dest: "{{ data_dir }}/traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_1.onnx" mode: "644" checksum: sha256:b52632fee96d1bc99922e743335ebfd49d6a0645c8a04e615f156e38661add24 - name: Download traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_4.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/ped_traffic_light_classifier_mobilenetv2_batch_4.onnx dest: "{{ data_dir }}/traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_4.onnx" mode: "644" checksum: sha256:ef0a3052857cdc6f380da524560548b40e9e46f876cccf3cd0cb40ccddae9892 - name: Download traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_6.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/ped_traffic_light_classifier_mobilenetv2_batch_6.onnx dest: "{{ data_dir }}/traffic_light_classifier/ped_traffic_light_classifier_mobilenetv2_batch_6.onnx" mode: "644" checksum: sha256:b56700551254afa985916d03b74372ebc675f2d9b76ee0e39c46e88c37744a4f - name: Download traffic_light_classifier/lamp_labels.txt become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v2/lamp_labels.txt dest: "{{ data_dir }}/traffic_light_classifier/lamp_labels.txt" mode: "644" checksum: sha256:1a5a49eeec5593963eab8d70f48b8a01bfb07e753e9688eb1510ad26e803579d - name: Download traffic_light_classifier/lamp_labels_ped.txt become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/traffic_light_classifier/v3/lamp_labels_ped.txt dest: "{{ data_dir }}/traffic_light_classifier/lamp_labels_ped.txt" mode: "644" checksum: sha256:5427e1b7c2e33acd9565ede29e77992c38137bcf7d7074c73ebbc38080c6bcac # diffusion_planner - name: Create diffusion_planner directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/diffusion_planner" mode: "755" state: directory - name: Create diffusion_planner v2.0 directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/diffusion_planner/v2.0" mode: "755" state: directory - name: Download diffusion_planner/v2.0/diffusion_planner.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v2.0/diffusion_planner.onnx dest: "{{ data_dir }}/diffusion_planner/v2.0/diffusion_planner.onnx" mode: "644" checksum: sha256:622c2c2f21115900c712f80b58560b5a6425be5f70d5aa82a96ef0b13af8c24b - name: Download diffusion_planner/v2.0/diffusion_planner.param.json become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v2.0/diffusion_planner.param.json dest: "{{ data_dir }}/diffusion_planner/v2.0/diffusion_planner.param.json" mode: "644" checksum: sha256:bf41f12d85b31e363acf84f46d6a9e4e28da6c2ccce0e3fcf91ee4910f4b8453 - name: Create diffusion_planner v3.0 directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/diffusion_planner/v3.0" mode: "755" state: directory - name: Download diffusion_planner/v3.0/diffusion_planner.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.0/diffusion_planner.onnx dest: "{{ data_dir }}/diffusion_planner/v3.0/diffusion_planner.onnx" mode: "644" checksum: sha256:3026918b55869b02ea561c1e1b9fed05c34092294c035d743f1d1cb756f4abcc - name: Download diffusion_planner/v3.0/diffusion_planner.param.json become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.0/diffusion_planner.param.json dest: "{{ data_dir }}/diffusion_planner/v3.0/diffusion_planner.param.json" mode: "644" checksum: sha256:d726ce7b257ddaf39da8a7dfbd016512e866843c26a9622fdec8a59b45da3e04 - name: Create diffusion_planner/v3.1 directory become: true ansible.builtin.file: path: "{{ data_dir }}/diffusion_planner/v3.1" mode: "755" state: directory - name: Download diffusion_planner/v3.1/diffusion_planner.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.1/diffusion_planner.onnx dest: "{{ data_dir }}/diffusion_planner/v3.1/diffusion_planner.onnx" mode: "644" checksum: sha256:a063d323af20d962048315dc0969e4d3cad46e81a20299f39d74a470d58b148b - name: Download diffusion_planner/v3.1/diffusion_planner.param.json become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/diffusion_planner/v3.1/diffusion_planner.param.json dest: "{{ data_dir }}/diffusion_planner/v3.1/diffusion_planner.param.json" mode: "644" checksum: sha256:d726ce7b257ddaf39da8a7dfbd016512e866843c26a9622fdec8a59b45da3e04 # tensorrt_vad - name: Create tensorrt_vad directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/vad" mode: "755" state: directory - name: Create tensorrt_vad v0.1 directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/vad/v0.1" mode: "755" state: directory - name: Download tensorrt_vad/vad-carla-tiny_backbone.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny_backbone.onnx dest: "{{ data_dir }}/vad/v0.1/vad-carla-tiny_backbone.onnx" mode: "644" checksum: sha256:04b925f2750fd1c4adf16b5aae9c149d0baa39185e99d141232ebe20bddba4da - name: Download tensorrt_vad/vad-carla-tiny_head.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny_head.onnx dest: "{{ data_dir }}/vad/v0.1/vad-carla-tiny_head.onnx" mode: "644" checksum: sha256:31f49a592a764ce82bbe6e26d0bfc99dc8a9613628884dc73dd5e67521ff3e9e - name: Download tensorrt_vad/vad-carla-tiny_head_no_prev.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny_head_no_prev.onnx dest: "{{ data_dir }}/vad/v0.1/vad-carla-tiny_head_no_prev.onnx" mode: "644" checksum: sha256:6a89d479e0717b1e526f1aa3a1137c631a9ef854e810d0328a035aae11818c2a - name: Download tensorrt_vad/vad-carla-tiny.param.json become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/planning/models/tensorrt_vad/carla_tiny/v0.1/vad-carla-tiny.param.json dest: "{{ data_dir }}/vad/v0.1/vad-carla-tiny.param.json" mode: "644" checksum: sha256:03d3187fed3c70f761456afc2e93e18c1765113b1c1580ffa78ab42b10dbd179 # traffic_light_fine_detector - name: Create traffic_light_fine_detector directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/traffic_light_fine_detector" mode: "755" state: directory - name: Download traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_1.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_car_ped_yolox_s_batch_1.onnx dest: "{{ data_dir }}/traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_1.onnx" mode: "644" checksum: sha256:1ad633066a1195006f4709f8fa07800dd65a74a814b3efb4c99bcc5a1a7962f6 - name: Download traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_4.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_car_ped_yolox_s_batch_4.onnx dest: "{{ data_dir }}/traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_4.onnx" mode: "644" checksum: sha256:cf93eb1e1a97aefc6edd0c0c4d77c7f5fc2aa1e81e3c5c9cd49d976173d03a04 - name: Download traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_6.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_car_ped_yolox_s_batch_6.onnx dest: "{{ data_dir }}/traffic_light_fine_detector/tlr_car_ped_yolox_s_batch_6.onnx" mode: "644" checksum: sha256:0b05a89fb30f1f92c6ec687d48e8ceda4da6f81cbd82d8a102d168753a6cedb6 - name: Download traffic_light_fine_detector/tlr_labels.txt become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/tlr_yolox_s/v3/tlr_labels.txt dest: "{{ data_dir }}/traffic_light_fine_detector/tlr_labels.txt" mode: "644" checksum: sha256:a2a91f5fe9c2e68e3e3647a272bb9bb25cd07631a1990a3fb15efddce7691131 # simpl_prediction - name: Create simpl_prediction directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/simpl_prediction" mode: "755" state: directory - name: Download simpl_prediction/simpl.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/simpl/v0.1.0/simpl.onnx dest: "{{ data_dir }}/simpl_prediction/simpl.onnx" mode: "644" checksum: sha256:ad5e03983193c4d188432f314334697d6a216e7ffc91fb651eee5d6e4c42f492 # ptv3 - name: Create ptv3 directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/ptv3" mode: "755" state: directory - name: Download ptv3/ptv3.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/ptv3/v1/ptv3.onnx dest: "{{ data_dir }}/ptv3/ptv3.onnx" mode: "644" checksum: sha256:b5d8f7f038599de46e66148d46182600155820c6f6f2fd37e787461f97d143ff - name: Download ptv3/ml_package_ptv3.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/ptv3/v1/ml_package_ptv3.param.yaml dest: "{{ data_dir }}/ptv3/ml_package_ptv3.param.yaml" mode: "644" checksum: sha256:9a3e35648d6eb46771b208a6534a2dcb19d26efca20a9d8df5abc05a9970d0ec # frnet - name: Create lidar_frnet directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/lidar_frnet" mode: "755" state: directory - name: Download lidar_frnet/frnet.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/frnet/v1/frnet.onnx dest: "{{ data_dir }}/lidar_frnet/frnet.onnx" mode: "644" checksum: sha256:acaaf0190e9dbf67e4987542fc57bcec4102a842a40ee24a9dc8fa1948bedf04 - name: Download lidar_frnet/ml_package_frnet.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/perception/models/frnet/v1/ml_package_frnet.param.yaml dest: "{{ data_dir }}/lidar_frnet/ml_package_frnet.param.yaml" mode: "644" checksum: sha256:34577cc7902acd942a51f401bdcf560da91c3c80df8d553bfdc775f118b499b8 # calibration_status_classifier - name: Create calibration_status_classifier directory inside {{ data_dir }} ansible.builtin.file: path: "{{ data_dir }}/calibration_status_classifier" mode: "755" state: directory - name: Download calibration_status_classifier/calibration_status_classifier.onnx become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/sensing/models/calibration_status_classifier/v2/calibration_status_classifier.onnx dest: "{{ data_dir }}/calibration_status_classifier/calibration_status_classifier.onnx" mode: "644" checksum: sha256:13d6119e8dc73945ab0efe76b0c9492e2536187fdc7963ba62b8625900f54474 - name: Download calibration_status_classifier/ml_package_calibration_status_classifier.param.yaml become: true ansible.builtin.get_url: url: https://awf.ml.dev.web.auto/sensing/models/calibration_status_classifier/v2/ml_package_calibration_status_classifier.param.yaml dest: "{{ data_dir }}/calibration_status_classifier/ml_package_calibration_status_classifier.param.yaml" mode: "644" checksum: sha256:39d99ce065eea608e2bea3e560eeb1bcee18b2636f988c28afed5219e3e69760 ================================================ FILE: ansible/roles/build_tools/README.md ================================================ # Build Tools This role installs build tools for building Autoware. ## Tools - ccache ## Inputs ## Manual Installation ```bash sudo apt-get update sudo apt-get install -y ccache ``` ## Configuration (🆕 Recommended) > ℹ️ These steps differ slightly from the existing Ansible setup and represent the preferred configuration. > The Ansible version will be updated to match the steps below. ```bash # Make sure the ccache directory exists mkdir -p "$HOME/.cache/ccache" # Add the following lines to ~/.bashrc file export CMAKE_C_COMPILER_LAUNCHER=ccache export CMAKE_CXX_COMPILER_LAUNCHER=ccache export CCACHE_DIR="$HOME/.cache/ccache/" export CCACHE_LOGFILE=/tmp/ccache.log ``` Configure ccache maximum size: `gedit $HOME/.cache/ccache/ccache.conf` Add the following lines and save the file: ```bash # Set maximum cache size max_size = 15G ``` **Also see:** [🔗 Autoware Documentation / Using ccache to speed up compilation](https://autowarefoundation.github.io/autoware-documentation/main/tutorials/others/advanced-usage-of-colcon/#using-ccache-to-speed-up-recompilation). ================================================ FILE: ansible/roles/build_tools/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/build_tools/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/build_tools/tasks/main.yaml ================================================ - name: Install ccache become: true ansible.builtin.apt: name: ccache state: latest update_cache: true - name: Add CCACHE_DIR to .bashrc ansible.builtin.lineinfile: dest: ~/.bashrc line: export CCACHE_DIR="$HOME/.ccache" state: present create: true mode: 0644 - name: Add CCACHE_DIR to .bashrc of local user become: true ansible.builtin.lineinfile: dest: /etc/skel/.bashrc line: export CCACHE_DIR="$HOME/.ccache" state: present create: true mode: 0644 - name: Export CC to ccache ansible.builtin.lineinfile: dest: ~/.bashrc line: export CC="/usr/lib/ccache/gcc" state: present create: true mode: 0644 - name: Export CXX to ccache ansible.builtin.lineinfile: dest: ~/.bashrc line: export CXX="/usr/lib/ccache/g++" state: present create: true mode: 0644 - name: Source .bashrc ansible.builtin.shell: source ~/.bashrc args: executable: /bin/bash changed_when: false ================================================ FILE: ansible/roles/cuda/README.md ================================================ # cuda This role installs [CUDA Toolkit](https://developer.nvidia.com/cuda-toolkit) following [this page](https://developer.nvidia.com/cuda-12-8-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_network) and [this page](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions). This role also registers Vulkan, OpenGL, and OpenCL GPU vendors for future use. ## Inputs | Name | Required | Description | | -------------------- | -------- | -------------------------------- | | cuda_version | true | The version of CUDA Toolkit. | | cuda_install_drivers | false | Whether to install cuda-drivers. | ## Manual Installation ### Version compatibility - CUDA version `12.8`. - NVIDIA driver version `570` or **newer**. #### 🛠️ For Advanced Users ⚠️ **Proceed with caution**: Avoid removing essential system components. To prevent conflicts during NVIDIA installation, we recommend completely removing old NVIDIA Drivers and CUDA by following this guide: [How can I uninstall a NVIDIA driver completely?](https://askubuntu.com/a/206289/761440). - **Important**: If you remove the previous NVIDIA drivers, ensure you install the recommended versions listed below **before restarting your system**. Once the drivers are installed correctly, you may safely restart your system. ### CUDA Toolkit and Driver Follow these instructions to download and install the CUDA Toolkit. From: ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && source /tmp/amd64.env os=ubuntu2204 arch_dir=$( case "$(dpkg --print-architecture)" in amd64) echo x86_64 ;; aarch64) echo arm64 ;; *) echo "$(dpkg --print-architecture)";; esac ) wget "https://developer.download.nvidia.com/compute/cuda/repos/${os}/${arch_dir}/cuda-keyring_1.1-1_all.deb" sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt-get update cuda_version_dashed=$(eval sed -e "s/[.]/-/g" <<< "${cuda_version}") sudo apt-get -y install cuda-toolkit-${cuda_version_dashed} ``` ```bash # ⚠️ this is the minimum version sudo apt-get install -y cuda-drivers-570 # ✅ latest version is OK apt search '^nvidia-driver-[0-9]+' sudo apt install nvidia-driver-580 # or whichever is latest ``` Perform the post installation actions: ```bash # Taken from: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions echo 'export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc ``` ### GPU Vendors Register Vulkan, OpenGL, and OpenCL GPU vendors following the instructions below. ```bash # Create Vulkan directory sudo mkdir -p /etc/vulkan/icd.d sudo chmod 0755 /etc/vulkan/icd.d # Create OpenGL directory sudo mkdir -p /etc/glvnd/egl_vendor.d sudo chmod 0755 /etc/glvnd/egl_vendor.d # Create OpenCL directory sudo mkdir -p /etc/OpenCL/vendors sudo chmod 0755 /etc/OpenCL/vendors # Download and set permissions for Vulkan GPU vendors JSON sudo wget https://gitlab.com/nvidia/container-images/vulkan/raw/dc389b0445c788901fda1d85be96fd1cb9410164/nvidia_icd.json -O /etc/vulkan/icd.d/nvidia_icd.json sudo chmod 0644 /etc/vulkan/icd.d/nvidia_icd.json # Download and set permissions for OpenGL GPU vendors JSON sudo wget https://gitlab.com/nvidia/container-images/opengl/raw/5191cf205d3e4bb1150091f9464499b076104354/glvnd/runtime/10_nvidia.json -O /etc/glvnd/egl_vendor.d/10_nvidia.json sudo chmod 0644 /etc/glvnd/egl_vendor.d/10_nvidia.json # Register and set permissions for OpenCL GPU vendors sudo touch /etc/OpenCL/vendors/nvidia.icd echo "libnvidia-opencl.so.1" | sudo tee /etc/OpenCL/vendors/nvidia.icd > /dev/null sudo chmod 0644 /etc/OpenCL/vendors/nvidia.icd ``` ================================================ FILE: ansible/roles/cuda/defaults/main.yaml ================================================ cuda_install_drivers: true ================================================ FILE: ansible/roles/cuda/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/cuda/tasks/main.yaml ================================================ # cspell:ignore libnvjpeg - name: Get CUDA architecture name ansible.builtin.shell: | if [ "$(uname -m)" = "x86_64" ]; then echo "x86_64" else echo "sbsa" fi register: cuda_architecture changed_when: false - name: Remove old /etc/apt/sources.list.d/cuda.list become: true ansible.builtin.file: path: /etc/apt/sources.list.d/cuda.list state: absent - name: Install CUDA keyring become: true ansible.builtin.apt: deb: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/{{ cuda_architecture.stdout }}/cuda-keyring_1.1-1_all.deb update_cache: true - name: Get dash-case name of cuda_version ansible.builtin.shell: bash -c 'sed -e "s/\./-/g" <<< $(echo {{ cuda_version }})' register: cuda__dash_case_cuda_version changed_when: false - name: Install CUDA devel libraries except for cuda-drivers become: true ansible.builtin.apt: name: - cuda-command-line-tools-{{ cuda__dash_case_cuda_version.stdout }} - cuda-minimal-build-{{ cuda__dash_case_cuda_version.stdout }} - libcusparse-dev-{{ cuda__dash_case_cuda_version.stdout }} - libcublas-dev-{{ cuda__dash_case_cuda_version.stdout }} - libcurand-dev-{{ cuda__dash_case_cuda_version.stdout }} - cuda-nvml-dev-{{ cuda__dash_case_cuda_version.stdout }} - cuda-nvrtc-dev-{{ cuda__dash_case_cuda_version.stdout }} - libnpp-dev-{{ cuda__dash_case_cuda_version.stdout }} - libnvjpeg-dev-{{ cuda__dash_case_cuda_version.stdout }} update_cache: true when: install_devel == 'y' - name: Install CUDA libraries except for cuda-drivers become: true ansible.builtin.apt: name: - cuda-minimal-build-{{ cuda__dash_case_cuda_version.stdout }} - libcusparse-{{ cuda__dash_case_cuda_version.stdout }} - libcublas-{{ cuda__dash_case_cuda_version.stdout }} - libcurand-{{ cuda__dash_case_cuda_version.stdout }} - libnpp-{{ cuda__dash_case_cuda_version.stdout }} - libnvjpeg-{{ cuda__dash_case_cuda_version.stdout }} update_cache: true when: install_devel == 'N' - name: Install extra CUDA libraries for x86_64 become: true ansible.builtin.apt: name: - cuda-nvprof-{{ cuda__dash_case_cuda_version.stdout }} update_cache: true when: cuda_architecture.stdout == "x86_64" - name: Install cuda-drivers become: true ansible.builtin.apt: name: - nvidia-open update_cache: true when: cuda_install_drivers | bool - name: Add PATH to .bashrc become: true ansible.builtin.lineinfile: dest: "{{ item }}" line: export PATH="/usr/local/cuda/bin:$PATH" state: present create: true mode: 0644 loop: - ~/.bashrc - /etc/skel/.bashrc - name: Add LD_LIBRARY_PATH to bashrc become: true ansible.builtin.lineinfile: dest: "{{ item }}" line: export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH" state: present create: true mode: 0644 loop: - ~/.bashrc - /etc/skel/.bashrc - name: Create Vulkan directory become: true ansible.builtin.file: path: /etc/vulkan/icd.d state: directory mode: "0755" - name: Create OpenGL directory become: true ansible.builtin.file: path: /etc/glvnd/egl_vendor.d state: directory mode: "0755" - name: Create OpenCL directory become: true ansible.builtin.file: path: /etc/OpenCL/vendors state: directory mode: "0755" - name: Register Vulkan GPU vendors become: true ansible.builtin.get_url: url: https://gitlab.com/nvidia/container-images/vulkan/raw/dc389b0445c788901fda1d85be96fd1cb9410164/nvidia_icd.json dest: /etc/vulkan/icd.d/nvidia_icd.json mode: "0644" - name: Set permissions for Vulkan GPU vendors become: true ansible.builtin.file: path: /etc/vulkan/icd.d/nvidia_icd.json mode: "0644" - name: Register OpenGL GPU vendors become: true ansible.builtin.get_url: url: https://gitlab.com/nvidia/container-images/opengl/raw/5191cf205d3e4bb1150091f9464499b076104354/glvnd/runtime/10_nvidia.json dest: /etc/glvnd/egl_vendor.d/10_nvidia.json mode: "0644" - name: Set permissions for OpenGL GPU vendors become: true ansible.builtin.file: path: /etc/glvnd/egl_vendor.d/10_nvidia.json mode: "0644" - name: Register OpenCL GPU vendors become: true ansible.builtin.file: path: /etc/OpenCL/vendors/nvidia.icd state: touch mode: "0644" - name: Set permissions for OpenCL GPU vendors become: true ansible.builtin.lineinfile: path: /etc/OpenCL/vendors/nvidia.icd line: libnvidia-opencl.so.1 create: true mode: "0644" ================================================ FILE: ansible/roles/dev_tools/README.md ================================================ # devel This role installs optional development tools for Autoware. ## Tools - pipx - Go - PlotJuggler - Git LFS - pre-commit - clang-format ## Inputs | Name | Required | Description | | --------- | -------- | --------------------- | | rosdistro | true | The ROS distribution. | ## Manual Installation ## Set up the environment variables Choose **one** ROS distribution and run the corresponding command. ### ROS 2 Humble ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && \ source /tmp/amd64.env ``` ### ROS 2 Jazzy ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64_jazzy.env && \ source /tmp/amd64.env ``` ## Install the tools ```bash sudo apt-get update sudo apt install pipx sudo apt install -y golang sudo apt install -y ros-${rosdistro}-plotjuggler-ros sudo apt install -y git-lfs # Setup Git LFS git lfs install pipx install pre-commit pipx install clang-format ``` ================================================ FILE: ansible/roles/dev_tools/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/dev_tools/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/dev_tools/tasks/main.yaml ================================================ # https://github.com/git-lfs/git-lfs/wiki/Installation#debian-and-ubuntu - name: Install Git LFS become: true ansible.builtin.apt: name: git-lfs state: present update_cache: true - name: Setup Git LFS for current user ansible.builtin.command: git lfs install changed_when: false - name: Install pipx become: true ansible.builtin.apt: name: pipx state: latest update_cache: true - name: Install pre-commit community.general.pipx: name: pre-commit executable: /usr/bin/pipx - name: Install clang-format community.general.pipx: name: clang-format executable: /usr/bin/pipx - name: Install Go become: true ansible.builtin.apt: name: golang state: latest update_cache: true - name: Hold check of ros-{{ rosdistro + '-plotjuggler' }} ansible.builtin.command: apt-mark showhold register: dev_tools__held_ros_packages changed_when: false - name: Install plotjuggler become: true ansible.builtin.apt: name: - ros-{{ rosdistro }}-plotjuggler state: latest update_cache: true when: "'ros-' + rosdistro + '-plotjuggler' not in dev_tools__held_ros_packages.stdout" register: dev_tools__install_result failed_when: false - name: Display warning if plotjuggler package is held ansible.builtin.debug: msg: ROS package 'ros-{{ rosdistro }}-plotjuggler' is apt-mark hold. Skipping installation. when: not dev_tools__install_result.changed ================================================ FILE: ansible/roles/docker_engine/README.md ================================================ # docker_engine This role installs [Docker Engine](https://docs.docker.com/engine/) following the [Official Installation Guide](https://docs.docker.com/engine/install/ubuntu/). Then it sets up execution from non-root users following the [Official Post Installation Steps](https://docs.docker.com/engine/install/linux-postinstall). ## Inputs None. ## Manual installation (Recommended) > ℹ️ The steps below may differ from the role implementation. > They reflect the **most up-to-date and preferred procedure** for manual installation. > The role will be updated to align with these steps. ### Install Docker Engine ```bash # Taken from: https://docs.docker.com/engine/install/ubuntu/ # And: https://docs.docker.com/engine/install/linux-postinstall # Uninstall old versions sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1) # Add Docker's official GPG key: sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: sudo tee /etc/apt/sources.list.d/docker.sources < /dev/null - name: Add Docker apt repository to source list become: true ansible.builtin.apt_repository: repo: deb [arch={{ docker_engine__deb_architecture.stdout }} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/{{ docker_engine__lsb_release_is.stdout | lower }} {{ docker_engine__lsb_release_cs.stdout }} stable filename: docker state: present update_cache: true - name: Install Docker Engine become: true ansible.builtin.apt: name: - docker-ce - docker-ce-cli - containerd.io - docker-compose-plugin update_cache: true # sudo groupadd docker - name: Add docker group become: true ansible.builtin.group: name: docker state: present # sudo usermod -aG docker $USER - name: Add user to docker group become: true ansible.builtin.user: name: "{{ ansible_user_id }}" groups: docker append: true ================================================ FILE: ansible/roles/gdown/README.md ================================================ # Role: gdown This role installs gdown to download files from CMakeLists.txt. ## Inputs None. ## Manual Installation ```bash pipx install gdown ``` ================================================ FILE: ansible/roles/gdown/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/gdown/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/gdown/tasks/main.yaml ================================================ - name: Install pipx become: true ansible.builtin.apt: name: pipx state: latest update_cache: true - name: Install gdown to download files from CMakeLists.txt community.general.pipx: name: gdown executable: /usr/bin/pipx ================================================ FILE: ansible/roles/geographiclib/README.md ================================================ # geographiclib ## Inputs None. ## Manual Installation ```bash sudo apt update sudo apt install -y geographiclib-tools # Add EGM2008 geoid grid to geographiclib sudo geographiclib-get-geoids egm2008-1 ``` ================================================ FILE: ansible/roles/geographiclib/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/geographiclib/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/geographiclib/tasks/main.yaml ================================================ - name: Install geographiclib-tools become: true ansible.builtin.apt: name: geographiclib-tools state: latest update_cache: true - name: Install egm2008-1 become: true ansible.builtin.command: cmd: geographiclib-get-geoids egm2008-1 creates: /usr/share/GeographicLib/geoids/egm2008-1.pgm ================================================ FILE: ansible/roles/kisak_mesa/README.md ================================================ # Kisak Mesa Fix for Ubuntu 22.04 for Rviz2 (Not mandatory) If you are using Ubuntu 22.04 and Rviz2 (especially inside a container), you may encounter black-screen error on Rviz2: This role will install the Kisak Mesa fix for Ubuntu 22.04 for Rviz2. ## Inputs None ## Manual Installation ```bash #!/bin/bash # Update the package list and install software-properties-common sudo apt-get update sudo apt-get install -y software-properties-common # Add the Kisak Mesa PPA sudo add-apt-repository -y ppa:kisak/kisak-mesa # Update the package list after adding the new repository sudo apt-get update # Install Mesa libraries sudo apt-get install -y \ libegl-mesa0 \ libegl1-mesa-dev \ libgbm-dev \ libgbm1 \ libgl1-mesa-dev \ libgl1-mesa-dri \ libglapi-mesa \ libglx-mesa0 ``` ================================================ FILE: ansible/roles/kisak_mesa/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/kisak_mesa/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/kisak_mesa/tasks/main.yaml ================================================ - name: Install additional dependencies become: true ansible.builtin.apt: name: software-properties-common state: present - name: Add Kisak Mesa PPA become: true ansible.builtin.apt_repository: repo: ppa:kisak/kisak-mesa - name: Install Mesa libraries become: true ansible.builtin.apt: name: - libegl-mesa0 - libegl1-mesa-dev - libgbm-dev - libgbm1 - libgl1-mesa-dev - libgl1-mesa-dri - libglapi-mesa - libglx-mesa0 state: present ================================================ FILE: ansible/roles/nvidia_container_toolkit/README.md ================================================ # nvidia_container_toolkit This role installs [NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-container-toolkit) following the [installation guide](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html). ## Inputs None. ## Manual Installation (Recommended) > ℹ️ The steps below may differ from the role implementation. > They reflect the **most up-to-date and preferred procedure** for manual installation. > The role will be updated to align with these steps. ```bash # Install the prerequisites for the instructions below: sudo apt-get update && sudo apt-get install -y --no-install-recommends \ curl \ gnupg2 # Configure the production repository: curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list # Update the packages list from the repository: sudo apt-get update # Install NVIDIA Container Toolkit sudo apt-get install -y nvidia-container-toolkit # Add NVIDIA runtime support to docker engine sudo nvidia-ctk runtime configure --runtime=docker # Restart docker daemon sudo systemctl restart docker # At this point, a working setup can be tested by running a base CUDA container: sudo docker run --rm --gpus all nvcr.io/nvidia/cuda:12.8.1-runtime-ubuntu24.04 nvidia-smi # ========== # == CUDA == # ========== # # CUDA Version 12.8.1 # # Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # This container image and its contents are governed by the NVIDIA Deep Learning Container License. # By pulling and using the container, you accept the terms and conditions of this license: # https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license # # A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience. # # Thu Jan 15 19:48:46 2026 # +-----------------------------------------------------------------------------------------+ # | NVIDIA-SMI 580.126.09 Driver Version: 580.126.09 CUDA Version: 13.0 | # +-----------------------------------------+------------------------+----------------------+ # | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | # | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | # | | | MIG M. | # |=========================================+========================+======================| # | 0 NVIDIA GeForce RTX 3090 On | 00000000:2B:00.0 On | N/A | # | 0% 52C P8 41W / 350W | 369MiB / 24576MiB | 31% Default | # | | | N/A | # +-----------------------------------------+------------------------+----------------------+ # # +-----------------------------------------------------------------------------------------+ # | Processes: | # | GPU GI CI PID Type Process name GPU Memory | # | ID ID Usage | # |=========================================================================================| # | No running processes found | # +-----------------------------------------------------------------------------------------+ ``` ================================================ FILE: ansible/roles/nvidia_container_toolkit/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/nvidia_container_toolkit/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/nvidia_container_toolkit/tasks/main.yaml ================================================ - name: Add NVIDIA container toolkit GPG key become: true ansible.builtin.apt_key: url: https://nvidia.github.io/libnvidia-container/gpgkey state: present keyring: /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg - name: Add NVIDIA container toolkit repository become: true ansible.builtin.apt_repository: repo: deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) / state: present filename: nvidia-container-toolkit update_cache: true - name: Install NVIDIA Container Toolkit become: true ansible.builtin.apt: name: - nvidia-container-toolkit update_cache: true - name: Add NVIDIA runtime support to docker engine become: true ansible.builtin.shell: | nvidia-ctk runtime configure --runtime=docker changed_when: true - name: Restart docker daemon become: true ansible.builtin.systemd: name: docker state: restarted changed_when: true ================================================ FILE: ansible/roles/qt5ct_setup/README.md ================================================ # 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. ================================================ FILE: ansible/roles/qt5ct_setup/defaults/main.yml ================================================ # defaults file for qt5ct_setup ================================================ FILE: ansible/roles/qt5ct_setup/files/autoware.qss ================================================ /* ------------------------------------------------------------------------ */ /* 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; } ================================================ FILE: ansible/roles/qt5ct_setup/files/qt5ct.conf ================================================ [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() ================================================ FILE: ansible/roles/qt5ct_setup/meta/main.yml ================================================ ================================================ FILE: ansible/roles/qt5ct_setup/tasks/main.yml ================================================ - 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_setup_config_dir ansible.builtin.set_fact: qt5ct_setup_config_dir: "{{ ansible_env.HOME }}/.config/qt5ct" - name: Ensure qt5ct_setup_config_dir exists ansible.builtin.file: path: "{{ qt5ct_setup_config_dir }}" state: directory mode: "0755" - name: Print the role_path ansible.builtin.debug: msg: "The role_path is: {{ role_path }}" - name: Set qt5ct_setup_icons_path variable ansible.builtin.set_fact: qt5ct_setup_icons_path: "{{ qt5ct_setup_config_dir }}/autoware-rviz-icons" - name: Remove autoware-rviz-icons folder if it exists ansible.builtin.file: path: "{{ qt5ct_setup_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: "{{ qt5ct_setup_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: "{{ qt5ct_setup_icons_path }}/" - name: Ensure qt5ct_setup_config_dir/qss exists ansible.builtin.file: path: "{{ qt5ct_setup_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_setup_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_setup_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" ================================================ FILE: ansible/roles/rmw_implementation/README.md ================================================ # rmw_implementation This role sets up ROS 2 RMW implementation following [this page](https://docs.ros.org/en/humble/How-To-Guides/Working-with-multiple-RMW-implementations.html). ## Inputs | Name | Required | Description | | ------------------ | -------- | ------------------- | | rosdistro | true | The ROS distro. | | rmw_implementation | true | RMW implementation. | ## Manual Installation ## Set up the environment variables Choose **one** ROS distribution and run the corresponding command. ### ROS 2 Humble ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && \ source /tmp/amd64.env ``` ### ROS 2 Jazzy ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64_jazzy.env && \ source /tmp/amd64.env ``` ## Install the RMW implementation For details: ```bash sudo apt update sudo apt install ros-${rosdistro}-${rmw_implementation//_/-} # (Optional) You set the default RMW implementation in the ~/.bashrc file. echo '' >> ~/.bashrc && echo "export RMW_IMPLEMENTATION=${rmw_implementation}" >> ~/.bashrc ``` ================================================ FILE: ansible/roles/rmw_implementation/defaults/main.yaml ================================================ rmw_implementation__rosdistro: null rmw_implementation__name: null ================================================ FILE: ansible/roles/rmw_implementation/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/rmw_implementation/tasks/main.yaml ================================================ - name: Validate inputs ansible.builtin.assert: that: - rmw_implementation__rosdistro | length > 0 - rmw_implementation__name | length > 0 - name: Build target package name ansible.builtin.set_fact: rmw_implementation__pkg: >- ros-{{ rmw_implementation__rosdistro }}-{{ rmw_implementation__name | replace('_', '-') }} - name: List held packages ansible.builtin.command: apt-mark showhold register: rmw_implementation__held_pkgs changed_when: false - name: Install latest (skip if held) {{ rmw_implementation__pkg }} become: true ansible.builtin.apt: name: "{{ rmw_implementation__pkg }}" state: latest update_cache: true cache_valid_time: 3600 when: rmw_implementation__pkg not in rmw_implementation__held_pkgs.stdout_lines - name: Ensure RMW_IMPLEMENTATION in user bashrc ansible.builtin.lineinfile: path: "{{ lookup('env', 'HOME') }}/.bashrc" line: export RMW_IMPLEMENTATION={{ rmw_implementation__name }} state: present create: true mode: "0644" - name: Ensure RMW_IMPLEMENTATION in skeleton bashrc (for new users) become: true ansible.builtin.lineinfile: path: /etc/skel/.bashrc line: export RMW_IMPLEMENTATION={{ rmw_implementation__name }} state: present create: true mode: "0644" ================================================ FILE: ansible/roles/ros2/README.md ================================================ # ros2 This role installs [ROS 2](http://www.ros2.org/) following [this page](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html). Additional steps may be needed depending on the `rosdistro` you choose. To prevent the update of the ROS 2 packages, if ros-`distro`-desktop is held, the installation process for the packages will be skipped and output warning. ```bash $ sudo apt install software-properties-common $ sudo add-apt-repository universe $ apt-cache policy | grep universe 500 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 Packages release v=20.04,o=Ubuntu,a=focal,n=focal,l=Ubuntu,c=universe,b=amd64 ``` ## Inputs | Name | Required | Description | | ---------------------- | -------- | ------------------------------------------------ | | rosdistro | true | The ROS distro. | | ros2_installation_type | false | The installation type (`desktop` or `ros-base`). | ## Manual Installation The `ros2_installation_type` variable can also be found in: [./defaults/main.yaml](./defaults/main.yaml) For Universe, the `rosdistro` variable can also be found in: [../../playbooks/universe.yaml](../../playbooks/universe.yaml) ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && source /tmp/amd64.env # Taken from: https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html # You will need to add the ROS 2 apt repository to your system. First, make sure that the Ubuntu Universe repository is enabled by checking the output of this command. apt-cache policy | grep universe # The output of the above command should contain following: # 500 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 Packages # release v=20.04,o=Ubuntu,a=focal,n=focal,l=Ubuntu,c=universe,b=amd64 # If you don’t see an output line like the one above, then enable the Universe repository with these instructions. sudo apt install software-properties-common sudo add-apt-repository universe # Now add the ROS 2 apt repository to your system. First authorize our GPG key with apt. sudo apt update && sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # Then add the repository to your sources list. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null # Update your apt repository caches after setting up the repositories. sudo apt update # Desktop Install ros2_installation_type=desktop sudo apt install ros-${rosdistro}-${ros2_installation_type} # Environment setup # (Optional) You can source ros2 in the ~/.bashrc file. echo '' >> ~/.bashrc && echo "source /opt/ros/${rosdistro}/setup.bash" >> ~/.bashrc ``` ================================================ FILE: ansible/roles/ros2/defaults/main.yaml ================================================ ros2_installation_type: desktop ================================================ FILE: ansible/roles/ros2/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/ros2/tasks/main.yaml ================================================ - name: Get latest release information of ros-apt-source package ansible.builtin.uri: url: https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest method: GET return_content: true register: ros2__ros_apt_release_info - name: Extract latest version of ros-apt-source package ansible.builtin.set_fact: ros2__ros_apt_source_version: "{{ (ros2__ros_apt_release_info.content | from_json).tag_name }}" - name: Save result of 'source /etc/os-release && echo $UBUNTU_CODENAME' ansible.builtin.shell: bash -c 'source /etc/os-release && echo $UBUNTU_CODENAME' register: ros2__ubuntu_codename changed_when: false - name: Get ros2-apt-source package ansible.builtin.get_url: url: https://github.com/ros-infrastructure/ros-apt-source/releases/download/{{ ros2__ros_apt_source_version }}/ros2-apt-source_{{ ros2__ros_apt_source_version }}.{{ ros2__ubuntu_codename.stdout }}_all.deb dest: /tmp/ros2-apt-source.deb mode: "0644" - name: Install ros2-apt-source package ansible.builtin.apt: deb: /tmp/ros2-apt-source.deb state: present become: true - name: Delete installed .deb file ansible.builtin.file: path: /tmp/ros2-apt-source.deb state: absent - name: Hold check of ros-{{ rosdistro + '-' + ros2_installation_type }} ansible.builtin.command: apt-mark showhold register: ros2_held_ros_packages changed_when: false - name: Install ros-{{ rosdistro + '-' + ros2_installation_type }} become: true ansible.builtin.apt: name: ros-{{ rosdistro }}-{{ ros2_installation_type }} state: latest update_cache: true when: "'ros-' + rosdistro + '-' + ros2_installation_type not in ros2_held_ros_packages.stdout" register: ros2_install_result failed_when: false - name: Display warning if ROS 2 package is held ansible.builtin.debug: msg: ROS package 'ros-{{ rosdistro + '-' + ros2_installation_type }}' is apt-mark hold. Skipping installation. when: not ros2_install_result.changed - name: Add PATH to .bashrc become: true ansible.builtin.lineinfile: dest: "{{ item }}" line: source /opt/ros/{{ rosdistro }}/setup.bash state: present create: true mode: 0644 loop: - ~/.bashrc - /etc/skel/.bashrc ================================================ FILE: ansible/roles/ros2_dev_tools/README.md ================================================ # ros2_dev_tools This role installs ROS 2 development tools following [this page](https://docs.ros.org/en/humble/Installation/Ubuntu-Development-Setup.html). ## Inputs None. ## Manual Installation ```bash # Taken from https://docs.ros.org/en/humble/Installation/Ubuntu-Development-Setup.html sudo apt update && sudo apt install -y \ python3-colcon-mixin \ python3-flake8-docstrings \ python3-pip \ python3-pytest-cov \ python3-flake8-blind-except \ python3-flake8-builtins \ python3-flake8-class-newline \ python3-flake8-comprehensions \ python3-flake8-deprecated \ python3-flake8-import-order \ python3-flake8-quotes \ python3-pytest-repeat \ python3-pytest-rerunfailures \ ros-build-essential \ python3-bloom \ python3-colcon-common-extensions \ python3-colcon-mixin \ python3-rosdep \ python3-vcs2l \ wget # Initialize rosdep sudo rosdep init rosdep update ``` ================================================ FILE: ansible/roles/ros2_dev_tools/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/ros2_dev_tools/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/ros2_dev_tools/tasks/main.yaml ================================================ - name: Install apt packages become: true ansible.builtin.apt: name: - python3-colcon-mixin - python3-flake8-docstrings - python3-pip - python3-pytest-cov - python3-flake8-blind-except - python3-flake8-builtins - python3-flake8-class-newline - python3-flake8-comprehensions - python3-flake8-deprecated - python3-flake8-import-order - python3-flake8-quotes - python3-pytest-repeat - python3-pytest-rerunfailures - ros-build-essential # from ros-dev-tools - python3-bloom # from ros-dev-tools - python3-colcon-common-extensions # from ros-dev-tools - python3-colcon-mixin # from ros-dev-tools - python3-rosdep # from ros-dev-tools - python3-vcs2l # formerly python3-vcstool - wget # from ros-dev-tools state: latest update_cache: true - name: Run 'sudo rosdep init' become: true ansible.builtin.command: cmd: rosdep init creates: /etc/ros/rosdep/sources.list.d/20-default.list ================================================ FILE: ansible/roles/spconv/README.md ================================================ # spconv This role install the `cumm` and `spconv` libraries needed to perform sparse convolutions. The [original implementation](https://github.com/traveller59/spconv) did not provide a shared library, which is pre-generated c++ code and pre-compiled libraries were prepared [separately](https://github.com/autowarefoundation/spconv_cpp). ## Architecture Support This role supports different architectures with platform-specific package variants: - **amd64**: No suffix (e.g., `cumm_0.5.3_amd64.deb`) - **arm64**: - Default: `-sbsa` suffix for server platforms (e.g., `cumm_0.5.3_arm64-sbsa.deb`) - Jetson: `-jetson` suffix when `spconv_is_jetson=true` (e.g., `cumm_0.5.3_arm64-jetson.deb`) ## Manual Installation For manual installation, please follow the instructions in [this](https://github.com/autowarefoundation/spconv_cpp) repository. ## Run the playbook The following command will install a particular version of the packages using ansible. ### Standard installation (amd64 or arm64 server) ```bash export CUMM_VERSION=0.5.3 export SPCONV_VERSION=2.3.8 ansible-playbook autoware.dev_env.install_spconv.yaml -e cumm_version=${CUMM_VERSION} -e spconv_version=${SPCONV_VERSION} --ask-become-pass ``` ### Installation for NVIDIA Jetson platforms ```bash export CUMM_VERSION=0.5.3 export SPCONV_VERSION=2.3.8 ansible-playbook autoware.dev_env.install_spconv.yaml -e cumm_version=${CUMM_VERSION} -e spconv_version=${SPCONV_VERSION} -e spconv_is_jetson=true --ask-become-pass ``` ================================================ FILE: ansible/roles/spconv/defaults/main.yaml ================================================ spconv_is_jetson: false ================================================ FILE: ansible/roles/spconv/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/spconv/tasks/main.yaml ================================================ # cspell:ignore Bcumm - name: Normalize dpkg architecture ansible.builtin.set_fact: spconv_normalized_arch: "{{ ansible_architecture | regex_replace('aarch64', 'arm64') | regex_replace('x86_64', 'amd64') }}" - name: Set architecture suffix ansible.builtin.set_fact: spconv_arch_suffix: "{{ '-jetson' if (spconv_normalized_arch == 'arm64' and spconv_is_jetson | bool) else ('-sbsa' if spconv_normalized_arch == 'arm64' else '') }}" - name: Download the cumm package ansible.builtin.get_url: mode: "0644" url: https://github.com/autowarefoundation/spconv_cpp/releases/download/spconv_v{{ spconv_version }}%2Bcumm_v{{ cumm_version }}%2Bcu128/cumm_{{ cumm_version }}_{{ spconv_normalized_arch }}{{ spconv_arch_suffix }}.deb dest: /tmp/cumm.deb - name: Install the cumm package become: true ansible.builtin.apt: deb: /tmp/cumm.deb state: present - name: Download the spconv package ansible.builtin.get_url: mode: "0644" url: https://github.com/autowarefoundation/spconv_cpp/releases/download/spconv_v{{ spconv_version }}%2Bcumm_v{{ cumm_version }}%2Bcu128/spconv_{{ spconv_version }}_{{ spconv_normalized_arch }}{{ spconv_arch_suffix }}.deb dest: /tmp/spconv.deb - name: Install the spconv package become: true ansible.builtin.apt: deb: /tmp/spconv.deb state: present ================================================ FILE: ansible/roles/telegraf/README.md ================================================ # telegraf This role install [InfluxDB v2](https://docs.influxdata.com/influxdb/v2/get-started/) and [Telegraf](https://docs.influxdata.com/telegraf/v1/) to collect system metrics. After installing telegraf and influxdb2, we need to manually make an API token and copy it to the `/etc/telegraf/telegraf.conf`. ## Create Organization When accessing the InfluxDB UI for the first time, you need to create an organization and a backet. Enter as follows. ![](./files/create-org.png) ## Generate API token Next, move to the `Load Data` tab, click the `GENERATE API TOKEN button`, and generate the API token. ![](./files/load-data.png) ![](./files/generate-api-token.png) ## Copy API token and restart Telegraf Paste the obtained API token into the empty string part of `token = ""` in `/etc/telegraf/telegraf.conf`. ================================================ FILE: ansible/roles/telegraf/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/telegraf/files/get_telegraf_proccpu_json.sh ================================================ #!/bin/bash SAMPLING_SEC=5 echo "{" pidstat -u -h -l "${SAMPLING_SEC}" 1 | tail -n +4 | awk '{ cpu=$8; $1=$2=$3=$4=$5=$6=$7=$8=$9=""; print cpu,$0 }' | sort -n | while read -r cpu cmd; do if [[ ${cpu%%.*} -le 0 ]]; then continue fi cmd="${cmd// /_}" cmd="${cmd//=/_}" cmd="${cmd:0:50}" echo "\"${cmd}\":${cpu}," done echo '"z":0' echo "}" ================================================ FILE: ansible/roles/telegraf/files/get_telegraf_procmem_json.sh ================================================ #!/bin/bash echo "{" ps -ax --format "rss command" | while read -r rss cmd; do if [[ $rss -lt 30000 ]]; then continue fi cmd="${cmd// /_}" cmd="${cmd//=/_}" cmd="${cmd:0:50}" echo "\"${cmd}\":${rss}," done echo '"z":0' echo "}" ================================================ FILE: ansible/roles/telegraf/files/telegraf.conf ================================================ [global_tags] [agent] interval = "10s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" flush_interval = "10s" flush_jitter = "0s" precision = "0s" hostname = "" omit_hostname = false [[outputs.influxdb_v2]] urls = ["http://127.0.0.1:8086"] # Attach the access token. See also https://docs.influxdata.com/influxdb/cloud/admin/tokens/create-token/#manage-tokens-in-the-influxdb-ui token = "" organization = "autowarefoundation" bucket = "autoware" timeout = "5s" user_agent = "telegraf" [[inputs.cpu]] percpu = true totalcpu = true collect_cpu_time = false report_active = false core_tags = false [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] [[inputs.diskio]] [[inputs.kernel]] [[inputs.mem]] [[inputs.processes]] [[inputs.swap]] [[inputs.system]] [[inputs.exec]] commands = ["/opt/autoware/bin/get_telegraf_proccpu_json.sh"] timeout = "10s" data_format = "json" name_suffix = "_proccpu" [[inputs.exec]] commands = ["/opt/autoware/bin/get_telegraf_procmem_json.sh"] timeout = "5s" data_format = "json" name_suffix = "_procmem" [[inputs.net]] [[inputs.nvidia_smi]] ================================================ FILE: ansible/roles/telegraf/handlers/main.yaml ================================================ - name: Restart telegraf ansible.builtin.systemd: name: telegraf state: restarted ================================================ FILE: ansible/roles/telegraf/meta/main.yaml ================================================ ================================================ FILE: ansible/roles/telegraf/tasks/main.yaml ================================================ - name: Download influxdata-archive_compat.key become: true ansible.builtin.get_url: url: https://repos.influxdata.com/influxdata-archive_compat.key dest: /tmp/influxdata-archive_compat.key mode: 0755 - name: Verify the checksum of the key file ansible.builtin.command: sha256sum -c args: chdir: /tmp stdin: 393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key register: telegraf_checksum_result failed_when: telegraf_checksum_result.rc != 0 changed_when: false - name: Check if GPG key is already converted ansible.builtin.stat: path: /tmp/influxdata-archive_compat.gpg register: telegraf_gpg_key_stat - name: Convert the key to gpg format ansible.builtin.command: cmd: gpg --dearmor -o /tmp/influxdata-archive_compat.gpg /tmp/influxdata-archive_compat.key become: true when: not telegraf_gpg_key_stat.stat.exists changed_when: false - name: Check if GPG key is already moved ansible.builtin.stat: path: /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg register: telegraf_moved_key_stat - name: Move the gpg key to trusted.gpg.d ansible.builtin.command: cmd: mv /tmp/influxdata-archive_compat.gpg /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg become: true when: not telegraf_moved_key_stat.stat.exists changed_when: false - name: Add InfluxData repository become: true ansible.builtin.apt_repository: repo: deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main state: present filename: influxdata.list - name: Update apt cache become: true ansible.builtin.apt: update_cache: true cache_valid_time: 3600 - name: Install InfluxDB v2 become: true ansible.builtin.apt: name: influxdb2 state: present - name: Install InfluxDB v2 CLI become: true ansible.builtin.apt: name: influxdb2-cli state: present - name: Install Telegraf become: true ansible.builtin.apt: name: telegraf state: present - name: Create telegraf_binary directory ansible.builtin.file: path: /opt/autoware/bin state: directory mode: 0755 become: true - name: Copy get_telegraf_proccpu_json.sh to /opt/autoware/bin become: true ansible.builtin.copy: src: "{{ role_path }}/files/get_telegraf_proccpu_json.sh" dest: /opt/autoware/bin/get_telegraf_proccpu_json.sh owner: root group: root mode: 0755 - name: Copy get_telegraf_procmem_json.sh to /opt/autoware/bin become: true ansible.builtin.copy: src: "{{ role_path }}/files/get_telegraf_procmem_json.sh" dest: /opt/autoware/bin/get_telegraf_procmem_json.sh owner: root group: root mode: 0755 - name: Copy telegraf.conf to /opt/autoware/bin become: true ansible.builtin.copy: src: "{{ role_path }}/files/telegraf.conf" dest: /etc/telegraf/telegraf.conf owner: root group: root mode: 0644 backup: true notify: - Restart telegraf - name: Ensure telegraf is running and enabled become: true ansible.builtin.systemd: name: telegraf enabled: true state: started - name: Ensure InfluxDB service is running become: true ansible.builtin.service: name: influxdb state: started enabled: true - name: Check if InfluxDB is already set up become: true ansible.builtin.command: cmd: influx setup --bucket-status register: telegraf_influx_setup_status ignore_errors: true changed_when: false - name: Set up influxDB v2 become: true ansible.builtin.command: cmd: influx setup -f --name default --username autoware --password autoware --token autowaretoken --org autowarefoundation --bucket autoware --retention 0 when: telegraf_influx_setup_status.rc != 0 changed_when: false ================================================ FILE: ansible/roles/tensorrt/README.md ================================================ # tensorrt This role installs TensorRT following [the official NVIDIA TensorRT Installation Guide](https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing). ## Inputs | Name | Required | Description | | ---------------- | -------- | ------------------------ | | tensorrt_version | true | The version of TensorRT. | ## Manual Installation ### Set up the environment variables Choose **one** ROS distribution and run the corresponding command. #### ROS 2 Humble ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && \ source /tmp/amd64.env ``` #### ROS 2 Jazzy ```bash wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64_jazzy.env && \ source /tmp/amd64.env ``` ### Install TensorRT ```bash sudo apt-get install -y \ libnvinfer10=${tensorrt_version} \ libnvinfer-plugin10=${tensorrt_version} \ libnvonnxparsers10=${tensorrt_version} \ libnvinfer-dev=${tensorrt_version} \ libnvinfer-plugin-dev=${tensorrt_version} \ libnvinfer-headers-dev=${tensorrt_version} \ libnvinfer-headers-plugin-dev=${tensorrt_version} \ libnvonnxparsers-dev=${tensorrt_version} sudo apt-mark hold \ libnvinfer10 \ libnvinfer-plugin10 \ libnvonnxparsers10 \ libnvinfer-dev \ libnvinfer-plugin-dev \ libnvonnxparsers-dev \ libnvinfer-headers-dev \ libnvinfer-headers-plugin-dev ``` ================================================ FILE: ansible/roles/tensorrt/defaults/main.yaml ================================================ ================================================ FILE: ansible/roles/tensorrt/meta/main.yaml ================================================ dependencies: - role: autoware.dev_env.cuda ================================================ FILE: ansible/roles/tensorrt/tasks/main.yaml ================================================ - name: Install TensorRT become: true ansible.builtin.apt: name: - libnvinfer10={{ tensorrt_version }} - libnvinfer-plugin10={{ tensorrt_version }} - libnvonnxparsers10={{ tensorrt_version }} allow_change_held_packages: true allow_downgrade: true update_cache: true - name: Install TensorRT Dev become: true ansible.builtin.apt: name: - libnvinfer-dev={{ tensorrt_version }} - libnvinfer-plugin-dev={{ tensorrt_version }} - libnvinfer-headers-dev={{ tensorrt_version }} - libnvinfer-headers-plugin-dev={{ tensorrt_version }} - libnvonnxparsers-dev={{ tensorrt_version }} allow_change_held_packages: true allow_downgrade: true update_cache: true when: install_devel == 'y' # apt-mark hold - name: Prevent CUDA-related packages from upgrading become: true ansible.builtin.dpkg_selections: name: "{{ item }}" selection: hold with_items: - libnvinfer10 - libnvinfer-plugin10 - libnvonnxparsers10 - name: Prevent CUDA-related Dev packages from upgrading become: true ansible.builtin.dpkg_selections: name: "{{ item }}" selection: hold with_items: - libnvinfer-dev - libnvinfer-plugin-dev - libnvinfer-headers-dev - libnvinfer-headers-plugin-dev - libnvonnxparsers-dev when: install_devel == 'y' ================================================ FILE: ansible-galaxy-requirements.yaml ================================================ collections: - source: ./ansible type: dir ================================================ FILE: arm64.env ================================================ # Override amd64's settings tensorrt_version=10.3.0.26-1+cuda12.5 ================================================ FILE: docker/Dockerfile ================================================ ARG AUTOWARE_BASE_IMAGE=ghcr.io/autowarefoundation/autoware-base:latest ARG AUTOWARE_BASE_CUDA_IMAGE=ghcr.io/autowarefoundation/autoware-base:cuda-latest ARG AUTOWARE_BASE_IMAGE_JAZZY=ghcr.io/autowarefoundation/autoware-base:jazzy-latest ARG ROS_DISTRO=humble # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS rosdep-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] COPY setup-dev-env.sh ansible-galaxy-requirements.yaml amd64.env amd64_jazzy.env arm64.env /autoware/ COPY ansible/ /autoware/ansible/ COPY docker/scripts/cleanup_apt.sh /autoware/cleanup_apt.sh RUN chmod +x /autoware/cleanup_apt.sh COPY docker/scripts/resolve_rosdep_keys.sh /autoware/resolve_rosdep_keys.sh RUN chmod +x /autoware/resolve_rosdep_keys.sh WORKDIR /autoware RUN rm -f /etc/apt/apt.conf.d/docker-clean \ && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache \ && /autoware/cleanup_apt.sh # Generate install package lists COPY src/core/autoware_adapi_msgs /autoware/src/core/autoware_adapi_msgs COPY src/core/autoware_cmake /autoware/src/core/autoware_cmake COPY src/core/autoware_internal_msgs /autoware/src/core/autoware_internal_msgs COPY src/core/autoware_lanelet2_extension /autoware/src/core/autoware_lanelet2_extension COPY src/core/autoware_msgs /autoware/src/core/autoware_msgs COPY src/core/autoware_utils /autoware/src/core/autoware_utils RUN rosdep update && /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-core-common-depend-packages.txt \ && cat /rosdep-core-common-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /rosdep-core-common-exec-depend-packages.txt \ && cat /rosdep-core-common-exec-depend-packages.txt COPY src/core/autoware_core /autoware/src/core/autoware_core RUN rosdep update && /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-core-depend-packages.txt \ && cat /rosdep-core-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /rosdep-core-exec-depend-packages.txt \ && cat /rosdep-core-exec-depend-packages.txt COPY src/universe/external /autoware/src/universe/external # trt_batched_nms depends on autoware_tensorrt_common and autoware_cuda_utils, which are not available in universe-common-devel stage RUN rm -rf /autoware/src/universe/external/trt_batched_nms COPY src/universe/autoware_universe/common /autoware/src/universe/autoware_universe/common COPY src/middleware/external /autoware/src/middleware/external RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-universe-common-depend-packages.txt \ && cat /rosdep-universe-common-depend-packages.txt FROM rosdep-depend AS rosdep-universe-visualization-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO COPY src/universe/autoware_universe/visualization /autoware/src/universe/autoware_universe/visualization COPY src/core/autoware_rviz_plugins /autoware/src/core/autoware_rviz_plugins RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-universe-visualization-depend-packages.txt \ && cat /rosdep-universe-visualization-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /rosdep-universe-visualization-exec-depend-packages.txt \ && cat /rosdep-universe-visualization-exec-depend-packages.txt FROM rosdep-depend AS rosdep-universe-sensing-perception-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch COPY src/universe/autoware_universe/perception /autoware/src/universe/autoware_universe/perception COPY src/universe/autoware_universe/sensing /autoware/src/universe/autoware_universe/sensing COPY src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator /autoware/src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator COPY src/sensor_component /autoware/src/sensor_component RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-universe-sensing-perception-depend-packages.txt \ && cat /rosdep-universe-sensing-perception-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /rosdep-universe-sensing-perception-exec-depend-packages.txt \ && cat /rosdep-universe-sensing-perception-exec-depend-packages.txt FROM rosdep-depend AS rosdep-universe-localization-mapping-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch COPY src/universe/autoware_universe/localization /autoware/src/universe/autoware_universe/localization COPY src/universe/autoware_universe/map /autoware/src/universe/autoware_universe/map # TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware_universe/issues/10282 is resolved COPY src/universe/autoware_universe/sensing/autoware_pcl_extensions /autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions COPY src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor /autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor COPY src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer /autoware/src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-universe-localization-mapping-depend-packages.txt \ && cat /rosdep-universe-localization-mapping-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /rosdep-universe-localization-mapping-exec-depend-packages.txt \ && cat /rosdep-universe-localization-mapping-exec-depend-packages.txt FROM rosdep-depend AS rosdep-universe-planning-control-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch COPY src/universe/autoware_universe/control /autoware/src/universe/autoware_universe/control COPY src/universe/autoware_universe/planning /autoware/src/universe/autoware_universe/planning # TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware_universe/issues/8805 is resolved COPY src/universe/autoware_universe/evaluator/autoware_control_evaluator /autoware/src/universe/autoware_universe/evaluator/autoware_control_evaluator COPY src/universe/autoware_universe/evaluator/autoware_planning_evaluator /autoware/src/universe/autoware_universe/evaluator/autoware_planning_evaluator COPY src/universe/autoware_universe/sensing/autoware_pcl_extensions /autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions COPY src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor /autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor COPY src/universe/autoware_universe/vehicle/autoware_external_cmd_converter /autoware/src/universe/autoware_universe/vehicle/autoware_external_cmd_converter COPY src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter /autoware/src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter COPY src/universe/autoware_universe/system/autoware_command_mode_types /autoware/src/universe/autoware_universe/system/autoware_command_mode_types # diffusion_planner depends on cuda COPY src/universe/autoware_universe/sensing/autoware_cuda_utils /autoware/src/universe/autoware_universe/sensing/autoware_cuda_utils COPY src/universe/autoware_universe/perception/autoware_tensorrt_common /autoware/src/universe/autoware_universe/perception/autoware_tensorrt_common COPY src/universe/autoware_universe/perception/autoware_tensorrt_plugins /autoware/src/universe/autoware_universe/perception/autoware_tensorrt_plugins RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-universe-planning-control-depend-packages.txt \ && cat /rosdep-universe-planning-control-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /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/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch COPY src/universe/autoware_universe/vehicle /autoware/src/universe/autoware_universe/vehicle COPY src/universe/autoware_universe/system /autoware/src/universe/autoware_universe/system # planning_validator and its dependencies COPY src/universe/autoware_universe/planning/planning_validator /autoware/src/universe/autoware_universe/planning/planning_validator COPY src/core/autoware_core/planning/autoware_planning_factor_interface /autoware/src/core/autoware_core/planning/autoware_planning_factor_interface COPY src/core/autoware_core/planning/autoware_route_handler /autoware/src/core/autoware_core/planning/autoware_route_handler COPY src/core/autoware_core/map/autoware_map_height_fitter /autoware/src/core/autoware_core/map/autoware_map_height_fitter COPY src/universe/autoware_universe/localization/autoware_pose2twist /autoware/src/universe/autoware_universe/localization/autoware_pose2twist COPY src/sensor_component/external/sensor_component_description /autoware/src/sensor_component/external/sensor_component_description RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-universe-vehicle-system-depend-packages.txt \ && cat /rosdep-universe-vehicle-system-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /rosdep-universe-vehicle-system-exec-depend-packages.txt \ && cat /rosdep-universe-vehicle-system-exec-depend-packages.txt FROM rosdep-depend AS rosdep-universe-api-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO COPY src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch /autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch COPY src/universe/autoware_universe/system/autoware_default_adapi_universe /autoware/src/universe/autoware_universe/system/autoware_default_adapi_universe COPY src/universe/autoware_universe/evaluator/autoware_evaluation_adapter /autoware/src/universe/autoware_universe/evaluator/autoware_evaluation_adapter COPY src/core/autoware_core/api/autoware_adapi_adaptors /autoware/src/core/autoware_core/api/autoware_adapi_adaptors COPY src/universe/autoware_universe/system/autoware_diagnostic_graph_utils /autoware/src/universe/autoware_universe/system/autoware_diagnostic_graph_utils COPY src/core/autoware_core/map/autoware_map_height_fitter /autoware/src/core/autoware_core/map/autoware_map_height_fitter RUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} \ > /rosdep-universe-api-depend-packages.txt \ && cat /rosdep-universe-api-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} --dependency-types=exec \ > /rosdep-universe-api-exec-depend-packages.txt \ && cat /rosdep-universe-api-exec-depend-packages.txt FROM rosdep-depend AS rosdep-universe-depend SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO COPY src/launcher /autoware/src/launcher COPY src/sensor_component /autoware/src/sensor_component COPY src/universe /autoware/src/universe RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" \ > /rosdep-universe-depend-packages.txt \ && cat /rosdep-universe-depend-packages.txt RUN /autoware/resolve_rosdep_keys.sh /autoware/src "${ROS_DISTRO}" --dependency-types=exec \ > /rosdep-exec-depend-packages.txt \ && cat /rosdep-exec-depend-packages.txt # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS core-common-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" ENV CMAKE_PREFIX_PATH="/opt/acados:${CMAKE_PREFIX_PATH}" ENV ACADOS_SOURCE_DIR="/opt/acados" ENV LD_LIBRARY_PATH="/opt/acados/lib:${LD_LIBRARY_PATH}" COPY docker/scripts/build_and_clean.sh /autoware/build_and_clean.sh RUN chmod +x /autoware/build_and_clean.sh # Set up development environment and tools RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers openadkit --ros-distro $ROS_DISTRO \ && ./setup-dev-env.sh -y --module dev-tools openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && /autoware/cleanup_apt.sh # Install rosdep dependencies COPY --from=rosdep-depend /rosdep-core-common-depend-packages.txt /tmp/rosdep-core-common-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-core-common-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/core/autoware_adapi_msgs,target=/autoware/src/core/autoware_adapi_msgs \ --mount=type=bind,source=src/core/autoware_cmake,target=/autoware/src/core/autoware_cmake \ --mount=type=bind,source=src/core/autoware_internal_msgs,target=/autoware/src/core/autoware_internal_msgs \ --mount=type=bind,source=src/core/autoware_lanelet2_extension,target=/autoware/src/core/autoware_lanelet2_extension \ --mount=type=bind,source=src/core/autoware_msgs,target=/autoware/src/core/autoware_msgs \ --mount=type=bind,source=src/core/autoware_utils,target=/autoware/src/core/autoware_utils \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM core-common-devel AS core-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-depend /rosdep-core-depend-packages.txt /tmp/rosdep-core-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-core-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/core/autoware_core,target=/autoware/src/core/autoware_core \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM core-devel AS universe-common-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-depend /rosdep-universe-common-depend-packages.txt /tmp/rosdep-universe-common-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-common-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/universe/autoware_universe/common,target=/autoware/src/universe/autoware_universe/common \ --mount=type=bind,source=src/universe/external/eagleye,target=/autoware/src/universe/external/eagleye \ --mount=type=bind,source=src/universe/external/glog,target=/autoware/src/universe/external/glog \ --mount=type=bind,source=src/universe/external/llh_converter,target=/autoware/src/universe/external/llh_converter \ --mount=type=bind,source=src/universe/external/managed_transform_buffer,target=/autoware/src/universe/external/managed_transform_buffer \ --mount=type=bind,source=src/universe/external/morai_msgs,target=/autoware/src/universe/external/morai_msgs \ --mount=type=bind,source=src/universe/external/muSSP,target=/autoware/src/universe/external/muSSP \ --mount=type=bind,source=src/universe/external/pointcloud_to_laserscan,target=/autoware/src/universe/external/pointcloud_to_laserscan \ --mount=type=bind,source=src/universe/external/rtklib_ros_bridge,target=/autoware/src/universe/external/rtklib_ros_bridge \ --mount=type=bind,source=src/universe/external/tier4_autoware_msgs,target=/autoware/src/universe/external/tier4_autoware_msgs \ --mount=type=bind,source=src/middleware/external,target=/autoware/src/middleware/external \ --mount=type=bind,source=src/launcher,target=/autoware/src/launcher \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel AS universe-common-devel-cuda SHELL ["/bin/bash", "-o", "pipefail", "-c"] # Set up CUDA development environment # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ ./setup-dev-env.sh -y --module all --no-cuda-drivers openadkit --ros-distro "$ROS_DISTRO" \ && pipx uninstall ansible \ && /autoware/cleanup_apt.sh true ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel AS universe-sensing-perception-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-depend-packages.txt /tmp/rosdep-universe-sensing-perception-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-sensing-perception-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_perception_launch \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_sensing_launch \ --mount=type=bind,source=src/universe/external/trt_batched_nms,target=/autoware/src/universe/external/trt_batched_nms \ --mount=type=bind,source=src/universe/autoware_universe/perception,target=/autoware/src/universe/autoware_universe/perception \ --mount=type=bind,source=src/universe/autoware_universe/sensing,target=/autoware/src/universe/autoware_universe/sensing \ --mount=type=bind,source=src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator,target=/autoware/src/universe/autoware_universe/evaluator/autoware_perception_online_evaluator \ --mount=type=bind,source=src/sensor_component,target=/autoware/src/sensor_component \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel-cuda AS universe-sensing-perception-devel-cuda SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-depend-packages.txt /tmp/rosdep-universe-sensing-perception-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-sensing-perception-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh COPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/universe/external/negotiated,target=/autoware/src/universe/external/negotiated \ --mount=type=bind,source=src/universe/external/cuda_blackboard,target=/autoware/src/universe/external/cuda_blackboard \ --mount=type=bind,source=src/universe/autoware_universe/perception,target=/autoware/src/universe/autoware_universe/perception \ --mount=type=bind,source=src/universe/autoware_universe/sensing,target=/autoware/src/universe/autoware_universe/sensing \ --mount=type=bind,source=src/universe/autoware_universe/common/autoware_cuda_dependency_meta,target=/autoware/src/universe/autoware_universe/common/autoware_cuda_dependency_meta \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware "--packages-above-and-dependencies autoware_cuda_dependency_meta" ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel AS universe-localization-mapping-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-universe-localization-mapping-depend /rosdep-universe-localization-mapping-depend-packages.txt /tmp/rosdep-universe-localization-mapping-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-localization-mapping-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_localization_launch \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_map_launch \ --mount=type=bind,source=src/universe/autoware_universe/localization,target=/autoware/src/universe/autoware_universe/localization \ --mount=type=bind,source=src/universe/autoware_universe/map,target=/autoware/src/universe/autoware_universe/map \ # TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware_universe/issues/10282 is resolved --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pcl_extensions,target=/autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions \ --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor,target=/autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor \ --mount=type=bind,source=src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer,target=/autoware/src/universe/autoware_universe/system/autoware_default_adapi_helpers/autoware_automatic_pose_initializer \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware FROM universe-common-devel AS universe-planning-control-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-universe-planning-control-depend /rosdep-universe-planning-control-depend-packages.txt /tmp/rosdep-universe-planning-control-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-planning-control-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_control_launch \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_planning_launch \ --mount=type=bind,source=src/universe/autoware_universe/control,target=/autoware/src/universe/autoware_universe/control \ --mount=type=bind,source=src/universe/autoware_universe/planning,target=/autoware/src/universe/autoware_universe/planning \ # TODO(youtalk): Remove --mount options when https://github.com/autowarefoundation/autoware_universe/issues/8805 is resolved --mount=type=bind,source=src/universe/autoware_universe/evaluator/autoware_control_evaluator,target=/autoware/src/universe/autoware_universe/evaluator/autoware_control_evaluator \ --mount=type=bind,source=src/universe/autoware_universe/evaluator/autoware_planning_evaluator,target=/autoware/src/universe/autoware_universe/evaluator/autoware_planning_evaluator \ --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pcl_extensions,target=/autoware/src/universe/autoware_universe/sensing/autoware_pcl_extensions \ --mount=type=bind,source=src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor,target=/autoware/src/universe/autoware_universe/sensing/autoware_pointcloud_preprocessor \ --mount=type=bind,source=src/universe/autoware_universe/vehicle/autoware_external_cmd_converter,target=/autoware/src/universe/autoware_universe/vehicle/autoware_external_cmd_converter \ --mount=type=bind,source=src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter,target=/autoware/src/universe/autoware_universe/vehicle/autoware_raw_vehicle_cmd_converter \ --mount=type=bind,source=src/universe/autoware_universe/system/autoware_command_mode_types,target=/autoware/src/universe/autoware_universe/system/autoware_command_mode_types \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware 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,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-vehicle-system-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_vehicle_launch \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_system_launch \ --mount=type=bind,source=src/universe/autoware_universe/vehicle,target=/autoware/src/universe/autoware_universe/vehicle \ --mount=type=bind,source=src/universe/autoware_universe/system,target=/autoware/src/universe/autoware_universe/system \ --mount=type=bind,source=src/core/autoware_core/map/autoware_map_height_fitter,target=/autoware/src/core/autoware_core/map/autoware_map_height_fitter \ --mount=type=bind,source=src/universe/autoware_universe/localization/autoware_pose2twist,target=/autoware/src/universe/autoware_universe/localization/autoware_pose2twist \ --mount=type=bind,source=src/universe/autoware_universe/planning/planning_validator,target=/autoware/src/universe/autoware_universe/planning/planning_validator \ --mount=type=bind,source=src/sensor_component/external/sensor_component_description,target=/autoware/src/sensor_component/external/sensor_component_description \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel AS universe-visualization-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-universe-visualization-depend /rosdep-universe-visualization-depend-packages.txt /tmp/rosdep-universe-visualization-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-visualization-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/universe/autoware_universe/visualization,target=/autoware/src/universe/autoware_universe/visualization \ --mount=type=bind,source=src/core/autoware_rviz_plugins,target=/autoware/src/core/autoware_rviz_plugins \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel AS universe-api-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-universe-api-depend /rosdep-universe-api-depend-packages.txt /tmp/rosdep-universe-api-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-api-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh # hadolint ignore=SC1091 RUN --mount=type=cache,target=${CCACHE_DIR} \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch/tier4_autoware_api_launch \ --mount=type=bind,source=src/universe/autoware_universe/system/autoware_default_adapi_universe,target=/autoware/src/universe/autoware_universe/system/autoware_default_adapi_universe \ --mount=type=bind,source=src/core/autoware_core/api/autoware_adapi_adaptors,target=/autoware/src/core/autoware_core/api/autoware_adapi_adaptors \ --mount=type=bind,source=src/universe/autoware_universe/system/autoware_diagnostic_graph_utils,target=/autoware/src/universe/autoware_universe/system/autoware_diagnostic_graph_utils \ --mount=type=bind,source=src/core/autoware_core/map/autoware_map_height_fitter,target=/autoware/src/core/autoware_core/map/autoware_map_height_fitter \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh ${CCACHE_DIR} /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel AS universe-devel SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies COPY --from=rosdep-universe-depend /rosdep-universe-depend-packages.txt /tmp/rosdep-universe-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh 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 COPY --from=universe-visualization-devel /opt/autoware /opt/autoware COPY --from=universe-api-devel /opt/autoware /opt/autoware # strip unneeded symbols from binaries in /opt/autoware RUN find /opt/autoware -type f \( -executable -o -name "*.so" \) -exec strip --strip-unneeded --remove-section=.comment --remove-section=.note {} \; # hadolint ignore=SC1091 RUN --mount=type=cache,target="${CCACHE_DIR}" \ --mount=type=bind,source=src/sensor_component,target=/autoware/src/sensor_component \ --mount=type=bind,source=src/universe/autoware_universe/evaluator,target=/autoware/src/universe/autoware_universe/evaluator \ --mount=type=bind,source=src/launcher/autoware_launch/tier4_universe_launch,target=/autoware/src/launcher/autoware_launch/tier4_universe_launch \ --mount=type=bind,source=src/universe/autoware_universe/simulator,target=/autoware/src/universe/autoware_universe/simulator \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh "${CCACHE_DIR}" /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] FROM universe-common-devel-cuda AS universe-devel-cuda SHELL ["/bin/bash", "-o", "pipefail", "-c"] # Install rosdep dependencies COPY --from=rosdep-universe-depend /rosdep-universe-depend-packages.txt /tmp/rosdep-universe-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && cat /tmp/rosdep-universe-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_apt.sh COPY --from=universe-devel /opt/autoware /opt/autoware COPY --from=universe-sensing-perception-devel-cuda /opt/autoware /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS core SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-depend /rosdep-core-exec-depend-packages.txt /tmp/rosdep-core-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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-core-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=core-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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe-sensing-perception SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-exec-depend-packages.txt /tmp/rosdep-universe-sensing-perception-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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware # TODO(youtalk): Fix https://github.com/autowarefoundation/autoware/pull/6235 workaround COPY --from=universe-common-devel /opt/autoware/share/autoware_launch /opt/autoware/share/autoware_launch # 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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_CUDA_IMAGE AS universe-sensing-perception-cuda SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-exec-depend-packages.txt /tmp/rosdep-universe-sensing-perception-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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-sensing-perception-devel-cuda /opt/autoware /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe-localization-mapping SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-localization-mapping-depend /rosdep-universe-localization-mapping-exec-depend-packages.txt /tmp/rosdep-universe-localization-mapping-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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-universe-localization-mapping-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-localization-mapping-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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe-planning-control SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-planning-control-depend /rosdep-universe-planning-control-exec-depend-packages.txt /tmp/rosdep-universe-planning-control-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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-universe-planning-control-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-planning-control-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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe-vehicle-system SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment 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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-universe-vehicle-system-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO 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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe-visualization SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-visualization-depend /rosdep-universe-visualization-exec-depend-packages.txt /tmp/rosdep-universe-visualization-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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-universe-visualization-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-visualization-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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe-api SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-api-depend /rosdep-universe-api-exec-depend-packages.txt /tmp/rosdep-universe-api-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 --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-universe-api-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-api-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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-depend /rosdep-exec-depend-packages.txt /tmp/rosdep-exec-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-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"] # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_CUDA_IMAGE AS universe-cuda SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR # Set up runtime environment COPY --from=rosdep-universe-depend /rosdep-exec-depend-packages.txt /tmp/rosdep-exec-depend-packages.txt # hadolint ignore=SC2002,DL3009 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && apt-get update \ && cat /tmp/rosdep-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY --from=universe-devel-cuda /opt/autoware /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] ================================================ FILE: docker/Dockerfile.base ================================================ ARG BASE_IMAGE # hadolint ignore=DL3006 FROM $BASE_IMAGE AS base SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO # Copy files COPY setup-dev-env.sh ansible-galaxy-requirements.yaml amd64.env amd64_jazzy.env arm64.env /autoware/ COPY ansible/ /autoware/ansible/ COPY docker/scripts/cleanup_apt.sh /autoware/cleanup_apt.sh RUN chmod +x /autoware/cleanup_apt.sh COPY docker/scripts/cleanup_system.sh /autoware/cleanup_system.sh RUN chmod +x /autoware/cleanup_system.sh WORKDIR /autoware # Disable installing suggested and recommended packages RUN echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf.d/99-disable-extra-packages; \ echo 'APT::Install-Suggests "false";' >> /etc/apt/apt.conf.d/99-disable-extra-packages # Install apt packages and add GitHub to known hosts for private repositories RUN rm -f /etc/apt/apt.conf.d/docker-clean \ && echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends \ gosu \ ssh \ && /autoware/cleanup_apt.sh \ && mkdir -p ~/.ssh \ && ssh-keyscan github.com >> ~/.ssh/known_hosts # Set up base environment RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ ./setup-dev-env.sh -y --module base --no-nvidia --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && /autoware/cleanup_apt.sh \ && echo "source /opt/ros/${ROS_DISTRO}/setup.bash" > /etc/bash.bashrc ENV CMAKE_PREFIX_PATH="/opt/acados:${CMAKE_PREFIX_PATH}" ENV ACADOS_SOURCE_DIR="/opt/acados" ENV LD_LIBRARY_PATH="/opt/acados/lib:${LD_LIBRARY_PATH}" # Create entrypoint COPY docker/etc/ros_entrypoint.sh /ros_entrypoint.sh RUN chmod +x /ros_entrypoint.sh CMD ["/bin/bash"] FROM base AS base-cuda SHELL ["/bin/bash", "-o", "pipefail", "-c"] # Set up CUDA runtime environment # hadolint ignore=SC2002,SC2086 RUN --mount=type=ssh \ ./setup-dev-env.sh -y --module base --no-cuda-drivers --runtime openadkit --ros-distro $ROS_DISTRO \ && pipx uninstall ansible \ && /autoware/cleanup_apt.sh true ================================================ FILE: docker/README.md ================================================ # Open AD Kit: containerized workloads for Autoware [Open AD Kit](https://autoware.org/open-ad-kit/) offers containers for Autoware to simplify the development and deployment of Autoware and its dependencies. This directory contains scripts to build and run the containers. 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 < repositories/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) The suffix `-devel` (e.g. `universe-devel`) is intended for use as a [development container](https://containers.dev). On the other hand, those without the `-devel` suffix (e.g. `universe`) are intended to be used as a runtime container. ### `$BASE_IMAGE` This is a base image of this Dockerfile. [`ros:humble-ros-base-jammy`](https://hub.docker.com/_/ros/tags?page=&page_size=&ordering=&name=humble-ros-base-jammy) will be given. ### `$AUTOWARE_BASE_IMAGE` (from Dockerfile.base) This stage performs only the basic setup required for all Autoware images. ### `$AUTOWARE_BASE_CUDA_IMAGE` (from Dockerfile.base) This stage is built on top of `$AUTOWARE_BASE_IMAGE` and adds the CUDA runtime environment and artifacts. ### `rosdep-depend` The ROS dependency package list files will be generated. These files will be used in the subsequent stages: - `core-common-devel` - `core-devel` - `core` - `universe-common` - `universe-COMPONENT-devel` (e.g. `universe-sensing-perception-devel`) - `universe-COMPONENT` (e.g. `universe-sensing-perception`) - `universe-devel` - `universe` By generating only the package list files and copying them to the subsequent stages, the dependency packages will not be reinstalled during the container build process unless the dependency packages change. ### `core-common-devel` This stage installs the dependency packages based on `/rosdep-core-common-depend-packages.txt` and builds the packages under the `core` directory of `autoware.repos` except for `autoware_core`. ### `core-devel` This stage installs the dependency packages based on `/rosdep-core-depend-packages.txt` and builds the `autoware_core` packages. ### `core` This stage is an Autoware Core runtime container. It only includes the dependencies given by `/rosdep-core-exec-depend-packages.txt` and the binaries built in the `core-devel` stage. ### `universe-common-devel` This stage installs the dependency packages based on `/rosdep-universe-common-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`: - `universe/external` - `universe/autoware_universe/common` - `middleware/external` ### `universe-common-devel-cuda` This stage is built on top of `universe-common-devel` and installs the CUDA development environment. ### `universe-sensing-perception-devel` This stage installs the dependency packages based on `/rosdep-universe-sensing-perception-depend-packages.txt` and builds the non-CUDA related packages under the following directories of `autoware.repos`: - `universe/autoware_universe/perception` - `universe/autoware_universe/sensing` ### `universe-sensing-perception-devel-cuda` This stage copies the non-CUDA related binaries built in the `universe-sensing-perception-devel` stage and builds the CUDA related packages under the following directories of `autoware.repos`: - `universe/autoware_universe/perception` - `universe/autoware_universe/sensing` ### `universe-sensing-perception` This stage is an Autoware Universe Sensing/Perception runtime container. It only includes the dependencies given by `/rosdep-universe-sensing-perception-exec-depend-packages.txt` and the binaries built in the `universe-sensing-perception-devel` stage. ### `universe-sensing-perception-cuda` This stage installs the CUDA runtime environment and copies the binaries built in the `universe-sensing-perception-devel-cuda` stage. ### `universe-visualization-devel` This stage installs the dependency packages based on `/rosdep-universe-visualization-depend-packages.txt` and builds the visualization packages. ### `universe-visualization` This stage is a Autoware Universe Visualization runtime container. It only includes the dependencies given by `/rosdep-universe-visualization-exec-depend-packages.txt` and the binaries built in the `universe-visualization-devel` stage. ### `universe-localization-mapping-devel` This stage installs the dependency packages based on `/rosdep-universe-localization-mapping-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`: - `universe/autoware_universe/localization` - `universe/autoware_universe/map` ### `universe-localization-mapping` This stage is an Autoware Universe Localization/Mapping runtime container. It only includes the dependencies given by `/rosdep-universe-localization-mapping-exec-depend-packages.txt` and the binaries built in the `universe-localization-mapping-devel` stage. ### `universe-planning-control-devel` This stage installs the dependency packages based on `/rosdep-universe-planning-control-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`: - `universe/autoware_universe/control` - `universe/autoware_universe/planning` ### `universe-planning-control` This stage is an 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 builds the packages under the following directories of `autoware.repos`: - `universe/autoware_universe/vehicle` - `universe/autoware_universe/system` ### `universe-vehicle-system` This stage is an 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-api-devel` This stage installs the dependency packages based on `/rosdep-universe-api-depend-packages.txt` and builds the API packages. ### `universe-api` This stage is a Autoware Universe API runtime container. It only includes the dependencies given by `/rosdep-universe-api-exec-depend-packages.txt` and the binaries built in the `universe-api-devel` stage. ### `universe-devel` This stage installs the dependency packages based on `/rosdep-universe-depend-packages.txt` and copies the binaries built in the following stages: - `universe-sensing-perception-devel` - `universe-localization-mapping-devel` - `universe-planning-control-devel` - `universe-vehicle-system-devel` - `universe-visualization-devel` - `universe-api-devel` Then it builds the remaining packages of `autoware.repos`: - `launcher` - `param` - `sensor_component` - `sensor_kit` - `universe/autoware_universe/evaluator` - `universe/autoware_universe/launch` - `universe/autoware_universe/simulator` - `universe/autoware_universe/tools` - `vehicle` This stage provides an all-in-one development container to Autoware developers. By running the host's source code with volume mounting, it allows for easy building and debugging of Autoware. ### `universe-devel-cuda` This stage installs the CUDA development environment and copies the binaries built in the `universe-sensing-perception-devel-cuda` stage to the `universe-devel` stage. ### `universe` This stage is an Autoware Universe runtime container. It only includes the dependencies given by `/rosdep-exec-depend-packages.txt` and the binaries built in the `universe-devel` stage. ### `universe-cuda` This stage installs the CUDA runtime environment and copies the binaries built in the `universe-devel-cuda` stage. ================================================ FILE: docker/build.sh ================================================ #!/usr/bin/env bash set -e # Function to print help message print_help() { echo "Usage: build.sh [OPTIONS]" echo "Options:" echo " --help Display this help message" echo " -h Display this help message" echo " --no-cuda Disable CUDA support" echo " --platform Specify the platform (default: current platform)" echo " --devel-only Build devel image only" echo " --target Specify the target image (default: universe or universe-devel if --devel-only is set)" echo " --ros-distro Specify ROS distribution (humble or jazzy, default: humble)" echo "" echo "Note: The --platform option should be one of 'linux/amd64' or 'linux/arm64'." } SCRIPT_DIR=$(readlink -f "$(dirname "$0")") WORKSPACE_ROOT="$SCRIPT_DIR/.." # Parse arguments parse_arguments() { while [ "$1" != "" ]; do case "$1" in --help | -h) print_help exit 1 ;; --no-cuda) option_no_cuda=true ;; --platform) option_platform="$2" shift ;; --devel-only) option_devel_only=true ;; --target) option_target="$2" shift ;; --ros-distro) option_ros_distro="$2" shift ;; *) echo "Unknown option: $1" print_help exit 1 ;; esac shift done } # Set ROS distribution set_ros_distro() { if [ -n "$option_ros_distro" ]; then ros_distro="$option_ros_distro" else ros_distro="humble" fi } # Set CUDA options set_cuda_options() { if [ "$option_no_cuda" = "true" ]; then setup_args="--no-nvidia" image_name_suffix="" else image_name_suffix="-cuda" fi } # Note: Image tags are loaded from env files (amd64.env or amd64_jazzy.env) # via the load_env() function, which sets $autoware_base_image and $autoware_base_cuda_image # Set build options set_build_options() { if [ -n "$option_target" ]; then target="$option_target" image_name_suffix="" else if [ "$option_devel_only" = "true" ]; then target="universe-devel" else target="universe" fi fi } # Set platform set_platform() { if [ -n "$option_platform" ]; then platform="$option_platform" else platform="linux/amd64" if [ "$(uname -m)" = "aarch64" ]; then platform="linux/arm64" fi fi } # Set arch lib dir set_arch_lib_dir() { if [ "$platform" = "linux/arm64" ]; then lib_dir="aarch64" elif [ "$platform" = "linux/amd64" ]; then lib_dir="x86_64" else echo "Unsupported platform: $platform" exit 1 fi } # Load env load_env() { if [ "$ros_distro" = "humble" ]; then source "$WORKSPACE_ROOT/amd64.env" else source "$WORKSPACE_ROOT/amd64_jazzy.env" fi if [ "$platform" = "linux/arm64" ]; then source "$WORKSPACE_ROOT/arm64.env" fi } # Clone repositories clone_repositories() { cd "$WORKSPACE_ROOT" if [ ! -d "src" ]; then mkdir -p src vcs import src ros2 launch autoware_launch tier4_map_component.launch.xml lanelet2_map_file:=${LANELET2_MAP_FILE} map_path:=/autoware_map pointcloud_map_file:=${POINTCLOUD_MAP_FILE} use_sim_time:=${USE_SIM_TIME} vehicle_model:=${VEHICLE_MODEL} restart: on-failure planning: image: ghcr.io/autowarefoundation/autoware:universe-planning-control container_name: autoware-planning pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} network_mode: host depends_on: - map command: > ros2 launch autoware_launch tier4_planning_component.launch.xml component_wise_launch:=true enable_all_modules_auto_mode:=${ENABLE_ALL_MODULES_AUTO_MODE} is_simulation:=${IS_SIMULATION_MODE} module_preset:=${PLANNING_MODULE_PRESET} pointcloud_container_name:=${POINTCLOUD_CONTAINER_NAME} use_sim_time:=${USE_SIM_TIME} vehicle_model:=${VEHICLE_MODEL} restart: on-failure control: image: ghcr.io/autowarefoundation/autoware:universe-planning-control container_name: autoware-control pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} network_mode: host depends_on: - map - planning - system command: > ros2 launch autoware_launch tier4_control_component.launch.xml check_external_emergency_heartbeat:=${CHECK_EXTERNAL_EMERGENCY_HEARTBEAT} component_wise_launch:=true lateral_controller_mode:=${LATERAL_CONTROLLER_MODE} longitudinal_controller_mode:=${LONGITUDINAL_CONTROLLER_MODE} module_preset:=${CONTROL_MODULE_PRESET} use_sim_time:=${USE_SIM_TIME} vehicle_id:=${VEHICLE_ID} vehicle_model:=${VEHICLE_MODEL} restart: on-failure vehicle: image: ghcr.io/autowarefoundation/autoware:universe-vehicle-system container_name: autoware-vehicle pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} network_mode: host depends_on: - map command: > ros2 launch tier4_vehicle_launch vehicle.launch.xml launch_vehicle_interface:=${LAUNCH_VEHICLE_INTERFACE} raw_vehicle_cmd_converter_param_path:=/opt/autoware/share/autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml sensor_model:=${SENSOR_MODEL} use_sim_time:=${USE_SIM_TIME} vehicle_id:=${VEHICLE_ID} vehicle_model:=${VEHICLE_MODEL} restart: on-failure system: image: ghcr.io/autowarefoundation/autoware:universe-vehicle-system container_name: autoware-system pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} network_mode: host depends_on: - map command: > ros2 launch autoware_launch tier4_system_component.launch.xml launch_system_monitor:=${LAUNCH_SYSTEM_MONITOR} launch_dummy_diag_publisher:=${LAUNCH_DUMMY_DIAG_PUBLISHER} sensor_model:=${SENSOR_MODEL} system_run_mode:=${SYSTEM_RUN_MODE} use_sim_time:=${USE_SIM_TIME} vehicle_model:=${VEHICLE_MODEL} restart: on-failure sensing-perception: image: ${SENSING_PERCEPTION_IMAGE} container_name: autoware-sensing-perception pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} volumes: - ${DATA_PATH}:/autoware_data:rw network_mode: host depends_on: - map - system command: > bash -c " ros2 launch autoware_launch tier4_sensing_component.launch.xml launch_pointcloud_container:=${LAUNCH_POINTCLOUD_CONTAINER_SENSING} launch_sensing_driver:=${LAUNCH_SENSING_DRIVER} pointcloud_container_name:=${POINTCLOUD_CONTAINER_NAME} sensor_model:=${SENSOR_MODEL} use_sim_time:=${USE_SIM_TIME} vehicle_model:=${VEHICLE_MODEL} & ros2 launch autoware_launch tier4_perception_component.launch.xml data_path:=/autoware_data launch_pointcloud_container:=${LAUNCH_POINTCLOUD_CONTAINER_PERCEPTION} lidar_detection_model:=${LIDAR_DETECTION_MODEL} occupancy_grid_map_method:=${OCCUPANCY_GRID_MAP_METHOD} perception_mode:=${PERCEPTION_MODE} pointcloud_container_name:=${POINTCLOUD_CONTAINER_NAME} use_sim_time:=${USE_SIM_TIME} vehicle_model:=${VEHICLE_MODEL} " restart: on-failure profiles: - logging-simulation localization: image: ghcr.io/autowarefoundation/autoware:universe-localization-mapping container_name: autoware-localization pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} network_mode: host depends_on: - map - system - sensing-perception command: > ros2 launch autoware_launch tier4_localization_component.launch.xml system_run_mode:=${SYSTEM_RUN_MODE} use_sim_time:=${USE_SIM_TIME} vehicle_model:=${VEHICLE_MODEL} restart: on-failure profiles: - logging-simulation simulator: image: ghcr.io/autowarefoundation/autoware-tools:scenario-simulator container_name: autoware-simulator pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} network_mode: host depends_on: - map - system - vehicle command: > ros2 launch autoware_launch tier4_simulator_component.launch.xml initial_engage_state:=${INITIAL_ENGAGE_STATE} launch_dummy_doors:=${LAUNCH_DUMMY_DOORS} launch_dummy_perception:=${LAUNCH_DUMMY_PERCEPTION} launch_dummy_vehicle:=${LAUNCH_DUMMY_VEHICLE} launch_scenario_simulator_v2_adapter:=${LAUNCH_SCENARIO_SIMULATOR_V2_ADAPTER} localization_sim_mode:=${LOCALIZATION_SIM_MODE} perception/enable_detection_failure:=${PERCEPTION_ENABLE_DETECTION_FAILURE} perception/enable_object_recognition:=${PERCEPTION_ENABLE_OBJECT_RECOGNITION} perception/enable_traffic_light:=${PERCEPTION_ENABLE_TRAFFIC_LIGHT} perception/use_base_link_z:=${PERCEPTION_USE_BASE_LINK_Z} raw_vehicle_cmd_converter_param_path:=/opt/autoware/share/autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml scenario_simulation:=${SCENARIO_SIMULATION} sensing/visible_range:=${SENSING_VISIBLE_RANGE} use_sim_time:=${USE_SIM_TIME} use_pointcloud_container:=${USE_POINTCLOUD_CONTAINER} vehicle_info_param_file:=/opt/autoware/share/${VEHICLE_MODEL}_description/config/vehicle_info.param.yaml vehicle_model:=${VEHICLE_MODEL} restart: on-failure profiles: - planning-simulation api: image: ghcr.io/autowarefoundation/autoware:universe-api container_name: autoware-api pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} network_mode: host depends_on: - map command: > ros2 launch autoware_launch tier4_autoware_api_component.launch.xml component_wise_launch:=true scenario_simulation:=${SCENARIO_SIMULATION} use_sim_time:=${USE_SIM_TIME} vehicle_model:=${VEHICLE_MODEL} restart: on-failure visualization: image: ghcr.io/autowarefoundation/autoware-tools:visualizer container_name: autoware-visualization pid: service:map ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} - REMOTE_DISPLAY=${REMOTE_DISPLAY} - USE_SIM_TIME=${USE_SIM_TIME} ports: - 6080:6080 network_mode: host restart: "no" profiles: - visualization rosbag: image: ghcr.io/autowarefoundation/autoware:universe container_name: autoware-rosbag ipc: host init: true environment: - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - ROS_DOMAIN_ID=${ROS_DOMAIN_ID} volumes: - ${ROSBAG_PATH}:/autoware_map/rosbag:ro network_mode: host command: > bash -c "ros2 bag info /autoware_map/rosbag -s ${ROSBAG_FORMAT} && ros2 bag play /autoware_map/rosbag -r ${ROSBAG_RATE} -s ${ROSBAG_FORMAT}" restart: "no" profiles: - rosbag ================================================ FILE: docker/etc/.bash_aliases ================================================ #!/bin/bash # planning simulation function download_planning_map() { if [ ! -f ~/autoware_map/sample-map-planning.zip ]; then gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1499_nsbUbIeturZaDj7jhUownh5fvXHd' unzip -d ~/autoware_map ~/autoware_map/sample-map-planning.zip fi } alias awf-launch-planning-sim='download_planning_map&&ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit' # rosbag replay simulation function download_rosbag_map() { if [ ! -f ~/autoware_map/sample-map-rosbag.zip ]; then gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1A-8BvYRX3DhSzkAnOcGWFw5T30xTlwZI' unzip -d ~/autoware_map/ ~/autoware_map/sample-map-rosbag.zip fi } alias awf-launch-sample-rosbag-sim='download_rosbag_artifacts&&download_rosbag_map&&ros2 launch autoware_launch logging_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-rosbag vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit' # play sample rosbag function download_rosbag_file() { if [ ! -f ~/autoware_map/sample-rosbag.zip ]; then gdown -O ~/autoware_map/ 'https://docs.google.com/uc?export=download&id=1VnwJx9tI3kI_cTLzP61ktuAJ1ChgygpG' unzip -d ~/autoware_map/ ~/autoware_map/sample-rosbag.zip fi } alias awf-play-sample-rosbag='download_rosbag_file&&ros2 bag play ~/autoware_map/sample-rosbag/sample.db3 -r 0.35 -s sqlite3' ================================================ FILE: docker/etc/ros_entrypoint.sh ================================================ #!/usr/bin/env bash # shellcheck disable=SC1090,SC1091 # Get the user ID and group ID of the local user USER_ID=${LOCAL_UID} USER_NAME=${LOCAL_USER} GROUP_ID=${LOCAL_GID} GROUP_NAME=${LOCAL_GROUP} # Check if any of the variables are empty if [[ -z $USER_ID || -z $USER_NAME || -z $GROUP_ID || -z $GROUP_NAME ]]; then source "/opt/ros/$ROS_DISTRO/setup.bash" source /opt/autoware/setup.bash exec "$@" else echo "Starting with user: $USER_NAME >> UID $USER_ID, GID: $GROUP_ID" # Create group and user with GID/UID groupadd -g "$GROUP_ID" "$GROUP_NAME" useradd -u "$USER_ID" -g "$GROUP_ID" -s /bin/bash -m -d /home/"$USER_NAME" "$USER_NAME" # Add sudo privileges to the user echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers # Source ROS 2 # hadolint ignore=SC1090 source "/opt/ros/$ROS_DISTRO/setup.bash" source /opt/autoware/setup.bash # Add symlink for autoware_data if directory exists if [ -d /autoware_data ]; then ln -s /autoware_data /home/"$USER_NAME"/autoware_data echo "Linked /autoware_data to /home/$USER_NAME/autoware_data" fi # Execute the command as the user exec /usr/sbin/gosu "$USER_NAME" "$@" fi ================================================ FILE: docker/logging-simulation.env ================================================ # ROS settings ROS_DOMAIN_ID=1 USE_SIM_TIME=true # Common settings POINTCLOUD_CONTAINER_NAME=pointcloud_container SCENARIO_SIMULATION=false SENSOR_MODEL=sample_sensor_kit VEHICLE_ID=default VEHICLE_MODEL=sample_vehicle # Map settings LANELET2_MAP_FILE=lanelet2_map.osm MAP_PATH=$HOME/autoware_map/sample-map-rosbag POINTCLOUD_MAP_FILE=pointcloud_map.pcd # Planning settings ENABLE_ALL_MODULES_AUTO_MODE=false IS_SIMULATION_MODE=true PLANNING_MODULE_PRESET=default # Control settings CHECK_EXTERNAL_EMERGENCY_HEARTBEAT=false CONTROL_MODULE_PRESET=default LATERAL_CONTROLLER_MODE=mpc LONGITUDINAL_CONTROLLER_MODE=pid # Vehicle interface LAUNCH_VEHICLE_INTERFACE=false # System settings SYSTEM_RUN_MODE=logging_simulation LAUNCH_SYSTEM_MONITOR=false LAUNCH_DUMMY_DIAG_PUBLISHER=false # Sensing settings LAUNCH_POINTCLOUD_CONTAINER_SENSING=true LAUNCH_SENSING_DRIVER=false # Perception settings SENSING_PERCEPTION_IMAGE=ghcr.io/autowarefoundation/autoware:universe-sensing-perception DATA_PATH=$HOME/autoware_data LAUNCH_POINTCLOUD_CONTAINER_PERCEPTION=false LIDAR_DETECTION_MODEL=clustering OCCUPANCY_GRID_MAP_METHOD=laserscan_based PERCEPTION_MODE=lidar # Simulator settings INITIAL_ENGAGE_STATE=false LAUNCH_DUMMY_DOORS=false LAUNCH_DUMMY_PERCEPTION=false LAUNCH_DUMMY_VEHICLE=false LAUNCH_SCENARIO_SIMULATOR_V2_ADAPTER=false LOCALIZATION_SIM_MODE=none PERCEPTION_ENABLE_DETECTION_FAILURE=false PERCEPTION_ENABLE_OBJECT_RECOGNITION=true PERCEPTION_ENABLE_TRAFFIC_LIGHT=true PERCEPTION_USE_BASE_LINK_Z=false SENSING_VISIBLE_RANGE=300.0 USE_POINTCLOUD_CONTAINER=true # Visualization settings REMOTE_DISPLAY=true RVIZ_CONFIG=/opt/autoware/share/autoware_launch/rviz/autoware.rviz # Rosbag settings ROSBAG_PATH=$HOME/autoware_map/sample-rosbag ROSBAG_RATE=0.2 ROSBAG_FORMAT=sqlite3 ================================================ FILE: docker/logging-simulation.gpu.env ================================================ # Perception settings SENSING_PERCEPTION_IMAGE=ghcr.io/autowarefoundation/autoware:universe-sensing-perception-cuda LIDAR_DETECTION_MODEL=centerpoint # TODO(mitsudome-r): used pointcloud based occupancy grid once we merge # https://github.com/autowarefoundation/autoware/pull/6382 # OCCUPANCY_GRID_MAP_METHOD=pointcloud_based ================================================ FILE: docker/planning-simulation.env ================================================ # ROS settings ROS_DOMAIN_ID=1 USE_SIM_TIME=false # Common settings POINTCLOUD_CONTAINER_NAME=pointcloud_container SCENARIO_SIMULATION=false SENSOR_MODEL=sample_sensor_kit VEHICLE_ID=default VEHICLE_MODEL=sample_vehicle # Map settings LANELET2_MAP_FILE=lanelet2_map.osm MAP_PATH=$HOME/autoware_map/sample-map-planning POINTCLOUD_MAP_FILE=pointcloud_map.pcd # Planning settings ENABLE_ALL_MODULES_AUTO_MODE=false IS_SIMULATION_MODE=true PLANNING_MODULE_PRESET=default # Control settings CHECK_EXTERNAL_EMERGENCY_HEARTBEAT=false CONTROL_MODULE_PRESET=default LATERAL_CONTROLLER_MODE=mpc LONGITUDINAL_CONTROLLER_MODE=pid # Vehicle interface LAUNCH_VEHICLE_INTERFACE=true # System settings SYSTEM_RUN_MODE=planning_simulation LAUNCH_SYSTEM_MONITOR=false LAUNCH_DUMMY_DIAG_PUBLISHER=true # Sensing settings LAUNCH_POINTCLOUD_CONTAINER_SENSING=false LAUNCH_SENSING_DRIVER=false # Perception settings DATA_PATH=$HOME/autoware_data LAUNCH_POINTCLOUD_CONTAINER_PERCEPTION=false LIDAR_DETECTION_MODEL=clustering PERCEPTION_MODE=lidar # Simulator settings INITIAL_ENGAGE_STATE=true LAUNCH_DUMMY_DOORS=true LAUNCH_DUMMY_PERCEPTION=true LAUNCH_DUMMY_VEHICLE=true LAUNCH_SCENARIO_SIMULATOR_V2_ADAPTER=false LOCALIZATION_SIM_MODE=api PERCEPTION_ENABLE_DETECTION_FAILURE=true PERCEPTION_ENABLE_OBJECT_RECOGNITION=true PERCEPTION_ENABLE_TRAFFIC_LIGHT=false PERCEPTION_USE_BASE_LINK_Z=true SENSING_VISIBLE_RANGE=300.0 USE_POINTCLOUD_CONTAINER=false # Visualization settings REMOTE_DISPLAY=true RVIZ_CONFIG=/opt/autoware/share/autoware_launch/rviz/autoware.rviz # Rosbag settings ROSBAG_PATH=$HOME/autoware_map/sample-rosbag ROSBAG_RATE=1.0 ROSBAG_FORMAT=sqlite3 ================================================ FILE: docker/run.sh ================================================ #!/usr/bin/env bash # shellcheck disable=SC2086,SC2124 set -e # Define terminal colors RED='\033[0;31m' GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' # No Color SCRIPT_DIR=$(readlink -f "$(dirname "$0")") WORKSPACE_ROOT="$SCRIPT_DIR/.." # Determine ROS distro from environment or default to humble ros_distro=${ROS_DISTRO:-humble} if [ "$ros_distro" = "humble" ]; then source "$WORKSPACE_ROOT/amd64.env" else source "$WORKSPACE_ROOT/amd64_jazzy.env" fi if [ "$(uname -m)" = "aarch64" ]; then source "$WORKSPACE_ROOT/arm64.env" fi # Default values option_no_nvidia=false option_devel=false option_headless=false option_pull_latest_image=false MAP_PATH="" DATA_PATH="" WORKSPACE_PATH="" USER_ID="" WORKSPACE="" DEFAULT_LAUNCH_CMD="ros2 launch autoware_launch autoware.launch.xml map_path:=/autoware_map vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit" # Function to print help message print_help() { echo -e "\n------------------------------------------------------------" echo -e "${RED}Note:${NC} The --map-path option is mandatory for the runtime. For development environment with shell access, use --devel option." echo -e " Default launch command: ${GREEN}${DEFAULT_LAUNCH_CMD}${NC}" echo -e "------------------------------------------------------------" echo -e "${RED}Usage:${NC} run.sh [OPTIONS] [LAUNCH_CMD](optional)" echo -e "Options:" echo -e " ${GREEN}--help/-h${NC} Display this help message" echo -e " ${GREEN}--map-path${NC} Specify to mount map files into /autoware_map (mandatory for runtime)" echo -e " ${GREEN}--data-path${NC} Specify to mount data files into /autoware_data (mandatory for runtime)" echo -e " ${GREEN}--devel${NC} Launch the latest Autoware development environment with shell access" echo -e " ${GREEN}--workspace${NC} (--devel only)Specify the directory to mount into /workspace, by default it uses current directory (pwd)" echo -e " ${GREEN}--no-nvidia${NC} Disable NVIDIA GPU support" echo -e " ${GREEN}--headless${NC} Run Autoware in headless mode (default: false)" echo -e " ${GREEN}--pull-latest-image${NC} Pull the latest image before starting the container" echo "" } # Parse arguments parse_arguments() { while [ "$1" != "" ]; do case "$1" in --help | -h) print_help exit 1 ;; --no-nvidia) option_no_nvidia=true ;; --devel) option_devel=true ;; --headless) option_headless=true ;; --pull-latest-image) option_pull_latest_image=true ;; --workspace) WORKSPACE_PATH="$2" shift ;; --map-path) MAP_PATH="$2" shift ;; --data-path) DATA_PATH="$2" shift ;; --*) echo "Unknown option: $1" print_help exit 1 ;; -*) echo "Unknown option: $1" print_help exit 1 ;; *) LAUNCH_CMD="$@" break ;; esac shift done } # Set the docker image and workspace variables set_variables() { # Set user ID and group ID to match the local user USER_ID="-e LOCAL_UID=$(id -u) -e LOCAL_GID=$(id -g) -e LOCAL_USER=$(id -un) -e LOCAL_GROUP=$(id -gn)" # Set map path if [ "$MAP_PATH" != "" ]; then MAP="-v ${MAP_PATH}:/autoware_map:ro" fi # Set data path if [ "$DATA_PATH" != "" ]; then DATA="-v ${DATA_PATH}:/autoware_data:rw" fi if [ "$option_devel" = "true" ]; then # Set image based on option IMAGE="ghcr.io/autowarefoundation/autoware:universe-devel" # Set workspace path, if not provided use the current directory if [ "$WORKSPACE_PATH" = "" ]; then WORKSPACE_PATH=$(pwd) fi WORKSPACE="-v ${WORKSPACE_PATH}:/workspace" # Set launch command if [ "$LAUNCH_CMD" = "" ]; then LAUNCH_CMD="/bin/bash" fi else # Set image based on option IMAGE="ghcr.io/autowarefoundation/autoware:universe" # Set map path if [ "$MAP_PATH" = "" ] || [ "$DATA_PATH" = "" ]; then echo -e "\n------------------------------------------------------------" echo -e "${RED}Note:${NC} The --map-path and --data-path option is mandatory for the universe(runtime image). For development environment with shell access, use --devel option." echo -e "------------------------------------------------------------" exit 1 fi # Set default launch command if not provided if [ "$LAUNCH_CMD" = "" ]; then LAUNCH_CMD=${DEFAULT_LAUNCH_CMD} fi fi } # Set GPU flag based on option set_gpu_flag() { if [ "$option_no_nvidia" = "true" ]; then GPU_FLAG="" else GPU_FLAG="--gpus all" IMAGE=${IMAGE}-cuda fi } # Set X display variables set_x_display() { MOUNT_X="" if [ "$option_headless" = "false" ]; then MOUNT_X="-e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix" xhost + >/dev/null fi } # Main script execution main() { # Parse arguments parse_arguments "$@" set_variables set_gpu_flag set_x_display if [ "$option_devel" = "true" ]; then echo -e "${GREEN}-----------------------------------------------------------------${NC}" echo -e "${BLUE}Launching Autoware development environment${NC}" else echo -e "${GREEN}-----------------------------------------------------------------${NC}" echo -e "${GREEN}Launching Autoware${NC}" fi echo -e "${GREEN}IMAGE:${NC} ${IMAGE}" if [ "$option_devel" = "true" ]; then echo -e "${GREEN}WORKSPACE PATH(mounted):${NC} ${WORKSPACE_PATH}:/workspace" fi if [ "$MAP_PATH" != "" ]; then echo -e "${GREEN}MAP PATH(mounted):${NC} ${MAP_PATH}:/autoware_map" fi echo -e "${GREEN}LAUNCH CMD:${NC} ${LAUNCH_CMD}" echo -e "${GREEN}-----------------------------------------------------------------${NC}" if [ "$option_pull_latest_image" = "true" ]; then docker pull ${IMAGE} fi # Launch the container set -x docker run -it --rm --net=host ${GPU_FLAG} ${USER_ID} ${MOUNT_X} \ -e XAUTHORITY=${XAUTHORITY} -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR -e NVIDIA_DRIVER_CAPABILITIES=all -e TZ="$(cat /etc/timezone)" \ ${WORKSPACE} ${MAP} ${DATA} ${IMAGE} \ ${LAUNCH_CMD} } # Execute the main script main "$@" ================================================ FILE: docker/scripts/build_and_clean.sh ================================================ #!/bin/bash set -eo pipefail function build_and_clean() { local ccache_dir=$1 local install_base=$2 local colcon_build_args=$3 # shellcheck disable=SC2086 du -sh "$ccache_dir" && ccache -s && colcon build --cmake-args \ " -Wno-dev" \ " --no-warn-unused-cli" \ --merge-install \ --install-base "$install_base" \ --mixin release compile-commands ccache \ $colcon_build_args && du -sh "$ccache_dir" && ccache -s && rm -rf /autoware/build /autoware/log } build_and_clean "$@" ================================================ FILE: docker/scripts/cleanup_apt.sh ================================================ #!/bin/bash set -eo pipefail function cleanup_apt() { local apt_clean=$1 apt-get autoremove -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache if [[ $apt_clean == true ]]; then apt-get clean fi } cleanup_apt "$@" ================================================ FILE: docker/scripts/cleanup_system.sh ================================================ #!/bin/bash set -eo pipefail function cleanup_system() { local lib_dir=$1 local ros_distro=$2 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 /opt/autoware/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* } ./cleanup_apt.sh cleanup_system "$@" ================================================ FILE: docker/scripts/resolve_rosdep_keys.sh ================================================ #!/bin/bash set -eo pipefail function resolve_rosdep_keys() { local src_path=$1 local ros_distro=$2 local rosdep_keys_args=$3 # shellcheck disable=SC2086 rosdep keys $rosdep_keys_args --ignore-src --from-paths "$src_path" | xargs rosdep resolve --rosdistro "$ros_distro" | grep -v '^#' | sed 's/ \+/\n/g' | sort } resolve_rosdep_keys "$@" ================================================ FILE: docker/tools/README.md ================================================ # Autoware Tools This directory offers container-based tools for Autoware to make development and deployment easier. - [scenario-simulator](./scenario-simulator/README.md): Simulation container for Autoware scenario testing. - [visualizer](./visualizer/README.md): RViz-based visualization container for Autoware. ================================================ FILE: docker/tools/docker-bake.hcl ================================================ group "default" { targets = [ "visualizer", "scenario-simulator", ] } // For docker/metadata-action target "docker-metadata-action-visualizer" {} target "docker-metadata-action-scenario-simulator" {} target "visualizer" { inherits = ["docker-metadata-action-visualizer"] dockerfile = "docker/tools/visualizer/Dockerfile" target = "visualizer" } target "scenario-simulator" { inherits = ["docker-metadata-action-scenario-simulator"] dockerfile = "docker/tools/scenario-simulator/Dockerfile" target = "scenario-simulator" } ================================================ FILE: docker/tools/scenario-simulator/Dockerfile ================================================ ### Builder FROM ghcr.io/autowarefoundation/autoware:universe-devel AS builder SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" COPY src/simulator /autoware/src/simulator COPY docker/scripts/ /autoware/ RUN chmod +x /autoware/*.sh WORKDIR /autoware # Extract rosdep dependencies for simulator # hadolint ignore=SC1091 RUN source /opt/autoware/setup.bash \ && /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} --dependency-types=exec \ > /rosdep-simulator-exec-depend-packages.txt \ && cat /rosdep-simulator-exec-depend-packages.txt # Install dependencies and build the scenario simulator # hadolint ignore=SC1091 RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ && source /opt/autoware/setup.bash \ && rosdep update && rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO \ && /autoware/cleanup_apt.sh # Build the scenario simulator # hadolint ignore=SC1091 RUN --mount=type=cache,target=${CCACHE_DIR} \ source /opt/autoware/setup.bash \ && /autoware/build_and_clean.sh ${CCACHE_DIR} /opt/autoware \ && find /opt/autoware/lib -type f -name "*.py" -exec chmod +x {} \; \ && find /opt/autoware/share -type f -name "*.py" -exec chmod +x {} \; ### Scenario Simulator FROM ghcr.io/autowarefoundation/autoware:universe AS scenario-simulator SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR COPY --from=builder /opt/autoware /opt/autoware COPY --from=builder /rosdep-simulator-exec-depend-packages.txt /tmp/rosdep-simulator-exec-depend-packages.txt # hadolint ignore=SC2002 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get update \ # Remove xmlschema and yamale from rosdep packages since we install via pip && sed -i '/\(xmlschema\|yamale\)/d' /tmp/rosdep-simulator-exec-depend-packages.txt \ && pip3 install --no-cache-dir yamale \ && pip3 install --no-cache-dir xmlschema==3.4.5 \ && cat /tmp/rosdep-simulator-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO COPY docker/tools/scenario-simulator/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] ================================================ FILE: docker/tools/scenario-simulator/README.md ================================================ # Autoware Tools - Scenario Simulator Runs Scenario Simulator in a container. ## Standalone Run ```bash docker run --rm --name scenario-simulator ghcr.io/autowarefoundation/autoware-tools:scenario-simulator ``` ## Settings The following environment variables can be passed to the `scenario-simulator` container: | Variable | Default Value | Possible Values | Description | | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | `SCENARIO` | [`scenario_test_runner/scenario/sample.yaml`](https://github.com/tier4/scenario_simulator_v2/blob/master/test_runner/scenario_test_runner/scenario/sample.yaml) | Any valid path | The full path to the scenario file inside the container | | `ARCHITECTURE_TYPE` | `awf/universe/20240605` | Any valid architecture type | The architecture type to use for the scenario simulation | | `SENSOR_MODEL` | `sample_sensor_kit` | Any valid sensor model | The sensor model to use for the scenario simulation | | `VEHICLE_MODEL` | `sample_vehicle` | Any valid vehicle model | The vehicle model to use for the scenario simulation | | `LAUNCH_AUTOWARE` | `false` | `true`, `false` | Set to `true` to launch Autoware for standalone scenario simulation. By default, the scenario simulator expects an Autoware running. | | `LAUNCH_RVIZ` | `true` | `true`, `false` | Set to `true` to launch RViz for the scenario simulation | | `INITIALIZE_DURATION` | `90` | Any positive integer | The duration to initialize the scenario simulation | | `GLOBAL_FRAME_RATE` | `30` | Any positive integer | The frame rate of the scenario simulation | | `GLOBAL_TIMEOUT` | `120` | Any positive integer | The timeout of the scenario simulation | | `OUTPUT_DIRECTORY` | `/autoware/scenario-sim/output` | Any valid path | The directory to save the simulation results | | `USE_SIM_TIME` | `false` | `true`, `false` | Whether to use simulation time instead of system time | | `RECORD` | `false` | `true`, `false` | Whether to record the scenario simulation rosbag | ================================================ FILE: docker/tools/scenario-simulator/entrypoint.sh ================================================ #!/usr/bin/env bash # cspell:ignore # shellcheck disable=SC1090,SC1091 run_scenario_simulator() { echo -e "\e[32mRunning scenario simulator...\e[0m" # Prompt if no scenario is provided if [ -z "$SCENARIO" ]; then echo -e "\e[33mNo scenario provided, using default sample scenario...\e[0m" fi # Set default values if not provided LAUNCH_AUTOWARE=${LAUNCH_AUTOWARE:-false} LAUNCH_RVIZ=${LAUNCH_RVIZ:-false} ARCHITECTURE_TYPE=${ARCHITECTURE_TYPE:-awf/universe/20240605} SENSOR_MODEL=${SENSOR_MODEL:-sample_sensor_kit} VEHICLE_MODEL=${VEHICLE_MODEL:-sample_vehicle} INITIALIZE_DURATION=${INITIALIZE_DURATION:-90} GLOBAL_FRAME_RATE=${GLOBAL_FRAME_RATE:-30} OUTPUT_DIRECTORY=${OUTPUT_DIRECTORY:-/autoware/scenario-sim/output} SCENARIO=${SCENARIO:-$(ros2 pkg prefix --share scenario_test_runner)/scenario/sample.yaml} GLOBAL_TIMEOUT=${GLOBAL_TIMEOUT:-120} RECORD=${RECORD:-false} USE_SIM_TIME=${USE_SIM_TIME:-false} # Print all variables echo "LAUNCH_AUTOWARE: $LAUNCH_AUTOWARE" echo "LAUNCH_RVIZ: $LAUNCH_RVIZ" echo "ARCHITECTURE_TYPE: $ARCHITECTURE_TYPE" echo "SENSOR_MODEL: $SENSOR_MODEL" echo "VEHICLE_MODEL: $VEHICLE_MODEL" echo "INITIALIZE_DURATION: $INITIALIZE_DURATION" echo "GLOBAL_FRAME_RATE: $GLOBAL_FRAME_RATE" echo "OUTPUT_DIRECTORY: $OUTPUT_DIRECTORY" echo "SCENARIO: $SCENARIO" echo "GLOBAL_TIMEOUT: $GLOBAL_TIMEOUT" echo "RECORD: $RECORD" echo "USE_SIM_TIME: $USE_SIM_TIME" # Launch scenario test runner ros2 launch scenario_test_runner scenario_test_runner.launch.py \ launch_autoware:="$LAUNCH_AUTOWARE" \ launch_rviz:="$LAUNCH_RVIZ" \ architecture_type:="$ARCHITECTURE_TYPE" \ sensor_model:="$SENSOR_MODEL" \ vehicle_model:="$VEHICLE_MODEL" \ initialize_duration:="$INITIALIZE_DURATION" \ global_frame_rate:="$GLOBAL_FRAME_RATE" \ output_directory:="$OUTPUT_DIRECTORY" \ scenario:="$SCENARIO" \ global_timeout:="$GLOBAL_TIMEOUT" \ record:="$RECORD" \ use_sim_time:="$USE_SIM_TIME" } # Source ROS and Autoware setup files source "/opt/ros/$ROS_DISTRO/setup.bash" source "/opt/autoware/setup.bash" # Execute passed command if provided, otherwise run scenario simulator if [ $# -gt 0 ]; then exec "$@" else run_scenario_simulator fi ================================================ FILE: docker/tools/visualizer/Dockerfile ================================================ # cspell:ignore openbox, VNC, tigervnc, novnc, websockify, newkey, xstartup, keyout FROM ghcr.io/autowarefoundation/autoware:universe AS universe SHELL ["/bin/bash", "-o", "pipefail", "-c"] # Extract RViz configs for visualizer # hadolint ignore=SC1091 RUN source /opt/autoware/setup.bash \ && RVIZ_PATH="$(ros2 pkg prefix --share autoware_launch)/rviz" \ && cp -r "$RVIZ_PATH" /autoware/rviz ### visualizer FROM ghcr.io/autowarefoundation/autoware:universe-visualization AS visualizer SHELL ["/bin/bash", "-o", "pipefail", "-c"] ARG ROS_DISTRO ARG LIB_DIR COPY --from=universe /autoware/rviz /autoware/rviz WORKDIR /autoware # Install openbox, VNC, and simulator dependencies # hadolint ignore=SC2002 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ curl \ unzip \ openbox \ tigervnc-standalone-server \ tigervnc-common \ tigervnc-tools \ novnc \ websockify \ python3-numpy \ python3-xdg \ && pip install --no-cache-dir yamale xmlschema \ && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO # Create SSL certificate for NoVNC RUN openssl req -x509 -nodes -newkey rsa:2048 \ -keyout /etc/ssl/private/novnc.key \ -out /etc/ssl/certs/novnc.crt \ -days 365 \ -subj "/O=Autoware-OpenADKit/CN=localhost" # Need to expose VNC and NoVNC ports when running the container EXPOSE 5900 6080 # Add source commands to bash startup RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> /root/.bashrc && \ echo "source /opt/autoware/setup.bash" >> /root/.bashrc # Copy startup scripts COPY docker/tools/visualizer/xstartup /root/.vnc/xstartup COPY docker/tools/visualizer/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh && chmod +x /root/.vnc/xstartup ENTRYPOINT ["/entrypoint.sh"] ================================================ FILE: docker/tools/visualizer/README.md ================================================ # Autoware Tools - Visualizer Opens a remote RViz display for Autoware. ## Standalone Run ```bash docker run --rm --name visualizer -p 6080:6080 ghcr.io/autowarefoundation/autoware-tools:visualizer ``` ## Settings The following environment variables can be configured with `-e` while launching the visualizer container: | Variable | Default Value | Possible Values | Description | | ----------------- | ------------------------------ | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `RVIZ_CONFIG` | `/autoware/rviz/autoware.rviz` | Any valid path | The full path to the RViz configuration file inside the container | | `REMOTE_DISPLAY` | `true` | `true`, `false` | **(Recommended)** Lightweight and browser-based RViz display, accessible from any device. Set this to `false` to launch a local rviz2 display. | | `REMOTE_PASSWORD` | `openadkit` | Any string without special characters | Password for remote display (only used when `REMOTE_DISPLAY=true`) | ================================================ FILE: docker/tools/visualizer/entrypoint.sh ================================================ #!/usr/bin/env bash # cspell:ignore openbox, VNC, tigervnc, novnc, websockify, newkey, xstartup, pixelformat, AUTHTOKEN, authtoken, vncserver, autoconnect, vncpasswd # shellcheck disable=SC1090,SC1091 # Check if RVIZ_CONFIG is provided if [ -z "$RVIZ_CONFIG" ]; then echo -e "\e[31mRVIZ_CONFIG is not set defaulting to /autoware/rviz/autoware.rviz\e[0m" RVIZ_CONFIG="/autoware/rviz/autoware.rviz" export RVIZ_CONFIG fi if [ -z "$USE_SIM_TIME" ]; then echo -e "\e[31mUSE_SIM_TIME is not set defaulting to false\e[0m" USE_SIM_TIME="false" export USE_SIM_TIME fi configure_vnc() { # Create Openbox application configuration mkdir -p /etc/xdg/openbox cat >/etc/xdg/openbox/rc.xml <<'EOF' yes center center yes 1 EOF # Create rviz2 start script cat >/usr/local/bin/start-rviz2.sh <<'EOF' #!/bin/bash source /opt/ros/"$ROS_DISTRO"/setup.bash source /opt/autoware/setup.bash exec rviz2 -d "$RVIZ_CONFIG" --ros-args -p use_sim_time:="$USE_SIM_TIME" EOF chmod +x /usr/local/bin/start-rviz2.sh echo "echo 'Autostart executed at $(date)' >> /tmp/autostart.log" >>/etc/xdg/openbox/autostart echo "/usr/local/bin/start-rviz2.sh" >>/etc/xdg/openbox/autostart # Configure VNC password if [ -z "$REMOTE_PASSWORD" ]; then echo -e "\e[31mREMOTE_PASSWORD is not set, using *openadkit* as default\e[0m" REMOTE_PASSWORD="openadkit" fi mkdir -p ~/.vnc echo "$REMOTE_PASSWORD" | vncpasswd -f >~/.vnc/passwd && chmod 600 ~/.vnc/passwd # Start VNC server with Openbox echo "Starting VNC server with Openbox..." vncserver :99 -geometry 1024x768 -depth 16 -pixelformat rgb565 VNC_RESULT=$? if [ $VNC_RESULT -ne 0 ]; then echo "Failed to start VNC server (exit code: $VNC_RESULT)" exit $VNC_RESULT fi # Set the DISPLAY variable to match VNC server echo "Setting DISPLAY to :99" echo "export DISPLAY=:99" >>~/.bashrc sleep 2 # Start NoVNC echo "Starting NoVNC..." websockify --daemon --web=/usr/share/novnc/ --cert=/etc/ssl/certs/novnc.crt --key=/etc/ssl/private/novnc.key 6080 localhost:5999 # Print info echo -e "\033[32m-------------------------------------------------------------------------\033[0m" echo -e "\033[32mBrowser interface available at local address http://$(hostname -I | cut -d' ' -f1):6080/vnc.html?resize=scale&password=${REMOTE_PASSWORD}&autoconnect=true\033[0m" if curl -s --head 1.1.1.1 >/dev/null 2>&1; then echo -e "\033[32mIf you have a static public ip you can access it on WEB at http://$(curl -s ifconfig.me):6080/vnc.html?resize=scale&password=${REMOTE_PASSWORD}&autoconnect=true\033[0m" else echo -e "\033[31mNo internet connection available\033[0m" fi echo -e "\033[32m-------------------------------------------------------------------------\033[0m" } # Source ROS and Autoware setup files source "/opt/ros/$ROS_DISTRO/setup.bash" source "/opt/autoware/setup.bash" # Execute passed command if provided, otherwise launch rviz2 if [ "$REMOTE_DISPLAY" == "false" ]; then [ $# -eq 0 ] && rviz2 -d "$RVIZ_CONFIG" --ros-args -p use_sim_time:="$USE_SIM_TIME" exec "$@" else configure_vnc [ $# -eq 0 ] && sleep infinity exec "$@" fi ================================================ FILE: docker/tools/visualizer/xstartup ================================================ #!/bin/sh # cspell:ignore openbox, VNC, xstartup, DBUS, Xresources, xrdb unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS export DISPLAY=:99 [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r "$HOME/.Xresources" ] && xrdb "$HOME/.Xresources" # Start Openbox window manager echo "Starting Openbox window manager..." openbox-session & # Keep the session alive sleep infinity ================================================ FILE: repositories/autoware-nightly.repos ================================================ repositories: core/autoware_adapi_msgs: type: git url: https://github.com/autowarefoundation/autoware_adapi_msgs.git version: main core/autoware_internal_msgs: type: git url: https://github.com/autowarefoundation/autoware_internal_msgs.git version: main core/autoware_core: type: git url: https://github.com/autowarefoundation/autoware_core.git version: main core/autoware_utils: # TODO(mitsudome-r): Remove this repository entry when https://github.com/autowarefoundation/autoware/pull/5700 is merged. type: git url: https://github.com/autowarefoundation/autoware_utils.git version: main core/autoware_rviz_plugins: type: git url: https://github.com/autowarefoundation/autoware_rviz_plugins.git version: main universe/autoware_universe: type: git url: https://github.com/autowarefoundation/autoware_universe.git version: main universe/external/managed_transform_buffer: type: git url: https://github.com/autowarefoundation/managed_transform_buffer.git version: main universe/external/tier4_autoware_msgs: type: git url: https://github.com/tier4/tier4_autoware_msgs.git version: tier4/universe launcher/autoware_launch: type: git url: https://github.com/autowarefoundation/autoware_launch.git version: main ================================================ FILE: repositories/autoware.repos ================================================ repositories: # core core/autoware_msgs: type: git url: https://github.com/autowarefoundation/autoware_msgs.git version: 1.11.0 core/autoware_adapi_msgs: type: git url: https://github.com/autowarefoundation/autoware_adapi_msgs.git version: 1.9.1 core/autoware_internal_msgs: type: git url: https://github.com/autowarefoundation/autoware_internal_msgs.git version: 1.12.1 core/autoware_cmake: type: git url: https://github.com/autowarefoundation/autoware_cmake.git version: 1.1.0 core/autoware_utils: type: git url: https://github.com/autowarefoundation/autoware_utils.git version: 1.7.1 core/autoware_lanelet2_extension: type: git url: https://github.com/autowarefoundation/autoware_lanelet2_extension.git version: 0.12.0 core/autoware_core: type: git url: https://github.com/autowarefoundation/autoware_core.git version: 1.7.2 core/autoware_rviz_plugins: type: git url: https://github.com/autowarefoundation/autoware_rviz_plugins.git version: 0.4.0 # universe universe/autoware_universe: type: git url: https://github.com/autowarefoundation/autoware_universe.git version: 0.50.2 universe/external/tier4_autoware_msgs: type: git url: https://github.com/tier4/tier4_autoware_msgs.git version: v0.58.0 # Fix the version not to merge https://github.com/MORAI-Autonomous/MORAI-ROS2_morai_msgs/pull/9 universe/external/morai_msgs: type: git url: https://github.com/MORAI-Autonomous/MORAI-ROS2_morai_msgs.git version: e2e75fc1603a9798773e467a679edf68b448e705 universe/external/muSSP: type: git url: https://github.com/tier4/muSSP.git version: c79e98fd5e658f4f90c06d93472faa977bc873b9 universe/external/pointcloud_to_laserscan: type: git url: https://github.com/tier4/pointcloud_to_laserscan.git version: d969ec699f84fad827fbadfa3001c9c657482fbe universe/external/eagleye: type: git url: https://github.com/MapIV/eagleye.git version: 575136ebba99892946d36d8398f228aee2136af0 universe/external/rtklib_ros_bridge: type: git url: https://github.com/MapIV/rtklib_ros_bridge.git version: ef094407bba4f475a8032972e0c60cbb939b51b8 universe/external/llh_converter: type: git url: https://github.com/MapIV/llh_converter.git version: 4fc2a2e1bc9dcf3e6ab0a8085d8257168e160342 universe/external/glog: # TODO(Horibe): to use isGoogleInitialized() API in v0.6.0. Remove when the rosdep glog version is updated to v0.6.0 (already updated in Ubuntu 24.04) type: git url: https://github.com/tier4/glog.git version: ea36766fdc2ac8e8c8e3ac988ae69acd6d09bb30 universe/external/bevdet_vendor: # TODO: wrap the original bevdet-tensorrt-cpp source code as a vendor package and provide it to autoware_tensorrt_bevdet package type: git url: https://github.com/autowarefoundation/bevdet_vendor.git version: 0.1.0 universe/external/trt_batched_nms: type: git url: https://github.com/autowarefoundation/trt_batched_nms.git version: 0.1.0 universe/external/cuda_blackboard: type: git url: https://github.com/autowarefoundation/cuda_blackboard.git version: 0.3.0 universe/external/negotiated: type: git url: https://github.com/osrf/negotiated.git version: eac198b55dcd052af5988f0f174902913c5f20e7 universe/external/managed_transform_buffer: type: git url: https://github.com/autowarefoundation/managed_transform_buffer.git version: 0.2.0 # launcher launcher/autoware_launch: type: git url: https://github.com/autowarefoundation/autoware_launch.git version: 0.50.0 # sensor_component sensor_component/external/sensor_component_description: type: git url: https://github.com/tier4/sensor_component_description.git version: 03ba094851ec90febfcfc0adb20b64b0e19df7a8 sensor_component/external/nebula: type: git url: https://github.com/tier4/nebula.git version: v0.3.2.2 sensor_component/external/sync_tooling_msgs: type: git url: https://github.com/tier4/sync_tooling_msgs.git version: 0.2.6 # Fork of transport_drivers that enables reduction of copy operations sensor_component/transport_drivers: type: git url: https://github.com/autowarefoundation/transport_drivers version: 39ebd8afe1bb9760a6cd6272e428468480f6de90 # Continental compatible version of ROS 2 socket CAN sensor_component/ros2_socketcan: type: git url: https://github.com/autowarefoundation/ros2_socketcan version: e39a814180b03f00a5692b6951a5d4e9f0463486 # middleware # TODO(TIER IV): During the transition period of Agnocast introduction, # the Agnocast ROS packages are provided as a source build. # Once the transition stabilizes, use the packages released from the official ROS repository. # Issue: https://github.com/autowarefoundation/autoware/issues/5968 middleware/external/agnocast: type: git url: https://github.com/tier4/agnocast.git version: 2.3.1 ================================================ FILE: repositories/extra-packages.repos ================================================ repositories: sensor_component/external/tamagawa_imu_driver: type: git url: https://github.com/tier4/tamagawa_imu_driver.git version: ros2 vehicle/external/pacmod_interface: type: git url: https://github.com/tier4/pacmod_interface.git version: main ================================================ FILE: repositories/simulator-nightly.repos ================================================ repositories: ================================================ FILE: repositories/simulator.repos ================================================ repositories: simulator/scenario_simulator: type: git url: https://github.com/tier4/scenario_simulator_v2.git version: 22.0.0 ================================================ FILE: repositories/tools-nightly.repos ================================================ repositories: tools: type: git url: https://github.com/autowarefoundation/autoware_tools.git version: main ================================================ FILE: repositories/tools.repos ================================================ repositories: tools: type: git url: https://github.com/autowarefoundation/autoware_tools.git version: 0.6.0 ================================================ FILE: setup-dev-env.sh ================================================ #!/usr/bin/env bash # Set up development environment for Autoware Core/Universe. # Usage: setup-dev-env.sh [-y] [-v] [--no-nvidia] # Note: -y option is only for CI. set -e # Function to print help message print_help() { echo "Usage: setup-dev-env.sh [OPTIONS]" echo "Options:" echo " --help Display this help message" echo " -h Display this help message" echo " -y Use non-interactive mode" echo " -v Enable debug outputs" echo " --no-nvidia Disable installation of the NVIDIA-related roles ('cuda' and 'tensorrt')" echo " --no-cuda-drivers Disable installation of 'cuda-drivers' in the role 'cuda'" echo " --runtime Disable installation dev package of role 'cuda' and 'tensorrt'" echo " --data-dir Set data directory (default: $HOME/autoware_data)" echo " --download-artifacts" echo " Download artifacts" echo " --module Specify the module (default: all)" echo " --ros-distro Specify ROS distribution (humble or jazzy, default: humble)" echo "" } SCRIPT_DIR=$(readlink -f "$(dirname "$0")") # Parse arguments args=() option_data_dir="$HOME/autoware_data" while [ "$1" != "" ]; do case "$1" in --help | -h) print_help exit 1 ;; -y) # Use non-interactive mode. option_yes=true ;; -v) # Enable debug outputs. option_verbose=true ;; --no-nvidia) # Disable installation of the NVIDIA-related roles ('cuda' and 'tensorrt'). option_no_nvidia=true ;; --no-cuda-drivers) # Disable installation of 'cuda-drivers' in the role 'cuda'. option_no_cuda_drivers=true ;; --runtime) # Disable installation dev package of role 'cuda' and 'tensorrt'. option_runtime=true ;; --data-dir) # Set data directory option_data_dir="$2" shift ;; --download-artifacts) # Set download artifacts option option_download_artifacts=true ;; --module) option_module="$2" shift ;; --ros-distro) option_ros_distro="$2" shift ;; *) args+=("$1") ;; esac shift done # Select installation type target_playbook="autoware.dev_env.universe" # default if [ ${#args[@]} -ge 1 ]; then target_playbook="autoware.dev_env.${args[0]}" fi # Initialize ansible args ansible_args=() # Confirm to start installation if [ "$option_yes" = "true" ]; then echo -e "\e[36mRun the setup in non-interactive mode.\e[m" else echo -e "\e[33mSetting up the build environment can take up to 1 hour.\e[m" read -rp "> Are you sure you want to run setup? [y/N] " answer # Check whether to cancel if ! [[ ${answer:0:1} =~ y|Y ]]; then echo -e "\e[33mCancelled.\e[0m" exit 1 fi ansible_args+=("--ask-become-pass") fi # Check verbose option if [ "$option_verbose" = "true" ]; then ansible_args+=("-vvv") fi # Check installation of NVIDIA libraries if [ "$option_no_nvidia" = "true" ]; then ansible_args+=("--extra-vars" "prompt_install_nvidia=n") elif [ "$option_yes" = "true" ]; then ansible_args+=("--extra-vars" "prompt_install_nvidia=y") fi # Check installation of CUDA Drivers if [ "$option_no_cuda_drivers" = "true" ]; then ansible_args+=("--extra-vars" "cuda_install_drivers=false") fi # Check installation of dev package if [ "$option_runtime" = "true" ]; then ansible_args+=("--extra-vars" "ros2_installation_type=ros-base") # ROS installation type, default "desktop" ansible_args+=("--extra-vars" "install_devel=N") else ansible_args+=("--extra-vars" "install_devel=y") fi # Check downloading artifacts if [ "$target_playbook" = "autoware.dev_env.openadkit" ]; then if [ "$option_download_artifacts" = "true" ]; then echo -e "\e[36mArtifacts will be downloaded to $option_data_dir\e[m" ansible_args+=("--extra-vars" "prompt_download_artifacts=y") else ansible_args+=("--extra-vars" "prompt_download_artifacts=N") fi elif [ "$option_yes" = "true" ] || [ "$option_download_artifacts" = "true" ]; then echo -e "\e[36mArtifacts will be downloaded to $option_data_dir\e[m" ansible_args+=("--extra-vars" "prompt_download_artifacts=y") fi ansible_args+=("--extra-vars" "data_dir=$option_data_dir") # Check module option if [ "$option_module" != "" ]; then ansible_args+=("--extra-vars" "module=$option_module") fi # Check ros-distro option if [ "$option_ros_distro" != "" ]; then export ROS_DISTRO="$option_ros_distro" ansible_args+=("--extra-vars" "rosdistro=$option_ros_distro") fi # Load env source "$SCRIPT_DIR/amd64.env" env_file="$SCRIPT_DIR/amd64.env" if [ "$option_ros_distro" = "jazzy" ]; then source "$SCRIPT_DIR/amd64_jazzy.env" env_file="$SCRIPT_DIR/amd64_jazzy.env" fi if [ "$(uname -m)" = "aarch64" ]; then source "$SCRIPT_DIR/arm64.env" fi # Add env args # shellcheck disable=SC2013 for env_name in $(sed -e "s/^\s*//" -e "/^#/d" -e "s/=.*//" <"$env_file"); do ansible_args+=("--extra-vars" "${env_name}=${!env_name}") done # Install sudo if ! (command -v sudo >/dev/null 2>&1); then apt-get -y update apt-get -y install sudo fi # Install git if ! (command -v git >/dev/null 2>&1); then sudo apt-get -y update sudo apt-get -y install git fi # Install pip for ansible if ! (python3 -m pip --version >/dev/null 2>&1); then sudo apt-get -y update sudo apt-get -y install python3-pip python3-venv fi # Install pipx for ansible if ! (python3 -m pipx --version >/dev/null 2>&1); then sudo apt-get -y update sudo apt-get -y install pipx fi # Install ansible python3 -m pipx ensurepath export PATH="${PIPX_BIN_DIR:=$HOME/.local/bin}:$PATH" pipx install --include-deps --force "ansible==10.*" # Install ansible collections echo -e "\e[36m"ansible-galaxy collection install -f -r "$SCRIPT_DIR/ansible-galaxy-requirements.yaml" "\e[m" ansible-galaxy collection install -f -r "$SCRIPT_DIR/ansible-galaxy-requirements.yaml" # Run ansible echo -e "\e[36m"ansible-playbook "$target_playbook" "${ansible_args[@]}" "\e[m" if ansible-playbook "$target_playbook" "${ansible_args[@]}"; then echo -e "\e[32mCompleted.\e[0m" exit 0 else echo -e "\e[31mFailed.\e[0m" exit 1 fi ================================================ FILE: setup.cfg ================================================ # This file is automatically synced from: # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. [flake8] # Modified from https://github.com/ament/ament_lint/blob/ebd524bb9973d5ec1dc48a670ce54f958a5a0243/ament_flake8/ament_flake8/configuration/ament_flake8.ini extend-ignore = B902,C816,D100,D101,D102,D103,D104,D105,D106,D107,D203,D212,D404,I202,CNL100,E203,E501,Q000 import-order-style = pep8 max-line-length = 100 show-source = true statistics = true [isort] profile=black line_length=100 force_sort_within_sections=true force_single_line=true reverse_relative=true known_third_party=launch ================================================ FILE: src/.gitignore ================================================ # Ignore everything in this folder and all subdirectories * # EXCEPT: Re-include the necessary files. !README.md !.gitignore ================================================ FILE: src/README.md ================================================ # Where is the source code? Autoware uses **multiple Git repositories** managed through a meta-repository approach. The `autoware` repository itself **does not contain the full source code**. Instead, it references many separately maintained repositories. To manage these repositories, Autoware uses **[vcs2l](https://github.com/ros-infrastructure/vcs2l)** (`vcs`), which allows you to clone and keep multiple repositories in sync using manifest files under [repositories](../repositories) folder. ## Repository structure - [`repositories/autoware.repos`](../repositories/autoware.repos) ➡️ The manifest file that lists essential Autoware repositories and their versions - `src/` (here) ➡️ The directory where all Autoware source repositories will be cloned ⭐ Check the [**🔗 Repository structure and versioning documentation**](https://autowarefoundation.github.io/autoware-documentation/main/design/repository-structure/) for more details. ## Cloning the essential Autoware source code ⭐ Check the [**🔗‍ Installation guide**](https://autowarefoundation.github.io/autoware-documentation/main/installation/) for detailed setup instructions. Here is a brief summary of the steps: ```bash # Navigate to the repository root cd autoware # Clone the Autoware source code into src/ vcs import src < repositories/autoware.repos ``` This command will clone and check out the correct versions as defined in [`autoware.repos`](../repositories/autoware.repos) > **Note** > Make sure `vcs2l` is installed before running this command: > > ```bash > sudo apt install python3-vcs2l > ``` In the future, to update all source repositories to their latest versions as defined in the manifest file, run: ```bash vcs pull src ```