基于拉格朗日对偶的凸全局三维配准

2023-05-16

在这里插入图片描述
论文地址

文章导读

最近自己的工作有借鉴这篇文章中用到的拉格朗日对偶,然后就细读了文章的内容并且分析了对应的代码。 拉格朗日对偶属于凸优化的范畴,详细的定义和理论可以在《Convex optimization》一书中进行深入学习。本篇博客仅重点解读该文章的主要内容。

摘要

通过欧几里德变换进行三维模型的配准是计算机视觉中许多核心应用的基础任务。因为旋转约束,所以这个问题是非凸的,这就使得传统的局部优化方法容易陷入局部极小值。本文集成常见的几何配准模态(比如点对点,点对线,点对平面),建立一个统一的公式,从而在多个三维配准问题中寻找全局最优变换。这个公式使得优化问题与对应关系的数量和性质无关。
本工作的主要创新点是引入该问题的强化拉格朗日对偶松弛,这个松弛在有效性上超越了之前类似的方法[1]。事实上,虽然没有理论上的保证,但在合成和真实数据实验中进行的经验上详尽的验证,通常能够产生紧的松弛,这样就可以利用对偶理论,恢复一个能够保证的全局最优解。
因此,该方法允许在全局最优性能够保证的前提下有效地求解三维配准问题,并且,该方法比基于计算量更大的Branch and Bound的当前最先进方法[2]运行速度更快。

动机

  1. 将多模态(基于)配准问题统一到一个框架中;
  2. 能够全局地求解三维多模态配准问题,不需要依赖初始值;
  3. 能够比基于搜索求解的方法运行得更快;
  4. 能够提供正式的性能保证,也就是全局最优性保证。

主要贡献

  1. 将点对点、点对线和点对平面的对应关系整合为一个二次目标的统一公式,该二次目标是只关于旋转矩阵的函数;
  2. 针对该统一的公式,在拉格朗日对偶问题的一般框架下设计全新的凸松弛,从而产生一个小规模的半定规划问题(SDP)。

算法流程

  1. 多模态配准
    1.1 三维配准原生问题
    给定物体的三维点集 { x i } i = 1 m \left \{ x_i \right \}^m_{i=1} {xi}i=1m 和对应模型的三位基元(一般是点,线或者平面) { P i } i = 1 m \left \{ P_i \right \}^m_{i=1} {Pi}i=1m,以及它们之间的对应关系 x i ↔ P i x_i \leftrightarrow P_i xiPi,则原生的三维配准问题就是寻找一个包含旋转和平移的变换 T = ( R , t ) ∈ S E ( 3 ) T=(R, t) \in SE(3) T=(R,t)SE(3) 满足:
    在这里插入图片描述
    1.2 广义距离函数
    三维点 x x x 到三维基元 P P P 的平方距离可以表示为一个广义距离函数:
    在这里插入图片描述
    其中 y y y P P P 上的任意一点, C C C 是一个对称矩阵,根据不同的基元,会有不同的形式,如下图所示
    在这里插入图片描述
    因为基元 P P P 可以有三种情况,分别是点,直线和平面,那么实际上广义距离函数(1)也可以根据这三种基于写成三种形式:
    点:
    在这里插入图片描述
    直线:
    在这里插入图片描述
    v v v 为直线的单位方向向量
    平面:
    在这里插入图片描述
    n i n_i ni 是平面的单位法向量
    1.3 二次模型
    首先将变换矩阵 T T T 拆开表示为旋转 R R R 和平移 t t t,这样就可以得到如下线性的参数化:在这里插入图片描述
    其中, x ~ = [ x T , 1 ] T \tilde{x} = [x^T,1]^T x~=[xT,1]T x x x 的齐次形式, ⊗ \otimes 是克罗内克积, v e c ( T ) vec(T) vec(T) 是变换矩阵的向量化。这样, T ⊗ x i T \otimes x_i Txi 对于 R R R t t t 是线性的。
    然后根据广义距离定义(2),三维配准原生问题中的距离可以表示为 τ = v e c t ( T ) \tau=vect(T) τ=vect(T) 的二次函数:
    在这里插入图片描述
    其中 N i = [ x ~ i T ⊗ I 3 ∣ − y i ] N_i=[\tilde{x}^T_i \otimes I_3 | -y_i] Ni=[x~iTI3yi] τ ~ = [ v e c ( T ) T , 1 ] \tilde{\tau}=[vec(T)^T,1] τ~=[vec(T)T,1]
    将所有测量值 x i x_i xi y i y_i yi 累积起来组成一个13维的矩阵 M ~ \tilde{M} M~,则整体的目标函数为:
    在这里插入图片描述
    1.4 边缘化的二次模型
    通过边缘化平移量 t t t,目标函数(5)可以进一步约化为:
    在这里插入图片描述
    然后通过(6)中得到的 r ~ \tilde{r} r~,求解一个线性系统就可以直接得到最优的平移:
    在这里插入图片描述
    其中下标 t t t 表示对应于平移变量的索引, ! t !t !t 表示 t t t 的补, Q ~ = M ~ / M ~ t , t \tilde{Q}=\tilde{M}/\tilde{M}_{t,t} Q~=M~/M~t,t 是矩阵 M ~ \tilde{M} M~ 中矩阵块 M ~ t , t \tilde{M}_{t,t} M~t,t 的舒尔补。
  2. 边缘化问题的紧对偶松弛
    边缘化问题(6)对于旋转 R 仍然是一个非凸问题,所以这里采用一个凸松弛求解该问题
    2.1 原问题
    为了应用拉格朗日对偶松弛,首先将问题(6)转化为一个QCQP问题,因为(6)中目标函数已经是一个二次型了,所以接下来的工作就是将(6)中可行域参数化为尽可能多的二次约束。
    对于旋转矩阵的正交约束,文献[3]针对列正交和行正交,提供了一组完整的二次约束:
    在这里插入图片描述
    文献[4]提出旋转矩阵的列需要满足右手定则,才能保证旋转矩阵的行列式为+1,比如:
    在这里插入图片描述
    其中, R ( k ) R^{(k)} R(k) 是旋转矩阵 R R R 的第k列。
    同时引入辅助变量 y y y,增加额外约束 y 2 = 1 y^2=1 y2=1,问题(6)就可以重新建模为一个等价、齐次、加强的原问题:
    在这里插入图片描述
    2.2 对偶问题
    原问题( P ~ \tilde{P} P~)是一个QCQP问题,它的拉格朗日函数为:
    在这里插入图片描述
    其中,齐次对偶向量为 λ ~ = [ λ T , γ ] T ∈ R 22 \tilde{\lambda}=[\lambda^T, \gamma]^T \in \mathbb{R}^{22} λ~=[λT,γ]TR22,对偶变量 λ \lambda λ 对应于所有的旋转矩阵约束, γ \gamma γ 对应于齐次约束 y 2 = 1 y^2=1 y2=1,如下图所示; Q ~ \tilde{Q} Q~ 包含原问题的所有数据, P ~ ( λ ~ ) = P ~ r ( Λ r ) + P ~ c ( Λ c ) + P ~ d ( { λ d i j k } ) + P ~ h ( γ ) \tilde{P}(\tilde{\lambda})=\tilde{P}_r(\Lambda_r)+\tilde{P}_c(\Lambda_c)+\tilde{P}_d(\left\{ \lambda_{d_{ijk}} \right\})+\tilde{P}_h(\gamma) P~(λ~)=P~r(Λr)+P~c(Λc)+P~d({λdijk})+P~h(γ) 表示对应于不同约束的所有惩罚项的和,它们组成了惩罚矩阵 Z ~ \tilde{Z} Z~
    在这里插入图片描述
    所以拉格朗日对偶函数为:
    在这里插入图片描述
    那么对应于原问题( P ~ \tilde{P} P~)的对偶问题就是是一个半正定规划(SDP):
    在这里插入图片描述
    这个问题就是凸的,并且很容易用现有的算子求解。
    2.3 通过对偶解求原问题
    根据对偶理论,原问题最优解 r ~ ∗ \tilde{r}^* r~ 必须是拉格朗日函数(8)在 λ ~ ∗ \tilde{\lambda}^* λ~ 处最小值的解:
    在这里插入图片描述
    因为 Z ~ ⪰ 0 \tilde{Z} \succeq 0 Z~0,所以原问题最优解 r ~ ∗ \tilde{r}^* r~ 属于 Z ~ ∗ \tilde{Z}^* Z~ 的零空间:
    在这里插入图片描述
  3. 问题整体算法
    多模态配准问题的整体算法如下:
    在这里插入图片描述
    其中边缘化问题(6)的算法(Alg. 2)如下:
    在这里插入图片描述

算法主要代码解析

该算法的主要部分为函数 function [R,t,dstar,times,R0] = method_RCQP( correspondences, header )

  1. 公式(5)将所有测量值 x i x_i xi y i y_i yi 对应点累积起来组成一个13维的矩阵 M ~ \tilde{M} M~
function q = compress_quadData( correspondences )
  % q = compress_quadData( correspondences )
  % Given correspondences whose cost function is quadratic in the unknowns,
  % compress the problem data into a single quadratic function.
 % Initialize quadratic form
  q = Quadratic(zeros(13));
  % Accumulate quadratic form corresponding to each correspondence
  for i=1:numel(correspondences)
  q = q + quad( correspondences(i) );
  end
end
  1. 公式(6)边缘化
function [q_margin, A] = marginalize(q,i)
  % [q_margin, A] = marginalize(q,MARGINALIZED_IDXS)
  % Compute the marginalization of a quadratic form
  % wrt the variables y in positions MARGINALIZED_IDXS.
  % This consists of finding the critical point wrt those variables,
  % find the optimal value in terms of the rest of unknowns as
  %   y_optim = A*x
  % and obtain the quadratic form q(x) wrt the remaining variables x.
  %
  % The results here are obtained from directly deriving the quadratic
  % function (simpler if homogeneized) wrt the desired variables.
  % The results are equivalent to applying the Schur complement.
      
  % Get matrix data
  M = q.Q_;
  dim = size(M,1);
  not_i = setdiff(1:dim,i);
      
  % Compute marginalized cost function (a new quadratic form)
  M_margin = M(not_i,not_i) - M(not_i,i)*pinv(M(i,i))*M(i,not_i);
  q_margin = Quadratic(symmetrize(M_margin));
      
  if nargout == 2
    % Compute linear map from non-marginalized x to marginalized y
    s = svd(M(i,i));
    if s(end) < 1e-2
      warning('Marginalization possibly degenerate: sv(end)=%E',s(end))
    end
    A = -pinv(M(i,i))*M(i,not_i);
  end
end
  1. 求解对偶SDP问题(D)为函数function [d,Z,G,lam,time] = solve_dual_template( q, header )
    a) 构建对偶变量 λ ~ = [ λ T , γ ] T \tilde{\lambda}=[\lambda^T, \gamma]^T λ~=[λT,γ]T
lam = Clam_RCQP( lam_unit_cols, lam_unit_rows,...
                 		   lam_ort_cols, lam_ort_rows,...
                      	   lam_det, lam_g );

b) 根据对偶变量计算各个惩罚项

function Qpen_ = build_penalizationMat( lam )
% Qpen_ = build_penalizationMat( lam )
% 
% Creates the *homogeneous* penalization matrix for LMI in SDP:
%   Z = Q0_ + Qpen_(lam) >= 0
% 
% The penalization matrix depends *only* on the dual variables lam
% It is independent of the problem data or the primal variables
% 
% The expressions are mat-like (more compact), see the report for details 
 
% Assert the values of lam are given struct-like
if numel(lam)==22 || ~isstruct(lam) && ~isobject(lam)
  % Convert from vec-format to struct-format
  lam = Clam_RCQP(lam);
end
 
% Quadratic term
Lam_cols = diag(lam.unit_cols) + 0.5*offsym(lam.ort_cols);
Lam_rows = diag(lam.unit_rows) + 0.5*offsym(lam.ort_rows);
skew_det = cell(1,3);
for k=1:3
  skew_det{k} = skew(lam.det(:,k));
end
Q_pen = -kron(Lam_cols,eye(3)) - kron(eye(3),Lam_rows) + 0.5*skew( skew_det );
 
% Linear term
b_pen = - 0.5*vec(lam.det);
 
% Independent term
c_pen = sum(lam.unit_cols) + sum(lam.unit_rows) - lam.g;
 
% Complete homogeneous matrix
Qpen_ = [Q_pen  b_pen;
         b_pen' c_pen];
 
end

c) 计算惩罚矩阵

% Build slack matrix: -P + Z = Q ? Z = Q + P
% Penalize homogeneous quadratic matrix (PSD slack matrix)
if all(size(q.Q_)==[10 10])
  % Marginalized case: [vec(R) y]
  Z = q.Q_ + P;
elseif all(size(q.Q_)==[13 13])
  % Non-marginalized case: [vec(R) t y]
  % Pad with zero blocks in penalization
  P_padded = [ P(1:9,1:9) zeros(9,3) P(1:9,end)
               zeros(3,9) zeros(3,3) zeros(3,1)
               P(end,1:9) zeros(1,3) P(end,end) ];
    Z = q.Q_ + P_padded;
else
  error('Wrong dimensions of the quadratic function')
end

d) 设置SDP目标函数和约束函数

Z = symmetrize(Z);
dual variable G
G : Z >= 0; % Slack matrix must be positive semidefinite
d = lam_g;
maximize(d)

  1. 通过对偶解求原问题的最优旋转和平移
    (a) 零空间求解原问题的初步解
function [R,szep] = solve_PrimalFromDual( Z )
% [R,szep] = solve_PrimalFromDual( Z )
 
% Decompose penalized matrix
[U,S,~] = svd(full(Z));
s = diag(S);
 
% Check SZEP condition,
szep = s(end)<1e-3 && (s(end)/s(end-1))<1e-3;
% Zero eigenvalue and margin to distinguish from numerical accuracy
 
if szep
  % Recovering the solution is trivial, just scale the eigenvector
  r = makenonhom( U(:,end) );
  R = reshape(r,3,3);
else
  error('No solution for non-tight case through nullspace yet')
end
 
end

(b) 将初步解投影到SO(3)流形上,得到最近似的最优旋转矩阵

function [R,f] = project_rotation( M, fmin )
% R = project_rotation( M )
% 
% Takes a general linear matrix M and projects it to
% the rotation matrix in SO(3) minimizing the chordal distance.
% This is equivalent to find the closest matrix under Frobenius norm
% (see "Hartley et al. Rotation averaging" in IJCV).
% 
% The problem is solved using the SVD decomposition of M:
%   M = U*S*V'
% If det(U*V')>0, R = U*V'
% BUT if det(U*V')<0, R = U*V'
% 
% 
% [R,f] = project_rotation( M, fmin )
% If the projected rotation seeks to minimize a certain objective fmin,
% it may be preferrable to search for the rotation
%   R=U*S*V', S=diag(s_i), s_i=+-1
% that minimizes fmin (this can be done by brute-force search)
 
% Project to valid rotation
[U,D,V] = svd(M);
if nargin == 1
  if det(U*V')>0
    R = U*V';
  else
    R = U*diag([1 1 -1])*V';
  end
else
  if det(U*V')>0
    signs = {[1 1 1],[1 -1 -1],[-1 1 -1],[-1 -1 1]};
  else
    signs = {[-1 1 1],[1 -1 1],[1 1 -1],[-1 -1 -1]};
  end
  numCombs = numel(signs);
  fvalues = zeros(1,numCombs);
  for i=1:numCombs
    fvalues(i) = fmin(U*diag(signs{i})*V');
  end
  [f,bestIdx] = min(fvalues);
  R = U*diag(signs{bestIdx})*V';
end

© 使用最优的旋转矩阵,通过公式(7)得到最优的平移

t = A*makehom(vec(R0));

主要实验结果

  1. 对比方法:一个BnB方法[2],Olsson[1]方法,该方法
  2. 度量尺度:次最优间隙,最优率,算法耗时
  3. 生成数据比较结果
    3.1 噪声变化,测量对应点数量不变
    在这里插入图片描述
    3.2 测量对应点数量变化,噪声不变
    在这里插入图片描述
    3.3 极端实验:测量对应点数量最小为7,噪声很大
    在这里插入图片描述
  4. 真实数据(来自文献[1])比较结果
    在这里插入图片描述

总结

这个工作提出了一个基于拉格朗日对偶理论的算法,用于解决广义的三维配准问题。虽然该方法通过大量实验证实经验上全局最优,但也是存在问题和改进点的:

  • 算法本身还是基于SDP的,而且使用现有的原生SDP算子,所以可能会有随着问题规模增大求解速度大幅变慢的问题,所以可以利用底层SDP问题的低秩结构设计专门的算子
  • 作者在文章中也说明了这个工作里的全局性能并没有理论上的证明,只是经验上(也就是大量实验结论)的全局最优保证,所以可以从理论上去分析紧度和证明最优性

该工作的作者有一系列使用对偶(优化)理论的solid工作,十分值得学习和研究。

参考文献

[1] C. Olsson and A. Eriksson. Solving quadratically constrained geometrical problems using lagrangian duality. In Pattern Recognition, 2008. ICPR 2008. 19th Int. Conf., pages 1–5. IEEE, 2008.
[2] C. Olsson, F. Kahl, and M. Oskarsson. Branch-and-Bound Methods for Euclidean Registration Problems. IEEE Trans. Pattern Anal. Mach. Intell., 31(5):783–794, 2009.
[3] K. Anstreicher and H.Wolkowicz. On Lagrangian relaxation of quadratic matrix constraints. SIAM J. Matrix Anal. Appl., 22(1):41–55, 2000.
[4] R. Tron, D. M. Rosen, and L. Carlone. On the Inclusion of Determinant Constraints in Lagrangian Duality for 3D SLAM.

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

基于拉格朗日对偶的凸全局三维配准 的相关文章

  • C语言随笔-去掉仅有\n的行

    include lt stdio h gt int main int argc const char argv char str 128 char linep strcpy str 34 12 35 56 n12 33 87 n n n n
  • python3.6-深入浅出视频

    课程收益 适合人群 python小白 xff0c 大数据和机器学习编程程序员 上机实践为主线 以最快的速度上手 快速入门 xff0c 还学到了python3的核心知识 https edu csdn net course detail 989
  • 数学之路(3)-机器学习(3)-机器学习算法-神经网络[11]

    多层感知器的代码 xff0c 需要一个比较复杂的调试过程 xff0c 不过也有一些方法来加快这一速度 xff0c 其中有几个地方要注意 xff1a 1 输入层 输出层 中间层的学习率和动量参数不能一样 xff0c 2 3个层的权值策略不能一
  • opencv中ArUco识别

    姿态估计 xff08 Pose estimation xff09 在 计算机视觉领域扮演着十分重要的角色 xff1a 机器人导航 增强现实以及其它 这一过程的基础是找到现实世界和图像投影之间的对应点 这通常是很困难的一步 xff0c 因此我
  • PID算法的EXCEL模拟实现

    增量式PID算法公式 xff1a 在表格里可以看见PID算法在目标值和实际值差异较大时 xff0c 控制量也很大 xff0c 主要是比例环节起到主要的调节作用 xff0c 在目标值和实际值相等时 xff0c 主要的控制量是积分环节 xff0
  • 三极管基本知识

    导通条件 NPN型三极管的导通条件是C点电位 gt B点电位 gt E点电位 xff0c 三极管饱和导通的条件是Ub gt Ue Ub gt Uc PNP型三极管的导通条件是E点电位 gt B点电位 gt C点电位 xff0c 三极管饱和导
  • 5.FreeRTOS学习笔记- 互斥量

    基本概念 互斥量又称互斥信号量 本质是信号量 是一种特殊的二值信号量 互斥量 支持互斥量所有权 递归访问以及防止优先级翻转的特性 用于实现对临界资源 如显示器 打印机 的独占式访问 任意时刻互斥量的状态只有两种 开锁或闭锁 持有该互斥量的任
  • could not stop cortex-m device 问题

    出现问题原因 xff1a 调试程序过程中mdk突然奔溃 xff0c 之后就再也下载程序失败 xff0c 但是读取swd IDCODE OK 下载程序就报错 个人觉得应该是单片机内部保护了 问题图 问题处理办法 先检查3 3v和GND是否短路
  • FreeRTOS系列|任务堆栈

    任务堆栈 运行freertos系统的大部分都是资源有限的MCU xff0c 所以对于RAM我们都要考虑尽量的节省 xff0c 避免资源浪费 下面将会基于Cortex M3内核的STM32F103型MCU来介绍FreeRTOS任务栈大小的确定
  • 9. GD32F103C8T6 定时器2的更新中断触发定时器0开始计时

    1 初始化定时器TIM0 span class token comment 定时器的基本初始化和打开更新中断 enable 是否使能定时器 span span class token keyword static span span cla
  • 4.GD32F103C8T6 串口中断方式接收数据和输出重定向

    1 串口基本初始化 span class token comment 基本初始化函数 span span class token keyword void span span class token function usart base
  • 5.GD32F103C8T6 串口DMA+IDLE方式接收数据

    1 串口的基本初始化 span class token keyword void span span class token function usart base init span span class token punctuatio
  • 26. GD32F103C8T6入门教程-CAN外设回环测试

    1 基础知识 相关stm32CAN外设 外设特征 3个发送邮箱 2个深度为3个邮箱的接收FIFO 自动重传 自动唤醒 发送 接收时间戳 最大速率1Mbps 3种工作模式 睡眠模式 可以检车总线状态自动唤醒 初始化工作模式 如果需要对 CAN
  • stm32 操作W25Q256 W25Q16 spi flash

    硬件连接 本函数库来自正点原子官方 xff0c 本人稍作修改和添加注释 W25Q16 2M Byte W25Q256 32M Byte spi 配置 2022 7 27 经过测试 华邦的 W25Q256JV 32M 字节 容量的spi fl
  • ESP32学习笔记20-dac

    20 DAC 20 1概述 ESP32 有两个 8 位数模转换器 DAC 通道 分别连接到 GPIO25 通道 1 和 GPIO26 通道 2 每个 DAC 通道可以将数字值 0 255 转换成模拟电压 0 Vref out voltage
  • ESP32学习笔记21-esp32启动流程

    24 esp32启动流程 第一 xff0c 第二阶段启动流程 第三阶段的详细流程
  • ESP32学习笔记22-TWAI-CAN

    22 TWAI CAN 22 1概述 22 1 1参考博客 ESP32 基于自带控制器实现CAN总线通信 上 知乎 zhihu com ESP32 基于自带控制器实现CAN总线通信 下 知乎 zhihu com 22 1 2 ESP32 T
  • Python str和bytes的相互转换

    str0 61 39 abc 39 a 61 bytes str0 39 utf 8 39 print type str0 str0 print type a a print 39 39 c 61 bytes 97 98 99 100 pr
  • wxpython 基本的控件 (按钮)

    在wxPython 中有很多不同类型的按钮 这一节 xff0c 我们将讨论文本按钮 位图按钮 开关按钮 xff08 toggle buttons xff09 和通用 xff08 generic xff09 按钮 如何生成一个按钮 xff1f
  • FreeRTOS系列|处理器利用率

    处理器利用率 1 处理器利用率统计的作用 处理器利用率其实就是系统运行的程序占用的CPU资源 xff0c 表示机器在某段时间程序运行的情况 xff0c 如果这段时间中 xff0c 程序一直在占用CPU的使用权 xff0c 那么可以认为CPU

随机推荐

  • QT 多线程使用QTcpSocket

    本人亲测使用moveToThread xff08 xff09 的方式可以 xff1b 不存在报错 xff0c 警告 include 34 widget h 34 include 34 ui widget h 34 Widget Widget
  • ESP8266天猫精灵接入流程

    Blinker天猫精灵接入流程 设备上线 设置接入的设备类型 设置接入设备的auth Key 设置SSID PSWD 或者选择 ESPTOUCH等配网方式 下载代码等待设备接入上线成功 authKey对应的设备若需要更换接入的设备类型 xf
  • 存储器的分类

    目录 01 ROM 02 非易失性RAM 2 1原理 2 2发展 2 3 摩尔定律 03 易失性RAM 3 1原理 3 2发展 3 3总结 04 总结 储器类型有很多 xff0c 常见的有ROM xff08 Read onlymemory只
  • RT - thread学习(一)

    目录 一 RT thread介绍 二 RT thread移植 首先我们先在官网获取 编辑 对无关的文件进行剪裁 剪裁后的内核文件移植到sdk文件 配置内核文件 一 RT thread介绍 rt thread是国产的一款开源的实时操作系统 这
  • 机器学习基本概念

    文章目录 深度学习和机器学习NLP xff08 Natural language processing xff09 Confusion Matrix 混淆矩阵ROC xff08 Receiver Operator Characteristi
  • ROS Kinetic中OpenCV使用

    ROS Kinetic中OpenCV使用 本文主要记录了ROS Kinetic中OpenCV的使用 xff0c Kinetic完全安装中本身自带了Opencv3 3 1 xff0c 因此在ROS中可以直接用ROS自带的Opencv3 3 1
  • ROS下gazebo不能加载willowgarage世界

    在打开gazebo ros打开williowgarage的时候 xff0c 能够找到willowgarage world的文件 xff0c 但是gazebo不能够加载这个模型 xff0c 主要原因是gazebo的model里面并没有mode
  • Mac OS下安装串口调试工具minicom

    最近在做一个Mac下的ssh调试工具 xff0c 但是出现了一点问题 后来发现居然Mac下有串口调试工具可以用 xff0c 所以果断换串口了 xff0c 是普通PL2303芯片的usb转串口线 接下来说下简单的安装步骤吧 我是勤劳的搬砖工
  • Eclipse等IDE配置Anaconda/Python3开发环境(win10_x64)

    分诊台 正所谓 洞庭揽物 xff0c 各有所怀 xff0c 博客点击 xff0c 也是各有所需 为了能让读者节约时间 xff0c 本小百姓 xff0c 写博客时尽力将博客内容各部分内容解耦 xff0c 但仍保持一定的连贯性 xff0c 并参
  • Linux(树莓派)系统中判断WiFi是否连接上路由器的方法

    之前 xff08 https blog csdn net u010299133 article details 105823339 xff09 介绍过在Linux系统中使用wpa supplicant连接到指定的WiFi路由器的方法 xff
  • FreeRTOS系列|任务相关API函数

    任务相关API函数 1 任务相关API函数 FreeRTOS中有很多与任务相关的API函数 xff0c 大多数是辅助函数 下表是这些与任务相关的API函数功能和描述简介 函数名功能描述uxTaskPriorityGet 查询某个任务的优先级
  • 无人机通信协议:MavLink协议使用

    mavlink的数据封装的结构体以及封装解析的函数都在mavlink代码库中的头文件中 主要的结构体 xff1a E mavlink mavlink include v1 0 mavlink types h MAVPACKED typede
  • 【计算机视觉】Lecture 16:平面单应变换

    动机 xff1a 在平面上的点 回顾 xff1a 正向投影 世界坐标系到相机坐标系的变换 透视矩阵方程 xff08 相机坐标系到成像坐标系 xff09 成像坐标系到像素坐标系 从成像坐标 xff08 x xff0c y xff09 到像素坐
  • 【计算机视觉】Lecture 20:八点法

    提醒 本质 基础矩阵 本质矩阵和基础矩阵都是 3x3 的矩阵 xff0c 用于 编码 两个视图的对极几何 动机 xff1a 给定一张图像中的一个点 xff0c 乘以本质 基础矩阵将告诉我们在第二个视图中沿着哪个极线搜索 本质 基础矩阵总结
  • 【计算机视觉】Lecture 23:光流估计

    流估计 主要概念 xff1a 亮度08好恒定方程 孔径问题 Lucas Kanade算法 回顾 xff1a 由于自身运动产生的场 流 xff08 Flow xff09 xff1a 旋转分量不依赖于场景结构 平移分量随场景 Z 值的变化而变化
  • 【计算机视觉】Lecture 24:视频变化检测

    视频基础 每秒30帧 每一幅图像的处理时间不会太多 因此 xff0c 实时算法往往非常简单 视频图像的主要特征之一是帧间的时间一致性 在1 30秒内帧间变化不大 xff01 检测移动的对象 假设 xff1a 移动的对象是非常重要的 xff0
  • Eigen中基本和常用函数

    Eigen 中矩阵的定义 span class token macro property span class token directive keyword include span span class token string lt
  • 基于四元数的存在外点Wahba问题的可证明最优解

    论文地址 论文视频 文章导读 为什么这次要解读这篇文章 xff1f 因为上次文章 xff08 详见 TEASER 快速且可证明的点云配准算法和代码解读 xff09 旋转求解部分就是用本文中的方法 xff0c 所以本文算是TEASER方法的前
  • 极端外点率下鲁棒配准的多项式时间解

    论文地址 论文视频 文章导读 为什么要解读这篇文章 xff1f 因为之前接连介绍该作者的两个工作 xff0c TEASER 快速且可证明的点云配准算法和代码解读 和 基于四元数的存在外点Wahba问题的可证明最优解 xff0c 前者的未知有
  • 基于拉格朗日对偶的凸全局三维配准

    论文地址 文章导读 最近自己的工作有借鉴这篇文章中用到的拉格朗日对偶 xff0c 然后就细读了文章的内容并且分析了对应的代码 拉格朗日对偶属于凸优化的范畴 xff0c 详细的定义和理论可以在 Convex optimization 一书中进