大疆C板利用BMI088传感器进行姿态解算.pdfVIP

大疆C板利用BMI088传感器进行姿态解算.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
现在要做的就是在读取BMI088传感器数据的基础上,对得到的数据进行计算得到四元数,再对四元 数计算得到 欧拉角 。这两个计算已经有轮子可用了,分别是MahonyHARSupdateIMU()函数和 get_angle()函数,详细情况请参考《RoboMaster开发板C型嵌入式软件教程文档》中18.4.2。 《RoboMaster 开发板 C型嵌入式软件教程文档》中第18章用到了SPI+DMA来读取传感器数据, 但是我不会DMA,所以只用了SPI。官方教程里还用了Freertos来实现1ms为周期读取传感器数据, 但是我不会Freertos,但我会用TIM ,所以我用了TIM1来实现1ms为周期。 硬件环境 Robomaster 开发板C型 STLink V2 XT30电源 CubeMX配置 请参考实物教程——大疆C板读取BMI088传感器数据里的这个配置,除此之外,我们还要配置 TIM1 ,请参考《RoboMaster开发板C型嵌入式软件 教程文档》中3.4.1 ,官方文档里边分频值 16799重载值4999实现了2Hz ,我们需要1000Hz,所以分频值167重载值999。 程序代码 代码看起来比较长,不要害怕,大部分代码都是实物教程——大疆C板读取BMI088传感器数据里 的,这里就是把加速度计的程序代码和陀螺仪的程序代码写在了一起,把while(1)循环里的代码放到 了定时器回调函数HAL_TIM_PeriodElapsedCallback()里,最后的MahonyAHRSupdateIMU()函数和 get_angle()函数官方文档里讲的有。 #define BMI088_ACCEL_3G_SEN 0.0008974358974f //这个数字我也不知道哪来的 #define BMI088_GYRO_2000_SEN 0.00106526443603169529841533860381f //这个数字 float BMI088_ACCEL_SEN = BMI088_ACCEL_3G_SEN; float BMI088_GYRO_SEN = BMI088_GYRO_2000_SEN; float accelerometer[3]; float gyro[3]; float quat[4] = {1.0f, 0.0f, 0.0f, 0.0f}; fl t INS l [3] {0 0f 0 0f 0 0f} float INS_angle[3] = {0.0f, 0.0f, 0.0f}; uint8_t i = 0; uint8_t buf[8]={0,0,0,0,0,0,0,0}; uint8_t pTxData; uint8_t pRxData; int main(void) { //这9行代码,向地址0x7E处写入0xB6值,加速度计软件复位,使加速度计各个寄存器恢复为默认值 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //PA4置0,片选加速 pTxData = (0x7E 0x7F); //Bit #0和Bit #1-7,Bit #0是0,表示写 HAL_SPI_Transmit(hspi1, pTxData, 1, 1000); while (HAL_SPI_GetState(hspi1) HAL_SPI_STATE_BUSY_TX); //等待SPI发送完成 pTxData = 0xB6; //Bit #8-15 HAL_SPI_Transmit(hspi1, pTxData, 1, 1000); while (HAL_SPI_GetState(hspi1) HAL_SPI_STATE_BUSY_TX); //等待SPI发送完成 HAL_Delay(1); //延时1ms HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //PA4置1,取消片选加 //加速度计复位后默认是暂停模式,这9行代码,向地址0x7D处写入0x04值,使加速度计进入正常模 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_

文档评论(0)

180****7982 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档