Funpack3-3活动-基于 X-NUCLEO-IKS4A1的位姿感知器开发
该项目使用了X-NUCLEO-IKS4A1,实现了位姿感知器相关功能的设计,它的主要功能为:感知物体位置、姿态,用于平衡控制等相关任务。
标签
位姿感知器
“Funpack3-3”
“X-NUCLEO-IKS4A1”
小屁孩06
更新2024-07-08
40

Funpack3-3活动-基于 X-NUCLEO-IKS4A1的位姿感知器开发

1. 项目简介

项目背景


在物联网(IoT)和智能设备迅猛发展的当下,对于高性能、多功能的传感器解决方案的需求日益迫切。STMicroelectronics最新推出的X-NUCLEO-IKS4A1传感器扩展板,专为STM32 Nucleo系列微控制器设计,提供了一个全面的动作和环境监测平台。这款扩展板集成了多种MEMS传感器,包括3D加速度计、3D陀螺仪、3D磁力计、气压计、温湿度传感器以及超低功耗的温度传感器,使其在动作检测、环境监测等应用场景中表现出色,并且这类传感器均有广泛地应用于航空航天、无人机、自主导航等领域。

本项目是通过学习使用X-NUCLEO-IKS4A1传感器开发板,学习、了解使用加速度计、3D陀螺仪、3D磁力计等空间传感器的使用,学习验证LSM6DSO16IS,LIS2MDL,LIS2DUXS12,LPS22DF,SHT40AD1B,STTS22H等传感器相关功能。

本项目的核心目标是实现以下功能:

  • 利用IMU、磁场、气压传感器计算设备的空间姿态。
  • 通过算法实现相对海拔高度的测量。
  • 将传感器数据传输至电脑进行进一步分析与演示。


2. 硬件设备介绍

X-NUCLEO-IKS4A1运动MEMS和环境传感器扩展板

X-NUCLEO-IKS4A1是由STMicroelectronics推出的用于搭配STM32 Nucleo的运动MEMS和环境传感器扩展板,提供了在动作检测、环境监测等IoT领域的各种传感器的参考解决方案。包括X-NUCLEO-IQS4A1主板(搭载运动MEMS和环境传感器)和可拆卸的STEVAL-MKE001A附加板(搭载Qvar滑动电极),这款扩展板具有高度的集成性和兼容性,提供了在动作检测、环境监测等IoT领域的各种传感器解决方案。

X-NUCLEO-IKS4A1集成了LSM6DSO16IS和LSM6DSV16X MEMS 3轴加速度和3轴角速度传感器、LIS2MDL三轴磁力计、LIS2DUXS12三轴加速计、LPS22DF MEMS压力传感器、STTS22H温度传感器以及SHT40AD1B湿度和温度传感器。在一个紧凑的空间内提供了加速度、磁力、压力和温度等多种测量维度。特别地,该板卡还提供了Qvar触摸/滑动电极,使得用户能够开发高度互动和响应式的设计。

板卡特性

  • LSM6DSO16IS:MEMS 3D加速度计 (±2/±4/±8/±16 g) + 3D陀螺仪(±125/±250/±500/±1000/±2000 dps) 与ISPU(智能处理单元)
  • LIS2MDL:MEMS 3D磁力计 (±50 gauss)
  • LIS2DUXS12:超低功耗MEMS 3轴加速度计 (±2/±4/±8/±16 g),具有Qvar、AI,以及抗混叠功能
  • LPS22DF:低功率和高精度MEMS压力传感器,260-1260 hPa绝对数字输出气压计
  • SHT40AD1B
  • STTS22H:低电压,超低功耗,0.5°C精度的温度传感器(–40 °C到+125 °C)
  • LSM6DSV16X:MEMS 3D加速度计 (±2/±4/±8/±16 g) + 3D陀螺仪 (±125/±250/±500/±1000/±2000/±4000 dps),内嵌传感器融合、AI、Qvar
  • DIL 24引脚插座,可用于额外的MEMS适配器和其他传感器
  • 配备Qvar触摸/滑动电极
  • 支持LSM6DSO和LSM6DSV16X的I²C传感器集线器功能
  • 兼容MIPI I3C®,支持与LIS2DUXS12、LSM6DSV16X和LPS22DF通信

NUCLEO-G0B1RE 板简介 :

性价比超高的NUCLEO-G0B1RE板,满足开发者对任意STM32 MCU新设计想法的尝试并可快速创建验证原型。该系列的开发板支持Arduino与ST Morpho扩展接口,方便开发者进行快速原型制作和应用测试。集成的ST-LINK调试器使得编程和调试过程简便快捷。为了帮助开发者最大化利用这些开发板,STM提供了广泛的软件库、文档资源和社区支持。


3. 项目方案

流程描述:

项目方案采用STM32 Nucleo的ST Morpho扩展接口与X-NUCLEO-IKS4A1运动MEMS和环境传感器扩展板连接,在STM32G0 MCU中进行板卡初始化和相关接口初始化,通过运动传感器数据采集时使用外部中断触发读取数据,并不断发送给PC端进行数据分析处理,PC客户端得到数据后对加速度数据与磁力计等数据进行存储与滤波,计算出相关姿态使用AITViewer进行显示更新。项目框架如下图所示:

系统及流程框图:

4. 相关功能实现

4.1 开发环境准备

STM32 CubeMx安装

STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。 

安装CubeMx一共需要三个

  • JRE (Java Runtime Environment) Java运行环境 运行JAVA程序所必须的环境的集合

由于 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用, 记得选择64位的安装
官网:  下载地址

  • STM32CubeMX 在官网下载需要注册下ST官网账号即可正载安装: 官网:www.st.com/stm32cubemx

STM32CubeIDE安装

STM32CubeIDE 是一款多功能的多操作系统开发工具,是 STM32Cube 软件生态系统的一部分。同是也是一个高级 C / C++ 开发平台,具有基于 STM32 微控制器和微处理器的外设配置、代码生成、代码编译和代码调试等多种功能。

官网: 下载地址


4.2 客户端姿态可视化aitviewer安装

下载anaconda环境管理器
Conda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 Conda 适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。
Anaconda是官方网站:地址

使用 windows的anaconda prompt命令行提示符创建新的python运行环境并激活使用,同时再安装使用到软件包:

conda create -n STM32G0 python=3.8
conda activate STM32G0
pip install aitviewer
pip install trimesh

4.3 X-NUCLEO-IKS4A1运动传感器扩展板驱动

  • X-NUCLEO-IKS4A1的各个传感器均挂载在I2C总线上,通过CN5、CN6、CN8、CN9与NUCLEO-G0B1RE MCU板卡进行连接:

  • 使用CubeMX生成工程,安装传感器和运动算法软件扩展包X-CUBE-MEMS1,首先打开STM32CubeMX软件,在右侧选择install/remove,进入到embedded software packages manager界面 选择X-CUBE-MEMS1进行安装,

  • 通过STM32 CUBMX 选择NUCLEO-G0B1RE开发板创新工程,将PB8、PB9端口分别设置为I2C1SCL和I2C1SDA,并将PC13修改为EXTI13,I2C1开启快速模式,从顶部选择Select Components进入到Packs界面找到X-CUBE-MEMS1。选择Application为IKS4A1DataLogTerminal,并将Board Externsion IKS4A1选中。最后点击OK退出。

  • 在Middleware and Software Packs中我们选中X-CUBE-MEMS1,并将中间的两个选项都选上。之后再底部的Platform Settings中我们对相关的BSP管脚进行配置,如下图所示:

  • 选择工程名称以及存储位置,并将IDE选择为STM32CubeIDE。最后点击右上方的GENERATE CODE即可完成工程生成。


4.4 位姿数据滤波与计算

  • 使用磁力计解算偏航角:

地磁场是一个矢量,对于一个固定的地点来说,这个矢量可以被分解为两个与当地水平面平行的分量和一个与当地水平面垂直的分量。

如果保持电子罗盘和当地的水平面平行,那么罗盘中磁力计的三个轴就和这三个分量对应起来,即罗盘水平状态下,测量的三个轴数据就是机体系下的地磁分量。

对水平方向的两个分量来说,他们的矢量和总是指向磁北的,所以我们只需要水平的磁力分量即可算出传感器x轴与磁北的夹角:

如果我们认为磁北是0度,那我们就可以得到当前的偏航角,因此,偏航角可以用如下公式进行计算得到,同时计算中还要在使用之前统计offset原点偏移量:

  • 使用加速度计解算俯仰角与滚转角:

当加速度计静止时,它测量到的加速度主要是重力加速度的分量。假设加速度计的x、y和z三个方向的加速度分别为 (ax), (ay) 和 (a_z),我们可以通过这些值计算出设备在x和y轴上的倾角。

倾角的定义

倾角是指设备相对于水平面的倾斜角度。我们关心的主要是设备绕x轴(Pitch)和y轴(Roll)的旋转角度。倾角的计算基于如下公式:

4.5 使用气压计测量海拔高度

  • 将气压(单位为hPa)转换为海拔高度涉及使用国际标准大气模型中的公式。这些公式假设海平面标准大气压为1013.25 hPa和温度梯度为6.5°C/km。

def pressure_to_altitude(pressure_hpa):
# 海平面标准大气压
P0 = 1013.25
# 使用公式计算海拔高度
altitude = (1 - (pressure_hpa / P0) ** 0.190284) * 44307.7
return altitude

5. 功能演示

位姿是动态显示,由于自己搭建的客户端实时显示平台,调试比较耗时,位姿显示只是用了立文体进行姿态显示:

  • 左倾

  • 右倾

  • 前倾

  • 后倾

  • 气压计测量海拔高度

6. 活动总结与未来计划建议

首先, 感谢硬禾学堂联合ST公司发起Funpack第三季第三期 “玩成功就全额退”活动,在本次活动中,X-NUCLEO-IKS4A1与STM32 NUCLEO-64和NUCLEO-144系列开发板的完美结合,为参与者提供了一个实践和创新的平台。通过动手实践,参与者不仅能够深入理解传感器的工作原理和数据处理技术,还能够培养解决实际问题的能力,为未来在智能设备领域的研究和开发打下坚实的基础。

由于这次项目时间内,个人工作比较多,未能对滤波算法进行更好地测试实验改进,python客户端侧计算有少许时延,完成手上工作,会对显示和滤波算法进行较详细的实验改进,MCU侧进行相应的计算更新。

希望硬禾学堂和DigiKey越办越好。


7. 参考:

  1. https://zhuanlan.zhihu.com/p/671601632
  2. https://chatgpt.com/
  3. https://c.miaowlabs.com/B07.html
  4. https://zhuanlan.zhihu.com/p/701861534
  5. https://zhuanlan.zhihu.com/p/61765669
  6. https://zhuanlan.zhihu.com/p/680964293


附件下载
TerminalMES.zip
MCU端代码
STM32_HOSTCODE.zip
主机端姿态解析及显示代码
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号