引言
轮式遥控机器人已经在地震、火灾等一些危险的室内区域进行救援和探测,或执行反恐任务。由于在这些特殊的环境下存在诸多未知因素,且室内无GPS信号,人们不得不依靠先进的科学技术和仪器来获取遥控机器人小车的导航信息。但是,目前轮式运动小车主要采用的导航传感方式有视觉、光电、超声、里程计等,比较容易被外界环境干扰,不能满足广大市场的需求。
但是惯性导航装备安装在运载体内,工作时不依赖于外界信息,也不向外界辐射能量,不容易遭到干扰,是一种自立式导航系统,优于常见的导航传感方式。并且近年来MEMS(微机电系统)结构的惯性传感器随半导体技术的进步得到了迅速发展,低成本而高精度的期望得到了实现。MEMS惯性传感器组成的惯性导航装置结合轮式小车的里程计,能够产生导航和定位信息,减少对外部环境的依赖,实现在外部环境条件(例如光照、墙壁材质)未知情况下的导航。
由于是在室内区域进行勘测搜索,小车的运行特点与飞机、船、车不同,它的运动轨迹变化较快,且运动时存在一定的振动,因此常用的卡尔曼滤波算法需要改进才能应用。惯性传感器采集数据量大,且进行惯性导航时需要大量的浮点运算,因此本项目采用了具有强大数字信号处理功能的DSP芯片TMS320F28335和PC控制终端,实现惯性传感器的数据采集、时序逻辑控制、与驱动系统通信和地图显示功能,具有体积小、成本低、功耗低等优点。
1 系统体系架构
本文的目标是研制一个轮式小车惯性导航系统,能够通过WiFi实现PC终端或手持终端控制轮式小车行动以及小车所采集数据的传输。
搭建如图1所示的系统,TI公司的浮点DSP芯片TMS320F28335采集各MEMS惯性传感器的信号并处理,处理结果通过WiFi输送到PC终端;PC终端负责定位结果显示和地图显示,并向小车驱动系统发送控制命令,同时接收驱动系统反馈的里程计信息。

图1 系统总体架构
2 硬件设计及详细实现
硬件设计上,主要分为核心板和驱动板。核心板包括DSP最小系统、JTAG下载口设计、电源供给电路、MEMS传感器和WiFi模块等。而驱动板主要设计的内容是直流大电机的驱动模块。
2.1 核心板设计
TMS320F28335工作时需要的电压不同:内核电压1.9 V,I/O供电电压3.3 V,所以电源部分利用两路输出电源器件TPS767D318来实现,如图2所示。同时根据仿真实验和实际焊接电路的测试,电源模块输出端最好使用电容值不小于10 μF的保护电容,且不能使用贴片电容,否则工作不稳定。

图2 DSP电源设计
在电源设计中,考虑到TPS767D318芯片可以产生复位信号,所以在核心板上并没有另外为DSP设计复位电路。
图3为JTAG下载电路,按照仿真器的通信引脚选择14脚的仿真接口,同时要注意EMU0和EMUl信号必须通过上拉电阻连接至电源,其中上拉电阻为10 kΩ。

图3 JTAG下载电路
2.2 小车驱动板设计
在本装置中,采用BTS7960作为直流电机驱动芯片。BTS7960是集成的大电流半桥驱动,其内部包含了一片NMOS、一片PMOS和一片半桥门集驱动,在IOUT = 9 A,VS= 13.5 V,Tj = 25 ℃时,其内阻抗为17 mΩ。装置采用两个直流大电机,图4为驱动单个电机前后转向的电路图。

图4 驱动模块电路设计
电机驱动中,需要注意一个细节,就是电机在转动过程中有可能会产生反向的电动势,使电流一瞬间过大,导致单片机复位甚至有可能烧坏芯片。因此在设计过程中,可以考虑在单片机PWM输入到电机驱动接口的地方添加光耦器件或者二极管隔离。如图5所示,驱动板选择了TLP5214光耦器件设计隔离电路,减小了电压的干扰,简化电路的设计,同时也把4路PWM的I/O电平从3.3 V上拉到5 V。

图5 TLP5214隔离电路
3 软件设计及具体实现
在软件程序设计上,主要应用9自由度惯性导航传感器(ITG3200+ADXL345+HMC5883L),结合DSP和卡尔曼滤波算法,实现较高精度的轮式小车导航和定位。
3.1 传感器程序设计
9自由度惯性导航传感器在许多领域都得到了实际应用,如无人机、救灾机器人等。它包括ITG3200三轴陀螺仪、ADXL345三轴加速度传感器和HMC5883L三轴磁感应传感器,可以得到角速度、加速度以及角度的实时数值。
ITG3200是MEMS三轴陀螺仪,可以测量小车的旋转角速度,同时也可以通过积分把角速度转换为小车的倾角。ITG3200的初始化程序略——编者注。
unsigned char Init_ITG3200(void)
{
unsigned char Return1,Return2,Return3,Return4;
unsigned char Data;
Data = 0x00;
Return1 = IIC_WriteData(0xD0, 0x3E, &Data, 1);
Data = 0x07;
Return2 = IIC_WriteData(0xD0, 0x15, &Data, 1);
Data = 0x1E;
Return3 = IIC_WriteData(0xD0, 0x16, &Data, 1);
Data = 0x00;
Return4 = IIC_WriteData(0xD0, 0x17, &Data, 1);
if(Return1 && Return2 && Return3 && Return4)
return 1;
else
return 0;
}
其具体功能实现可以在主程序中通过SCI读取其值。所读取的值为角速度,不会受到小车运动的影响,因此信号噪声很小,同时可以由它积分得到小车倾斜角度,从而平滑信号使其更加稳定。
由于装置在不同的室内区域进行勘测搜索,再加上未知的环境,所以角速度信号可能存在一定的偏差,导致积分后的角度出现大的误差,无法得到实际的数值。为了消除由于偏差而产生的累积误差,装置上加上ADXL345三轴加速度传感器对于获得的角度信息进行校正。ADXL345初始化程序略——编者注。
unsigned char Init_ADXL345(void)
{
unsigned char Return1,Return2,Return3,Return4;
unsigned char Data;
Data = 0x0b;
byReturn1 = IIC_WriteData(0xA6, 0x31, &Data, 1);
Data = 0x08;
Return2 = IIC_WriteData(0xA6, 0x2c, &Data, 1);
Data = 0x08;
Return3 = IIC_WriteData(0xA6, 0x2d, &Data, 1);
Data = 0x80;
Return4 = IIC_WriteData(0xA6, 0x2e, &Data, 1);
Data = 0x00;
Return4 = IIC_WriteData(0xA6, 0x1e, &Data, 1);
Data = 0x00;
Return4 = IIC_WriteData(0xA6, 0x1f, &Data, 1);
Data = 0x05;
Return4 = IIC_WriteData(0xA6, 0x20, &Data, 1);
if(Return1&&Return2&&Return3&&Return4)
return 1;
else
return 0;
}
通过ADXL345所得到的角度,与陀螺仪积分后的角度进行对比,然后使用它们的偏差改变陀螺仪的输出,从而使积分后的角度慢慢校正到实际值,如图6所示。

图6 通过加速度传感器校正角度
HMC5883L三轴磁感应传感器的作用相当于罗盘,在水平情况下,无需借助其他传感器便可以计算出航向。其初始化程序略——编者注。
unsigned char Init_HMC5883(void)
{
unsigned char Return1;
unsigned char Data;
// Bit4 Bit3等于11时,选择2000度/秒的量程
Data = 0x00;
Return1 = IIC_WriteData(0x3C, 0x02, &Data, 1);
if(Return1)
return 1;
else
return 0;
}
由于装置是要在不同环境下进行工作的,所以其并不能保持时刻是水平的,就需要加速度传感器来纠正由于倾斜引起的误差。
3.2 卡尔曼滤波算法应用
由于装置在室内区域进行勘测搜索,它的运动变化快,轨迹不定,而且要适用于不同的环境,因此常用的卡尔曼滤波算法需要进一步改进才能应用。卡尔曼过滤算法是用前一个估计值和最近一个观察数据,来估计信号的当前值,它是用状态方程和递推的方法进行估计,解也是以估计值形式给出的。其运用在加速度器和陀螺仪上的卡尔曼滤波程序略——编者注。
// float gyro_m:陀螺仪测得的量(角速度)
//float incAngle:加速度器测得的角度值
#define dt0.0015//卡尔曼滤波采样频率
#define R_angle0.71 //测量噪声的协方差(即是测量偏差)
#define Q_angle0.0001//过程噪声的协方差
#define Q_gyro0.0003 //过程噪声的协方差过程噪声协方差为一个一行两列矩阵
float kalmanUpdate(const float gyro_m,const float incAngle
{
float K0;//含有卡尔曼增益的另外一个函数,用于计算最优估计值
float K1;//含有卡尔曼增益的函数,用于计算最优估计值的偏差
float Y0;
float Y1;
float Rate;//去除偏差后的角速度
float Pdot[4];//过程协方差矩阵的微分矩阵
float angle_err;//角度偏量
float E;//计算的过程量
static float angle = 0;//下时刻最优估计值角度
static float q_bias = 0;//陀螺仪的偏差
static float n[2][2] = {{ 1, 0 }, { 0, 1 }};//过程协方差矩阵
Rate = gyro_m - q_bias;
//计算过程协方差矩阵的微分矩阵
Pdot[0] = Q_angle - P[0][1] - P[1][0];
Pdot[1] = - n[1][1];
Pdot[2] = - n[1][1];
Pdot[3] = Q_gyro;
angle += Rate * dt; //角速度积分得出角度
n[0][0] += Pdot[0] * dt; //计算协方差矩阵
n[0][1] += Pdot[1] * dt;
n[1][0] += Pdot[2] * dt;
n[1][1] += Pdot[3] * dt;
angle_err = incAngle - angle; //计算角度偏差
E = R_angle + P[0][0];
K0 = n[0][0] / E; //计算卡尔曼增益
K1 = n[1][0] / E;
Y0 = n[0][0];
Y1 = n[0][1];
n[0][0] -= K0 * Y0; //跟新协方差矩阵
n[0][1] -= K0 * Y1;
n[1][0] -= K1 * Y0;
n[1][1] -= K1 * Y1;
angle += K0 * angle_err; //给出最优估计值
q_bias += K1 * angle_err;//跟新最优估计值偏差
return angle;
}
通过滤波时数据平滑将加速度输出电压附近产生的波动噪声滤掉。
4 实验测试与结果分析
在装置硬件和软件搭建完成后,通过设计好的PC端软件和平板电脑安卓软件,搜索到WiFi,自动连入局域网。在实验室测试环境下,小车可以自由行驶并反馈实时的数据进行测试比较。
4.1 航向角数据测试
HMC5883L采集到的航向角存在随机波动性,因此可以对其进行多次采集平均值滤波,以提高系统输出的数据稳定性。图7为一定时间内滤波前和滤波后航向角的数据。

图7 航行角数据滤波前和滤波后对比图
由图7的数据对比可以得知,航向所采集到的数据进行平均值采样滤波优化后误差大大减小,比原有数据稳定许多,说明滤波效果明显。
4.2 角度数据测试
可以使用ADXL345和ITG3200所得的数据,转换为横滚角和俯仰角,再结合卡尔曼算法对数据进行滤波以达到更准确的实验结果。表1为滤波前角度的数据及误差,表2为滤波后角度的数据及误差。
表1 滤波前角度的数据及误差

表2滤波后角度的数据及误差

由表1和表2的测试数据可知,经过滤波后,最大的误差从3.80°降到-0.40°,而且大体上都在1°内,大大提高了角度的输出精度。
结语
本文所设计的轮式小车室内惯性导航装置实验结果表明,能够实时监测到移动机器人的位置信息,并能对其实现有效控制。同时因其低成本、高精度、易操作的特点将进一步应用于例如巡逻机器人、救援机器人等专业领域,有着良好的创业前景、应用前景和市场前景。