rtabmap ros包编译

来源:互联网 发布:运行php文件 编辑:程序博客网 时间:2024/05/21 09:17

     今天在优酷看到关于rtabmap ros包跑起来的视频。里面有闭环检测,所以想跑跑,看看相应的代码。。

安装过程有一点问题:

1.打开wiki 看看:

2. 打开github.

3.  依据连接  https://github.com/introlab/rtabmap_ros 进行安装。。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RTAB-Map (Real-Time Appearance-Based Mapping) is a RGB-D Graph SLAM approach based on a global Bayesian loop closure detector. The loop closure detector uses a bag-of-words approach to determinate how likely a new image comes from a previous location or a new location. When a loop closure hypothesis is accepted, a new constraint is added to the map's graph, then a graph optimizer minimizes the errors in the map. A memory management approach is used to limit the number of locations used for loop closure detection and graph optimization, so that real-time constraints on large-scale environnements are always respected. RTAB-Map can be used alone with a hand-held Kinect or stereo camera for 6DoF RGB-D mapping, or on a robot equipped with a laser rangefinder for 3DoF mapping.

Installation

ROS distribution

RTAB-Map is released as binaries in the ROS distribution.

  • Indigo$ sudo apt-get install ros-indigo-rtabmap-ros
  • Hydro$ sudo apt-get install ros-hydro-rtabmap-ros

Build from source

This section shows how to install RTAB-Map ros-pkg on ROS Hydro/Indigo (Catkin build). RTAB-Map works only with the PCL 1.7, which is the default version installed with ROS Hydro/Indigo (Fuerte and Groovy are not supported).

  • Note for ROS Indigo: If you want SURF/SIFT, you have to build OpenCV from source to have access tononfree module. Install it in /usr/local (default) and the rtabmap library should link with it instead of the one installed in ROS.

find_package( OpenCV REQUIRED )   在cmakelist.txt中

  • The next instructions assume that you have setup your ROS workspace using thistutorial. The workspace path is ~/catkin_ws and your ~/.bashrc contains:

    source /opt/ros/hydro/setup.bashsource ~/catkin_ws/devel/setup.bash
  1. First, you need to install the RTAB-Map standalone libraries (don't checkout in the Catkin workspace but install in your Catkin's devel folder).

    $ cd ~$ git clone https://github.com/introlab/rtabmap.git rtabmap    【不要以catkin_make 的形式放到src下】$ cd rtabmap/build$ cmake -DCMAKE_INSTALL_PREFIX=~/catkin_ws/devel ..  [<---double dots included          注意生成的位置]$ make -j4$ make install
  2. Now install the RTAB-Map ros-pkg in your src folder of your Catkin workspace.

    $ cd ~/catkin_ws$ git clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros$ catkin_make

Update to new version

$ cd rtabmap$ git pull origin master$ cd build$ make$ make install$ roscd rtabmap_ros$ git pull origin master$ cd ~/catkin_ws$ catkin_make
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

直接以它的cmakelists 安装会出现

undefined reference to `cv::ocl::integral(cv::ocl::oclMat const&, cv::ocl::oclMat&)'   等一些问题  。。。这都是opencv的一些问题,所以加了自己安装的opencv  

find_package( OpenCV REQUIRED )   在cmakelist.txt中  库依赖加opencv..  见后面改的cmakelist .

//

还是出现错误,后goole搜索 参考 https://code.google.com/p/rtabmap/issues/detail?id=8

Found that there some extra steps to install on ROS indigo. Note that ROS indigo is not officially released yet... it seems that ROS indigo doesn't provide its own opencv binaries like in ROS hydro where OpenCV is built with "nonfree" module (required by rtabmap). So OpenCV should be installed manually to have "nonfree" module. By doing so, rtabmaplib can build but the ros-pkg use catkin opencv links from "cv_bridge" package (which seems to link to opencv installed through apt-get and not the one compiled manually).

Workaround:
-Uninstall all opencv packages in synaptic.
-This will remove also ros-indigo-vision-opencv, so we need to compile it and linking to our OpenCV installed manually. So in catkin workspace:
$ roscd
$ cd ..
$ git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
$ catkin_make

~~~~~~~~~~~~~~~~~~~~~~~~~~~

编译通过。。



cmake_minimum_required(VERSION 2.8.3)project(rtabmap_ros)## Find catkin macros and libraries## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)## is used, also find other catkin packagesfind_package( OpenCV REQUIRED )find_package(catkin REQUIRED COMPONENTS              cv_bridge roscpp rospy sensor_msgs std_msgs std_srvs nav_msgs geometry_msgs visualization_msgs             image_transport tf tf_conversions laser_geometry pcl_conversions              pcl_ros nodelet dynamic_reconfigure rviz message_filters class_loader             genmsg stereo_msgs move_base_msgs)# Optional componentsfind_package(costmap_2d)find_package(octomap_ros)## System dependencies are found with CMake's conventions# find_package(Boost REQUIRED COMPONENTS system)find_package(RTABMap 0.9.0 REQUIRED)#Qt stuffFIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui REQUIRED)INCLUDE(${QT_USE_FILE})## We also use Ogreinclude($ENV{ROS_ROOT}/core/rosbuild/FindPkgConfig.cmake)pkg_check_modules(OGRE OGRE)include_directories( ${OGRE_INCLUDE_DIRS} )link_directories( ${OGRE_LIBRARY_DIRS} )## Uncomment this if the package has a setup.py. This macro ensures## modules and global scripts declared therein get installed## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html# catkin_python_setup()######################################### Declare ROS messages and services ########################################### Generate messages in the 'msg' folderadd_message_files(   FILES   Info.msg   KeyPoint.msg   MapData.msg   Graph.msg   NodeData.msg   Link.msg   OdomInfo.msg   UserData.msg   Point2f.msg)## Generate services in the 'srv' folder add_service_files(   FILES   GetMap.srv   ListLabels.srv   PublishMap.srv   ResetPose.srv   SetGoal.srv   SetLabel.srv )## Generate added messages and services with any dependencies listed heregenerate_messages(   DEPENDENCIES   std_msgs   geometry_msgs   sensor_msgs)#add dynamic reconfigure apigenerate_dynamic_reconfigure_options(cfg/Camera.cfg)##################################### catkin specific configuration ####################################### The catkin_package macro generates cmake config files for your package## Declare things to be passed to dependent projects## INCLUDE_DIRS: uncomment this if you package contains header files## LIBRARIES: libraries you create in this project that dependent projects also need## CATKIN_DEPENDS: catkin_packages dependent projects also need## DEPENDS: system dependencies of this project that dependent projects also needcatkin_package(  INCLUDE_DIRS include  LIBRARIES rtabmap_ros  CATKIN_DEPENDS cv_bridge roscpp rospy sensor_msgs std_msgs std_srvs nav_msgs geometry_msgs visualization_msgs                 image_transport tf tf_conversions laser_geometry pcl_conversions                  pcl_ros nodelet dynamic_reconfigure rviz message_filters class_loader                 stereo_msgs move_base_msgs)############# Build ############### Specify additional locations of header files## Your package locations should be listed before other locations# include_directories(include)include_directories(  ${CMAKE_CURRENT_SOURCE_DIR}/include  ${RTABMap_INCLUDE_DIRS}  ${catkin_INCLUDE_DIRS})# librariesSET(Libraries   ${catkin_LIBRARIES}   ${RTABMap_LIBRARIES})## RVIZ pluginqt4_wrap_cpp(MOC_FILES  src/rviz/MapCloudDisplay.h  src/rviz/MapGraphDisplay.h  src/rviz/InfoDisplay.h  src/rviz/OrbitOrientedViewController.h)# tf:message_filters, mixing boost and Qt signalsset_property(   SOURCE src/rviz/MapCloudDisplay.cpp src/rviz/MapGraphDisplay.cpp src/rviz/InfoDisplay.cpp src/rviz/OrbitOrientedViewController.cpp   PROPERTY COMPILE_DEFINITIONS QT_NO_KEYWORDS   )   SET(rtabmap_ros_lib_src   src/nodelets/data_throttle.cpp   src/nodelets/stereo_throttle.cpp   src/nodelets/data_odom_sync.cpp   src/nodelets/point_cloud_xyzrgb.cpp    src/nodelets/point_cloud_xyz.cpp   src/nodelets/disparity_to_depth.cpp    src/nodelets/obstacles_detection.cpp   src/MsgConversion.cpp   src/OdometryROS.cpp   src/rviz/MapCloudDisplay.cpp   src/rviz/MapGraphDisplay.cpp   src/rviz/InfoDisplay.cpp   src/rviz/OrbitOrientedViewController.cpp   ${MOC_FILES})   # If costmap_2d is found, add the pluginIF(costmap_2d_FOUND)MESSAGE(STATUS "WITH costmap_2d")include_directories(${costmap_2d_INCLUDE_DIRS})SET(Libraries  ${costmap_2d_LIBRARIES}  ${Libraries}  )SET(rtabmap_ros_lib_src  src/costmap_2d/static_layer.cpp  ${rtabmap_ros_lib_src}  )ENDIF(costmap_2d_FOUND)## Declare a cpp libraryadd_library(rtabmap_ros   ${rtabmap_ros_lib_src})target_link_libraries(rtabmap_ros  ${Libraries}  ${QT_LIBRARIES}  ${OGRE_LIBRARIES})add_dependencies(rtabmap_ros rtabmap_generate_messages_cpp)# If octomap is found, add definitionIF(octomap_ros_FOUND)MESSAGE(STATUS "WITH octomap")include_directories(  ${octomap_ros_INCLUDE_DIRS})SET(Libraries  ${octomap_ros_LIBRARIES}  ${Libraries})add_definitions(-DWITH_OCTOMAP)ENDIF(octomap_ros_FOUND)add_executable(rtabmap src/CoreNode.cpp src/CoreWrapper.cpp)add_dependencies(rtabmap rtabmap_generate_messages_cpp)target_link_libraries(rtabmap rtabmap_ros ${Libraries} ${OpenCV_LIBS} )add_executable(rgbd_odometry src/RGBDOdometryNode.cpp)target_link_libraries(rgbd_odometry rtabmap_ros ${Libraries} ${OpenCV_LIBS} )add_executable(stereo_odometry src/StereoOdometryNode.cpp)target_link_libraries(stereo_odometry rtabmap_ros ${Libraries} ${OpenCV_LIBS} )add_executable(map_optimizer src/MapOptimizerNode.cpp)target_link_libraries(map_optimizer rtabmap_ros ${Libraries} ${OpenCV_LIBS} )add_executable(map_assembler src/MapAssemblerNode.cpp)add_dependencies(map_assembler ${${PROJECT_NAME}_EXPORTED_TARGETS} ${OpenCV_LIBS} )target_link_libraries(map_assembler rtabmap_ros ${Libraries} ${OpenCV_LIBS} )add_executable(grid_map_assembler src/GridMapAssemblerNode.cpp)target_link_libraries(grid_map_assembler rtabmap_ros ${Libraries} ${OpenCV_LIBS} )add_executable(camera src/CameraNode.cpp)target_link_libraries(camera ${Libraries} ${OpenCV_LIBS})add_executable(rtabmapviz src/GuiNode.cpp src/GuiWrapper.cpp src/PreferencesDialogROS.cpp)target_link_libraries(rtabmapviz rtabmap_ros ${QT_LIBRARIES} ${Libraries}  )add_executable(data_player src/DbPlayerNode.cpp)target_link_libraries(data_player rtabmap_ros ${QT_LIBRARIES} ${Libraries} ${OpenCV_LIBS} )add_executable(odom_msg_to_tf src/OdomMsgToTFNode.cpp)target_link_libraries(odom_msg_to_tf rtabmap_ros ${Libraries} ${OpenCV_LIBS} )############### Install ################ all install targets should use catkin DESTINATION variables# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html## Mark executable scripts (Python etc.) for installation## in contrast to setup.py, you can choose the destination# install(PROGRAMS#   scripts/my_python_script#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}# )## Mark executables and/or libraries for installationinstall(TARGETS    rtabmap_ros    rtabmap    rtabmapviz    rgbd_odometry    stereo_odometry   map_assembler   grid_map_assembler   map_optimizer   data_player   camera   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )## Mark cpp header files for installationinstall(DIRECTORY include/${PROJECT_NAME}/   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}   FILES_MATCHING PATTERN "*.h"   PATTERN ".svn" EXCLUDE)## Mark other files for installation (e.g. launch and bag files, etc.)install(FILES   launch/rgbd_mapping.launch   launch/data_recorder.launch   launch/rgbd_mapping_kinect2.launch   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch)install(DIRECTORY    launch/config   launch/data   launch/demo   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch)## install plugins/nodelets xmlinstall(FILES   nodelet_plugins.xml   plugin_description.xml   costmap_plugins.xml   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})############### Testing ################# Add gtest based cpp test target and link libraries# catkin_add_gtest(${PROJECT_NAME}-test test/test_rtabmap.cpp)# if(TARGET ${PROJECT_NAME}-test)#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})# endif()## Add folders to be run by python nosetests# catkin_add_nosetests(test)







~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

参考:

1.wiki_ros

http://wiki.ros.org/rtabmap         http://wiki.ros.org/rtabmap_ros


2.github

https://github.com/introlab/rtabmap

https://github.com/introlab/rtabmap_ros

1 1