/*生成一个轮速脉冲虽车辆走过距离变化的数据*/
#include<stdio.h>
#include<math.h>
#define r_d 0.023169//每一个脉冲车轮走的距离单位:m
int main(void)
{
int fl = 123, fr = 456, rl = 0, rr = 1022; //起始四个轮胎的脉冲数
int fl_count, fr_count, rl_count, rr_count;
//int fl_count_m, fr_count_m, rl_count_m, rr_count_m;
int i = 0,k, j = 0;
double speed;//车速kph
double speed_ms;//车速m/s
double distance=0.0,distance_counter, distance_1=0.0,distance_m=0.0;//距离
float t = 0;//时间
speed = 10 * sin(2 * 3.14159 / 50 * t);//定义已速度函数
printf("%f\n", r_d);
for (i = 1; i < 25 / 0.02; i++)//每一帧按20ms,时间按25s
{
if (distance - distance_1 < r_d)//判断走的距离是否可以过几个轮速脉冲
distance_1 = distance_m;
else
{
k = floor((distance - distance_1) / r_d);
j = j + floor((distance - distance_1)/r_d);//计算走过的脉冲数
distance_m = j * r_d;//重新定义当前脉冲变化时刻对应的距离
distance_1 = distance_m;//赋给判断距离
if (fl + k > 1022)//轮速循环计数按[0,1022]
fl = fl + k -1023;//大于1022重新计数
else
fl=fl+ k;
if (fr + k > 1022)
fr = fr + k - 1023;
else
fr = fr + k;
if (rr + k > 1022)
rr = rr + k - 1023;
else
rr = rr + k;
if (rl + k > 1022)
rl = rl + k - 1023;
else
rl = rl + k;
}
printf("%f %f %d %d %d %d %d\n ", i * 0.02, distance, fr, fl,rr,rl, j);//显示结果
distance = 20 * 50 / 2 / 3.14159 - 20 * 50 / 2 / 3.14159 * cos(2 * 3.14159 / 50 * i*0.02); //更新距离,按车速函数的积分来进行求解。
}
return 0;
}