相机标定和ORBSLAM2/VINS测试

2023-05-16

目录

  • 一、相机标定
    • 1.1 标定目的
    • 1.2 常见模型介绍
      • 1.2.1 相机模型
      • 1.2.2 畸变模型
    • 1.3 双目标定
      • 1.3.1 常见标定工具及对应使用场景
      • 1.3.2 Kalibr标定
      • 1.3.3 opencv双目标定
      • 1.3.4 basalt标定
  • 二、ORB-SLAM2测试
    • 2.1 修改Euroc配置文件
    • 2.2 ROS下跑通bag数据集
      • 2.2.1 创建ROS空间
      • 2.2.2修改topic(双目)
      • 2.2.3 编译
      • 2.3.4 执行
  • 三、VINS测试
  • 四、注意事项
    • ORB-SLAM ROS下编译出错

一、相机标定

1.1 标定目的

【WHY:为什么要进行相机标定?】

相机标定的目的是:建立相机成像几何模型并矫正透镜畸变。

建立相机成像几何模型:计算机视觉的首要任务就是要通过拍摄到的图像信息获取到物体在真实三维世界里相对应的信息,于是,建立物体从三维世界映射到相机成像平面这一过程中的几何模型就显得尤为重要,而这一过程最关键的部分就是要得到相机的内参和外参(后续文有具体解释)。

矫正透镜畸变:我们最开始接触到的成像方面的知识应该是有关小孔成像的,但是由于这种成像方式只有小孔部分能透过光线就会导致物体的成像亮度很低,于是聪明的人类发明了透镜。虽然亮度问题解决了,但是新的问题又来了:由于透镜的制造工艺,会使成像产生多种形式的畸变,于是为了去除畸变(使成像后的图像与真实世界的景象保持一致),人们计算并利用畸变系数来矫正这种像差。虽然理论上可以设计出不产生畸变的透镜,但其制造工艺相对于球面透镜会复杂很多,所以相对于复杂且高成本的制造工艺,人们更喜欢用数学来解决问题。

【摄像机标定分为两部分】

1.从世界坐标系转换到相机坐标系,由于这两个坐标系都是三维的,所以这一部分就是三维空间转到另外一个三维空间
2.从相机坐标系转换到图像坐标系,由于图像坐标系是二维的,所以这一部分就是三维空间转到另外一个二维空间

  • MATLAB单目-双目标定
  • 双目立体矫正基本知识
  • 双目标定与矫正完整流程
  • OPENCV棋盘格标定
  • 相机标定理论、概念
  • 张氏标定
  • 最详细、最完整的相机标定讲解
  • OpenCV相机标定全过程
  • 双目标定基本知识

1.2 常见模型介绍

1.2.1 相机模型

常见相机模型
在这里插入图片描述

1.2.2 畸变模型

在这里插入图片描述

1.3 双目标定

1.3.1 常见标定工具及对应使用场景

在这里插入图片描述
MATLAB和OpenCV 标定方法对比

MATLAB和OpenCV使用基本相同的校准算法。但是,MATLAB使用Levenberg-Marquardt非线性最小二乘算法进行优化(参见文档),而OpenCV使用梯度下降。我猜这可以解释重投影错误的大部分差异。此外,MATLAB和OpenCV使用不同的算法进行棋盘检测。Additionally, MATLAB and OpenCV use different algorithms for checkerboard detection.

1.3.2 Kalibr标定

Reference

  • wiki
  • 标定方法

Kalibr supports the following projection models:

  • pinhole camera model (pinhole)
    (intrinsics vector: [fu fv pu pv])
  • omnidirectional camera model (omni)
    (intrinsics vector: [xi fu fv pu pv])
  • double sphere camera model (ds)
    (intrinsics vector: [xi alpha fu fv pu pv])
  • extended unified camera model (eucm)
    (intrinsics vector: [alpha beta fu fv pu pv])

The intrinsics vector contains all parameters for the model:

fu, fv: focal-length
pu, pv: principal point
xi: mirror parameter (only omni)
xi, alpha: double sphere model parameters (only ds)
alpha, beta: extended unified model parameters (only eucm)

1.3.3 opencv双目标定

先标定单目,获得两个单目的内参和畸变系数,带入到下面程序中。MATLAB单目标定工具箱TOOLBOX_calib

data文件夹(存放左右图像)和主程序文件stereo.cpp,CMakeLists.txt在同一目录下,左右图像各13张,Clion直接运行。
参考:

  • OpenCV相机标定全过程

  • 双目相机标定和orbslam2双目参数详解

  • 视觉SLAM ORB-SLAM2 双目相机实时实验 双目相机矫正 配置文件

经实测,opencv sample里面自带的双目标定程序(stereo_clib.cpp),对平角相机效果较好,如果你是平角相机跳过本段,直接查看ORBSLAM2的双目配置参数,而stereo_clib.cpp对广角相机效果奇差。

先自行标定左右相机的单目畸变参数,填入下面代码中的初始化参数,楼主用的kalibr标定的单目,opencv也可以标定,这个自己解决。
说明一点,单目预标定没必要标的很精确,差不多就成,当然标的精确更好,畸变参数4,5个都可以,单目的所有预标定参数将在下面的代码中进行迭代优化。

修改你的棋盘信息 纵横角点数 还有每个格子的大小 单位mm。

1.3.4 basalt标定

Reference
wiki

  • 标定相机
 basalt_calibrate --dataset-path /media/gavyn/Gavyn/zhihui/5-9/calibr/0513_calib/1/cal_111-fix.bag  --dataset-type bag --aprilgrid aprilgrid_6x6.json --result-path basalt_calib_result/ --cam-types kb4 kb4

在这里插入图片描述

  • Cam-IMU联合标定
basalt_calibrate_imu --dataset-path /media/gavyn/Gavyn/zhihui/5-9/calibr/0513_calib/1/cal_111-fix.bag --dataset-type bag --aprilgrid aprilgrid_6x6.json --result-path  basalt_calib_result/ --gyro-noise-std 0.005 --accel-noise-std 0.01 --gyro-bias-std 4.0e-06 --accel-bias-std 0.0002

在这里插入图片描述

二、ORB-SLAM2测试

2.1 修改Euroc配置文件

  • 详细案例
    由于在 由于在 ROS下运行 下运行 .bag文件,双目配置以 文件,ORB-SLAM2中Euroc.yaml参数均可由OpenCV标定结果给出,参考例程: https://github.com/zwl2017/stereo_calibrate
    在这里插入图片描述
// Euroc.yaml.cpp
//Created by gavyn on 20-4-28.

%YAML:1.0

#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------

# Camera calibration and distortion parameters (OpenCV)
/*
这个是 双目相机的参数不是单个的做相机的相机中心跟焦距。
其对应:extrinsics.yml中的 Pr:
例如我的是
Pr: !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [ 2.8559499458758660e+02, 0., 2.7029193305969238e+02,
-3.9636548646706200e+04, 0., 2.8559499458758660e+02,
2.8112063348293304e+02, 0., 0., 0., 1., 0. ]
对应的修改焦距和相机中心如下:
Camera.fx: 2.8559499458758660e+02
Camera.fy: 2.8559499458758660e+02
Camera.cx: 2.7029193305969238e+02
Camera.cy: 2.8112063348293304e+02
*/
Camera.fx: 435.2046959714599
Camera.fy: 435.2046959714599
Camera.cx: 367.4517211914062
Camera.cy: 252.2008514404297

//默认不改,因代码中已做畸变纠正。故均为0.
Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0

Camera.width: 1280
Camera.height: 640

# Camera frames per second
Camera.fps: 20.0

# stereo baseline times fx
/*
这个参数是个大坑,其为相机的基线×相机的焦距。orbslam的参数文件中单位是m,而opencv标定文件中的单位是mm
其数值同样可以在Pr中找出,定位在下面矩阵中的-3.9636548646706200e+04 这个数
Pr: !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [ 2.8559499458758660e+02, 0., 2.7029193305969238e+02,
-3.9636548646706200e+04, 0., 2.8559499458758660e+02,
2.8112063348293304e+02, 0., 0., 0., 1., 0. ]

-3.9636548646706200e+04 就是要填入上面的参数,毫米转为米,求绝对值,填入Camera.bf:  3.9636548646706200e+01
*/
Camera.bf: 47.90639384423901

# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

# Close/Far threshold. Baseline times.
/*
深度阈值,不是一个精确的数值,大概预估的,可以不改动,要改的话参考下述公式
        自己粗略估计一个相机可以良好显示的最大距离值为s = 10  如果fx = 100 Camera.bf = 20
那么 ThDepth = s*fx/Camera.bf = 10 *100 /20 = 50
将你自己的参数带入上述公式 可以得到大概的阈值。
*/
ThDepth: 35

#--------------------------------------------------------------------------------------------
# Stereo Rectification. Only if you need to pre-rectify the images.
# Camera.fx, .fy, etc must be the same as in LEFT.P
#--------------------------------------------------------------------------------------------
LEFT.height: 640
LEFT.width: 1280

/*
 * 左图像畸变参数,位于intrinsics.yml中的
cameraDistcoeffL: !!opencv-matrix
rows: 5
cols: 1
dt: d
data: [ -2.8632659642339481e-01, 6.6994801733091039e-02,
-5.4763802000265397e-04, -1.4767993829858197e-03,
-6.1039950504068767e-03 ]
填入下面的 LEFT.D: 即可 
*/
# 左图像畸变参数
LEFT.D: !!opencv-matrix
rows: 1
cols: 5
dt: d
data:[-0.28340811, 0.07395907, 0.00019359, 1.76187114e-05, 0.0]

/*
左图像相机内参,可在intrinsics.yml 的cameraMatrixL:找到:
cameraMatrixL: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 2.8424872262658977e+02, 0., 3.3099977082276723e+02, 0.,
2.8535010886794362e+02, 2.5230877864759117e+02, 0., 0., 1. ]
填入LEFT.K:
*/
# 左图像内参
LEFT.K: !!opencv-matrix
        rows: 3
cols: 3
dt: d
data: [458.654, 0.0, 367.215, 0.0, 457.296, 248.375, 0.0, 0.0, 1.0]


/*
左相机校准变换矩阵:extrinsics.yml 中的 Rl:
Rl: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 9.9750705548699170e-01, 3.5207065558213610e-02,
6.1156657760632900e-02, -3.5691910468923047e-02,
9.9933934145707581e-01, 6.8533308118298173e-03,
-6.0874968425042433e-02, -9.0190437917577089e-03,
9.9810465136093429e-01 ]
填入下面的LEFT.R:
*/
# 左相机校准变换矩阵
LEFT.R:  !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [0.999966347530033, -0.001422739138722922, 0.008079580483432283, 0.001365741834644127, 0.9999741760894847, 0.007055629199258132, -0.008089410156878961, -0.007044357138835809, 0.9999424675829176]


/*
投影矩阵:
extrinsics.yml 中的 Pl:
Pl: !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [ 2.8559499458758660e+02, 0., 2.7029193305969238e+02, 0., 0.,
2.8559499458758660e+02, 2.8112063348293304e+02, 0., 0., 0., 1.,
0. ]
填入下面的  LEFT.P:
 */
# 左相机在校准后坐标系的投影矩阵
LEFT.P:  !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [435.2046959714599, 0, 367.4517211914062, 0,  0, 435.2046959714599, 252.2008514404297, 0,  0, 0, 1, 0]

/*
RIGHT相机的设置与LEFT一致,唯一不同的就是RIGHT.P: 参数,
extrinsics.yml 中的 Pr:如下:
Pr: !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [ 2.8559499458758660e+02, 0., 2.7029193305969238e+02,
-3.9636548646706200e+04, 0., 2.8559499458758660e+02,
2.8112063348293304e+02, 0., 0., 0., 1., 0. ]
对其进行修改,也就是data中的第4个值,需要转化单位从mm转为m。
所以应该填入RIGHT.P: 的数值为:
data: [ 2.8559499458758660e+02, 0., 2.7029193305969238e+02,
-3.9636548646706200e+01, 0., 2.8559499458758660e+02,
2.8112063348293304e+02, 0., 0., 0., 1., 0. ]
*/
RIGHT.height: 640
RIGHT.width: 1280
RIGHT.D: !!opencv-matrix
rows: 1
cols: 5
dt: d
data:[-0.28368365, 0.07451284, -0.00010473, -3.555907e-05, 0.0]
RIGHT.K: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [457.587, 0.0, 379.999, 0.0, 456.134, 255.238, 0.0, 0.0, 1]
RIGHT.R:  !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [0.9999633526194376, -0.003625811871560086, 0.007755443660172947, 0.003680398547259526, 0.9999684752771629, -0.007035845251224894, -0.007729688520722713, 0.007064130529506649, 0.999945173484644]
RIGHT.P:  !!opencv-matrix
rows: 3
cols: 4
dt: d
data: [435.2046959714599, 0, 367.4517211914062, -47.90639384423901, 0, 435.2046959714599, 252.2008514404297, 0, 0, 0, 1, 0]



#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------

# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1200

# ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2

# ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8

# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7

#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500

Camera.bf中的b指基线baseline(单位:米),
f是焦距fx(x轴和y轴差距不大),bf=b*f,
bf和ThDepth一起决定了深度点的范围(近双目特征点的定义是:匹配的深度值小于40倍双目或者RGB-D的基线,否则的话,是远特征点。):
bf * ThDepth / fx
即大致为 b * ThDepth。

  • 如ORB-SLAM中的双目示例中的EuRoC.yaml中的bf为47.9,ThDepth为35,fx为435.2,
    则有效深度为bf * ThDepth / fx = 47.9*35/435.3=3.85米;
  • KITTI.yaml中的bf为387.57,ThDepth为40,fx为721.54,则有效深度为387.57*40/721.54=21.5米。
    这里的xtion的IR基线(其实也可以不这么叫)bf为40,
    ThDepth为50,fx为558.34,则有效深度为3.58米(官方为3.5米)。

2.2 ROS下跑通bag数据集

Reference

  • ORB-SLAM2官方教程
  • ROS下运行ORBSLAM2
  • ORBSLAM2在ROS下运行
  • 基于ubuntu16.04的ORB_SLAM2包的安装及配置

2.2.1 创建ROS空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
echo "source devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
//索性在catkin文件夹下面ctrl+h,找到隐藏文件夹.bashrc。在.bashrc 最下面添加,
source /opt/ros/indigo/setup.bash
source ~/catkin_ws/devel/setup.bas

2.2.2修改topic(双目)

首先在orb-slam2下找到ros_stereo.cc(如下图)文件然后对其中的rostopic节点进行修改 。先找到自己对应的节点在自己录制的.bag 数据集下打开终端执行 rosbag info xxx.bag在里面的topics中可以找到自己对应的节点。
ros_stereo.cc位置
在这里插入图片描述节点信息
在这里插入图片描述
ros_stereo.cc中:

message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/camera/left/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "camera/right/image_raw", 1);

修改为:

message_filters::Subscriber<sensor_msgs::Image> left_sub(nh, "/camera_0/image", 1);
message_filters::Subscriber<sensor_msgs::Image> right_sub(nh, "/camera_1/image", 1);

2.2.3 编译

cd catkin_ws
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
chmod +x build.sh
./build.sh
chmod +x build_ros.sh
./build_ros.sh

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/gavyn/catkin_ws/src/ORB_SLAM2/Examples/ROS

2.3.4 执行

roscore
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/zhihui_2020507.yaml false
rosbag play /home/gavyn/calibr_camera-imu/calib_data/20200509/5-8/2020-05-07-18-29-52.bag

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

三、VINS测试

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

四、注意事项

ORB-SLAM ROS下编译出错

在这里插入图片描述解决办法:在gedit ~/.bashrc时 需要注意环境变量设置顺序:

source /home/gavyn/catkin_ws/devel/setup.bash
source /opt/ros/kinetic/setup.bash
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/gavyn/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2

工作空间catkin_ws应该放在最前面(否则找不到包),**其次是ros,最后是Package(**否则无法编译)
保存退出更新一下source ~/.bashrc
再查看是否正确部署好环境:echo $ROS_PACKAGE_PATH
应该返回如下结果:/opt/ros/kinetic/share:/home/xxx/ORB_SLAM2/Examples/ROS/ORB_SLAM2
之后才能正确执行脚本编译./build_ros.sh
roscore
rosrun package…

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

相机标定和ORBSLAM2/VINS测试 的相关文章

  • FreeRTOS — 源码下载与移植

    1 FreeRTOS的学习 1 1 FreeRTOS的源码下载 学习一个操作系统前 xff0c 首先要下载对应的源码 xff0c 用于研究和学习 FreeRTOS的源码下载链接如下 xff1a FreeRTOS Real Time Kern
  • freeRTOS学习 — 任务的创建与管理

    1 freeRTOS的任务 xff08 1 xff09 任务的状态 freeRTOS中 xff0c 任务在运行时 xff0c 可能出现以下几种状态 xff1a 1 xff09 运行态 任务当前正在运行中 xff0c 占有cpu的使用权 2
  • freeRTOS学习 — 消息队列

    1 freeRTOS 的消息队列 freeRTOS中提供了任务之间互相通信的另外的一种手段 消息队列 它的作用主要有 xff1a 1 xff09 为了在任务与任务之间 任务与中断之间的通信而准备的 xff0c 可以在任务与任务之间 xff0
  • ucos-ii 的任务调度原理和实现

    ucosii 任务调度和原理 1 ucos ii 任务创建与任务调度 1 1 任务的创建 当你调用 OSTaskCreate 进行任务的创建的时候 xff0c 会初始化任务的堆栈 保存cpu的寄存器 创建任务的控制块 xff08 OS TC
  • 51单片机 | DS18B20 温度传感器实验

    文章目录 一 DS18B20介绍二 硬件设计三 软件设计1 数码管显示函数2 DS18B20 初始化函数及温度读取函数4 主函数 四 实验现象 这一节我们来学习精度较高的外部 DS18B20 数字温度传感器 xff0c 由于此传感器是 单总
  • 上位机命名规范驼峰命名法和下划线命名法

    1 xff09 驼峰命名法 小驼峰命名法 xff1a 除第一个单词之外 xff0c 其他单词首字母大写 xff0c 例如 xff1a myFirstName myLastName 常用于变量名 xff0c 函数名 大驼峰命名法 又称为帕斯卡
  • matlab 调用GPU运算

    1 利用gpuArray 函数将数据从CPU传入GPU中 a 61 zeros 2 3 a 61 gpuArray a 或 a 61 gpuArray single a 数据默认都是双精度 xff0c 降成单精度会提高计算速度 2 用cla
  • 1.数字芯片后端设计小概述

    大家好 xff0c 第一篇文章想来简单介绍一下数字芯片后端的基本流程 对于没有接触过后端设计的新人可能会有用 后端设计总体来说 xff0c 是将前端写好的RTL代码通过综合 xff08 synthesize xff09 转换成物理网表 xf
  • Neutron学习笔记2-- Neutron的网络实现模型

    Neutron学习笔记2 Neutron的网络实现模型 Neutron的三类节点 计算节点网络节点控制节点 Neutron将在这三类节点中进行部署 xff0c Neutron在各个计算节点 xff0c 网络节点中运行各种各样的Agent x
  • Neutron学习笔记1--基本概念

    Neutron学习笔记 基本概念 1 涉及的Linux网络技术 bridge xff1a 网桥 xff0c Linux中用于表示一个能连接不同网络设备的虚拟设备 xff0c Linux中传统实现的网桥类似于一个hub设备 xff0c 而ov
  • 解决EXCEL打开.csv文件时的乱码问题

    问题描述 xff1a 在爬取数据的时候需要生成 csv文件用于存储数据 xff0c 但是生成的文件打开的时候是都是乱码 xff08 包括在网上下载的用于数据分析联系的 csv文件很多时候也会乱码 xff09 xff0c 具体情况如下 xff
  • 关于C语言中字符串以‘\0‘结尾的原因

    0 一般放在字符串的结束处 xff0c 用来表示字符串的结束 xff0c 其是ascii值为0的字符的转义 如果一个字符串中没有 0 这个结束字符 xff0c 那么这些函数将不能确定字符串的结束位置在哪儿 xff0c 从而引起一些不必要的错
  • ESP8266_NONOS_SDK开发环境搭建及验证

    ESP8266 NONOS SDK开发环境搭建及验证 视频教程 xff1a 芯片资料芯片 xff1a ESP8266EX模组 xff1a ESP 12F开发板 xff1a NodeMCU 启动模式安装AiThinkerIDE编译报错问题No
  • 华为开发者大会2019观后感

  • 运行Mapreduce,运行一半卡着不动了

    64 root 64 master mr inverted test bash run sh rmr DEPRECATED Please use rm r instead 19 01 17 23 22 23 INFO fs TrashPol
  • 51单片机 | LCD1602 液晶显示实验

    文章目录 一 LCD1602 介绍1 LCD1602 简介2 LCD1602 常用指令3 LCD1602 使用 二 硬件设计三 软件设计1 LCD1602 驱动函数2 主函数 四 实验现象 在前面章节 xff0c 我们已经学习过几种显示装置
  • Ubuntu18.04下自定义meauconfig

    一 前言 本文记录ubutu18 04下自定义meauconfig的安装使用 二 安装 参考链接 xff1a https nuttx apache org docs latest quickstart install html 或者可以看这
  • 服务器搭建及数据库部署

    服务器搭建 参考文章 快速搭建一个自己的服务器详解 xff08 java环境 xff09 因为上学期做非关系数据库课程实验时使用过PolarDB云数据库 xff0c 进行过阿里云的学生认证 xff0c 所以此次云服务器也就选择了Ali的开发
  • MATLAB 2018b 安装 mexopencv (VS 2017 编译)

    MATLAB 2018b 安装 mexopencv VS 2017 编译 之前电脑上装的是MATLAB 2016b 没办法识别VS 2017 虽然官方说有补丁解决这个问题 但还是下了最新的2018b 2018b 识别VS 2017 是没问题
  • Mybatis搞五下(分页、缓存)

    Mybatis搞五下 xff08 分页 缓存 xff09 上篇博客我们讲了动态SQL xff0c 一一多多和延迟加载问题 xff0c 这篇我们讲点轻松的东西 xff0c 关于分页插件pageHelper和Mybatis面试常问的缓存问题 M

随机推荐

  • 03、postman前置脚本

    postman前置脚本是指在Pre requests Script中编写的js脚本 xff0c 一个请求在发送之前 xff0c 会先去执行Pre Request Script xff08 前置脚本 xff09 中的代码 xff0c 可以是为
  • Python3爬取淘宝网商品数据!

    分析淘宝网 这次选择的是淘宝网热卖而不是淘宝网 xff0c 二者虽然名字有不同 xff0c 但是数据还是一样的 xff0c 区别就在于前者把后者的所有店铺和商品的海量数据按照销售量 好评度 信誉度综合测评 重新计算 重新排序展现给买家的一个
  • Python实现淘宝准点抢单!双十一秒杀神器啊!还不来学?

    一 ChromeDriver的安装 若想使用Selenium成功调用Chrome浏览器完成相应的操作 xff0c 需要通过ChromeDriver来驱动 我们在下载之前先来确认下我们使用的Chrome浏览器版本 只需要红框内几位相同即可 根
  • 【点云系列】 场景识别类导读

    文章目录 1 背景知识2 定义3 传统方法4 基于深度学习的方法5 其他参考 xff1a 终于可以简单写一下这一块的导读了 xff0c 拖了一个多周了 希望可以帮助到大家 xff1b xff09 1 背景知识 点云检索 xff08 poin
  • 异常检测综述(Anomaly Detection: A Survey)

    Anomaly Detection A Survey 异常检测综述 xff1a 异常检测是一个重要的问题 xff0c 已经在不同的研究领域和应用领域进行了研究 许多异常检测技术是专门为某些应用领域开发的 xff0c 而其他技术则更为通用 本
  • 基于Prometheus和k8s搭建监控系统

    文章目录 1 实验环境2 Prometheus介绍 xff1f 3 Prometheus特点3 1 样本 4 Prometheus组件介绍5 Prometheus和zabbix对比分析6 Prometheus的几种部署模式6 1 基本高可用
  • STM32F4 | 窗口门狗(WWDG)实验

    文章目录 一 STM32F4 窗口看门狗简介二 硬件设计三 软件设计四 实验现象五 STM32CubeMX 配置 WWDG 在本章中 xff0c 我们将使用窗口看门狗的 中断功能来喂狗 xff0c 通过 DS0 和 DS1 提示程序的运行状
  • deepin15.11系统下使用源码包(tar.xz)安装MySQL 8.0+(补充)

    1 下载MySQL的安装包 1 1 进入官网 xff0c 找到下载 官网地址 mysql官网 1 2 找到下载入口 1 3 选择这个 1 4找到适合自己电脑系统版本 2 安装 配置MySQL和创建mysql用户 注意 最好使用root安装和
  • 基于docker部署prometheus

    1 prometheus架构 Prometheus Server 收集指标和存储时间序列数据 xff0c 并提供查询接口 ClientLibrary 客户端库 Push Gateway 短期存储指标数据 主要用于临时性的任务 Exporte
  • Prometheus监控实战系列二十:监控Kubernetes集群(下)

    本文承接上篇 xff0c 在本篇中我们会讲解Prometheus如何应用基于Kubernetes的服务发现功能 xff0c 检索目标信息并进行监控 在监控策略上 xff0c 我们将混合使用白盒监控与黑盒监控两种模式 xff0c 建立起包括基
  • RT-Thread 简介及架构

    RT Thread xff0c 全称是 Real Time Thread xff0c 顾名思义 xff0c 它是一个嵌入式实时多线程操作系统 xff0c 基本属性之一是支持多任务 xff0c 允许多个任务同时运行并不意味着处理器在同一时刻真
  • 进程的结构

    什么是进程 UNIX标准 xff08 特别是IEEE Std 1003 1 2004年版 xff09 把进程定义为 一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源 目前 xff0c 可以把进程看作正在运行的程序 像Linu
  • 【代码小坑】梯度回传为0

    记录一下训练过程中遇到的问题 xff0c 由于这个问题我花了很长时间才解决 xff0c 所以值得记录 先给出结论 xff1a tensor转换成numpy后会丢失梯度 xff0c 导致回传出现问题 由于原代码不容易理解 xff0c 简单用个
  • (超详细)零基础如何学习操作系统---操作系统书籍推荐

    直接先给出路线书籍 编码 隐匿在计算机软硬件背后的语言 汇编语言 x86从实模式到保护模式 操作系统导论 操作系统真象还原 查漏补缺 1 编码 隐匿在计算机软硬件背后的语言 对于完全不懂计算机的朋友 xff0c 这本书可以让你对计算机有一个
  • 多种形式ICP问题的ceres实例应用

    一家之言 xff0c 仅作分享 xff0c 如有不合理或需要改进的地方 xff0c 欢迎各位讨论 ICP方法主要解决空间点云3D 3D的运动估计问题 xff0c 已知 xff1a t 1 t 1 t 1 和
  • git配置以及git-cola使用教程

    git安装 打开终端 xff0c 输入sudo apt get install git git配置 配置用户名 git config global user name 34 user name 34 配置邮箱 git config glob
  • C++ 手撸简易服务器

    本文使用上一期写的反射类 xff0c 另外我发现 lt WinSock2 h gt 这个头文件里有RegisterClass 这个结构 xff0c 还有typedef RegisterClass RegisterClassW这句话 这都能重
  • STM32CubeMX实战教程(一)——软件入门

    软件入门 前言新建工程界面简介MCU外设配置时钟树工程设置工具生成代码代码分析main cgpio cstm32f4xx it c 程序下载现象 结语 前言 STM32Cube 是一个全面的软件平台 xff0c 包括了ST产品的每个系列 平
  • STM32F4 | 定时器中断实验

    文章目录 一 STM32F429 通用定时器简介二 硬件设计三 软件设计四 实验现象五 STM32CubeMX 配置定时器更新中断功能 这一章介绍如何使用 STM32F429 的通用定时器 xff0c STM32F429 的定时器功能十分强
  • 相机标定和ORBSLAM2/VINS测试

    目录 一 相机标定1 1 标定目的1 2 常见模型介绍1 2 1 相机模型1 2 2 畸变模型 1 3 双目标定1 3 1 常见标定工具及对应使用场景1 3 2 Kalibr标定1 3 3 opencv双目标定1 3 4 basalt标定