-
Notifications
You must be signed in to change notification settings - Fork 399
Instructions for Compiling Rgbdslam (V2) on a Fresh Ubuntu 16.04 Install (Ros Kinetic) in Virtualbox
Instructions for Compiling Rgbdslam (V2) on a Fresh Ubuntu 16.04 Install (Ros Kinetic) in Virtualbox
RAM: Allocating 2.5 gigs of ram to virtualbox was not sufficient to compile the point cloud library. Upping it to 4.5 gigs worked though.
VIRTUAL DISK: A disk size of 16GB is too small. Ran out of space 2/3rds of the way through compiling PCL. 40GB easily does the job, though. I used a fixed size virtual disk.
2. Installing ROS Kinetic as per instructions at http://wiki.ros.org/kinetic/Installation/Ubuntu
sudo su
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
hit Ctrl-d to stop being root (if you "sudo su"'d above)
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt-get install python-rosinstall
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
4. Clone rgbdslam from github (https://github.com/felixendres/rgbdslam_v2)
cd ~/catkin_ws/src
git clone https://github.com/felixendres/rgbdslam_v2
5. If not using a fresh Ubuntu install, check to make sure you don't already have conflicting version of g2o installed
dpkg -l | grep [Gg]2[Oo]
ls /usr/local/lib
ls /usr/lib | grep [Gg]2[Oo]
possibly also check /opt/ros/kinetic/lib?
sudo apt-get install libsuitesparse-dev
this will prevent errors mentioning "cholmod" or variations thereof
note: g2o will compile without doing this, but you'll have the above error later.
7. Download and extract eigen 3.2.10 header files -- eigen consists only of header files, no binary libs to compile or link against
mkdir ~/src
cd ~/src
wget http://bitbucket.org/eigen/eigen/get/3.2.10.tar.bz2
mkdir eigen
tar -xvjf 3.2.10.tar.bz2 -C eigen --strip-components 1
note: no need to make or make install. we'll use the header files in place.
8. download g2o fork as per instructions at https://github.com/felixendres/rgbdslam_v2
cd ~/src
git clone https://github.com/felixendres/g2o.git
cd ~/src/g2o
mkdir ~/src/g2o/build
cd ~/src/g2o/build
vi ~/src/g2o/CMakeLists.txt
change line 251 from:
SET(G2O_EIGEN3_INCLUDE ${EIGEN3_INCLUDE_DIR} CACHE PATH "Directory of Eigen3")
to:
SET(G2O_EIGEN3_INCLUDE "/src/eigen" CACHE PATH "Directory of Eigen3")
save the file and exit (:wq)
note: check to make sure the system eigen3 headers are in /usr/include/eigen3
10. Build & install g2o fork -- this will fail with errors if you're using the system eigen headers.
cd ~/src/g2o/build
cmake ../
make
sudo make install
(installs to /usr/local/lib)
cd ~/src
wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.8.0.tar.gz
tar -xvzf pcl-1.8.0.tar.gz
We need to compile pcl with c++ 2011 support because we're going to be compiling rdbgslam with c++ 2011 support and if we don't, rgbdslam will segfault on startup.
the PCL 1.7 library that comes installed with ubuntu 16.04 is not compiled with c++ 2011 support.
cd ~/src/pcl-pcl-1.8.0
vi CMakeLists.txt
add the following to line #146 of CMakeLists.txt (right after endif()):
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
save the file and exit (:wq)
This will take forever - 2.5gig ram was insufficient for the task in virtualbox. 4.5gig works.
mkdir build
cd build
cmake ../
To ensure that c++ 2011 support is being compiled into PCL, run:
make VERBOSE=1
and then copy some compiler output to a text file and search it to see if it contains "-stdc++11"
If you can't find -stdc++11 in the output, then you probably inserted it into the wrong place in the CMakeLists.txt
perhaps press ctrl-c and restart the build with just 'make' to clean up the output
sudo make install
cd ~/catkin_ws/src/rgbdslam_v2
vi CMakeLists.txt
change line 79 from:
find_package(PCL 1.7 REQUIRED COMPONENTS common io)
to:
find_package(PCL 1.8 REQUIRED COMPONENTS common io)
sudo vi /opt/ros/kinetic/share/pcl_ros/cmake/pcl_rosConfig.cmake
on line 112, for each pcl library "libpcl.so", replace the path prefix "/usr/lib/x86_64-linux" with "/usr/local/lib".. Some helpful vi macros to speed things up:
:map . /libpcl^M (^M is typed by pressing Ctrl-v then Ctrl-Enter)
:map , 21h21xilocal/lib/^[ (^[ is typed by pressing Ctrl-v then Ctrl-Escape)
now you can use '.' to advance to the next pcl library and ',' to replace "/usr/lib/x86_64-linux" with "/usr/local/lib"
save the file and exit (:wq)
cd ~/catkin_ws/src/rgbdslam_v2/external/SiftGPU
sudo apt-get install libglew-dev
sudo apt-get install libdevil1c2 libdevil-dev
make
cd ~/catkin_ws
vi src/rgbdslam_v2/CMakeLists.txt
Add the following line to the bottom of the file:
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
catkin_make
Once you've gottem through the cmake configuration and are actually compiling cpp files, hit Ctrl-C.
cd build/rgbdslam_v2
make VERBOSE=1
check that the compiler output contains the flag "-std=c++11"
Hit Ctrl-C and then type "make" to clean up the console output.
On the final linking of the rgbdslam executable, you may wish to do another 'make VERBOSE=1' to ensure that the compiler is finding our custom compiled libpcl* libraries in /usr/local/lib. Although it probably isn't necessary.
make install
start roscore in another terminal
~/catkin_ws/devel/lib/rgbdslam/rgbdslam
rgbdslam seems to segfault on exit sometimes but otherwise seems to work fine.
cp ~/catkin_ws/devel/lib/rgbdslam/rgbdslam ~/catkin_ws/install/share/rgbdslam/
mkdir ~/catkin_ws/install/share/rgbdslam/launch
cp ~/catkin_ws/src/rgbdslam_v2/launch/* ~/catkin_ws/install/share/rgbdslam/launch/
cp ~/catkin_ws/src/rgbdslam_v2/test/*.launch ~/catkin_ws/install/share/rgbdslam/launch/
cp -R ~/catkin_ws/src/rgbdslam_v2/rgbd_benchmark ~/catkin_ws/install/share/rgbdslam/
source ~/catkin_ws/install/setup.bash
(you'll need to do this each time you open a new terminal... put in ~/.bashrc?)
note: more datasets available at http://vision.in.tum.de/data/datasets/rgbd-dataset/download
cd ~/catkin_ws/src/rgbdslam_v2/test
wget http://vision.in.tum.de/rgbd/dataset/freiburg1/rgbd_dataset_freiburg1_xyz.bag
make sure roscore is running in another terminal
roslaunch rgbdslam test_settings.launch bagfile_name:="/home//catkin_ws/src/rgbdslam_v2/test/rgbd_dataset_freiburg1_xyz.bag"