记录从无人机上学到的东西

UAV: Unmanned Aerial Vehicle

项目的目的

分为森林救火和森林巡逻,我被分在森林巡逻部分。主要是让飞机按一定轨迹在操场上飞行,以z形路线飞过一个操场。森姐救火则是在上述基础上加上使用视觉识别找到一个红色的正方形。我在该小组中负责通信部分。

数传通信

主要的任务是将无人机的xyz及三个偏转角通过数传发到地面站,地面站方面会有同学根据数据进行3d绘图。

一开始读代码思路不对,一心想着找gps的数据,于是找到了Sensor,通过将整个sensor的数据取出来,然后获取其中的数据。后来发现库里有个MeasureSystem,可以直接获取xyz及偏转角。于是改写为直接调取。

获取数据后就是发送,发送是利用飞控的Uart与数传进行连接。库中提供了Uart_Send函数,接受一个数组和一个长度作为参数,但是该数组只接受字符,因此要将实际数据转为字符后再发送,思路是将 原始数据%10+‘0’ 从而得到其ascii码值,同时用switch来遍历xyz和三个偏转角。每6个数据作为一组,一组中的数据之间使用‘,’分割,不同组之间使用‘@’分割。期间对原数据进行处理时要记得将得到的某个数据进行数组反转(再看一眼上面对原始数据处理的思路),因为这个问题还出过bug……。

再具体一点,原始数据都是double 或者 float类型,单位都为厘米。一开始我在将获取的数据传到中间的handler时,将其转为(int),然后再直接处理,后面我在转为(int)前,让原始数据的右值*PRESION,设定一个精度,精度取100,从而获得了0.1mm级别的精度。但后面发现这个精度的意义不大了,于是又改回了1。

再记录一下硬件的问题:

  1. 电调插反了,折磨了搞硬件的兄弟一下午
  2. 图传始终没有图像,一直以为是电源线的问题,后面发现是插在电脑上的输入线没有插稳
  3. 飞到一半炸机了,排查半天发现是当时调试的太久,没有注意到电量。
  4. 几乎相同的坐标发送代码(除了版本问题外,对数据处理的方式相同)在A9上正常运行,在TI上发出的数据是乱码,改用发送固定值之后,电脑端收到了稳定的乱码。更换数传和数传连接线之后问题仍然存在。直到写下此文时依然未解决。