2 熟悉 Linux
1. 如何在 Ubuntu 中安装软件(命令行界面)?它们通常被安装在什么地方?
- 在终端通过调用sudo apt-get install 软件名 从软件源安装软件 查看软件安装的位置可以通过下面两个方法
- 另一种是从网站上下载xx.tar.gz文件, 编译源文件,调用cmake编译命令,编译通过后调用sudo make install安装
- 从网站获取xxx.deb文件,如果得到文件的下载路径 例如在终端输入命令:wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
等下载完毕以后找到该文件所在目录然后执行安装命令:sudo dpkg -i ./google-chrome-stable_current_amd64.deb
2. linux 的环境变量是什么?我如何定义新的环境变量?
跟windows系统类似,环境变量就是系统预定义的参数。环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。
例如PATH这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如ls、rc-update或者emerge)不在这些目录中,系统就无法执行它(除非你输入这个命令的完整路径,如/bin/ls)。
自定义环境变量可以为局部的也可为全局的,为了区分两者的不同,环境变量通常用大写字母表示,而自定义变量通常使用小写子母表示。
声明一个环境变量:export AA="hello slam",相对普通变量而言,只需在前面加上export即可
但是是局部的,换个终端便查不到NAME,设置为全局的可以在/etc/profile中进行设置: export AA = "hello slam"
如果要将环境变量转化为自定义变量,则需使用下述命令:
1 declare +x AA
2 env | grep AA
3. linux 根目录下面的目录结构是什么样的?至少说出 3 个目录的用途。
linux根目录下的目录结构为树形结构,每一个目录都以/开端.例如/home, /boot等.
/bin:系统有很多放置执行档的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。
在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。
/home:这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。
/boot:主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。
/root:系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。
4. 假设我要给 a.sh 加上可执行权限,该输入什么命令?
.sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。
5. 假设我要将 a.sh 文件的所有者改成 xiang:xiang,该输入什么命令?
chown xiang:xiang a.sh
三. SLAM 综述文献阅读
1. SLAM 会在哪些场合中用到?至少列举三个方向。
AR/VR,自动驾驶,无人机路径规划,自主机器人导航
2. SLAM 中定位与建图是什么关系?为什么在定位的同时需要建图?
移动机器人自定位与环境建模问题是紧密相关的。环境模型的准确性依赖于定位精度,而定位的实现又离不开环境模型。在未知环境中,机器人没有什么参照物,只能依靠自己并不十分准确的传感器来获取外界信息,如同一个盲人在一个陌生环境中摸索的情况。这种情况下,定位是比较困难的。有地图的定位和有定位的地图创建都是容易解决的,但无地图的定位和未解决定位的地图创建如同"鸡--蛋"问题,无从下手。定位和建图两个问题相互依赖,准确的定位依赖于正确的地图,而构建正确的地图又需要准确的定位,这是一个迭代的过程。
3. SLAM 发展历史如何?我们可以将它划分成哪⼏个阶段?
SLAM问题的普及与移动机器人室内应用的出现有关。室内操作排除了使用GPS来限制定位误差; 此外,SLAM为用户构建的地图提供了一个吸引人的替代方案,显示出在没有专门的本地化基础设施的情况下机器人的运行是可能的。我们可以把slam的历史划分为过去的古典时代和现在的算法分析时代。
4. 列举三篇在 SLAM 领域的经典⽂献。
Javier Civera, Andrew J. Davison, J. M. M. Montiel: Inverse Depth Parametrization for Monocular SLAM , IEEE Transactions on Robotics, 2008
Raul Mur-Artal, J. M. M. Montiel and Juan D. Tardos: ORB-SLAM: a Versatile and Accurate Monocular SLAM, IEEE Transactions on Robotics, under review. ArXiv preprint, 2015
F. Endres, J. Hess, N. Engelhard, J. Sturm, D. Cremers, W. Burgard: An Evaluation of the RGB-D SLAM System, Proc. of the IEEE Int. Conf. on Robotics and Automation (ICRA), 2012
四 CMake 练习
新建了一个cmake文件夹,在其中建立src和include文件夹,然后把hello.h放入include文件夹中,把hello.c放入src文件夹中,在cmake文件夹下放入useHello.c并新建CMakeLists.txt文件,
在文件中写入以下内容
# 声明要求的 cmake 最低版本 CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) # 声明一个 cmake 工程 PROJECT(SAYHELLO) # 设置编译模式 SET( CMAKE_BUILD_TYPE "Release") # 添加头文件路径 INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include) # 添加一个共享库 ADD_LIBRARY( hello SHARED ${PROJECT_SOURCE_DIR}/src/hello.c) # 添加一个可执行文件 ADD_EXECUTABLE( sayhello useHello.c) # 将库文件链接到可执行程序上 TARGET_LINK_LIBRARIES( sayhello hello) # 安装库文件 INSTALL(TARGETS hello LIBRARY DESTINATION lib) # 安装头文件 INSTALL(FILES ${PROJECT_SOURCE_DIR}/include/hello.h DESTINATION include)
编译运行并安装
1 mkdir build 2 cd build 3 cmake .. 4 make 5 sudo make install
运行成功后终端截图如下
五 理解 ORB-SLAM2 框架
1.使用git clone命令下载ORB-SLAM2完成截图
2.
(a)ORB_SLAM2将编译出一个libORB_SLAM2.so库文件,和6个可执行文件
(b)include文件夹包含所需的头文件,src文件夹下是c源文件,Examples文件夹下是Monocular, RGB-D,Stereo,ROS,四个文件夹,分别存储这单目,深度,双目的可执行程序,ROS下放着基于ROS的单目,深度,双目及ar源文件.
(c)ORB-SLAM2 中的可执行文件链接到了OpenCV,Eigen,Pangolin,DBoW2,g2o第三方库.
六 * 使用摄像头或视频运行 ORB-SLAM2(3 分,约 1 小时)
ORB-SLAM2编译完成的截图
myvideo.cpp 加入到 ORB-SLAM2 工程中
首先把myvideo.cpp myvideo.mp4 myvideo.yaml 三个文件放入ORB_SLAM2文件夹中在CMakeLists.txt的末尾添加如下代码
add_executable(myvideo myvideo.cpp)
target_link_libraries(myvideo ${PROJECT_NAME})
myslam.cpp 加入到 ORB-SLAM2 工程中
把myslam.cpp myslam.yaml两个文件放入ORB_SLAM2文件夹中,CMakeLists.txt的末尾添加如下代码
add_executable(myslam myslam.cpp)
target_link_libraries(myslam ${PROJECT_NAME})
编译运行
./build.sh
得到的可执行文件在Examples/Monocular/内,运行可执行程序,通过以下命令
cd ORB_SLAM2
./Examples/Monocular/myslam ./Examples/Monocular/myvideo
运行截图如下所示