- 5
- 0
- 约3.5千字
- 约 6页
- 2017-01-19 发布于北京
- 举报
浅谈利用传感器参数还原消防车工作臂姿态三维图像.doc
浅谈利用传感器参数还原消防车工作臂姿态三维图像
【摘要】 消防车的安全检测中经常需要伸展至大于30米的规定工作高度,因此经常在室外进行安全检测,该情况下的检测以检验人员目测,主观判断为主,无法提供进一步的数据支持,一方面不尽客观,不符合检验要求,另一方面对检验人员的专业素质要求较高,本文旨在讨论利用Unity3D配合VisualStudio开发能还原消防车工作情况的软硬件系统。
【关键词】 Unity3D 传感器 三维图像 消防车
一、前言
时至今日,三维成像技术早已在工业、科研、教育娱乐等众多领域中广泛应用,在工业和科研中以往许多以波形、图表、参数来显示的现场工作状况早已被替换成直观的三维图像,也使得人们对现场状态的判断也更加准确快速。在消防车安全检测领域中,由于工作状态下的消防车工作高度经常大于30米,很多时候,检测人员只能通过目测来进行检验。从精确度和有效性上讲这样的方法缺陷较大。因此,本文旨在探讨用传感器和Unity3D三维图像引擎开发一个能够实时反应消防车工作臂工作状态的软硬件系统。
二、整体系统说明
系统说明如图1所示。数据采集器采集陀螺仪和激光测距传感器的参数,再通过RS232发送到上位机,上位机软件将收集到的数据加工后送至Unity3D开发的三维显示界面,与此同时将相应的数据信息显示在屏幕上。
2.1硬件部分
加速度计陀螺仪采用市面上常见的MPU6050模块,数据包分为加速度包、角速度包和角度包。用于三维现场还原时,主要用角度包当中的俯仰角数据,用来体现消费车工作臂的抬起角度。
激光传感器采用KAKRU公司的HPS-L1-V系列拉绳传感器。用于三维现场还原时,拉绳传感器用来提供工作臂伸长的长度。返回的数据用4个字节的数据来表示长度。
2.2软件部分
软件分为两大部分,第一部分上位机主体,主要为软件主界面,包括串口循环读取模块,数据处理模块和参数传递模块。此部分在VisualStudio中开发完成。
第二部分为Unity3D三维图像显示控件,主要功能为接受后台的数据处理模块传递过来的参数,还原成现场的情况。此部分在Unity3D开发环境中开发完成。
2.2.1软件主界面
1.串口循环读取模块
功能:由计时器(Timer)为主体,Timer每一次触发,读取串口缓冲区的数据,在解析之前,需要先进行搜索数据包头的操作。
搜索方法主要由依次遍历匹配实现,此次设计采用的硬件中,代表包头的数据内容为“0x55”,则搜索数据包头操作说明即为:将串口缓冲区的数据读取至一个字节数组,对该数组第一位进行判断,若为“0x55”,则程序继续执行,否则对该数组下一个字节的数据进行匹配。
由MPU6050使用说明书可知,找到包头之后,若包头之后的一个字节的数据为“0x53”,则代表该包为角度包,此时数据编号为“4”和“5”的数据(即包头之后第四和第五个字节)即为角度包的高位值和低位值。
该模块主要代码如下(buf为字节数组,用于存储串口数据):
private void timerSerialData_Tick(object sender, EventArgs e)
{serialPort1.Read(buf, 0, 66);
for (m = 0; m 33; m++)
{if ((buf[m] == 0x55) (buf[m + 1] == 0x53))
DataAnalysis();
}}}
2.数据处理模块
功能:该模块主要将串口循环读取模块读取到的数据进行解析,解析出来的数据用于计算Unity3D引擎中需要显示的各个模块的参数。
以一组两节工作臂的消防车为例,在空间坐标中,假定工作臂在空间坐标中的X正方向上抬起、放下,在已知抬起的角度a(即俯仰角)及工作臂伸长的长度L,即可通过简单的三角函数计算出工作臂的第一节臂和第二节臂的中心位置和姿态角度,计算方法在此不在赘述。
相关代码如下:
变量说明:
LA一一Scale为缩放值,即现实中工作臂的长度换算为三维模型时的比例,LA为该缩放值下的工作臂长度。
DataAnalysis();
{a = (Convert.ToInt32(buf[m + 5] 8 | buf[m + 4])) / 32768.0* 3.1415926;
L = Convert.ToInt32((buf[m + 11] 8 | buf[m + 10]),16);}
3.参数传递模块
功能:Unity3D开发的三维模块可以以控件的形式加载,用SendMessage方法来传递参数,此时需要定义一个简
原创力文档

文档评论(0)