zoukankan      html  css  js  c++  java
  • 视觉SLAM十四讲课后答案-ch1

    一、Linux的熟悉

    1.如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅?

    1)apt-get 方式的安装;

    普通安装:sudo apt-get install XXX

    修复安装:sudo apt-get -f install XXX

    重新安装:sudo apt-get -f reinstall XXX

    2)dpkg方式的安装

    sudo dpkg -i package_name.deb

    安装的地方

    通常被安装在/usr/bin这个目录下(默认的安装路径(《鸟哥》P789)


    2. linux 的环境变量是什么?我如何定义新的环境变量?

    环境变量:环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息;

    对所有用户生效的永久性变量(系统级):

    这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。作用范围是整个系统。

    设置方式: 用vim在/etc/profile文件中添加我们想要的环境变量,用export指令添加环境变量

    当然,这个文件只有在root(超级用户)下才能修改。我们可以在etc目录下使用ls -l查看这个文件的用户及权限

    【注意】:添加完成后新的环境变量不会立即生效,除非你调用source /etc/profile 该文件才会生效。否则只能在下次重进此用户时才能生效。

    对单一用户生效的永久性变量(用户级):

    只针对当前用户,和上面的一样,只不过不需要在etc下面进行添加,直接在.bash_profile文件最下面用export添加就好了。

    定义新的环境变量:export PATH=$PATH:/要添加的路径
    或者
    export PATH=/要添加的路径$PATH
    注意PATH后没有空格
    这里 .bashrc和.bash_profile原则上来说设置此类环境变量时在这两个文件任意一个里面添加都是可以的。

    ~/.bash_profile是交互式login方式进入bash shell运行。

    ~/ .bashrc是交互式non-login方式进入bash shell运行。

    二者设置大致相同。

    就是.bash_profile文件只会在用户登录的时候读取一次

    而.bashrc在每次打开终端进行一次新的会话时都会读取。

    临时有效的环境变量(只对当前shell有效):

    此类环境变量只对当前的shell有效。当我们退出登录或者关闭终端再重新打开时,这个环境变量就会消失。是临时的。 直接使用export指令添加。

    3. linux 根⽬录下⾯的⽬录结构是什么样的?⾄少说出 3 个⽬录的⽤途。

    /下面有

    bin :二进制可执行文件,比如很多用户使用的命令

    dev: 设备文件,这些包括终端设备、USB或连接到系统的任何设备

    root :

    srv :服务数据srv代表服务。包含服务器特定服务相关的数据。例如,/srv/cvs包含cvs相关的数据

    usr:包含二进制文件、库文件、文档和二级程序的源代码。/usr/bin中包含用户程序的二进制文件。如果你在/bin中找不 用户二进制文件,到/usr/bin目录看看。例如:at、awk、cc、less、scp。

    boot :

    etc:运行程序所需要的配置文件

    lost+found

    opt

    run

    sys

    var:变量文件

    lib: 库文件

    media

    proc:进程信息

    sbin :

    tmp

    vmlinuz

    4. 假设我要给 a.sh 加上可执⾏权限,该输⼊什么命令?

    改变权限, chmod

    r:4 w:2 x:1

    chmod 111 a.sh

    在不知道该档案原本的权限为何的情况下,此时,利用

    chmod a+x filename,就可以让该程序拥有执行的权限了。

    5. 假设我要将 a.sh ⽂件的所有者改成 xiang:xiang,该输⼊什么命令?

    改变档案拥有者, chown

    chown xiang:xiang a.sh

    二、SLAM 综述文献阅读

    1. SLAM 会在哪些场合中⽤到?⾄少列举三个⽅向。

    增强现实应用

    动态场景、

    语义地图、

    多机器人协作

    2.SLAM 中定位与建图是什么关系?为什么在定位的同时需要建图?

    定位:机器人必须知道自己在环境中位置;

    建图:机器人必须记录环境中特征的位置(如果知道自己的位置);

    机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,实现机器人的自主定位和导航。

    3. SLAM 发展历史如何?我们可以将它划分成哪⼏个阶段?

    1985-1990:, Chatila 和Laumond (1985) and Smith et al. (1990)提出以建图和定位同时进行;

        单传感器为外部传感器:

    早期:

    声呐(Tardós et al. 2002; Ribas et al. 2008);

    后期:

    激光雷达(Nüchter etal. 2007; Thrun et al. 2006);

    相机(Se et al. 2005; Lemaire et al. 2007; Davison 2003;Bogdan et al. 2009);

    GPS(Thrun et al. 2005a);

    2、多传感器融合

    分为三个阶段:

    初始阶段:二十世纪八十年代

    发展阶段:二十世纪九十年代

    快速发展阶段
    4. 列举三篇在 SLAM 领域的经典⽂献。

    1.Smith, R.C. and P. Cheeseman, On the Representation and Estimation of Spatial Uncertainty. International Journal of
    Robotics Research, 1986. 5

    2. Se, S., D. Lowe and J. Little, Mobile robot localization and mapping with uncertainty using scale­invariant visual
    landmarks. The international Journal of robotics Research, 2002. 21

    3. Mullane, J., et al., A Random­Finite­Set Approach to Bayesian SLAM. IEEE Transactions on Robotics, 2011

     

    三、CMake 练习

    解题思路:

    1)建立一个mycmake文件夹然后建立/test3文件夹,再在里面建立子目录build文件和src文件和libhello文件,hello.cpp,hello.h放入libhello中,useHello.cpp放入src中,

    编写顶层CMakeLists.txt文件如下:
    
    project(hello)
    
     
    
    add_subdirectory(src)
    
    add_subdirectory(libhello)
    
    set(CMAKE_BUILD_TYPE "Release")
    
     
    
    src中的CMakeLists.txt文件如下:
    
    include_directories(${PROJECT_SOURCE_DIR}/libhello)
    
    set(APP_SRC useHello.cpp)
    
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
    
    add_executable(sayHello ${APP_SRC})
    
    target_link_libraries(sayHello libhello)
    
     
    
    libhello中的CMakeLists.txt文件如下:
    
    set(LIB_SRC hello.cpp)
    
    add_definitions("-DLIBHELLO_BUILD")
    
    add_library(libhello SHARED ${LIB_SRC})
    
    set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
    
    set_target_properties(libhello PROPERTIES OUTPUT_NAME "sayHello")

    理解 ORB-SLAM2 框架

    2. 此时我们不着急直接运行 ORB-SLAM2,让我们首先来看它的代码结构。ORB-SLAM2 是一个

    cmake 工程,所以可以从 CMakeLists.txt 上面来了解它的组织方式。阅读 ORB-SLAM2 代码目录

    下的 CMakeLists.txt,回答问题:

    (a) ORB-SLAM2 将编译出什么结果?有几个库文件和可执行文件?

    将编译出可执行文件和库文件:可执行文件6个和1个库文件

    (b) ORB-SLAM2 中的 include, src, Examples 三个文件夹中都含有什么内容?

    include文件中包含各种所需的头文件;

     

    src文件中包含各种源文件

    src/System.cc

    src/Tracking.cc

    src/LocalMapping.cc

    src/LoopClosing.cc

    src/ORBextractor.cc

    src/ORBmatcher.cc

    src/FrameDrawer.cc

    src/Converter.cc

    src/MapPoint.cc

    src/KeyFrame.cc

    src/Map.cc

    src/MapDrawer.cc

    src/Optimizer.cc

    src/PnPsolver.cc

    src/Frame.cc

    src/KeyFrameDatabase.cc

    src/Sim3Solver.cc

    src/Initializer.cc

    src/Viewer.cc

    Eaxmples中包含有RGB-D文件夹,Stereo文件夹, Monocular文件夹

    这三个文件夹下具体的东西都在下面的程序中,不再赘述。

    # Build examples

     

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/RGB-D)

     

    add_executable(rgbd_tum

    Examples/RGB-D/rgbd_tum.cc)

    target_link_libraries(rgbd_tum ${PROJECT_NAME})

     

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Stereo)

     

    add_executable(stereo_kitti

    Examples/Stereo/stereo_kitti.cc)

    target_link_libraries(stereo_kitti ${PROJECT_NAME})

     

    add_executable(stereo_euroc

    Examples/Stereo/stereo_euroc.cc)

    target_link_libraries(stereo_euroc ${PROJECT_NAME})

     

     

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Monocular)

     

    add_executable(mono_tum

    Examples/Monocular/mono_tum.cc)

    target_link_libraries(mono_tum ${PROJECT_NAME})

     

    add_executable(mono_kitti

    Examples/Monocular/mono_kitti.cc)

    target_link_libraries(mono_kitti ${PROJECT_NAME})

     

    add_executable(mono_euroc

    Examples/Monocular/mono_euroc.cc)

    target_link_libraries(mono_euroc ${PROJECT_NAME})

     

    (c) ORB-SLAM2 中的可执行文件链接到了哪些库?它们的名字是什么?

    libDBoW2.so和libg2o.so这两个库;

    ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so

    ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so



  • 相关阅读:
    SQL Server 重新组织生成索引
    atitit.软件设计模式大的总结attialx总结
    Linux防火墙限制指定port仅仅能由指定IP訪问
    android TextView里边实现图文混配效果
    Codeforces Round #270
    HTML5中x-webkit-speech语音输入功能
    oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)
    Android-HttpURLConnection自己主动管理cookie
    iOS UI01_UIView
    Okio简化处理I/O操作原理
  • 原文地址:https://www.cnblogs.com/long5683/p/12431867.html
Copyright © 2011-2022 走看看