Skip to content

Integrate Zenoh into PerceptionBridge and update build system#36

Merged
AhmedAdelWafdy7 merged 42 commits into
mainfrom
develop
Jul 8, 2026
Merged

Integrate Zenoh into PerceptionBridge and update build system#36
AhmedAdelWafdy7 merged 42 commits into
mainfrom
develop

Conversation

@AhmedAdelWafdy7

Copy link
Copy Markdown
Collaborator

This pull request introduces significant improvements to the CI pipeline and build system, focusing on reproducibility, maintainability, and performance. The main changes include the introduction of a custom Docker CI image and workflow, refactoring the CMake build configuration for better dependency handling, and streamlining the GitHub Actions workflows to use the new CI image and cache compilation artifacts. Additionally, there are minor documentation and compatibility updates.

CI/CD Infrastructure Improvements:

  • Introduced .github/workflows/docker-publish.yml to build and publish a custom Docker CI image (ghcr.io/yaquod/autoware-agent-ci:latest) used in all CI jobs, ensuring consistent build environments. ([.github/workflows/docker-publish.ymlR1-R39](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-5b21991be47c2922383bdc0b6bf00b65af7db51b82d049dd8d6ad03e3d37ac98R1-R39))
  • Added a .dockerignore file to minimize Docker build context and only include necessary files for the CI image. ([.dockerignoreR1-R6](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-2f754321d62f08ba8392b9b168b83e24ea2852bb5d815d63e767f6c3d23c6ac5R1-R6))
  • Updated all GitHub Actions workflows in .github/workflows/autoware-ci.yaml to use the new custom Docker image, removed manual dependency installation steps, and added ccache caching for faster builds. ([[1]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8L17-R17), [[2]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8L28-L48), [[3]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8L87-R85), [[4]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8R99-L130), [[5]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8L175-R154), [[6]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8L185-L198), [[7]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8L221-R193), [[8]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8L256-R267))
  • Switched coverage generation from lcov to gcovr for improved coverage reporting and simplified setup. ([.github/workflows/autoware-ci.yamlR279-R297](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-f334dc65ebb547327aedd5d5bd69627488d31b613deac56042112e9a1c1e8ae8R279-R297))

Build System and Dependency Management:

  • Refactored CMakeLists.txt to use CMake's find_package for dependencies (protobuf, gRPC, zenohc, zenohcxx, OpenMP) instead of pkg_check_modules, and modularized proto/gRPC code generation into a proto subdirectory for better maintainability. ([[1]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aL35-L98), [[2]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aL110-R89))
  • Updated build and install targets to support both ROS and standard CMake workflows, and improved library linking and dependency declarations. ([[1]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aL110-R89), [[2]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aL161-R112))
  • Added support for CMake policy CMP0144 for compatibility with newer CMake versions. ([CMakeLists.txtR7-R10](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aR7-R10))

Documentation and Miscellaneous:

  • Fixed a link in README.md to point to the correct AWSIM map download location. ([README.mdL156-R156](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L156-R156))
  • Enhanced build output messages for better clarity on included libraries and build options. ([[1]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aL173-R128), [[2]](https://github.com/Yaquod/autoware-agent/pull/36/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20aR138))

These changes make the CI pipeline more robust and reproducible, simplify maintenance, and ensure that builds are faster and more reliable.

AhmedAdelWafdy7 and others added 30 commits April 19, 2026 11:52
* ci: install zenoh and zenoh-cxx from source in Dockerfile.ci

* feat: replace gRPC with Zenoh for PerceptionBridge publishing

- Refactor PerceptionBridge to publish perception frames via Zenoh instead of gRPC
- Add ZenohPublisher utility class for publishing serialized messages
- Update CMakeLists.txt to include zenohc and zenohcxx dependencies
- Update PerceptionBridge and main.cc to use Zenoh session for publishing
- Remove gRPC service and related code from PerceptionBridge

* test: add unit test for PerceptionBridge zenoh streaming

refactor: improve formatting and consistency in PerceptionBridge and related files

* feat: update build system and main for Zenoh integration and cleanup

- Refactor CMakeLists.txt to use find_package for gRPC and Protobuf, add proto subdirectory, and update install targets
- Remove gRPC and protobuf linking from main target, add zenohcxx dependency in package.xml
- Update main.cc for improved Zenoh session configuration and logging, minor code cleanup
- Fix PerceptionBridge Zenoh prefix, update test to use explicit Zenoh session
- Minor style fixes in bridge service implementations

* ci: update build scripts to set CMAKE_PREFIX_PATH and LD_LIBRARY_PATH for local dependencies

* ci: add Docker image build and publish workflow, update dependencies and .dockerignore

* ci: update autoware-ci.yaml to skip autoware_internal_msgs in rosdep install

* ci: update CI to use custom Docker image and skip ament_cmake_clang_format in rosdep install

* ci: update Docker image tag to use dynamic repository owner in docker-publish workflow

* ci: trigger Docker image build on pull requests updating Dockerfile.ci

* ci: update Docker image tag to use static repository owner in docker-publish workflow

* ci: add LLVM APT repository setup to Dockerfile.ci for clang installation

* ci: update Dockerfile.ci to build zenoh-c and zenoh-cpp from source

* ci: install Rust toolchain in Dockerfile.ci for zenoh-c build

* ci: fix working directory cleanup after zenoh-cpp build in Dockerfile.ci

* cmake: refactor protobuf and gRPC integration into proto_lib target

- Use find_package with CONFIG for protobuf and gRPC
- Move proto code generation and dependencies to proto_lib
- Update bridge and test targets to link against proto_lib instead of direct gRPC/protobuf targets
- Remove redundant add_dependencies and manual proto file handling
- Clean up commented and duplicate code

* ci: enable Docker build cache in docker-publish workflow

* ci: update .dockerignore and docker-publish workflow for improved Docker caching
zenoh: integrate Zenoh as a middleware for perception data publishing, removes gRPC/protobuf as build dependencies in several places.

Signed-off-by: AhmedAdelWafdy7 <fandes99@gmail.com>

---------

Signed-off-by: AhmedAdelWafdy7 <fandes99@gmail.com>
…publish workflow

Signed-off-by: AhmedAdelWafdy7 <fandes99@gmail.com>
…t test arguments in autoware-ci.yaml

Signed-off-by: AhmedAdelWafdy7 <fandes99@gmail.com>
Improve CI coverage build with Clang and update Dockerfile dependencies
Refactor TripBridge to use Zenoh for publishing instead of gRPC
…proved monitoring

- Add Zenoh session and subscriber to monitor autoware topic streams
- Subscribe to /planning/mission_planning/route and track route reception
- Improve test output with detailed state transitions and streaming status
- Refactor setup and teardown for Zenoh and ROS2 resources
- Add checks for Zenoh data flow during vehicle motion phase
Refactor PlanningBridge and ClusterBridge for Zenoh integration
…er adapters, and app handles

- Introduce VehicleGatewayClient and VehicleGatewayService for gRPC-based vehicle gateway communication
- Add Providers.h interface definitions for ETA, location, and trip management abstraction
- Implement ClusterBridgeProvider and AutowareControllerProvider adapters for gateway integration
- Add AutowareApp.h/cpp to encapsulate application startup/shutdown and component wiring
- Update CMakeLists.txt to build and link new gateway and provider components
- Extend TripController and related classes for ETA queries, trip move, and state callbacks
- Refactor namespace usage to autoware_agent for consistency
- Update proto files for new VehicleGateway service and remove deprecated gRPC contracts
- Add longitude/latitude to FrameStates and propagate through ClusterBridge
- Update tests and bridges to use new namespace and method names
…pters for improved trip lifecycle handling

- Refactor TripStatus to use explicit member naming and add current_gps/start_gps fields
- Update TripState enum with INITIALIZING_IN_MAP and clarify state transitions
- Revise AutowareController and TripController APIs: startTrip now takes only a callback, add queryEtaSync helper, and ArrivalCallback support
- Adjust adapters (AutowareControllerProvider, ClusterBridgeProvider) to use new TripStatus fields and propagate trip_id
- Update VehicleGatewayService and VehicleGatewayClient for revised proto and trip_id handling
- Fix namespace casing inconsistencies (AutowareAgent → autoware_agent)
- Update tests to use new TripStatus fields and skip/guard tests if controller is not IDLE or Autoware services are unavailable
- Minor formatting, whitespace, and comment improvements for clarity
Integrate VehicleGateway with gRPC and refactor trip lifecycle handling
Add VehicleGatewayStreamClient with gRPC streaming integration
Integrate LaneletMap for route handling and update configurations
@AhmedAdelWafdy7
AhmedAdelWafdy7 merged commit 31372b4 into main Jul 8, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants