第一步:首先安装ROS kinetic:php
参考:http://www.javashuo.com/article/p-adamaxei-kn.htmlnode
https://blog.csdn.net/xuehuafeiwu123/article/details/52549872python
1. 配置Ubuntu的资源库:"restricted","universe"和"multiverse"linux
打开系统设置->软件与更新:git
确保"restricted","universe"和"multiverse"这三个选项被勾选。github
而后更改download from:在下拉框中选择其余站点->选择最佳服务器->选择服务器。ubuntu
2. 设置软件源:sources.list bash
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
3. 设置 keys服务器
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
4. 更新软件及安装app
1 sudo apt-get update 2 sudo apt-get install ros-kinetic-desktop-full
注意区分大小写,若是不当心写成sudo apt-get install ros-Kinetic-desktop-full,解决方法以下:
1)报错:E: 没法定位软件包 ros-Kinetic-desktop-full 解决:后来发现应该是sudo apt-get install ros-kinetic-desktop-full.怎么样,有没有发现什么?把‘k’敲成‘K’啦.
从新输入:sudo apt-get install ros-kinetic-desktop-full
2)报错:下列软件包有未知足的依赖关系: ros-kinetic-desktop-full : 依赖: ros-kinetic-desktop 可是它将不会被安装 依赖: ros-kinetic-perception 可是它将不会被安装 依赖: ros-kinetic-simulators 可是它将不会被安装 E: 没法修正错误,由于您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
解决:
1 sudo apt-get update 2 sudo apt-get install ros-kinetic-desktop 3 sudo apt-get install ros-kinetic-simulators
再输入:
sudo apt-get install ros-kinetic-desktop-full
5. 安装完能够查看可用的package(有什么用呢??)
apt-cache search ros-kinetic
6. 初始化 rosdep
1 sudo rosdep init 2 rosdep update
3)报错:Traceback (most recent call last):
File "/usr/bin/rosdep", line 3, in <module>
from rosdep2.main import rosdep_main
ImportError: No module named 'rosdep2'
解决:将python的默认版本设为2
sudo update-alternatives --config python
选择1
7. 环境配置
1 echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc 2 source ~/.bashrc
4)报错:bash:/opt/ros/Kinect/setup.bash:没有那个文件或目录
错误缘由:仍是这个K!!!
解决:在终端输入:gedit ~/.bashrc
在打开文件的最后找到bash: /opt/ros/Kinetic/setup.bash将Kinetic的K改为小写便可,删除重复的多余配置
8. 安装building package的依赖
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
9. 测试ROS安装是否成功
roscore

出现这样的结果,说明安装成功。
第二步:安装LSD-SLAM
参考:https://blog.csdn.net/softimite_zifeng/article/details/78632653
1. 建立rosbuild工做空间:
1 sudo apt-get install python-rosinstall 2 mkdir ~/rosbuild_ws 3 cd ~/rosbuild_ws 4 rosws init . /opt/ros/kinetic 5 mkdir package_dir 6 rosws set ~/rosbuild_ws/package_dir -t . 7 echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc 8 bash 9 cd package_dir
2. 安装依赖
sudo apt-get install ros-kinetic-libg2o ros-kinetic-cv-bridge liblapack-dev libblas-dev freeglut3-dev libsuitesparse-dev libx11-dev
sudo apt install libqglviewer-dev-qt4 cd /usr/lib/x86_64-linux-gnu sudo ln -s libQGLViewer-qt4.so libQGLViewer.so.2
3.获取LSD-SLAM
git clonehttps://github.com/tum-vision/lsd_slam.git lsd_slam
4. 编译
rosmake lsd_slam
因为原版本支持的系统是ubuntu12.04和14.04,直接在16.04的版本上编译,会报错。能够直接下载运行我已经修改好的代码https://github.com/Chatoyant19/LSD-SLAM
或者根据报错提示本身修改:
1)报错:ERROR [gendeps] 1 Finding dependencies for /home/cc/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg
解决:删除lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg和lsd_slam_core/cfg/LSDDebugParams.cfg两个文件中出现的单引号
lsd_slam_viewer/cfg/LSDSLAMViewerParams.cfg:
第20行scaledDepthVarTH:单词 point's和keyframe's 中出现了单引号,删除单引号
第21行absDepthVarTH:单词 point's
第24行cutFirstNKf:单词 keyframe's
lsd_slam_core/cfg/LSDDebugParams.cfg
第11行plotStereoImages:单词 what's
第12行plotTracking:单词 what's
第48行continuousPCOutput:单词 Keyfram's
2)报错: main_stitchVideos.cpp:(.text+0xd65c):对‘cv::imshow(cv::String const&, cv::_InputArray const&)’未定义的引用
main_stitchVideos.cpp:(.text+0xd668):对‘cv::String::deallocate()’未定义的引用 main_stitchVideos.cpp:(.text+0xd672):对‘cv::waitKey(int)’未定义的引用
main_stitchVideos.cpp:(.text+0xd715):对‘cv::fastFree(void*)’未定义的引用
main_stitchVideos.cpp:(.text+0xd7b5):对‘cv::fastFree(void*)’未定义的引用
main_stitchVideos.cpp:(.text+0xd84d):对‘cv::fastFree(void*)’未定义的引用
main_stitchVideos.cpp:(.text+0xd8e5):对‘cv::fastFree(void*)’未定义的引用 main_stitchVideos.cpp:(.text+0xd985):对‘cv::fastFree(void*)’未定义的引用 CMakeFiles/videoStitch.dir/src/main_stitchVideos.cpp.o:main_stitchVideos.cpp:(.text+0xda25): 跟着更多未定义的参考到 cv::fastFree(void*) …
解决:在lsd_slam_viewer中的CMAKELISTS.txt的最后加上:
find_package(OpenCV REQUIRED)
rosbuild_add_executable(videoStitch src/main_stitchVideos.cpp)
target_link_libraries(videoStitch ${OpenCV_LIBS})
3)报错:
解决:lsd_slam_viewer/src/PointCloudViewer.h中,第135行:将float x, y, z修改成qreal x, y, z
lsd_slam_viewer/src/PointCloudViewer.cpp中,第326行:将float x, y, z修改成qreal x, y, z
4)报错:
解决:将文件lsd_slam_viewer/src/KeyFrameDisplay.cpp的头文件:#include "opencv2/opencv.hpp"注释掉
5)报错:
解决:在
lsd_slam_core中的CMAKELISTS.txt的最后增长boost_system库的连接:find_package(OpenCV REQUIRED)
# build live ros node
rosbuild_add_executable(live_slam src/main_live_odometry.cpp)
target_link_libraries(live_slam lsdslam boost_system ${OpenCV_LIBS})
# build image node
rosbuild_add_executable(dataset_slam src/main_on_images.cpp)
target_link_libraries(dataset_slam lsdslam boost_system ${OpenCV_LIBS})
终于,编译经过!!!
5. 运行LSD-SLAM
5.1 下载数据集并解压:http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip
5.2 打开终端输入命令:roscore
5.3 另打开一个新的终端,输入命令:rosrun lsd_slam_viewer viewer
1)报错:rospack: error while loading shared libraries: librospack.so: cannot open shared object file: No such file or directory
解决:首先咱们要先肯定操做系统里面是否包含了这个共享库:在终端中输入命令:
sudo updatedb
locate rospack
能够看到librospack.so所在的地址:
将共享库目录添加到共享库配置文件/etc/ld.so.conf中
因为权限问题,须要在root下输入如下命令:
cat /etc/ld.so.conf
echo "/opt/ros/kinetic/lib" >> /etc/ld.so.conf
ldconfig
5.4 再打开一个新的终端,输入命令:rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
5.5 再打开一个新的终端,cd到解压后的数据集LSD_room.bag所在的目录下,输入命令:rosbag play ./LSD_room.bag
弹出的DebugWindow DEPTH窗口不能正常显示。
解决方法一:将lsd_slam/lsd_slam_core/src/util/settings.cpp的第38行更改成:bool displayDepthMap = false;//true
此时DebugWindow DEPTH窗口再也不显示。
解决方法二:修改lsd_slam/lsd_slam_core/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp:在line 73增长
cv::imshow(displayQueue.back().name, displayQueue.back().img); cv::waitKey(); displayQueue.pop_back();
点云窗口只显示相机的移动不显示点云地图的解决方法:在lsd_slam/lsd_slam_core/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp中的lines 119 and 125
用 'return 1'替换cv::waitKey(milliseconds)
从新编译lsd_slam(rosmake lad_slam),而后从新执行步骤2~5,就可在PointCLoud Viewer中查看获得的环境的点云信息。