From b6829f91d193b14ecc5e5ee9f1f762d41aa1c149 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Tue, 9 Jun 2020 21:16:46 -0400 Subject: [PATCH] Docker: added noetic image. Updated travis for focal. --- .travis.yml | 31 +++++++++++++++++++ README.md | 51 ++++++++++++++------------------ docker/README.md | 1 + docker/noetic/Dockerfile | 6 ++++ docker/noetic/latest/Dockerfile | 13 ++++++++ docker/noetic/latest/hooks/build | 2 ++ 6 files changed, 75 insertions(+), 29 deletions(-) create mode 100644 docker/noetic/Dockerfile create mode 100644 docker/noetic/latest/Dockerfile create mode 100644 docker/noetic/latest/hooks/build diff --git a/.travis.yml b/.travis.yml index cc9cf53d..bb9d9a7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -102,6 +102,37 @@ matrix: - source devel/setup.bash - catkin_make - catkin_make install + + - dist: focal + install: + - sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list' + - wget http://packages.ros.org/ros.key -O - | sudo apt-key add - + - sudo apt-get update + - sudo apt-get install dpkg + - sudo apt-get -y install ros-noetic-rtabmap-ros + - sudo apt-get -y remove ros-noetic-rtabmap + + script: + - source /opt/ros/noetic/setup.bash + - cd .. + - mkdir -p catkin_ws/src + - cd catkin_ws/src + - catkin_init_workspace + - cd .. + - catkin_make + - cd .. + - mv rtabmap_ros catkin_ws/src/. + - git clone https://github.com/introlab/rtabmap.git + - cd rtabmap + - if [ "$TRAVIS_BRANCH" = "devel" ]; then git checkout devel; fi + - mkdir -p build && cd build + - cmake -DCMAKE_INSTALL_PREFIX=~/build/introlab/catkin_ws/devel .. + - make + - make install + - cd ../../catkin_ws + - source devel/setup.bash + - catkin_make + - catkin_make install notifications: email: diff --git a/README.md b/README.md index c64f9b85..dbec88e7 100644 --- a/README.md +++ b/README.md @@ -14,22 +14,18 @@ For the RTAB-Map libraries and standalone application, visit [RTAB-Map's home pa ## ROS distribution RTAB-Map is released as binaries in the ROS distribution. +* Noetic + ``` + $ sudo apt-get install ros-noetic-rtabmap-ros + ``` * Melodic ``` $ sudo apt-get install ros-melodic-rtabmap-ros ``` -* Lunar - ``` - $ sudo apt-get install ros-lunar-rtabmap-ros - ``` * Kinetic ``` $ sudo apt-get install ros-kinetic-rtabmap-ros ``` -* Jade - ``` - $ sudo apt-get install ros-jade-rtabmap-ros - ``` * Indigo ``` $ sudo apt-get install ros-indigo-rtabmap-ros @@ -40,16 +36,11 @@ RTAB-Map is released as binaries in the ROS distribution. $ git clone -b indigo-devel https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros $ catkin_make -j1 ``` -* Hydro: - ``` - $ sudo apt-get install ros-hydro-rtabmap-ros - ``` - * Note that rtabmap_ros Hydro binaries are stuck at version 0.8.12. To use the latest version, see [Build from source](https://github.com/introlab/rtabmap_ros#build-from-source) below. -When launching `rtabmap_ros`'s nodes, if you have the error `error while loading shared libraries...`, add the next line at the end of your `~/.bashrc` to fix it: +When launching `rtabmap_ros`'s nodes, if you have the error `error while loading shared libraries...`, try `ldconfig` or add the next line at the end of your `~/.bashrc` to fix it: ```bash -$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ros/melodic/lib/x86_64-linux-gnu +$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ros/noetic/lib/x86_64-linux-gnu ``` ### Docker @@ -58,33 +49,32 @@ $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ros/melodic/lib/x86_64-linux-gnu ## Build from source -This section shows how to install RTAB-Map ros-pkg on **ROS Hydro/Indigo/Jade/Kinetic/Lunar/Melodic** (Catkin build). RTAB-Map works only with the PCL >=1.7, which is the default version installed with ROS Hydro/Indigo/Jade/Kinetic/Lunar/Melodic (**Fuerte and Groovy are not supported**). +This section shows how to install RTAB-Map ros-pkg on **ROS Hydro/Indigo/Jade/Kinetic/Lunar/Melodic/Noetic** (Catkin build). RTAB-Map works only with the PCL >=1.7, which is the default version installed with ROS Hydro/Indigo/Jade/Kinetic/Lunar/Melodic/Noetic (**Fuerte and Groovy are not supported**). -* The next instructions assume that you have set up your ROS workspace using this [tutorial](http://wiki.ros.org/catkin/Tutorials/create_a_workspace). I will use melodic prefix for convenience, but it should work with Hydro, Indigo, Jade, Kinetic and Lunar. The workspace path is `~/catkin_ws` and your `~/.bashrc` contains: +* The next instructions assume that you have set up your ROS workspace using this [tutorial](http://wiki.ros.org/catkin/Tutorials/create_a_workspace). I will use `noetic` prefix for convenience, but it should work with Hydro, Indigo, Jade, Kinetic, Lunar and Melodic. The workspace path is `~/catkin_ws` and your `~/.bashrc` contains: ```bash - $ source /opt/ros/melodic/setup.bash + $ source /opt/ros/noetic/setup.bash $ source ~/catkin_ws/devel/setup.bash ``` 0. Required dependencies * The easiest way to get all them (Qt, PCL, VTK, OpenCV, ...) is to install/uninstall rtabmap binaries: ```bash - $ sudo apt-get install ros-melodic-rtabmap ros-melodic-rtabmap-ros - $ sudo apt-get remove ros-melodic-rtabmap ros-melodic-rtabmap-ros + $ sudo apt-get install ros-melodic-rtabmap ros-noetic-rtabmap-ros + $ sudo apt-get remove ros-melodic-rtabmap ros-noetic-rtabmap-ros ``` 1. Optional dependencies - * If you want SURF/SIFT on Indigo/Jade (Hydro has already SIFT/SURF), you have to build [OpenCV]([OpenCV](http://opencv.org/)) from source to have access to *nonfree* module. Install it in `/usr/local` (default) and the rtabmap library should link with it instead of the one installed in ROS. - * On Indigo/Jade, I recommend to use latest 2.4 version ([2.4.11](https://github.com/Itseez/opencv/archive/2.4.11.zip)) and build it from source following these [instructions](http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html#building-opencv-from-source-using-cmake-using-the-command-line). RTAB-Map can build with OpenCV3+[xfeatures2d](https://github.com/Itseez/opencv_contrib/tree/master/modules/xfeatures2d) module, but rtabmap_ros package will have libraries conflict as cv-bridge is depending on OpenCV2. If you want OpenCV3, you should build ros [vision-opencv](https://github.com/ros-perception/vision_opencv) package yourself (and all ros packages depending on it) so it can link on OpenCV3. - * On Kinetic/Lunar/Melodic, I recommend to use OpenCV3+[xfeatures2d](https://github.com/Itseez/opencv_contrib/tree/master/modules/xfeatures2d) module already installed by ROS. You can also install OpenCV2, but rtabmap_ros package will have libraries conflict as cv-bridge is depending on OpenCV3. Thus if you want OpenCV2 on Kinetic/Lunar/Melodic, you should build ros [vision-opencv](https://github.com/ros-perception/vision_opencv) package yourself (and all ros packages depending on it) so it can link on OpenCV2. + * If you want SURF/SIFT on Indigo/Jade/Melodic/Noetic (Hydro/Kinetic has already SIFT/SURF), you have to build [OpenCV]([OpenCV](http://opencv.org/)) from source to have access to *xfeatures2d* and *nonfree* modules (note that SIFT is not in *nonfree* anymore since OpenCV 4.4.0). Install it in `/usr/local` (default) and rtabmap library should link with it instead of the one installed in ROS. + * On Indigo, I recommend to use latest 2.4 version ([2.4.11](https://github.com/Itseez/opencv/archive/2.4.11.zip)) and build it from source following these [instructions](http://docs.opencv.org/doc/tutorials/introduction/linux_install/linux_install.html#building-opencv-from-source-using-cmake-using-the-command-line). RTAB-Map can build with OpenCV3+[xfeatures2d](https://github.com/Itseez/opencv_contrib/tree/master/modules/xfeatures2d) module, but `rtabmap_ros` package will have libraries conflict as `cv_bridge` is depending on OpenCV2. If you want OpenCV3+, you should build [vision-opencv](https://github.com/ros-perception/vision_opencv) package yourself (and all ros packages depending on it) so it can link on OpenCV3+. + * On Kinetic/Melodic/Noetic, build from source with *xfeatures2d* module (and *nonfree* module if needed) the same OpenCV version already installed on the system. You will then avoid breaking `cv_bridge` with `rtabmap_ros`. If you want to install a more recent OpenCV version, I recommend to uninstall `libopencv*` libraries (with all ros packages depending on it) and rebuild all those ros packages in your catkin workspace (to make sure `cv_bridge` is linked on the OpenCV version you just compiled). - * g2o: Use directly the binaries `ros-melodic-libg2o`. However, [this g2o version](https://github.com/felixendres/g2o/tree/c++03) (c++03 branch) built from source may be faster than the binaries (install `libsuitesparse-dev` before building `g2o`) and would be [required to avoid some crashes](http://official-rtab-map-forum.67519.x6.nabble.com/ROS-2D-occupancy-grid-tp1204p1215.html). To build RTAB-Map against [latest official g2o version](https://github.com/RainerKuemmerle/g2o) built from source, g2o should be built with `-DBUILD_WITH_MARCH_NATIVE=OFF` to avoid some segmentation faults caused by Eigen. + * g2o: Should be already installed by `ros-noetic-libg2o`. - * [GTSAM](https://collab.cc.gatech.edu/borg/gtsam): Follow installation instructions from [here](https://collab.cc.gatech.edu/borg/gtsam/#quickstart). RTAB-Map needs latest version from source, it will **not build** with 3.2.1. Set cmake variable `GTSAM_USE_SYSTEM_EIGEN=ON` to make sure the same Eigen version is used across all dependencies to avoid crashes. - ```bash - git clone https://bitbucket.org/gtborg/gtsam.git - ``` + * [GTSAM](https://gtsam.org/get_started/): Install via PPA to avoid building from source. + + * [libpointmatcher](https://github.com/ethz-asl/libpointmatcher): **Recommended** if you are going to use lidars. Follow their [instructions](https://github.com/ethz-asl/libpointmatcher#quick-start) to install. 2. Install RTAB-Map standalone libraries. Add `-DCMAKE_INSTALL_PREFIX=~/catkin_ws/devel` to `cmake` command below if you want to install in your Catkin's devel folder without `sudo`. **Do not clone in your Catkin workspace**. ```bash @@ -103,7 +93,10 @@ This section shows how to install RTAB-Map ros-pkg on **ROS Hydro/Indigo/Jade/Ki $ git clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros $ catkin_make -j1 ``` - * Use `catkin_make -j1` if compilation requires more RAM than you have (e.g., some files require up to ~1.8 GB to build). + * Use `catkin_make -j1` if compilation requires more RAM than you have (e.g., some files require up to ~2 GB to build depending on gcc version). + * Options: + * Add `-DRTABMAP_SYNC_MULTI_RGBD=ON` to `catkin_make` if you plan to use multiple cameras. + * Add `-DRTABMAP_SYNC_USER_DATA=ON` to `catkin_make` if you plan to use user data synchronized topics. ## Build from source for Nvidia Jetson These instructions are for Jetpack 3 (Ubuntu 16.04 with ROS Kinetic). For **Jetpack 4** (Ubuntu 18.04 with ROS Melodic), see this [post](https://github.com/introlab/rtabmap/issues/427#issuecomment-608052821). diff --git a/docker/README.md b/docker/README.md index 8de92b0f..3bf5a633 100644 --- a/docker/README.md +++ b/docker/README.md @@ -5,6 +5,7 @@ indigo, indigo-latest kinetic, kinetic-latest melodic, melodic-latest + noetic, noetic-latest ``` * The `-latest` images are automatically built from latest version of `rtabmap` and `rtabmap_ros` from source. The other images have the same version than the binaries released on ROS. diff --git a/docker/noetic/Dockerfile b/docker/noetic/Dockerfile new file mode 100644 index 00000000..b8a7d465 --- /dev/null +++ b/docker/noetic/Dockerfile @@ -0,0 +1,6 @@ +FROM ros:noetic-perception +# install rtabmap packages +RUN apt-get update && apt-get install -y \ + ros-noetic-rtabmap \ + ros-noetic-rtabmap-ros \ + && rm -rf /var/lib/apt/lists/ diff --git a/docker/noetic/latest/Dockerfile b/docker/noetic/latest/Dockerfile new file mode 100644 index 00000000..44a95a74 --- /dev/null +++ b/docker/noetic/latest/Dockerfile @@ -0,0 +1,13 @@ +FROM introlab3it/rtabmap:20.04 + +ARG CACHE_DATE=2016-01-01 + +RUN source /ros_entrypoint.sh && \ + mkdir -p catkin_ws/src && \ + cd catkin_ws/src && \ + catkin_init_workspace && \ + git clone https://github.com/introlab/rtabmap_ros.git && \ + cd .. && \ + catkin_make -j1 -DCMAKE_INSTALL_PREFIX=/opt/ros/noetic install && \ + cd && \ + rm -rf catkin_ws diff --git a/docker/noetic/latest/hooks/build b/docker/noetic/latest/hooks/build new file mode 100644 index 00000000..3cd4a5f9 --- /dev/null +++ b/docker/noetic/latest/hooks/build @@ -0,0 +1,2 @@ +#!/bin/bash +docker build --build-arg CACHE_DATE="$(date)" --cache-from $IMAGE_NAME -f $DOCKERFILE_PATH -t $IMAGE_NAME -t $DOCKER_REPO:noetic-latest .