雷达被坑的点-项目

1. Radar 程序关掉,雷达未关闭

项目需求,中控通过调用路径来开关我的雷达程序。

现场对接过程中,中控直接杀掉后台进程,雷达除非发送停机命令或者断电才会停止转动。对方未开发程序,直接调用程序路径,导致雷达程序关掉了,但没有给雷达发送停止转动指令。结果:程序关掉了,但相应的给雷达发送关闭命令的程序未执行,雷达一直转,也是所谓的程序异常退出。

采用的思路有:

  1. 程序中写 OnApplicationQuit ,OnDestroy ,在其中给雷达发送关闭命令,再程序退出,测试结果杀掉进程的时候都没有调用这两个函数,放弃。
  2. 自己写UDP,TCP,用另一个通信程序  CloseRadar,给 Radar 程序发送关闭命令,Radar 程序接收到命令后,先关雷达,再关程序,测试结果,tcp 通讯导致程序很卡,强连接,放弃,UDP 通讯想的是中控关闭雷达程序的时候直接调用 CloseRadar程序给Radar 程序发送命令,发送完,Radar 程序接收到信息后,关闭雷达,关闭程序,然后CloseRadar程序延迟几秒自动销毁,结果还是直接先杀掉了雷达程序,CloseRadar程序后执行,所有没有通讯成功,放弃。
  3. 自己检测进程,进行雷达程序杀进程,一样的效果,程序关闭,雷达没关,放弃。
  4. 最后思路:中控杀掉雷达程序后,和串口失去连接,再写一个程序,连接这个串口,给串口发送关闭命令,不使用通信,原理,只要Radar 程序不占用串口,CloseRadar程序就能连上这个串口给他发送命令,即表面上是两个程序控制一个串口,实际还是只能一个程序连接这个串口,前一个必须断掉。
  5. 所以,不管任何情况,想要雷达停止转动,在Radar 程序关掉和串口断开连接后,必须调用 CloseRadar 给串口发送停止命令。

2. 其中涉及雷达扫描数据和现场情况要重合,即该响应的地方响应,不该响应的地方不响应。现场扫描响应部分为正六边形。

   思路:

  1. 原来的雷达监测,已经做到将雷达扫描的点使用 Image 进行标记出来。此处触发使用 Image 添加 Box Collider2D 碰撞器,以及 Rigibody2D 组件,去掉重力。由于现场为六边形触发区域,所以触发区域使用按钮组件,添加了 PolygonCollider2D 多边形碰撞器,勾选 Trigger,触发即可,同时添加 Rigibody2D 组件,去掉重力。

  2. 同时通过标记范围过滤掉六边形之外的点,只显示六边形内的点,加上上面的碰撞器触发,使用两种方法确保触发区域准确性。

  3. 现场调试:由于雷达扫描数据和整个画面中心点无法完全重合,雷达开启后,需要将雷达的整个数据进行移动旋转和画面正中心匹配重合。解决办法:雷达开启扫描,在六边形中心点以及靠近中心点左边的点放置物体,雷达扫描后,可以看到这两个点。RunScale.cs 脚本中使用鼠标左键和右键点击这两个点,生成两个 Image ,记录这两个 Image 的位置,point,center 两个点,获取两个点的 x 差值 disX。测量真实尺寸屏幕中心点到左边点的距离 length。length/disX 就是所有点需要缩放的倍数。将 center 中心点的 x,y 坐标以及缩放倍数存储到StreamingAssets 文件夹中存在 Config.txt 配置文件中。

  4. 第二次运行的时候,从 Config.txt 文件中进行读取数据。RunScale.cs 中 centerPos 分辨率的一半,标记出中心点在中间的位置。RunSerial.cs 中,Start 中根据这个中心点,计算六边形的六个顶点,使用 ForJudgePoint 某个点是否在六边形内,用到这六个顶点。

  5. 接之前使用 Image 显示点,方法为 RepeatShowImg,其中每个点的 x,y 值根据从 Config.txt 文件中读取到的数据,先减去保存的 center 的 x,y 值(为偏移量),再乘以缩放值,缩放完成后加上 centerPos 的 x,y 值,将中心点的位置调整为与屏幕正中央重合。再通过 ForJudgePoint 判断得到的这些点是否在六边形内,通过 Image 显示重来,再通过前面的 BoxCollider2D 和 PolygonCollider2D 碰撞检测,在六边形内同时碰撞器出发了则就是按钮响应。

  6. 重点:点的移动以及与六边形现实尺寸的缩放和匹配。判断某个点是否在六边形内。

  7. 如果 Config.txt 文件中没有数据,则第一次运行的时候扫描到的点都会显示出来,用于确定缩放比例,如果有数据,只显示六边形内部的点。

画图帮助理解,图私。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值