MATLAB校准磁力计

2023-05-16

初识magcal函数

语法

[A,b,expmfs] = magcal(D)
[A,b,expmfs] = magcal(D,fitkind)

描述

[A,b,expmfs] = magcal(D) 返回校正未校准磁力计数据所需的数据D。
要产生校准的磁力计数据,请使用该公式。
校准后的数据CC = (D-b)*ACexpmfs
[A,b,expmfs] = magcal(D,fitkind) 将矩阵约束为指定的类型。当只有软铁或硬铁效果时,此语法需要纠正。

输入参数

D— 原始磁力计数据

N ×3 矩阵(默认)

原始磁力计数据的输入矩阵,指定为 N x 3 矩阵。矩阵的每一列对应于 分别为第一轴、第二轴和第三轴。矩阵的每一行对应于一个单三轴测量。

数据类型:singledouble

fitkind— 矩阵输出类型

输出 A 的矩阵类型。的矩阵类型可以限制为:A

  • 'eye'– 单位矩阵

  • 'diag'–对角

  • 'sym'–对称

  • 'auto'– 前面任何一个都提供最合适的选项

输出参数

A— 软铁效应

3×3 矩阵的校正矩阵

软铁效应的校正矩阵,以 3×3 矩阵的形式返回。

b— 硬铁效应

3 x1 矢量的校正矢量

硬铁效应的校正向量,以 3×1 数组的形式返回。

expmfs— 预期磁场强度

标量

预期的磁场强度,以标量形式返回。

magcal使用实例

生成位于椭球上的未校准磁力计数据。

c = [-50; 20; 100]; % ellipsoid center
r = [30; 20; 50]; % semiaxis radii
[x,y,z] = ellipsoid(c(1),c(2),c(3),r(1),r(2),r(3),20);
D = [x(:),y(:),z(:)];

校正磁力计数据,使其位于球体上。校准选项默认设置为“自动”。

[A,b,expmfs] = magcal(D); % 校准系数
expmfs  % 偶极预期磁场强度,单位为uT
C = (D-b)*A; % 校准数据

将未校准和校准的磁力计数据可视化。

figure(1)
plot3(x(:),y(:),z(:),'LineStyle','none','Marker','X','MarkerSize',8)
hold on
grid(gca,'on')
plot3(C(:,1),C(:,2),C(:,3),'LineStyle','none','Marker', ...
            'o','MarkerSize',8,'MarkerFaceColor','r') 
axis equal
xlabel('uT')
ylabel('uT')
zlabel('uT')
legend('Uncalibrated Samples', 'Calibrated Samples','Location', 'southoutside')
title("Uncalibrated vs Calibrated" + newline + "Magnetometer Measurements")
hold off

其结果:

使用magcal函数实战

磁强计校准

磁强计检测沿着传感器的X、Y和Z轴的磁场强度。精确的磁场测量对于传感器融合以及航向和方位的确定至关重要。

为了对航向和方位计算有用,需要校准典型的低成本MEMS磁力计,以补偿环境噪声和制造缺陷。

理想磁强计

理想的三轴磁力计测量沿正交X、Y和Z轴的磁场强度。在没有任何磁干扰的情况下,磁力计的读数可以测量地球的磁场。如果在传感器旋转所有可能的方向时进行磁力计测量,则测量应位于球体上。球体的半径就是磁场强度。

要生成磁场样本,请使用imuSensor对象。出于这些目的,可以安全地假设每个方向的角速度和加速度为零。

N = 500;
rng(1);
acc = zeros(N,3);
av = zeros(N,3);
q = randrot(N,1); % uniformly distributed random rotations
imu = imuSensor('accel-mag');
[~,x] = imu(acc,av,q);
scatter3(x(:,1),x(:,2),x(:,3));
axis equal
title('Ideal Magnetometer Data');

输出:

硬铁效应

噪声源和制造缺陷会降低磁力计的测量性能。其中最引人注目的是铁杆效应。硬铁效应是静止的干扰磁噪声源。通常,这些来自带有磁力计的电路板上的其他金属物体。硬铁效应改变了理想球体的原点。

imu.Magnetometer.ConstantBias = [2 10 40];
[~,x] = imu(acc,av,q);
figure;
scatter3(x(:,1),x(:,2),x(:,3));
axis equal
title('Magnetometer Data With a Hard Iron Offset');

输出:

软铁效应

软铁效应更为微妙。它们是由传感器附近的物体引起的,这些物体会扭曲周围的磁场。这些具有拉伸和倾斜理想测量球体的效果。由此产生的测量结果位于椭球面上。

软铁磁场效应可以通过将IMU的地磁场矢量旋转到传感器框架,拉伸它,然后将它旋转回全局框架来模拟。

nedmf = imu.MagneticField;
Rsoft = [2.5 0.3 0.5; 0.3 2 .2; 0.5 0.2 3];
soft = rotateframe(conj(q),rotateframe(q,nedmf)*Rsoft);
for ii=1:numel(q)
    imu.MagneticField = soft(ii,:);
    [~,x(ii,:)] = imu(acc(ii,:),av(ii,:),q(ii));
end
figure;
scatter3(x(:,1),x(:,2),x(:,3));
axis equal
title('Magnetometer Data With Hard and Soft Iron Effects');

输出:

校正技术

magcal函数可用于确定磁力计校准参数,这些参数既考虑了硬铁效应,也考虑了软铁效应。未校准的磁强计数据可以建模为位于椭球上,方程如下

在这个方程中,R是一个3乘3的矩阵,b是定义椭球中心的1乘3的矢量,x是未校准磁力计测量的1乘三的矢量,并且是指示磁场强度的标量。上述方程是圆锥曲线的一般形式。对于椭球体,R必须是正定的。magcal函数使用各种求解器,基于对R的不同假设。在magcal函数中,R可以被假设为单位矩阵、对角矩阵或对称矩阵。

magcal函数产生校正系数,该校正系数对位于偏移椭球上的测量进行测量,并将其转换为位于以原点为中心的理想球体上。magcal函数返回一个3乘3的实矩阵a和一个1乘3的向量b。为了校正未校准的数据,计算

这里,x是未校准磁力计测量值的1乘3阵列,m是位于球体上的校正磁力计测量的1乘三阵列。矩阵A的行列式为1,是R的矩阵平方根。此外,A的形式与R相同:单位矩阵、对角矩阵或对称矩阵。因为这些类型的矩阵不能赋予旋转,所以矩阵a在校正期间不会旋转磁力计数据。

magcal函数还返回第三个输出,即磁场强度。您可以使用磁场强度来设置ahrsfilter的ExpectedMagneticFieldStrength属性。

使用magcal函数

使用magcal功能确定校正有噪声的磁力计数据的校准参数。通过设置imuSensor中磁强计属性的NoiseDensity属性,创建有噪声的磁强计数据。在可变的soft中使用旋转和拉伸的磁场来模拟软铁效果。

imu.Magnetometer.NoiseDensity = 0.08;
for ii=1:numel(q)
    imu.MagneticField = soft(ii,:);
    [~,x(ii,:)] = imu(acc(ii,:),av(ii,:),q(ii));
end

要找到最能校正未校准磁力计数据的A和b参数,只需将函数调用为:

[A,b,expMFS]  = magcal(x);
xCorrected = (x-b)*A;

绘制原始数据和校正后的数据。显示最适合原始数据的椭球体。显示更正数据应位于的球体。

de = HelperDrawEllipsoid;
de.plotCalibrated(A,b,expMFS,x,xCorrected,'Auto');

输出:

magcal函数使用各种解算器来最小化残差。残差是校准数据和半径为expMFS的球体之间的距离之和。

r = sum(xCorrected.^2,2) - expMFS.^2;
E = sqrt(r.'*r./N)./(2*expMFS.^2);
fprintf('Residual error in corrected data : %.2f\n\n',E);

如果只需要更正某些缺陷或实现更简单的更正计算,则可以运行单独的解算器。

仅偏移计算

许多MEMS磁力计在传感器内具有寄存器,该寄存器可用于补偿硬铁偏移。实际上,上述方程的(x-b)部分发生在传感器板上。当只需要硬铁偏移补偿时,a矩阵有效地成为单位矩阵。为了单独确定硬铁校正,magcal函数可以这样调用:

[Aeye,beye,expMFSeye] = magcal(x,'eye');
xEyeCorrected = (x-beye)*Aeye;
[ax1,ax2] = de.plotCalibrated(Aeye,beye,expMFSeye,x,xEyeCorrected,'Eye');
view(ax1,[-1 0 0]);
view(ax2,[-1 0 0]);

输出:

硬铁补偿和轴缩放计算

对于许多应用,将椭球矩阵视为对角矩阵就足够了。从几何角度来看,这意味着未校准磁强计数据的椭球体近似为其半轴与坐标系轴对齐,中心偏离原点。尽管这不太可能是椭球体的实际特征,但它将校正方程简化为每轴一乘一减。

[Adiag,bdiag,expMFSdiag] = magcal(x,'diag');
xDiagCorrected = (x-bdiag)*Adiag;
[ax1,ax2] = de.plotCalibrated(Adiag,bdiag,expMFSdiag,x,xDiagCorrected,...
    'Diag');

输出:

全硬铁和软铁补偿

要强制magcal函数求解任意椭球体并生成稠密对称的a矩阵,请将函数调用为:

[A,b] = magcal(x,'sym');

自动调整

应仔细使用“eye”、“diag”和“sym”标志,并检查输出值。在某些情况下,可能没有足够的数据进行高阶(“diag”或“sym”)拟合,并且可以使用更简单的a矩阵找到一组更好的校正参数。默认的“自动”调整选项可以处理这种情况。

考虑在高阶装配工中使用数据不足的情况。

xidx = x(:,3) > 100;
xpoor = x(xidx,:);
[Apoor,bpoor,mfspoor] = magcal(xpoor,'diag');

没有足够的数据分布在椭球表面上,无法使用“diag”选项实现良好的拟合和正确的校准参数。因此,Apoor矩阵是复杂的。

disp(Apoor)

输出:

0.0000 + 0.4722i 0.0000 + 0.0000i 0.0000 + 0.0000i

0.0000 + 0.0000i 0.0000 + 0.5981i 0.0000 + 0.0000i

0.0000 + 0.0000i 0.0000 + 0.0000i 3.5407 + 0.0000i

使用“自动”拟合选项可以避免这个问题,并找到一个更简单的a矩阵,它是实的、对称的和正定的。使用“auto”选项字符串调用magcal与不使用任何选项字符串调用相同。

[Abest,bbest,mfsbest] = magcal(xpoor,'auto');
disp(Abest)

输出:

1 0 0

0 1 0

0 0 1

比较使用“自动”拟合器和不正确的高阶拟合器的结果表明,在校正数据之前不检查返回的A矩阵是危险的。

de.compareBest(Abest,bbest,mfsbest,Apoor,bpoor,mfspoor,xpoor);

输出:

使用默认的“auto”标志调用magcal函数,将尝试“eye”、“diag”和“sym”搜索A和b的所有可能性,从而最大限度地减少残差,保持A的实数,并确保R是正定和对称的。

结论

magcal函数可以给出校准参数,以校正磁力计中的硬铁和软铁偏移。调用没有选项字符串的函数,或者等效地调用“auto”选项字符串,可以产生最佳匹配,并涵盖大多数情况。

另外,需要注意的是,magcal目前还不支持使用MATLAB Coder转为C/C++代码,实属遗憾。

附录:在实战中使用的自定义函数

定义为:HelperDrawEllipsoid.m

classdef HelperDrawEllipsoid < handle

    methods (Static)
        function [ax1, ax2] = plotCalibrated(A,b,Bmag, data, dataCorrected, txt)
            % Plot calibrated and uncalibrated data on best fit ellipsoid and sphere.
    
            %Open a new figure window and create two subplots
            f = figure('NumberTitle', 'off', 'Name', txt);
            ax1 = subplot(1,2,1);
            set(ax1, 'Parent', f);

            %Use a helper function to plot the ellipsoid based on the correction
            %parameters. Create the ellipsoid matrix R from A that defines the
            %uncalibrated data:
            %   (m - b).' * R * (m - b) = Bmag*Bmag

            R = A.'*A; 
            HelperDrawEllipsoid.plotEllipsoid(R, b, Bmag);
            [rdi, rdo] = HelperDrawEllipsoid.drawPartitionedPoints(ax1, R,b,Bmag, data);
            title("Original Data and Best Fit Ellipsoid" + char(10) + "Using " + txt + " Fitter");
            
            % Plot the corrected data
            ax2 = subplot(1,2,2);
            set(ax2, 'Parent', f);
            %partition inside and outside sphere
            [fdi, fdo] = HelperDrawEllipsoid.drawPartitionedPoints(ax2, eye(3), zeros(3,1).', Bmag, dataCorrected);
            [xe,ye,ze] = ellipsoid(0,0,0,Bmag,Bmag,Bmag,80);
            fe = surf2patch(xe,ye,ze);
            HelperDrawEllipsoid.drawEllipsoid(fe);
    
            title('Corrected Data Fit to Ideal Sphere');
            if isempty(rdi) || isempty(rdo) || isempty(fdi) || isempty(fdo)
                leg =legend('Collected data (uT)', 'Location', 'South');
            else
                leg =legend('Data inside fit (uT)', 'Data outside fit (uT)', 'Location', 'South');
            end
            leg.Position(1) = 0.4; %move to the middle
            leg.Position(2) = 0.05;
            f.Position(3) = 700;

        end
        
        function compareBest(Agood, bgood,expMFSgood, Abad, bbad, expMFSbad, data)
            % Plot 'auto' fit (best) data vs data fit via 'diag'
            %   good - auto fit
            %   bad - diag fit
            xgoodFixed = (data - bgood)*Agood;
            
            f = figure('NumberTitle', 'off', 'Name', 'Correction with Auto vs Incorrect Fitter');
            ax1 = subplot(1,2,1);
            set(ax1, 'Parent', f);
            [rdi, rdo] = HelperDrawEllipsoid.drawPartitionedPoints(ax1,eye(3),zeros(1,3),expMFSgood, xgoodFixed);
            HelperDrawEllipsoid.plotEllipsoid(eye(3), zeros(1,3), expMFSgood);
            title("Corrected Magnetometer Data" + char(10) + 'Using Auto Fitter');
            
            xbadFixed = real((data - bbad)*Abad);
            ax2 = subplot(1,2,2);
            set(ax2, 'Parent', f);
            [fdi, fdo] = HelperDrawEllipsoid.drawPartitionedPoints(ax2, eye(3),zeros(1,3),expMFSbad, xbadFixed);
            HelperDrawEllipsoid.plotEllipsoid(eye(3), zeros(1,3), expMFSbad);
            title("Corrected Magnetometer Data" + char(10) + 'Using Incorrect Fitter');
            
            if isempty(rdi) || isempty(rdo) || isempty(fdi) || isempty(fdo)
                leg =legend('Collected data (uT)', 'Location', 'South');
            else
                leg =legend('Data inside fit (uT)', 'Data outside fit (uT)', 'Location', 'South');
            end
            leg.Position(1) = 0.4; %move to the middle
            leg.Position(2) = 0.05;
        end
        

        function [din, dout] = drawPartitionedPoints(ax, R,b, Bmag, data)
            % Color data in the plot based on whether or not it is inside or outside the fitted ellipsoid/sphere
            [din, dout] = HelperDrawEllipsoid.partitionEllipse(R, b, Bmag, data);
            hold(ax, 'on');
            plot3(ax, din(:,1),din(:,2),din(:,3),'LineStyle', 'none', 'MarkerSize', 6, 'MarkerFaceColor', 'b', 'Marker', 'o');
            plot3(ax, dout(:,1),dout(:,2),dout(:,3),'LineStyle', 'none', 'MarkerSize', 6, 'MarkerFaceColor', 'r', 'Marker', 'o');
            hold(ax, 'off');
            axis equal
            drawnow
        end

        function drawEllipsoid(fe)
            % Draws a green ellipsoid or sphere and lights it nicely
            p = patch(fe);
            p.FaceColor = 'green';
            p.EdgeColor = 'none';
            camlight
            view(3)
            p.FaceAlpha = .5;
            axis equal

        end

        function [dinside,doutside] = partitionEllipse(R, V, B, data)
            %figure out which of the  data is inside  and which is outside of the
            %computed ellipse.
            
            res = ellipsoidResidual(data, V,R,B);
            idx = res < 0;
            dinside = data(idx,:);
            doutside = data(~idx,:);
        end

        function p = plotEllipsoid(R, V, B)
            % Plots an ellipsoid based on (x-V).'*R*(x-V) = B^2 
            N = 20;
            %Singular values of R define the axes of the ellipsoid.
            %Strech the values out by 50% to make a nice plot.
            s = svd(R);
            s = 1.5*max(s);
            ax = linspace(-s*B, s*B, N)+V(1);
            ay = linspace(-s*B, s*B, N)+V(2);
            az = linspace(-s*B, s*B, N)+V(3);
            [xi,yi,zi] = meshgrid(ax,ay,az);
            d = [xi(:) yi(:) zi(:)];
            res = ellipsoidResidual(d, V, R, B);
            
            % Reshape to match xi - as if we did this element-by-element.
            Uout = reshape(res, size(xi));
            
            fv = isosurface(xi,yi,zi,Uout,0);
            HelperDrawEllipsoid.drawEllipsoid(fv);
        end

    end
end

function res = ellipsoidResidual(data, V, R, B)
% Compute the ellipsoid equation for each data row
% res = (data - V).' * R * (data - V) - B*B
%
dOffset = data - V;
t = R*(dOffset.');
res = (sum(dOffset.* (t.'),2) - B*B);

end

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

MATLAB校准磁力计 的相关文章

  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 如何在Matlab中自定义轮廓线?

    我正在准备一个等高线图 我应该在其中突出显示特定级别的等高线 例如 我的轮廓线值位于 1 和 1 之间 我想突出显示与值 0 相对应的线 我尝试使用以下过程来执行此操作 M c contourf longitude latitude del
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • 将自动生成的 Matlab 文档导出为 html

    我想为我开发的 Matlab 工具箱生成完整的帮助 我已经看到如何显示自定义文档 http www mathworks fr fr help matlab matlab prog display custom documentation h
  • 扩展 MATLAB 函数名称的最大长度

    我编写了一个 MATLAB 程序 可以动态创建自定义 MATLAB 函数 并使用以下命令在其他 MATLAB 实例中启动它们unix命令 我使用这个程序来自动化 fMRI 神经影像分析 使用 SPM8 for MATLAB 一切正常 但是
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 句柄类和值类的区别

    我有一些 C 背景 想使用 Matlab 中的类 句柄和值类有什么区别 我知道如果我想定义一个带有重载运算符 例如 和 的矩阵类 我会使用值类 然而 有时 当我选择一个手柄类时 事情似乎只对我有用 MathWorks 提供了一些有关其用途的
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof

随机推荐

  • ucosii消息队列学习

    近期在学习ucosii的内容使用的平台为STM32F103C8T6最小系统板 今日关于消息队列的使用遇到了一些问题 基本情况 xff1a 移植代码为正点原子ucosiii消息队列 信号量集和软件定时器例程 主要新建两个任务post task
  • day41—编程题

    文章目录 1 第一题1 1题目1 2思路1 3解题 2 第二题2 1题目2 2思路2 3解题 1 第一题 1 1题目 描述 xff1a Emacs号称神的编辑器 xff0c 它自带了一个计算器 与其他计算器不同 xff0c 它是基于后缀表达
  • SLAM学习笔记

    编译环境参考之前的笔记 cmake文件 cmake minimum required VERSION 3 0 project odometry set CMAKE BUILD TYPE 34 Release 34 add definitio
  • eclipse配置Tomcat

    文章目录 前言一 预先工作1 Tomcat是什么 xff1f 2 Tomcat下载3 安装Eclipse for Java EE 二 在eclipse中配置Tomcat 前言 目前开始了j2ee的学习 xff0c 为了给以后的学习做准备 x
  • MATLAB学习笔记(一)上:MATLAB基础知识

    笔记配套课程 xff1a 科学计算与MATLAB语言 中国大学MOOC 慕课 icourse163 org PART ONE xff1a MATLAB系统环境 1 命令行窗口中 xff0c 如果一条命令很长 xff0c 我们可以分成两行来输
  • H3C路由器基本配置命令

    1 system view 进入系统视图 2 sysname R1 配置路由器名字为R1 3 display clock 查看当前系统时间 4 clock datetime 00 00 00 2 26 2023 用户模式下修改系统时间 配置
  • ubuntu18.04双系统卸载并重装

    卸载ubuntu18 04 原文档 xff08 稍作整理 xff0c 方便自己使用 xff09 下载diskgenius工具 xff1a diskgenius 删除Ubuntu系统使用的几个分区 xff08 包括EFI分区 xff09 xf
  • 安装zed-ros-wrapper 并解决一些报错

    创建工作空间 如果没有工作空间 xff0c 先根据如下命令建立工作空间 source opt ros melodic setup bash mkdir p catkin ws src cd catkin ws catkin make cat
  • rtabmap+orbslam2+D435i建图

    配置rtabmap 参考 xff1a rtabmap安装与使用 配置orbslam2参考 xff1a ubuntu18 04 安装orb slam2并结合ZED运行 建图参考 xff1a Rtabmap 43 ORB SLAM2 43 D4
  • matlab2018a帮助文档设置为中文

    版本 xff1a matlab2018a 1 主页 预设 2 帮助 文档位置 xff08 第二个 xff09 简体中文 应用 确定 3 结果展示
  • Vue2与Vue3的生命周期一览

    Vue2与Vue3的生命周期 生命周期前言介绍Vue2的生命周期钩子函数Vue3的生命周期钩子函数setup函数Vue3新增生命周期 生命周期 前言介绍 生命周期也称生命周期回调函数 生命周期函数 生命周期钩子 每个 Vue 组件实例在创建
  • FreeRTOS入门

    文章目录 一 FreeRTOS简介二 学习任务三 学习内容多任务程序实现1 相关文件2 头文件的添加3 路径添加4 修改主函数main c 中代码5 将程序烧录到stm32开发板中6 最终结果 四 参考资料 一 FreeRTOS简介 Fre
  • 嘉立创SMT贴片打板流程

    说明 xff1a 打板平台 嘉立创下单助手 使用嘉立创EDA画板可参考以下过程 使用AD画板 xff0c 不同点是 xff08 1 xff09 导出的文件是PCB源文件压缩包 43 BOM表 43 坐标文件 xff08 2 xff09 确保
  • Android Studio安装超详细步骤(包括SDK安装不成功,模拟器无法创建等问题)

    本文主要介绍CPU 为AMD锐龙 和英特尔 两种类型在安装中出现的一些问题 xff0c 两种解决的方案不同 xff0c 所以首先查看属于哪种 xff0c 然后找相对应的安装方法 Android Studio的安装需要准备两个安装文件 xff
  • HTML+CSS仿写京东页面附代码(web前端大作业)

    学习前端时间不多 xff0c 看了两晚上就开始赶实训作业 xff0c 大家看看就行 先来看看效果 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta
  • DIY组装无人机电机+电调+电池+桨叶搭配知识

    以下内容转载至下网址 有一点点修改 DIY组装无人机电机 43 电调 43 电池 43 桨叶搭配知识 xff08 转贴 xff09 多旋翼 模吧 moz8 com https www moz8 com forum php mod 61 vi
  • (每日一练)MATLAB二维插值

    在前面介绍了学习MATLAB的一维插值方法 xff0c 今天来学习MATLAB二维插值方法 首先来看二维插值函数的使用格式 xff1a z1 61 interp2 x y z x1 y1 39 method 39 其中x y z分别是我们给
  • Ubuntu18.04安装D435iSDK和ROS Wapper

    实验室新到D435i深度相机 xff0c 我想来跑跑开源算法 xff0c 安装驱动各种帖子很多 xff0c 我把我看到两篇最有用的帖子整理一下 帖子连接放在文末 1 安装Intel RealSense SDK 2 0 参考 xff1a ht
  • 【Ros控制机械臂学习笔记】move_group C++interface接口学习

    在完成机器人URDF模型建立 xff0c 利用moveit setup assistant配置生成robot moveit config文件夹之后 xff0c 接下来就是要的学习方向有两个 一个是向下位机走 xff0c 即上图的右面 xff
  • MATLAB校准磁力计

    初识magcal函数 语法 A b expmfs 61 magcal D A b expmfs 61 magcal D fitkind 描述 A xff0c b xff0c expmfs 61 magcal xff08 D xff09 返回