当前位置: 首页>>代码示例>>C++>>正文


C++ Seq::add方法代码示例

本文整理汇总了C++中Seq::add方法的典型用法代码示例。如果您正苦于以下问题:C++ Seq::add方法的具体用法?C++ Seq::add怎么用?C++ Seq::add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Seq的用法示例。


在下文中一共展示了Seq::add方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: testImuFromFile

void testImuFromFile(const std::string &fn, Time t1b, Time t1e, Time t2b, Time t2e, double af, double wf)
{
    std::ifstream file(fn);
    std::string line;
    int p = 0;
    typedef double Scalar;
    typedef ImuPoint<Time, Scalar>::Measure Measure;
    Measure m;
    m.w.setZero();
    m.a.setZero();
    Time time, to = 0;
    Eigen::Vector3d a1, a2, w1, w2, v2, p2, wi;
    int c1 = 0, c2 = 0;
    Scalar l1, l2;
    a1.setZero();
    a2.setZero();
    w1.setZero();
    w2.setZero();
    wi.setZero();
    typedef ImuSequence<Time, Scalar, 1024> Seq;
    Seq seq;
    Seq::iterator it = nullptr;
    double gRes = 250.0 / 32768.0 * M_PI / 180;

    while(std::getline(file, line))
    {
        if(p > 0) for(size_t x = 0, xo = 0, i = 0; x < line.size(); x++) if(line[x] == ',')
        {
            int v = std::stoi(line.substr(xo, x - xo));
            switch(i)
            {
            case 0: time = v * 0.001; break;
            case 1: m.a[0] += ((v - 180) / 16400.0 * 9.8 - m.a[0]) * af; break;
            case 2: m.a[1] += ((v - 95) / 16400.0 * 9.8 - m.a[1]) * af; break;
            case 3: m.a[2] += ((v + 605) / 16535.0 * 9.8 - m.a[2]) * af; break;
            case 4: m.w[0] += ((v + 38)  * gRes - m.w[0]) * wf; break;
            case 5: m.w[1] += ((v - 91)  * gRes - m.w[1]) * wf; break;
            case 6: m.w[2] += ((v + 146) * gRes - m.w[2]) * wf; break;
            default: break;
            }

            xo = x + 1;
            i++;
        }
        p++;
        if(time > t1b && time < t1e) // Калибровка 1
        {
            a1 += m.a;
            w1 += m.w;
            c1++;
        }
        else if(c1)
        {
            a1 /= c1;
            w1 /= c1;
            c1 = 0;
            seq.setWBias(w1);
            l1 = a1.norm();
            seq.setGravity(l1);

        }
        if(time > t1e && time < t2b) // Интегрируем
        {
            if(to) wi += m.w * (time - to);
            to = time;
            Seq::iterator t = seq.add(time, m);
            if(it)
                t->from(std::make_pair(it, &seq), &seq);
            else
            {
                t->from(&seq);
                Eigen::Vector3d v0;
                v0 << 0, 0, 1;
                t->state.q.setFromTwoVectors(a1, v0);
            }
            it = t;
        }
        if(time > t2b && time < t2e) // Калибровка 2
        {
            a2 += m.a;
            w2 += m.w;
            c2++;
        }
        else if(c2)
        {
            a2 /= c2;
            w2 /= c2;
            l2 = a2.norm();
            c2 = 0;
        }
    }
    if(!it) return;
    v2 = it->state.v;
    p2 = it->state.p;
    Time dt = 11.85 - 10.33;
    p2 -= v2 * dt * 0.5;
    // Пересчёт
    Eigen::Vector3d v0;
    v0 << 0, 0, l2;
    //Eigen::Vector3d vt = it->state.q.inverse()._transformVector(v0);
//.........这里部分代码省略.........
开发者ID:i-v-s,项目名称:flyflow,代码行数:101,代码来源:imu.cpp


注:本文中的Seq::add方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。