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

news2024/9/25 7:23:56

机器人状态估计: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文件中。
在这里插入图片描述

基本参数

  • frequency
    滤波器产生状态估计值的真实频率(单位为Hz)。注意:滤波器只有从输入之一接收到至少一条消息后才会开始计算。

  • sensor_timeout
    实值周期(以秒为单位),超过此值后我们认为任何传感器都已超时。在这种情况下,我们将对EKF进行预测周期,而无需对其进行校正。可以将此参数视为滤波器将生成新输出的最小频率的倒数。

  • two_d_mode
    如果您的机器人在平面环境中运行,并且可以忽略地面的细微变化(如IMU所报告),则将其设置为true。它将所有3D变量(Z,侧倾,俯仰以及它们各自的速度和加速度)融合成值0。这样可以确保这些值的协方差不会越界,同时确保您的机器人的状态估算值仍固定在X-Y平面上。

  • frame
    具体参数:map_frame、odom_frame、base_link_frame、base_link_output_frame、world_frame
    这些参数定义了robot_localization的操作“模式”。REP-105指定三个主要坐标系:map,odom和base_link。base_link是固定在机器人上的坐标系。机器人在odom框架中的位置会随着时间而漂移,但在短期内是准确的,应该是连续的。map坐标系与odom坐标系一样,是固定的世界坐标系,虽然它包含您机器人的全局最准确的位置估计值,但由于GPS数据的融合,它会受到离散跳跃的影响。
    坐标系设置方法:
    1)将map_frame,odom_frame和base_link_frame参数设置为系统的适当坐标系名称。如果系统没有map_frame,则将其删除,并确保world_frame设置为odom_frame的值。
    2)如果仅融合连续位置数据(例如车轮编码器里程计,视觉里程计或IMU数据),则将world_frame设置为odom_frame的值。这是robot_localization中状态估计节点的默认行为,也是最常见的用法。
    3)如果您要融合受离散跳跃影响的全局绝对位置数据(例如GPS或来自地标观测的位置更新),则:将world_frame设置为map_frame的值;确保其他东西正在生成odom-> base_link的转换。这甚至可以是robot_localization状态估计节点的另一个实例。但是,该实例不应融合全局数据。
    map_frameodom_framebase_link_frame的默认值分别是mapodombase_linkbase_link_output_frame参数默认为base_link_frame的值。world_frame参数默认为odom_frame的值。

  • transform_time_offset
    robot_localization包使用tf2的lookupTransform方法请求转换。此参数指定如果转换尚不可用我们要等待多长时间。如果未设置,则默认为0。值0表示我们只是获取了最新的可用转换(请参阅tf2实现),因此我们不会阻塞滤波器。指定非零的transform_timeout会影响滤波器的时序,因为它会等待最大的transform_timeout时间以使转换可用。这直接意味着大多数指定的期望输出速率都无法满足,因为滤波器在更新时必须等待转换

  • sensor
    对于每个传感器,用户需要根据消息类型定义此参数。例如,如果定义一个Imu消息源和两个Odometry消息源,则配置如下所示:

<param name="imu0" value="robot/imu/data"/>
<param name="odom0" value="wheel_encoder/odometry"/>
<param name="odom1" value="visual_odometry/odometry"/>

每个参数名称的索引都是从0开始的(例如odom0,odom1等),并且必须按顺序定义(例如,如果尚未定义pose1,则不要使用pose0和pose2)。每个参数的值是该传感器的话题名称。

  • [sensor]_config
    具体参数则是:odomN_config twistN_config imuN_config poseN_config
    对于上面定义的每个传感器消息,用户必须指定应将这些消息的哪些变量融合到最终状态估计中。里程计配置示例可能如下所示:
<rosparam param="odom0_config">[true,  true,  false,
                               false, false, true,
                               true,  false, false,
                               false, false, true,
                               false, false, false]</rosparam>

布尔值的顺序为:
在这里插入图片描述
示例是一个二维里程计,融合位置X,Y,航向角度yaw、机器人前方速度X’,航向角速度yaw’
注意:该规范是在传感器的frame_id中完成的,而不是在world_frame或base_link_frame中完成的。

  • [sensor]_queue_size
    具体参数:odomN_queue_size\ twistN_queue_size\ imuN_queue_size\ poseN_queue_size
    用户可以使用这些参数来调整每个传感器的回调队列大小。如果您的频率参数值远低于传感器的频率,这很有用,因为它允许滤波器合并更新周期之间到达的所有测量值。

  • [sensor]_differential
    具体参数:odomN_differential \ imuN_differential \ poseN_differential
    对于上面定义的每个包含位姿信息的传感器消息,用户可以指定是否应差分集成位姿变量。如果给定值设置为true,则对于从相关传感器在时间t进行的测量,我们首先将减去在时间t-1处的测量值,然后将所得值转换为速度。如果您的机器人有两个绝对位姿信息源,例如来自里程计和IMU的偏航测量,则此设置特别有用。在这种情况下,如果未正确配置输入源上的方差,则这些测量值可能会彼此不同步,并在滤波器中引起振荡,但是通过对其中一个或两个进行差分集成,我们可以避免这种情况。

  • [sensor]_relative
    具体参数:odomN_relative \ imuN_relative \ poseN_relative
    如果将此参数设置为true,则来自该传感器的任何测量值都将相对于从该传感器接收到的第一个测量值进行融合。这在以下情况下很有用,例如,如果您希望状态估计值始终从(0,0,0)开始,并且横滚,俯仰和偏航角值为(0,0,0)。它与_differential参数相似,但是我们始终在时间0删除测量,而不是在时间t-1删除测量,并且不将测量转换为速度。

  • imuN_remove_gravitational_acceleration
    如果从IMU融合加速度计数据,则此参数确定在融合之前是否从重力测量中去除了由于重力引起的加速度。
    注意:这假定提供加速度数据的IMU也在产生绝对方向。需要方向数据才能正确消除重力加速度。

  • gravitational_acceleration
    如果imuN_remove_gravitational_acceleration设置为true,则此参数确定由于重力引起的Z方向的加速度,该加速度将从IMU的线性加速度数据中删除。默认值为9.80665 (m/s^2)。

  • initial_state
    指定滤波器的启动状态。以与传感器配置相同的顺序,将状态指定为双精度的15维向量。例如,要在位置为(5.0,4.0,3.0),偏航角为1.57和线速度为(0.1,0.2,0.3)的状态下启动机器人,则可以使用:

<rosparam param="initial_state">[5.0,  4.0,  3.0,
                                 0.0,  0.0,  1.57,
                                 0.1,  0.2,  0.3,
                                 0.0,  0.0,  0.0,
                                 0.0,  0.0,  0.0]</rosparam>

  • publish_tf
    如果为true,则状态估计节点将发布从world_frame参数指定的坐标系到base_link_frame参数指定的坐标系的转换。默认为true。

  • publish_acceleration
    如果为true,则状态估计节点将发布线性加速状态。默认为false。

  • print_diagnostics
    如果为true,则状态估计节点将向/diagnostics主题发布诊断消息。这对于调试配置和传感器数据很有用。

在这里插入图片描述

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

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

相关文章

【业务功能篇56】SpringBoot 日志SLF4J Logback

3.5.1 日志框架分类与选择 3.5.1.1 日志框架的分类 日志门面 (日志抽象)日志实现JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java)Jul(Java Util Logging) , Log4j , Log4j2 , Logback 记录型日志框架 Jul (Java Util Logging)&#xff1a;JDK中的日志…

山西电力市场日前价格预测【2023-07-29】

日前价格预测 预测明日&#xff08;2023-07-29&#xff09;山西电力市场全天平均日前电价为337.82元/MWh。其中&#xff0c;最高日前电价为355.66元/MWh&#xff0c;预计出现在09: 15。最低日前电价为314.90元/MWh&#xff0c;预计出现在24: 00。 价差方向预测 1&#xff1a;实…

MySQL基础语法(DDL、DQL、DML、DCL)

目录 SQL通用语法以及分类 SQL通用语法 SQL语句的分类 数据库/表/列的命名规则 DDL语句 DDL设计的数据类型 数据库操作 表操作&#xff08;必须先进入到数据库&#xff09; DQL语句 DQL的执行顺序 基本查询 SELECT 条件查询 WHERE 分组查询 GROUP BY 排序查询 OR…

formatter的用法,深拷贝, Object.assign 方法实战。

1. :formatter的用法 :formatter 接受一个函数作为参数&#xff0c;这个函数有三个参数&#xff1a;row&#xff0c;column 和 cellValue。row 是当前行的数据&#xff0c;column 是当前列的数据&#xff0c;cellValue 是当前单元格的值。 <el-table-column prop"SYS…

Spring Boot——Spring Boot启动原理

系列文章目录 Spring Boot启动原理 系列文章目录一、Spring Boot启动的宏观流程图二、Spring Boot启动流程2.1 初始化new SpringApplication2.1.1Spring Boot入口2.1.2初始化SpringApplication2.1.2.1判断当前应用程序类型2.1.2.2设置应用程序的所有初始化器(initializers)2.1.…

内置 NMOS 单路 PWM 控制的高调光比 LED 降压恒流控制器

概述 OC5401M 是一款内置调光 NMOS 的单路 PWM 控制的高调光比降压恒流驱动控制器&#xff0c;PWM 调光比最高可达 10000&#xff1a;1。 OC5401M 支持 16-60V 输入电压范围。 OC5401M 采用电流滞环控制方式&#xff0c;无需环路补偿。 OC5401M 可通过外接电阻设置 LED输出电流…

Python(四十九)获取列表指定元素的索引

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Improving Cross-Modal Retrieval with Set of Diverse Embeddings

框架图&#xff1a; Using Triplet Loss: Smooth-Chamfer similarity Using Log-Sum-Exp,

matplotlib从起点出发(5)_Tutorial_5_styleSheets

1 使用样式表和rcParams自定义matplotlib 以下是自定义matplotlib的属性和默认样式的提示。 有三种方式来自定义matplotlib: 在运行时设置rcParams&#xff1b;使用样式表&#xff1b;改写matplotlibrc文件。 在运行时设置rcParams优先于样式表&#xff0c;样式表优先于matp…

[JavaWeb]SQL介绍-DDL语句

SQL介绍-DDL语句 一.SQL简介1.简介2.SQL通用语法3.SQL语言的分类 二.DDL-操作数据库与表1.DDL操作数据库2.DDL操作表①.查询表(Retrieve)②.创建表(Create)③.修改表(Update)④.删除表(Delete) 一.SQL简介 1.简介 SQL: Structured Query Language–结构化查询语言用来操作关系…

如图,△ABC中,AD是角平分线,E、F分别为AC、AB上的点,且∠AED+∠AFD=180°.试问:DE与DF有何关系,并说明理由.

Question&#xff1a; 如图&#xff0c;△ABC中&#xff0c;AD是角平分线&#xff0c;E、F分别为AC、AB上的点&#xff0c;且∠AED∠AFD180&#xff0e;试问&#xff1a;DE与DF有何关系&#xff0c;并说明理由&#xff0e; Answer&#xff1a; 分析&#xff1a;过D作DM⊥AB于…

postgresql搭建主备

文章目录 1. 要求2. 主库设置3. 主库创建复制槽、复制用户4. 导出主库5. 备库设置6. 备库创建standby.signal7. 启动备库8. 备库创建复制槽、查询数据9. 查看日志10. 测试切换11. 同步测试12. 监控主备状态 1. 要求 1.使用流复制&#xff0c;配置复制槽 2.只有一个备库时不配置…

技术分享 | 接口自动化测试中,文件上传该如何测试?

在服务端自动化测试过程中&#xff0c;文件上传类型的接口对应的请求头中的 content-type 为 multipart/form-data; boundary…&#xff0c;碰到这种类型的接口&#xff0c;使用 Java 的 REST Assured 或者 Python 的 Requests 均可解决。 实战练习 Python 版本 在 Python 版…

Mysql原理篇--第三章 事务与锁

文章目录 前言一、mysql 的事务1 .1 mysql 事务:1 .2 mysql 为什么要支持事务: 二、mysql的事务实现&#xff1a;2.1 mysql的事务隔离级别&#xff1a;2.2 mysql 脏读&#xff0c;不可重复读&#xff0c;幻读&#xff1a;2.2.1 脏读&#xff1a;2.2.2 不可重复读&#xff1a;2.…

生态共建 | 5-6月,YashanDB与14款产品完成兼容互认证

5-6月&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与中科可控信息产业有限公司、云基智慧工程股份有限公司、上海天玑数据技术有限公司、金蝶软件&#xff08;中国&#xff09;有限公司、上海布雷德科技有限公司、深圳市杉岩数据技术有限公司、广东中兴新支点技术有限…

prometheus和cAdvisor组合

文章目录 docker内部署PromethuesPrometheuscAdvisorPrometheus和cAdvisor关系配置 docker内部署Promethues Prometheus Prometheus是一个开源的系统监控和报警工具&#xff0c;由SoundCloud开发并在2012年捐赠给了Cloud Native Computing Foundation (CNCF)。它被广泛用于监…

CAN学习笔记1:计算机网络

计算机网络 1 概述 计算机网络就是把多种形式的计算机用通信线路连接起来&#xff0c;并使其能够互相进行交换的系统。实际上&#xff0c;计算机网络包括了计算机、各种硬件、各种软件、组成网络的体系结构、网络传输介质和网络通信计数。因此&#xff0c;计算机网络是计算机…

第G3周:CGAN|生成手势图像

目录 一、准备工作1. 导入数据2. 数据可视化 二、构建模型1. 构建生成器2. 构建鉴别器 三、训练模型1. 定义损失函数2. 定义优化器3. 训练模型 四、理论基础1.DCGAN原理2.DCGAN网络3.个人感悟 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…

自动化测试:让软件测试更高效更愉快!

谈谈那些实习测试工程师应该掌握的基础知识&#xff08;一&#xff09;_什么时候才能变强的博客-CSDN博客https://blog.csdn.net/qq_17496235/article/details/131839453谈谈那些实习测试工程师应该掌握的基础知识&#xff08;二&#xff09;_什么时候才能变强的博客-CSDN博客h…

【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标

目录 一、C 学习路线 二、C 课程大纲与学习目标 &#xff08;1&#xff09;第一阶段&#xff1a;C 语言基础 &#xff08;2&#xff09;第二阶段&#xff1a;C 高级编程 &#xff08;3&#xff09;第三阶段&#xff1a;C 核心编程与桌面应用开发 &#xff08;4&#xf…