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


C++ Pose2::r方法代码示例

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


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

示例1: R

/* ************************************************************************* */
Pose2 Pose2betweenOptimized(const Pose2& r1, const Pose2& r2,
                            boost::optional<Matrix3&> H1, boost::optional<Matrix3&> H2)
{
    // get cosines and sines from rotation matrices
    const Rot2& R1 = r1.r(), R2 = r2.r();
    double c1=R1.c(), s1=R1.s(), c2=R2.c(), s2=R2.s();

    // Assert that R1 and R2 are normalized
    assert(std::abs(c1*c1 + s1*s1 - 1.0) < 1e-5 && std::abs(c2*c2 + s2*s2 - 1.0) < 1e-5);

    // Calculate delta rotation = between(R1,R2)
    double c = c1 * c2 + s1 * s2, s = -s1 * c2 + c1 * s2;
    Rot2 R(Rot2::atan2(s,c)); // normalizes

    // Calculate delta translation = unrotate(R1, dt);
    Point2 dt = r2.t() - r1.t();
    double x = dt.x(), y = dt.y();
    Point2 t(c1 * x + s1 * y, -s1 * x + c1 * y);

    // FD: This is just -AdjointMap(between(p2,p1)) inlined and re-using above
    if (H1) {
        double dt1 = -s2 * x + c2 * y;
        double dt2 = -c2 * x - s2 * y;
        *H1 = Matrix3();
        (*H1) <<
              -c,  -s,  dt1,
              s,  -c,  dt2,
              0.0, 0.0,-1.0;
    }
    if (H2) *H2 = Matrix3::Identity();

    return Pose2(R,t);
}
开发者ID:exoter-rover,项目名称:slam-gtsam,代码行数:34,代码来源:timePose2.cpp

示例2: bearing

/* ************************************************************************* */
Rot2 Pose2::bearing(const Pose2& point,
                    boost::optional<Matrix&> H1, boost::optional<Matrix&> H2) const {
    Rot2 result = bearing(point.t(), H1, H2);
    if (H2) {
        Matrix H2_ = *H2 * point.r().matrix();
        *H2 = zeros(1, 3);
        insertSub(*H2, H2_, 0, 0);
    }
    return result;
}
开发者ID:rubinasultan,项目名称:gtsam,代码行数:11,代码来源:Pose2.cpp

示例3: return

/* ************************************************************************* */
Vector Pose2::Logmap(const Pose2& p) {
    const Rot2& R = p.r();
    const Point2& t = p.t();
    double w = R.theta();
    if (std::abs(w) < 1e-10)
        return (Vector(3) << t.x(), t.y(), w);
    else {
        double c_1 = R.c()-1.0, s = R.s();
        double det = c_1*c_1 + s*s;
        Point2 p = R_PI_2 * (R.unrotate(t) - t);
        Point2 v = (w/det) * p;
        return (Vector(3) << v.x(), v.y(), w);
    }
}
开发者ID:rubinasultan,项目名称:gtsam,代码行数:15,代码来源:Pose2.cpp


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