Files
slam-stereo-blueos/Dockerfile
2026-04-19 18:07:28 +02:00

83 lines
2.4 KiB
Docker

# SLAM Stéréo BlueOS — Extension Docker
# Base: ROS2 Humble (Ubuntu 22.04)
# ORB-SLAM3 + Flask interface
FROM ros:humble-ros-base AS base
LABEL version="0.1.0"
LABEL description="SLAM Stéréo visuel pour AUV sous-marin — BlueOS Extension"
LABEL authors='[{"name": "Baptiste Moulin", "email": "claude@nowyouknow.fr"}]'
LABEL company='{"about": "AUV SLAM project", "name": "Baptiste Moulin", "email": "claude@nowyouknow.fr"}'
LABEL type="device-integration"
LABEL tags='["slam", "stereo", "vision", "auv", "underwater"]'
LABEL permissions='{"NetworkMode": "host", "Devices": ["/dev/video0", "/dev/video1"], "HostConfig": {"Privileged": false}}'
ENV DEBIAN_FRONTEND=noninteractive
ENV ROS_DISTRO=humble
# --- Dépendances système ---
RUN apt-get update && apt-get install -y --no-install-recommends \
python3-pip \
python3-opencv \
libopencv-dev \
cmake \
build-essential \
git \
wget \
libssl-dev \
libusb-1.0-0-dev \
libeigen3-dev \
libglew-dev \
libpython3-dev \
python3-numpy \
python3-yaml \
# Pangolin deps
libgl1-mesa-dev \
libglu1-mesa-dev \
freeglut3-dev \
libwayland-dev \
libxkbcommon-dev \
wayland-protocols \
&& rm -rf /var/lib/apt/lists/*
# --- Python dependencies ---
RUN pip3 install --no-cache-dir \
flask>=3.0 \
numpy>=1.24 \
pyyaml>=6.0 \
opencv-python-headless>=4.8
# --- Pangolin (viewer 3D ORB-SLAM3) ---
RUN git clone --depth 1 https://github.com/stevenlovegrove/Pangolin /opt/Pangolin && \
cmake -S /opt/Pangolin -B /opt/Pangolin/build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TOOLS=OFF \
-DBUILD_EXAMPLES=OFF && \
cmake --build /opt/Pangolin/build --parallel $(nproc) && \
cmake --install /opt/Pangolin/build && \
rm -rf /opt/Pangolin
# --- ORB-SLAM3 dependencies (g2o, DBoW2 inclus dans ORB-SLAM3) ---
# Note: compilation complète ~15 min. Décommenter pour build final.
# RUN git clone --depth 1 https://github.com/UZ-SLAMLab/ORB_SLAM3 /opt/ORB_SLAM3 && \
# cd /opt/ORB_SLAM3 && chmod +x build.sh && bash build.sh
# --- Application SLAM ---
WORKDIR /app
COPY src/ ./src/
COPY config/ ./config/
# Créer config/ si vide
RUN mkdir -p /app/config
# --- Port Flask ---
EXPOSE 5000
# --- Healthcheck ---
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
CMD curl -f http://localhost:5000/ || exit 1
# --- Entrypoint ---
ENV PYTHONUNBUFFERED=1
CMD ["python3", "src/interface/app.py"]