跳转到内容

ChassisLocalization::EKF API

文档稀疏
符号
67
已记录
33
修订版本
0.1.0+825f1408280d

34 / 67 个公开 API 符号没有说明。

命名空间

4

math

上游未提供说明。

math::ekf

上游未提供说明。

2

chassis::loc::LocEKF

可配置历史缓冲容量的 ESKF 定位系统实现类。 继承 IChassisLoc 接口,与底盘系统统一对接 封装 ESKF 算法,提供轮速 + 陀螺仪 + 外部位姿观测的融合能力 自动同步 ESKF 状态到 IChassisLoc 的 posture 和 velocity 历史状态缓冲容量可在工程接入时按回放需求和 RAM 预算做权衡 特性: update() updateLidar() 本类默认和使用的是同一时间基准 如果外部观测来自另一套时钟,必须先由接入工程完成对时或时间映射 本驱动库不负责上下位机对时 时间基准边界: StateBufferCapacity 保存多少个历史状态点,用于晚到观测回放 InputBufferCapacity 保存多少个尚未推进进 EKF 的输入样本,默认 4

Localization/EKF/LocEKF.hpp:46

chassis::loc::LocEKF::PositionEKF

内部位置 EKF。 [x, y, yaw, yaw_offset] 状态向量是, 其中 yaw_offset 用来吸收陀螺仪与外部绝对观测之间可能存在的偏差。

Localization/EKF/LocEKF.hpp:61

结构体

3

函数

22

chassis::loc::LocEKF::LocEKF

                    chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::LocEKF (motion::IChassisMotion &motion, const Config &cfg, sensors::gyro::HWT101CT &gyro, const uint32_t delta_ticks=1)
                  

motion 作为里程计输入来源的 Motion cfg 滤波配置 gyro 提供 yaw / wz 观测的陀螺仪 delta_ticks update() 两次调用之间预计相隔多少个 HAL tick 若初始状态依赖首次外部观测,推荐先让 Motion 独立运行,待拿到第一帧雷达位姿和 第一帧陀螺仪数据,并准备好 cfg.x_init 等初始条件后,再构造本对象。

Localization/EKF/LocEKF.hpp:408

chassis::loc::LocEKF::PositionEKF::PositionEKF

                    chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::PositionEKF (const Config &cfg)
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:136

chassis::loc::LocEKF::PositionEKF::covariance

                    auto chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::covariance () const
                  

返回当前状态协方差。

Localization/EKF/LocEKF.hpp:145

chassis::loc::LocEKF::PositionEKF::gyroUpdate

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::gyroUpdate (const float &yaw)
                  

用陀螺仪 yaw 做一次量测更新。

Localization/EKF/LocEKF.hpp:180

chassis::loc::LocEKF::PositionEKF::lidarUpdate

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::lidarUpdate (const Posture &pos)
                  

用外部绝对位姿做一次量测更新。

Localization/EKF/LocEKF.hpp:188

chassis::loc::LocEKF::PositionEKF::odomUpdate

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::odomUpdate (const Velocity &vel, const float dt)
                  

只用轮速里程计推进一次预测。

Localization/EKF/LocEKF.hpp:155

chassis::loc::LocEKF::PositionEKF::reset

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::reset (const VecS &state, const MatS &covariance)
                  

用指定状态和协方差直接覆盖滤波器,供回溯重放使用。

Localization/EKF/LocEKF.hpp:148

chassis::loc::LocEKF::PositionEKF::state

                    auto chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::state () const
                  

返回当前 EKF 状态向量。

Localization/EKF/LocEKF.hpp:143

chassis::loc::LocEKF::dt

                    float chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::dt () const
                  

约定 HAL tick 为 1ms,因此这里直接换算成秒。

Localization/EKF/LocEKF.hpp:252

chassis::loc::LocEKF::isGyroEnabled

                    bool chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::isGyroEnabled () const
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:396

chassis::loc::LocEKF::isLidarEnabled

                    bool chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::isLidarEnabled () const
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:397

chassis::loc::LocEKF::next_idx

                    uint32_t chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::next_idx () const
                  

只有两个缓冲区,因此这里直接在 0 / 1 之间切换。

Localization/EKF/LocEKF.hpp:447

chassis::loc::LocEKF::postureInWorld

                    Posture chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::postureInWorld () const override
                  

双缓冲读取,避免读到 update 中间态。

Localization/EKF/LocEKF.hpp:427

chassis::loc::LocEKF::setGyroEnabled

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::setGyroEnabled (const bool enabled)
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:394

chassis::loc::LocEKF::setLidarEnabled

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::setLidarEnabled (const bool enabled)
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:395

chassis::loc::LocEKF::update

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::update ()
                  

按固定 dt 采样底盘速度和陀螺仪,并推进一次滤波状态。 dt 由构造参数 delta_ticks 决定,默认假设 tick 时间基准为 1ms。

Localization/EKF/LocEKF.hpp:318

chassis::loc::LocEKF::updateEKF

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::updateEKF ()
                  

消费输入缓冲并推进 EKF,然后同步对外可读状态。

Localization/EKF/LocEKF.hpp:266

chassis::loc::LocEKF::updateInput

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::updateInput ()
                  

把当前轮速和陀螺仪采样压入输入缓冲。

Localization/EKF/LocEKF.hpp:255

chassis::loc::LocEKF::updateLidar

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::updateLidar (const Posture &pos, const uint32_t ticks)
                  

注入一帧外部位姿观测。 pos 外部观测的世界系位姿,单位语义与 Posture 一致 ticks update() 该观测对应的时间戳,必须与内部采样使用的时间基准一致; 若观测来自另一套时钟,需先由接入工程换算到统一时基后再传入 StateBufferCapacity 如果观测晚到但仍在历史缓冲区范围内,当前实现会回溯状态并重放后续输入。 可回放窗口长度由模板参数决定。

Localization/EKF/LocEKF.hpp:339

chassis::loc::LocEKF::updateLoc

                    void chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::updateLoc ()
                  

根据当前 EKF 状态刷新对外暴露的 posture / velocity 缓冲。

Localization/EKF/LocEKF.hpp:287

chassis::loc::LocEKF::velocityInBody

                    Velocity chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::velocityInBody () const override
                  

双缓冲读取,避免读到 update 中间态。

Localization/EKF/LocEKF.hpp:417

chassis::loc::LocEKF::velocityInWorld

                    Velocity chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::velocityInWorld () const override
                  

双缓冲读取,避免读到 update 中间态。

Localization/EKF/LocEKF.hpp:422

类型定义

1

chassis::loc::LocEKF::Config

                    using chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::Config = typename PositionEKF::Config
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:311

变量

33

chassis::loc::LocEKF::Input::ticks

                    uint32_t chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::Input::ticks
                  

输入对应的时间戳;默认来自本地 tick,若外部观测参与回放,工程侧需先把时间基准对齐

Localization/EKF/LocEKF.hpp:229

chassis::loc::LocEKF::Input::vel

                    Velocity chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::Input::vel
                  

该时刻的里程计预测输入

Localization/EKF/LocEKF.hpp:231

chassis::loc::LocEKF::Input::yaw_gyro

                    float chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::Input::yaw_gyro
                  

该时刻的陀螺仪 yaw 观测

Localization/EKF/LocEKF.hpp:232

chassis::loc::LocEKF::PositionEKF::Config::covP

                    struct chassis::loc::LocEKF::PositionEKF::Config::@007103227310027305026102154020312164355357035052 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::covP
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:97

chassis::loc::LocEKF::PositionEKF::Config::gyro

                    struct chassis::loc::LocEKF::PositionEKF::Config::@101333314345004074132312303221246003261163207252::@175340041104356104356371041244266301212256374154 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::gyro
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:122

chassis::loc::LocEKF::PositionEKF::Config::lidar

                    struct chassis::loc::LocEKF::PositionEKF::Config::@101333314345004074132312303221246003261163207252::@014206313035024112145210232025306065301174046155 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::lidar
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:132

chassis::loc::LocEKF::PositionEKF::Config::noiseQ

                    struct chassis::loc::LocEKF::PositionEKF::Config::@324300371120222061137354153047074105277163021363 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::noiseQ
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:110

chassis::loc::LocEKF::PositionEKF::Config::noiseR

                    struct chassis::loc::LocEKF::PositionEKF::Config::@101333314345004074132312303221246003261163207252 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::noiseR
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:133

chassis::loc::LocEKF::PositionEKF::Config::x

                    float chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::x
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:79

chassis::loc::LocEKF::PositionEKF::Config::x_init

                    struct chassis::loc::LocEKF::PositionEKF::Config::@076150034055000002104272336301152127011334367235 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::x_init
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:84

chassis::loc::LocEKF::PositionEKF::Config::xy

                    float chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::xy
                  

外部位姿观测中的平移噪声

Localization/EKF/LocEKF.hpp:89

chassis::loc::LocEKF::PositionEKF::Config::y

                    float chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::y
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:79

chassis::loc::LocEKF::PositionEKF::Config::yaw

                    float chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::yaw
                  

陀螺仪 yaw 观测噪声 外部位姿观测中的航向噪声

Localization/EKF/LocEKF.hpp:80

chassis::loc::LocEKF::PositionEKF::Config::yaw_offset

                    float chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::Config::yaw_offset
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:81

chassis::loc::LocEKF::PositionEKF::R_gyro_

                    math::Mat<float, 1, 1> chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::R_gyro_
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:218

chassis::loc::LocEKF::PositionEKF::R_lidar_

                    math::Mat<float, 3, 3> chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::PositionEKF::R_lidar_
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:219

chassis::loc::LocEKF::StatePoint::P

                    PositionEKF::MatS chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::StatePoint::P
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:239

chassis::loc::LocEKF::StatePoint::input

                    Input chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::StatePoint::input
                  

推导出该状态时所使用的输入样本

Localization/EKF/LocEKF.hpp:241

chassis::loc::LocEKF::StatePoint::x

                    PositionEKF::VecS chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::StatePoint::x
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:238

chassis::loc::LocEKF::dticks_

                    uint32_t chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::dticks_
                  

相邻 update 之间的 tick 间隔

Localization/EKF/LocEKF.hpp:247

chassis::loc::LocEKF::gyro_

                    sensors::gyro::HWT101CT& chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::gyro_
                  

提供 yaw / wz 观测的陀螺仪

Localization/EKF/LocEKF.hpp:52

chassis::loc::LocEKF::gyro_enabled_

                    bool chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::gyro_enabled_
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:223

chassis::loc::LocEKF::idx_

                    std::atomic<size_t> chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::idx_
                  

当前对外可见缓冲区下标

Localization/EKF/LocEKF.hpp:444

chassis::loc::LocEKF::in_body

                    Velocity chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::in_body
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:440

chassis::loc::LocEKF::in_world

                    Posture chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::in_world
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:435

chassis::loc::LocEKF::in_world

                    Velocity chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::in_world
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:441

chassis::loc::LocEKF::input_buffer_

                    Deque<Input, InputBufferCapacity> chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::input_buffer_
                  

尚未推进进 EKF 的输入样本队列

Localization/EKF/LocEKF.hpp:245

chassis::loc::LocEKF::lidar_enabled_

                    bool chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::lidar_enabled_
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:224

chassis::loc::LocEKF::lock_

                    AtomicFlagLock chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::lock_
                  

雷达回放时用于阻止并发 updateEKF()

Localization/EKF/LocEKF.hpp:249

chassis::loc::LocEKF::pos_ekf_

                    PositionEKF chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::pos_ekf_
                  

真正执行滤波计算的内部对象

Localization/EKF/LocEKF.hpp:221

chassis::loc::LocEKF::posture_

                    struct chassis::loc::LocEKF::@145332172176301216031344167226201262207172340035 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::posture_[2] [2]
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:436

chassis::loc::LocEKF::state_buffer_

                    Deque<StatePoint, StateBufferCapacity> chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::state_buffer_
                  

历史状态,用于处理晚到观测回放

Localization/EKF/LocEKF.hpp:244

chassis::loc::LocEKF::velocity_

                    struct chassis::loc::LocEKF::@173032060166225015142253032031131170225127244036 chassis::loc::LocEKF< StateBufferCapacity, InputBufferCapacity >::velocity_[2] [2]
                  

上游未提供说明。

Localization/EKF/LocEKF.hpp:442

宏定义

1

文件

1

Localization/EKF/LocEKF.hpp

基于扩展卡尔曼滤波的底盘定位后端。 syhanjin 2026-03-11 使用 fastlio2(10Hz) + encoder(1kHz) + HWT101CT(yaw, 1kHz) 融合定位

Localization/EKF/LocEKF.hpp