IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 深蓝学院视觉SLAM从理论到实践第一章作业 -> 正文阅读

[系统运维]深蓝学院视觉SLAM从理论到实践第一章作业

第一题 熟悉Linux

1、请描述 apt-get 安装软件的整体步骤,说明 Ubuntu 是如何管理软件依赖关系和软件版本的。

答: (1)修改镜像源,使用国内的镜像源能加快下载速度

? (2)sudo apt-get update 更新软件列表

? (3)sudo apt-get install packagename 安装名为packagename的安装包

我们用apt-get install的时候,实际上是从/var/lib/apt/lists中扫描的得到该软件的最新版本地址,并通过该地址下载该软件包,软件包将会被保存在临时文件夹**/var/cache/apt/archives**下,最后开始安装该软件。/etc/apt/sources.list这个文件指定apt查找或安装某个软件包时要搜索的仓库,里面每一行定义一个仓库。仓库就是存放着一组软件包及其相关信息,包括用来描述每个软件包的头部信息、包之间的依赖关系。Ubuntu仓库里面的软件包可以划分为以下几个类别:

1)main #Ubuntu支持的开源软件

2)universe #由社区维护的开源软件

3)multiverse #存在版权限制或法律问题的软件

4)restricted #专有设备驱动程序

5)backports #较新的Ubuntu发行中有的但较早发行中不存在的软件包

apt在选择软件包时,根据sources.list文件中指定的类别来搜索各个仓库。

2、 什么是软件源?如何更换系统自带的软件源?如何安装来自第三方软件源

答: (1)软件源是debian系的概念,把软件放在一个pool里面,用一条命令就可以自动从指定服务器下 载并安装

? (2)方法一:通过修改文件修改软件源

? 第一步:复制原来的源到sources.list.backup中

? sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

? 第二步:修改源

? sudo gedit /etc/apt/sources.list

? 将打开的文件中内容删除,换成需要修改的源

? 第三步:更新源

? sudo apt-get update

? sudo apt-get upgrade

? 方法二:或者直接从软件与更新中更换软件源

? (3)第一步:添加该软件源的公钥,有两种方式

? 【1】通过从keyserver.ubuntu.com上根据Fingerprint(指纹、密钥特征)下载导入公钥,这 种方式要求你必须知道该软件源的uid(密钥名+email)的一部分才能搜索到。

? 【2】通过下载公钥导入,一般第三方源的网址都有提供gpg文件的下载,或者通过 keyserver.ubuntu.com上也可以得到

? 第二步:添加源

? 【1】进入存放第三方软件源的目录

? cd /etc/apt

? 【2】用touch命令建立.list文件,并通过vim编辑文件

? sudo touch ×××.list

? sudo vim xxx.list

? 【3】写入内容并保存([]只是表示不同部分,实际是没有的)

? [deb/deb-src] [https://download.docker.com/linux/] [distribution] [main restricted universe multiverse]

? 第一部分: deb指下载下来的是二进制预编译软件包类型;deb-src指下载下来的是用于编译二进制软件包的源代码类型

? 第二部分: 仓库地址,存放软件资源的服务器地址

? 第三部分: 发行版本,指dists目录下的目录,如:enial,trusty,precise,stable,testing等等

? 第四部分: 软件包类型,main是官方支持的自由软件,restricted是官方支持的非完全自由的软件,universe是社区维护的自由软件,multiverse是非自由软件,这四个类型可以多选

? 【4】更新源

? sudo apt update

3、除了 apt-get 以外,还有什么方式在系统中安装所需软件?除了 Ubuntu 以外,其他发行版使用什 么软件管理工具?请至少各两种

答: (1)其余方式:使用.deb包的安装方式、二进制编译或者脚本安装方式、tar.gz软件包安装、软 件商店安装

? (2)其余包的软件管理工具:Radhat分支下的yum、rpm

4、环境变量 PATH 是什么?有什么用途?LD_LIBRARY_PATH 是什么?指令 ldconfig 有什么用途?

答: (1)环境变量是指操作系统中用来指定操作系统运行环境的一些参数

? (2)主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径

? (3)ldconfig 命令主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库,进而创建出动态装入程序(ld.so)所需的连接和缓存文件.

5、Linux 文件权限有哪几种?如何修改一个文件的权限

答: (1)权限有:读、写、执行

? (2)修改权限的方法为:使用chmod指令,正确输入参数即可修改文件的用户权限

? 使用chown指令,可以修改所属用户与组

6、Linux 用户和用户组是什么概念?用户组的权限是什么意思?有哪些常见的用户组?

答: (1)用户:如果要使用系统资源,就必须向系统管理员申请一个账号,然后通过这个账号进入系 统。不同的用户拥有不同的权限,可以查看和操作不同的文件。

? 用户组:用户组(group)就是具有相同特性的用户(user)集合。

? (2)用户组的权限指的是一个用户组的成员所都具有的权限。

? (3)常见的用户组有:administrators、backup operators、guests、power users、 replicator、users,默认新建立的用户属于users组、也就是everyone。其administrators 组的用 户具有与administrator相同的权限

7、常见的 Linux 下 C++ 编译器有哪几种?在你的机器上,默认用的是哪一种?它能够支持 C++ 的哪个标准?

答: (1)Clang、GCC/G++、ICC

? (2)GCC/G++

? (3)c11标准

第二题 SLAM 综述文献阅读

1、SLAM 会在哪些场合中用到?至少列举三个方向。

答: (1)机器人自主导航

? 通过SLAM可以建立稠密地图,用于机器人的避障和导航

? (2)VR/AR

? SLAM可以在未知环境中定位???位并同时构建环境三维地图, 从?保证叠加的虚拟与现实 场景 在?何上的?致性。

? (3)无人驾驶

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

答: (1)定位与建图是相辅相成的关系,若要获得精确的定位,需要精确的环境信息,若想建立精确 的地图,需要准确的自身定位。

? (2)定位过程中需要地图信息,所以只有在定位的同时建图,才能为后续的定位提供信息。

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

答: (1)classical age

? 此阶段引入SLAM的主要概率公式,包括基于扩展卡尔曼滤波器、RaoBlackwelled粒?滤波 器和最?似 然估计的?法

? (2)algorithmic-analysis age

? 此阶段主要研究SLAM的基础性质,例如可观性、收敛性、一致性

? (3)robust-perception age

? 此阶段进一步提高SLAM的可用性,例如提升鲁棒性、理解环境信息等、

4、从什么时候开始 SLAM 区分为前端和后端?为什么我们要把 SLAM 区分为前端和后端?

答: (1) 区分为前端和后端应该是视觉SLAM方法之后,具体时间节点还不太清楚

? (2)前端的作用是估计不同帧间相机的位姿变化以及局部地图的样子,后端的作用是对前端的数据进行进一步的优化,得到全局一致的轨迹和地图。所以前端和后端完成的任务不同、方法不同,对任务的拆分使得SLAM整体任务更好完成。

5、列举三篇在 SLAM 领域的经典文献。

答:

? (1)Mur-Artal R , Montiel J M M , Tardos J D . ORB-SLAM: A Versatile and Accurate Monocular SLAM System[J]. Robotics IEEE Transactions on, 2015, 31(5):1147-1163.

? (2)Engel J , Schps T , Cremers D . LSD-SLAM: Large-scale direct monocular SLAM[J]. 2014.

? (3)Alex Kendall, Matthew Grimes, Roberto Cipolla, “PoseNet: A Convolutional Network for RealTime 6-DOF Camera Relocalization”, in ICCV 2015

第三题 CMake练习

CmakeLists:

	cmake_minimum_required(VERSION 2.8.3)
?	set(CMAKE_BUILD_TYPE "Release")
?	PROJECT(SayHello)

?	INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

?	set(LIBHELLO_SRC src/hello.cpp)
?	add_library(hello_lib SHARED ${LIBHELLO_SRC})
?	add_executable(sayhello src/useHello.cpp)

?	target_link_libraries(sayhello hello_lib)

?	INSTALL(TARGETS hello_lib LIBRARY DESTINATION /usr/local/lib)
?	INSTALL(FILES ${PROJECT_SOURCE_DIR}/include/hello.h DESTINATION
?	/usr/local/include)

运行结果:

image-20220912174848695

第四题 gflags、glog、gtest 的使用

(1)安装过程

? +++gtest

? https://github.com/google/googletest 下载文件

				tar -xzvf googletest-release-1.8.1.tar.gz

?				cd  googletest-master

?				mkdir build

?				cd build

?				cmake ..

?				sudo make

?				sudo make install

? +++glog

				git clone https://github.com/google/glog

?				cd glog

?				mkdir build && cd build

?				cmake .. 

?				make 

?				sudo make install

? +++gflags

				https://github.com/google/googletest 下载文件

?				tar -xzvf gflags-2.2.2.tar.gz

?				mkdir build

?				cd build

?				cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON

?				sudo make

?				 sudo make install 

2、3、4 使用glog输出代替 std::cout 并且能控制输出次数

代码:

image-20220912174923680

CmakeLists:

image-20220912174936094

运行结果:

image-20220912174952186

第五题 理解ORB_SLAM2框架

(1)下载结果

image-20220912175011754

(2-a)将会编译出1个库文件(libORB_SLAM2.so),以及6个可执行文件

image-20220912175026789

image-20220912175051647

? (2-b)

? include:内部为头文件

? src:内部为ORB_SLAM2的源文件,最终会编译生成libORB_SLAM2.so

? Examples:内部为不同相机运行的一些示例程序,还有一个ROS版本的ORB_SLAM2

(2-c)

image-20220912175113694

第六题 使用摄像头或视频运行ORB_SLAM2

(1)编译结果

image-20220912175158420

(2)CMakeLists

image-20220912175216073

? (3)运行结果截图

image-20220912175244047

image-20220912175307565

体会:运行出结果还是比较有成就感的,由于没有摄像头没有办法用摄像头尝试,等有了摄像头我还打算用摄像头运行一下。现在用的是开源的方案,对其原理和内部实现还不太了解,我希望能够通过接下来的学习能够深入的了解原理和代码。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:22:56  更:2022-09-15 02:25:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:02:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码