资讯详情

视觉SLAM理论与实践1

视觉SLAM理论与实践1-概述与准备知识-附代码链接

    • 一、熟悉Linux
    • 二、SLAM阅读综述文献
    • 三、CMAKE练习
    • 四、理解ORB-SLAM2框架
    • 五、使用摄像头或视频运行 ORB-SLAM2

一、熟悉Linux

参考资料:鸟哥Linux私房菜》,Ubuntu wiki

A:安装软件有两种常用方法: 1)apt-get 安装方法; 普通安装:sudo apt-get install XXX (包名) 修复安装:sudo apt-get -f install XXX 重新安装:sudo apt-get -f reinstall XXX (例如安装g 在终端中输入编译环境的命令:sudo apt-get install g ,附加说明可 通过g -v命令查看g 版本) 2)dpkg方式安装 sudo dpkg -i package_name.deb 软件默认位置安装后 /usr/share 环境变量:环境变量是操作系统中具有特定名称的对象,包含一个或多个应用程序将使用的信息;分为永久生效和shell两种临时生效。 1)对所有用户生效的永久性变量(系统级): 这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。作用范围是整个系统。 设置方式: 用vim 或者gedit 打开/etc/profile 文件,然后添加我们想要的环境变量export指令添加环境变量。此文件仅在root(超级用户)可以修改。我们可以修改它。etc目录下使用ls -l查看本文件的用户和权限。gedit为例: $ gedit /etc/profile $ export 新的环境变量 :添加后,新的环境变量不会立即生效,需要source /etc/profile 该文件将生效。否则,它只能在下次重新进入用户时生效。记住在终端上source一下。。。 2)对当前用户生效的永久性变量(用户级): 只针对当前用户,和上面一样,但不需要etc 下面进行添加,直接在.bash_profile文件底部使用export添加。 这里 .bashrc和.bash_profile原则上,在设置此类环境变量时,可以在任何两个文件中添加。 ~/.bash_profile是交互式login方式进入bash shell运行。 ~/ .bashrc是交互式non-login方式进入bash shell运行。 两者的设置大致相同。 .bash_profile用户登录时只读取一次文件;.bashrc每次打开终端进行新的会话都会读取。 3)临时有效的环境变量(仅适用于当前shell有效): 这种环境变量只针对当前的环境变量shell有效。当我们退出登录或关闭终端并重新打开时,环境变量会消失,这是临时的,可以直接使用export指令添加。 $ export 新的环境变量 根目录的一般结构如下:(根据我目前的笔记本ubuntu16.以04系统为例,截图如下) 以本人笔记本目前ubuntu16.04系统为例1)/bin 用户二进制文件 包括二进制可执行文件,系统中所有用户的可执行文件都在本文件夹中,例如:ls,cp,ping等。 2)/sbin 系统二进制文件 包括二进制可执行文件,但只能由系统管理员操作,维护系统。 3)/etc 配置文件 它还包动/停止单个程序启动和关闭的所有程序配置文件shell脚本。 4)/dev 设备文件 包括所有终端设备,USB或任何连接到系统的设备。例如:/dev/tty1、/dev/usbmon0 5)/proc 进程信息 包含系统进程的相关信息。 这是一个包含正在运行过程信息的虚拟文件系统。例如:/proc/{pid}目录中包含的和特定的pid相关信息。 6)/var 变量文件 可以找到可能增加内容的文件。 - 系统日志文件(//var/log);包和数据库文件(/var/lib);电子邮件(//var/mail);打印队列(//var/spool);文件(/var/lock);重新启动所需临时文件(/var/tmp); 7)/tmp 临时文件 包括系统和用户创建的临时文件。当系统重新启动时,目录下的文件将被删除。 8)/usr 用户程序 源代码包括二进制文件、库文件、文档和二级程序。 /usr/bin 二进制文件包含用户程序。如果你在/bin 用户二进制文件找不到,到/usr/bin看目录。at、awk、cc、less、scp。 /usr/sbin 包含系统管理员的二进制文件。如果你在/sbin 找不到系统二进制文件, 到/usr/sbin看目录。atd、cron、sshd、useradd、userdel。 /usr/lib中包含了/usr/bin和/usr/sbin用到的库。 /usr/local 用户程序包含从源安装。例如,当您从源安装时Apache,它会在/usr/local/apache2中。 9)/home HOME目录 所有用户都用来存档他们的个人档案。 10)/boot 引导加载程序文件 包括与引导加载程序相关的文件。initrd、vmlinux、grub文件位于/boot下。 11)/lib 系统库 包括支持位于//bin和/sbin以下二进制文件的库文件称为库文件 ld或lib.so.* 12)/opt 可选的附加应用程序 opt代表opitional;包括个别制造商的附加应用程序。附加应用程序应安装在/opt/或者/opt/子目录下。 13)/mnt 挂载目录 系统管理员可以在临时安装目录中挂载文件系统。 14)/media 移动媒体设备 临时目录用于挂载可移动设备。 例如,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy; 15)/srv 服务数据 srv代表服务。包含与服务器特定服务相关数据。例如,/srv/cvs包含cvs相关数据。 chmod 777 文件名: 将文件设置为可读、可写、可执行的业主、组成员和其他人。 chmod a x 文件名 :在原始配置中增加文件的可执行权限。 chown xiang:xiang a.sh

二、SLAM阅读综述文献

增强现实,独立导航和定位移动机器人,无人驾驶,多机器人合作 定位:机器人必须知道自己在环境中的位置; 建图:机器人必须记录环境特征(或路标点)的信息;(地图可以根据自己的定位信息构建) 机器人在位置环境中从位置环境中移动,根据位置估计和地图构建定位自己,并在自己定位的基础上构建增量地图,实现机器人的独立定位和导航。准确的地图构建需要准确的位置信息,它们之间有很强的耦合关系。 1)第一阶段:定位与建图分开研究的阶段; 2)第二阶段:定位与构图共同研究的阶段; 3)第三阶段:开始运用摄像头的阶段(之前由于计算机视觉的发展还不太到位,因此之前基本都是基于激光测距方法) 4)第四阶段:多元化阶段(即现阶段,考虑多传感器融合slam,视觉 激光 imu等等) Mur-Artal R , Tardos J D . ORB-SLAM2: An Open-Source SLAM System for Monocular,Stereo, and RGB-D Cameras[J]. IEEE Transactions on Robotics, 2017:1-8. Forster C , Pizzoli M , Davide Scaramuzza?. SVO: Fast Semi-Direct Monocular Visual Odometry[C]// IEEE International Conference on Robotics and Automation (ICRA),Hong Kong, 2014. IEEE, 2014. Qin Tong, Li Peiliang, Shen Shaojie. VIN-Mono: A Robust and Versatile MonocularVisual-Inertial State Estimator[J]. IEEE Transactions on Robotics:1-17. 此外还有Okvis,msckf等为人熟知的开源框架。

三、CMAKE练习

1)在原有基础上添加lib和src以及build文件夹,其中cmake-build-debug文件是调试工具Clion产生的中间文件,不用管它。 2)再将hello.cpp和hello.h放置在lib文件夹中,注意我这里将hello.c改成了 hello.cpp,否则编译通不过。 在lib文件夹中新建CMakeLists.txt内容如下: CMAKE_MINIMUM_REQUIRED(VERSION 2.8) ADD_LIBRARY(hello SHARED hello.cpp)#添加hello的动态库 INSTALL(FILES hello.h DESTINATION ~/catkin_ws/src/test0 /pa1/code/build/lib) #这里主要讲hello的头文件安装到build/lib 文件夹中,方便后续包含头文件

3)usehello.cpp放置到src文件夹中,并在src文件夹中新建CMakeLists.txt CMakeLists.txt内容如下: CMAKE_MINIMUM_REQUIRED(VERSION 2.8) INCLUDE_DIRECTORIES(~/catkin_ws/src/test0/pa1/code/build/ lib)#包含头文件所在的目录 ADD_EXECUTABLE(sayhello useHello.cpp)#通过usehello.c生成 可执行程序 TARGET_LINK_LIBRARIES(sayhello hello)#链接hello库

返回上一层code目录,新建CMakeLists.txt内容如下: CMAKE_MINIMUM_REQUIRED(VERSION 2.8) ADD_SUBDIRECTORY(lib)#添加子目录lib ADD_SUBDIRECTORY(src bin)#添加子目录src,并设置目标二进制文件的生成位置

终端进入新建的build文件夹,并编译 mkdir build cd build cmake … sudo make install

编译成功后终端截图如下: build/bin中会生成可执行文件sayhello,终端输入命令执行它 ./sayhello

打印结果如下: 运行代码详见 视觉SLAM理论与实践1-cmake练习

四、理解ORB-SLAM2框架

终端输入命令git clone https://github.com/raulmur/ORB_SLAM2.git 下载下来后,截图如下: 将orb-slam2编译一下(由于我电脑之前跑通过orb-slam2所以中间的一些依赖项的安装过程就省略了,这里我新建了一个工作空间,将源码git下来之后直接在终端输入如下命令,linux环境下编译顺利通过了,ros环境下编译这一不还没涉及到。。。) cd ORB_SLAM2 chmod +x build.sh ./build.sh

截图如下: 编译完成之后ORB-SLAM2文件夹下会生成的库文件3有: 1) lib/libORB_SLAM2.so 2) Thirdparty/g2o/lib /libg2o.so 3) Thirdparty/DBoW2/lib/libDBoW2.so

可执行文件有6个: 1) Examples/Monocular/mono_euroc 2)Examples/Monocular/mono_kitti 3)Examples/Monocular/mono_tum 4)Examples/RGB-D/rgbd_tum 5)Examples/Stereo/stereo_euroc 6)Examples/Stereo/stereo_kitti

include文件夹中是.h头文件; src文件夹中是.cc源文件; Example文件夹中是输出的文件,包含单目,RGBD,双目以及ROS,编译通过之后可执行文件会存放在这些文件夹中; 会链接到如下这些库:

  1. lib/libORB_SLAM2.so 注:上面这个库应该是CMakeLists.txt中的如下代码产生的动态(共享)库 add_library(${PROJECT_NAME} SHARED src/System.cc … src/Viewer.cc )
  2. Thirdparty/g2o/lib /libg2o.so
  3. Thirdparty/DBoW2/lib/libDBoW2.so

五、使用摄像头或视频运行 ORB-SLAM2

编译完成截图上题4.2小结已给出,这里不再赘述。 在CmakeLists.txt尾部添加如下代码: set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples /myvideo) add_executable(myvideo Examples/myvideo/myvideo.cpp) target_link_libraries(myvideo ${PROJECT_NAME})

注: 前提是在Examples 文件夹中新建myvideo 文件夹, 并将myvideo.cpp、myvideo.yaml、myvideo.mp4放到Examples/myvideo文件夹下。 运行ORB-SLAM2体会: 1)根据如上过程在编译并运行./myvideo可执行文件时,首先出现段错误的提示,后来摸索一番之后总结出可能是某个文件的路径不对,于是查看myvideo.cpp代码,并将myvideo.cpp文件将原先的 string vocFile = “./Vocabulary/ORBvoc.txt”;

改为如下: string vocFile = “…/…/Vocabulary/ORBvoc.txt”;

因为 ORBvoc.txt在当前文件夹的上两级目录中,如果不改就会产生段错误的报告。 2)运行画面出来了但是画面不动,在网上找到答案,注释掉cv::waitKey(30)这一行代码,否则需要一直按住键盘的空格键才能运行下去。注释掉这一行代码之后直接可以流畅的运行啦!运行截图如下: 运行代码详见 orb_slam2_for_myvideo+中文注释

友情提示:代码下载需要C币,请事先判断是否对您有帮助,谨慎下载哦!!!

标签: cvs系列视觉传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台