互补滤波器小项目

目录

MahonyAHRS算法的实现

目标
  • 观察程序中处理时间的方法
  • 训练写C++的能力
eigen
Eigen::Quaterniond q1 = Eigen::Quaterniond (0.1,0.2,0.1,0.3).normalized();  //定义一个四元数并用normalized()归一化
出现的问题

开发的过程中,流程没有掌握好,对函数的熟悉程度也很低。所以造成了无法定位误差的结果。利用matlab的矩阵方法求解,明显效率是更高的。

最后出现NAN的错误,找不到问题在哪里,决定看一下作者本来的程序

vscode的配置
  • https://blog.csdn.net/weixin_43374723/article/details/84064644

  • vscode远程开发

ESKF程序的熟悉

程序设计中的一些做法。

constexpr 相当于const

在下面的定义中,可以有效的防止重复定义的问题,就方便了很多。

#pragma once
#include <Eigen/Core>
#include <Eigen/Dense>

namespace OriEst{
    
  constexpr  double kDeg2Rad = M_PI / 180.;
constexpr double kRad2Deg = 180. / M_PI;
constexpr double kGravity = 9.8;
inline Eigen::Matrix3d SkewMat(const Eigen::Vector3d& v) {
    Eigen::Matrix3d w;
    w <<  0.,   -v(2),  v(1),
          v(2),  0.,   -v(0),
         -v(1),  v(0),  0.;
    return w;
};
}

应对如此报错:


智能指针的常用方法

智能指针的用法:

//这个具体是啥意思
std::make_unique
  • \1. make_unique 同 unique_ptr 、auto_ptr 等一样,都是 smart pointer,可以取代new 并且无需 delete pointer,有助于代码管理。

  • \2. make_unique 创建并返回 unique_ptr 至指定类型的对象,这一点从其构造函数能看出来。make_unique相较于unique_ptr 则更加安全。

  • \3. 编译器不同,make_unique 要求更新(Visual Studio 2015)。

#include <memory>
std::unique_ptr<Initializer> initializer_;
queue 队列对于数据的保存

在初始化的过程中,需要对加速度计的信号进行运算。

std::deque<Eigen::Vector3d , Eigen::aligned_allocator<Eigen::Vector3d>> acc_buffer_;
构造函数

构造函数等于default

Initializer() = default;
头文件中的定义
#pragme once

aligned_allocator:内存分配器

配置文件写入到类中
    struct Config {
        size_t acc_buffer_size = 10;
        double max_acc_std = 0.5;
    };
  const Config config_;
报错分析

: error: multiple types in one declaration };

出现了段错误:结果发现是在类中调用智能指针的时候,没有在构造函数中进行初始化导致的问题。

which is of non-class type

主函数声明类的时候多加了一个括号:(如果构造函数不需要参数,写成下面的就行了)

OriEst::MahonyAHRSupdate mahonyAHRS

IMU与GPS信息融合C++项目的实现

ENU笛卡尔坐标系:将GPS的WGS84坐标(大地坐标系)转换为平面坐标(笛卡尔坐标系)的方法。那么所谓的笛卡尔坐标系就是我们通常认为的参考坐标系。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦