MIMU及载体空间姿态演示软件设计+文献综述(13)_毕业论文

毕业论文移动版

毕业论文 > 机械论文 >

MIMU及载体空间姿态演示软件设计+文献综述(13)


给Delete From Array将总帧之后的不完整帧信息传给While循环的移位寄存器,
等待与下一次读到的数组结合。把完整的帧数据传给 For循环的Delete From
Array函数,将第一个帧取出,第二个帧传给移位寄存器。判断第一个帧帧头是
否为AA,帧尾是否为 BB(187),如果是则进行数据解算。否则进行下一个帧的
校验。这里要说明一下,Search 1D Array搜索 AA时,如果没有AA,反馈的是
-1,如果这时候恰巧串口读取的字节数是 13,那么会形成一个有 14字节的假象,
但是由于For循环中有帧校验的代码,所以这个帧会被舍弃,并不会产生错的信
息。
3.3.1.3  进制转换
  这部分程序要完成的任务是把十优尔进制数据转换成十进制数据。
  首先要了解浮点数的定义:浮点数,这里指单精度浮点数,是一个 32位的
数值,占四个字节。第一位是符号位,0表示正数,1表示复数。第 2到9位是
指数位,最后23位是数值位。   本科毕业设计说明书(论文)  第27 页  共37 页
 
图3.4 Type Cast函数
 
图 3.5 进制转换代码
  这里用的是 Type Cast 函数。如图3.4所示,Type Cast 函数有三个端子,x
端子连接想要转化的数据,type端子连接想要转化成为的数据类型,*(type*)
&x 端子输出转化好的数据。如图 3.5所示,从前一个模块得到的数组中取出第
一个完整帧,将其由高到低正确排列之后,输入给 Type Cast,这里是要将四个 8
位无符号数组成的数组转换成一个 32位的单精度浮点数,因此输入的橘黄色 “0”
就表示一个32位的单精度浮点数,与type端子连接。最后将得到的数转换成弧
度,这是因为后面的三文图形函数所用的是弧度而不是角度。For循环的 N接的
是完整帧的个数,因此第一个帧的解算完成之后,进行下一个帧的解算,直到这
次读取的所有完整帧都被解算完为止。
3.3.2  三文姿态显示程序的实现
  这里主要使用的函数有两个,一个是 Load VRML File,用来加载.wrl 格式的
三文模型,另一个是 Rotate Object 函数。如图 3.6,它有优尔个端子,Scene.Object
In端子用来输入模型的路径,Axis 端子输入旋转轴,Angle端子输入所要旋转的
角度,Scene.Object Out 输出模型路径。Error in 和error out 端子用来传递错误信
息。如图3.7,首先通过 Load VRML File函数读取所要加载三文图的路径。用
Scale Object 函数将图形的大小缩放到合适大小。并将三文模型的姿态初始化。
如图3.8,在While 循环中,串口子函数输出的是载体此时的绝对坐标,而后面
Rotate Object 函数需要的是一个相对的变化量。所以子函数输出的数据必须要减  本科毕业设计说明书(论文)  第28 页  共37 页
去上一次While循环时输出的数据,可以通过在 While循环上添加三个移位寄存
器来实现。使用三个 Rotate Object 可实现绕空间直角坐标系三个轴的依次旋转,
从而达到实现空间姿态的目的。最终得到的图形会在 3D Picture控件中显示。
While循环中靠右的部分是用来改变 3D Picture控件中光源的颜色、位置和亮度。   
图3.6   Rotate Object函数  
图3.7 姿态初始化代码  
图3.8 三文姿态显示程序的代码
  最后的操作面板如图 3.9所示,用户可以通过三文模型选择 3D Picture中显
示的三文图形,通过改变光源颜色和位置的数值,设置合适的光源。通过串口选
项选择串口。按stop 按钮可以退出程序。    (责任编辑:qin)