目录
vscode配置
-
基本插件:c++、cmake、ROS、汉化
-
includePath配置的两种方法:
目的:搜到头文件
1、自动修复
2、ctrl + shift +p --> mlocate
使用locate指令找到Eigen库在哪
- locate指令下载
sudo apt-get install locate
- 使用locate指令找到Eigen位置
locate Core | grep Eigen
注意:程序运行时,在/usr/include目录下所需要的头文件,可能不止是eigen3,这时要使用通配符
"/usr/include/**" #表示使用的是该目录下的所有库文件,缺点是搜索需要的库文件时会比较慢!
问题解决:
-
嵌入式终端:ctrl + `
-
ssh、Debug、Git。。。
Eigen使用(涉及向量、矩阵、旋转)
特点:
- 纯头文件(无静态库和动态库,即无.cpp文件)
- 高效
- 常用
Eigen库模块
- core:向量、矩阵、矩阵基本操作、矩阵分解
- Dense:求特征值、特征向量、稠密矩阵的一些操作
- Geometry:位姿变换相关的数据类型和操作
Eigen模块的下载
- 若是先安装了ros则不需要再安装Eigen模块,否则使用如下命令安装
sudo apt install libeigen3-dev
useEigen
- Eigen中,向量和矩阵的基本操作
useGeometry
- Eigen中,旋转的表示,和不同形式旋转两之间的转化
CMAKE
- 变量区分大小写,指令不分大小写,多个参数可以用空格or回车隔开
- set(CMAKE_CXX_FLAGS"-std=c++11")
-
CMakeLists如何添加Eigen库
方法1:直接mlocate
方法2:find_package(XXX)
locate XXX | grep cmake
两个变量:${XXX_INCLUDE_DIRS}-->${XXX_LIBRARIES}生成.so和.a文件静态库时是空的。
REQUIRED:选项表示如果报没有找到的话,cmake过程会终止
COMPONENTS:在他们的后面可以列出一些
关于XXX的具体形式如何确定
-
关于eigen为何没有target_link_libraries还可以运行-->因为Eigen没有库(动态链接和静态连接库),是纯头文件。
Eigen/core模块
- 主要定义了向量、矩阵如何求逆,求导,求trace。
Eigen/Geometry模块
- 主要定义角轴、四元数、欧拉角、旋转矩阵。
课本示例useEigen代码
cmake
cmake_minimum_required(VERSION 2.8)#cmake的版本
project(useEigen)
set(CMAKE_BUILD_TYPE "Release")
#set定义变量时使用,或者更改cmake已有的内置变量
#确定cmake编译是使用Debug还是release版本来进行编译
#使用Debug进行编译有编译的中间过程,编译后的文件体积大
#使用release进行编译无中间过程,编译后的文件体积小
set(CMAKE_CXX_FLAGS "-O3")
#CMAKE_CXX_FLAGS是一个变量群,可对其中的很多变量进行修改
#可以进行修改很多变量
#-O3告诉编译器优化我们的代码
#-std=c++意思是使用c++11的标准进行编译
# 添加Eigen头文件
include_directories("/usr/include/eigen3")
#或者
#单独一个文件可以写成这样:include_directories(/usr/include/eigen3)
add_executable(eigenMatrix eigenMatrix.cpp)
#target_link_libraries(eigenMatrix ${EIGEN3_LIBRARIES})
#没有上一行的代码是因为eigen只有头文件没有库文件
#正常情况下,是要编译.cpp文件生成相应的库文件,再将库文件链接到目标文件上
若cmake中
include_directories("/usr/include/eigen3")
在写.cpp程序时,在include中找头文件,只会在/usr/include/eigen3该目录下寻找
在eigenMatrix.cpp中
#include <Eigen/Core>
若cmake中
include_directories("/usr/include/eigen3/Eigen")
在写.cpp程序时,在include中找头文件,只会在/usr/include/eigen3该目录下寻找
在eigenMatrix.cpp中
#include <Core>
注意:cmake是为了得到makefile,makefile决定了各个程序之间的链接关系,如果修改程序的话只需要重新make,更新之前的目标文件就好。
- 使用set定义变量:变量名是hello
- message 设置STATUS
set(hello "123")
message(STATUS "hello=" ${hello})
- 使用cmake进行编译时会出现:
-
message 设置WARNING
set(hello "123")
message(WARNING "hello=" ${hello})
- 使用cmake进行编译时会出现警告信息:
- message设置FATAL_ERROR
set(hello "123")
message(FATAL_ERROR "hello=" ${hello})
-
使用cmake编译时不进行编译
使用cmake进行编译的流程
- 在存在makelist文件的文件夹中创建build文件夹
- cd build
- cmake ..
- make
- ./目标文件
CMakeLists如何添加Eigen库
添加头文件依赖
find_package(xxx)
include_directories(${xxx_INCLUDE_DIRS})#找到库文件
target_link_libraries(visualizeGeometry ${xxx_LIBRARIES})#链接到动态链接库
方法1:直接mlocate
locate XXX
include_directories("/usr/include/eigen3")
方法2:find_package(xxx)
- 两个变量${xxx_INCLUDE_DIRS}和${xxx_LIBRARIES}
- REQUIRED——选项表示如果报没有找到的话,cmake的过程会终止
- locate xxx | grep cmake
注意:有Eigen3Config.cmake的文件可以导入到CMakeLists.txt文件中!
4.COMPONENTS——在它们的后面可以列出一些与包相关的部件清单