深蓝学院《从零开始手写VIO》作业二

深蓝学院《从零开始手写VIO》作业二

  • 深蓝学院《从零开始手写VIO》作业二
    • 1. 设置IMU仿真中的不同的参数,生成allen方差标定曲线
      • (1)噪声较小的情况
      • (2)噪声中等的情况
      • (3)噪声较大的情况
      • (4) 实验结果分析
    • 2. 将IMU仿真代码中的欧拉积分替换成中值积分
      • (1)通过t-1和t时刻的值来计算中值
      • (2)通过t+1和t时刻的值来计算中值
      • (3)实验结果分析
    • 3. 论文阅读
    • 4. 附录
      • 做作业中遇到的问题:

深蓝学院《从零开始手写VIO》作业二

1. 设置IMU仿真中的不同的参数,生成allen方差标定曲线

allen方差工具:
https://github.com/gaowenliang/imu_utils

在这题中我一共进行了三次实验,三次实验中加速度计以及陀螺仪的高斯白噪声和Bias随机游走噪声的大小是成等比例(比例为10)进行放大和缩小,下面先摆出实验结果然后分析实验数据

(1)噪声较小的情况

a. 参数设置
此参数设置在vio_data_simulation-ros_version/src/param.h中,分别是加速度计以及陀螺仪的高斯白噪声和Bias随机游走噪声的大小

    double gyro_bias_sigma = 0.000005;
    double acc_bias_sigma = 0.00005;

    double gyro_noise_sigma = 0.0015;    
    double acc_noise_sigma = 0.0019;      

b. 仿真结果
以下是由vio_data_simulation-master/main/gener_alldata.cpp生成数据,由vio_data_simulation-master/python-tool/draw_trajcory.py生成


深蓝学院《从零开始手写VIO》作业二_第1张图片

c. 利用仿真工具画allen曲线并获得噪声估计结果
allen曲线为(这里是在静止的情况下测量的,另外抱歉这里有点看不清,纵坐标从上到下分别是 1 0 4 , 1 0 3 . 1 0 2 , 1 0 1 10^4,10^3.10^2,10^1 104,103.102,101):


深蓝学院《从零开始手写VIO》作业二_第2张图片

噪声估计结果为:

Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 2.1016644346403605e-02
      gyr_w: 1.3328766989568059e-04
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 2.6763958793439523e-02
      acc_w: 4.6470131356570474e-04

(2)噪声中等的情况

a. 参数设置
此参数设置在vio_data_simulation-ros_version/src/param.h中,分别是加速度计以及陀螺仪的高斯白噪声和Bias随机游走噪声的大小

    double gyro_bias_sigma = 0.00005;
    double acc_bias_sigma = 0.0005;

    double gyro_noise_sigma = 0.015;   
    double acc_noise_sigma = 0.019;  

b. 仿真结果
以下是由vio_data_simulation-master/main/gener_alldata.cpp生成数据,由vio_data_simulation-master/python-tool/draw_trajcory.py生成

深蓝学院《从零开始手写VIO》作业二_第3张图片

c. 利用仿真工具画allen曲线并获得噪声估计结果
allen曲线为(这里是在静止的情况下测量的,另外抱歉这里有点看不清,纵坐标从上到下分别是 1 0 5 , 1 0 4 , 1 0 3 . 1 0 2 10^5,10^4,10^3.10^2 105,104,103.102):


深蓝学院《从零开始手写VIO》作业二_第4张图片

噪声估计结果为:

Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 2.1426963216977588e-01
      gyr_w: 1.0886455204925014e-03
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 2.6881801136204303e-01
      acc_w: 4.9716963622466080e-03

(3)噪声较大的情况

a. 参数设置
此参数设置在vio_data_simulation-ros_version/src/param.h中,分别是加速度计以及陀螺仪的高斯白噪声和Bias随机游走噪声的大小

    double gyro_bias_sigma = 0.0005;
    double acc_bias_sigma = 0.005;

    double gyro_noise_sigma = 0.15;    
    double acc_noise_sigma = 0.19;      

b. 仿真结果
以下是由vio_data_simulation-master/main/gener_alldata.cpp生成数据,由vio_data_simulation-master/python-tool/draw_trajcory.py生成

深蓝学院《从零开始手写VIO》作业二_第5张图片

c. 利用仿真工具画allen曲线并获得噪声估计结果
allen曲线为(这里是在静止的情况下测量的,另外抱歉这里有点看不清,纵坐标从上到下分别是 1 0 6 , 1 0 5 , 1 0 4 , 1 0 3 10^6,10^5,10^4,10^3 106,105,104,103):


深蓝学院《从零开始手写VIO》作业二_第6张图片

噪声估计结果为:

Gyr:
   unit: " rad/s"
   avg-axis:
      gyr_n: 2.1370768874875155e+00
      gyr_w: 4.8477797168896648e-03
Acc:
   unit: " m/s^2"
   avg-axis:
      acc_n: 2.6832843026523694e+00
      acc_w: 4.9509703964721895e-02

(4) 实验结果分析

我上述实际噪声大小和标定结果汇总到下面表格中进行对比分析:
加速度计

加速度计Bias随机游走大小 实际大小 标定结果 标定结果离散化后结果
小噪声 0.0019 2.6763958793439523e-02 0.00188769
中噪声 0.019 2.6881801136204303e-01 0.0189476
大噪声 0.19 2.6832843026523694e+00 0.189476
加速度计高斯白噪声大小 实际大小 标定结果 标定结果离散化后结果
小噪声 0.00005 4.6470131356570474e-04 0.0065728
中噪声 0.0005 4.9716963622466080e-03 0.0703209
大噪声 0.005 4.9509703964721895e-02 0.700268

陀螺仪:

陀螺仪Bias随机游走大小 实际大小 标定结果 标定结果离散化后结果
小噪声 0.0015 2.1016644346403605e-02 0.001485407
中噪声 0.019 2.1426963216977588e-01 0.01514394
大噪声 0.19 2.1370768874875155e+00 0.1510859
陀螺仪高斯白噪声大小 实际大小 标定结果 标定结果离散化后结果
小噪声 0.000005 1.3328766989568059e-04 0.001885148
中噪声 0.00005 1.0886455204925014e-03 0.01539801
大噪声 0.0005 4.8477797168896648e-03 0.06856817

这里对标定结果离散采用的公式是
高斯白噪声: σ d = σ 1 Δ t \sigma_{d}=\sigma \frac{1}{\sqrt{\Delta t}} σd=σΔt 1Bias随机游走大小: σ b d = σ b Δ t \sigma_{b d}=\sigma_{b} \sqrt{\Delta t} σbd=σbΔt 通过上面的对比可以发现,加速度计和陀螺仪的Bias随机游走大小allen方差的估计是较为准确的,但是高斯白噪声的估计却差了几个数量级,在陀螺仪大噪声的情况下还出现了一次数据较大的偏差,课程视频上贺博也解释了这种情况是正常的(大噪声情况下的数据偏差应该是不正常的),在实际的IMU使用中是对估计出来的白噪声进行等比例系数处理的。


2. 将IMU仿真代码中的欧拉积分替换成中值积分

(1)通过t-1和t时刻的值来计算中值

代码如下:

MotionData next_imupose = imudata[i+1];
//delta_q = [1 , 1/2 * thetax , 1/2 * theta_y, 1/2 * theta_z]
Eigen::Quaterniond dq;
Eigen::Vector3d dtheta_half =  (imupose.imu_gyro + last_imupose.imu_gyro) * dt / 4.0;
dq.w() = 1;
dq.x() = dtheta_half.x();
dq.y() = dtheta_half.y();
dq.z() = dtheta_half.z();
/// 中值积分
Qwb = last_Qwb * dq;
Eigen::Vector3d acc_w = 0.5*(last_Qwb*(last_imupose.imu_acc)+Qwb*(imupose.imu_acc)+2*gw);
Vw = Vw + acc_w * dt;
Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;
last_Qwb = Qwb;

结果如下:


深蓝学院《从零开始手写VIO》作业二_第7张图片


(2)通过t+1和t时刻的值来计算中值

代码如下:

MotionData last_imupose = imudata[i-1];
//delta_q = [1 , 1/2 * thetax , 1/2 * theta_y, 1/2 * theta_z]
Eigen::Quaterniond dq;
Eigen::Vector3d dtheta_half =  (imupose.imu_gyro + next_imupose.imu_gyro) * dt / 4.0;
dq.w() = 1;
dq.x() = dtheta_half.x();
dq.y() = dtheta_half.y();
dq.z() = dtheta_half.z();
/// 中值积分
Eigen::Vector3d acc_w = 0.5*(Qwb*(imupose.imu_acc)+Qwb*dq*(imupose.imu_acc)+2*gw);
Qwb = Qwb * dq;
Vw = Vw + acc_w * dt;
Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;

结果如下:


深蓝学院《从零开始手写VIO》作业二_第8张图片

(3)实验结果分析

这里我们通过对比欧拉积分的结果:


深蓝学院《从零开始手写VIO》作业二_第9张图片

可以看出来,正确的中值积分(第一种)的结果是要优于欧拉积分的,而上面第二种积分结果明显是公式搞错了…


3. 论文阅读

阅读论文《Spline Fusion: A continuous-time representation for visual-inertial fusion with application to rolling shutter cameras》总结推导过程如下:
k − 1 k-1 k1阶的B次样条曲线如下: p ( t ) = ∑ i = 0 n p i B i , k ( t ) \mathbf{p}(t)=\sum_{i=0}^{n} \mathbf{p}_{i} B_{i, k}(t) p(t)=i=0npiBi,k(t)其中, p i ∈ R N \mathbf{p}_{i} \in \mathbb{R}^{N} piRN t i , i ∈ [ 0 , … , n ] t_{i}, i \in[0, \dots, n] ti,i[0,,n]时刻的控制点, B i , k ( t ) B_{i, k}(t) Bi,k(t)是基函数,如下 B i , 0 ( x ) : = { 1  if  t i ≤ x < t i + 1 0  otherwise  B_{i, 0}(x) :=\left\{\begin{array}{ll}{1} & {\text { if } \quad t_{i} \leq xBi,0(x):={10 if tix<ti+1 otherwise  B i , p ( x ) : = x − t i t i + p − t i B i , p − 1 ( x ) + t i + p + 1 − x t i + p + 1 − t i + 1 B i + 1 , p − 1 ( x ) B_{i, p}(x) :=\frac{x-t_{i}}{t_{i+p}-t_{i}} B_{i, p-1}(x)+\frac{t_{i+p+1}-x}{t_{i+p+1}-t_{i+1}} B_{i+1, p-1}(x) Bi,p(x):=ti+ptixtiBi,p1(x)+ti+p+1ti+1ti+p+1xBi+1,p1(x)上式可以累计形式如下: p ( t ) = p 0 B ~ 0 , k ( t ) + ∑ i = 1 n ( p i − p i − 1 ) B ~ i , k ( t ) \mathbf{p}(t)=\mathbf{p}_{0} \tilde{B}_{0, k}(t)+\sum_{i=1}^{n}\left(\mathbf{p}_{i}-\mathbf{p}_{i-1}\right) \tilde{B}_{i, k}(t) p(t)=p0B~0,k(t)+i=1n(pipi1)B~i,k(t)其中 B ~ i , k ( t ) = ∑ j = i n B j , k ( t ) \tilde{B}_{i, k}(t)=\sum_{j=i}^{n} B_{j, k}(t) B~i,k(t)=j=inBj,k(t)累计基函数,然后通过用控制点之间的对数变换 Ω i = log ⁡ ( T w , i − 1 − 1 T w , i ) \Omega_{i}=\log \left(\mathbf{T}_{w, i-1}^{-1} \mathbf{T}_{w, i}\right) Ωi=log(Tw,i11Tw,i)操作代替控制点之差来描述SE3中的轨迹,上式可以进一步变换成: T w , s ( t ) = exp ⁡ ( B ~ 0 , k ( t ) log ⁡ ( T w , 0 ) ) ∏ i = 1 n exp ⁡ ( B ~ i , k ( t ) Ω i ) \mathbf{T}_{w, s}(t)=\exp \left(\tilde{B}_{0, k}(t) \log \left(\mathbf{T}_{w, 0}\right)\right) \prod_{i=1}^{n} \exp \left(\tilde{B}_{i, k}(t) \Omega_{i}\right) Tw,s(t)=exp(B~0,k(t)log(Tw,0))i=1nexp(B~i,k(t)Ωi)其中 T w , s ( t ) ∈ S E 3 \mathbf{T}_{w, s}(t) \in \mathbb{S E} 3 Tw,s(t)SE3是样条曲线上t时刻的位姿,而 T w , i ∈ S E 3 \mathbf{T}_{w, i} \in \mathbb{S} \mathbb{E} 3 Tw,iSE3就是世界坐标系下控制点位姿。
再本文中,主要研究的是四次累计B样条曲线,也就四说对于 t ∈ [ t i , t i + 1 ) t \in\left[t_{i}, t_{i+1}\right) t[ti,ti+1)这段时间中一共有 [ t i − 1 , t i , t i + 1 , t i + 2 ] \left[t_{i-1}, t_{i}, t_{i+1}, t_{i+2}\right] [ti1,ti,ti+1,ti+2]四个控制点来确定时刻 t t t的样条曲线上的值,我们使用 s ( t ) = ( t − t 0 ) / Δ t s(t)=\left(t-t_{0}\right) / \Delta t s(t)=(tt0)/Δt来表示平均时间的函数,那么控制点的时刻 t i t_i ti就可以由平均时间函数 s i ∈ [ 0 , 1 , … , n ] s_{i} \in[0,1, \ldots, n] si[0,1,,n]来表示,对于时间 s i ≤ s ( t ) < s i + 1 s_{i} \leq s(t)sis(t)<si+1,我们就可以定义这样一个 u ( t ) = s ( t ) − s i u(t)=s(t)-s_{i} u(t)=s(t)si这样一个函数来表示,上面其实就是说我们定义一个累加式的时间函数来表示控制点之间的时刻的位置。有了上面的基础文中说我们就可以重写矩阵形式的B样条曲线以及它的一阶二阶微分函数如下: B ~ ( u ) = C [ 1 u u 2 u 3 ] , B ˙ ( u ) = 1 Δ t C [ 0 1 2 u 3 u 2 ] , B ¨ ( u ) = 1 Δ t 2 C [ 0 0 2 6 u ] , C = 1 6 [ 6 0 0 0 5 3 − 3 1 1 3 3 − 2 0 0 0 1 ] \tilde{\mathbf{B}}(u)=\mathbf{C}\left[\begin{array}{c}{1} \\ {u} \\ {u^{2}} \\ {u^{3}}\end{array}\right], \quad \dot{\mathbf{B}}(u)=\frac{1}{\Delta t} \mathbf{C}\left[\begin{array}{c}{0} \\ {1} \\ {2 u} \\ {3 u^{2}}\end{array}\right], \quad \ddot{\mathbf{B}}(u)=\frac{1}{\Delta t^{2}} \mathbf{C}\left[\begin{array}{c}{0} \\ {0} \\ {2} \\ {6 u}\end{array}\right], \quad \mathbf{C}=\frac{1}{6}\left[\begin{array}{cccc}{6} & {0} & {0} & {0} \\ {5} & {3} & {-3} & {1} \\ {1} & {3} & {3} & {-2} \\ {0} & {0} & {0} & {1}\end{array}\right] B~(u)=C1uu2u3,B˙(u)=Δt1C012u3u2,B¨(u)=Δt21C0026u,C=616510033003300121然后轨迹上的位姿可以定义为 T w , s ( u ) = T w , i − 1 ∏ j = 1 3 exp ⁡ ( B ~ ( u ) j Ω i + j ) \mathbf{T}_{w, s}(u)=\mathbf{T}_{w, i-1} \prod_{j=1}^{3} \exp \left(\tilde{\mathbf{B}}(u)_{j} \Omega_{i+j}\right) Tw,s(u)=Tw,i1j=13exp(B~(u)jΩi+j)其中 i i i下标表示时间 t t t所在的时间间隔区间,简单地理解上面的公式推导过程就是我如果要求时刻 t ∈ [ t i , t i + 1 ) t \in\left[t_{i}, t_{i+1}\right) t[ti,ti+1)的四次B样条曲线上的位姿,我需要根据 i − 1 i-1 i1时刻的位姿 T w , i − 1 \mathbf{T}_{w, i-1} Tw,i1,利用上面的公式直接求出来,又因为这个公式是一个连续公式,因此可以求它的一阶导数和二阶导数,也就是对应的速度和加速度,如下: T w , s ( u ) = T w , i − 1 ( A ˙ 0 A 1 A 2 + A 0 A ˙ 1 A 2 + A 0 A 1 A ˙ 2 ) \mathbf{T}_{w, s}(u)=\mathbf{T}_{w, i-1}\left(\dot{\mathbf{A}}_{0} \mathbf{A}_{1} \mathbf{A}_{2}+\mathbf{A}_{0} \mathbf{\dot { A }}_{1} \mathbf{A}_{2}+\mathbf{A}_{0} \mathbf{A}_{1} \dot{\mathbf{A}}_{2}\right) Tw,s(u)=Tw,i1(A˙0A1A2+A0A˙1A2+A0A1A˙2) T ¨ w , s ( u ) = T w , i − 1 ( A ¨ 0 A 1 A 2 + A 0 A ¨ 1 A 2 + A 0 A 1 A ¨ 2 + 2 ( A ˙ 0 A 1 A 2 + A ˙ 0 A 1 A 2 + A 0 A 1 A ˙ 2 ) ) \ddot{\mathbf{T}}_{w, s}(u)=\mathbf{T}_{w, i-1}\left(\begin{array}{c}{\ddot{\mathbf{A}}_{0} \mathbf{A}_{1} \mathbf{A}_{2}+\mathbf{A}_{0} \ddot{\mathbf{A}}_{1} \mathbf{A}_{2}+\mathbf{A}_{0} \mathbf{A}_{1} \ddot{\mathbf{A}}_{2}+} \\ {2\left(\dot{\mathbf{A}}_{0} \mathbf{A}_{1} \mathbf{A}_{2}+\dot{\mathbf{A}}_{0} \mathbf{A}_{1} \mathbf{A}_{2}+\mathbf{A}_{0} \mathbf{A}_{1} \dot{\mathbf{A}}_{2}\right)}\end{array}\right) T¨w,s(u)=Tw,i1(A¨0A1A2+A0A¨1A2+A0A1A¨2+2(A˙0A1A2+A˙0A1A2+A0A1A˙2)) A j = exp ⁡ ( Ω i + j B ~ ( u ) j ) , A ˙ j = A j Ω i + j B ˙ ( u ) j A ¨ j = A j Ω i + j B ^ ( u ) j + A j Ω i + j B ~ ( u ) j \begin{aligned} \mathbf{A}_{j} &=\exp \left(\Omega_{i+j} \tilde{\mathbf{B}}(u)_{j}\right), \quad \dot{\mathbf{A}}_{j}=\mathbf{A}_{j} \Omega_{i+j} \dot{\mathbf{B}}(u)_{j} \\ \ddot{\mathbf{A}}_{j} &=\mathbf{A}_{j} \Omega_{i+j} \hat{\mathbf{B}}(u)_{j}+\mathbf{A}_{j} \Omega_{i+j} \tilde{\mathbf{B}}(u)_{j} \end{aligned} AjA¨j=exp(Ωi+jB~(u)j),A˙j=AjΩi+jB˙(u)j=AjΩi+jB^(u)j+AjΩi+jB~(u)j

接下来就是将推导出来样条曲线应用到实际的惯性视觉数据上来

首先我们可以将一个空间点在两帧 a , b a,b a,b上的图像坐标表示为: p b = W ( p a ; T b , a , ρ ) = π ( [ K b ∣ 0 ] T b , a [ K a − 1 [ p a 1 ] ; ρ ] ) \mathbf{p}_{b}=\mathcal{W}\left(\mathbf{p}_{a} ; \mathbf{T}_{b, a}, \rho\right)=\pi\left(\left[\mathbf{K}_{b} | \mathbf{0}\right] \mathbf{T}_{b, a}\left[\mathbf{K}_{a}^{-1}\left[\begin{array}{c}{\mathbf{p}_{a}} \\ {1}\end{array}\right] ; \boldsymbol{\rho}\right]\right) pb=W(pa;Tb,a,ρ)=π([Kb0]Tb,a[Ka1[pa1];ρ])其中 π ( P ) = 1 P 2 [ P 0 , P 1 ] ⊤ \pi(\mathbf{P})=\frac{1}{\mathbf{P}_{2}}\left[\mathbf{P}_{0}, \mathbf{P}_{1}\right]^{\top} π(P)=P21[P0,P1]为归一化平面上坐标的投影方程, K a , K b ∈ R 3 × 3 \mathbf{K}_{a}, \mathbf{K}_{b} \in \mathbb{R}^{3 \times 3} Ka,KbR3×3分别是两帧图像的内参,然后利用上面推导出来B样条曲线的公式,我们可以生成加速度计和陀螺仪的测量模型: Gyro ⁡ ( u ) = R w , s ⊤ ( u ) ⋅ R ˙ w , s ( u ) +  bias  Accel ⁡ ( u ) = R w , s ⊤ ( u ) ⋅ ( s w ( u ) + g w ) +  bias  \begin{aligned} \operatorname{Gyro}(u) &=\mathbf{R}_{w, s}^{\top}(u) \cdot \dot{\mathbf{R}}_{w, s}(u)+\text { bias } \\ \operatorname{Accel}(u) &=\mathbf{R}_{w, s}^{\top}(u) \cdot\left(\mathbf{s}_{w}(u)+g_{w}\right)+\text { bias } \end{aligned} Gyro(u)Accel(u)=Rw,s(u)R˙w,s(u)+ bias =Rw,s(u)(sw(u)+gw)+ bias 其中角速度 R ˙ w , s \dot{\mathbf{R}}_{w, s} R˙w,s和加速度 S ˙ W \dot{\mathbf{S}}_{\boldsymbol{W}} S˙W分别是矩阵 T w , s \mathbf{T}_{w, s} Tw,s T ¨ w , s \ddot{\mathbf{T}}_{w, s} T¨w,s的子矩阵,然后我们通过最小化下面这个由预测模型和实际观测构成的代价函数来求得曲线的参数 E ( θ ) = ∑ p ^ m ( p ^ m − W ( p r ; T c , s ( u m ) − 1 T w , s ( u r ) T s , c , ρ ) ) Σ p 2 + ∑ ω ^ m ( ω ^ m − Gyro ⁡ ( u m ) ) Σ ω 2 + ∑ a ^ m ( a ^ m − Accel ⁡ ( u m ) ) Σ a 2 \begin{aligned} E(\theta)=& \sum_{\hat{\mathbf{p}}_{m}}\left(\hat{\mathbf{p}}_{m}-\mathcal{W}\left(\mathbf{p}_{r} ; \mathbf{T}_{c, s}\left(u_{m}\right)^{-1} \mathbf{T}_{w, s}\left(u_{r}\right) \mathbf{T}_{s, c}, \rho\right)\right)_{\Sigma_{p}}^{2}+\\ & \sum_{\hat{\omega}_{m}}\left(\hat{\omega}_{m}-\operatorname{Gyro}\left(u_{m}\right)\right)_{\Sigma_{\omega}}^{2}+\sum_{\hat{\mathbf{a}}_{m}}\left(\hat{\mathbf{a}}_{m}-\operatorname{Accel}\left(u_{m}\right)\right)_{\Sigma_{\mathbf{a}}}^{2} \end{aligned} E(θ)=p^m(p^mW(pr;Tc,s(um)1Tw,s(ur)Ts,c,ρ))Σp2+ω^m(ω^mGyro(um))Σω2+a^m(a^mAccel(um))Σa2其中 p ^ m , ω ^ m \hat{\mathbf{p}}_{m},\hat{\omega}_{m} p^m,ω^m, a ^ m \hat{\mathbf{a}}_{m} a^m就是测量值

总而言之,本文的大概思路是通过用四次B样条曲线来拟合相机的轨迹,而不是通过我们一般的思路建立运动学公式然后通过观测来对运动学公式进行修正这样的思路,文中提到这样做的一个优势是能很好地利用最小二乘法标定不同步时间的内外参矩阵,我想大概能了解其中的含义。

4. 附录

做作业中遇到的问题:

这次遇到的问题主要是在运行allen方差工具的时候环境配置的问题,我开始是尝试安装最新版本的ceres和Eigen,但是发现编译的时候会遇到ceres中Eigen的编译错误,纠结了很久,后来怀疑是不是最新版本的ceres和Eigen版本不匹配,因为就尝试卸载最新版的Eigen重新装了Eigen3.2,然后就好使了,中间耽误了不少时间,环境搞死人…

你可能感兴趣的:(视觉SLAM)