单板计算机(SBC)Tinker板和Arduino DUE上的自制自动驾驶仪

图片

建立自动驾驶仪的想法大约在2年前出现。我想创建一种能够从A点到达B点的全自动设备,该设备可以避免碰撞和在障碍物周围飞行,能够克服干扰区或缺少卫星信号。我还想用鼠标来方便,简单地控制鼠标,因为它是在游戏(策略)中借助点来控制飞机运动的。我必须像本文一样从头开始,所以如果有错误,请在注释中写上。我将按顺序开始。



硬件


最初,我不知道该项目使用哪种硬件更好,但最后我得出的结论是,最佳选择是一堆微控制器(MK)+单板计算机。 MK解决了飞机(LA)的稳定问题,其在给定航向和高度上的移动问题,而单板计算机解决了沿路线的导航和移动问题。由于计划是避免碰撞,因此计算机必须具有足够的功能来处理来自障碍物检测传感器的信息,并且紧凑且当时价格不太昂贵,TinkerBoard最适合用于此描述,因此Raspbery为3B +,并且性能较差。作为MK,我想拥有一个与arduino兼容的控制器,因为arduino有大量现成的草图,因此选择使用DUE 84 MHz,32位ARM Cortex-M3,因为他是最厉害的,必须补偿我的直达)。

最初,我计划将带有Majevik滤波器的MPU 9250用作方向传感器,其结果非常好。此选项的主要优点是所有计算,包括传感器(加速度计,陀螺仪和磁力计)的校准都在MK上进行。但是有一个问题,滤波器不能很好地补偿线性加速度,线性加速度在冲击或急剧变化的过程中经常发生。这用俯仰和横滚的读数表示,在加速时它们开始浮走,并通过比例微分(PD)调节器,尤其是微分部分,浮起了问题。因此,我必须使用带有已实现的BNO 055过滤器的传感器。

与MPU 9250不同,BNO具有集成的Cortex M0 MK,可立即计算以Euler角表示的方向,绝对方向的正交度并计算线性加速度,尽管该传感器也有许多缺点。该传感器的主要问题是自动校准,或者说无法关闭,这是该传感器的“合适”功能,并且这种校准具有令人不快的特性,有时甚至在一个不动的地方也突然消失。这主要反映在该传感器的磁力计上的偏航角上,并且应该显示出指向磁北极的方向(航向),但是有时它会显示100度的磁晕,然后在校准后可以返回)))。在其他方面,使用GPS同步仍然可以解决路线问题。否则,传感器工作正常,他总是正确地确定俯仰和横滚,并且线性加速度不会对他的工作产生很大影响,除非当然加速度不会超过2G,因为该阈值用于测量重力矢量并补偿陀螺仪的漂移。

其余的熨斗如下:带USB输出的GPS Ublox Neo M8N,
BMP 280气压计,用于接收地面可用性和更精确垂直速度的HSCR 04声纳,用于存储校准数据和PID设置的EEPROM 24c16,用于发送的Neoway M509E GSM模块发生事故时有关飞机坐标的消息。

功能图如图1所示:

图片
图1-自动驾驶仪功能图

软件


对于软件开发,我将QT与QT Creator IDE一起使用。他对我来说是最熟悉的,而且还得益于跨平台功能,因此我可以在带Debian的单板PC和带Windows的台式机上运行我的程序。为了开发微控制器软件,使用了Arduino IDE。为了清楚起见,我将尝试介绍图2中的所有部分。

图片
图2.-AP的体系结构(为将来添加BNO 080)。

1)图形控制界面-是卫星地图,借助该地图可以控制飞机。卫星图像显示程序本身不是我的,它是我在这里偷的(它的作者也试图做类似的事情)。

您可以使用点(标记)或WADS按钮控制飞机。要控制点,必须在飞行路线上放置绿色标记,将它们放在鼠标(RMB)上,然后单击加载路径,或使用(红色)即时移动标记(LMB),然后飞机从当前位置飞行到该点,操作时需要设置手动点击”复选框中的意外点击。

所有标记参数均在表格的相应字段中输入,您可以通过双击鼠标中键来删除标记,而这些标记仍将保留在飞机的内存中,您必须使用Delete route按钮将其从内存中删除。达到目标后,就像飞机的策略一样,它将围绕它旋转。按钮控制WADS使用PD控制器直接控制方向盘。当每个按钮被按下时,一个值被输入到控制器的输入端,例如,当按下S时,音高30,释放时为0。当按下W -30等时。 WADS使用以下复选框打开:“手动”,“按钮”。该模式有助于在启动之前检查所有舵的功能。图形界面在笔记本电脑上运行,使用TCP套接字将来自图形界面的控制命令传输到内核。图形控制界面如图3所示:

图片
图3-图形管理界面。

2)自动驾驶仪的核心是在TinkerBoard单板计算机上计算的软件部分。内核负责沿路线的导航和移动。为此,将GPS传感器连接到计算机。使用它,您可以获取飞机的当前位置(纬度和经度),并将此位置与飞行路线中的位置进行比较。作为该操作的结果,获得了到目标的方位角,并将其与其余飞行参数一起发送到微控制器。将来,内核可以配备其IMU传感器以实现ANN。例如,您可以使用BNO 080进行积分,加速和获取速度,并通过积分速度来获取距离。从ANN接收到的距离将需要转换为GPS坐标系(纬度和经度),以用于计算方位角。

在与卫星的通信暂时中断的情况下,可以将这种ANN与GPS传感器结合使用,以使飞机不会错失“转弯”点。在使用GPS进行操作时,ANN将通过其读数不断进行调整,并填补GPS传感器更新周期之间的间隔。同样,应通过更改点的高度并创建计算出的方位角的偏差来调整机器视觉算法或SLAM。路由计算完成后,内核将发送UART数据:方位角,高度,攻角,点的类型以及是否有必要围绕该点旋转。

3)微控制器执行核心命令,MK的主要任务是在给定的高度上遵循给定的路线。为此,MKU配备了IMU BNO 055传感器,bmp 280气压计和声纳。对于沿航向的移动,使用从铁心获得的方位角,将其与当前速率进行比较,并将由此产生的不匹配情况传输到PD控制器进行偏航和侧倾。俯仰控制由2个PD控制器执行:第一个确定当前高度与预定高度的不匹配,并输入到第二个控制器的输入中,而高度控制器的输出则受当前迎角的限制以控制其高度。如果在图形界面中选择了要起飞或着陆的点类型,则使用声纳确定高度。他的证词与气压计的数据结合在一起,最准确地确定到地面的距离和垂直速度。除了基本功能外,MK还收集有关IMU传感器操作,当前方向和高度的遥测信息,并将其传输到内核,在内核中,这些数据由GPS数据补充并进入图形界面。

结论


目前,自动驾驶仪仍处于飞行测试阶段,尚未完全配置。但是,我只花了两个开始,还没有拿到调节器的系数。

总的来说,PD调节器对我来说似乎不稳定,我想用更可靠的东西代替它们,尤其是因为它们已经过时了。也有必要用四元数中的计算替换欧拉角中的计算,因为 当飞机以大于120度的角度转弯并在风中飞行时,后者的行为会更加稳定。

航空电子设备的详细信息


图片



链接到毒药的源代码(带有库), Github仅提供源文件,但更新

All Articles