【find-color踩坑记录】unity+arduino链接问题

作品链接:https://www.bilibili.com/video/BV16T4y1T71w?from=search&seid=10682243996713984948

到的问题

1.陀螺仪和unity的传输,传输的是数据流,这边接受到的是动态的数据,要如何进行数据同步?

解决方案:后建立缓冲区,并且分割字符串,进行传输。使用正则表达式分离字符串和数据而后转为数组:动态的数据是一个瀑布流,在做split操作的时候,我们是有一个100的队列。不断的split100个队列里的数据,然后频率每1/115200就推出一次,推进或者扔掉(这一步在其他脚本)。

2.传输脚本不稳定,该如何解决?

解决方案:最后找到了效果比较好的插件,自写的脚本不太稳定,能用但是老是会偶尔崩溃。后来找到了这个插件,试验后传输稳定,使用了unity和arduino的传输插件ardity。这个是真的不戳

3.碰撞体旋转过快会出现识别问题,导致穿模?

我们减小了旋转角度,使得识别能够更加稳定。此问题还有可更新的空间。

(四)解决问题心得

  1. unity和arduino代码的链接,使用的时候是在一个频率相同的端口链接,这次我需要的是arduino上传数据,然后unity读取数据。
  2. 在arduino那边是读取陀螺仪的数据,传过来,但是发现每次打开unity后运行arduino,aruidno就会报这个错
  3. 打开arduino之后,再运行unity就会有这个错
  4. 一开始觉得是串口冲突的问题,然后上网找了很多解决串口冲突的问题,比如互斥锁或者临界区。
  5. 但是最后发现是自己对arduino的串口监视器理解有问题:
  6. Arduino的串口监视器是读取了COM3(或者其他串口)里面的数据呈现出来,而不是上传数据的数据显示。arduino的串口监视器会占用串口!并不是上传信息!而是在读取信息流!
  7. 所以说打开arduino的时候,先上传,然后不能打开串口监视器,打开unity的控制台,再进行连接感应器!
  8. 再进行Unity脚本和脚本之间的传输。感觉自己像个傻瓜

然后是数据在unity之间的传输

把要获取的变量权限定义为public 类型 变量.

以下方法任意一个都可以:

一:

   public GameObject 另一个物体;    //监视面板拖拽赋值

另一个物体.GetComponent<脚本>().变量 获得并更改.

二:

将另一个物体命名为"XXX".

GameObject.Find("XXX").GetComponent<脚本>().变量;

三:

   将另一个物体命名为"XXX";

GameObject.FindGameObjectWithTag("XXX").GetComponent<脚本>().变量;

四、调用同一个物体另外一个脚本的变量方法GetComponent<YearAnimation>().Aniamtion();

 

 

  1. 这个游戏使用了陀螺仪的欧拉角来进行控制

a)       姿态角/欧拉角 在数学上理解起来会有点抽象,我也是稍理解一点。

b)       俯仰角θ(pitch):围绕Y轴旋转的。

c)        偏航角ψ(yaw):围绕Z轴旋转的角度。

d)       滚转角Φ(roll):围绕X轴旋转的角度。

  1. 使用正则表达式分离字符串和数据而后转为数组:动态的数据是一个瀑布流,在做split操作的时候,我们是有一个100的队列。

 

不断的split100个队列里的数据,然后频率每1/115200就推出一次,推进或者扔掉(这一步在其他脚本)。

ypr = msg.Split(','); // split message by commas and store in Strin    yaw = float.Parse(ypr[0]);

 

ps:做工正忙的时候,发现键盘用不了,后来到处找为啥的时候发现联想是fn+f8锁键盘用不了,我服了,这个设计也太拉跨了把,为啥要设计这个。这种东西应该搞个提示框以防止误触

posted @ 2021-03-14 15:25  林未知  阅读(289)  评论(3)    收藏  举报