视觉SLAM学习打卡【5-2】-全日制学生混版

  • 最近发现了一个宝藏up主(全日制学生混),对初学者相当友好(讲解cmke、linux更加细致)。故花费数天再学ch1-ch5,并跑通了前5节的所有demo。
  • 学生混引申了SLAM领域要学的其他方面的知识,个人认为,知道自己努力的方向是一件可喜又可叹的事情(仰天叹息兮,学海无涯,“屎山”重重)。正可谓君子终日乾乾,夕惕若厉,始能无咎。往山之巅,任重而道远。

一、linux文件系统

  • / - 根目录
  • /bin - 用户基础二进制文件( eg:cd、ls、chomd等 )
  • /boot - 静态启动文件
  • /dev - 设备文件(磁盘block、总线bus等)
  • /etc - 配置文件(.config文件为主)
  • /home - 主目录(用户)
  • /lib - 存放着系统最基本的动态链接共享库
  • /mnt - 用户临时挂载别的文件系统
  • /opt - 自行安装的非常规软件所在目录(eg:ros)
  • /root - linux系统超级管理员
  • /tmp - 临时文件,重启清理
  • /usr - 存储用户文件(eg:各种库)

在这里插入图片描述

二、ROS文件系统

在这里插入图片描述

WorkSpace --- 自定义的工作空间

    |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。

    |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。

    |--- src: 源码

        |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成

            |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件

            |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)

            |-- scripts 存储python文件

            |-- src 存储C++源文件

            |-- include 头文件

            |-- msg 消息通信格式文件

            |-- srv 服务通信格式文件

            |-- action 动作格式文件

            |-- launch 可一次性运行多个节点 

            |-- config 配置信息

        |-- CMakeLists.txt: 编译的基本配置

三、linux基本命令

  • ~ : 代表用户所在的文件夹 /home/user name
  • pwd : 显示当前所在路径
  • ls : 查看当前文件夹下目录
  • cd : 转到目标文件夹
  • 一个点 :代表当前路径
  • 两个点 :代表上一级目录
  • cd . : 路径不变,仍在当前路径
  • cd+两点 : 返回上一级
  • mkdir : 在当前目录下创建文件夹
  • mkdir -p haha/xixi : 创建连级(-p)文件夹(haha、xixi均为文件夹,xixi在haha下)
  • mkdir haha xixi wuwu : 在当前目录下创建同级文件夹
  • touch hello.txt : 创建hello.txt文件
  • rm -rf haha : 删除haha文件夹
  • rm -r hello.txt:删除hello.txt文件
  • sudo dpkg -i code_1.74.0-1670260027_amd64.deb : 安装 (dpkg -i) VScode (code_1.74.0-1670260027_amd64.deb为从官网下载的.deb安装包)
  • man+指令 :查看某个指令的描述(man为manual手册的缩写)
  • sudo apt update : 更新软件源
  • sudo apt install git : 安装git工具克隆代码(apt install可以安装一些库)
  • git clone URL : 从github克隆源码
  • git clone --recursive URL : 若GitHub文件中有引用@,则可以通过recursive递归下载(例如slambook2中的3rdparty)
  • g++是C++程序的编译器,gcc是C程序的编译器
  • ./ + 可执行文件 : 执行.java/.panthon/.cpp文件
  • ll : 查看文件读(r)、写(w)、执行(x) 权限.
    chmod -x a.out : 把可执行文件a.out改为不可执行
    chmod +x a.out : 把不可执行文件a.out权限改为可执行
    在这里插入图片描述
    其中,绿色代表可执行文件.

四、换镜像源

一般unbantu默认软件安装源为mirrors .unbantu.com,网速较慢。可以更改为国内镜像源。
在这里插入图片描述
1.点击图标Software&Updates
2.点击download from 下拉
3.选择 others
4.选择china下的镜像源

五、Linux中常用工具

1. htop

sudo apt install htop

类似于Windows的任务管理器,可以看到每个程序对CPU的占有值,并可以杀死某个程序.(引申:可以根据cpu占有情况优化自己的算法)

2. vim

sudo apt install vim
  • vim为linux下的一种文本编辑工具.(在当前终端界面打开)
 1.进入hello.txt编辑模式
vim hello.txt
 2.输入i,进入INSERT插入模式
 3.编辑内容
 4.退出:先按Esc,退出INSERT模式;再按冒号(:),到达文件底部;最后输入wq(保存并退出)
  • linux自带文本编辑器gedit,可以打开文件(弹出编辑框)
gedit hello.txt

3.terminator

sudo apt install terminator

通过分栏,可以在一个终端页面下同时运行多个进程(例如ros中控制小乌龟运动的程序)

  • 左右分屏 :ctrl+shift+e
  • 上下分屏:ctrl+shift+o(当然,也可以直接通过鼠标右键分屏)
  • 选择终端框写程序:Alt+方向键
  • 同时操作多个终端:Alt+A
  • 放大某个命令框或者返回之前布局:ctrl+shift+x

4.VScode

选择源码文件夹进入,右键选择在当前页面打开终端.

code .  //.代表当前路径

六、ros一键安装

致敬鱼香ros的发明者,为ros初学者带来了极大的帮助.

wget http://fishros.com/install -O fishros && . fishros 

七、终端编译运行程序

1.单个cpp文件没有链接库

  • 编译:直接g++
g++ helloSlam
  • 运行:回车后生成 a.out 变绿色的可执行文件
./a.out
  • 若想生成自定义名称的可执行文件,需加入-o
g++ helloSlam -o new_name

2.单个cpp文件有链接库

  • 编译:格式 [ g++ 可执行文件 库文件 ]
g++ useHello.cpp libHelloSlam.cpp

3.源文件过多,引入cmake(依托于CMakeLists.txt文件)

  • 若没有安装ros,先安装cmake
sudo apt install cmake
  • 编译:cmake . 后,生成CMakeFiles等中间文件,然后再make。编译正儿八经是在第二步的make操作.
cmake . 
make

在这里插入图片描述

  • 由于cmake生成的中间文件影响源代码文件的观看直观性(即文件夹里一下子看上去乱七八糟),引入build文件夹.
mkdir build/
cd build/
cmake .. //生成的中间文件都在build中
make
./helloSlam

八、VScode之includePath配置

在程序中,会出现有头文件却找不见的情况,这时,就需要配置include路径.
1.使用自动修复功能
在这里插入图片描述
2.没有自动修复,手动添加

  • CTRL+Shift+p,点击Edit Configurations(JSON)命令,手动添加
    在这里插入图片描述
    在这里插入图片描述
  • 查找相关头文件,用到命令locate,先安装:
sudo apt install mlocate

安装好后,开始查找

locate core
locate core | grep Eigen   //grep筛选和Eigen相关的

在这里插入图片描述
注:若是刚安装的库,由于日志数据未更新,可能locate不到,这时需要更新数据库Datebase:

sudo updatedb
  • 加入JSON文件
    在这里插入图片描述
  • 通配符** ,即包含/usr/include/下所有库的头文件
/usr/include/**
  1. cpp文件中为 #include <Eigen/Core>
    c_cpp_properties.json中为 “ /usr/include/eigen3
    Core文件实际路径为 /usr/include/eigen3/Eigen/Core
# 若把c_cpp_properties.json改为
/usr/include/eigen3/Eigen
# .cpp文件可直接写为 
#include <Core>

九、CMakeLists如何添加xxx库

请添加图片描述

十、cmake进阶

1.target_link_libraries(target item)中item都可以是什么

  • 库文件
# 共享库
add_library(hello_shared SHARED libHelloSLAM.cpp)
# 将库文件链接到可执行程序上
target_link_libraries(useHello hello_shared)
  • 路径URL
find_package( Pangolin )
include_directories( ${Pangolin_INCLUDE_DIRS} )
target_link_libraries( visualizeGeometry ${Pangolin_LIBRARIES} )
  • 库的target(命名空间格式)
    在这里插入图片描述
    ctrl+f 查找 ::
    在这里插入图片描述
find_package(Sophus REQUIRED)
target_link_libraries(useSophus Sophus::Sophus)
# 若想查找具体的xxx::xxx(Sophus::Sophus),直接进入xxTargets.cmke文件查找

使用Sophus::Sophus,不用再写头文件目录include_directories(${Pangolin_INCLUDE_DIRS}) 和链接库路径target_link_libraries(visualizeGeometry ${Pangolin_LIBRARIES})

在这里插入图片描述

2.option

CMake中的option用于控制编译流程,相当于C语言中的条件编译.
options基本格式如下:

option(<variable> "<help_text>" [value])
  • variable:定义选项名称
  • help_text:说明选项的含义
  • value:定义选项默认状态,一般是OFF或者ON,除去ON之外,其他所有值都为认为是OFF
# option可以和if一块使用
option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF)
if(USE_UBUNTU_20)
    message("You are using Ubuntu 20.04, fmt::fmt will be linked")
    find_package(fmt REQUIRED)
    set(FMT_LIBRARIES fmt::fmt)
endif()

在执行cmake时,可以使用-D+选项名称,修改选项的值,如下:

cmake .. -DUSE_UBUNTU_20=ON

3.add_subdirectory

命令格式如下:

add_subdirectory (source_dir [binary_dir] [EXCLUDE_FROM_ALL])
  • source_dir :必选参数。该参数指定一个子目录,子目录下应该包含CMakeLists.txt文件和代码文件。子目录可以是相对路径也可以是绝对路径。
  • binary_dir:可选参数。该参数指定一个目录,用于存放输出文件。如果该参数没有指定,则默认的输出目录使用source_dir。
  • [EXCLUDE_FROM_ALL]:可选参数。当指定了该参数,父目录的CMakeLists.txt不会构建子目录的目标文件,必须在子目录下显式去构建。
    例外情况:当父目录的目标依赖于子目录的目标,则子目录的目标仍然会被构建出来以满足依赖关系。

4.message

一般命令格式为:

message([<mode>] "message text" ...)

mode如下:

  • FATAL_ERROR:cmake出现错误,停止处理并生成。
  • SEND_ERROR:出错,继续处理,但跳过生成。
  • WARNING:发出警告,继续处理。
  • STATUS:输出项目用户可能感兴趣的主要消息。
#CMakeLists.txt中
set(hello "123")
message(STATUS "hello=" ${hello})  
//camke ..后,输出hello=123

十一、软件安装方式

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值