Skip to content

Commit 4c34b3a

Browse files
committed
WIP updating docker
1 parent d29b153 commit 4c34b3a

File tree

4 files changed

+300
-46
lines changed

4 files changed

+300
-46
lines changed

.devcontainer/devcontainer.json

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// See https://aka.ms/vscode-remote/devcontainer.json for format details.
2+
{
3+
"name": "Demo Elevation Mapping CUPY Workspace",
4+
"dockerFile": "../docker/Dockerfile.x64",
5+
"context": "../",
6+
"remoteUser": "ros",
7+
"runArgs": [
8+
"--network=host",
9+
"--cap-add=SYS_PTRACE",
10+
"--cap-add=SYS_NICE",
11+
"--security-opt=seccomp:unconfined",
12+
"--security-opt=apparmor:unconfined",
13+
// "--volume=/tmp/.X11-unix:/tmp/.X11-unix",
14+
"--volume=/mnt/wslg:/mnt/wslg",
15+
"--ipc=host",
16+
"--pid=host",
17+
"--runtime=nvidia",
18+
"--gpus=all",
19+
"--privileged",
20+
"--ulimit=rtprio=98",
21+
"--ulimit=rttime=-1",
22+
"--ulimit=memlock=8428281856",
23+
"--name=emcupy-ros2-devcontainer"
24+
],
25+
"containerEnv": {
26+
"DISPLAY": "${localEnv:DISPLAY}", // Needed for GUI try ":0" for windows
27+
"WAYLAND_DISPLAY": "${localEnv:WAYLAND_DISPLAY}",
28+
"XDG_RUNTIME_DIR": "${localEnv:XDG_RUNTIME_DIR}",
29+
"PULSE_SERVER": "${localEnv:PULSE_SERVER}",
30+
"LIBGL_ALWAYS_SOFTWARE": "1" // Needed for software rendering of opengl
31+
},
32+
"mounts": [
33+
"source=/dev,target=/dev,type=bind,consistency=cached"
34+
// "source=~/bag_files,target=/workspaces/vscode-container-workspace/bag_files,type=bind,consistency=cached"
35+
],
36+
"customizations": {
37+
"vscode": {
38+
"settings": {
39+
"remote.autoForwardPorts": false,
40+
"remote.autoForwardPortsSource": "output",
41+
"otherPortsAttributes": { "onAutoForward" : "ignore" }
42+
},
43+
"extensions": [
44+
"althack.ament-task-provider",
45+
"betwo.b2-catkin-tools",
46+
"DotJoshJohnson.xml",
47+
"ms-azuretools.vscode-docker",
48+
"ms-vscode.cmake-tools",
49+
"ms-python.python",
50+
"ms-vscode.cpptools",
51+
"redhat.vscode-yaml",
52+
"smilerobotics.urdf",
53+
"streetsidesoftware.code-spell-checker",
54+
"twxs.cmake",
55+
"yzhang.markdown-all-in-one",
56+
"zachflower.uncrustify",
57+
"mhutchie.git-graph",
58+
"eamodio.gitlens",
59+
"ms-vscode.cpptools-extension-pack",
60+
"usernamehw.errorlens",
61+
"ms-iot.vscode-ros",
62+
"alefragnani.Bookmarks",
63+
"ms-vscode.live-server"
64+
65+
]
66+
}
67+
},
68+
"workspaceMount": "source=${localWorkspaceFolder}/../,target=/workspace/src,type=bind",
69+
"workspaceFolder": "/workspace/src"
70+
}

docker/Dockerfile.x64

Lines changed: 208 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,208 @@
1-
FROM nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04
2-
3-
# Set noninteractive mode for apt-get
4-
ENV DEBIAN_FRONTEND=noninteractive
5-
6-
# Preconfigure tzdata
7-
RUN echo "Etc/UTC" > /etc/timezone && \
8-
ln -fs /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
9-
apt-get update && apt-get install -y tzdata && \
10-
dpkg-reconfigure --frontend noninteractive tzdata
11-
12-
# Install Python
13-
RUN apt-get update && apt-get install -y \
14-
python3.8 \
15-
python3-pip \
16-
git
17-
18-
# Install PyTorch
19-
COPY requirements.txt /tmp/requirements.txt
20-
RUN pip3 install -r /tmp/requirements.txt
21-
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
22-
23-
# Install other Python packages
24-
RUN pip3 install cupy-cuda11x scikit-learn
25-
RUN pip3 install 'git+https://github.com/facebookresearch/detectron2.git'
26-
27-
# Install ROS
28-
RUN apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
29-
RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'
30-
31-
RUN apt-get update && apt-get install -y --no-install-recommends \
32-
ros-noetic-desktop-full
33-
34-
# Install ROS packages
35-
RUN apt install -y ros-noetic-pybind11-catkin \
36-
ros-noetic-grid-map-core ros-noetic-grid-map-msgs ros-noetic-grid-map-ros ros-noetic-grid-map-rviz-plugin \
37-
libopencv-dev \
38-
libeigen3-dev \
39-
libgmp-dev \
40-
libmpfr-dev \
41-
libboost-all-dev \
42-
ros-noetic-turtlebot3-gazebo ros-noetic-turtlebot3-teleop \
43-
ros-noetic-ros-numpy
44-
45-
RUN pip3 install catkin-tools
46-
ENV TURTLEBOT3_MODEL=waffle
1+
# syntax=docker/dockerfile:1.4
2+
3+
# Base image
4+
FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 AS base
5+
6+
# Metadata
7+
LABEL description="ROS2 environment with CUDA support"
8+
LABEL version="1.0"
9+
10+
# Build arguments
11+
ARG ROS_DISTRO=humble
12+
ARG USERNAME=ros
13+
ARG USER_UID=1000
14+
ARG USER_GID=$USER_UID
15+
ARG RMW_NAME=zenoh
16+
17+
# Environment variables
18+
ENV DEBIAN_FRONTEND=noninteractive \
19+
LANG=en_US.UTF-8 \
20+
LC_ALL=${LANG}\
21+
TZ=UTC \
22+
PYTHONUNBUFFERED=1 \
23+
ROS_DISTRO=${ROS_DISTRO} \
24+
ROS_ROOT=/opt/ros/${ROS_DISTRO} \
25+
AMENT_PREFIX_PATH=/opt/ros/${ROS_DISTRO} \
26+
COLCON_PREFIX_PATH=/opt/ros/${ROS_DISTRO} \
27+
LD_LIBRARY_PATH=/opt/ros/${ROS_DISTRO}/lib:/usr/local/cuda/lib64 \
28+
PATH=/opt/ros/${ROS_DISTRO}/bin:/usr/src/tensorrt/bin:/usr/local/cuda/bin:$PATH \
29+
PYTHONPATH=/opt/ros/${ROS_DISTRO}/lib/python3.10/site-packages \
30+
# Used by various ROS2 packages
31+
RMW_IMPLEMENTATION=rmw_${RMW_NAME}_cpp \
32+
# Should be the same as above but with dashes instead of underscores
33+
RMW_IMPLEMENTATION_DASH=rmw-${RMW_NAME}-cpp
34+
35+
# Install basic utilities and dependencies
36+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
37+
apt update && apt install -y --no-install-recommends \
38+
locales \
39+
tzdata \
40+
curl \
41+
gnupg2 \
42+
lsb-release \
43+
sudo \
44+
software-properties-common \
45+
wget \
46+
git \
47+
git-lfs \
48+
nano \
49+
&& locale-gen ${LANG} \
50+
&& update-locale LC_ALL=${LC_ALL} LANG=${LANG}\
51+
&& ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
52+
&& dpkg-reconfigure -f ${DEBIAN_FRONTEND} tzdata \
53+
&& apt clean \
54+
&& rm -rf /var/lib/apt/lists/*
55+
56+
# Install ROS2
57+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
58+
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg \
59+
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | tee /etc/apt/sources.list.d/ros2.list > /dev/null \
60+
&& apt update && apt install -y --no-install-recommends \
61+
ros-${ROS_DISTRO}-ros-base \
62+
python3-argcomplete \
63+
ros-${ROS_DISTRO}-${RMW_IMPLEMENTATION_DASH} \
64+
&& apt clean \
65+
&& rm -rf /var/lib/apt/lists/*
66+
67+
# Development stage
68+
FROM base AS dev
69+
70+
# Install development tools and dependencies
71+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
72+
apt update && apt install -y --no-install-recommends \
73+
bash-completion \
74+
build-essential \
75+
cmake \
76+
gdb \
77+
openssh-client \
78+
python3-pip \
79+
vim \
80+
doxygen \
81+
graphviz \
82+
python3-sphinx \
83+
python3-breathe \
84+
ros-dev-tools \
85+
ros-${ROS_DISTRO}-ament-* \
86+
python3-rosdep \
87+
libxine2-dev \
88+
libtiff5-dev \
89+
libpostproc-dev \
90+
libopencv-dev \
91+
&& apt clean \
92+
&& rm -rf /var/lib/apt/lists/*
93+
94+
# Initialize rosdep
95+
RUN rosdep init && rosdep update
96+
97+
# Pytorch
98+
# Used by elevation_mapping_cupy
99+
RUN python3 -m pip install -U --extra-index-url https://download.pytorch.org/whl/cu121 \
100+
torch \
101+
torchvision \
102+
torchaudio
103+
104+
# Install Python packages
105+
RUN python3 -m pip install \
106+
# colcon extension to enable easier workspace cleaning
107+
colcon-clean\
108+
# Almost all ros2 packages
109+
rosdoc2\
110+
# sphinx is used across packages for documentation
111+
sphinx_rtd_theme \
112+
sphinx-multiversion \
113+
sphinx-copybutton\
114+
sphinx-tabs\
115+
# For VS Code python code formatting I think?
116+
autopep8\
117+
# Used by multiple packages for linting I think?
118+
flake8-builtins\
119+
flake8-comprehensions\
120+
flake8-docstrings\
121+
flake8-import-order\
122+
flake8-class-newline\
123+
flake8-blind-except\
124+
flake8-quotes\
125+
# For Python code formatting. Not sure what package uses it
126+
# black==21.12b0\
127+
#### For elevation_mapping_cupy ####
128+
ruamel.yaml\
129+
scikit-learn\
130+
shapely\
131+
opencv-python\
132+
cupy-cuda12x\
133+
scipy\
134+
simple-parsing\
135+
"numpy<2.0.0"
136+
137+
# Needed for elevation_mapping_cupy to not have run-time errors
138+
RUN python3 -m pip install transforms3d -U
139+
140+
# Set up non-root user
141+
RUN groupadd --gid $USER_GID $USERNAME \
142+
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
143+
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
144+
&& chmod 0440 /etc/sudoers.d/$USERNAME
145+
146+
# Set up autocompletion and source ROS environment for user
147+
RUN echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> /home/$USERNAME/.bashrc \
148+
&& echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> /home/$USERNAME/.bashrc
149+
150+
# For building GPU supported containers?
151+
# Install NVIDIA Container Toolkit
152+
RUN distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
153+
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
154+
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list \
155+
&& apt update && apt install -y nvidia-container-toolkit \
156+
&& apt clean \
157+
&& rm -rf /var/lib/apt/lists/*
158+
159+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
160+
apt update && apt install -y --no-install-recommends \
161+
# For elevation_mapping_cupy
162+
libboost-all-dev\
163+
&& apt clean && \
164+
rm -rf /var/lib/apt/lists/*
165+
166+
RUN apt update && \
167+
DEBIAN_FRONTEND=${DEBIAN_FRONTEND} apt install -y \
168+
#### For elevation_mapping_cupy ####
169+
ros-${ROS_DISTRO}-grid-map-msgs\
170+
ros-${ROS_DISTRO}-grid-map-ros\
171+
ros-${ROS_DISTRO}-image-transport\
172+
ros-${ROS_DISTRO}-pcl-ros\
173+
ros-${ROS_DISTRO}-cv-bridge\
174+
ros-${ROS_DISTRO}-tf-transformations\
175+
ros-${ROS_DISTRO}-rviz2\
176+
ros-${ROS_DISTRO}-gazebo-ros\
177+
ros-${ROS_DISTRO}-grid-map-cv\
178+
ros-${ROS_DISTRO}-grid-map-core\
179+
ros-${ROS_DISTRO}-grid-map-demos\
180+
##################################
181+
#### For debugging elevation_mapping_cupy by setting up turtlebot3_simulations####
182+
# ros-${ROS_DISTRO}-turtlebot3*\
183+
ros-${ROS_DISTRO}-camera-calibration-parsers\
184+
ros-${ROS_DISTRO}-camera-info-manager\
185+
ros-${ROS_DISTRO}-gazebo-plugins\
186+
ros-${ROS_DISTRO}-turtlebot3-msgs\
187+
ros-${ROS_DISTRO}-turtlebot3-teleop\
188+
ros-${ROS_DISTRO}-gazebo-ros-pkgs\
189+
##############################################
190+
&& apt clean && \
191+
rm -rf /var/lib/apt/lists/*
192+
193+
194+
# Switch to non-root user
195+
USER $USERNAME
196+
197+
# Health check
198+
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
199+
CMD ros2 topic list > /dev/null 2>&1 || exit 1
200+
201+
# Set ID to value not used by others on your network
202+
ENV ROS_DOMAIN_ID=12
203+
204+
# For elevation_mapping_cupy
205+
ENV TURTLEBOT3_MODEL=waffle_realsense_depth
206+
207+
# Set the default command to bash
208+
CMD ["bash"]

docker/setup.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash
2+
cd /workspace
3+
vcs import < src/elevation_mapping_cupy/docker/src.repos src/ --recursive -w $(($(nproc)/2))
4+
5+
sudo apt update
6+
rosdep update
7+
rosdep install --from-paths src --ignore-src -y -r

docker/src.repos

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
repositories:
2+
# elevation_mapping_cupy:
3+
# type: git
4+
# url: https://github.com/jwag/elevation_mapping_cupy.git
5+
# version: ros2_humble
6+
# ros2_numpy needed by elevation_mapping_cupy
7+
ros2_numpy:
8+
type: git
9+
url: https://github.com/Box-Robotics/ros2_numpy.git
10+
version: humble
11+
# added for testing elevation_mapping_cupy
12+
turtlebot3_simulations:
13+
type: git
14+
url: https://github.com/jwag/turtlebot3_simulations.git
15+
version: humble_realsense_depth

0 commit comments

Comments
 (0)