机甲大师机器人控制(五):软件单元测试

本文是机甲大师机器人控制的系列博客之一。在软件单元阶段完成后,进行软件单元测试。本文内容与软件架构设计阶段相对应。

系列博客:
机甲大师机器人控制(一):概念与流程
机甲大师机器人控制(二):功能分析
机甲大师机器人控制(三):软件架构设计
机甲大师机器人控制(四):软件单元
机甲大师机器人控制(五):软件单元测试
机甲大师机器人控制(六):集成测试
机甲大师机器人控制(七):购买清单

1 开发阶段

软件单元测试阶段在软件单元阶段之后,对控制算法和硬件接口函数进行测试。一方面,对软件架构设计阶段中的4个功能子系统一一进行模型单元测试;另一方面,在STM32工程中对软件架构设计阶段中的输入输出接口进行硬件接口测试
在这里插入图片描述
由于这部分测试的内容比较多,所以本文只是对不同的功能列举有代表性的测试过程,而不会覆盖到所有分支。

2 模型单元测试

基于模型设计的一个很大的优势在于,不需要等到最终的HIL测试才能开始发现问题,而是在Simulink模型中就可以初步验证控制控制算法,也就是模型单元测试。做模型单元测试时,会给某个子系统一个确定的输入信号,再观察输出信号是否正确。

在汽车软件开发中,需要制定完整的单元测试文档,其中包含测试案例、覆盖度等。本章节就简化一下这个过程,对软件架构设计阶段中提出的子系统进行一个基本的测试即可。测试的顺序是从内层子系统到外层。

测试的时候通过对子系统建立TestHarness,可以不影响原来模型,生成一个专用测试的小模型。下图就是对子系统建立的TestHarness。
在这里插入图片描述

2.1 电机控制子系统测试

对于电机控制子系统,需要测试的是对于4个摇杆输入信号,能否正确地输出4个电机的参数。测试分为基本运动测试和合成运动测试,对应功能分析阶段中的控制方案。
1)基本运动就是4个摇杆中只有一个通道被激活,其余的都没有变化。以LY通道为例,当LY=0时,摇杆拨动到最上方,底盘应该以最大速度前进;当LY=255时,摇杆拨动到最下方,底盘应该以最大速度后退。
在这里插入图片描述
上图中第一个信号是LY输入信号,0–>128–>255;四个电机的参数是1000–>0–>-1000,符合控制逻辑。其余3个基本运动也是类似的测试方法。

2)合成运动的单元测试以对角线为例。例如下图中,LX=255,LY=0,对应电机是FL=1000,BR=1000;
在这里插入图片描述
单元测试结果如下:
在这里插入图片描述
从图中可以看出只有左上电机和右下电机正转。

2.2 舵机控制子系统测试

舵机控制子系统的输入是4个按键信号,分别控制2个舵机的正传和反转。

本节以舵机0为例,对舵机进行单元测试。
在这里插入图片描述
如上图所示,当RL信号为1,RR信号为0时,也就是按下了左按键,舵机位置参数增大;当RL信号为0,RR信号为1时,也就是按下了右按键,舵机位置参数减小。舵机位置参数的上下限是1000~2000,和模型中的限值模块吻合。

2.3 水弹枪控制子系统测试

舵机控制子系统的输入是R1按键信号,控制是否闭合继电器。闭合参数为19500,断开参数为500.
在这里插入图片描述
从测试结果看,当R1信号的值从0阶跃到1时,继电器参数信号从500阶跃到19500。

2.4 按键锁定子系统测试

按键锁定子系统就是最外层的使能子系统,通过MODE信号来锁定按键的效果。测试的方法是在电机控制子系统LY通道测试的基础上,加上MODE输入信号置0或置1,再观察电机输出的效果。
在这里插入图片描述
从图中可以看出,在0.5s的时候MODE从0阶跃到1,LY一直保持为0。观察FL电机的参数,只有在MODE为1的时候,LY才驱动了FL电机。因此锁定按键MODE可以生效。

3 硬件接口测试

软件架构设计阶段中研究了模型的输入输出接口。模型的输入接口是PS2手柄的摇杆、按键所对应的信号,输出接口是电机、舵机函数中所传入的参数值。硬件接口测试过程就是要在STM32工程中测试一下接口变量或者接口函数的功能(此时工程中还不包括模型中的策略),为后面的集成测试做准备。

3.1 PS2手柄接口

购买电机驱动板附带的demo程序中包含PS2的2.4Ghz传输程序以及SPI协议代码。博主又通过一部分手写代码(Manual_Code)二次开发,解析出每个摇杆和按键的信号值,也就是软件架构设计阶段中所描述的VeINPR_uint8_PS2LX,VeINPR_uint8_PS2RU等。

通过下面的main函数,运行PS2初始化函数和手写代码初始化函数,并打印出若干摇杆和按键的信号值。

int main (void)
{
	PS2_Init();
	Manual_Code_initialize();

while(1)
{
	if( WaitTrue(0,20) ) //20ms运行一次
	{
		PS2_Interface();
		printf("VeINPR_uint8_PS2LX = %d,VeINPR_uint8_PS2RU = %d\r\n",VeINPR_uint8_PS2LX,VeINPR_uint8_PS2RU);
	}
}
}

将程序下载到STM32中后,拨动左摇杆,或者按下RU按钮后,串口打印出的数值会随之变动。
将LX缓缓向左拨动,数值就会从128变化到0,如下图。
在这里插入图片描述
按下RU按钮,数值就会从0变化到1,如下图。
在这里插入图片描述
所有其他的摇杆通道或者按键通道都可以通过这种方式来简单测试一下效果,这里就不再赘述。

3.2 电机&舵机控制接口

电机和舵机控制接口已经封装好,分别如下:

函数名描述参数
MotA_Interface(PWM)电机控制函数调速参数,范围-1000~1000
SSenvo(Num,PWM)舵机控制函数位置参数,范围500~2500

这部分没办法通过串口打印测试出来,因为硬件上没有做传感器,所以没有办法反馈转速值或者位置。只要感性的看一下程序运行的时候,电机或者舵机能否转动,能否正常调速或者正反转。

4 总结

软件单元测试这一步应该算是所有步骤中最简单的了,但是也十分重要。由于本系列博客定下的功能需求都比较简单,所以软件单元测试的时候发现的问题比较少。但是在汽车软件开发中,软件单元测试往往会在开发前期就能发现建模时的漏洞,然后可以尽早在模型层面上就修复掉,以免把问题带到后期集成和台架测试的阶段。另外,在汽车软件开发流程中也会强制要求提交单元测试的相关文档。

>>返回个人博客总目录

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值