
首先是导航电路
电路最上端的wifi组件接收的是潜望镜的角度输出信息。所谓的镜控无人机无非就是用潜望镜的角度输来控制无人机的运动。在这里我用两个三角函数组件把潜望镜的角度拆分成x,y上的两个分量。比方说,如果我的潜望镜角度输出是45°∠的话,那么拆分之后的x,y应该是~(0.7,0.7)。
拆分之后的分量紧接着进行下一步运算:乘法组件和内存组件。内存组件在这里存储的是运动向量的模长,也就是无人机的固定航行速度。虽然一个无人机的水平运动速度是没有上限的,但是上浮和下潜的速度受到浮力的制约。为了保证速度在各个方向上都可以合成,这里的内存组件存储值不宜大于无人机的最大上浮速度。比如说我在这里设置的是MEM=14,也就是说,无人机将在各个航行方向上以14km/h的速度航行。那么我们刚才拆分得到的方向向量乘上14就变成了v=(9.8,9.8)。也就是说,无人机的x,y轴速度都应当是9.8m/s。
得出了x,y轴上的目标速度之后,我们就可以与导航台的速度信息输出进行比较。如果速度小于目标速度:踩满油门开(输出100);如果速度大于目标速度:挂满倒挡退(输出-100)。实际上,这里用的是一个很暴力的“乒乓控制”,无人机实际上是在两个极端之间反复横跳。但是由于惯性的存在,它呈现出的实际上是目标速度上下很小范围的波动,看起来就好像是在“定速巡航”一样。
计算出了x和y轴的加速/减速信息之后,我用一组连接组件把他连接成导航台能够直接识别的字符串形式,例如(100,100)并送到导航台的速度输出接口,控制无人机的航行。