forked from stella-cv/stella_vslam
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c60285b
commit e592648
Showing
1 changed file
with
281 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,281 @@ | ||
FROM ubuntu:18.04 | ||
ENV DEBIAN_FRONTEND noninteractive | ||
|
||
# install dependencies via apt | ||
ENV DEBCONF_NOWARNINGS yes | ||
RUN set -x && \ | ||
apt-get update -y -qq && \ | ||
apt-get upgrade -y -qq --no-install-recommends && \ | ||
: "basic dependencies" && \ | ||
apt-get install -y -qq \ | ||
build-essential \ | ||
pkg-config \ | ||
cmake \ | ||
git \ | ||
wget \ | ||
curl \ | ||
tar \ | ||
unzip && \ | ||
: "g2o dependencies" && \ | ||
apt-get install -y -qq \ | ||
libgoogle-glog-dev \ | ||
libatlas-base-dev \ | ||
libsuitesparse-dev && \ | ||
: "OpenCV dependencies" && \ | ||
apt-get install -y -qq \ | ||
libgtk-3-dev \ | ||
libjpeg-dev \ | ||
libpng++-dev \ | ||
libtiff-dev \ | ||
libopenexr-dev \ | ||
libwebp-dev \ | ||
ffmpeg \ | ||
libavcodec-dev \ | ||
libavformat-dev \ | ||
libavutil-dev \ | ||
libswscale-dev \ | ||
libavresample-dev && \ | ||
: "Pangolin dependencies" && \ | ||
apt-get install -y -qq \ | ||
libglew-dev && \ | ||
: "other dependencies" && \ | ||
apt-get install -y -qq \ | ||
libyaml-cpp-dev && \ | ||
: "remove cache" && \ | ||
apt-get autoremove -y -qq && \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
ARG CMAKE_INSTALL_PREFIX=/usr/local | ||
ARG NUM_THREADS=1 | ||
|
||
ENV CPATH=${CMAKE_INSTALL_PREFIX}/include:${CPATH} | ||
ENV C_INCLUDE_PATH=${CMAKE_INSTALL_PREFIX}/include:${C_INCLUDE_PATH} | ||
ENV CPLUS_INCLUDE_PATH=${CMAKE_INSTALL_PREFIX}/include:${CPLUS_INCLUDE_PATH} | ||
ENV LIBRARY_PATH=${CMAKE_INSTALL_PREFIX}/lib:${LIBRARY_PATH} | ||
ENV LD_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX}/lib:${LD_LIBRARY_PATH} | ||
|
||
ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all} | ||
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics | ||
|
||
# Eigen | ||
ARG EIGEN3_VERSION=3.3.7 | ||
WORKDIR /tmp | ||
RUN set -x && \ | ||
wget -q https://gitlab.com/libeigen/eigen/-/archive/${EIGEN3_VERSION}/eigen-${EIGEN3_VERSION}.tar.bz2 && \ | ||
tar xf eigen-${EIGEN3_VERSION}.tar.bz2 && \ | ||
rm -rf eigen-${EIGEN3_VERSION}.tar.bz2 && \ | ||
cd eigen-${EIGEN3_VERSION} && \ | ||
mkdir -p build && \ | ||
cd build && \ | ||
cmake \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} \ | ||
.. && \ | ||
make -j${NUM_THREADS} && \ | ||
make install && \ | ||
cd /tmp && \ | ||
rm -rf * | ||
ENV Eigen3_DIR=${CMAKE_INSTALL_PREFIX}/share/eigen3/cmake | ||
|
||
# g2o | ||
ARG G2O_COMMIT=9b41a4ea5ade8e1250b9c1b279f3a9c098811b5a | ||
WORKDIR /tmp | ||
RUN set -x && \ | ||
git clone https://github.com/RainerKuemmerle/g2o.git && \ | ||
cd g2o && \ | ||
git checkout ${G2O_COMMIT} && \ | ||
mkdir -p build && \ | ||
cd build && \ | ||
cmake \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} \ | ||
-DBUILD_SHARED_LIBS=ON \ | ||
-DBUILD_UNITTESTS=OFF \ | ||
-DBUILD_WITH_MARCH_NATIVE=OFF \ | ||
-DG2O_USE_CHOLMOD=OFF \ | ||
-DG2O_USE_CSPARSE=ON \ | ||
-DG2O_USE_OPENGL=OFF \ | ||
-DG2O_USE_OPENMP=ON \ | ||
-DG2O_BUILD_APPS=OFF \ | ||
-DG2O_BUILD_EXAMPLES=OFF \ | ||
-DG2O_BUILD_LINKED_APPS=OFF \ | ||
.. && \ | ||
make -j${NUM_THREADS} && \ | ||
make install && \ | ||
cd /tmp && \ | ||
rm -rf * | ||
ENV g2o_DIR=${CMAKE_INSTALL_PREFIX}/lib/cmake/g2o | ||
|
||
# OpenCV | ||
ARG OPENCV_VERSION=3.4.8 | ||
WORKDIR /tmp | ||
RUN set -x && \ | ||
wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ | ||
unzip -q ${OPENCV_VERSION}.zip && \ | ||
rm -rf ${OPENCV_VERSION}.zip && \ | ||
cd opencv-${OPENCV_VERSION} && \ | ||
mkdir -p build && \ | ||
cd build && \ | ||
cmake \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} \ | ||
-DBUILD_DOCS=OFF \ | ||
-DBUILD_EXAMPLES=OFF \ | ||
-DBUILD_JASPER=OFF \ | ||
-DBUILD_OPENEXR=OFF \ | ||
-DBUILD_PERF_TESTS=OFF \ | ||
-DBUILD_TESTS=OFF \ | ||
-DBUILD_opencv_apps=OFF \ | ||
-DBUILD_opencv_dnn=OFF \ | ||
-DBUILD_opencv_ml=OFF \ | ||
-DBUILD_opencv_python_bindings_generator=OFF \ | ||
-DENABLE_CXX11=ON \ | ||
-DENABLE_FAST_MATH=ON \ | ||
-DWITH_EIGEN=ON \ | ||
-DWITH_FFMPEG=ON \ | ||
-DWITH_OPENMP=ON \ | ||
.. && \ | ||
make -j${NUM_THREADS} && \ | ||
make install && \ | ||
cd /tmp && \ | ||
rm -rf * | ||
ENV OpenCV_DIR=${CMAKE_INSTALL_PREFIX}/lib/cmake/opencv4 | ||
|
||
# DBoW2 | ||
ARG DBOW2_COMMIT=687fcb74dd13717c46add667e3fbfa9828a7019f | ||
WORKDIR /tmp | ||
RUN set -x && \ | ||
git clone https://github.com/shinsumicco/DBoW2.git && \ | ||
cd DBoW2 && \ | ||
git checkout ${DBOW2_COMMIT} && \ | ||
mkdir -p build && \ | ||
cd build && \ | ||
cmake \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} \ | ||
.. && \ | ||
make -j${NUM_THREADS} && \ | ||
make install && \ | ||
cd /tmp && \ | ||
rm -rf * | ||
ENV DBoW2_DIR=${CMAKE_INSTALL_PREFIX}/lib/cmake/DBoW2 | ||
|
||
# Pangolin | ||
ARG PANGOLIN_COMMIT=ad8b5f83222291c51b4800d5a5873b0e90a0cf81 | ||
WORKDIR /tmp | ||
RUN set -x && \ | ||
git clone https://github.com/stevenlovegrove/Pangolin.git && \ | ||
cd Pangolin && \ | ||
git checkout ${PANGOLIN_COMMIT} && \ | ||
sed -i -e "193,198d" ./src/utils/file_utils.cpp && \ | ||
mkdir -p build && \ | ||
cd build && \ | ||
cmake \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} \ | ||
-DBUILD_EXAMPLES=OFF \ | ||
-DBUILD_PANGOLIN_DEPTHSENSE=OFF \ | ||
-DBUILD_PANGOLIN_FFMPEG=OFF \ | ||
-DBUILD_PANGOLIN_LIBDC1394=OFF \ | ||
-DBUILD_PANGOLIN_LIBJPEG=OFF \ | ||
-DBUILD_PANGOLIN_LIBOPENEXR=OFF \ | ||
-DBUILD_PANGOLIN_LIBPNG=OFF \ | ||
-DBUILD_PANGOLIN_LIBREALSENSE=OFF \ | ||
-DBUILD_PANGOLIN_LIBREALSENSE2=OFF \ | ||
-DBUILD_PANGOLIN_LIBTIFF=OFF \ | ||
-DBUILD_PANGOLIN_LIBUVC=OFF \ | ||
-DBUILD_PANGOLIN_LZ4=OFF \ | ||
-DBUILD_PANGOLIN_OPENNI=OFF \ | ||
-DBUILD_PANGOLIN_OPENNI2=OFF \ | ||
-DBUILD_PANGOLIN_PLEORA=OFF \ | ||
-DBUILD_PANGOLIN_PYTHON=OFF \ | ||
-DBUILD_PANGOLIN_TELICAM=OFF \ | ||
-DBUILD_PANGOLIN_TOON=OFF \ | ||
-DBUILD_PANGOLIN_UVC_MEDIAFOUNDATION=OFF \ | ||
-DBUILD_PANGOLIN_V4L=OFF \ | ||
-DBUILD_PANGOLIN_VIDEO=OFF \ | ||
-DBUILD_PANGOLIN_ZSTD=OFF \ | ||
-DBUILD_PYPANGOLIN_MODULE=OFF \ | ||
.. && \ | ||
make -j${NUM_THREADS} && \ | ||
make install && \ | ||
cd /tmp && \ | ||
rm -rf * | ||
ENV Pangolin_DIR=${CMAKE_INSTALL_PREFIX}/lib/cmake/Pangolin | ||
|
||
# OpenVSLAM | ||
COPY . /openvslam/ | ||
WORKDIR /openvslam/ | ||
RUN set -x && \ | ||
mkdir -p build && \ | ||
cd build && \ | ||
cmake \ | ||
-DBUILD_WITH_MARCH_NATIVE=OFF \ | ||
-DUSE_PANGOLIN_VIEWER=ON \ | ||
-DUSE_SOCKET_PUBLISHER=OFF \ | ||
-DUSE_STACK_TRACE_LOGGER=ON \ | ||
-DBOW_FRAMEWORK=DBoW2 \ | ||
-DBUILD_TESTS=OFF \ | ||
.. && \ | ||
make -j${NUM_THREADS} && \ | ||
rm -rf CMakeCache.txt CMakeFiles Makefile cmake_install.cmake example src && \ | ||
chmod -R 777 ./* | ||
|
||
# ROS2 | ||
ENV ROS_DISTRO eloquent | ||
|
||
RUN set -x && \ | ||
apt-get update -y -qq && \ | ||
: "for ROS installation" && \ | ||
apt-get install -y -qq \ | ||
lsb-release \ | ||
gnupg2 \ | ||
python3-pip && \ | ||
: "remove cache" && \ | ||
apt-get autoremove -y -qq && \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
RUN set -x && \ | ||
sh -c 'echo "deb http://packages.ros.org/ros2/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros2-latest.list' && \ | ||
apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 && \ | ||
apt-get update -y -qq && \ | ||
: "install ROS1 and ROS2" && \ | ||
apt-get install -y -qq \ | ||
ros-${ROS_DISTRO}-ros-base \ | ||
ros-${ROS_DISTRO}-image-transport \ | ||
python3-colcon-common-extensions && \ | ||
pip3 install -U \ | ||
argcomplete && \ | ||
: "remove cache" && \ | ||
apt-get autoremove -y -qq && \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
WORKDIR /openvslam/ros/2 | ||
|
||
RUN set -x && \ | ||
: "install cv_bridge" && \ | ||
apt-get update -y -qq && \ | ||
apt-get install -y -qq \ | ||
libboost-python-dev && \ | ||
apt-get autoremove -y -qq && \ | ||
rm -rf /var/lib/apt/lists/* && \ | ||
git clone --branch ${ROS_DISTRO} --depth 1 https://github.com/ros-perception/vision_opencv.git && \ | ||
cp -r vision_opencv/cv_bridge src/ && \ | ||
rm -rf vision_opencv | ||
|
||
RUN set -x && \ | ||
: "build ROS2 packages" && \ | ||
bash -c "source /opt/ros/${ROS_DISTRO}/setup.bash; \ | ||
colcon build --parallel-workers ${NUM_THREADS} --cmake-args \ | ||
-DBUILD_WITH_MARCH_NATIVE=ON \ | ||
-DUSE_PANGOLIN_VIEWER=ON \ | ||
-DUSE_SOCKET_PUBLISHER=OFF \ | ||
-DUSE_STACK_TRACE_LOGGER=ON \ | ||
-DBOW_FRAMEWORK=DBoW2" | ||
|
||
RUN set -x && \ | ||
sh -c "echo '#'\!'/bin/bash\nset -e\nsource /opt/ros/${ROS_DISTRO}/setup.bash\nsource /openvslam/ros/2/install/setup.bash\nexec \"\$@\"' > /ros_entrypoint.sh" && \ | ||
chmod u+x /ros_entrypoint.sh | ||
|
||
ENTRYPOINT ["/ros_entrypoint.sh"] | ||
CMD ["bash"] |