imu-utils记录

main

IMU_TOPIC = ros_utils::readParam< std::string >( n, "imu_topic" );

获取launch文件中的参数信息

回调函数

gyr_y->pushRadPerSec( imu_msg->angular_velocity.y, time );
//函数定义
void
imu::AllanGyr::pushRadPerSec( double data, double time )
{
    m_rawData.push_back( GyrData( data * 57.3 * 3600, time ) );
    numData++;
}

将获取到的数据和时间成对存储并进行单位的转换(x57.3x3600)

if ( start )
    {
        start_t = time;
        start   = false;
    }
    else
    {
        double time_min = ( time - start_t ) / 60;
        if ( time_min > max_time_min )
            end = true;
    }

控制回调函数的运行次数,当获取到的时间和开始时间之间的差值比规定的时间大跳出循环。

yaml文件写入(Allan曲线)

1.writeyaml
2.fit_acc_x(acc_v_x,acc_ts_x,acc_x->getFreq())
3.acc_ts_x=acc_x->getTimes();
4.getAvgPeriod()返回值为getAvgDt(),函数目的是每相邻两个数据的时间差之和的平均值(暂时不了解?)-----采样时间间隔

class AllanAcc
{
    public:
    AllanAcc( std::string name, int maxCluster = 10000 );
    ~AllanAcc( );
    //三种不同单位的数据形式
    void pushRadPerSec( double data, double time );
    void pushDegreePerSec( double data, double time );
    void pushMPerSec2( double data, double time );
    void calc( );

    std::vector< double > getVariance( ) const;
    std::vector< double > getDeviation( );
    std::vector< double > getTimes( );
    std::vector< int > getFactors( ) const;
    double getFreq( ) const;

    private:
    std::vector< double > calcVariance( double period );

    std::vector< double > calcThetas( const double freq );
    void initStrides( );
    std::vector< double > getLogSpace( float a, float b );
    double getAvgFreq( ) { return 1.0 / getAvgDt( ); }//采样频率
    double getAvgDt( );//采样时间
    double getAvgPeriod( ) { return getAvgDt( ); }//功能相同函数名不同???
    int getFactorsNum( ) { return numFactors; }

    std::string m_name;
    double m_freq;
    int numData;
    std::vector< AccData > m_rawData;
    std::vector< double > m_thetas;
    int numCluster;
    int numFactors;
    std::vector< int > mFactors;

    std::vector< double > mVariance;
};

Allan方差计算方法
在这里插入图片描述
allan方差的定义
设光学陀螺的漂移数据的样本长度为N,采样周期为T。将样本分为K组,每组含m个样本点,则每组的相关时间 τ = m T \tau = mT τ=mT在这里插入图片描述
查找了许多的资料之后,我感觉下面的定义说的要更明确一些
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值