Updated Dockerfile for ROS-SLAM
I have modified lines 57, 75, 77, and 64-72.unknown
dockerfile
4 years ago
9.8 kB
86
Indexable
#
# ROS2 with ORBSLAM2, RTABMap, ZED, and Realsense2
#
ARG BASE_IMAGE=dustynv/ros:foxy-ros-base-pytorch-l4t-r32.5.0
FROM ${BASE_IMAGE}
SHELL ["/bin/bash", "-c"]
ENV SHELL /bin/bash
ENV DEBIAN_FRONTEND=noninteractive
ARG MAKEFLAGS=-j$(nproc)
ENV LANG=en_US.UTF-8
ENV PYTHONIOENCODING=utf-8
RUN locale-gen en_US en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV PYTORCH_PATH="/usr/local/lib/python3.6/dist-packages/torch"
ENV LD_LIBRARY_PATH="${PYTORCH_PATH}/lib:${LD_LIBRARY_PATH}"
ARG ROS_ENVIRONMENT=${ROS_ROOT}/install/setup.bash
#
# upgrade cmake - https://stackoverflow.com/a/56690743
# this is needed for rtabmap which uses FindPython3.cmake
#
RUN apt-get update && \
apt-get install -y --no-install-recommends \
software-properties-common \
apt-transport-https \
ca-certificates \
gnupg \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
RUN wget -qO - https://apt.kitware.com/keys/kitware-archive-latest.asc | apt-key add - && \
apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' && \
apt-get update && \
apt-get install -y --only-upgrade --no-install-recommends \
cmake \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean \
&& cmake --version
#
# orbslam2 - https://github.com/alsora/ros2-ORB_SLAM2
# TODO build https://github.com/DrTimothyAldenDavis/SuiteSparse from source for CUDA if any advantage?
#
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ffmpeg \
libglew-dev \
libboost-all-dev \
libboost-system-dev \
libcanberra-gtk-module \
libsuitesparse-dev \
libxkbcommon-dev \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# This is my, Luka's, try at fixing the error that comes from trying to clone pangolin. My solution is to
# install pkg-config before pangolin is cloned.
#
RUN apt-get update && \
apt-get install -y --no-install-recommends \
pkg-config \
wayland-protocols \
libeigen3-dev \
libopenni2-dev && \
ln -s /usr/include/eigen3/Eigen /usr/include/Eigen \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# pangolin
RUN git clone --recursive https://github.com/stevenlovegrove/Pangolin.git /tmp/pangolin && \
cd /tmp/pangolin && \
./scripts/install_prerequisites.sh recommended && \
mkdir build && \
cd build && \
cmake ../ && \
make -j$(nproc) && \
make install
# orbslam2
#ENV ORB_SLAM2_ROOT_DIR="/opt/ORB_SLAM2"
#RUN git clone https://github.com/Windfisch/ORB_SLAM2 ${ORB_SLAM2_ROOT_DIR} && \
# cd ${ORB_SLAM2_ROOT_DIR} && \
# wget --no-check-certificate https://github.com/alsora/ros2-ORB_SLAM2/raw/master/docker/scripts/build.sh && \
# wget --no-check-certificate https://github.com/alsora/ros2-ORB_SLAM2/raw/master/docker/scripts/orbslam.patch && \
# git apply orbslam.patch && \
# bash build.sh
ENV ORB_SLAM2_ROOT_DIR="/opt/ORB_SLAM2_CUDA"
RUN git clone https://github.com/dusty-nv/ORB_SLAM2_CUDA ${ORB_SLAM2_ROOT_DIR} && \
cd ${ORB_SLAM2_ROOT_DIR} && \
bash build.sh && make -j1\
ln -s ${ORB_SLAM2_ROOT_DIR}/lib/libORB_SLAM2_CUDA.so ${ORB_SLAM2_ROOT_DIR}/lib/libORB_SLAM2.so
# ros2_orbslam
RUN source ${ROS_ENVIRONMENT} && \
cd ${ROS_ROOT} && \
mkdir -p src/slam && \
git clone https://github.com/alsora/ros2-ORB_SLAM2 src/slam/ros2-ORB_SLAM2 && \
colcon build \
--base-paths src/slam \
--cmake-args -DCMAKE_CXX_FLAGS=-isystem\ /usr/local/cuda/include \
--event-handlers console_direct+ \
--merge-install \
&& rm -rf ${ROS_ROOT}/src \
&& rm -rf ${ROS_ROOT}/logs \
&& rm -rf ${ROS_ROOT}/build
#
# rtabmap - https://github.com/introlab/rtabmap_ros/tree/ros2
#
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libpcl-dev \
libpython3-dev \
python3-dev \
libsuitesparse-dev \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# install recommended dependencies - https://github.com/introlab/rtabmap/wiki/Installation#dependencies
# note: disable g2o when using orbslam, because orbslam has its own g2o
#RUN git clone https://github.com/RainerKuemmerle/g2o /tmp/g2o && \
# cd /tmp/g2o && \
# mkdir build && \
# cd build && \
# cmake -DBUILD_WITH_MARCH_NATIVE=OFF -DG2O_BUILD_APPS=OFF -DG2O_BUILD_EXAMPLES=OFF -DG2O_USE_OPENGL=OFF .. && \
# make -j$(nproc) && \
# make install && \
# rm -rf /tmp/g2o
RUN git clone https://github.com/borglab/gtsam /tmp/gtsam && \
cd /tmp/gtsam && \
mkdir build && \
cd build && \
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF -DGTSAM_WITH_TBB=OFF .. && \
make -j$(nproc) && \
make install && \
rm -rf /tmp/gtsam
RUN git clone https://github.com/ethz-asl/libnabo /tmp/libnabo && \
cd /tmp/libnabo && \
mkdir build && \
cd build && \
cmake .. && \
make -j$(nproc) && \
make install && \
rm -rf /tmp/libnabo
RUN git clone https://github.com/ethz-asl/libpointmatcher /tmp/libpointmatcher && \
cd /tmp/libpointmatcher && \
mkdir build && \
cd build && \
cmake .. && \
make -j$(nproc) && \
make install && \
rm -rf /tmp/libpointmatcher
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libyaml-cpp-dev \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# build rtabmap / rtabmap_ros
RUN git clone https://github.com/introlab/rtabmap.git /opt/rtabmap && \
cd /opt/rtabmap/build && \
cmake -DWITH_PYTHON=ON -DWITH_TORCH=ON -DTorch_DIR=${PYTORCH_PATH}/share/cmake/Torch .. && \
make -j$(nproc) && \
make install
# since rtabmap_ros is an 'unreleased' package for ros2, manually pull it's dependencies from
# https://github.com/introlab/rtabmap_ros/blob/dfdbe1f68314e851e017c8af3788b17518a5000b/package.xml#L24
RUN source ${ROS_ENVIRONMENT} && \
export ROS_PACKAGE_PATH=${AMENT_PREFIX_PATH} && \
cd ${ROS_ROOT} && \
mkdir -p src/slam && \
# download sources for dependency packages
rosinstall_generator --deps --exclude RPP --rosdistro ${ROS_DISTRO} \
octomap \
nav2_common \
laser_geometry \
pcl_conversions \
rviz_common \
rviz_rendering \
rviz_default_plugins \
realsense2_camera \
realsense2_description \
diagnostic_updater \
compressed_image_transport \
compressed_depth_image_transport \
> ros2.${ROS_DISTRO}.rtabmap.rosinstall && \
cat ros2.${ROS_DISTRO}.rtabmap.rosinstall && \
vcs import src/slam < ros2.${ROS_DISTRO}.rtabmap.rosinstall && \
# install apt/deb dependencies using rosdep
apt-get update && \
rosdep install -y \
--ignore-src \
--from-paths src/slam \
--rosdistro ${ROS_DISTRO} \
--skip-keys "rtabmap find_object_2d Pangolin libopencv-dev libopencv-contrib-dev libopencv-imgproc-dev python-opencv python3-opencv" && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean && \
# build the dependency packages
colcon build --merge-install --base-paths src/slam && \
# clean-up build files
rm -rf ${ROS_ROOT}/src && \
rm -rf ${ROS_ROOT}/logs && \
rm -rf ${ROS_ROOT}/build && \
rm ${ROS_ROOT}/*.rosinstall
# build rtabmap_ros, but first patch it to import tf2_geometry_msgs correctly
RUN source ${ROS_ENVIRONMENT} && \
cd ${ROS_ROOT} && \
mkdir -p src/slam && \
# download and patch source
git clone --branch ros2 https://github.com/introlab/rtabmap_ros.git src/slam/rtabmap_ros && \
sed -i '/find_package(tf2_ros REQUIRED)/a find_package(tf2_geometry_msgs REQUIRED)' src/slam/rtabmap_ros/CMakeLists.txt && \
sed -i '/ tf2_ros/a tf2_geometry_msgs' src/slam/rtabmap_ros/CMakeLists.txt && \
# install apt/deb dependencies using rosdep
apt-get update && \
rosdep install -y \
--ignore-src \
--from-paths src/slam \
--rosdistro ${ROS_DISTRO} \
--skip-keys "rtabmap find_object_2d Pangolin libopencv-dev libopencv-contrib-dev libopencv-imgproc-dev python-opencv python3-opencv" && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean && \
# build the node
colcon build \
--merge-install \
--base-paths src/slam/rtabmap_ros \
--event-handlers console_direct+ && \
# clean-up build files
rm -rf ${ROS_ROOT}/src && \
rm -rf ${ROS_ROOT}/logs && \
rm -rf ${ROS_ROOT}/build
#
# ZED SDK / zed-ros2-wrapper
# https://github.com/stereolabs/zed-docker/blob/master/3.X/jetpack_4.X/devel/Dockerfile
#
ARG ZED_SDK_URL="https://download.stereolabs.com/zedsdk/3.5/jp45/jetsons"
ARG ZED_SDK_RUN="ZED_SDK_Linux_JP.run"
RUN cd /tmp && \
wget --quiet --show-progress --progress=bar:force:noscroll --no-check-certificate ${ZED_SDK_URL} -O ${ZED_SDK_RUN} && \
chmod +x ${ZED_SDK_RUN} && \
./${ZED_SDK_RUN} silent skip_tools && \
rm -rf /usr/local/zed/resources/* && \
rm -rf ${ZED_SDK_RUN} && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean
RUN source ${ROS_ENVIRONMENT} && \
cd ${ROS_ROOT} && \
mkdir -p src/slam && \
git clone https://github.com/stereolabs/zed-ros2-wrapper src/slam/zed-ros2-wrapper && \
# install apt/deb dependencies using rosdep
apt-get update && \
rosdep install -y \
--ignore-src \
--from-paths src/slam \
--rosdistro ${ROS_DISTRO} \
--skip-keys "rtabmap find_object_2d Pangolin libopencv-dev libopencv-contrib-dev libopencv-imgproc-dev python-opencv python3-opencv" && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean && \
# build the node
colcon build \
--merge-install \
--base-paths src/slam/zed-ros2-wrapper \
--cmake-args=-DCMAKE_BUILD_TYPE=Release && \
# clean-up build files
rm -rf ${ROS_ROOT}/src && \
rm -rf ${ROS_ROOT}/logs && \
rm -rf ${ROS_ROOT}/buildEditor is loading...