IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> F-LOAM——快速的激光里程计和建图框架总结 -> 正文阅读

[人工智能]F-LOAM——快速的激光里程计和建图框架总结

F-LOAM相比与LOAM的区别:

1. 两次过程去畸变;2.利用Ceres库做scan-submap优化。

一、去畸变

  1. 因为好多激光频率超过10Hz,所以帧间的时间间隔很小,所以在间隔内假设是匀速度和匀角速度模型。第一步用常速模型进行去畸变和做预测。

  2. 经过位姿解算后,利用新的位姿重新对去畸变的特征?(原始特征)再次去畸变。两步运算的好处是,相比一步定位精度相似,但是运算量小了很多。

  3. 注:原本LOAM在里程计部分对一帧点云利用里程计计算的Tk,L+1和匀速模型,计算出每个时间戳下点云所处的变换矩阵Tk,L+1,在优化函数中迭代优化。本文中用匀速模型去畸变后进行帧间匹配,最后在用匹配的结果重新进行去畸变。

二、Ceres优化

点,面特征根据曲率大小计算权重。分子是当前特征的,分母是所有特征。

利用Ceres库对误差函数进行优化,传入四元数;而LOAM中是手动计算误差量对欧拉角的导数。

  void addCornerConstraint(const Eigen::Vector3d& curr_point,
                           const Eigen::Vector3d& point_a,
                           const Eigen::Vector3d& point_b) {
    std::unique_lock<std::mutex> lock(mutex_);
    ceres::CostFunction* cost_function =
        new EdgeAnalyticCostFunction(curr_point, point_a, point_b);
    problem_.AddResidualBlock(cost_function, loss_function_, params_);
    ++constraint_num_;
  }

?对误差函数进行重写

class EdgeAnalyticCostFunction : public ceres::SizedCostFunction<1, 7> {
 public:
  EdgeAnalyticCostFunction(Eigen::Vector3d curr_point_,
                           Eigen::Vector3d last_point_a_,
                           Eigen::Vector3d last_point_b_)
      : curr_point(curr_point_),
        last_point_a(last_point_a_),
        last_point_b(last_point_b_) {}
  // 手动赋雅克比使用Evaluate函数
  virtual bool Evaluate(double const* const* parameters, double* residuals,
                        double** jacobians) const {
    Eigen::Map<const Eigen::Quaterniond> q_last_curr(parameters[0]);
    Eigen::Map<const Eigen::Vector3d> t_last_curr(parameters[0] + 4);
    Eigen::Vector3d lp;
    lp = q_last_curr * curr_point + t_last_curr;

    Eigen::Vector3d nu = (lp - last_point_a).cross(lp - last_point_b);
    Eigen::Vector3d de = last_point_a - last_point_b;
    double de_norm = de.norm();
    residuals[0] = nu.norm() / de_norm;

    if (jacobians != NULL) {
      if (jacobians[0] != NULL) {
        Eigen::Matrix3d skew_lp = skew(lp);
        Eigen::Matrix<double, 3, 6> dp_by_se3;
        dp_by_se3.block<3, 3>(0, 0) = -skew_lp;
        (dp_by_se3.block<3, 3>(0, 3)).setIdentity();
        Eigen::Map<Eigen::Matrix<double, 1, 7, Eigen::RowMajor>> J_se3(
            jacobians[0]);
        J_se3.setZero();
        Eigen::Matrix3d skew_de = skew(de);
        J_se3.block<1, 6>(0, 0) =
            -nu.transpose() / nu.norm() * skew_de * dp_by_se3 / de_norm;
      }
    }
    return true;
  }

 private:
  Eigen::Vector3d curr_point;
  Eigen::Vector3d last_point_a;
  Eigen::Vector3d last_point_b;
};

三、实验效果

经过使用ceres优化后,相比于LOAM时间代价降低大约20%。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:36:57  更:2022-04-22 18:39:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:23:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码