(专题一)视觉SLAM十四讲入门以及程序复现

本帖旨在记录一下学习高博《视觉SLAM》十四讲中的一些心得,尤其是复现代码的填坑过程记录。作者水平十分有限,仅仅分享一下复现代码、跑代码中遇到的问题以及解决办法,分享一些代码理解。欢迎各位小伙伴加入讨论~


目录

1.计算机环境与IDE配置

1.1 配置CLion

1)安装CLion

2)CLion上安装ROS插件

3)rqt工具箱

4)参考链接

1.2 cmake入门

2.安装第三方库

2.1 sophus

2.2 eigen

2.3 opencv

2.4 g2o

2.5 ceres

2.6 pcl

2.7 octomap

3.Slam-book12源码复现与分享


1.计算机环境与IDE配置

  • ubuntu16.04 LTS

  • ROS Kinetic(此处安装过程略去,基本操作啦~

注意:建议不要装Anaconda3,否则容易引起python环境冲突,SLAM工程把python设定成系统自带的python2.7或者3.5似乎都行,安装了Anaconda3似乎会导致后续很多库文件产生干扰,比如opencv可能就找到anaconda3目录下的库文件,当然我遇到过其他很多库文件都都不对,甚至对QT也产生影响,后续的octovis和pcl_viewer要用到。

1.1 配置CLion

1)安装CLion

下载CLion,到安装完成我就不多说了。建议把IDE之类的软件全都安装到计算机的/opt目录下,然后把CLion目录写入.bashrc。这样在终端里直接输入clion.sh就可以打开CLion了建议创建一个入口到启动器。

## >>> clion path >>>
export PATH="/opt/clion-2019.2.3/bin/:$PATH"
## >>> pycharm path >>>
export PATH="/opt/pycharm-2019.1.2/bin/:$PATH"

2)CLion上安装ROS插件

进入clion的Files/Setting/;plugins中搜索安装一下四个插件。

ROS-RObot Operating System和Hatchery比较好用,建议安装。

(专题一)视觉SLAM十四讲入门以及程序复现_第1张图片

打开CLion,等下方Scanning Files to Index啥的任务结束了在Files中会出现Import ROS Workspace;选择ROS工作空间打开,进入后查看CMake配置页应该如下:

里面的CMake options内容如下:

-DCATKIN_DEVEL_PREFIX=/home/wbzhang/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/wbzhang/catkin_ws/install 
-DCATKIN_WHITELIST_PACKAGES="monovo;landing;offb"

Generation Path填工作目录下的build就行。

build option根据自己CPU的核数写-j8就行。

值得一提的是上面CMake options中可以用来选择CLion编译的功能包白名单,这对于一个工作空间中可能包含非catkin包是很有用的。

-DCATKIN_WHITELIST_PACKAGES=“pkg1;pkg2”

(专题一)视觉SLAM十四讲入门以及程序复现_第2张图片

 至此,CMake之后应该就会在右上角出现配置好的节点啥的了...每一个add_executable都会对应一个配置。右边是Hatchery提供的一些ROS插件的快捷入口,比如Gazebo\rqt_graph\ros_image_view\rqt_plot等等,还是比较好用的,我还没都全用过,等用了再写一些评述。

 此处我在补充一句:似乎发现clion使用ROS SUPPORT插件读取后,使用的catkin_make编译方法和某些已经使用catkin build编译的工作空间会产生冲突,导致.bashrc目录下的source ~/catkin_ws/devel/setup.bash会失效。导致每个终端都得source devel/setup.bash,很是麻烦。还请大神指点~

3)rqt工具箱

补充, 实际上这些都是rqt工具箱中的一些插件。

(专题一)视觉SLAM十四讲入门以及程序复现_第3张图片

比较好用的工具如下:

  1. rqt_launch:可以看到本地所有的ROS package,以及里边的launch文件,加载参数启动。
  2. rqt_graph:可以看到当前运行的ros节点、话题以及数据流向,结构图很关键啊
  3. rqt_image_view:用于查看当前的图片话题消息。
  4. rqt_msg和rqt_srv:用于查看本地的消息和服务类型。
  5. rqt_bag:录制话题工具箱,可以自选话题进行录制~
  6. rqt_topic:查看当前的话题的详细信息。
  7. rqt_plot:话题消息曲线绘制。

其余的我就不多说了,有兴趣的自己上手用一用,上官网看rqt教程

4)参考链接

CLion中编译ROS工程的配置

使用clion配置和运行ros项目

1.2 cmake入门

学而时习之,不亦乐乎。高博《视觉SLAM十四讲》P28有写,在此随手借用秦通大神vins_fusion中的一个CMakeLists.txt温习一下。

# 声明所要求的最低CMAKE版本
cmake_minimum_required(VERSION 2.8.3)

# 项目名称
project(vins)

# 编译方式以及C++的版本
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")

#-DEIGEN_USE_MKL_ALL")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")

########## 查找所依赖的功能包 ##########
find_package(catkin REQUIRED COMPONENTS
    roscpp
    std_msgs
    geometry_msgs
    nav_msgs
    tf
    cv_bridge
    camera_models
    image_transport)


# 安装了多个OpenCV时通过以下设置OpenCV所在路径,比如:
SET(OpenCV_DIR /home/OPENCV/opencv-3.1.0/build/)
SET(OpenCV_FOUND 1)

# 查找OpenCV,输出找到的opencv版本号,没找到时不输出
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV_VERSION: ${OpenCV_VERSION}")

# 查找ceres
find_package(Ceres REQUIRED)


########## 包含目录 ##########

include_directories(${catkin_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS})

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(Eigen3)
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${EIGEN3_INCLUDE_DIR}
)

########## 依赖的catkin_package ##########
catkin_package()


########## 编译库文件 ##########
# 静态库(文件扩展名为.a)
add_library(vins_lib
    src/estimator/parameters.cpp
    src/estimator/estimator.cpp
    src/estimator/feature_manager.cpp
    src/factor/pose_local_parameterization.cpp
    src/factor/projectionTwoFrameOneCamFactor.cpp
    src/factor/projectionTwoFrameTwoCamFactor.cpp
    src/factor/projectionOneFrameTwoCamFactor.cpp
    src/factor/marginalization_factor.cpp
    src/utility/utility.cpp
    src/utility/visualization.cpp
    src/utility/CameraPoseVisualization.cpp
    src/initial/solve_5pts.cpp
    src/initial/initial_aligment.cpp
    src/initial/initial_sfm.cpp
    src/initial/initial_ex_rotation.cpp
    src/featureTracker/feature_tracker.cpp)

# 以下将cpp文件编译成共享库(文件扩展名为.so)
add_libary(hello_world SHARED libHelloSLAM.cpp)


## 附加:将多个源文件统一到一个变量
aux_source_directory({DIR} {VARIABLE_NAME})
add_executable(vins_node src/rosNodeTest.cpp ${VARIABLE_NAME})


# 添加链接库,此处秦通大神将catkin库、opencv、ceres库全连接到vins_lib变量中
target_link_libraries(vins_lib ${catkin_LIBRARIES} ${OpenCV_LIBS} ${CERES_LIBRARIES})


########## 生成可执行文件,并链接库文件 ##########
add_executable(vins_node src/rosNodeTest.cpp)
target_link_libraries(vins_node vins_lib) 

add_executable(kitti_odom_test src/KITTIOdomTest.cpp)
target_link_libraries(kitti_odom_test vins_lib) 

add_executable(kitti_gps_test src/KITTIGPSTest.cpp)
target_link_libraries(kitti_gps_test vins_lib) 

2.安装第三方库

2.1 sophus

2.2 eigen

2.3 opencv

2.4 g2o

2.5 ceres

2.6 pcl

2.7 octomap

3.Slam-book12源码复现与分享

 

 

你可能感兴趣的:(SLAM)