本文整理汇总了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);
//.........这里部分代码省略.........