Skip to content

Commit

Permalink
Added dockerfile with superpoint/superglue
Browse files Browse the repository at this point in the history
  • Loading branch information
matlabbe committed Jun 28, 2023
1 parent 4cbdb2d commit c1d1c01
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 0 deletions.
146 changes: 146 additions & 0 deletions docker/noetic/superpoint/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# Image built with pytorch/CUDA support (SuperPoint, SuperGlue, OpenCV+nonfree+xfeatures2d)
#
#
# Create image:
#
# cd rtabmap_ros
# docker build -t rtabmap_ros:superpoint -f docker/noetic/superpoint/Dockerfile .
#
#
#
# Example of usage (using superpoint + superglue for loop closure detection) with D435i:
#
# [Camera]
# docker run -it --rm --network host --privileged rtabmap_ros:superpoint roslaunch realsense2_camera rs_camera.launch enable_infra1:=true enable_infra2:=true unite_imu_method:=linear_interpolation enable_gyro:=true enable_accel:=true enable_sync:=true
#
# [IMU filter]
# docker run -it --rm --network host rtabmap_ros:superpoint rosrun imu_filter_madgwick imu_filter_node _use_mag:=false _publish_tf:=false _world_frame:="enu" /imu/data_raw:=/camera/imu /imu/data:=/rtabmap/imu
#
# [VSLAM]
# docker run -it --rm --user $UID -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all --runtime=nvidia -e ROS_HOME=/tmp/.ros --network host -v ~/.ros:/tmp/.ros rtabmap_ros:superpoint roslaunch rtabmap_launch rtabmap.launch rtabmap_viz:=false database_path:=/tmp/.ros/rtabmap.db rtabmap_args:="--delete_db_on_start --SuperPoint/ModelPath /workspace/superpoint_v1.pt --PyMatcher/Path /workspace/SuperGluePretrainedNetwork/rtabmap_superglue.py --Kp/DetectorStrategy 11 --Vis/CorNNType 6 --Reg/RepeatOnce false --Vis/CorGuessWinSize 0" odom_args:="--Vis/CorNNType 1 --Reg/RepeatOnce true --Vis/CorGuessWinSize 40" left_image_topic:=/camera/infra1/image_rect_raw right_image_topic:=/camera/infra2/image_rect_raw left_camera_info_topic:=/camera/infra1/camera_info right_camera_info_topic:=/camera/infra2/camera_info stereo:=true wait_imu_to_init:=true imu_topic:=/rtabmap/imu
#
# [Visualization - optional]
# XAUTH=/tmp/.docker.xauth
# touch $XAUTH
# xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
# docker run -it --rm --privileged -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all -e XAUTHORITY=$XAUTH --runtime=nvidia --network host -v $XAUTH:$XAUTH -v /tmp/.X11-unix:/tmp/.X11-unix rtabmap_ros:superpoint /bin/bash -c "export ROS_NAMESPACE=rtabmap && rosrun rtabmap_viz rtabmap_viz _subscribe_odom_info:=true left/image_rect:=/camera/infra1/image_rect_raw right/image_rect:=/camera/infra2/image_rect_raw left/camera_info:=/camera/infra1/camera_info right/camera_info:=/camera/infra2/camera_info _subscribe_stereo:=true"
#
FROM nvcr.io/nvidia/pytorch:22.08-py3

ENV DEBIAN_FRONTEND=noninteractive

# Install build dependencies
RUN apt-get update && apt-get install -y \
libsqlite3-dev \
git \
cmake \
libyaml-cpp-dev \
software-properties-common \
pkg-config \
wget \
curl \
libpdal-dev && \
apt-get clean && rm -rf /var/lib/apt/lists/

# Install ros keys
RUN apt update && \
sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' && \
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add -

# Install ros dependencies
RUN apt-get update && \
apt upgrade -y && \
apt-get install -y git ros-noetic-ros-base python3-catkin-tools python3-rosdep build-essential ros-noetic-rtabmap-ros && \
apt-get remove -y ros-noetic-rtabmap && \
rosdep init && \
apt-get clean && rm -rf /var/lib/apt/lists/

# GTSAM
RUN add-apt-repository ppa:borglab/gtsam-release-4.0 && \
apt install -y libgtsam-dev libgtsam-unstable-dev

# MRPT
RUN add-apt-repository ppa:joseluisblancoc/mrpt-stable -y && \
apt-get update && apt install libmrpt-poses-dev -y && \
apt-get clean && rm -rf /var/lib/apt/lists/

# OpenCV with xfeatures2d, cuda and nonfree modules (use same version used by noetic to avoid cv_bridge conflicts)
RUN git clone https://github.com/opencv/opencv_contrib.git && \
git clone https://github.com/opencv/opencv.git && \
cd opencv_contrib && \
git checkout tags/4.2.0 && \
cd /workspace && \
cd opencv && \
git checkout tags/4.2.0 && \
mkdir build && \
cd build && \
cmake -DOPENCV_EXTRA_MODULES_PATH=/workspace/opencv_contrib/modules -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DOPENCV_ENABLE_NONFREE=ON .. && \
make -j$(nproc) && \
make install && \
cd /workspace && \
rm -rf opencv opencv_contrib

# OpenGV
RUN git clone https://github.com/laurentkneip/opengv.git && \
cd opengv && \
git checkout 91f4b19c73450833a40e463ad3648aae80b3a7f3 && \
wget https://gist.githubusercontent.com/matlabbe/a412cf7c4627253874f81a00745a7fbb/raw/accc3acf465d1ffd0304a46b17741f62d4d354ef/opengv_disable_march_native.patch && \
git apply opengv_disable_march_native.patch && \
mkdir build && \
cd build && \
cmake -DCMAKE_BUILD_TYPE=Release .. && \
make -j$(nproc) && \
make install && \
cd /workspace && \
rm -r opengv

# Setup ROS entrypoint
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

COPY ./docker/noetic/superpoint/ros_entrypoint.sh /ros_entrypoint.sh
RUN chmod +x /ros_entrypoint.sh
ENTRYPOINT [ "/ros_entrypoint.sh" ]

# Get rtabmap library
# Create Superpoint model with current pytorch version
# Setup Superglue
#Build/install rtabmap library
RUN git clone https://github.com/introlab/rtabmap rtabmap && \
cd rtabmap/archive/2022-IlluminationInvariant/scripts && \
wget https://github.com/magicleap/SuperPointPretrainedNetwork/raw/master/superpoint_v1.pth && \
wget https://raw.githubusercontent.com/magicleap/SuperPointPretrainedNetwork/master/demo_superpoint.py && \
python3 trace.py && \
mv superpoint_v1.pt /workspace/. && \
cd /workspace && \
git clone https://github.com/magicleap/SuperGluePretrainedNetwork && \
cp rtabmap/corelib/src/python/rtabmap_superglue.py SuperGluePretrainedNetwork/. && \
source /ros_entrypoint.sh && \
cd rtabmap/build && \
cmake -DCMAKE_INSTALL_PREFIX=/opt/ros/noetic -DTorch_DIR=/opt/conda/lib/python3.8/site-packages/torch/share/cmake/Torch -DWITH_TORCH=ON -DWITH_PYTHON=ON .. && \
make -j$(nproc) && \
make install && \
cd ../.. && \
rm -rf rtabmap && \
ldconfig

# Setup catkin workspace
RUN source /ros_entrypoint.sh && \
mkdir -p catkin_ws/src && \
cd catkin_ws && \
catkin init && \
catkin config --install --install-space /opt/ros/noetic

COPY . catkin_ws/src/rtabmap_ros

# build packages
RUN source /ros_entrypoint.sh && \
cd catkin_ws && \
apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y && \
apt remove ros-$ROS_DISTRO-rtabmap* -y && \
apt-get clean && rm -rf /var/lib/apt/lists/ && \
catkin build --cmake-args -DPYTHON_EXECUTABLE=/usr/bin/python3 -DRTABMAP_SYNC_MULTI_RGBD=ON && \
cd /workspace && \
rm -rf catkin_ws

6 changes: 6 additions & 0 deletions docker/noetic/superpoint/ros_entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash
set -e

# setup ros environment
source "/opt/ros/noetic/setup.bash" --
exec "$@"

0 comments on commit c1d1c01

Please sign in to comment.