本帖旨在记录一下学习高博《视觉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源码复现与分享
ubuntu16.04 LTS
ROS Kinetic(此处安装过程略去,基本操作啦~)
注意:建议不要装Anaconda3,否则容易引起python环境冲突,SLAM工程把python设定成系统自带的python2.7或者3.5似乎都行,安装了Anaconda3似乎会导致后续很多库文件产生干扰,比如opencv可能就找到anaconda3目录下的库文件,当然我遇到过其他很多库文件都都不对,甚至对QT也产生影响,后续的octovis和pcl_viewer要用到。
下载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"
进入clion的Files/Setting/;plugins中搜索安装一下四个插件。
ROS-RObot Operating System和Hatchery比较好用,建议安装。
打开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”
至此,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,很是麻烦。还请大神指点~
补充, 实际上这些都是rqt工具箱中的一些插件。
比较好用的工具如下:
其余的我就不多说了,有兴趣的自己上手用一用,上官网看rqt教程。
CLion中编译ROS工程的配置
使用clion配置和运行ros项目
学而时习之,不亦乐乎。高博《视觉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)