【实例简介】手机相机识别实现ar测距,至少三年以上开发经验才能跑通

【实例截图】


文件:590m.com/f/25127180-490561034-8afed0(访问密码:551685)

【核心代码】

using UnityEngine;
using UnityEngine.XR.ARFoundation;

/// AR尺子AR功能管理
public class ARRulerFoundtion: ARObjectSceneBase
{
/// 判断是否识别到平面
private bool m_IsPlaneChanged = false;

/// <summary>瞄准器模型</summary>
private GameObject m_TakeAim;
/// <summary>屏幕中心位置</summary>
private Vector2 m_ScreenCenter;/// <summary>Awake</summary>
public override void OnAwake()
{base.OnAwake();m_ScreenCenter = new Vector2(Screen.width / 2, Screen.height / 2);m_TakeAim = Instantiate(Resources.Load("Prefabs/TakeAim") as GameObject, transform);m_TakeAim.name = "TakeAim";m_TakeAim.SetActive(false);
}/// <summary>Update</summary>
public override void OnUpdate()
{base.OnUpdate();if (isSupportAR) Raycast(m_ScreenCenter, UpdateTakeAimPosition);
}/// <summary>AR初始化完成</summary>
public override void OnInitARFinish()
{base.OnInitARFinish();Debug.Log(GetType() "/InitARFinish()/初始化AR完成!");ARRulerSceneManager.Instance.uIManager.FindPanelPanelSetActive(true);planeEffectManager.SetAllPlanesActive(false);
}/// <summary>平面识别发送改变</summary>
public override void OnPlanesChanged(ARPlanesChangedEventArgs obj)
{base.OnPlanesChanged(obj);if (m_IsPlaneChanged) return;m_IsPlaneChanged = true;ARRulerSceneManager.Instance.uIManager.ButtonsPanelSetActive(true);ARRulerSceneManager.Instance.uIManager.FindPanelPanelSetActive(false);
}/// <summary>更新瞄准器的位置信息</summary>
private void UpdateTakeAimPosition(bool hit, ARRaycastHit aRRaycastHit)
{m_TakeAim.SetActive(hit);ARRulerSceneManager.Instance.uIManager.AddButtonInteractable(hit);ARRulerSceneManager.Instance.uIManager.TakePhotosButtonInteractable(hit);if (hit){m_TakeAim.transform.position = aRRaycastHit.pose.position;m_TakeAim.transform.rotation = aRRaycastHit.pose.rotation;Vector3 size = Vector3.one;float value = 1;if (aRRaycastHit.distance < 1) value = 3.3f;else if (aRRaycastHit.distance < 2) value = 4;else value = aRRaycastHit.distance * 2;m_TakeAim.transform.localScale = size * value;}
}

以下内容无关:

-------------------------------------------分割线---------------------------------------------

前面我们对IS25WP系列Flash的Dummy Cycle设置很了解了,那么IS25LP系列Flash是不是一样的设计呢?我们查看IS25LP064A数据手册来确认一下。

我们找到如下Read Dummy Cycle与最大工作频率的对应表,从表里可以看到当IS25LP工作在Fast Read Quad I/O模式时,默认的6个Dummy Cycle适用的最大工作频率是104MHz(这点上与IS25WP系列是一致的),不过与IS25WP系列不同的是IS25LP系列Dummy Cycle仅有四档(2bit设置,对应4/6/8/10四种值),而IS25WP系列Dummy Cycle有十五档(4bit设置,对应1-15取值),所以Dummy Cycle设计在IS25LP上其实是精简版。

二、如何更改Flash里的Dummy Cycle?
  意识到IS25LP与IS25WP在Dummy Cycle设计上的差异,改起来就容易了。我们继续看Flash数据手册,IS25LP064A内部有个8bit的Read Register,其bit4-bit3是Dummy Cycles设置(精简设计一),寄存器类型里标明仅易失性一种属性(精简设计二)。

在IS25LP064A的指令集表里,可以看到专门写Read Register的指令,即SRP指令,注意指令值就是唯一的0xC0(精简设计三)。

分析到这里,额外的小工程修改Dummy Cycle是不可能了,只能老老实实在i.MXRT每次启动时直接借助FDCB启动头里的设置用SRP指令更改Flash的Dummy Cycle,即如下所示:

// 设置Dummy Cycle数
#define FLASH_DUMMY_CYCLES 8
#define FLASH_DUMMY_VALUE 0x2
// 写Read Register时序在LUT中的index(可自定义位置,但不要占BootROM预设的几个时序位置)
#define CMD_LUT_SEQ_IDX_SET_READ_PARAM 7
// BootROM中预设的LUT命令时序的index
#define CMD_LUT_SEQ_IDX_READ 0
#define CMD_LUT_SEQ_IDX_READSTATUS 1
#define CMD_LUT_SEQ_IDX_WRITEENABLE 3

const flexspi_nor_config_t qspiflash_config = {
.memConfig =
{
.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
.csHoldTime = 3u,
.csSetupTime = 3u,
// Enable Safe configuration
.controllerMiscOption = 0x10,
.deviceType = kFlexSpiDeviceType_SerialNOR,
.sflashPadType = kSerialFlash_4Pads,
.serialClkFreq = kFlexSpiSerialClk_133MHz,
.sflashA1Size = 8u * 1024u * 1024u,
// 使能Flash寄存器配置操作
.configCmdEnable = 1u,
.configModeType[0] = kDeviceConfigCmdType_Generic,
// 指示Flash寄存器配置时序在LUT中index
.configCmdSeqs[0] =
{
.seqNum = 1,
.seqId = CMD_LUT_SEQ_IDX_SET_READ_PARAM,
.reserved = 0,
},
// 设定Flash寄存器配置值(这里就是写入Read Register的值)
// Note1: 这里写入Read Register的值在IS25WP系列和IS25LP系列有区别
.configCmdArgs[0] = FLASH_DUMMY_VALUE << 3,
.lookupTable =
{
// Fast Read Quad I/O
[4CMD_LUT_SEQ_IDX_READ] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
[4
CMD_LUT_SEQ_IDX_READ + 1] = FLEXSPI_LUT_SEQ(MODE8_SDR, FLEXSPI_4PAD, 0x00, DUMMY_SDR, FLEXSPI_4PAD, FLASH_DUMMY_CYCLES-2),
[4*CMD_LUT_SEQ_IDX_READ + 2] = FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0x00),

                // READ STATUS REGISTER[4*CMD_LUT_SEQ_IDX_READSTATUS]         = FLEXSPI_LUT_SEQ(CMD_SDR,   FLEXSPI_1PAD, 0x05, READ_SDR,  FLEXSPI_1PAD, 0x01),[4*CMD_LUT_SEQ_IDX_READSTATUS + 1]     = FLEXSPI_LUT_SEQ(STOP,      FLEXSPI_1PAD, 0x00, 0, 0, 0),// WRTIE ENABLE[4*CMD_LUT_SEQ_IDX_WRITEENABLE]        = FLEXSPI_LUT_SEQ(CMD_SDR,   FLEXSPI_1PAD, 0x06, STOP,      FLEXSPI_1PAD, 0x00),// Flash寄存器配置时序(这个时序需要上面READ STATUS, WRITE ENABLE的配合)// Note2: 这里写入的指令在IS25WP系列和IS25LP系列有区别[4*CMD_LUT_SEQ_IDX_SET_READ_PARAM]     = FLEXSPI_LUT_SEQ(CMD_SDR,   FLEXSPI_1PAD, 0xC0, WRITE_SDR, FLEXSPI_1PAD, 0x01),[4*CMD_LUT_SEQ_IDX_SET_READ_PARAM + 1] = FLEXSPI_LUT_SEQ(STOP,      FLEXSPI_1PAD, 0x00, 0, 0, 0),},},
.pageSize           = 256u,
.sectorSize         = 4u * 1024u,
.blockSize          = 64u * 1024u,
.isUniformBlockSize = false,

};

手机相机识别实现ar测距(AR尺子)相关推荐

  1. 安卓手机测评_iPhone有的AR测距功能,安卓也得安排上

    「本期内容标签」安卓 iOS 电脑 小程序 网站 游戏 教程相信不少iPhone用户自带一项AR功能,可以用手机相机来测量各种物体的长度或者高度,而此功能对于安卓用户来说,其实也是可以有的.谷歌的AR ...

  2. AR.js开发问题详解(二维码识别不出来及AR二维码如何进行训练)

    AR.js开发问题详解(二维码识别不出来及AR二维码如何进行训练) 1.      大家碰到的很多都是二维码识别不出来的情况. 原因:周围环境的光太强或太暗,遮挡了二维码的信息,摄像头识别不到全部的信 ...

  3. SwiftUI + RealityKit 实现简单AR测距

    Xcode 12.5.1 SwiftUI ARKit RealityKit MacOS 11.5.1 本demo只是为了学习realitykit的使用,实际如果制作AR测距,推荐使用SceneKit来 ...

  4. ARFoundation系列讲解 - 71 AR测距一

    (图片来源于网络) 一.案例工程开发环境(建议保持一致) 系统环境:Mac.Win 开发软件:Unity 2019.2.4f1.Xcode 10.3(10G8) 测试环境:支持ARCore的安卓手机. ...

  5. 打开商场元宇宙新玩法:AR导航+AR互动营销

    随着"元宇宙"概念大热,预示着互联网进化的未来形态初露端倪,也为实体商业升级提供了一条新思路,元宇宙(Meta-verse)是指:一个集体虚拟共享空间,由虚拟增强的物理现实和物理持 ...

  6. 分贝测试发型软件,‎测量工具-分贝噪音测试尺子角度AR测距 im App Store

    产品功能介绍: 1·AR测量平面 不仅仅针对一个平面,本功能可以针对物体多角度进行测量. 2·AR测量高度 透过AR测量高度可以多维度全方面同时多点位进行测量,一目了然. 3·AR测量宽度 拖过AR工 ...

  7. 分贝测试发型软件,‎测量工具-分贝噪音测试尺子角度AR测距 trên App Store

    产品功能介绍: 1·AR测量平面 不仅仅针对一个平面,本功能可以针对物体多角度进行测量. 2·AR测量高度 透过AR测量高度可以多维度全方面同时多点位进行测量,一目了然. 3·AR测量宽度 拖过AR工 ...

  8. 【毕业设计/Matlab系列】基于PCA和BP神经网络的人脸识别系统(基于AR人脸库)

    Date: 2022.5.30 文章目录 前言 1.算法原理 2.实现效果 3.测试matlab代码 前言 在大学毕业设计的时候,在毕业设计中实现了基于PCA和BP神经网络的人脸识别系统,采用matl ...

  9. 手把手带你写AR应用--AR尺子预览

    文章: AR尺子--简介 AR尺子--预览 效果:预览并渲染数据 目录: 1. 前序 本篇文章较长,目的是可以在手机中预览数据.希望读者能够认真读下去.不管你是刚接触ARCore以及OpenGL的 程 ...

最新文章

  1. 数据结构与算法——并查集(不相交集合)
  2. gbdt降低学习率可以实现正则化效果呢
  3. 读书印记 - 《异类:不一样的成功启示录》
  4. Java获取文件路径获取访问路径、域名、项目名、请求入参
  5. 边缘化搭建DotNet Core 2.1 自动化构建和部署环境(上)
  6. rhel5.3服务器安装centOS的yum源
  7. spring源码-第四个后置处理器
  8. 如何使用 OpManager 进行磁盘空间监控?
  9. 用图片来搜索 教你玩转Google按图搜索
  10. 春暖花开,放慢脚步,享受生活!
  11. [经验] 我想加入阿里,我该怎么做
  12. http://free.logomaker.cn/tools/icoMaker.aspxICO图标在线制作 -- 为你的网站/软件制作图标(ICO)
  13. 重庆航天职业技术学院计算机系在哪个校区,重庆航天职业技术学院江北校区怎么样...
  14. 成为大数据工程师需要具备什么能力?发展前景好么
  15. IT界被忽视的小可爱们:致敬QA
  16. Unity动画☀️四、动画导入的三种模式:Legacy、Generic 与 Humanoid
  17. GoLand+Delve(dlv) 远程调试
  18. 浅谈香港服务器的优势
  19. JAVA练习题:求税后工资问题
  20. 项目管理-计算专题(三点估算、PERT估算)

热门文章

  1. 三年级计算机绘画第二课堂教案,美术第二课堂活动的总结.docx
  2. 应用宝提示APP强制,频繁,过度索取权限问题
  3. 弗里德曼张五常施蒂格勒对“口味”“偏好”“爱好”分析的不同意见?
  4. (转)图片格式与设计那点事儿
  5. 好污!杜蕾斯:一份2017年度账单和床上总结求认领
  6. css先涂橄榄再涂色修,css橄榄精华好用吗?css橄榄精华评测
  7. EMV卡复位应答的时间特性 ---ISO7816协议
  8. 【转】干货分享|给正在构思论文的同学们分享个实用小技巧(一般写作,制作PPT也适合)
  9. mysql中left join的误解及笛卡尔积解释
  10. 记录-小程序previewImage无法预览本地图片