Compare commits

...

5 Commits

6 changed files with 173 additions and 122 deletions

4
.gitignore vendored
View File

@@ -1,3 +1,3 @@
licenses/** licenses/**
pkgs/exwayz_3d_mapping* pkgs/exwayz_3d_mapping*
tmp/** tmp/**

133
README.md
View File

@@ -1,64 +1,69 @@
# **Project Overview** # **Project Overview**
This repository contains the container and supporting files used by the LENA autonomous vehicle project. It packages the Exwayz 3D Mapping / SLAM executables into a Docker image that can run as part of the vehicle microservices stack. This repository contains the container and supporting files used by the LENA autonomous vehicle project. It packages the Exwayz 3D Mapping / SLAM executables into a Docker image that can run as part of the vehicle microservices stack.
**Repository Contents** **Repository Contents**
- **`exwayz_test.dockerfile`**: Dockerfile used to build the container image for testing and integration. - **`exwayz_test.dockerfile`**: Dockerfile used to build the container image for testing and integration.
- **`src/**`: all code that we have written which runs on the container. - **`src/**`: all code that we have written which runs on the container.
- **`tmp/data/`**: sample data including `exwayz_sample_data_slam_01.bag` used for demonstrations and tests. Download this from the link to their google drive on [the Exwayz docs site](https://exwayz.notion.site/Exwayz-3D-Mapping-v1-latest-1ea57c917367810ea1e9f8bf83e2e9d4) - **`tmp/data/`**: sample data including `exwayz_sample_data_slam_01.bag` used for demonstrations and tests. Download this from the link to their google drive on [the Exwayz docs site](https://exwayz.notion.site/Exwayz-3D-Mapping-v1-latest-1ea57c917367810ea1e9f8bf83e2e9d4)
- **`media/`**: screenshots and demos (GIFs) used in documentation. - **`media/`**: screenshots and demos (GIFs) used in documentation.
- **`licenses/`**: licensing information for included components. - **`licenses/`**: licensing information for included components.
**Contributing** **Contributing**
Please open issues or PRs for fixes and improvements. If you work on vehicle deployment or CI, include small, testable changes and document any required secrets or hardware assumptions. Please open issues or PRs for fixes and improvements. If you work on vehicle deployment or CI, include small, testable changes and document any required secrets or hardware assumptions.
# **Quick Start** # **Quick Start**
Build the image (from the repository root): Build the image (from the repository root):
```powershell ```powershell
docker build -f exwayz_test.dockerfile -t exwayz_test:latest . docker build -f exwayz_test.dockerfile -t exwayz_test:latest .
``` ```
Run the container (example; adjust mounts and environment for your platform): Run the container (example; adjust mounts and environment for your platform):
```powershell ```powershell
# Example (PowerShell on systems with X11 forwarding available) # Example (WSL on systems with X11 forwarding available)
docker run -it --rm \ docker run -it --rm \
--env="DISPLAY=$env:DISPLAY" \ --env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \ --env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-v "${PWD}:/app" \ -v "${PWD}:/app" \
exwayz_test:latest exwayz_test:latest \
``` /bin/bash
```
On POSIX shells use `$DISPLAY` and `$(pwd)` as usual.
On POSIX shells use `$DISPLAY` and `$(pwd)` as usual.
Run the Exwayz SLAM pipeline against the sample bag inside the container (example):
Run the Exwayz SLAM pipeline against the sample bag inside the container (example):
```bash
exwayz_slam --bag tmp/data/exwayz_sample_data_slam_01.bag \ ```bash
--bag-hesai /hesai/pandar_packets \ exwayz_slam --bag tmp/data/exwayz_sample_data_slam_01.bag \
--hesai-model PandarXT-32 \ --bag-hesai /hesai/pandar_packets \
--d-write 0.1 -o ./slam_session_tutorial --no-date --hesai-model PandarXT-32 \
``` --d-write 0.1 -o ./slam_session_tutorial --no-date
```
Adjust paths and model names to match your sensor and bag file layout.
Adjust paths and model names to match your sensor and bag file layout.
# **Status**
You should see something like this:
- Docker image: mostly working for local testing. ![Gif of demo](media\Exwayz_slam_demo_working.gif)
- Secrets: currently not included in the image; build-time and runtime secrets need secure handling (see TODOs).
- Target: this repo should evolve into the deploy-and-run repo for vehicle microservices. # **Status**
# **Todos** - Docker image: mostly working for local testing.
- [x] **Prototype Docker Image**: Get a prototype docker image working and run their demos. - Secrets: currently not included in the image; build-time and runtime secrets need secure handling (see TODOs).
- [x] **Refine README**: polish documentation and examples (in progress). - Target: this repo should evolve into the deploy-and-run repo for vehicle microservices.
- [ ] **Secrets Handling**: implement secure secret injection for builds and runtime (Docker BuildKit, secret manager, or CI secrets).
- [ ] **Standardized Scripts**: add `build_image.ps1` and `run_container.ps1` (and POSIX equivalents) to standardize workflows. # **Todos**
- [ ] **CI Build**: add GitHub Actions workflow equivalent to Gitea to build (and optionally scan) images on push/PR. - [x] **Prototype Docker Image**: Get a prototype docker image working and run their demos.
- [ ] **Vehicle Deployment Guide**: document runtime flags, service templates, and health-checks for deployment on the vehicle. - [x] **Refine README**: polish documentation and examples (in progress).
- [ ] **Integration Test**: add tests that run the pipeline against `tmp/data/exwayz_sample_data_slam_01.bag` to detect regressions. - [ ] **Fix Cross Compiling**: Cross compiling failing for aarch64.
- [ ] **Secrets Handling**: implement secure secret injection for builds and runtime (Docker BuildKit, secret manager, or CI secrets).
- [ ] **Standardized Scripts**: add `build_image.ps1` and `run_container.ps1` (and POSIX equivalents) to standardize workflows.
- [ ] **CI Build**: add GitHub Actions workflow equivalent to Gitea to build (and optionally scan) images on push/PR.
- [ ] **Vehicle Deployment Guide**: document runtime flags, service templates, and health-checks for deployment on the vehicle.
- [ ] **Integration Test**: add tests that run the pipeline against `tmp/data/exwayz_sample_data_slam_01.bag` to detect regressions.

View File

@@ -1,44 +1,57 @@
# syntax=docker/dockerfile:1.3 # syntax=docker/dockerfile:1.3
FROM ros:jazzy-ros-core FROM ros:jazzy-ros-core
# Build argument provided by buildx/BuildKit: `TARGETARCH` (amd64, arm64, etc.). # Build argument provided by buildx/BuildKit: `TARGETARCH` (amd64, arm64, etc.).
# Default to amd64 when not provided. # Default to amd64 when not provided.
ARG TARGETARCH=amd64 ARG TARGETARCH=amd64
ARG GRAPICAL_ENV=TRUE
# Copy both architecture-specific packages into the image and choose the right one at build time
COPY pkgs/exwayz_3d_mapping-1.2.2-linux-u24.04-amd64.deb /tmp/exwayz_amd64.deb # Copy both architecture-specific packages into the image and choose the right one at build time
COPY pkgs/exwayz_3d_mapping-1.2.2-linux-u24.04-aarch64.deb /tmp/exwayz_aarch64.deb COPY pkgs/exwayz_3d_mapping-1.2.2-linux-u24.04-amd64.deb /tmp/exwayz_amd64.deb
COPY pkgs/exwayz_3d_mapping-1.2.2-linux-u24.04-aarch64.deb /tmp/exwayz_aarch64.deb
#If debug, install the following:
RUN apt update && apt install -y libgl1-mesa-dev libosmesa6-dev libglew-dev libgles2-mesa-dev libglfw3-dev libstdc++6 mesa-utils # Install dependencies and setup for GUI applications
#TODO we're installing unneccessary things like the humanity-icons package, clean this up later. ENV DISPLAY=:0
ENV WAYLAND_DISPLAY=wayland-0
# RUN --mount=type=secret,id=exwayz_license set -eux; \ ENV XDG_SESSION_TYPE=x11
# if [ "${TARGETARCH}" = "aarch64" ]; then \ ENV XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir
# pkg=/tmp/exwayz_aarch64.deb; \ #If debug, install the following:
# else \ RUN if [ "$GRAPHICAL_ENV" = "TRUE" ]; then \
# pkg=/tmp/exwayz_amd64.deb; \ apt update && apt install -y libgl1-mesa-dev libosmesa6-dev libglew-dev libgles2-mesa-dev libglfw3-dev libstdc++6 mesa-utils; \
# fi; \ fi
# apt-get update; \ #TODO we're installing unneccessary things like the humanity-icons package, clean this up later.
# apt-get install -fy "$pkg"; \
# if [ -s /run/secrets/exwayz_license ]; then \
# exwayz_license --query "$(cat /run/secrets/exwayz_license)" || true; \ # RUN --mount=type=secret,id=exwayz_license set -eux; \
# fi; \ # if [ "${TARGETARCH}" = "aarch64" ]; then \
# rm -f /tmp/exwayz_amd64.deb /tmp/exwayz_aarch64.deb; \ # pkg=/tmp/exwayz_aarch64.deb; \
# rm -rf /var/lib/apt/lists/* # else \
# pkg=/tmp/exwayz_amd64.deb; \
RUN --mount=type=secret,id=exwayz_license set -eux; \ # fi; \
apt-get update; \ # apt-get update; \
apt-get install -fy /tmp/exwayz_amd64.deb; \ # apt-get install -fy "$pkg"; \
if [ -s /run/secrets/exwayz_license ]; then \ # if [ -s /run/secrets/exwayz_license ]; then \
exwayz_license --query "$(cat /run/secrets/exwayz_license)" || true; \ # exwayz_license --query "$(cat /run/secrets/exwayz_license)" || true; \
else \ # fi; \
echo "No license file provided"; \ # rm -f /tmp/exwayz_amd64.deb /tmp/exwayz_aarch64.deb; \
exit 1; \ # rm -rf /var/lib/apt/lists/*
fi; \
rm -f /tmp/exwayz_amd64.deb /tmp/exwayz_aarch64.deb; \ COPY licenses/exwayz_liscence.lic /tmp/exwayz_license
rm -rf /var/lib/apt/lists/* RUN set -eux; \
# TODO verify license was applied successfully apt-get update; \
apt-get install -fy /tmp/exwayz_amd64.deb; \
# Set entrypoint if [ -f /tmp/exwayz_license ]; then \
ENTRYPOINT ["/ros_entrypoint.sh"] exwayz_license --query "$(cat /tmp/exwayz_license)" || true; \
else \
echo "No license file provided"; \
exit 1; \
fi; \
rm -f /tmp/exwayz_amd64.deb /tmp/exwayz_aarch64.deb; \
rm -f /tmp/exwayz_license; \
rm -rf /var/lib/apt/lists/*
# # Change the working directory to /app
# WORKDIR /app
# Set entrypoint
ENTRYPOINT ["/ros_entrypoint.sh"]

View File

@@ -1 +1,17 @@
## fixing broken s ## Secrets
Secrets currently not working.
I ran the liscencing script inside the container manually and all worked as expected.
Need to debug and see how we can do this on build.
## Data
Pulled data from the Exwayz demo on notion's [drive link](https://drive.google.com/drive/folders/1oC_iTZT5e3NsNjVr1Tsyn-uNB1uE5P68).
Placed it here: `tmp\data\exwayz_sample_data_slam_01.bag`
When running demo with this repo mounted at `/app` it seems to have worked well.
Had a full successful run. See [gif](media\Exwayz_slam_demo_working.gif).
![Gif of demo](media\Exwayz_slam_demo_working.gif)
## Cross arch compatibility
Started working on cross arch compat. Builds for `aarch64` taking much longer as expected.
But failing... not as expected.

View File

@@ -1,12 +1,12 @@
This is where you want to put the packages from Exwayz. This is where you want to put the packages from Exwayz.
Download them from the latest relaease on [Exwayz 3D Mapping releases](https://exwayz.notion.site/Exwayz-3D-Mapping-releases-19057c917367807bb19de8007c4243cc) Download them from the latest relaease on [Exwayz 3D Mapping releases](https://exwayz.notion.site/Exwayz-3D-Mapping-releases-19057c917367807bb19de8007c4243cc)
Alternatively, if these links still work you need: Alternatively, if these links still work you need:
### Linux (Ubuntu 24.04) ### Linux (Ubuntu 24.04)
**x86_64:** [exwayz_3d_mapping-1.2.2-linux-u24.04-amd64.deb](https://exwayz-releases.s3.eu-west-3.amazonaws.com/1.2.2/exwayz_3d_mapping-1.2.2-linux-u24.04-amd64.deb?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAYS2NSS62CY7QV437%2F20260103%2Feu-west-3%2Fs3%2Faws4_request&X-Amz-Date=20260103T021624Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=f6fba24ace0a163eafbebed4a0a0d19949f8e5c384222d32d440de0fd2df4209 **x86_64:** [exwayz_3d_mapping-1.2.2-linux-u24.04-amd64.deb](https://exwayz-releases.s3.eu-west-3.amazonaws.com/1.2.2/exwayz_3d_mapping-1.2.2-linux-u24.04-amd64.deb?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAYS2NSS62CY7QV437%2F20260103%2Feu-west-3%2Fs3%2Faws4_request&X-Amz-Date=20260103T021624Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=f6fba24ace0a163eafbebed4a0a0d19949f8e5c384222d32d440de0fd2df4209
) )
**ARMv8:** [exwayz_3d_mapping-1.2.2-linux-u24.04-aarch64.deb](https://exwayz-releases.s3.eu-west-3.amazonaws.com/1.2.2/exwayz_3d_mapping-1.2.2-linux-u24.04-aarch64.deb?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAYS2NSS62CY7QV437%2F20260103%2Feu-west-3%2Fs3%2Faws4_request&X-Amz-Date=20260103T021622Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=d051d59e1339001affde1527ceace4d4f851348f4a5ff40b96e86bbb1b4c29bc **ARMv8:** [exwayz_3d_mapping-1.2.2-linux-u24.04-aarch64.deb](https://exwayz-releases.s3.eu-west-3.amazonaws.com/1.2.2/exwayz_3d_mapping-1.2.2-linux-u24.04-aarch64.deb?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAYS2NSS62CY7QV437%2F20260103%2Feu-west-3%2Fs3%2Faws4_request&X-Amz-Date=20260103T021622Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=d051d59e1339001affde1527ceace4d4f851348f4a5ff40b96e86bbb1b4c29bc
) )

View File

@@ -0,0 +1,17 @@
# Setup WSLg environment variables for GUI applications
echo "🚀 Setting up WSLg environment variables for GUI support..."
export DISPLAY=:0
export WAYLAND_DISPLAY=wayland-0
export XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir
echo "✅ DISPLAY is set to $DISPLAY"
echo "🐳 Starting Docker container with GUI support..."
docker run -it --rm \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-v "${PWD}:/app" \
exwayz_test:latest \
/bin/bash