1、如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅?
答:第一个问题有两种安装方式(1)apt-get install (2)dpkg,详情如下所示
1.1 apt-get install
安装方式
1.1.1 sudo apt-get install
普通安装
1.1.2 sudo apt-get -f install
修复安装
1.1.3 sudo apt-get -f reinstall
重新安装
1.2dpkg
安装方式
只有一种形式sudo dpkg -i package.deb
其中deb
是Linux的安装包格式。dpkg
是Debian Package
的简写,是为Debian
专门开发的套件管理系统,方便软件的安装、更新及移除。
第二个问题根据上述安装方式分为两种情况
1 apt-get install
安装位置取决于包的维护者确定的,不是用户
2 dpkg -L +软件包的名字
,可以知道这个软件包包含了哪些文件
系统安装软件一般在/usr/share
,可执行的文件在/usr/bin
,配置文件可能安装到了/etc
下等。文档一般在 /usr/share
,可执行文件 /usr/bin
,配置文件 /etc
,lib文件 /usr/lib。
2、linux 的环境变量是什么?我如何定义新的环境变量?
答:环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息(包含相关的路径信息)。下面以举一个例子作为说明:
当我们运行ls -l
这个指令时,系统除了在当前目录下面寻找此指令程序外,还应到path
中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
ls
指令的可执行文件所在位置如下所示:
exbot@ubuntu:~$ which ls//搜寻ls可执行文件所在位置
/bin/ls//输出结果
这里用which
来搜寻ls
的位置,得到结果/bin/ls
而在我的Ubuntu系统中环境变量(以:
隔开)如下所示:
exbot@ubuntu:~$ echo $PATH
/opt/ros/indigo/bin:/opt/jdk/java/bin:
/home/exbot/ardupilot/Tools/autotest:
/opt/gcc-arm-none-eabi-4_9-2015q3/bin:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/games:
/usr/local/games
因此当我们在任意文件目录下执行ls
指令,他会在该文件目录搜寻ls
指令,如果未搜寻到,则相应到环境变量中的路径中去搜寻ls
的执行文件。
定义新的环境变量可以通过如下方式:
exbot@ubuntu:~$ export PATH =$PATH:/usr/local/bin
3、linux 根⽬录下⾯的⽬录结构是什么样的?⾄少说出 3 个⽬录的⽤途。
(1)/bin 用户二进制文件
包含二进制可执行文件,系统所有用户可执行文件都在这个文件夹里,例如:ls,cp,ping等。
(2)/sbin 系统二进制文件
包含二进制可执行文件,但只能由系统管理员运行,对系统进行维护。
(3)/etc 配置文件
包含所有程序配置文件,也包含了用于启动/停止单个程序的启动和关闭shell脚本。
(4)/dev 设备文件
包含终端所有设备,USB或连接到系统的任何设备。例如:/dev/tty1、/dev/usbmon0
(5)/proc 进程信息
包含系统进程的相关信息。
这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。
这是一个虚拟的文件系统,系统资源以文本信息形式存在。例如:/proc/uptime
(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相关的数据。
4、假设我要给 a.sh 加上可执⾏权限,该输⼊什么命令?
答:chmod 777 文件名
无脑将文件设置成对拥有者、组成员、其他人可读、可写、可执行。
chmod a+x 文件名
将文件在原来的配置上增加可执行权限。
具体为什么这么做可以百度,这里不多说。
5、假设我要将 a.sh ⽂件的所有者改成 xiang:xiang,该输⼊什么命令?
答:chown xiang:xiang 文件名
将文件的所有者改成xiang:xiang。
具体为什么这么做可以百度,这里不多说。
1、SLAM 会在哪些场合中⽤到?⾄少列举三个⽅向。
2、SLAM 中定位与建图是什么关系?为什么在定位的同时需要建图?
3、SLAM 发展历史如何?我们可以将它划分成哪⼏个阶段?
4、列举三篇在 SLAM 领域的经典⽂献。
书写⼀个由 cmake 组织的 C++ ⼯程,要求如下:
具体步骤:
1、先在工程目录下创建lib
文件夹,lib
文件夹包含hello.h
和hello.c
,并创建一个CMakeLists.txt
文件,CMakeLists.txt
内容如下所示:
CMAKE_MINIMUM_REQUIRED(VERSION 3.2)
ADD_LIBRARY(hello SHARED hello.c)//添加hello的动态库
INSTALL(FILES hello.h DESTINATION ~/backup/cmake/code/build/lib) //这里主要讲hello的头文件安装到build/lib文件夹中,方便后续包含头文件
2、然后在工程目录下创建src
文件夹,src
文件夹包含useHello.c
,并创建一个CMakeLists.txt
文件,CMakeLists.txt
内容如下所示:
CMAKE_MINIMUM_REQUIRED(VERSION 3.2)
INCLUDE_DIRECTORIES(~/backup/cmake/code/build/lib)//包含头文件所在的目录
ADD_EXECUTABLE(sayhello useHello.c)//通过usehello.c生成可执行程序
TARGET_LINK_LIBRARIES(sayhello hello)//链接hello库
3、接着在工程目录下创建一个CMakeLists.txt
文件,CMakeLists.txt
内容如下所示:
CMAKE_MINIMUM_REQUIRED(VERSION 3.2)
ADD_SUBDIRECTORY(lib)//添加子目录lib
ADD_SUBDIRECTORY(src bin)//添加子目录src,并设置目标二进制文件的生成位置
4、最后在工程目录下创建一个build
文件夹,在build
文件夹中输入cmake ..
和sudo make install
,然后在/build/bin
文件中找到sayhello的可执行文件,运行结果如下所示:
1、从 github.com 下载 ORB-SLAM2 的代码。
答:不多说,直接在terminal输入git clone https://github.com/raulmur/ORB_SLAM2
2、阅读 ORB-SLAM2 代码⽬录下的 CMakeLists.txt,回答问题
(a)ORB-SLAM2 将编译出什么结果?有⼏个库⽂件和可执⾏⽂件?
答:编译结果:输出多个可执行文件程序和多个库文件。
库文件:通过/src
文件夹中的.cc文件生成动态库文件ORB_SLAM2
可执行文件:rgbd_tum、stereo_kitti、stereo_euroc、mono_tum、mono_kitti、mono_euroc
(b)ORB-SLAM2 中的 include, src, Examples 三个⽂件夹中都含有什么内容?
答:include文件夹包含:对应src中程序的代码函数头文件
src文件夹包含:相应程序的代码函数的c++文件
Examples文件夹包含:对应不同类别的相机的主程序(具体内容没仔细看,学完再回来补)。
(c)ORB-SLAM2 中的可执⾏⽂件链接到了哪些库?它们的名字是什么?
答:链接到以下库:
(1)OPENCV_LIBS
(2)EIGEN3_LIBS
(3)Pangolin_LIBRARIES
(4)/ORB-SLAM2/Thirdparty/DBoW2/lib/libDBoW2.so
(5)/ORB-SLAM2/Thirdparty/g2o/lib/libg2o.so
1、编译ORB-SLAM2
效果图如下所示:
2、如何将 myslam.cpp或 myvideo.cpp 加⼊到 ORB-SLAM2 ⼯程中?请给出你的 CMakeLists.txt 修改⽅案。
答:两种解决方案,如下所示
(1)如果要编译myvideo.cpp
,在原有的CMakeLists.txt
文件最后添加
add_executable(myvideo Examples/Monocular/myvideo.cpp)//这里生产的可执行程序在Examples/Monocular/里面
target_link_libraries(myvideo ${PROJECT_NAME})
根据myvideo.cpp
的程序可知,可执行文件myvideo
需要myslam.yaml、myvideo.mp4、ORBvoc.txt
文件。因此修改myvideo.cpp
程序,并将需要的文件复制到可执行myvideo
所在的文件夹里。
// 参数文件与字典文件
// 如果你系统上的路径不同,请修改它
string parameterFile = "./myvideo.yaml";
string vocFile = "./ORBvoc.txt";
// 视频文件
string videoFile = "./myvideo.mp4";
(2)如果要编译myslam.cpp
,同理上个步骤,不多说啦。
3、ORB-SLAM2的运⾏截图
(1)myvideo
运行效果图,虚拟机卡得一匹
(2)myslam
运行效果图,usb视频显示出来是黑的,一脸懵逼,回头学完再看看什么原因。