Lsd slam 使用文档
安装与编译lsd slam
mkdir
-p ~/catkin_ws/src
git
clone https://github.com/tum-vision/lsd_slam.git
cd
lsd_slam
git
checkout catkin
##change to the Catkin "branch" of the LSD-SLAM project, then:
sudo
apt-get install ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev
libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev
libx11-dev
##对lsd_slam/lsd_slam_viewer
和lsd_slam/lsd_slam_core
文件夹下的package.xml
中添加(注意添加位置与源程序一致):
<build_depend>cmake_modules</build_depend>
<run_depend>cmake_modules</run_depend>
##对lsd_slam/lsd_slam_viewer
和lsd_slam/lsd_slam_core
文件夹下的CMakeFiles.txt
中添加:
find_package(cmake_modules REQUIRED)
##并且在所有的target_link_libraries
中添加X11
,
如:
target_link_libraries(lsdslam ${FABMAP_LIB} ${G2O_LIBRARIES} ${catkin_LIBRARIES} csparse cxsparse X11)
target_link_libraries(viewer ${QGLViewer_LIBRARIES}
${QGLVIEWER_LIBRARY}
${catkin_LIBRARIES}
${Boost_LIBRARIES}
${QT_LIBRARIES}
GL glut GLU X11
)
#add_executable(videoStitch src/main_stitchVideos.cpp)
#target_link_libraries(viewer ${QGLViewer_LIBRARIES}
# ${QGLVIEWER_LIBRARY}
# ${catkin_LIBRARIES}
# ${QT_LIBRARIES}
# GL glut GLU X11
# )
##然后开始编译:
cd ~/catkin_ws/
catkin_make
注:在编译过程在可能会遇到很多由于版本问题导致的bug,如果出现,请自行查找资料解决。
bug,如果出现,请自行查找资料解决。
利用usb摄像头使用lsd slam(单目)
##安装摄像头驱动
cd
~/catkin_ws/
source
devel/setup.sh
cd
~/catkin_ws/src
git
clone https://github.com/ktossell/camera_umd.git
cd
..
catkin_make
roscd
uvc_camera/launch/
roslaunch
./camera_node.launch
##配置摄像头文件camera_node.launch(以我的为例)
<launch>
<node pkg="uvc_camera" type="uvc_camera_node" name="uvc_camera" output="screen">
<param name="width" type="int" value="640" />
<param name="height" type="int" value="480" />
<param name="fps" type="int" value="45" />
<param name="frame" type="string" value="wide_stereo" />
<param name="auto_focus" type="bool" value="False" />
<param name="focus_absolute" type="int" value="0" />
<!-- other supported params: auto_exposure, exposure_absolute, brightness, power_line_frequency -->
<param name="device" type="string" value="/dev/video0 " />
<param name="camera_info_url" type="string" value="file://$(find uvc_camera)/calib1.yaml" />
</node>
</launch>
##编写摄像头标定文件calib1.yaml(以我的为例)
##请先学习基本相机模型,了解相机内参外参及矫正矩阵的含义及形式
image_width: 640
image_height: 480
camera_name: camera
camera_matrix:
rows: 3
cols: 3
data: [998.7580, 0, 406.0963, 0, 999.3593, 217.2844, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 3
data: [-0.2237, 0.3433, -0.3688]
rectification_matrix:
rows: 3
cols: 3
data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
rows: 3
cols: 4
data: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]
务必注意按此格式编写,标定文件中具体相机参数用MATLAB提供的工具包进行相机标定
##编写lsd slam中的相机配置文件,文件具体位置在lsd_slam_core/calib文件夹中(以我的为例)
##针孔相机模型
1.560559 2.081999 0.634525 0.452676 0
640 480
none
640 480
文件中具体参数含义请参照camera_calibration/Tutorials/MonocularCalibration - ROS Wiki
##以上完成后运行lsd slam
roscore
##再打开一个终端
cd
~/catkin_ws/
source
devel/setup.sh
rosrun
lsd_slam_viewer viewer
##再打开一个终端
cd
~/catkin_ws/
source
devel/setup.sh
roslaunch
uvc_camera camera_node.launch
##再打开一个终端
rosrun
lsd_slam_core live_slam /image:=image_raw _calib:=<calibration_file>
<calibration_file>用自己的标定文件代替
##至此会弹出摄像头图像及点云图
以我的为例:
roscore
cd ~/catkin_ws/
source devel/setup.sh
rosrun lsd_slam_viewer viewer
cd ~/catkin_ws/
source devel/setup.sh
roslaunch uvc_camera camera_node.launch
rosrun rqt_reconfigure rqt_reconfigure
rosrun lsd_slam_core live_slam /image:=/image_raw _calib:='/home/leo/catkin_ws/src/lsd_slam/lsd_slam_core/calib/usb_calib.cfg'
rostopic echo /lsd_slam/pose
使用心得
##此部分内容为我在使用lsd slam中自己发现的一些快捷操作及方法,官方并未给出这些。更多的快捷使用方法有待进一步探索
##调节lsd slam 追踪及建图参数的方法
rosrun rqt_reconfigure rqt_reconfigure
进入后refresh即可看到所有可调参数,可以利用滑动条进行调节,其中增大minUseGrad和cameraPixelNoise可以减少噪声,增大KFUsageWeight和KFDistWeight可以加快追踪速度,减少tracking lost 的情况
##lsd_slam_viewer的使用方法
viewer软件用于呈现构建出的点云,其中摁住鼠标左键可以调节画面的俯仰,鼠标右键可以调节点云图的左右位置,摁住滚轮可以调节点云图的大小,先摁住滚轮再摁住鼠标左键可以旋转生成的点云图,其他快捷操作还有待发现。其中蓝色框为关键帧位置,红色框为当前摄像头位置,绿线为摄像头运动轨迹
##添加回环检测
如果想要添加回环检测,只需在lsd_slam_core/cmakelist.txt中将以下后四行解注
# FabMap
# uncomment this part to enable fabmap
add_subdirectory(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap)
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap/include)
add_definitions("-DHAVE_FABMAP")
set(FABMAP_LIB openFABMAP )