robot_localization----ekf融合

ekf_template.yaml参数

# 滤波器输出位置估计的频率,单位为赫兹。 注意过滤器不会开始计算直到它从输入之一接收到至少一条消息。 然后它将在此处指定的频率,无论是否接收到更多测量值。 如果未指定,则默认为 30。
frequency: 30

silent_tf_failure: false

# 在此之后我们认为传感器超时的时间段(以秒为单位)。 在这种情况下,我们进行预测在 EKF 上循环而不更正它。 这个参数可以被认为是最小频率filter 将产生新的输出。 如果未指定,则默认为 1 / 频率。 
sensor_timeout: 0.1


# ekf_localization_node 和 ukf_localization_node 都使用 3D 全方位运动模型。 如果这个参数是
# 设置为 true,在您的状态估计中不会使用 3D 信息。 如果您在平面上操作,请使用此选项环境并希望忽略可能会被检测到的地平面微小变化的影响
#例如,通过 IMU。 如果未指定,则默认为 false。 
two_d_mode: false


# 使用此参数为 ekf_localization_node 生成的变换提供偏移量。 这可以用于未来约会转换,这是与其他一些包交互所必需的。 默认为 0.0 如果未指定。 
transform_time_offset: 0.0


# 使用此参数指定 tf 侦听器应等待转换变为可用的时间。如果未指定,则默认为 0.0。 
transform_timeout: 0.0

# 如果遇到问题,请尝试将此设置为true,然后回显/diagnostics_agg 主题以查看节点是否对任何设置或数据不满意。 
print_diagnostics: true

# 调试设置。 不适合胆小的人。 将大量信息输出到指定的文件中debug_out_file。 我希望你喜欢矩阵! 请注意,将此设置为 true 会产生强烈的危害对节点性能的影响。 如果未指定,则默认为 false。 
debug: false


# 如果未指定,则默认为“robot_localization_debug.txt”。 请指定完整路径。 
debug_out_file: /path/to/debug/file.txt


# 是否广播 /tf 主题的转换。 如果未指定,则默认为 true。 
publish_tf: true


# 是否发布加速状态。 如果未指定,则默认为 false。 
publish_acceleration: false


# REP-105 (http://www.ros.org/reps/rep-0105.html) 指定了四个主要坐标系:base_link、odom、map 和地球。 base_link 是贴在机器人上的坐标系。 odom 和 map 都是世界固定的框架。
# 机器人在 odom 坐标系中的位置会随时间漂移,但短期内是准确的,应该是连续的。因此,odom 帧是执行局部运动计划的最佳帧。地图框,就像 odom frame,是一个世界固定的坐标系,虽然它包含你的最全局准确的位置估计机器人,它会受到离散跳跃的影响,例如,由于 GPS 数据的融合或基于地图的校正本地化节点。地球框架用于通过为多个地图框架提供一个公共参考框架来关联多个地图框架。
#ekf_localization_node 和 ukf_localization_node 与地球坐标系无关。
# 以下是如何使用以下设置:
# 1. 将 map_frame、odom_frame 和 base_link 框架设置为适合您系统的框架名称。1a。如果您的系统没有 map_frame,只需将其删除,并确保“world_frame”设置为odom_frame。
# 2. 如果您要融合连续位置数据,例如车轮编码器里程计、视觉里程计或 IMU 数据,请设置"world_frame" 到您的 odom_frame 值。这是robot_localization 状态估计节点的默认行为。
# 3. 如果您正在融合受离散跳跃影响的全局绝对位置数据(例如,GPS 或位置更新)来自地标观察)然后:3a。将您的“world_frame”设置为您的 map_frame 值 3b。确保其他东西正在生成 odom->base_link 转换。请注意,这甚至可以是另一种状态来自robot_localization 的估计节点!但是,该实例不应该*融合全局数据。
map_frame: map              # Defaults to "map" if unspecified
odom_frame: odom            # Defaults to "odom" if unspecified
base_link_frame: base_link  # Defaults to "base_link" if unspecified
world_frame: odom           # Defaults to the value of odom_frame if unspecified


# 过滤器接受来自每种输入消息类型(nav_msgs/Odometry,
#geometry_msgs/PoseWithCovarianceStamped, geometry_msgs/TwistWithCovarianceStamped,sensor_msgs/Imu)。 要添加输入,只需将序列中的下一个数字附加到其“基本”名称,例如 odom0,odom1、twist0、twist1、imu0、imu1、imu2等,取值应为主题名称。 这些参数显然没有默认值,并且必须指定。 
odom0: /odom


# 每个传感器读数都会更新部分或全部过滤器的状态。 这些选项使您可以更好地控制哪些来自每个测量的值被馈送到过滤器。 例如,如果您有一个里程计消息作为输入,但只有想要使用它的 Z 位置值,然后将整个向量设置为 false,除了第三个条目的顺序值为 x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az。 请注意,不是某些消息类型不提供过滤器估计的一些状态变量。 例如,一条 TwistWithCovarianceStamped 消息没有姿势信息,因此在这种情况下前六个值将毫无意义。 每个向量默认为全假,如果未指定,则有效地使每个传感器都需要此参数。 
#odom0_config: [true,  true,  false,
       #        false, false, false,
     #          false, false, false,
      #         false, false, true,
       #        false, false, false]
odom0_config: [false, false, false,
               false, false, false,
               true,  true,  false,
               false, false, true,
               false, false, false]

# 如果你有高频数据或者是用低频参数值运行,那么你可能要增加订阅队列的大小,以便融合更多的测量。 
odom0_queue_size: 2


# [高级] ROS 中的大消息在到达频率很高时会表现出奇怪的行为。 这是一个结果
# Nagle 算法。 这个选项告诉 ROS 订阅者使用 tcpNoDelay 选项,这会禁用 Nagle 的算法。 
odom0_nodelay: false


# [高级] 当用两个传感器测量一个姿态变量时,可能会出现两个传感器都低于报告它们的协方差。 这会导致滤波器在每次测量之间快速来回跳跃,因为它们到达。 在这些情况下,通常有必要 (a) 校正测量协方差,或 (b) 如果速度也是由一个传感器测量,让一个传感器测量姿势,另一个传感器测量速度。 然而,做 (a) 或 (b) 不是总是可行的,所以我们公开微分参数。 启用差分模式时,所有绝对位姿数据通过区分绝对位姿测量值转换为速度数据。 然后这些速度是像往常一样集成。 注意:这仅适用于提供姿势测量的传感器; 将微分设置为真,对扭曲测量没有影响。 
odom0_differential: false


# [ADVANCED] 节点启动时,如果该参数为真,则第一次测量被视为“零点”用于所有未来的测量。 虽然您可以使用微分参数实现相同的效果,但关键是不同之处在于相对参数不会导致之前的测量值转换为速度整合它。 如果您只是想让给定传感器的测量从 0 开始,请将其设置为 true。 
odom0_relative: false


# [高级] 如果您的数据受到异常值的影响,请使用这些阈值设置(表示为马氏距离)来控制允许传感器测量距离当前车辆状态多远。 每个默认为numeric_limits<double>::max() 如果未指定。 如果没有,强烈建议删除这些参数必需的。 数据是在位姿和扭曲变量级别指定的,而不是单独为每个变量指定。对于同时具有pose和twist数据的消息,该参数指定我们应用到消息的哪一部分阈值。 
odom0_pose_rejection_threshold: 5
odom0_twist_rejection_threshold: 1

# Further input parameter examples
odom1: /odom_rf2o
odom1_config: [false, false, false,
               false, false, false,
               true,  true,  false,
               false, false, true,
               false, false, false]
odom1_differential: false
odom1_relative: true
odom1_queue_size: 2
odom1_pose_rejection_threshold: 2
odom1_twist_rejection_threshold: 0.2
odom1_nodelay: false

pose0: example/pose
pose0_config: [true,  true,  false,
               false, false, false,
               false, false, false,
               false, false, false,
               false, false, false]
pose0_differential: true
pose0_relative: false
pose0_queue_size: 5
pose0_rejection_threshold: 2  # Note the difference in parameter name
pose0_nodelay: false

twist0: example/twist
twist0_config: [false, false, false,
                false, false, false,
                true,  true,  true,
                false, false, false,
                false, false, false]
twist0_queue_size: 3
twist0_rejection_threshold: 2
twist0_nodelay: false

imu0: /imu
imu0_config: [false, false, false,
              false, false, true,
              false, false, false,
              false, false, true,
              true,  false, false]
imu0_nodelay: false
imu0_differential: false
imu0_relative: true
imu0_queue_size: 5
imu0_pose_rejection_threshold: 0.8                 # Note the difference in parameter names
imu0_twist_rejection_threshold: 0.8                #
imu0_linear_acceleration_rejection_threshold: 0.8  #

# [高级] 一些 IMU 会自动消除重力加速度,而另一些则不会。 如果你的没有,请设置
# 这为真,并且*确保*您的数据符合 REP-103,特别是数据在 ENU 框架中。 
imu0_remove_gravitational_acceleration: true


# [高级] EKF 和 UKF 模型遵循标准的预测/正确循环。在预测过程中,如果没有加速度参考,时间 t+1 的速度被简单地预测为与时间 t 的速度相同。中修正,这个预测值与测量值融合以产生新的速度估计。这可以是有问题,因为最终速度实际上是旧速度和新速度的加权平均值。什么时候这个速度被整合到一个新的姿势中,结果可能是缓慢的覆盖。这个效果特别在旋转过程中使用 LIDAR 数据很明显。为了解决这个问题,用户可以尝试夸大 process_noise_covariance对于有问题的速度变量,或在测量中减少有问题的变量的方差本身。此外,用户还可以利用我们当时向机器人发出的控制命令。进行预测。如果使用控制,它将被转换为加速度项,它将在预测。请注意,如果有问题的变量的加速度测量值可从以下任一输入,控制项将被忽略。我们是否在预测过程中使用控制输入。默认为假。 
use_control: true

# 输入(假设为 cmd_vel)是否是 geometry_msgs/Twist 或 geometry_msgs/TwistStamped 消息。 默认为 错误的。 
stamped_control: false

# 最后发出的控制命令将用于此时段的预测。 默认为 0.2。 
control_timeout: 0.2
# 控制哪些速度。 顺序是 vx、vy、vz、vroll、vpitch、vyaw。 
control_config: [true, false, false, false, false, true]

# 限制加速度项的大小。 应该与您的机器人的运动学相匹配。 
acceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 3.4]

# 机器人的加速和减速限制并不总是相同的。 
deceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 4.5]

# 如果您的机器人不能立即达到其加速度限制,则可以通过这些增益控制允许的变化 
acceleration_gains: [0.8, 0.0, 0.0, 0.0, 0.0, 0.9]

# 如果您的机器人不能立即达到其减速极限,则可以通过这些增益控制允许的变化 
deceleration_gains: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0]


# [ADVANCED] 过程噪声协方差矩阵可能难以调整,并且可能因应用程序而异,因此它是作为配置参数公开。 该矩阵表示我们在每次之后添加到总误差中的噪声预测步骤。 全向运动模型与您的系统匹配得越好,这些值就越小。但是,如果用户发现给定的变量收敛速度很慢,一种方法是增加相关变量的 process_noise_covariance 对角线值,这将导致过滤器的预测错误更大,这将导致过滤器在校正期间更信任传入的测量值。 这些值是顺序为 x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az。 默认为下面的矩阵,如果未指定。 
process_noise_covariance: [0.05, 0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                           0,    0.05, 0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                           0,    0,    0.06, 0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                           0,    0,    0,    0.03, 0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                           0,    0,    0,    0,    0.03, 0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                           0,    0,    0,    0,    0,    0.06, 0,     0,     0,    0,    0,    0,    0,    0,    0,
                           0,    0,    0,    0,    0,    0,    0.025, 0,     0,    0,    0,    0,    0,    0,    0,
                           0,    0,    0,    0,    0,    0,    0,     0.025, 0,    0,    0,    0,    0,    0,    0,
                           0,    0,    0,    0,    0,    0,    0,     0,     0.04, 0,    0,    0,    0,    0,    0,
                           0,    0,    0,    0,    0,    0,    0,     0,     0,    0.01, 0,    0,    0,    0,    0,
                           0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0.01, 0,    0,    0,    0,
                           0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0.02, 0,    0,    0,
                           0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0.01, 0,    0,
                           0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0.01, 0,
                           0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0.015]

# [ADVANCED] 这表示状态估计误差协方差矩阵的初始值。 设置对角线value (variance) 到一个大的值将导致变量的初始测量快速收敛问题。 用户应注意不要对不会直接测量的变量使用大值。 价值顺序为 x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az。 默认为下面的矩阵如果未指定。 
initial_estimate_covariance: [1e-9, 0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                              0,    1e-9, 0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                              0,    0,    1e-9, 0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                              0,    0,    0,    1e-9, 0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                              0,    0,    0,    0,    1e-9, 0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                              0,    0,    0,    0,    0,    1e-9, 0,    0,    0,    0,     0,     0,     0,    0,    0,
                              0,    0,    0,    0,    0,    0,    1e-9, 0,    0,    0,     0,     0,     0,    0,    0,
                              0,    0,    0,    0,    0,    0,    0,    1e-9, 0,    0,     0,     0,     0,    0,    0,
                              0,    0,    0,    0,    0,    0,    0,    0,    1e-9, 0,     0,     0,     0,    0,    0,
                              0,    0,    0,    0,    0,    0,    0,    0,    0,    1e-9,  0,     0,     0,    0,    0,
                              0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     1e-9,  0,     0,    0,    0,
                              0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     1e-9,  0,    0,    0,
                              0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     1e-9, 0,    0,
                              0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    1e-9, 0,
                              0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    1e-9]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoBo玩ROS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值