六轴加速度计和三轴陀螺仪所组成的九轴姿态传感器是无人机中必备重要器件。本微信号之前已经对加速度计和陀螺仪的物理工作原理探讨过无数次了,在这里也不再絮叨了。目前很多开发板上也会安装这种传感器,从而获得开发板实时姿态,可用于无人机和体感游戏等应用的开发,本文以genuino101中rawimudataserial的例子进行分析,从代码角度来和大家探讨一下姿态参数的获得。
1.genuino101中使用的是usb虚拟串口,所以先进行串口初始化,设置波特率。
什么是usb虚拟串口呢,字面上好像很难的样子,可能很多新手都不知道,但是不用担心,usb虚拟串口就是把usb当作串口的串口来使用,在nano,mega板上都有usb转ttl的芯片,连接到电脑后,电脑就识别出了端口号。但是101上并未使用usb转ttl的芯片,101有usb接口,而usb可以作为几种使用类型,像hid鼠标键盘,大容量存储,摄像头等,其中有一种类型叫虚拟串口,使用的方法跟普通的串口是一样的。虚拟串口属于usb cdc,
也叫vcp。
2.while (!serial); 这里是判断串口是否完成,为什么这样使用呢?看看参考资料。
意思就是判断usb cdc串口是否已经打开了,如果已经打开,刚返回true,否则是false
3.开始进行imu的初始化,这里的imu包含在intel curie模块里面。输出
initializing imu device...
初始化的函数是: curieimu.initialize();
看看里面做了什么
可以看到,首先是spi的初始化,spi连接的是型号为bmi160的六轴加速度计和陀螺仪传感器。具体是如何通过寄存器的读取加速度值的我们先不去研究,curieimuclass里面已经做好了这些操作,我们只要知道使用,curieimuclass就能得到六轴的原始数据就行了。那为什么要打开看看里面做了什么呢,其实我也就是好奇,想看看。
4.这里字面上的意思是测试curieimu是否连接成功,我们打开curieimu.testconnection()看看里面是啥。
其实就是通过spi读取bmi160寄存器到的deviceid,如果读到了,说明连接成功。
这里是读取寄存器里偏移量的值。这几个是已经默认在寄存器里了。
5.这里是进行陀螺仪校准,校准函数是 curieimu.autocalibrategyrooffset();有点奇怪,为什么陀螺仪有三个轴,但是只用了一个校准呢?我们打开这个函数看一下。
看了一下注释,这个函数就是对3个轴进行校准。那就不管它了,具体那几个寄存器是什么也不用去理会。
6.这里对加速度计进行校准。用了三个校准函数,xy是0,z的参数是1,为什么呢。是不是因为z轴自身就收到重力呢?保留疑问。
7.校准好了之后,再读取一次偏移量。
8.这里字面上的意思是使能偏移量校准,也就是说,上面只是求出偏移量的值,而这里要进行使能。
9.接下来的便是loop()循环了。getmotion6()函数直接读取六个轴的值到变量。
10.接下来便是打印数据到串口了。
11.把程序烧写的板子上,打开串口,便能看到数据啦。
12.这里做一点小改动。把打印到串口的数据改成如下:
选择tools->serial plotter
oh my god,好强大的功能,实时画六轴波形图啊。
最后小编向大家提一个问题,你们对于无人机的应用而言,多大的姿态数据刷新率最为合适?
美高森美发布带有RTG4 PROTO FPGA的全新开发工具套件 为航天设计人员提供综合评测和设计平台
中小企业“机器换人”面临资金不足,专业人才缺乏等问题
基于ARM的空间光通信APT控制系统设计
超声波测距原理及简介
对比传统自建数据库,华为云数据库 RDS for MySQL优势明显
代码分析:九轴姿态传感器是无人机中必备重要器件
走进鑫信腾聆听3C电子测试智能装备行业头部企业的规划蓝图
大众标准里机器人程序中P值的设置存在那里?
中国移动采购系留无人机高空基站,将用于应急通信
复购薄厚膜集成电路 中小型集成电路多脚嵌入效果赞
DS18B20驱动编写–杂项设备框架注册
Kotlin的语法糖解析
vivoX9与荣耀v9评测对比,大屏旗舰你爱谁?
BEV人工智能transformer
高可靠性振荡子满足车载设备的苛刻要求
域控制器在集成层面和软件层面需要满足哪些条件?
零知识证明的前世今生及原理详细解析
智能法律援助机器人助力完善法律咨询服务
小米正式发布AMAZFIT米动手环2 主要在前代的基础上增加了对NFC的支持
Waymo的技术是自动驾驶商业化落地道路上的重要里程碑之一