Compare commits

...

7 Commits

6 changed files with 173 additions and 93 deletions

4
.gitignore vendored
View File

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

104
README.md
View File

@@ -1,35 +1,69 @@
# Build the docker image # **Project Overview**
'''bash
docker build -t exwayz_test:v1.0 -f exwayz_test.dockerfile . 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.
'''
## TODO Building with docker secrets **Repository Contents**
We need to improve our handling of secrets and figure out a safer way to include them in the docker file/image
- **`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.
- **`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)
# To run the docker file: - **`media/`**: screenshots and demos (GIFs) used in documentation.
1. We need to enable the use of the display - **`licenses/`**: licensing information for included components.
2. Share the volume with our current code so we can access it in the container
3. start a shell **Contributing**
'''bash 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.
docker run -it \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \ # **Quick Start**
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-v "$(pwd):/app" \ Build the image (from the repository root):
exwayz_test
''' ```powershell
docker build -f exwayz_test.dockerfile -t exwayz_test:latest .
```
Then, run the exways slam on a bag to test everything is workign correctly.
'''bash Run the container (example; adjust mounts and environment for your platform):
exwayz_slam --bag data/exwayz_sample_data_slam_01.bag --bag-hesai /hesai/pandar_packets --hesai-model PandarXT-32 --d-write 0.1 -o ./slam_session_tutorial --no-date
''' ```powershell
Naturally, change the path to the bagfile for the parameter '--bag' # Example (WSL on systems with X11 forwarding available)
docker run -it --rm \
Hopefully, you will see something like this: --env="DISPLAY=$DISPLAY" \
![Working Exwayz Demo¨¨](media/Exwayz_slam_demo_working.gif) --env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
# may have to: -v "${PWD}:/app" \
source /opt/ros/$ROS_DISTRO/setup.bash exwayz_test:latest \
/bin/bash
```
On POSIX shells use `$DISPLAY` and `$(pwd)` as usual.
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 \
--bag-hesai /hesai/pandar_packets \
--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.
You should see something like this:
![Gif of demo](media\Exwayz_slam_demo_working.gif)
# **Status**
- Docker image: mostly working for local testing.
- 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.
# **Todos**
- [x] **Prototype Docker Image**: Get a prototype docker image working and run their demos.
- [x] **Refine README**: polish documentation and examples (in progress).
- [ ] **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