fast-lio2添加wheel在发散时轨迹约束

news2025/1/23 13:11:48

fast-lio2主要算法为迭代误差卡尔曼滤波算法,imu作为预测,点云更新,当点云发散时输出位姿异常,漂移很大,后端在融合出现崩溃情况,加入轮速计约束发散时位姿。

1.订阅wheel话题

2.发散检测,检测到发散将点云协方差设置最大。

3.打滑检测,打滑的时候,限制轮速计的协方差。

4.收敛时,增加轮子的协方差,轮子的观测值误差较大会影响融合结果。

fast-lio2中状态量为pos rot offsetR offsetT vel bg ba g,速度的观测量为x方向,imu坐标系为右前上,将轮速计转化到imu坐标系为y方向,后轮驱动,imu在前方为,Imu的实际速度与车的长度有关。

   if (use_wheel_ && (v_odom.size() > 0)) {
            try {
                auto kf_cov_ = kf_state.get_P();
                Eigen::Matrix<double, 3, 23> H_WHEEL = Eigen::Matrix<double, 3, 23>::Zero();
                H_WHEEL.template block<3, 3>(0, 12) = Eigen::Matrix<double, 3, 3>::Identity(); //p rot R_l_i T_l_i vel bg ba g
                Eigen::Matrix<double, 3, 3> odom_noise_ = Eigen::Matrix<double, 3, 3>::Zero();
                if (flag_degen_)
                    if (slip_cov_[1] < 1)
                        odom_noise_.diagonal() << cov_wheel_, cov_wheel_, cov_wheel_;
                    else
                        odom_noise_.diagonal() << 3.0 * cov_wheel_, 3.0 * cov_wheel_, 3.0 * cov_wheel_;
                else
                    odom_noise_.diagonal() << 10.0 * cov_wheel_, 10.0 * cov_wheel_, 10.0 * cov_wheel_;
                Eigen::Matrix<double, 23, 3> K_WHEEL = kf_cov_ * H_WHEEL.transpose() * (H_WHEEL * kf_cov_ * H_WHEEL.transpose() + odom_noise_).inverse();
                Eigen::Matrix<double, 3, 1> vel_odom(0, sqrt(pow(v_odom[wheel_num]->twist.linear.x, 2) + pow(angvel_last[2] * Wheel_T_wrt_IMU[1], 2)), 0.0); // + pow(angvel_last[3] * 0.8164, 2)
                Eigen::Matrix<double, 3, 1> vel_world = imu_state.rot * vel_odom;
                Eigen::Matrix<double, 23, 1> dx_ = K_WHEEL * (vel_world - imu_state.vel);
                //std::cerr << "dx_" << dx_ << std::endl;
                kf_cov_ = (Eigen::Matrix<double, 23, 23>::Identity() - K_WHEEL * H_WHEEL) * kf_cov_;
                // update cov
                kf_state.change_P(kf_cov_);
                imu_state.pos += dx_.template block<3, 1>(0, 0);
                imu_state.vel += dx_.template block<3, 1>(12, 0);
                kf_state.change_x(imu_state);
                //R_ = R_ * SO3::exp(dx_.template block<3, 1>(6, 0));
                //Eigen::Matrix<double, 23, 23> J = Eigen::Matrix<double, 23, 23>::Identity();
                //J.template block<3, 3>(6, 6) = Eigen::Matrix<double, 3, 3>::Identity() - 0.5 * SO3::hat(dx_.template block<3, 1>(6, 0));
                //kf_state.change_P(J * kf_state.get_P() * J.transpose());
                wheel_slip_vel_.push_back(v_odom[wheel_num]->twist.linear.x); //0-x,1-y,2-z
                wheel_slip_gyr_.push_back(v_odom[wheel_num]->twist.angular.z);
            } catch (exception &e) {
                std::cerr << "Standard exception: " << e.what() << std::endl;
            }
        }

 左边为未添加轮速计的轨迹,中间为实际轨迹,右侧为添加轮子后的轨迹。发散后由于imu精度低存在角度评估不准的情况。持续优化中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatisplus配置拦截器实现保存加密,输出解密,模糊查询

前言&#xff1a;因公司需求需要把某些实体类的某些字段值进行加密保存&#xff0c;在查询时解密明文输出。现记录两种方式。 一、第一种方式&#xff1a; &#xff08;1&#xff09;使用TableField(typeHandler TypeHandler.class)注解自带的字段类型处理器&#xff0c;写一…

盲盒游戏开发方案

盲盒游戏是一种新兴的游戏类型&#xff0c;其核心机制是让玩家在购买时不知道会获得哪一种物品&#xff0c;从而产生一种探索的乐趣。那么&#xff0c;如何开发一个盲盒游戏呢&#xff1f;以下是一些步骤和要点。 一、确定游戏目标和规则 在开发盲盒游戏时&#xff0c;…

前端:nodejs多版本管理工具nvm

nvm是什么 nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具&#xff0c;为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 nvm下载 可在点此在github上下载最新版本,本次…

拷贝构造函数(深拷贝+浅拷贝)

目录 拷贝构造函数浅拷贝深拷贝 拷贝构造函数 拷贝构造函数&#xff1a; Myclass(const Myclass& myclass) {amyclass.a;bmyclass.b;cmyclass.c; }浅拷贝 浅拷贝的思路就是和默认的拷贝构造函数一样: 即将原对象的值直接赋值给新对象&#xff0c;这样做一般情况下是没什…

加拿大儿童床垫认证标准要求介绍SOR/2016-152

儿童床垫是专为儿童设计的睡眠配件&#xff0c;用于提供舒适的睡眠环境和正确的睡眠支持 SOR/2016-152是加拿大政府发布的法规&#xff0c;旨在确保儿童床垫的安全性和质量。SOR/2016-152标准要求儿童床垫具有足够的安全性能&#xff0c;能够保护儿童免受潜在的危险和伤害。 标…

ArcGIS10.1软件安装教程

ArcGIS10.1中英文&#xff08;32/64位)下载地址&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1Ksm112WaKMMk6La9ircCng 密码&#xff1a;t70f 安装步骤&#xff1a; 1、我们对安装包进行解压&#xff0c;直接鼠标右击解压即可。 2、 打开我们解压的文件夹&#…

瞄准办公场景,未来智能靠“AI+耳机”后来居上?

如何在广阔红海中开拓出蓝海&#xff1f;未来智能或可作为参考案例。 作为TWS耳机玩家&#xff0c;未来智能成立于2021年&#xff0c;日前完成了由天际资本领投的数千万元Pre-A轮融资&#xff0c;这也是该公司成立以来完成的第二轮融资。 从成立时间来看&#xff0c;在广阔的…

Python学习之路 01如何安装Python

&#x1f600;前言 在当今数字化的时代&#xff0c;编程已成为一项基本技能。Python&#xff0c;因其简洁易学、功能强大和高度可扩展性而闻名&#xff0c;已成为许多初学者和专业开发人员的首选编程语言。不仅如此&#xff0c;Python拥有一个庞大而活跃的社群&#xff0c;提供…

科学中的人工智能:量子、原子和连续体技术概述

人工智能&#xff08;AI&#xff09;的进步正在推动自然科学领域的一种新的发现范式。如今&#xff0c;AI已经开始通过改进、加速和促进我们对各种空间和时间尺度上自然现象的理解来推动自然科学的发展&#xff0c;催生了一个被称为AI for science&#xff08;AI4Science&#…

SpringMVC之JSON数据返回及异常处理机制

目录 一.JSON数据的返回 二.异常处理机制 2.1 异常处理方式一 2.2 异常处理方式二 2.3 异常处理方式三 一.JSON数据的返回 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;常用于Web应用程序和服务之间的数据传输。通过使用…

MATLAB R2022b遇到“License Manager Error -8”怎么解决

电脑系统更新过后&#xff0c;matlab突然用不了了&#xff0c;报Error -8错误 将破解文件中的 libmwlmgrimpl.dll 复制 粘贴到 安装目录/R2022b/bin/win64/matlab_startup_plugins/lmgrimpl 直接替换 然后直接在 安装目录/R2022b/bin/ 打开matlab.exe

mingw 编译 curl ,Qt 工程使用

mingw 编译 curl 下载curl 源码 https://github.com/curl/curl 我使用8.3版 CMake-gui 配置 源码路径&#xff1a;D:/workspace/CPP/curl-8.3.0 生成路径: D:/workspace/CPP/curl-8.3.0/mingw-build 点击 Configure ,弹窗配置&#xff0c;选择 MinGW Makefiles 选择 Spec…

Codeforces Round 896 (Div. 2)

A.Make It Zero 思维题 当n为偶数时,对1到n异或使得1到n全部变成一样的数,再对1到n异或,使得全部变成0 当n为奇数时,对1到2异或使得1到2全部变成一样的,再对1到2异或,使得1到2都变成0,然后再两次对2到n AC代码: #include<iostream> #include<algorithm> #incl…

建筑模板国家标准GB/T 17656-2018

建筑模板国家标准GB/T 17656-2018《混凝土模板用胶合板》的重要性与应用 GB/T 17656-2018《混凝土模板用胶合板》国家标准是建筑模板行业的重要指导性文件&#xff0c;旨在确保混凝土模板的质量、安全和可靠性&#xff0c;促进建筑施工的高效进行。该标准详细规定了混凝土模板用…

DuDuTalk:4G语音工牌,如何实现家庭上门维修服务过程的智能化管理?

随着上门按摩、上门养老、上门买菜、上门维修等互联网上门服务的兴起&#xff0c;越来越多的居民开始采用线上下单&#xff0c;享受企业安排人员上门到家的服务。而家庭维修作为到家服务里面典型的一个场景&#xff0c;已成为许多人不可或缺的一部分。然而&#xff0c;与此同时…

【校招VIP】排序算法之高级排序

考点介绍&#xff1a; 在校招面试中,排序算法是经常被问到的。排序算法又比较多,很容易遗忘和混淆。有相当同学校招卡在排序的实现上,要么是核心代码实现不了,要么是实现方法串台。大厂的考察重点在快速排序等高级排序上。 排序算法之高级排序-相关题目及解析内容可点击文章末…

高级感满满的巡课效果怎么做?一招搞定!

学校是培养未来一代领袖和知识传承的地方&#xff0c;因此&#xff0c;确保学校内的教育质量和管理效率至关重要。在这个信息时代&#xff0c;技术正在不断演进&#xff0c;为学校管理和监督提供了更多的工具和方法。 在线巡课系统可以帮助学校管理人员更好地监督教学活动、评估…

【操作系统】进程的状态

进程的五种状态 创建&#xff0c;就绪&#xff08;等待分配处理机CPU资源&#xff09;&#xff0c;执行&#xff0c;阻塞&#xff08;叫阻塞因为相对CPU来说它很慢&#xff0c;等待除CPU以外的资源&#xff0c;如I/O&#xff09;&#xff0c;终止。 创建好的进程放入就绪队列等…

基于永磁同步发电机的风力发电系统研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MS SQL Server问题汇总

1.报SQL Server Agent连接不上的错误 15:38:57.991 [debezium-sqlserverconnector-sqlserver_transaction_log_source-change-event-source-coordinator] WARN i.d.connector.sqlserver.SqlServerStreamingChangeEventSource - No maximum LSN recorded in the database; pl…