Commit 4cfe2565 authored by Wenxi XU's avatar Wenxi XU
Browse files

添加IMU实例

parent 1cdfcb84
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)
set(CMAKE_CXX_STANDARD 17)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(motor)

FILE(GLOB app_sources src/*.c)

include_directories(${ZEPHYR_BASE}/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/dts)
target_sources(app PRIVATE ${app_sources})
target_include_directories(app PRIVATE ${ZEPHYR_BASE}/include)
target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/dts)
+61 −0
Original line number Diff line number Diff line
.. zephyr:code-sample:: imu-quaternion-ekf
   :name: IMU四元数扩展卡尔曼滤波器示例

   使用四元数EKF算法处理IMU传感器数据并估计姿态角度。

概述
****

这个示例应用演示了如何使用ARES框架中的四元数扩展卡尔曼滤波器(Quaternion EKF)来处理IMU传感器数据。该示例集成了BMI08x系列的加速度计和陀螺仪,通过Hongxi Wong的QEKF融合算法实现精确的姿态估计。

传感器配置
==========

该示例使用以下传感器:

* **BMI08x加速度计**: 测量线性加速度,用于重力方向估计
* **BMI08x陀螺仪**: 测量角速度,提供高频率姿态更新

传感器通过SPI接口连接,支持高频率数据采集(最高2000Hz)。

硬件要求
********

* RoboMaster Board C (STM32F407)
* DM MC02开发板

构建和运行
**********

以RoboMaster Board C为例的构建命令:

`west build -b robomaster_board_c samples/IMU`

配置选项
========

主要的Kconfig配置选项:

* ``CONFIG_ARES=y`` - 启用ARES框架
* ``CONFIG_MAHONY_LIB=y`` - 启用Mahony算法库
* ``CONFIG_AUTO_PROBE_GYRO_BIAS=y`` - 启用陀螺仪零偏自动估计
* ``CONFIG_CMSIS_DSP=y`` - 启用CMSIS DSP库用于矩阵运算
* ``CONFIG_PLOTTER=y`` - 启用数据绘图功能

示例输出
========

控制台输出示例:

.. code-block:: console

   *** Booting Zephyr OS build ***
   [00:00:01.000,000] <inf> main: q: 1.000000, 0.000000, 0.000000, 0.000000
   [00:00:01.200,000] <inf> main: Yaw: 0.123456, Pitch: 0.654321, Roll: 0.987654
   [00:00:01.400,000] <inf> main: q: 0.999123, 0.001234, 0.005678, 0.009876
   [00:00:01.600,000] <inf> main: Yaw: 1.234567, Pitch: 0.765432, Roll: 1.098765

输出数据说明:

* **q**: 四元数分量 [q0, q1, q2, q3],表示当前姿态
* **Yaw/Pitch/Roll**: 欧拉角(度),分别表示偏航角、俯仰角、横滚角
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
/ {
};
 No newline at end of file
+12 −0
Original line number Diff line number Diff line
CONFIG_ARES=y
CONFIG_EKF_LIB=y

CONFIG_CMSIS_DSP=y
CONFIG_CMSIS_DSP_MATRIX=y
CONFIG_CMSIS_DSP_CONTROLLER=y
CONFIG_CMSIS_DSP_FASTMATH=y

CONFIG_PLOTTER=y
CONFIG_ARESPLOT_FREQ=500

CONFIG_CHASSIS=n
 No newline at end of file
+17 −0
Original line number Diff line number Diff line
sample:
  name: IMU四元数EKF姿态估计示例
  description: 使用ARES框架的四元数扩展卡尔曼滤波器处理IMU传感器数据并估计姿态角度
tests:
  sample.ares.imu.quaternion_ekf:
    tags: sensor imu ekf ares
    depends_on: spi sensor
    filter: dt_nodelabel_enabled("bmi08x_accel") and dt_nodelabel_enabled("bmi08x_gyro")
    integration_platforms:
      - robomaster_board_c
      - dm_mc02
    harness: console
    harness_config:
      type: multi_line
      regex:
        - "q: [0-9.-]+, [0-9.-]+, [0-9.-]+, [0-9.-]+"
        - "Yaw: [0-9.-]+, Pitch: [0-9.-]+, Roll: [0-9.-]+"
 No newline at end of file
Loading