激光对焦

news/2024/11/29 10:01:33/

         之前预研过激光对焦,demo已经做好了,对焦速度和准确度都还不错,但因为激光测距对矿泉水瓶等透明或反射性强的物体容易测距不准,再加上其他一些因素最终未能量产到项目,在此简单记录一下,以备查询.

         主要是利用stmvl6180来红外激光测距(<40mm)并定时input上报给系统,建立一个线程接收测距,每帧图像都会对比当前镜头位置是否在景深范围内,如果在则镜头不动,如果不在则利用基本的光学公式1/u + 1/v = 1/f 和景深计算公式调整镜头位置,再就是,如果测距在40mm以内就用激光对焦方式,如果在40mm以外就用普通反差式对焦(40mm以内基本覆盖了马达的80%动作距离).



int LaserEvents::PreLaserAFCode(int Laserdist)
{//Laserdist ( mm )




   //int Laserdist = LaserRanging() - 10;
if ((Laserdist > 400)/*||(Laserdist<70)*/){
MY_LOG("maleijie out of range\n");
Laserdist = 1000000;
return -1;
}
CalcDepth(&d_front,&d_back,Laserdist);
if(!((d_front>pre_back)||(d_back<pre_front))){//说明在原景深范围内
MY_LOG("maleijie PreLaserAF pre_code:%...\n",pre_code);
return pre_code;
}
Laserdist=Laserdist*100;
//计算物距
long iamge_laser_dist = EFL*Laserdist/(Laserdist - EFL);
//计算直线方程
long A_Code = A_CODE;//150 code
long A_Obj_Dist = A_OBJ_DIST*100;//5000mm
long A_Distance = EFL*A_Obj_Dist/(A_Obj_Dist - EFL);
long B_Code = B_CODE;//850 code
long B_Obj_Dist = B_OBJ_DIST*100;//70mm
long B_Distance = EFL*B_Obj_Dist/(B_Obj_Dist - EFL);
ALOGE("maleijie PreLaserAF Laserdist %d,iamge_laser_dist %d,A_Code %d,A_Obj_Dist %d,A_Distance %d,B_Code %d,B_Obj_Dist %d,B_Distance %d\n",
Laserdist,iamge_laser_dist,A_Code,A_Obj_Dist,A_Distance,B_Code,B_Obj_Dist,B_Distance);
//long k = (A_Distance - B_Distance) / (A_Code - B_Code);
//long b = A_Distance - A_Code*(A_Distance - B_Distance)/(A_Code - B_Code);//A_Distance - k*A_Code;
//long y = (iamge_laser_dist - b)*(A_Code - B_Code)/(A_Distance - B_Distance);//(iamge_laser_dist - b)/k;


long y=((iamge_laser_dist-A_Distance)*(B_Code-A_Code))/(B_Distance-A_Distance)+A_Code;


MY_LOG("maleijie PreLaserAF Laser Focus Code %d\n", y);
//y=y/100;
pre_front=d_front;  pre_back=d_back;   pre_code=y;//
return y;//lens code
}
int LaserEvents::CalcDepth(int* before,int* after,int laserdist){
long front,back;
front=(FNO*DEL*laserdist*laserdist)/(EFL*EFL*100+FNO*DEL*laserdist);//分子分母都*1000000
back=(FNO*DEL*laserdist*laserdist)/(EFL*EFL*100-FNO*DEL*laserdist);//or ~   ,  分子分母都*1000000
MY_LOG("maleijie CalcDepth before:%d,after:%d\n",(laserdist-front),(laserdist+back));
*before=laserdist-front;
*after=laserdist+back;// or ~
return 0;
}



http://www.ppmy.cn/news/769687.html

相关文章

索尼“踏足”汽车激光雷达

2020年对于激光雷达行业来说&#xff0c;可以称得上拐点之年。而2021年将是激光雷达行业“百花齐放”周期的开始。 去年&#xff0c;首次引入苹果iPhone 12的消费级激光雷达&#xff0c;不仅为手机端带来增强拍摄能力&#xff0c;更强大的3D建模及AR应用&#xff0c;更是让车载…

全像素双核激光对焦拍照是个什么厉害玩意儿

转自&#xff1a;https://zhuanlan.zhihu.com/p/28582582 在了解什么是双核对焦前&#xff0c;先让我们了解一下反差对焦和相位对焦 ①反差对焦 反差对焦的原理是根据焦点处画面的对比度变化&#xff0c;寻找对比度最大时的镜头位置&#xff0c;也就是准确对焦的位置。 镜头从开…

Presto启动报错:No such file or directory

1. 问题描述 1.1 无法通过sudo -u presto启动 使用低版本的Presto时&#xff0c;在root用户下&#xff0c;通过如下命令切换到presto用户、启动Presto服务&#xff1a; sudo -u presto /install_dir/bin/launcher start # 或直接restart&#xff0c;包含stop和start操作 sudo …

谷歌验证码kaptcha使用(包括前端获取获取解析)

1.后端 基于springboot开发。 包结构 1.导入依赖 <!--kaptcha验证码生成器--><dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency> 2.配置类 …

电脑常见问题经验分享

1.电脑c盘满了&#xff0c;不会清理又怕删除系统文件 键盘同时按住winR打开运行框&#xff0c;输入%temp%&#xff0c;全部可以删除&#xff08;系统垃圾&#xff09;&#xff0c;然后再次输入cleanmgr&#xff0c;点击要清理的磁盘即可 2.习惯性把文件放在桌面电脑不到一年就…

Managing Projects with GNU make 学习笔记

1. 简介 makefile定义了一种语言来描述源代码、中间文件及可执行文件之间的关系。如果命令行指定了目标&#xff0c;则更新指定的目标&#xff0c;如果没有&#xff0c;则取第一个目标&#xff0c;也即默认目标。1.1 目标与依赖makefile包含构造程序的一组规则&#xff0c;规则…

Linux 的常用系统及网络命令

&#xff08;转载自http://blog.chinaunix.net/uid-8031155-id-2518955.html&#xff09; Linux下常用命令收集整理 Linux 的常用网络命令 计算机网络的主要优点是能够实现资源和信息的共享&#xff0c;并且用户可以远程访问信息。Linux提供了一组强有力的网络命令来为用户…

ftp命令

ftp命令是标准的文件传输协议的用户接口。ftp是在TCP/IP网络上的计算机之间传输文件的简单有效的方法。它允许用户传输ASCII文件和二进制文件。 在ftp会话过程中&#xff0c;用户可以通过使用ftp客户程序连接到另一台计算机上。从此&#xff0c;用户可以在目录中上下移动、列出…