表1 测试次数A到B的误差 测试次数 第一次 第二次 第三次 第四次 第五次 第六次 第七次 飞起高度 45cm 30cm 40cm 65cm 55cm 90cm 80cm 是否飞到B区 否 否 否 是 否 是 是 飞行时间 3s 2s 4s 5s 6s 8s 8s
表2 测试功能、测试工具及实现的情况表
基本部分 发挥部分 具体功能要求 四旋翼自主飞行器一键式启动,从A区飞向B区,在B区降落并停机;飞行时间不大于30s 四旋翼自主飞行器一键式启动,从A区起飞,经由CDEF逆时针飞行一圈,再回到A区降落并停机;飞行时间不大于45s 飞行器摆放在A区,飞行器下面摆放一薄铁片,一键式启动,飞行器拾取薄铁片并起飞 飞行器携带薄铁片从示高线上方飞向B区,并在空中将薄铁片投放到B区;飞行器从示高线上方返回A区,在A区降落并停机 以上往返飞行时间不大于30s 其他 实际测试结果 可以满足,飞行时间为10s 可以满足要求,飞行时间为32s 可以满足要求,飞行时间为4s 可以满足要求,飞行时间25s 可以满足要求 最后为实现起飞后,在60cm的高度进行自由机身旋转3圈,并稳定降落并停机。 经测试,系统可以满足基本要求和部分发挥部分,并具有稳定前行的特点。 测试分析与结论
根据上述测试数据,各个点的理论误差与实际误差比较,由此可以得出以下结论:
1、实际与理论差距太大,高度受电压影响太大,通过运用红外对管调节四轴高度, 2、通过微调PID参数使四轴起飞平衡,
3、通过调节加速度计可使四轴按要求飞行,减小误差
综上所述,基本可以达到预期目标,说明我们的硬件和软件的设计基本趋于合理,达到要求。
附录1:电路图原理
附录2:源程序
/*********************************************************************************************************************** * DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only * intended for use with Renesas products. No other uses are authorized. This * software is owned by Renesas Electronics Corporation and is protected under * all applicable laws, including copyright laws.
/*********************************************************************************************************************** Includes
***********************************************************************************************************************/ #include \#include \#include \#include \
/* Start user code for include. Do not edit comment generated here */ uint16_t n,m,a;
Do not edit comment generated here */ #include \
/*********************************************************************************************************************** Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
void Delay_1ms(unsigned int K); Do not edit comment generated here */ void R_MAIN_UserInit(void); * Arguments : None * Return Value : None
***********************************************************************************************************************/ void main(void) {
R_MAIN_UserInit();
/* Start user code. Do not edit comment generated here */
while(1) {
if == 1) { Delay_1ms(20); if == 1) a = 1; }
else if == 1) { Delay_1ms(20); if == 1) a = 2; }
else if == 1) {
Delay_1ms(20); if == 1) a = 3; }
else if == 1) {
Delay_1ms(20); if == 1) a = 4; } else if == 1) {
Delay_1ms(20); if == 1) a = 5; }
switch(a) {
case 1: modle1(); break; case 2: modle2(); break; case 3: modle3(); break; case 4: modle4(); break; case 5: modle5(); break; default: break; } a=0; }
/* End user code. Do not edit comment generated here */ }
/*********************************************************************************************************************** * Function Name: R_MAIN_UserInit
* Description : This function adds user code before implementing main function. * Arguments : None * Return Value : None
***********************************************************************************************************************/ void R_MAIN_UserInit(void) {
/* Start user code. Do not edit comment generated here */
EI();
/* End user code. Do not edit comment generated here */ }
/* Start user code for adding. Do not edit comment generated here */
void modle1(void) {
R_TAU0_Channel0_Start(); =0;
Delay_1ms(2000); =1;
TDR01=0X0BBF; Do not edit comment generated here */