vins-fusion环境配置、安装与测试

2023-05-16

本文主要介绍如何搭建vins-fusion的运行环境,以及解决vins-fusion编译运行时遇到的环境冲突问题,并在此基础上实现例程的运行。

目录

  • 一、安装OpenCV-3.4.11
    • 1.1 配置依赖环境
    • 1.2 下载OpenCV-3.4.11
    • 1.3 将压缩包复制到Ubuntu的主目录下
    • 1.4 解压压缩包
    • 1.5 更改工作路径并创建build文件
    • 1.6 cmake
    • 1.7 使用make编译
    • 1.8 进行安装
    • 1.9 完成配置
    • 1.10 检查
    • 1.11 安装ros与opencv的桥接工具包
  • 二、安装eigen3
    • 2.1 终端apt命令安装
    • 2.2 源码编译安装
  • 三、安装ceres-solver库
  • 四、下载VINS-FUSION的代码库
    • 4.1 下载编译
    • 4.2 解决错误
    • 4.3 完成编译安装
  • 五、添加到bash配置文件
  • 六、下载数据集
  • 七、解决段错误(核心已转储)
  • 八、运行VINS
    • 8.1 Monocualr camera + IMU
    • 8.2 Stereo cameras + IMU
    • 8.3 Stereo cameras
  • 九、总结

本文是在已经安装好 ROS 的基础上,在 Ubuntu20.04 系统下,完成 vins-fusion 的环境搭建,主要涉及到 opencv3.4.11、ceres-solver2.0.0、eigen3 的安装,解决了 vins对ros自带的opencv4不兼容ceres对c++的版本要求 、以及一些 常见编译错误 的问题,还解决了运行vins-fusion时出现 ==段错误(核心已转储)==的问题。

注意按照目录查找,解决编译问题在 4.2节,段错误在 第七部分

一、安装OpenCV-3.4.11

1.1 配置依赖环境

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

在这里插入图片描述

sudo apt-get install libgtk2.0-dev

在这里插入图片描述

sudo apt-get install pkg-config

1.2 下载OpenCV-3.4.11

下载地址:https://opencv.org/releases/
点击 Sources 下载自己需要的版本
在这里插入图片描述

1.3 将压缩包复制到Ubuntu的主目录下

在浏览器下载压缩包,将压缩包复制到Ubunt系统的主目录下
在这里插入图片描述

1.4 解压压缩包

键入Ctrl+Alt+T ,打开终端,在命令行输入unzip opencv-3.4.11
在这里插入图片描述

1.5 更改工作路径并创建build文件

运行命令:

cd opencv-3.4.11
mkdir build
cd build

1.6 cmake

运行命令:

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

在这里插入图片描述

1.7 使用make编译

运行命令:sudo make -j4
可以使用sudo make -j8sudo make -j4sudo make
注:单线程编译:sudo make ,这会等待比较长的时间,如果你想更快编译完,可以使用命令:sudo make -j4sudo make -j8 ,而 -j4 表示使用 4 个线程进行编译,而 -j8 表示使用 8 个线程进行编译。
在这里插入图片描述

1.8 进行安装

运行命令:sudo make install
在这里插入图片描述

1.9 完成配置

  • 1.用gedit打开/etc/ld.so.conf

  • 2.在文件中加上一行include /usr/local/lib
    其中/usr/local/libOpenCV 安装路径也就是 makefile 中指定的安装路径
    运行命令:sudo gedit /etc/ld.so.conf
    在这里插入图片描述

  • 3.修改完成后点击右上角的保存,保存后会看到之前的警告信息,这是正常情况。
    在这里插入图片描述

  • 4.更新系统共享链接库: sudo ldconfig

  • 5.配置bash,修改 bash.bashrc 文件:

sudo gedit /etc/bash.bashrc 

在这里插入图片描述

  • 在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

在这里插入图片描述

  • 6.保存并退出,然后执行如下命令使得配置生效:
source /etc/bash.bashrc

在这里插入图片描述

  • 7.更新一下:
sudo updatedb

在这里插入图片描述

  • 这个时候发现找不到命令,因为我这个Ubuntu系统刚装好,上面什么都没有

  • 执行命令:

sudo su
apt-get install mlocate

在这里插入图片描述

  • 现在更新一下
    在这里插入图片描述

1.10 检查

接下来查看 OpenCV 的版本信息是否匹配:

pkg-config --modversion opencv

在这里插入图片描述

1.11 安装ros与opencv的桥接工具包

sudo apt-get install ros-noetic-cv-bridge ros-noetic-tf ros-noetic-message-filters ros-noetic-image-transport

在这里插入图片描述

到这里就完成了OpenCV的安装

二、安装eigen3

下面是两种安装方式,二选一即可

2.1 终端apt命令安装

sudo apt-get install libeigen3-dev

在这里插入图片描述

Eigen 只包含头文件,因此它不需要实现编译,只需要引入头文件即可编译项目。
Eigen 头文件的默认安装位置是:/usr/local/include/eigen3;在很多程序中 include 时经常使用 #include <Eigen/Dense> 而不是使用 #include <eigen3/Eigen/Dense>所以要做下处理:

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

2.2 源码编译安装

1、移动到指定目录下:

git clone https://github.com/eigenteam/eigen-git-mirror

在这里插入图片描述

这里由于网络不好下了5、6次

2、安装,执行下面的命令:

cd eigen-git-mirror
mkdir build
cd build
cmake ..

在这里插入图片描述
在这里插入图片描述

3、执行命令:

sudo make install

在这里插入图片描述

4、安装后,头文件安装在/usr/local/include/eigen3/,需要执行下面的命令移动头文件

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

在这里插入图片描述

到这里就完成了 eigen3 的安装

三、安装ceres-solver库

1.在 ceres-solverGit 上下载需要的版本,我用 2.0.0
链接:https://github.com/ceres-solver/ceres-solver/releases/tag/2.0.0
在这里插入图片描述
2.解压后移动到主目录下
在这里插入图片描述

3.安装相关依赖

sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev

在这里插入图片描述
在这里插入图片描述

检查一下

在这里插入图片描述

4.解压并创建build

cd ceres-solver-2.0.0
mkdir build
cd build
cmake ..

在这里插入图片描述在这里插入图片描述

make -j4

在这里插入图片描述在这里插入图片描述

5.安装

sudo make install

在这里插入图片描述
在这里插入图片描述
到这里就完成了 ceres-solver 的安装

四、下载VINS-FUSION的代码库

4.1 下载编译

下载,先在可视化界面的主目录下创一个vins-fusion的文件夹,再在这个文件夹内部创建一个src文件,然后执行下面两条命令:

cd ~/vins-fusion/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git

在这里插入图片描述

返回上一级目录,执行catkin_make

cd ../
catkin_make

在这里插入图片描述

编译这一步会遇到大量的错误,要耐心地一步一步解决。

4.2 解决错误

编译过程中遇到大量错误,但是好多都是同一个错误,只需要逐个解决就行了。
在这里插入图片描述

  • 1.首先,ROS noetic 版本中自带的 OpenCV4VINS-mono 中需要使用的 OpenCV3 冲突的问题。修改vins-mono代码兼容 opencv4。其实主要修改的是 camera_model 这个包,直接包含缺失的头文件即可。
//在camera_model包中的头文件Chessboard.h中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/calib3d/calib3d_c.h>
//在CameraCalibration.h中添加
#include <opencv2/imgproc/types_c.h>
#include <opencv2/imgproc/imgproc_c.h>

在这里插入图片描述在这里插入图片描述

  • 2.报如下错误:
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:21: error: ‘integer_sequence’ is not a member of ‘std’
   64 | struct SumImpl<std::integer_sequence<T, N, Ns...>> {
      |                     ^~~~~~~~~~~~~~~~

在这里插入图片描述

在报错的项目的 CMakeList 里的

set(CMAKE_CXX_FLAGS “-std=c++11”)

改成

set(CMAKE_CXX_STANDARD 14)

这里需要修改 global_fusioncamera_modelsloop_fusionvins_estimator 文件下的 CMakeLists ,如下图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3.编译时,遇到如下错误:
make[2]: *** [VINS-Fusion/vins_estimator/CMakeFiles/vins_lib.dir/build.make:258:VINS-Fusion/vins_estimator/CMakeFiles/vins_lib.dir/src/featureTracker/feature_tracker.cpp.o] 错误 1
make[2]: *** 正在等待未完成的任务....

在这里插入图片描述

vins_estimator/src/feature_tracker.h 添加

#include <opencv2/highgui.hpp>
#include <opencv2/cvconfig.h>
#include <opencv2/imgproc/types_c.h>

在这里插入图片描述

  • 4.编译时遇到报错
error: ‘CV_FONT_HERSHEY_SIMPLEX’ was not declared in this scope

在这里插入图片描述

解决方法 :将报错文件上的 CV_FONT_HERSHEY_SIMPLEX 参数改为 cv::FONT_HERSHEY_SIMPLEX;由报错信息可知,这里主要是pose_graph.cppkeyframe.cpp这两个文件需要修改;最好使用文本编辑的 查找和替换 完成,以免遗漏

在这里插入图片描述
在这里插入图片描述

  • 5.报如下错误:
error: ‘CV_RGB2GRAY’ was not declared in this scope
   53 |       cv::cvtColor(image, aux, CV_RGB2GRAY);
      |                                ^~~~~~~~~~~

在这里插入图片描述

解决方案:在报错头文件里添加

#include <opencv2/imgproc/types_c.h>

在这里插入图片描述

  • 6.报如下错误:
error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope
  125 |    imLeft = cv::imread(leftImagePath,  CV_LOAD_IMAGE_GRAYSCALE );
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~

在这里插入图片描述

这里是因为在 Opencv4 中,CV_LOAD_IMAGE_GRAYSCALE找不到;需要将CV_LOAD_IMAGE_GRAYSCALE改为 cv::IMREAD_GRAYSCALE;由错误提示信息可知,这里需要修改的地方有 KITTIGPSTest.cppKITTIOdomTest.cpp

在这里插入图片描述
在这里插入图片描述

4.3 完成编译安装

cd ~/vins-fusion
catkin_make

在这里插入图片描述

五、添加到bash配置文件

执行命令:

source ~/vins-fusion/devel/setup.bash
sudo vi ~/.bashrc

在这里插入图片描述

最后一行加

source ~/vins-fusion/devel/setup.bash

在这里插入图片描述

Esc。输入 :wq!,保存并退出

六、下载数据集

为了验证vins-fusion是否正确安装以及环境是否搭建完成,需要下载数据集来进行验证。这里建议大家可以事先下载好数据集,因为比较大会比较费时间,故而建议提前下好这样 VINS 安好后就可以立马验证编译运行了。

链接 :https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#the_euroc_mav_dataset

我这里下载的是 MH_04_difficult.bag

在这里插入图片描述

将它放在主目录的 SLAM/test_data

在这里插入图片描述

七、解决段错误(核心已转储)

我先用 单目+IMU 的方式跑数据集,命令如下

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosrun loop_fusion loop_fusion_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosbag play ~/SLAM/test_data/MH_04_difficult.bag

运行到第二条的时候报错:

[INFO][1669097501.814593790]: reading paramerter of camera /home/xwj/vins-fusion/src/VINS-Fusion/config/euroc/camo_mei.yaml
段错误(核心已转储)

第三条会报错:

cam calib path:/home/xwj/vins-fusion/src/VINS-Fusion/config/euroc/camo_mei.yaml
段错误(核心已转储)

第四条跑起来没有任何结果

在这里插入图片描述
这里由于 noeticopencv4 头文件和参数名与 vins-fusion 所使用的 opencv3 不同造成的,需要使用非 ROS Noetic 自带 OPENCV 版本编译工程,通过修改 cv_bridge 配置文件来把 vins-fusion工程链接到 opencv3 库上

首先找到 cv_bridge 配置文件所在位置

cd /opt/ros/noetic/share/cv_bridge/cmake
sudo gedit cv_bridgeConfig.cmake

在94-96行,修改成如下内容

if(NOT "include;/usr/include;/usr/include/opencv " STREQUAL " ")
  set(cv_bridge_INCLUDE_DIRS "")
  set(_include_dirs "include;/usr/include;/usr/local/include/opencv")

在这里插入图片描述在这里插入图片描述

之后将指定库文件也修改为自己安装的opencv库文件,需要对

set(libraries "cv_bridge;/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_dnn.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_features2d.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_flann.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_ml.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_objdetect.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_photo.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_stitching.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_video.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_videoio.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_aruco.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_bgsegm.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_bioinspired.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_ccalib.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_datasets.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_dnn_objdetect.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_dnn_superres.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_dpm.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_face.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_freetype.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_fuzzy.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_hdf.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_hfs.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_img_hash.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_line_descriptor.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_optflow.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_phase_unwrapping.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_plot.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_quality.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_reg.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_rgbd.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_saliency.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_shape.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_stereo.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_structured_light.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_superres.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_surface_matching.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_text.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_tracking.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_videostab.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_viz.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_ximgproc.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_xobjdetect.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_xphoto.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_core.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2.0;/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.4.2.0")

在这里插入图片描述
进行修改。

需要把"cv_bridge;…到 …")之间的内容换成自己的库文件,这里如果要一点一点的修改比较麻烦,可以使用 locate命令 来查看自己的库文件,输入Ctrl+Alt+T打开新的一个终端,在命令行输入

locate opencv

在这里插入图片描述
向下滑动到 /usr/local/lib开头的文件,复制/usr/local/lib/libopencv_calib3d.so/usr/local/lib/libopencv_viz.so.3.4.11的全部内容。

可以在浏览器里面打开 CSDNmarkdown编辑器 ,输入 Ctrl+Shift+K,在代码段里面粘贴刚刚复制的东西,然后在第一行全面加上 set(libraries "cv_bridge; ,在最后一行后面加上"),然后再在每一行后面加上;注意是英文输入状态下),然后从第二行开始,将光标移动到一行的最前面,按一下 Backspace把所有的换行符去掉 ,最终编辑完后所有的内容在CSDN的编辑器的预览模式下看起来应该是一行,像下面这样

在这里插入图片描述

然后把代码片里面的内容复制下来,将119行(主要是看内容,行数不一定准确,大致在附近)的内容替换掉

set(libraries "cv_bridge;usr/local/lib/libopencv_calib3d.so;/usr/local/lib/libopencv_calib3d.so.3.4;/usr/local/lib/libopencv_calib3d.so.3.4.11;/usr/local/lib/libopencv_core.so;/usr/local/lib/libopencv_core.so.3.4;/usr/local/lib/libopencv_core.so.3.4.11;/usr/local/lib/libopencv_dnn.so;/usr/local/lib/libopencv_dnn.so.3.4;/usr/local/lib/libopencv_dnn.so.3.4.11;/usr/local/lib/libopencv_features2d.so;/usr/local/lib/libopencv_features2d.so.3.4;/usr/local/lib/libopencv_features2d.so.3.4.11;/usr/local/lib/libopencv_flann.so;/usr/local/lib/libopencv_flann.so.3.4;/usr/local/lib/libopencv_flann.so.3.4.11;/usr/local/lib/libopencv_highgui.so;/usr/local/lib/libopencv_highgui.so.3.4;/usr/local/lib/libopencv_highgui.so.3.4.11;/usr/local/lib/libopencv_imgcodecs.so;/usr/local/lib/libopencv_imgcodecs.so.3.4;/usr/local/lib/libopencv_imgcodecs.so.3.4.11;/usr/local/lib/libopencv_imgproc.so;/usr/local/lib/libopencv_imgproc.so.3.4;/usr/local/lib/libopencv_imgproc.so.3.4.11;/usr/local/lib/libopencv_ml.so;/usr/local/lib/libopencv_ml.so.3.4;/usr/local/lib/libopencv_ml.so.3.4.11;/usr/local/lib/libopencv_objdetect.so;/usr/local/lib/libopencv_objdetect.so.3.4;/usr/local/lib/libopencv_objdetect.so.3.4.11;/usr/local/lib/libopencv_photo.so;/usr/local/lib/libopencv_photo.so.3.4;/usr/local/lib/libopencv_photo.so.3.4.11;/usr/local/lib/libopencv_shape.so;/usr/local/lib/libopencv_shape.so.3.4;/usr/local/lib/libopencv_shape.so.3.4.11;/usr/local/lib/libopencv_stitching.so;/usr/local/lib/libopencv_stitching.so.3.4;/usr/local/lib/libopencv_stitching.so.3.4.11;/usr/local/lib/libopencv_superres.so;/usr/local/lib/libopencv_superres.so.3.4;/usr/local/lib/libopencv_superres.so.3.4.11;/usr/local/lib/libopencv_video.so;/usr/local/lib/libopencv_video.so.3.4;/usr/local/lib/libopencv_video.so.3.4.11;/usr/local/lib/libopencv_videoio.so;/usr/local/lib/libopencv_videoio.so.3.4;/usr/local/lib/libopencv_videoio.so.3.4.11;/usr/local/lib/libopencv_videostab.so;/usr/local/lib/libopencv_videostab.so.3.4;/usr/local/lib/libopencv_videostab.so.3.4.11;/usr/local/lib/libopencv_viz.so;/usr/local/lib/libopencv_viz.so.3.4;/usr/local/lib/libopencv_viz.so.3.4.11")

在这里插入图片描述

修改完后,切换路径

cd ~/vins-fusion
catkin_make

在这里插入图片描述

就可以正常运行 vins-fusion

八、运行VINS

8.1 Monocualr camera + IMU

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosrun loop_fusion loop_fusion_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosbag play ~/SLAM/test_data/MH_04_difficult.bag

在这里插入图片描述
在这里插入图片描述

实现效果:
在这里插入图片描述

完整流程:

vins-fusion 上跑单目+imu数据集

8.2 Stereo cameras + IMU

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
rosbag play ~/SLAM/test_data/MH_04_difficult.bag

在这里插入图片描述
在这里插入图片描述

实现效果:
在这里插入图片描述

完整流程:

vins-fusion上跑双目+imu数据集

8.3 Stereo cameras

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/vins-fusion/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
rosbag play ~/SLAM/test_data/MH_04_difficult.bag

在这里插入图片描述
在这里插入图片描述

实现效果:

在这里插入图片描述

完整流程:

vins-fusion跑双目数据集

九、总结

本文主要记录我在搭建vins-fusion环境时遇到的问题,以及如何去解决这些问题的方法和思路,由于本人也刚开始接触这方面的知识,对一些理论知识的认识和对为什么出现这些错误没有深入的思考。主要是对自己遇到的问题的总结,写出来是希望能够帮助到那些和我一样遇到相同问题的同学,在搭建环境时可以少浪费时间,不会像我花了几天才弄好,将更多的精力放在对相关知识的学习上。

本文主要借鉴了参考列表里面的两篇博客,本文仅用作学习总结以及为那些遇到相同问题的同学提供帮助。

希望能够帮助到各位读者,祝你们搭建环境顺利!欢迎各位读者提出本文存在的错误!谢谢!


参考列表:

1.ubuntu20.04安装eigen3.4.0(两种方式)和ceres-solver2.0.0
2.Ubuntu20.04运行Vins-fusion

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vins-fusion环境配置、安装与测试 的相关文章

随机推荐

  • 停车场寻车系统(识别车牌,手机app查询相关信息)

    停车场寻车系统 文章目录 停车场寻车系统前言一 手机app二 车牌识别三 数据查询总结 停车场寻车系统 前言 上个星期用了一周左右做了一个停车场寻车系统的项目 xff0c 可以识别车牌 xff0c 通过手机app查询车辆信息 一 手机app
  • K210+MLX90614红外测温

    红外测温 文章目录 红外测温前言一 MLX90614二 使用步骤总结 前言 K210随便找一个都行 一 MLX90614 这个模块之前的博客有介绍 xff0c 他是用IIC通信的 模块就不过多介绍了 xff0c 之间看代码吧 import
  • PHP mysql_connect()连接-已淘汰

    1 首先在mysql命令控制台新建数据库 mysql gt create database test Query OK 1 row affected 0 04 sec mysql gt use test Database changed m
  • STM32使用红外测温

    红外测温 文章目录 红外测温前言一 原理二 STM32代码1 MLX90614 c2 MLX90614 h 总结 前言 一 原理 红外测温的原理可以直接去看卖家的手册 xff0c 手册多余的话太多了 xff0c 知道他是IIC通信的就行了
  • Arduino——PAJ7620手势识别模块

    手势识别模块 文章目录 手势识别模块前言一 安装PAJ7620库二 代码 前言 在用arduino驱动这些模块得时候 xff0c 方法很简单 xff0c 先去管理库中找这个库 xff0c 如果有这个库 xff0c 然后下载这个库 xff0c
  • Arduino——正点原子sim800c模块

    sim800c 文章目录 sim800c前言一 arduino代码 前言 最近要做一个项目需要用到sim800c xff0c 就用arduino驱动一下吧 xff0c 用的是正点原子的sim800c 使用的时候最好使用12v1A供电 xff
  • Arduino——野火GPS模块

    GPS模块 文章目录 GPS模块前言一 Arduino代码 前言 手上还有一个GPS xff0c 用arduino做模块很方便 xff0c 打算和短信模块结合 xff0c 短信模块上次已经使用完成了 xff0c 这次学习一下GPS模块 看模
  • Arduino——GY39大气压、温湿度、光照模块

    GY39模块 文章目录 GY39模块前言一 模块介绍二 arduino代码 前言 前几天买东西的时候买了一个GY39 xff0c 这个模块集成了温湿度 xff0c 大气压 xff0c 海拔 xff0c 光照一体 xff0c 使用起来很方面
  • Arduino通过NRF24L01实现双机无线通信

    双机无线通信 文章目录 双机无线通信前言一 接线二 Arduino代码1 主机2 从机 总结 前言 无线通信对于做各种项目来说都很加分 xff0c 今天使用这个nrf模块进行无线通信 我原本是想用两个蓝牙的 xff0c 但是蓝牙有个缺点 x
  • STM32+ESP8266+机智云+DHT11数据上传

    机智云 文章目录 机智云前言一 工程的修改二 数据的上传1 标识符2 数据处理3 数据上传 三 app控制 前言 今天搞了一下机智云 xff0c 就想把温湿度发到app上去 xff0c 然后能够控制灯的开关 之前从来没有用过这个玩意 xff
  • 数据结构——线性结构(二)

    数据结构 文章目录 数据结构前言一 线性结构1 线性表2 线性表的特点 二 线性结构的存储形式1 顺序结构2 链式结构 前言 很早之前提到了数据结构 xff0c 上一篇博客简单介绍了什么是线性结构 xff0c 这篇博客简单做一个补充 常见的
  • 数据结构——顺序表(三)

    数据结构 文章目录 数据结构一 什么是顺序表二 顺序表的创建1 静态顺序表2 动态数据表 三 顺序表的初始化 销毁四 顺序表的插入1 尾插2 头插3 任意插入 总结 一 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线
  • PHP new mysqli()连接

    1 首先在mysql命令控制台新建数据库 mysql gt create database test Query OK 1 row affected 0 04 sec mysql gt use test Database changed m
  • 数据结构——链表(五)

    数据结构 96 文章目录 数据结构前言一 什么是链表二 实现单链表1 单链表的结构2 单链表的初始化3 单链表的插入4 遍历链表5 链表长度 总结 前言 接下来学习一下链表 xff0c 链表比数组用的更多 一 什么是链表 概念 xff1a
  • 数据结构——双向循环链表(八)

    数据结构 文章目录 数据结构前言一 双向循环链表初始化二 双向循环链表的插入遍历 三 双向链表的删除总结 前言 双向循环链表用的次数是最多的 xff0c 下面我们看一下双向循环链表的增删改查 一 双向循环链表初始化 双向循环链表不能出现NU
  • 数据结构——栈(九)

    数据结构 文章目录 数据结构前言一 栈的介绍二 栈的实现1 栈的结构2 栈的初始化3 进栈4 出栈5 栈的判断6 取栈顶元素7 栈的清空8 栈的销毁 总结 前言 栈是一种特殊的线性表 xff0c 只允许在固定的一端进行插入和删除元素的操作
  • 数据结构——队列(十)

    数据结构 文章目录 数据结构一 什么是队列二 队列的实现1 队列的结构2 队列的初始化3 入队4 出队6 队头队尾的获取 总结 一 什么是队列 队列 xff1a 只允许在一端进行插入数据操作 xff0c 在另一端进行删除数据操作的特殊线性表
  • ESP8266通过MQTT协议连接onenet云平台

    中国移动onenet平台 文章目录 中国移动onenet平台前言一 onenet平台二 ESP82661 完整代码2 联网代码3 连云代码4 数据处理 总结 前言 最近在弄onenet平台 xff0c 用arduino结合esp8266 x
  • Arduino串口提取数字(整型和浮点型)

    数据提取 文章目录 数据提取前言一 提取整型数据二 提取浮点型数据 前言 之前需要用32和ESP进行通信上传数据 xff0c 一直都用的都是数据上传然后处理成整型数据 xff0c 今天需要处理成浮点型数据所以就查了一下 xff0c 于是就记
  • vins-fusion环境配置、安装与测试

    本文主要介绍如何搭建vins fusion的运行环境 xff0c 以及解决vins fusion编译运行时遇到的环境冲突问题 xff0c 并在此基础上实现例程的运行 目录 一 安装OpenCV 3 4 111 1 配置依赖环境1 2 下载O