OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4171|回复: 5

STM32F103和OV7725做三角测距

[复制链接]

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-6-5 16:51:31 | 显示全部楼层 |阅读模式
目前用的是红外光。OV7725摄像头拍照,然后程序找点。
距离远的时候,光点离屏幕中心应该越近。发现的问题是红外光点光斑比较大,导致光点中心落在屏幕上的坐标点位置有变动,在某些距离内,光点拉远反而落在屏幕中心的位置变远了。
想问下有没有什么好的处理办法解决。

目前我测的数据是红外光点RGB数据为(240,252,248)/在15-65cm内,所以程序里用了if找点
if((red==240)&&(green==252)&&(blue==248))

然后将320*240个像素点中是红外光的点,计算其坐标位置
m=x/320;  
n=x%320;


因为光点是一个区域,所以要算出光点的中心位置;问题就是前面提到的,光点大,所以中心位置不好算,想问下有没有什么好的方法?
下面是网上找到的三角测距原理图。
1.png
找到光点中心,可以根据qx=fs算出距离q,问题在于焦距f是我手动调出来的,大小未知;s是红外发射管和摄像头中性轴的距离,显然也是未知数。
x可以根据找到的光点中心坐标和屏幕中心坐标(119.5,159.5)的位置算出来;q是待求的距离。
这里有好几个未知数,距离怎么算?

论坛里好像找不到三角测距的帖子,打了这4个关键字,只搜到2个帖子!!
是不是stm32f103做不了三角测距啊。

就这些疑问,多谢。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
 楼主| 发表于 2018-6-5 17:06:09 | 显示全部楼层
关键程序是下面这个:for(x=0;x<76800;x++)//320*240=76800个像素点
                {
                        READ_FIFO_PIXEL(Camera_Data);                /* FIFO读摄像头数据 */
                        ILI9341_Write_Data(Camera_Data);        //LCD屏幕显示像素点
                        //RGB565分离出像素分量
                       red = (Camera_Data & RGB565_MASK_RED) >> 11;     
                       green = (Camera_Data & RGB565_MASK_GREEN) >> 5;     
                       blue = (Camera_Data & RGB565_MASK_BLUE);     
                       red <<= 3;  
                       green <<= 2;  
                       blue <<= 3;  

                        if((red>=200)&&(green==252)&&(blue==248))//找出红外光点
                                {
                                        m=x/320;  //算出光点的行列
                                        n=x%320;  
                                        if(m>a) a=m;
                                        if(m<b) b=m;  //确定最大最小行
                                        if(n>c) c=n;  //确定最大最小列
                                        if(n<d) d=n;                                                       
                                }
                }
        m=c-d+1;n=a-b+1;//算出光点区域的宽度和高度     对于矩形光斑比较适用,对于不规则光斑,可能会出现不准
        p=(float)b+n/2+n%2;q=(float)d+m/2+n%2;//算出光点的中心位置     问题就是这个方法不太好,光点比较规则这个办法可以  但有的目标上,光斑没啥规则       
        l=0.02025*sqrt((p-119.5)*(p-119.5)+(q-159.5)*(q-159.5));//算出光点中心离屏幕中心的距离 每个像素点宽度为0.02025cm    屏幕320*240

        printf("(%f,%f) %f\r\n",p,q,l);        //打印
        ILI9341_DrawRectangle(d,b,m,n,0);  //在屏幕上画矩形框将光点圈起来
}

回复 支持 反对

使用道具 举报

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2017-8-9
在线时间
51 小时
发表于 2019-4-24 13:12:53 | 显示全部楼层
有没有试过把红外光源换成激光光源试一下?
回复 支持 反对

使用道具 举报

15

主题

317

帖子

0

精华

高级会员

Rank: 4

积分
862
金钱
862
注册时间
2015-2-12
在线时间
354 小时
发表于 2019-4-24 13:31:10 | 显示全部楼层
这个好专业,无法回答你问题。不过不知道你是否有分析过小米激光扫地机器人的激光雷达,它就是用这方法去计算的。
回复 支持 反对

使用道具 举报

10

主题

212

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2019-4-8
在线时间
226 小时
发表于 2019-7-9 10:46:13 | 显示全部楼层
楼主  后来搞定了没
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-7-22
在线时间
3 小时
发表于 2019-7-22 10:41:14 | 显示全部楼层
好,谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 10:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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