找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4142|回复: 3
收起左侧

STM32超声波测试程序(卡尔曼滤波)

[复制链接]
ID:488090 发表于 2019-3-10 20:08 | 显示全部楼层 |阅读模式
最近尝试做出来的超声波测试(卡尔曼滤波)

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "math.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "can.h"
  8. #include "wheelControl.h"
  9. #include "encoder.h"
  10. #include "coordinate.h"
  11. #include "monition_control.h"
  12. #include "pwm.h"
  13. #include "exti.h"
  14. #include "stm32f10x_exti.h"
  15. #include "lidar.h"
  16. #include "spi.h"
  17. #include "24l01.h"
  18. #include "QIANG.h"
  19. #include "text.h"
  20. #include "bsp_rcc.h"
  21. #include "key.h"
  22. #include "chaosheng.h"
  23. #include "lb.h"
  24. int speed=3000;
  25. extern float zygj;    //估计值
  26. extern float sjjc;    //检测值

  27. float s;//码盘偏差纠正
  28. extern coordinitioate_Struct  World_Coordinate_system_Position/*世界坐标系--位置*/
  29.                                                                                   ,World_Coordinate_system_Velocity/*世界坐标系--速度*/
  30.                                                                                   ,Velocity_Coordinate_system/*速度坐标系*/
  31.                                                                                   ,Robot_Coordinate_system/*机器人车身坐标系*/
  32.                                                                                         ,TargetLine_Coordinate_system/*目标线坐标系,相当于在速度坐标系下的位置*/;
  33. float data_tosend[6];
  34. ROBOT_Status_Struct ROBOT_Status;
  35. extern int flag_ea;
  36. extern float targetY;
  37. extern distancel distance_angle;
  38. char start_flag=0;
  39. extern int flag_dingwei;
  40. extern float gyroIntegral_tri;

  41. extern PID_Struct Angle_PID,Abjust_PID;

  42. //extern int32_t motorSpeed_1, motorSpeed_2, motorSpeed_3, motorSpeed_4;

  43. int main(void)
  44. {       
  45.   
  46. //        HSE_SetSysClock(RCC_PLLMul_15);
  47.                  delay_init();                     //延时函数初始化       
  48.                 NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级                     
  49.                 qigang_init();
  50.                  KEY_Init();
  51.          
  52.           NRF24L01_Init();
  53.                 NRF24L01_TX_Mode();
  54.                 CAN_Configuration();  //can初始化
  55.                 CAN_SetMsg_1(0x110);
  56.                 delay_ms(100);
  57.                 CAN_SetMsg_1(0x210);
  58.                 delay_ms(100);
  59.                 CAN_SetMsg_1(0x310);
  60.                 delay_ms(100);
  61.                 CAN_SetMsg_1(0x410);
  62.                 delay_ms(100);
  63.                 CAN_SetMsg_2(0x111);
  64.                 delay_ms(100);
  65.                 CAN_SetMsg_2(0x211);
  66.                 delay_ms(100);
  67.                 CAN_SetMsg_2(0x311);
  68.                 delay_ms(100);
  69.                 CAN_SetMsg_2(0x411);
  70.                 delay_ms(100);

  71.     usart1_init(115200);
  72.           delay_ms(300);
  73.                 TIM5_Configuration(49,7199);//10Khz的计数频率,计数到5000为500ms
  74.                 TIM3_Cap_Init(0XFFFF,72-1);
  75.        
  76.                 while(!Key_Scan())//等待按键初始化完成
  77.                 {
  78.                 }
  79.           while(Key_Scan())//等待按键按下
  80.                 {
  81.                 }
  82.                
  83.                
  84.                 ROBOT_Status.Target_Angle.angle_reg=0;                //  机器人姿态角不
  85.                 ROBOT_Status.Target_Angle.angle_deg=0;
  86.                 ROBOT_Status.angular_velocity=0;   // 车身运动时姿态角不变
  87.    
  88.        
  89.                 ROBOT_Status.Start_Speed=1000;
  90.                 ROBOT_Status.Max_speed=speed;
  91.                 ROBOT_Status.NewState=ENABLE;
  92.                 ROBOT_Status.Robot_type= 0 ;
  93.                 ROBOT_Status.Target.x=1196.6;
  94.                 ROBOT_Status.Target.y=943.92;
  95.                 ROBOT_Status.Slow_accelerated_speed=3000;  //  减速加速度
  96.                 ROBOT_Status.Speedup_accelerated_speed=5000;
  97.                 ROBOT_Status.Target_Speed=speed;             //  末端速度
  98.                 ROBOT_Status.Stop_length =0;
  99.                 while(Robot_control_line(&ROBOT_Status)>50);
  100.                
  101.                
  102.                 ROBOT_Status.angular_velocity=0;
  103.                 ROBOT_Status.Max_speed=speed;
  104.                 ROBOT_Status.NewState=ENABLE;
  105.                 ROBOT_Status.Robot_type=2;
  106.                 ROBOT_Status.angle_reg_Sum=3.1415926*103.46/180;
  107.                 ROBOT_Status.R=600;
  108.                 ROBOT_Status.Heart.x=825;
  109.                 ROBOT_Status.Heart.y=1415;
  110.                 ROBOT_Status.Slow_accelerated_speed=3000;  //  减速加速度
  111.                 ROBOT_Status.Target_Speed=speed;
  112.                 ROBOT_Status.Stop_length = 10;
  113.                 while(Robot_control_Circle(&ROBOT_Status)>50);
  114.                
  115.                
  116.                
  117.                 ROBOT_Status.Start_Speed=speed;
  118.                 ROBOT_Status.Max_speed=speed;
  119.                 ROBOT_Status.NewState=ENABLE;
  120.                 ROBOT_Status.Robot_type= 0 ;
  121.                 ROBOT_Status.Target.x=464.91;
  122.                 ROBOT_Status.Target.y=2435.07;
  123.                 ROBOT_Status.Slow_accelerated_speed=3000;  //  减速加速度
  124.                 ROBOT_Status.Speedup_accelerated_speed=5000;
  125.                 ROBOT_Status.Target_Speed=speed;             //  末端速度
  126.                 ROBOT_Status.Stop_length =0;
  127.                 while(Robot_control_line(&ROBOT_Status)>50);
  128.                
  129.                
  130.                 ROBOT_Status.angular_velocity=0;
  131.                 ROBOT_Status.Max_speed=speed;
  132.                 ROBOT_Status.NewState=ENABLE;
  133.                 ROBOT_Status.Robot_type=1;
  134.                 ROBOT_Status.angle_reg_Sum=3.1415926*106.24/180;
  135.                 ROBOT_Status.R=600;
  136.                 ROBOT_Status.Heart.x=825;
  137.                 ROBOT_Status.Heart.y=2915;
  138.                 ROBOT_Status.Slow_accelerated_speed=1000;  //  减速加速度
  139.                 ROBOT_Status.Target_Speed=speed;
  140.                 ROBOT_Status.Stop_length = 10;
  141.                 while(Robot_control_Circle(&ROBOT_Status)>20);
  142.                
  143.                
  144.                
  145.                 ROBOT_Status.Start_Speed=speed;
  146.                 ROBOT_Status.Max_speed=speed;
  147.                 ROBOT_Status.NewState=ENABLE;
  148.                 ROBOT_Status.Robot_type= 0 ;
  149.                 ROBOT_Status.Target.x=1185;
  150.                 ROBOT_Status.Target.y=3935;
  151.                 ROBOT_Status.Slow_accelerated_speed=3000;  //  减速加速度
  152.                 ROBOT_Status.Speedup_accelerated_speed=5000;
  153.                 ROBOT_Status.Target_Speed=speed;             //  末端速度
  154.                 ROBOT_Status.Stop_length =10;
  155.                 while(Robot_control_line(&ROBOT_Status)>20);
  156.                
  157.                 ROBOT_Status.angular_velocity=0;
  158.                 ROBOT_Status.Max_speed=speed;
  159.                 ROBOT_Status.NewState=ENABLE;
  160.                 ROBOT_Status.Robot_type=2;
  161.                 ROBOT_Status.angle_reg_Sum=3.1415926*127/180;
  162.                 ROBOT_Status.R=600;
  163.                 ROBOT_Status.Heart.x=825;
  164.                 ROBOT_Status.Heart.y=4415;
  165.                 ROBOT_Status.Slow_accelerated_speed=3000;  //  减速加速度
  166.                 ROBOT_Status.Target_Speed=speed;
  167.                 ROBOT_Status.Stop_length = 10;
  168.                 while(Robot_control_Circle(&ROBOT_Status)>50);
  169.                
  170.                 Abjust_PID.KP=5;
  171.                 Angle_PID.KP=10;
  172.                
  173.                 ROBOT_Status.angular_velocity=0;
  174.                 ROBOT_Status.Max_speed=speed;
  175.                 ROBOT_Status.NewState=ENABLE;
  176.                 ROBOT_Status.Robot_type=1;
  177.                 ROBOT_Status.angle_reg_Sum=3.1415926*83/180;
  178.                 ROBOT_Status.R=170.0840;
  179.                 ROBOT_Status.Heart.x=995.0840;
  180.                 ROBOT_Status.Heart.y=5170.0000;
  181.                 ROBOT_Status.Slow_accelerated_speed=1000;  //  减速加速度
  182.                 ROBOT_Status.Target_Speed=0;
  183.                 ROBOT_Status.Stop_length = 10;
  184.                 while(Robot_control_Circle(&ROBOT_Status)>20)
  185.                 {
  186.                    delay_ms(500);
  187.                   
  188.                        
  189.                         break;
  190.                 }


  191.                 while(1)
  192.                 {
  193.                 if(zygj>850)
  194.                 {
  195.                   CAN_SetMsg(-500,0x114);
  196.          
  197.             CAN_SetMsg(-500,0x214);
  198.          
  199.             CAN_SetMsg(500,0x314);
  200.        
  201.             CAN_SetMsg((int32_t) 500/17.8*12,0x414);
  202.                 }
  203.                 else if(zygj<800)
  204.                 {
  205.                    CAN_SetMsg(500,0x114);
  206.          
  207.             CAN_SetMsg(500,0x214);
  208.          
  209.             CAN_SetMsg(-500,0x314);
  210.        
  211.             CAN_SetMsg((int32_t)-500/17.8*12,0x414);
  212.                 }
  213.                 else if(zygj<850&zygj>800)
  214.                 {
  215.                   break;
  216.                 }
  217.         }
  218.           ROBOT_Status.Start_Speed=1000;
  219.                 ROBOT_Status.Max_speed=speed;
  220.                 ROBOT_Status.NewState=ENABLE;
  221.                 ROBOT_Status.Robot_type= 0 ;
  222.                 ROBOT_Status.Target.x=750;
  223.                 ROBOT_Status.Target.y=7920;
  224.                 ROBOT_Status.Slow_accelerated_speed=300;  //  减速加速度
  225.                 ROBOT_Status.Speedup_accelerated_speed=1000;
  226.                 ROBOT_Status.Target_Speed=speed;             //  末端速度
  227.                 ROBOT_Status.Stop_length =0;
  228.                 while(Robot_control_line(&ROBOT_Status)>5);
  229.                
  230.          
  231.                
  232.                 //过桥后
  233.                 Angle_PID.KP=10;
  234.                 Angle_PID.KD=0;
  235.                
  236.                 ROBOT_Status.angular_velocity=0;
  237.                 ROBOT_Status.Max_speed=speed;
  238.                 ROBOT_Status.NewState=ENABLE;
  239.                 ROBOT_Status.Robot_type=1;
  240.                 ROBOT_Status.angle_reg_Sum=3.1415926*85/180;
  241.                 ROBOT_Status.R=585.0000;
  242.                 ROBOT_Status.Heart.x=1360;//775+585=1360
  243.                 ROBOT_Status.Heart.y=7920;
  244.                 ROBOT_Status.Slow_accelerated_speed=3000;  //  减速加速度
  245.                 ROBOT_Status.Target_Speed=speed;
  246.                 ROBOT_Status.Stop_length = 10;
  247.                 while(Robot_control_Circle(&ROBOT_Status)>20);
  248.                
  249.                 ROBOT_Status.Start_Speed=speed;
  250.                 ROBOT_Status.Max_speed=speed;
  251.                 ROBOT_Status.NewState=ENABLE;
  252.                 ROBOT_Status.Robot_type= 0 ;
  253.                 ROBOT_Status.Target.x=3963.8097;
  254.                 ROBOT_Status.Target.y=8505;
  255.                 ROBOT_Status.Slow_accelerated_speed=500;  //  减速加速度
  256.                 ROBOT_Status.Speedup_accelerated_speed=1000;
  257.                 ROBOT_Status.Target_Speed=1500;             //  末端速度
  258.                 ROBOT_Status.Stop_length =0;
  259.                 while(Robot_control_line(&ROBOT_Status)>20);
  260.                
  261.                 ROBOT_Status.angular_velocity=0;
  262.                 ROBOT_Status.Max_speed=1500;
  263.                 ROBOT_Status.NewState=ENABLE;
  264.                 ROBOT_Status.Robot_type=1;
  265.                 ROBOT_Status.angle_reg_Sum=3.1415926*90/180;
  266.                 ROBOT_Status.R=510.0000;
  267.                 ROBOT_Status.Heart.x=3964.0000;
  268.                 ROBOT_Status.Heart.y=8020.0000;
  269.                 ROBOT_Status.Slow_accelerated_speed=500;  //  减速加速度
  270.                 ROBOT_Status.Target_Speed=700;
  271.                 ROBOT_Status.Stop_length = 10;
  272.                 while(Robot_control_Circle(&ROBOT_Status))
  273.                 {
  274.                   if(lb_level!=1)
  275.                                 break;
  276.                 }
  277.                
  278.                 //交接令牌
  279.                
  280.                 Angle_PID.KP=0;
  281.                 Angle_PID.KI=0;
  282.                 Angle_PID.KD=0;
  283.                
  284.                 Abjust_PID.KP=1;
  285.                 Abjust_PID.KI=0;
  286.                 Abjust_PID.KD=0;
  287.        
  288.                 while(1)
  289.                 {
  290.                 if(lb_level==1)
  291.                 {
  292.           CAN_SetMsg(-500,0x114);
  293.          
  294.           CAN_SetMsg(        500,0x214);
  295.          
  296.           CAN_SetMsg(500,0x314);
  297.        
  298.           CAN_SetMsg((int32_t) -500/17.8*12,0x414);
  299.                
  300.                 }
  301.                 else
  302.                 {
  303.                        
  304.                 ROBOT_Status.Start_Speed=700;
  305.                 ROBOT_Status.Max_speed=700;
  306.                 ROBOT_Status.NewState=ENABLE;
  307.                 ROBOT_Status.Robot_type= 0 ;
  308.                 ROBOT_Status.Target.x=7450;
  309.                 ROBOT_Status.Target.y=8020.0000-20;
  310.                 ROBOT_Status.Slow_accelerated_speed=500;  //  减速加速度
  311.                 ROBOT_Status.Speedup_accelerated_speed=1000;
  312.                 ROBOT_Status.Target_Speed=0;             //  末端速度
  313.                 ROBOT_Status.Stop_length =0;
  314.                 while(Robot_control_line(&ROBOT_Status))
  315.                 {
  316.                   if(lb_level==1)
  317.                                 break;
  318.                 }
  319.                
  320.                 }
  321.                

  322.         }
  323.         }
  324.                
  325.                
  326.                
复制代码

所有资料51hei提供下载:
超声波测试1.3(卡尔曼滤波).7z (238.41 KB, 下载次数: 42)
回复

使用道具 举报

ID:1 发表于 2019-3-11 02:01 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:487397 发表于 2019-3-11 11:07 | 显示全部楼层
楼主:不给原理图大家怎么玩呀
回复

使用道具 举报

ID:334435 发表于 2019-7-31 20:47 | 显示全部楼层
float R = MeasureNoise_R;    // R:测量噪声,R增大,动态响应变慢,收敛稳定性变好
float Q = ProcessNiose_Q;    // Q:过程噪声,Q增大,动态响应变快,收敛稳定性变坏
大佬这些值是怎么给的,设定这些值有什么要求啊,是怎么算出来的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表