Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 63 additions & 3 deletions .github/workflows/build-all-images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ on:
- 'components/visualizer/**'
- 'components/simulator/**'
- 'components/universe/**'
- 'tools/docker-bake.hcl'
- 'tools/carla-interface/**'
schedule:
- cron: '0 0 1 * *'
workflow_dispatch:
Expand All @@ -25,7 +27,9 @@ env:
REGISTRY: ghcr.io
IMAGE_PREFIX_COMMON: ghcr.io/${{ github.repository_owner }}/openadkit-common
IMAGE_PREFIX_COMPONENT: ghcr.io/${{ github.repository_owner }}/openadkit
IMAGE_PREFIX_TOOL: ghcr.io/${{ github.repository_owner }}/autoware-tools
BAKE_FILE: components/docker-bake.hcl
BAKE_FILE_TOOLS: tools/docker-bake.hcl

jobs:
prepare:
Expand Down Expand Up @@ -278,7 +282,63 @@ jobs:
*.cache-to=type=registry,ref=ghcr.io/${{ github.repository_owner }}/openadkit-buildcache:${{ matrix.target }}-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }}-${{ matrix.ros-distro }}-main,mode=max

# =============================================================================
# Stage 3: Build universe and universe-cuda images (parallel)
# Stage 3: Build tool images
# =============================================================================
build-tools:
runs-on: ubuntu-22.04
needs: [prepare, build-components]
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
platform: [linux/amd64]
ros-distro: [humble]
target:
- carla-interface
steps:
- name: Checkout OpenADKit repository
uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata for ${{ matrix.target }}
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_PREFIX_TOOL }}
bake-target: docker-metadata-action-${{ matrix.target }}
tags: |
type=raw,value=${{ matrix.target }},enable={{is_default_branch}}
type=raw,value=${{ matrix.target }}-${{ needs.prepare.outputs.build_tag }}
flavor: |
latest=false

- name: Build and push ${{ matrix.target }}
uses: docker/bake-action@v5
with:
files: |
${{ env.BAKE_FILE_TOOLS }}
${{ steps.meta.outputs.bake-file }}
targets: ${{ matrix.target }}
push: true
set: |
*.platform=${{ matrix.platform }}
*.args.SIMULATOR_IMAGE=${{ env.IMAGE_PREFIX_COMPONENT }}:simulator-amd64-${{ matrix.ros-distro }}-${{ needs.prepare.outputs.build_tag }}
*.cache-from=type=registry,ref=ghcr.io/${{ github.repository_owner }}/openadkit-buildcache:tool-${{ matrix.target }}-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }}-${{ matrix.ros-distro }}-main
*.cache-to=type=registry,ref=ghcr.io/${{ github.repository_owner }}/openadkit-buildcache:tool-${{ matrix.target }}-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }}-${{ matrix.ros-distro }}-main,mode=max

# =============================================================================
# Stage 4: Build universe and universe-cuda images (parallel)
# =============================================================================
build-universe:
runs-on: ${{ matrix.platform == 'linux/amd64' && 'ubuntu-22.04' || 'ubuntu-22.04-arm' }}
Expand Down Expand Up @@ -378,11 +438,11 @@ jobs:
*.cache-to=type=registry,ref=ghcr.io/${{ github.repository_owner }}/openadkit-buildcache:${{ matrix.target }}-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }}-${{ matrix.ros-distro }}-main,mode=max

# =============================================================================
# Stage 4: Create multi-arch manifests
# Stage 5: Create multi-arch manifests
# =============================================================================
create-manifests:
runs-on: ubuntu-22.04
needs: [prepare, build-common, build-components, build-universe]
needs: [prepare, build-common, build-components, build-tools, build-universe]
permissions:
contents: read
packages: write
Expand Down
57 changes: 56 additions & 1 deletion .github/workflows/release-all-images.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ env:
REGISTRY: ghcr.io
IMAGE_PREFIX_COMMON: ghcr.io/${{ github.repository_owner }}/openadkit-common
IMAGE_PREFIX_COMPONENT: ghcr.io/${{ github.repository_owner }}/openadkit
IMAGE_PREFIX_TOOL: ghcr.io/${{ github.repository_owner }}/autoware-tools
BAKE_FILE: components/docker-bake.hcl
BAKE_FILE_TOOLS: tools/docker-bake.hcl

jobs:
detect-autoware-tag:
Expand Down Expand Up @@ -280,7 +282,60 @@ jobs:
*.cache-to=type=registry,ref=ghcr.io/${{ github.repository_owner }}/openadkit-buildcache:${{ matrix.target }}-main,mode=max

# =============================================================================
# Stage 3: Build universe and universe-cuda images (parallel)
# Stage 3: Build tool images
# =============================================================================
build-tools:
runs-on: ubuntu-22.04
needs: [detect-autoware-tag, build-components]
if: needs.detect-autoware-tag.outputs.should_run == 'true'
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
include:
- target: carla-interface
steps:
- name: Checkout OpenADKit repository
uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata for ${{ matrix.target }}
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_PREFIX_TOOL }}
bake-target: docker-metadata-action-${{ matrix.target }}
tags: |
type=raw,value=${{ matrix.target }}-${{ needs.detect-autoware-tag.outputs.autoware_tag }}
flavor: |
latest=false

- name: Build and push ${{ matrix.target }}
uses: docker/bake-action@v5
with:
files: |
${{ env.BAKE_FILE_TOOLS }}
${{ steps.meta.outputs.bake-file }}
targets: ${{ matrix.target }}
push: true
set: |
*.args.SIMULATOR_IMAGE=${{ env.IMAGE_PREFIX_COMPONENT }}:simulator-${{ needs.detect-autoware-tag.outputs.autoware_tag }}
*.cache-from=type=registry,ref=ghcr.io/${{ github.repository_owner }}/openadkit-buildcache:tool-${{ matrix.target }}-main
*.cache-to=type=registry,ref=ghcr.io/${{ github.repository_owner }}/openadkit-buildcache:tool-${{ matrix.target }}-main,mode=max

# =============================================================================
# Stage 4: Build universe and universe-cuda images (parallel)
# =============================================================================
build-universe:
runs-on: ubuntu-22.04
Expand Down
1 change: 1 addition & 0 deletions deployments/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
This directory contains deployment configurations for **Open AD Kit**. Each folder contains a README file with detailed instructions on how to deploy the deployment configuration.

- **Sample deployment** configurations for development and testing.
- [CARLA Simulation](./samples/carla-simulation): Simple Open AD Kit deployment that demonstrates the open-source planning stack with CARLA as an external simulator.
- [Planning Simulation](./samples/planning-simulation): Simple Open AD Kit deployment that demonstrates the autoware **planning features** with planning simulation.
- [Logging Simulation](./samples/logging-simulation): Simple Open AD Kit deployment that demonstrates the autoware **end-to-end functionality** with sensor simulation using rosbag.
- **Demo deployment** configurations with specific use case scenarios.
Expand Down
115 changes: 115 additions & 0 deletions deployments/samples/carla-simulation/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Autoware Open AD Kit CARLA E2E Simulation

This sample runs closed-loop CARLA 0.9.16 end-to-end simulation with modular OpenADKit containers and Autoware's `autoware_carla_interface`.

The default runtime uses the official CARLA Ubuntu 22 container image. It does not use the CARLA ROS bridge, dummy vehicle, dummy perception, a monolithic Autoware container, or a host-installed CARLA runtime.

## Runtime

- CARLA: `carlasim/carla:0.9.16`
- CARLA interface image: `ghcr.io/autowarefoundation/autoware-tools:carla-interface`
- Autoware modules: standard OpenADKit split images
- CARLA map: `Town01`
- Autoware map assets: `$HOME/autoware_data/maps/Town01`
- RViz/noVNC: `ghcr.io/autowarefoundation/openadkit:visualizer`

## Requirements

- Docker with NVIDIA Container Toolkit
- Access to `carlasim/carla:0.9.16`
- A working host X display, usually `DISPLAY=:0`
- Host NVIDIA Vulkan ICD at `/usr/share/vulkan/icd.d/nvidia_icd.json`

## Start

```bash
./start-carla-e2e-demo.sh
```

The helper will:

- Use the CI-built `ghcr.io/autowarefoundation/autoware-tools:carla-interface` image.
- Download the official CARLA Autoware Town01 map assets if missing.
- Start `carlasim/carla:0.9.16` as `carla-e2e` on `DISPLAY=:0`.
- Preload `Town01`.
- Start modular OpenADKit map, system, CARLA interface, sensing, perception, localization, planning, vehicle, control, and API containers.
- Start the browser RViz/noVNC visualizer.
- Verify localization, CARLA LiDAR, and the CARLA ego actor.

Use `--build` to build the CARLA interface image locally from `tools/carla-interface` before starting the stack.

The default behavior is no-drive. Set the route and engage manually in RViz.

## Open RViz

If running remotely, forward noVNC from the machine running the sample:

```bash
ssh -L 8080:localhost:6080 <user>@<host>
```

Open:

```text
http://localhost:8080/vnc.html
```

Password:

```text
openadkit
```

In RViz:

- Use `2D Goal Pose` to set a route.
- Wait for routing and planning to become available.
- Click `Auto` to engage autonomous driving.

## Optional Drive Check

To automatically set a short forward route, engage autonomous mode, and verify movement:

```bash
./start-carla-e2e-demo.sh --drive
```

Expected success output includes:

```text
Route set: start=(..., ...) goal=(..., ...)
Autonomous mode active
Moved ... m: start=(..., ...) current=(..., ...)
```

## Faster Relaunch

The helper does not build the CARLA interface image unless `--build` is passed, so relaunching uses the configured image directly:

```bash
./start-carla-e2e-demo.sh
```

For start-only behavior with an explicit no-drive flag:

```bash
./start-carla-e2e-demo.sh --no-drive
```

## Command Path

Closed-loop control uses this path:

```text
/control/command/control_cmd
-> autoware_raw_vehicle_cmd_converter
-> /control/command/actuation_cmd
-> autoware_carla_interface
-> CARLA ego vehicle
```

## Stop

```bash
docker compose --env-file carla-simulation.e2e.env -f docker-compose.yaml down
```
84 changes: 84 additions & 0 deletions deployments/samples/carla-simulation/carla-simulation.e2e.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# ROS settings
ROS_DOMAIN_ID=1
USE_SIM_TIME=true

# Runtime images
CARLA_INTERFACE_IMAGE=ghcr.io/autowarefoundation/autoware-tools:carla-interface
CARLA_INTERFACE_CONTAINER=autoware-carla-interface
CARLA_PYTHON_VERSION=0.9.16
SENSING_PERCEPTION_IMAGE=ghcr.io/autowarefoundation/openadkit:sensing-perception-cuda

# CARLA runtime on the host X display.
CARLA_CONTAINER_IMAGE=carlasim/carla:0.9.16
CARLA_CONTAINER_NAME=carla-e2e
CARLA_DISPLAY=:0
CARLA_VK_ICD_HOST_PATH=/usr/share/vulkan/icd.d/nvidia_icd.json
CARLA_VK_ICD_CONTAINER_PATH=/usr/share/vulkan/icd.d/nvidia_icd.json
CARLA_RPC_HOST=127.0.0.1
CARLA_RPC_PORT=2000
CARLA_WORLD_PORT=2000
CARLA_WORLD=Town01
CARLA_QUALITY=Low
CARLA_RESX=1280
CARLA_RESY=720
CARLA_START_TIMEOUT=120
CARLA_LOAD_TIMEOUT=120

# Official CARLA Autoware map assets
CARLA_E2E_MAP_PATH=$HOME/autoware_data/maps/Town01
CARLA_E2E_POINTCLOUD_URL=https://bitbucket.org/carla-simulator/autoware-contents/raw/master/maps/point_cloud_maps/Town01.pcd
CARLA_E2E_LANELET2_URL=https://bitbucket.org/carla-simulator/autoware-contents/raw/master/maps/vector_maps/lanelet2/Town01.osm

# Autoware map settings
MAP_PATH=$HOME/autoware_data/maps/Town01
LANELET2_MAP_FILE=lanelet2_map.osm
POINTCLOUD_MAP_FILE=pointcloud_map.pcd
DATA_PATH=$HOME/autoware_data

# Common Autoware settings
POINTCLOUD_CONTAINER_NAME=pointcloud_container
SCENARIO_SIMULATION=false
SENSOR_MODEL=carla_sensor_kit
VEHICLE_ID=default
VEHICLE_MODEL=sample_vehicle

# Planning and control settings
ENABLE_ALL_MODULES_AUTO_MODE=false
IS_SIMULATION_MODE=true
PLANNING_MODULE_PRESET=default
CHECK_EXTERNAL_EMERGENCY_HEARTBEAT=false
CONTROL_MODULE_PRESET=default
LATERAL_CONTROLLER_MODE=mpc
LONGITUDINAL_CONTROLLER_MODE=pid

# Vehicle and system settings
LAUNCH_VEHICLE_INTERFACE=false
SYSTEM_RUN_MODE=online
LAUNCH_SYSTEM_MONITOR=false
LAUNCH_DUMMY_DIAG_PUBLISHER=false

# Sensing and perception settings
LAUNCH_POINTCLOUD_CONTAINER_SENSING=true
LAUNCH_SENSING_DRIVER=false
LAUNCH_POINTCLOUD_CONTAINER_PERCEPTION=false
LIDAR_DETECTION_MODEL=clustering
OCCUPANCY_GRID_MAP_METHOD=pointcloud_based
PERCEPTION_MODE=lidar

# Autoware launch settings
AUTOWARE_E2E_TIMEOUT=120
AUTOWARE_E2E_EMPTY_OBJECTS=false
AUTOWARE_E2E_USE_TRAFFIC_LIGHT_RECOGNITION=false
AUTOWARE_E2E_START_VISUALIZER=true
AUTOWARE_E2E_VERIFY_TIMEOUT=180
AUTOWARE_E2E_VERIFY_INTERVAL=5

# Visualization settings
RVIZ_CONFIG=/opt/autoware/share/autoware_launch/rviz/autoware.rviz

# Demo route and engage settings
AUTOWARE_E2E_AUTO_DRIVE=false
AUTOWARE_E2E_ROUTE_FORWARD_DISTANCE=55.0
AUTOWARE_E2E_ROUTE_SETTLE_TIMEOUT=90
AUTOWARE_E2E_DRIVE_VERIFY_TIMEOUT=90
AUTOWARE_E2E_DRIVE_VERIFY_DISTANCE=3.0
Loading
Loading