智能车制作

标题: 大家帮看看这个卡尔曼滤波行吗? [打印本页]

作者: autozhubeilife    时间: 2012-5-4 11:45
标题: 大家帮看看这个卡尔曼滤波行吗?
[attach]24069[/attach]


[attach]24070[/attach]


红色的是角度的原始数据,蓝色是滤过之后的角度,粉红(紫色)是陀螺仪滤过之后的波形



作者: 篮孩子    时间: 2012-5-4 11:53
这个软件怎么使啊
作者: autozhubeilife    时间: 2012-5-4 12:12
篮孩子 发表于 2012-5-4 11:53
这个软件怎么使啊

这也是我一个同学给我的
void UART_Init (void)
{
    SCI0CR2=0x2c;  
    SCI0BDH=0x01;
    SCI0BDL=0xa0;                  

}


void uart_putchar ( unsigned char c)
{

  while(!(SCI0SR1&0x80)) ;                      
  SCI0DRL=c;
}


void uart_putstr(char ch[])
{
  unsigned char ptr=0;
  while(ch[ptr]){
      uart_putchar((unsigned char)ch[ptr++]);
  }
}


unsigned short CRC_CHECK(unsigned char *Buf, unsigned char CRC_CNT)
{
    unsigned short CRC_Temp;
    unsigned char i,j;
    CRC_Temp = 0xffff;

    for (i=0;i<CRC_CNT; i++){      
        CRC_Temp ^= Buf;
        for (j=0;j<8;j++) {
            if (CRC_Temp & 0x01)
                CRC_Temp = (CRC_Temp >>1 ) ^ 0xa001;
            else
                CRC_Temp = CRC_Temp >> 1;
        }
    }
    return(CRC_Temp);
}


void OutPut_Data(float OutData[4])   //直接使用这个函数就可以  用一个全局数组存放 测量值
{
  int temp[4] = {0};
  unsigned int temp1[4] = {0};
  unsigned char databuf[10] = {0};
  unsigned char i;
  unsigned short CRC16 = 0;
  for(i=0;i<4;i++)
   {

    temp  = (int)OutData;
    temp1 = (unsigned int)temp;

   }

  for(i=0;i<4;i++)
  {
    databuf[i*2]   = (unsigned char)(temp1%256);
    databuf[i*2+1] = (unsigned char)(temp1/256);
  }

  CRC16 = CRC_CHECK(databuf,8);
  databuf[8] = CRC16%256;
  databuf[9] = CRC16/256;

  for(i=0;i<10;i++)
    uart_putchar(databuf);
}



作者: tongyonghua123    时间: 2012-5-4 13:45
还行啊 。。。
作者: 都培源    时间: 2012-7-14 13:32
差不多就行




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2