请选择 进入手机版 | 继续访问电脑版
快捷导航
59 278

基于Beacon帧定位的全向移动平台

李世渊 于 2017-12-23 20:34 发表在 [开源项目] [复制链接]

注册后可查看大图哦

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
项目名:基于Beacon帧定位的全向移动平台

项目组员:李世渊,周芸羽,zcz,黄金,小七仔,ZhangHB


项目功能:
1.室内多个蓝牙定位点提供定位信息。
2.室内实时定位提供导航数据。
3.壁障模块提供移动平台周围障碍信息。
4.平台根据导航移动到指定位置。

项目周期:
2017.12.25-2018.1.15

项目所需材料:
1.1*全向底盘
2.4*蓝牙模块
3.6*stm32开发板
4.2个红外测距
5.1*180度舵机
6.1*锂电池
7.杜邦线及面包板若干

项目资金来源:
组员均分、等

点评

赞同: 5.0
anymsg 赞同: 5
  发表于 2018-1-11 09:13
Connecting & Messaging from Any.

共 59 个关于本帖的回复 最后回复于 2018-1-30 12:43

李世渊 注册会员 发表于 2018-1-26 22:24:59 | 显示全部楼层
今日:将原先的三点定位改为三点质心求坐标,原因是三点定位会出现当三个圆交点不在同一点时算不出坐标的情况,而这种情况出现的概率时很高的,所以改变求坐标的算法,使得求出准确的坐标。
由于rssi的不稳定性,加入皮尔逊系数,对质心进行加权运算,求出相对准确的坐标。
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-10 21:44:08 | 显示全部楼层
1.10
今日完成:组装底盘模块,测试底盘程序,发现电池可能存在一些问题,留待明天解决。
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2018-1-10 21:41:54 | 显示全部楼层
1、今天把串口接收数据改成了USART2,rs232的针脚2:RX ,针脚3:TX 分别接板子的PA2和PA3.
两个STM32板子进行通讯时,出现了丢数据现象。电脑给板1发数据,板1接收到数据之后把数据printf出来,板2接收到数据后再把它发回给板1。
2、https://wenku.baidu.com/view/2f8d5304a300a6c30c229ff8.html
     http://blog.csdn.net/u013567593/article/details/77836287
    结论: 领域加权平均滤波模版的值为1/矩阵中数的总和
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-9 20:40:19 | 显示全部楼层
1.9
因为串口通讯格式需要使用16进制char字符,提供给车轮转速指令的存储格式为double,今天上午弄了好长时间double转16进制char字符串,一直没能解决。后来换了一种思路,将double转换成short形变量,通过对short型高低位存储,将一个short转换成两个char字符,解决了之前的问题。代码贴上:
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void doubleToHex(double x, double y, double z,char *c)
  4. {
  5.         short a_x = 10*x;
  6.         short a_y = 10*y;
  7.         short a_z = 10*z;
  8.        
  9.         c[0] = 0x0A;
  10.         c[1] = a_x & 0xff;
  11.         c[2] = (a_x >> 8) & 0xff;
  12.         c[3] = 0x2C;
  13.         c[4] = a_y & 0xff;
  14.         c[5] = (a_y >> 8) & 0xff;
  15.         c[6] = 0x2C;
  16.         c[7] = a_z & 0xff;
  17.         c[8] = (a_z >> 8) & 0xff;
  18.         c[9] = 0x0D;

  19. }


  20. int main()
  21. {   

  22.         double d = 1822.1;
  23.         short s = 10*d;
  24.         short a,b,e;
  25.         char c[11]={0};
  26.        
  27.         char *ch;
  28.        
  29.         int i;       
  30.         ch = c;

  31.         doubleToHex(10.0,10.0,10.0,ch);
  32.        
  33.         printf("%d,%d,%d\n",a,b,e);
  34.        
  35.         for(i=0;i<10;i++)
  36.         {
  37.                 printf("%02x",c[i]);
  38.         }
  39.         printf ("\n");
  40.    
  41.     return 0;  
  42. }
复制代码
注意,这里为了将double扩大了十倍,在处理数据时需要将数据缩小十倍。
其实不难,弄了一整天,挺愧疚的。。。今天还有就是日常帮组员美化模块吧。。。
Connecting & Messaging from Any.
举报 使用道具
李世渊 注册会员 发表于 2018-1-9 20:12:03 | 显示全部楼层
今天:完成蓝牙控制到蓝牙定位的代码整合,发现蓝牙定位精度在近距离颇高,但受蓝牙天线影响颇大
明天:调教代码,对模块进行优化。
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2018-1-9 19:56:35 | 显示全部楼层
今日:改善串口接收程序,用了一下黄金的字符串转double的函数。
         看了均值滤波 http://blog.csdn.net/luoweifu/article/details/8150196
         今天身体不舒服,所以早些休息了TAT

Connecting & Messaging from Any.
举报 使用道具
黄金 注册会员 发表于 2018-1-9 18:05:16 | 显示全部楼层
当c99标准下不可以使用atoi()函数的时候可以使用这个函数(转自网上,非原创)

double atof_my(const char *str)
{
    double s=0.0;

    double d=10.0;
    int jishu=0;

    int falg=0;

    while(*str==' ')
    {
        str++;
    }

    if(*str=='-')//??????
    {
        falg=1;
        str++;
    }

    if(!(*str>='0'&&*str<='9'))//???????????,??0.0
        return s;

    while(*str>='0'&&*str<='9'&&*str!='.')//??????????
    {
        s=s*10.0+*str-'0';
        str++;
    }

    if(*str=='.')//???????
        str++;

    while(*str>='0'&&*str<='9')//??????
    {
        s=s+(*str-'0')/d;
        d*=10.0;
        str++;
    }

    if(*str=='e'||*str=='E')//???????
    {
        str++;
        if(*str=='+')
        {
            str++;
            while(*str>='0'&&*str<='9')
            {
                jishu=jishu*10+*str-'0';
                str++;
            }
            while(jishu>0)
            {
                s*=10;
                jishu--;
            }
        }
        if(*str=='-')
        {
            str++;
            while(*str>='0'&&*str<='9')
            {
                jishu=jishu*10+*str-'0';
                str++;
            }
            while(jishu>0)
            {
                s/=10;
                jishu--;
            }
        }
    }

    return s*(falg?-1.0:1.0);
}

点评

赞同: 5.0
anymsg 赞同: 5
  发表于 2018-1-11 21:52
Connecting & Messaging from Any.
举报 使用道具
李世渊 注册会员 发表于 2018-1-9 00:06:17 | 显示全部楼层
1.8
整合了 蓝牙定位坐标轴校准模块的代码
不小心烧了舵机  不知道怎么回事 线短路了 猜测是舵机功率过大 线太细的原因
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-8 23:53:43 | 显示全部楼层
本帖最后由 zcz 于 2018-1-9 10:42 编辑

1.8
今天,调参,引入了积分时间,重新写了了pid控制算法,解决了之前在数据差值大时异常的情况。帮组组员美化模块~
明天:解决将double型转换成16进制char组。
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2018-1-8 23:46:48 | 显示全部楼层
1.8
今日:1、线路烧了,重配了舵机。
          2、串口数据接收
          3、了解了哈希表。斐波那契公式没怎么看懂=-=
http://blog.csdn.net/duan19920101/article/details/51579136
明日:把数据接收到的数据存到哈希表
//发送数据
int fputc(int ch, FILE *f){
        USART_SendData(USART1,(unsigned char)ch);//USART1¿ÉÒÔ»»³ÉUSART2µÈ
        while(!(USART1->SR&USART_FLAG_TXE));
        return(ch);
}
//接收数据
int GetKey(void){
        while(!(USART1->SR&USART_FLAG_RXNE));
        return((int)(USART1->DR&0x1FF));
}
加上这两个函数就能在mdk里用printf了
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2018-1-8 23:44:09 | 显示全部楼层
1.8
了解了一下粗化算法(?是叫粗化么) 总之要把障碍物得到的一些不连续的点想办法补全,还不知道怎么弄。。
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-7 23:48:50 from Mobile | 显示全部楼层
1.7
今天做了一些模块的装配吧,主要把舵机和红外模块怎么连到板子上进行了一些美化,毕竟是我们移动平台的门面,要弄得美美的~
Connecting & Messaging from Any.
举报 使用道具
黄金 注册会员 发表于 2018-1-7 17:13:13 | 显示全部楼层
今日完成:程序,一开始为从机,当被连接上后将标识符置为0,接受数据完成后置为可接受广播的主机模式,将标识符置为1
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-6 14:26:44 | 显示全部楼层
本帖最后由 zcz 于 2018-1-6 14:35 编辑

1.6
调参工程师的日常。。。
通过模拟实际工作时的电机转速和需要达到的转速,对PID控制模块进行参数选择。
       目的:尽快让转速达到目的速度。
实验报告如下:

报告部分截图:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2018-1-5 21:46:25 | 显示全部楼层
1.05日报
1. 对滤波进行优化;
2. 在二位组员的帮组下对红外_舵机避障进行调试;
3. 重新接线,进行美化

(美化前和美化后)
感谢其他组员的帮助

明日任务:
1. 学习a*搜索算法
2. 复习,下周行政班级有两门课要期末考试了......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2018-1-5 21:46:06 | 显示全部楼层
.i文件 预处理后的C文件;编译,汇编
.obj 就是目标文件,是你的源程序经过编译程序编译后生成的,它不能直接执行,需要连接程序连接后才能生成可执行文件
elf是可执行文件。由于编译程序时,elf并没有更新。obj文件链接程序后就能生成elf文件。
想起以前用lcion写亮灯代码时,可以在板子上运行的。但是后来就不能更新elf文件。可能是在clion上不经意的操作引起的。所以重装clion。重新配好环境之后,若还有问题。试着把obj文件转换承elf文件。
帮组组员调试红外舵机壁障。

Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-5 21:40:28 | 显示全部楼层
1.5今日:
帮组组员进行红外_舵机 避障模块的测试,以及美化模块
明天:
继续等测速代码
Connecting & Messaging from Any.
举报 使用道具
黄金 注册会员 发表于 2018-1-5 10:16:23 | 显示全部楼层
20180105
今日完成:
解决昨日遗留问题,在main函数中添加一个延时,因为设置了按键中断,如果不设置延时可能一上来就会进入按键中断。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2018-1-4 22:19:31 | 显示全部楼层
1.04日报
今日完成:
1. 配置好了DMA搬运ADC多通道的数据;
2. 对ADC的两个值进行滤波(协方差);
3. 整合通过舵机角度和红外距离画矩阵的代码并进行优化;


明日完成:
1. 对滤波进行优化,很多正确的值被滤掉了;
2. 等待组长分配任务.........
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2018-1-4 22:14:50 | 显示全部楼层
今日完成:舵机和红外线的舵机代码调整,采集舵机时间数据。
把舵机的代码移到Clion上下载到stm32上,前段时间把亮灯的程序通过clion烧进板子成功了,但是今天运行的时候发现elf文件没有被更新,elf文件里还是以前开灯的那个程序。
明日:根据文档里的网页尝试生成elf文件。通过clion运行舵机。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
李世渊 注册会员 发表于 2018-1-4 21:59:44 | 显示全部楼层
今日完成:完成卡尔曼滤波算法,发现卡尔曼滤波器其实很大程度上受的是测量噪声影响。
明日计划:测量蓝牙距离与测量噪声的关系,并给出相应公式。
Connecting & Messaging from Any.
举报 使用道具
黄金 注册会员 发表于 2018-1-4 21:55:26 | 显示全部楼层
20180104
今日完成:通过程序实现两个接在stm32板子上的蓝牙的连接当主机
扫描完成后比对返回的mac地址和需要连接的特定mac地址,相同时进行连接,然后可进行通讯。从机接受到主机发送的数据后
返回一个特定标识,主机接受到标识后断开连接。
该功能还未完全完成,出现一个问题。当主机连接上从机并发送数据后从机接受不到数据(应该是),但当通过串口调试工具点击
发送一个随意字符串之前发送的数据加上刚发的随意的字符串又会在从机上被读取并显示,搞了挺久没结果。
明天任务:解决上面这个问题=-=。累觉不爱。。。
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-4 20:40:43 | 显示全部楼层
1.4
今日完成:对小车进行了整车的测试,发现电机在从正传直接转变成反转时,电池会停止供电。而在空载l298n模块时,电压表测得输出端电压变换正常, 在排除了电源和l298n模块问题之后,推测,可能是由于电机在迅速进入反转时会给电池一个电流,从而影响了电池的继续工作。于是调整代码,对接收的速度信号加了一个判断,当三个轮子任意一个出现正反转装换时所有电机均进入急停,并延500ms,之后再进行转动,解决了之前的问题。(之前的电机工作电压问题已经解决了,其实是板子上的gnd和l298n模块的gnd没有相连。。。)
明日计划:继续等测速代码。。。。。。调整代码吧,找找看还有什么可以优化的
Connecting & Messaging from Any.
举报 使用道具
ZhangHB 注册会员 发表于 2018-1-4 19:48:12 | 显示全部楼层
今日完成:
之前一直没注意到减速比,导致测得的数值偏大不精确,很造作啊。
下午将计数器中TIM_Period 设置为720(编码器转动两圈),总算面朝大海,春暖花开了哟...
至于宁哥说的IORemap这个问题,今天看了一下
---->>(ioremap)的作用是把一个物理内存地址点映射为一个内核指针,被映射数据的长度由size参数设定。该函数的实质是把一块物理区域二次映射到一个可以从驱动程序里访问的虚拟地址上去。
看的是好几脸懵
Connecting & Messaging from Any.
举报 使用道具
chinmel 版主 发表于 2018-1-4 02:39:16 | 显示全部楼层
ZhangHB 发表于 2018-1-3 23:56
今日完成:
单电机测速正常,不可同时测速三电机!!代码整合到一起通用TIM分配出问题,还是有待协调。 ...

可能涉及定时器引脚的IORemap
Connecting & Messaging from Any.
举报 使用道具
ZhangHB 注册会员 发表于 2018-1-3 23:56:04 | 显示全部楼层
今日完成:
单电机测速正常,不可同时测速三电机!!代码整合到一起通用TIM分配出问题,还是有待协调。
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2018-1-3 22:19:36 | 显示全部楼层
1.03日报
今日完成:
1. 配置DMA搬运ADC多通道的数据
问题:ADC配置两个通道,在这里我两个通道是一个接地一个接VCC来测试,DMA搬运过来的数据应该是一次是0V一次是5V循环,但事实上不是这样
明日任务:
1. 继续配置DMA

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-3 21:26:35 | 显示全部楼层
今天任务:将电机测速部分代码整合进底层驱动模块中。遇到了很多很多问题。。。头疼,,,慢慢解决吧。。。
明天:继续整理光电测速部分的代码。。。测速整合好底盘部分就ok了。。。继续加油吧。。。
Connecting & Messaging from Any.
举报 使用道具
ZhangHB 注册会员 发表于 2018-1-2 23:49:42 | 显示全部楼层
今日任务:
哇,好难受,突如其来的要整合我的测速代码,弄得我是神魂颠倒哟,什么TIM3、TIM5呀还是不好分配,毕竟大家代码整合过后还能剩下几个嘞...德飞莱还是德飞莱,引脚什么的最瓜皮了。
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2018-1-2 23:41:29 from Mobile | 显示全部楼层
1.2
今日任务:
配置多通道ADC
尝试用DMA,试了一天都没有读到值,很崩溃,俨然是个废人了……感冒的小瘸子,明年再参加百里毅行就是狗
明日:阶段考核
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2018-1-2 23:37:12 | 显示全部楼层
今日:尝试是否能加快舵机转动速度
舵机转动角度大,则速度快。转动角度小,则速度慢。
参数对于舵机不通用,数据要略微调整一下
TIM2_PWM_Init(799,1799)  30  -  90  15°    5s
TIM2_PWM_Init(999,1439)  30  -  105  12°    6s
while(ms--){   for(i=0;i<10000;i++);   }最小delay值大概在100左右。
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2018-1-2 19:39:47 | 显示全部楼层
本帖最后由 zcz 于 2018-1-2 19:49 编辑

1.2:
由于线性放大驱动方式效率和散热问题严重,目前绝大多数直流电动机采用开关驱动方式。开关驱动方式是半导体功率器件工作在开关状态,通过脉宽调制PWM控制电动机电枢电压,实现调速,但电机实际转速与给定转速存在误差,对此我们选择了使用pid控制对电机速度进行校准。
PID是比例、积分、微分的简称,通过查询资料和学习后发现PID控制的难点不是编程,而是控制器的参数整定。
pid控制算法贴上:
  1. double err = 0.0;
  2. double err_last = 0.0;
  3. double err_next = 0.0;

  4. double PID(double SetSpeed,double ActualSpeed )
  5. {
  6.         double Kp = 0.2;
  7.         double Ki = 0.015;
  8.         double Kd = 0.2;       
  9.        
  10.         double incrementSpeed = 0;
  11.        
  12.         err = SetSpeed - ActualSpeed;
  13.        
  14.         incrementSpeed = Kp * (err - err_next) + Ki * err + Kd*(err - 2*err_next + err_last);
  15.         ActualSpeed += incrementSpeed;
  16.         err_last = err_next;
  17.         err_next = err;
  18.        
  19.         return ActualSpeed;
  20. }
复制代码

通过在调速的函数中循环调用100次,使得实际速度不断接近给定速度。
但是由于电机不能转。。。(电压过高,还是没找到电阻)所以还不能检测是否可以达到目标。。。
接下来要做的:
先让电机动起来吧。。。(stm32板子上的5v貌似可以)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2017-12-29 22:55:52 | 显示全部楼层
本帖最后由 周芸羽 于 2018-1-2 10:22 编辑

12_29:
今日:舵机跟红外传感器速度的调试匹配。
经计算,TIM2_PWM_Init(719,1999)50hz ,数值为25 - 75 (180°),  一次转动角度为18°   
              TIM2_PWM_Init(999,1439)           数值 30 - 120     一次转动角度为10°
               TIM2_PWM_Init(1499,959)          数值 50 - 185     一次转动角度为  6.7°   
               总结 period越大,一次性转动角度越小。  (一次增加数值为5)
今天没做些什么,明后天都在外面大概也不会写些什么。。。尴尬了
               
Connecting & Messaging from Any.
举报 使用道具
ZhangHB 注册会员 发表于 2017-12-29 22:53:33 | 显示全部楼层
今日完成:
今天发现我们所用电机最大电压小于电源电压,不能直接使用电源,我和组员一起找到若干个电阻以便分压使电机正常工作,测出来小电阻的阻止7500欧姆,计算得到串联到电路中电流小于1ma,与电机手册上面相悖,有待考虑有待考虑呀,搓完再说吧就!
Connecting & Messaging from Any.
举报 使用道具
李世渊 注册会员 发表于 2017-12-29 22:30:24 | 显示全部楼层
本帖最后由 李世渊 于 2017-12-29 22:35 编辑

今日完成:学习卡尔曼滤波原理,但是看的一脸懵
初步整合测距和舵机代码,发现舵机在移动特定角度过程中会出现测距测量噪声。
发现蓝牙模块的测距误差随距离的增大而增大,下一步准备根据实测加上卡尔曼滤波降低导航误差。
实现a*算法。
提交详细设计文档。
计划:
完成卡尔曼滤波。
帮组组员解决对应问题,如果不能解决就请求帮组。
Connecting & Messaging from Any.
举报 使用道具
黄金 注册会员 发表于 2017-12-29 22:27:38 | 显示全部楼层
12.29
今天...
下午没课
然后中午就回宿舍了,感到很愧疚
一上午没有写什么新的代码........
所以没脸写日报........
一直在利用串口调试工具调试蓝牙模块的代码
一开始一直切换不了模式搞了半天才发现有一个AT指令写错了(蓝牙通过usb转串口直接连接pc并输入AT指令比对后发现)
昨天用sourceinsight调试代码,提示有EXTI8_IQNHandle中断函数,结果半天进去不中断=-=
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2017-12-29 22:24:46 from Mobile | 显示全部楼层
12.29
早上到整理了一下设备,因为我们这边电机最大电压小于电源电压,不能直接接电源...在器材室找了好多好多东西...例如好多小电阻...还有其他固定舵机和红外测距可能用的到的东西...拿宁哥桌子上的万能表,百度了上面的型号,找到了说明书23333,测出来小电阻的阻止7500欧姆...串联到电路的话电流小于1ma,而电机手册上面,工作电流最小100ma...上午还急着赶火车就没深入整理了...
所以需要串联的电阻回学校再找吧。。。
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2017-12-29 22:10:02 from Mobile | 显示全部楼层
12.29
今天…
上午第二节有课
然后就回家了…
一小节课没弄出啥来……
没脸写日报………
可能接下来几天会更没脸吧
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2017-12-28 20:28:32 | 显示全部楼层
今日完成:通过分析串口接收数据,控制驱动模块,并返回给上层串口数据。
接下来需要完成:对全向底盘物理设备进行整体安装,由于电源电压大于电机最大工作电压,可能需要将电机串联一定阻值的电阻进行降压。
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2017-12-28 20:13:44 | 显示全部楼层
12.28日报
今日完成:
1. 安装MATLAB
参考网页:http://blog.csdn.net/u012313335/article/details/73733651###;
大家要用的话可以找我拷安装包和破解包
安装中遇到的错误Error finding com/mathworks/activationclient/ActivationApplication class. An exception occurred while looking for class.
解决办法:用户名含有中文,添加新用户(英文或数字)重新打开
2.  使用MATLAB将两个测距模块拟合成不同函数
3.  和其他组员一起拿着舵机瞎调?然后协商舵机每次转动角度、全向轮转速以及我这边红外测距采集次数问题
4.  想要使用ADC得到多个引脚的值,不知道是要配置一个ADC1的多个通道还是配置ADC1和ADC2,前者采集到的数据一样,后者ADC2的值没采集出来.......明天继续学习

明日任务:
1. 学习如何配置多路ADC
2. 改变红外测量次数,同时确定其稳定性


Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2017-12-28 20:08:23 | 显示全部楼层
今日完成:舵机的连续转动,emmm,最主要的还是调数据。
明日:将mdk文件移到clion上烧进程序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2017-12-27 22:03:42 | 显示全部楼层
今日完成:串口中断,并接收分析数据;
明天需完成:处理串口数据并实现函数接口。
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2017-12-27 21:59:51 | 显示全部楼层
本帖最后由 小七仔 于 2017-12-28 20:01 编辑

12.27日报
今日完成:

1.  由于发现excel能进行线性化拟合,于是先用excel代替了MATLAB,但是精确度不是非常高,后续会用MATLAB再次拟合函数
2. 之前采样的数据有点误差,重新采样了多组数据作为模板拟合函数
3. 我们使用的夏普红外测距传感器是20~150cm的,但是经过实验发现110cm后精度较低,和其测距原理有关(三角测距法,三角形的底边只有2-3cm,而高度(即所要测得距离)有110cm,所以有一些噪声也较为正常)
另外,两个相同规格的测距模块测出的电压值有误差(其他条件都相同);
并且不能测发光性较强的物体。这个问题有待解决(可能解决不了)


明日任务:
1. 了解怎样使用MATLAB
2. 将两个测距模块使用不同函数测距,以减小误差


学习记录:
上篇记录中说过必须解决的有两个问题:信号的线性化以及滤波。
1.滤波
由于夏普GP2Y0A02红外测距传感器是三角测距法(上篇中说过:这是一个顶角极锐的等腰三角形,底边只有2cm,高却要有20–150cm,它的测距结果很难稳定、精确,毕竟比值太大),对此我们根据Datasheet,其测量周期为40ms左右(38.3ms),采用 4ms 采样一次,取最近10次的结果平均值的滤波方式,也就是说,一个测量周期采10个数据平均,然后采集100个这样的平均值再取平均值,即一个点的值采集了1000次取均值,这样就大大降低了噪声的影响。
另外非常重要的一点是GP2Y0A02红外测距传感器工作电压是4.5~5.5V,所以注意VCC要接在stm32的5V引脚上,在这里我犯了一个错误:因为我stm32板子是直接用J-link ob供电了,并且供的是3.3V,所以在1000次均值滤波下得到的结果仍然非常不稳定,在程序和引脚接线的多次检查下仍然得不到一个稳定的数值,最后发现是stm32接入电源电压问题,所以在接入GP2Y0A02传感器模块电压时一定要确认是否为5V
2.信号的线性化
根据Datasheet上的距离测量特性(输出)示例图可看出距离和电压是非线性的,而电压和距离的倒数几乎可以线性化(20~150cm内)。
我使用excel将记录的值导入,绘制散点图:
可以看到曲线基本和Datasheet曲线(20~150cm内)趋势相似,然后进行线性化拟合(要显示趋势线公式,excel相关操作百度上有很多教程,关键词excel线性化拟合)得到公式应用于程序进行测距(对精度要求不高可以这样操作,对精度要求相对较高的话建议使用MATLAB)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
小七仔 注册会员 发表于 2017-12-26 22:06:25 | 显示全部楼层
12.26日报
今日完成:
1. 处理所得到的值,转换为电压值
2. 开始发现输出数据非常不稳定,很飘,测了很多次并且进行了滤波,记录的是1000次的平均值都很飘,后来发现是工作电压的问题,解决,后续会完善相关文档

明日任务:
1. 下载MATLAB,并了解怎样使用
2. 根据测量的数据用MATLAB拟合成曲线得到公式来测距
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2017-12-26 21:50:46 | 显示全部楼层
今日:通过clion把代码烧入stm32中,但是出现了好几个bug,在组长的帮助下也没能解决。总结:今日一事无成,略微了解了舵机
明日:详细了解舵机的构造及运行方式,并整理成文档。是否编码据明日理解程度而定。
文件待修改及补充

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.
举报 使用道具
李世渊 注册会员 发表于 2017-12-26 21:46:36 | 显示全部楼层
今日工作:为组员提供帮组,并开始整理详细文档。
明日工作:完成详细文档,帮组组员整理相应模块逻辑。
Connecting & Messaging from Any.
举报 使用道具
zcz 注册会员 发表于 2017-12-26 21:34:33 | 显示全部楼层
今日:串口通讯与调试
明天:接受串口信号并产生相应控制
Connecting & Messaging from Any.
举报 使用道具
黄金 注册会员 发表于 2017-12-26 21:30:49 | 显示全部楼层
今日完成:
通过写程序到stm32上控制蓝牙之间的通讯
明日暂定
Connecting & Messaging from Any.
举报 使用道具
周芸羽 注册会员 发表于 2017-12-25 23:39:35 | 显示全部楼层
今日完成eclipse的安装及配置,jlink仿真器及clion OpenOCD的安装及配置。文档在补充中
emmm。(注:修改变量之后要重启电脑,尴尬)
明日计划完成clion对stm32板子调试及烧入整个流程及其文档的完善。
Connecting & Messaging from Any.
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐板块

精彩推荐

热门排行

明星用户

手机版|小黑屋|AnyMSG ( ©AnyMSG 2009 - 2017 · ICP备16009991号 )

GMT+8, 2018-5-26 04:39