机器人状态估计:robot_localization 功能包高级参数详解

news2024/9/30 21:32:34

机器人状态估计:robot_localization 功能包高级参数详解

  • 前言
  • 功能包简介
    • 相关参数
      • 高级参数

前言

在这里插入图片描述

移动机器人的状态估计需要用到很多传感器,因为对单一的传感器来讲,都存在各自的优缺点,所以需要一种多传感器融合技术,将机器人的状态估计出来。对于移动机器人来讲,自身可能携带:

  • 惯导
  • 轮速里程计
  • 激光里程计
  • 视觉里程计
  • gps等

如何利用各传感器的优点,将所有数据结合起来,取长补短,就用到了本篇博客介绍的内容 robot_localization ,一个移动机器人状态估计功能包。

功能包简介

robot_localization是状态估计节点的集合,每个节点都是非线性状态估计器的一种实现,用于在3D空间中移动的机器人。它包括两个状态估计节点ekf_localization_nodeukf_localization_node。另外,robot_localization提供navsat_transform_node,它有助于集成GPS数据。

功能包特点
robot_localization中的所有状态估计节点都具有共同的特征,即:

  • 融合任意数量的传感器。节点不限制传感器的数量。例如,如果您的机器人具有多个IMU或里程计信息,则robot_localization中的状态估计节点可以支持所有传感器。
  • 支持多种ROS消息类型。robot_localization中的所有状态估计节点都可以接收nav_msgs/Odometrysensor_msgs/Imugeometry_msgs/PoseWithCovarianceStamped,或geometry_msgs/TwistWithCovarianceStamped消息。
  • 自定义每个传感器的输入。如果给定的传感器消息包含您不希望包含在状态估计中的数据,则robot_localization中的状态估计节点允许您排除该数据。
  • 连续估计。robot_localization中的每个状态估计节点在收到一次测量结果后便开始估算车辆的状态。如果传感器数据中有间歇(即很长一段时间,没有收到任何数据),则滤波器将继续通过内部运动模型来估算机器人的状态。

所有状态估计节点都跟踪车辆的15维状态:
在这里插入图片描述

相关参数

ekf_localization_nodeukf_localization_node共享它们的绝大多数参数,因为大多数参数控制在与核心滤波器融合之前如何处理数据。

大部分的参数配置在params 文件夹下的yaml文件中。
在这里插入图片描述

高级参数

  • use_control
    如果为true,则状态估计节点将在话题cmd_vel中监听geometry_msgs/Twist消息,并使用该消息生成加速度。然后,该加速度将用于机器人的状态预测。在给定状态变量的收敛滞后即使很小的情况下,也会在您的应用程序中引起问题(例如,旋转期间LIDAR移位)的情况下,这尤其有用。默认为false。
    注意:来自IMU的线性加速度数据的存在和包含将“覆盖”当前预测的线性加速度值。

  • stamped_control
    如果为true,并且use_control也为true,则查找geometry_msgs/TwistStamped消息,而不是geometry_msgs/Twist消息。

  • control_timeout
    如果use_control设置为true,并且在此时间内没有收到任何控制命令(以秒为单位),则基于控制的加速项将不再适用。

  • control_config
    控制cmd_vel消息中的哪些变量用于状态预测。值的顺序为X˙,Y˙,Z˙,roll˙,pitch˙,yaw˙ ,仅在use_control设置为true时使用。

<rosparam param="control_config">[true,  false, false,
                                  false, false, true]</rosparam>
  • acceleration_limits
    机器人在每个维度上的加速度项。匹配control_config中的参数顺序。仅在use_control设置为true时使用。
<rosparam param="acceleration_limits">[1.3, 0.0, 0.0,
                                       0.0, 0.0, 3.2]</rosparam>
  • deceleration_limits
    机器人在每个纬度上的减速度。匹配control_config中的参数顺序。仅在use_control设置为true时使用。

  • acceleration_gains
    如果机器人无法立即达到其加速度极限,则可以通过这些增益来控制允许的变化。仅在use_control设置为true时使用。

<rosparam param="acceleration_gains">[0.8, 0.0, 0.0,
                                       0.0, 0.0, 0.9]</rosparam>
  • deceleration_gains
    如果机器人无法立即达到其减速极限,则可以通过这些增益来控制允许的变化。仅在use_control设置为true时使用。

  • smooth_lagged_data
    如果任意一个传感器产生的时间戳数据比最新的滤波器更新早(更明确地说,如果您有滞后的传感器数据源),则将此参数设置为true,将在接收到滞后的数据后启用滤波器恢复到滞后测量之前的最后状态,然后处理所有测量直到当前时间。这对于来自需要大量CPU使用量以生成姿态估计值的节点(例如,激光扫描匹配器)进行的测量特别有用,因为它们经常落后于当前时间。

  • history_length
    如果smooth_lagged_data设置为true,则此参数指定滤波器将保留其状态和测量历史记录的秒数。该值应至少等于滞后测量值与当前时间之间的时间增量。

  • [sensor]_nodelay
    具体参数:odomN_nodelay、twistN_nodelay、imuN_nodelay、poseN_nodelay
    如果为true,则设置tcpNoDelay传输提示。有证据表明,Nagle的算法与及时接收大消息类型(例如nav_msgs/Odometry消息)有关。将输入设置为true会禁用该订阅者的Nagle算法。默认为false。

  • [sensor]_threshold
    具体参数:odomN_pose_rejection_threshold、odomN_twist_rejection_threshold、poseN_rejection_threshold、twistN_rejection_threshold、imuN_pose_rejection_threshold、imuN_angular_velocity_rejection_threshold、imuN_linear_acceleration_rejection_threshold
    如果您的数据存在异常值,请使用这些阈值设置(表示为马氏距离)来控制允许传感器测量值距当前车辆状态的距离。如果未指定,则每个默认值均为numeric_limits::max()。

  • debug
    布尔标志,指定是否在调试模式下运行。警告:将其设置为true将生成大量数据。数据将写入debug_out_file参数的值。默认为false。

  • debug_out_file
    如果debug为true,则将调试输出写入的文件。

  • process_noise_covariance
    过程噪声协方差(通常表示为Q)用于对滤波算法预测阶段的不确定性建模。调整可能很困难,并且已作为参数公开以方便自定义。可以单独保留此参数,但是通过调整它可以取得更好的结果。通常,相对于输入消息中给定变量的方差,Q值越大,滤波器将收敛到测量值的速度就越快。

  • dynamic_process_noise_covariance
    如果为true,将根据机器人的速度动态缩放process_noise_covariance。例如,当您希望机器人的静止状态下机器人的估计误差协方差停止增长时,这很有用。默认为false。

  • initial_estimate_covariance
    估计协方差(通常表示为P)定义了当前状态估计中的误差。该参数允许用户设置矩阵的初始值,这将影响滤波器收敛的速度。例如,如果用户将位置[0,0]的值设置为非常小的值,例如1e-12,然后尝试将X位置的测量值与X的高方差值融合在一起,则滤波器将非常缓慢,无法“信任”这些测量,并且收敛所需的时间将增加。同样,用户应注意此参数。当仅融合速度数据时(例如,没有绝对姿态信息),用户可能将不希望将绝对姿态变量的初始协方差值设置为大数。这是因为那些误差将无限制地增长(由于缺乏绝对姿态测量来减小误差),并且以大的值开始将不会使状态估计受益。

  • reset_on_time_jump
    如果设置为true且ros::Time::isSimTime()为true,则在检测到某个话题的时间跳回时,过滤器将重置为未初始化状态。这在处理bag数据时很有用,因为可以在不重新启动节点的情况下重新启动bag。

  • predict_to_current_time
    如果设置为true,则滤波器可以预测和校正直到最近一次测量的时间(默认情况下),但现在还将预测到当前时间步长。

  • disabled_at_startup
    如果设置为true,则不会在启动时运行滤波器。

在这里插入图片描述

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

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

相关文章

微信朋友圈跟圈怎么设置?

朋友圈跟发功能对需要进行朋友圈营销或微信营销的公司和个体创业者的帮助极大。通常情况下&#xff0c;这些创业者或企业会管理多个微信账号来协同运营和管理客户资源&#xff0c;也就是俗称的“大号”和“小号”。如果没有朋友圈跟发软件&#xff0c;客户需要依次使用大号来发…

141. 环形链表

简单 1.9K 相关企业 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链…

十九章:利用跨图像语义挖掘进行弱监督语义分割

0.摘要 本文研究了仅使用图像级别监督进行语义分割学习的问题。目前流行的解决方案利用分类器的对象定位图作为监督信号&#xff0c;并努力使定位图捕捉更完整的对象内容。与之前主要关注于图像内部信息的努力不同&#xff0c;我们着眼于跨图像语义关系在全面对象模式挖掘中的价…

冯诺依曼体系的认识、来源、原理、组成、功能和特点

目录 一.认识冯诺依曼 二.冯诺依曼体系结构的来源 三.冯诺依曼体系结构计算机 3.1工作原理 3.2组成部件 3.3功能和特点 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f3a5; 本文由 tq02 原创&#xff0c;首发于 CSDN&…

股票回购不积极,遭分析师看空,汽车之家财务前景黯淡

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 第一季度财报后股价表现不佳 汽车之家&#xff08;ATHM&#xff09;于2023年5月11日公布了2023年第一季度业财报绩。 猛兽财经通过查询财报得知&#xff0c;汽车之家第一季度的实际营收为2.21亿美元&#xff0c;正常每股收…

java可变字符序列:StringBuffer、StringBuilder

文章目录 StringBuffer与StringBuilder的理解StringBuilder、StringBuffer的API StringBuffer与StringBuilder的理解 因为String对象是不可变对象&#xff0c;虽然可以共享常量对象&#xff0c;但是对于频繁字符串的修改和拼接操作&#xff0c;效率极低&#xff0c;空间消耗也…

【算法训练营】Fibonacci数列+合法括号序列判断+两种排序方法

7.29 Fibonacci数列题目解析代码 合法括号序列判断题目题解代码 两种排序方法题目&#xff1a;题解代码 Fibonacci数列 题目 题目链接: 点击跳转 解析 【题目解析】&#xff1a; 本题是对于Fibonacci数列的一个考察&#xff0c;Fibonacci数列的性质是第一项和第二项都为1&am…

Segmentation fault 利用 core.xxx文件帮助你debug

在没有get到本文介绍的技能之前的时候&#xff0c;以前遇到程序发生了 Segmentation fault 时&#xff0c;也是一筹莫展&#xff0c;看到伴随程序崩溃而生成的 core.xxxx 文件时&#xff08;有时会生成&#xff0c;有时不会生成&#xff0c;留着下面介绍&#xff09;&#xff0…

SpringBoot2.2.0.RELEASE整合Elasticsearch6.8.3

SpringBoot2.2.0.RELEASE整合Elasticsearch6.8.3 SpringBoot是2.2.0.RELEASE&#xff0c;elasticsearch是6.8.3 使用依赖spring-boot-starter-data-elasticsearch 使用ElasticSearchRepository操作 1、导入依赖 <?xml version"1.0" encoding"UTF-8&quo…

24考研数据结构-数组和特殊矩阵

目录 数据结构&#xff1a;数组与特殊矩阵数组数组的特点数组的用途 特殊矩阵对角矩阵上三角矩阵和下三角矩阵稀疏矩阵特殊矩阵的用途 结论 3.4 数组和特殊矩阵3.4.1数组的存储结构3.4.2普通矩阵的存储3.4.3特殊矩阵的存储1. 对称矩阵(方阵)2. 三角矩阵(方阵)3. 三对角矩阵(方阵…

Meta-Transformer 多模态学习的统一框架

Meta-Transformer是一个用于多模态学习的新框架&#xff0c;用来处理和关联来自多种模态的信息&#xff0c;如自然语言、图像、点云、音频、视频、时间序列和表格数据&#xff0c;虽然各种数据之间存在固有的差距&#xff0c;但是Meta-Transformer利用冻结编码器从共享标记空间…

【嵌入式学习笔记】嵌入式基础11——STM32常用轮子(SYSTEM)

1.deley文件夹介绍 1.1.delay文件夹介绍 函数名函数功能OSdelay_osschedlockus级延时时,关闭任务调度(防止打断us级延迟)OSdelay_osschedunlockus级延时时,恢复任务调度OSdelay_ostimedlyus级延时时,恢复任务调度OSSysTick_Handlersystick中断服务函数OSdelay_init初始化延迟…

MySQL服务无法启动,服务没有报告任何错误

MySQL服务无法启动&#xff0c;服务没有报告任何错误 昨天mysql服务还好好的&#xff0c;今天怎么都打不开。my.ini配置和端口都没有问题&#xff0c;只能备份一下data的数据&#xff0c;删除data文件夹&#xff0c;初始化mysqld。 一定要备份data数据&#xff01;&#xff01;…

【算法和数据结构】257、LeetCode二叉树的所有路径

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;首先看这道题的输出结果&#xff0c;是前序遍历。然后需要找到从根节点到叶子节点的所有路径&#xff…

苍穹外卖-day06

苍穹外卖-day06 本项目学自黑马程序员的《苍穹外卖》项目&#xff0c;是瑞吉外卖的Plus版本 功能更多&#xff0c;更加丰富。 结合资料&#xff0c;和自己对学习过程中的一些看法和问题解决情况上传课件笔记 视频&#xff1a;https://www.bilibili.com/video/BV1TP411v7v6/?sp…

什么是 HTTP 长轮询?

什么是 HTTP 长轮询&#xff1f; Web 应用程序最初是围绕客户端/服务器模型开发的&#xff0c;其中 Web 客户端始终是事务的发起者&#xff0c;向服务器请求数据。因此&#xff0c;没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…

【java的类型数据】——八大类型数据

文章目录 前言字面常量字面常量的分类: 数据类型和变量变量的包装类和范围范围整型变量byteintshortlong 浮点型变量双精度浮点型double单精度浮点型float 字符型变量char布尔型变量 boolean 类型转换自动类型转换&#xff08;隐式&#xff09;强制类型转换&#xff08;显式&am…

tinkerCAD案例:20. Simple Button 简单按钮和骰子

文章目录 tinkerCAD案例&#xff1a;20. Simple Button 简单按钮Make a Trick Die tinkerCAD案例&#xff1a;20. Simple Button 简单按钮 Project Overview: 项目概况&#xff1a; This is a series of fun beginner level lessons to hone your awesome Tinkercad skills a…

8.docker仓库

文章目录 Docker仓库本地私有仓库Docker HarborDocker harbor部署访问页面创建用户下载私有仓库镜像harbor同步 Docker仓库 本地私有仓库 ##先下载 registry 镜像docker pull registry##修改配置文件&#xff0c;在 daemon.json 文件中添加私有镜像仓库地址vim /etc/dock…

第三节 C++ 运算符

文章目录 掌握知识点1. 运算符概述1.1 算术运算符1.1.1 加&#xff0c;减&#xff0c;乘&#xff0c;除1.1.2 自增&#xff0c;自减1.1.3 取模运算 % 1.2 赋值运算符1.3 比较运算符1.4 逻辑运算符 2. 编程题&#xff1a;运算符使用2.1 计算器2.2 位数分离2.3 鸡兔同笼问题 掌握…