-
Notifications
You must be signed in to change notification settings - Fork 559
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added dockerfile with superpoint/superglue
- Loading branch information
Showing
2 changed files
with
152 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,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 | ||
|
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,6 @@ | ||
#!/bin/bash | ||
set -e | ||
|
||
# setup ros environment | ||
source "/opt/ros/noetic/setup.bash" -- | ||
exec "$@" |