精华内容
下载资源
问答
  • 四轴无人机开箱

    2021-01-10 22:31:13
    加粗样式四轴无人机开箱
    展开全文
  • 随着机器视觉技术的成熟发展,无人机搭载视觉模块进行巡线成为技术热点,设计了以STM32为主控芯片,在拟定实验环境下采用四轴无人机设计完成其自主巡线、视觉跟随等功能。通过视觉模块OpenMV实现巡线过程中的线检测...
  • 四轴无人机毕设开始

    2021-03-07 11:02:12
    毕设四轴无人机 考研结束了,不出意外考的很差,老师在考试之前就说过我有些浮躁,我现在有点怀疑自己的能力了,等二战吧,毕业论文开始了。 这次采用的是匿名科创的拓空者飞控,stm32f407主控板,其实我大二就搞过...

    毕设四轴无人机

    考研结束了,不出意外考的很差,老师在考试之前就说过我有些浮躁,我现在有点怀疑自己的能力了,等二战吧,毕业论文开始了。

    这次采用的是匿名科创的拓空者飞控,stm32f407主控板,其实我大二就搞过四轴,当时能力实在不够也没向同学请教,所以就失败了

    项目任务
    学习姿态检测和处理算法,如果换个板子或者算法希望能熟练上手
    完成无人机的自主任务,能实现前进、后退、转弯、上升下降设定高度。
    设想的是做成一个个函数接口,直接设定参数就行。如果时间充足的话,我再把摄像头加进去这样就能巡线识别目标了。

    3月到4月组装并调试好无人机能遥控器控制飞行。

    4月到5月写程序并调试。

    5月到6月写好论文。

    展开全文
  • 四轴无人机完整设计方案概述: 四轴无人机设计是无人飞行器(UAV)的流行设计。它包括一个飞行控制器和4个电子速度控制器(ESC),每个电机一个。飞行控制器配备一个无线电,用于接收飞行员和惯性测量单元(IMU)发出的飞行...
  • 飞越650四轴无人机安装全程详解(多图)

    万次阅读 多人点赞 2016-10-22 23:25:21
    本文详细介绍了飞越650Sport四轴无人机安装全过程,并对安装过程中的注意事项做了总结说明,可以作为安装650四轴无人机的参考教程来使用,希望对想要入魔的童鞋有所帮助。试飞前的检查与试飞、调参步骤将另外总结...

    飞越650四轴无人机安装全程详解(多图)



    本文根据自己的安装实际过程,总结了开箱后一个比较合理的650四轴无人机安装顺序,以及各个步骤的注意事项,主要内容包括:

    • 系统基本配置
    • 机架安装
    • 安装机臂与机架上板
    • 安装机架底板与挂载架
    • 安装折叠起落架
    • 电子系统安装
    • 安装马达与电调
    • 安装飞控与电子设备
    • 安装锂电池与云台
    • 安装螺旋桨

    一、基本配置


    本次安装的基本配置如下:

    • 机架:
    • 飞越640sport机架×1

    •  动力:
    • 朗宇4110S 380kv马达×4
    • 好盈铂金30A电调×4
    • 锂电池:4S 5200mAh 35C
    • 螺旋桨:1245正反桨

    •  飞控与GPS:
    • PixHawk飞控×1
    • PixHawk电源模块  ×1  
    • M8N GPS  ×1 
    • GPS折叠支架  ×1 
    • 飞控减震板×1

    • 遥控器:
    • FUTABA T14SG遥控器×1
    • R7008SB接收机×1

    • 云台:
    • 飞宇mini3D pro×1

    • 数据传输与图像显示:
    • 3DR无线数传×2
    • 5.8G 2000mw TX58-2W图传×1套
    • MiniOSD ×1
    • 模拟视频显示器×1


    二、安装机臂与机架上板


    (1)将机臂与碳管固定套安装好,使用嵌入式圆头内六角螺丝固定。

    (2)将机臂与碳管折叠定位座固定。

    (3)将碳管折叠定位座用圆头台阶内六角螺丝固定在机架上板背部对应位置。

    (4)将四个白色六角铝柱固定到机架上板的背面。


    三、安装机架底板与挂载架


    (1)将细碳管硅胶减震圈进碳管固定座,一共4个,2黑2橙色。

    (2)将2根细碳纤管分别插入1黑1橙两个碳管固定座,并调整好长度与间距。

    (3)将碳管固定座使用圆头内六角台阶螺丝(M2.5×6)固定到机架底板相应位置。

    (4)将塑料的云台挂架(另购云台附带)和电池固定侧板挂架安装到两根细碳纤管上。


    注意:为方便安装其他设备,电池固定侧板板可以最后再装。


    四、安装折叠式起落架


    飞越650sport两个折叠式起落架带自动折叠功能,并且已经装好马达,只需要将起落架支架(竖起来的那两根)和底部脚架(水平放置与地面接触的两根)使用T型套管和紧定螺丝(无头螺丝)固定成T型,然后在底部脚架上装上4个橡胶脚架避震套,放一边备用。

    安装时将起落架安装到机架底板两侧的固定位,然后再盖上机架上板并固定对应位置的4个螺丝。为了方便需要安装电子设备,我们先不装起落架。

    需要说明的是,飞越650sport的T型套管无法完全固定住两根细脚架,需要打胶或使用长一点的紧定螺丝,我的处理方式是在细管中心位置用透明胶加粗后插入T型套管。在活动部位需涂抹润滑油,否则可能出现收放不自如的情况。

    上一张机架安装好的效果图。


    然而还远远没结束...下面是电子系统的安装,而位置和安装方式都可按自己的喜好而定,以下是我的装法。


    五、安装马达与电调


    (1)马达安装在马达座碳纤板一侧,而电调安装在马达固定座的另一侧,下图是预装前的摆拍。


    (2)朗宇4110s的3根输入线很长,留6cm左右,其余剪掉。并接上3.5mm香蕉头,用热缩管封装好,剪掉的线可以做电调电源的延长线。


    (3)马达安装在马达固定座正面(黑色碳纤板一侧),电调安装在马达固定座背面(黑色或红色塑料一侧)。先将马达固定座上的黑色碳纤板拆下来,与马达固定孔对齐后上好四个M3*5螺丝。

    (4)将电调的输入电源线延长,并用热缩管封装好。电调电源延长线的长度应该考虑到安装完成后留有足够的距离焊到机身上的8个供电接口上(分别位于力臂末端两侧)。为了确保不会因热缩管破裂而短路,将正极红线的接头位置套上了两层热缩管。


    (5)马达固定座背面安放好电调,电调输入控制与电源线穿过马达固定座和碳纤力臂到达机身背板中心位置。


    (6)使用两根捆扎带穿过马达固定座的捆扎带定位孔正好能将电调固定在马达固定座背面,捆扎带暂时不要绑紧,为下一步要讲马达的电源线接头穿出来留下空间。

    (7)将固定好马达的马达固定座碳纤板安装回马达固定座,并将3根马达线从马达固定座端头缝隙中穿到电调一侧。

    (8)连接好电调输出3根线与马达输入的3根线(注意:红、蓝、黑任意接,如果马达旋转方向不对,可任意交换两根线使马达转向会反转),接好后再经电调捆扎带锁紧剪掉多余的。


    (9)将电调电源接口焊到机身面板上的供电端子上(红正,黑负)。由于电调控制线也不够长,加上4根舵机延长线以方便接飞控。


    焊接时,先用焊锡丝给裸露的电线部分以及背板上的供电端子上锡(图),然后用镊子将线头贴到到端子上,再用烙铁融化两部分焊锡使其融为一体,这样比较牢固美观。


    马达旋转方向参考下一节。如果旋转方向不对,将马达与电调的任意两根连线交换连接即可改变旋转方向。

    (10)在机架上板的电池端子上自制一个XT60母头接口,并焊好用于接电池。


    (11)现在可以将4个马达固定底座与4根碳管固定紧了。记住要将底座顶到头,用尺测量力臂长度使其保持一致后再拧紧螺丝,否则会影响飞行稳定性。


    六、安装飞控


    (1)先根据PixHawk飞控的安装图(如下)与无人机的前向,确定四个马达和电调的编号。注意:PixHawk飞控连接的1~4号电调、马达的顺序与飞越650sport上板上印制的编号不一致!!但马达旋转方向与上板上印制的是一致的,因此,打印4个编号,按照飞控的要求贴在机架上板的4个对应的角上,同时在电调控制线的延长线上也贴上编号,以防接错飞控端口。





    (2)飞控使用3M魔术贴粘贴在飞控减震板上,方便拆卸校正。

    (3)飞控减震板通常使用3M胶直接粘到机架上板的中心位置,但我觉得这样粘不方便以后调整位置,所以使用4个M2.5单头尼龙柱先接到机架上板,再通过螺丝将减震板固定到尼龙柱上,这样既美观又方便拆卸。


    (试飞一次回来检查时发现尼龙柱强度不够,螺丝部分严重变形,立马换成了纯铜柱,这是后话了。)

    (4)将蜂鸣器使用尼龙螺丝固定在机架上板的边缘。

    (5)将飞控粘上减震板,将1~4号电调控制线的延长线依次接到飞控上的1~4号MAIN OUT(主输出)端口。

    (6)将GPS支架使用M2.5内六角螺丝固定在机架右侧脚架固定螺孔上,正好将GPS和脚架一并固定,美观大方。

    (7)将PixHawk的电源模块和安全开关、GSP都接好,安全开关放在方便操作的位置。

    (8)接收机和数传都放在靠近飞机尾部,藏在机架上下板之间,又能将天线露出来。



    七、安装锂电池和云台


    (1)先将前面准备好的脚架安装到机架底板,左右两个脚架的控制线分别接到脚架控制盒两侧接口,脚架控制盒直接接供电端子(650脚架可接受3~6S,12.6V---25.2V锂电池供电),脚架控制盒的控制线接到接收机某个不同的通道(ch7或者ch8),在遥控器上设置该通道对应某个拨档开关(例如T14SG的SG开关)即可通过SG开关控制脚架的收放了。



    (2)将机架的底板和上板固定好,并检查所有螺丝是否已经安装上并拧紧。

    (3)在电池挂架上装好电池侧板,并使用反扣魔术粘扎带固定前、中、后三个位置

    (4)使用捆扎带装上锂电池,同时锂电池和电池侧板上可以使用3M魔术贴粘合。

    (5)调整电池安装板的前后位置,使得用手从中间拿起UAV时,重量能前后保持平衡。


    (6)在前端的云台挂架上安装云台。不过建议试飞调参好,确定能稳定飞行了再加挂其他东西,你懂的。


    八、测试马达转向后安装螺旋桨


    调整、校准好所有参数后再安装螺旋桨

    调整、校准好所有参数后再安装螺旋桨

    调整、校准好所有参数后再安装螺旋桨

    (1)测试马达转向。不装桨,测试马达转向是否符合要求,然后装桨准备最后调试后试飞。(假定已经校准过电调行程)测试的具体步骤为:连接好飞控所有连线;遥控上电;飞控上电;等待飞控自检完毕;打开安全开关(长按至红色LED常亮);遥控油门拉到底,航向(方向)舵打到最右,停留5秒;听到唰唰声马达启动了;使用一张小纸条接近旋转中的马达,测试该马达的转向是否符合要求,逐台检查。如果不符合要求,油门降到最低,方向舵打到最左等待5秒锁定遥控,马达停机,关闭安全开关(至红色LED闪烁),交换任意两根转动方向出错的马达与电调的连线。


    (2)安装螺旋桨

    直接将螺旋桨套在马达桨座上,用两颗M3螺丝固定。注意正反桨安装与马达转向要相匹配,螺旋桨迎风面朝向旋转方向(即转动起来后风向地面吹)。


    最后来张摆拍图

    转载请注明出处:http://blog.csdn.net/iracer/article/details/52895316

    展开全文
  • 如何使用光流芯片U30实现四轴无人机悬停 在没有GPS的环境下,比如室内环境,四轴无人机在水平方向会不断漂移。如何让无人机实现稳定的自主悬停呢?光流芯片可以感知无人机在水平方向的运动信息(速度、位移等),将...

    如何使用光流芯片U30实现四轴无人机悬停

    在没有GPS的环境下,比如室内环境,四轴无人机在水平方向会不断漂移。如何让无人机实现稳定的自主悬停呢?光流芯片可以感知无人机在水平方向的运动信息(速度、位移等),将该运动信息反馈给飞控系统,再结合无人机高度数据,无人机便可以实现高精度的自主悬停。湖南优象的光流芯片U30是专门为感知无人机在水平方向的运动而开发的一款ASIC芯片,四轴无人机获取U30的数据,调整PID参数就可以实现稳定的悬停。以前的光流视觉悬停技术对地面纹理、天气、白天/夜晚有特殊要求,导致无人机难以悬停在亮光瓷砖等光滑地面、柏油路等简单纹理地面上,光线不足或夜晚也无法悬停。U30采用先进的智能感知算法彻底解决了这些问题,可悬停于几乎所有的地面上,晚上在城市环境也能悬停,而且体积小、功耗低、成本低。
    无人机的飞控端从U30接收到光流数据后,接下来就是如何实现对于飞行的控制,即估计飞机真实的水平运动速度。以光流悬停为例,光流是如何抑制飞机悬停时的漂移的呢?一般来说,飞机在无光流时产生随机漂移的原因是姿态角度的误差造成的,使得飞机在自身有倾角时而错误的认为自身是水平而导致的,由于多旋翼是欠驱动系统,有倾角从而产生该方向上的漂移速度,因此光流就是估计这个误差角度或漂移速度,并反馈给控制系统进行控制(一般是串级的PID控制),控制输出的结果一般是飞机的倾斜角度,即期望角度。
    在实际使用中,用光流实现悬停时主要有两部分的工作,一是光流数据的处理,对U30输出的数据进行加工处理,可以是光流的自身滤波,或与加速度计进行融合滤波,以获取飞机的位移与速度信息;二是用处理后获得的估计位置与速度数据进行PID控制,控制飞机位置与速度调整,实现悬停。其基本流程如图1所示。
    一、U30输出数据的加工处理
    U30输出原始的光流数据并不是直接输出给PID使用,这些数据需要进行加工处理,才能供飞控端使用。对U30输出数据的处理分两种情况:一种是只使用纯光流数据,经过滤波处理得到飞机的位移与速度信息;二是将光流数据与加速度计进行融合,以得到飞控端PID控制所需要的位移和速度信息。
    只使用纯光流数据进行控制,平滑性与抗环境干扰性会差一些,但好处是处理简单,需要调试的参数少,且在悬停时与进行加速度融合控制效果也差不了多少,建议初次使用时先采用该方式,先跑通整个控制框架;将光流与IMU融合,如果IMU加速度计数据处理得好,数据各个方面的性能会好很多,如果处理不好或加速度计输出数据比较差反而会适得其反,且处理相对比较复杂,细节较多,调试更困难,因此在单纯用光流效果不理想,且调试一段时间后还没有改善,建议采用本方式。
    1.只使用光流纯数据的处理方法
    给出的光流数据经解码与处理后(参考附录中的up_flow.c)得到的x、y方向的光流flow_dat.x,flow_dat.y。因此光流纯数据的处理也是基于该两个变量。
    1.1 速度计算方法:
    speed_x = (hflow_dat.x/ (integration_timespan0.000001))100
    speed_y = (h
    flow_dat.y/(integration_timespan0.000001))100
    其中h为测量高度,单位m; integration_timespan为相邻两个光流输出的间隔时间,单位us,100是m->cm的转换。
    1.2 位移计算方法:
    sum_flow_x += speed_x
    (integration_timespan
    0.000001);
    sum_flow_y += speed_y*(integration_timespan0.000001);
    该位移默认开始悬停点为零,计算的是后续累积时间内,飞机距离该初始位置点的水平位移,单位为cm。
    在这里插入图片描述
    图1 光流数据处理与控制流程图
    1.3 备注:
    1.3.1 由于计算的速度帧率不是很高,且帧间的速度信息可能差别比较大,因此可以根据控制需要,选择对计算的速度进行低通滤波,但不宜引入过大的延时。
    1.3.2 理论上在速度计算之前需要进行旋转补偿,但在初始测试时,可以暂时先不考虑,先跑通整个框架。如果悬停效果可以接受也不用进行旋转补偿;若悬停时低频震荡且PID参数怎么也调试不好,就可能需要进行补偿,具体的旋转补偿方法在2.2节中再做详细叙述。
    1.3.3 光流位移量的处理有些细节需要注意,在某些情况下需要清除该累积位移与控制积分量。情况一,打摇杆后需要清零,否则松摇杆后飞机还会往前进的反方向后退一段距离;情况二,起飞前或正在起飞时需要清零,否则飞机会斜着起飞,即起飞上升时飞机往一边严重漂移。情况三,悬停时,当累积距离大于一定范围。
    1.3.4 在只使用气压计进行定高而没有超声波时,由于气压计会有很大漂移,因此输出的高度要做限制。首先限制高度要非负,另外在较低高度时可以使用固定高度,我们在测试时一般将高度写死固定为1m,实际测试发现在实际高度5m以下,使用该写死的高度也能有较好的悬停效果;当实际高度比较高时,可以适当放大该固定高度比例。
    2.光流与加速度计融合的处理方法
    一般单独使用光流的数据也能够获取较好的静态悬停效果,如果对光流的动态性能也有较高要求,比如实现更好的抗风、位移控制、目标跟随等高级功能,则需要进行光流与加速度计数据的融合以获取更加精确、平滑与实时的数据。具体实现可以参考<up_flow_fusion_demo.c>,下面对该文件进行简单梳理,并给出计算过程。
    第一步:确定使用高度。在只使用气压计高度时,高度不是很准(原因参考2.1.3备注中第四点),因此根据气压计的输出值,对使用的高度进行了分段处理,实际调试中可以根据飞机不同高度是否震荡进行调整,使飞机不震荡即可。
    第二步:光流角速度的计算。在2.1.2中speed_x为线速度,若speed_x不乘高度即为光流角速度,表示为fx = flow_dat.x/ (integration_timespan
    0.000001)),同理可求fy,单位为rad/s。
    第三步:光流旋转补偿。该步骤是提升性能核心,否则不能够支持比较大的PID控制参数,表现为加大控制参数飞机震荡。基本思想是使用陀螺仪角速度对光流进行旋转补偿,目的是使得飞机在只有旋转没有平移时光流最终输出为零。
    补偿公式为:
    fx_gyro_fix = ((fx + LIMIT(((gyro_lpf_y)/57.3f),-flow_t1,flow_t1)) *10 *use_height ) ; //rotation compensation
    fy_gyro_fix = ((fy - LIMIT(((gyro_lpf_x)/57.3f),-flow_t2,flow_t2)) *10 use_height ) ;
    以X方向的补偿为例,其中,fx_gyro_fix为旋转补偿后的输出,单位是mm/s;fx为光流角速度;(10 use_height)为使用的高度值,单位为mm。
    (gyro_lpf_y)/57.3为陀螺仪输出角速度,单位rad/s,flow_t1为对陀螺仪输出的限幅,值的大小由fx的输出最大值决定,因为陀螺仪的输出是远远大于光流的输出范围的,限幅避免过度补偿。gyro_lpf_y为原始的陀螺仪角速度(度/秒),经低通滤波后所得:LPF_1_(3.0f,dT,gyro_x,gyro_lpf_x),目的是使得光流输出的相位与陀螺仪相位一致。
    第四步:求水平航向坐标系下加速度值a(n)(该坐标系与俯仰和滚转角为零时的机体坐标系重合)。由姿态角可以获取姿态旋转矩阵,该姿态旋转矩阵在yaw=0时得到的旋转矩阵即为所求R,再使用a(n) = R
    a(b)求得目标向量值,包括xyz三个方向的加速度值,其中a(b)为机体加速度计测量向量,即传感器原始输出值,单位是mm/(s
    s)。
    第五步:加速度积分获取速度,并与光流进行互补滤波,获取初步的融合速度f1_fx.out。
    第六步:融合速度修正,由于加速度计积分有漂移,因此可能造成融合的速度在悬停或运动中会漂移真实值,而光流的计算是没有漂移及累积误差的,因此以光流数据做参考,对f1_fx.out做一个二次修正,得到最终融合速度输出f_out_x。
    备注:
    本算法中只对融合速度进行了处理,而没有融合高度的处理。因为在测试中发现使用融合速度积分得到位移精度反而不如单纯的光流累积计算精度高,因此建议位移的获取仍采用2.1.2中位移的获取方法。

    二、飞控端PID控制方法
    由光流获取飞机水平漂移的速度与位移后,即可以根据这些信息进行控制。以悬停为例,则期望的位移为零,反馈的即光流的测量值,一般采用的是串级的PID控制,即位置环+速度环控制,输出为期望角度,给姿态控制环。具体可以参考<up_flow.c>中的控制部分。由于该部分比较简单,在这里只对其中一些需要注意的细节进行描述。
    2.1 对于位置环,期望位置为零,反馈值为光流测量位移,输出为期望速度。
    2.2 对于速度环,期望值为位置环的输出,反馈值为光流测量速度,速度环输出为期望角度或期望加速度。理论上,输出应为期望加速度,并通过非线性转换为期望角度,从而传递给姿态环。在demo中我们的输出直接是期望角度,这是因为在小角度时,我们认为期望加速度与角度是线性相关的。
    2.3 定点控制中比较重要的一点,要确保外环的执行频率要低于内环的执行频率,否则会造成系统的不稳定。比如,我们位置环的控制周期为40ms,则速度环的控制周期为20ms等等。
    2.4 控制量在某些情况下需要清零,特别是控制积分量。比如打摇杆、起飞时或一键翻滚时。
    三、光流使用中需要注意的细节
    3.1 光流模块的检查。拿到光流芯片后,首先需要检查镜头表面是否有塑料薄膜、水珠、划痕等,确保镜头表面干净,器件或连线无松动等影响镜头成像效果的问题。
    3.2 光流模块的安装。在飞机上安装光流模块时,尽量保证镜头的水平,不要有倾斜角度,光流模块与机体坐标系不要有偏航方向的夹角且在机架的旋转中心,即光流模块的轴与机体坐标系的轴应尽量保持重合。特别注意一旦调试通过,进入批量生产时,在其他飞机上都需要以该方向固定安装,不可随意改变安装方向。
    3.3初始调试时,接上光流后,使用上位机观察是否有输出,验证输出值是否与图2.所述的光流坐标系定义一致,比如往左水平运动光流Y是否为正;水平向右运动光流Y是否为负,且输出值是否在合理范围等。
    3.4 确保光流的输出与机体控制坐标系的一致性,即实飞测试前需要验证光流的控制输出值与期望给飞机的控制指令是否一致(手拿着飞机水平移动,看输出是否符合预期),避免造成控制指令的不匹配导致的飞机乱飞现象。
    3.5 初始调试时应尽量选择光照明亮,地面纹理丰富且不反光,无风的环境进行,避免引入环境的干扰因素。

    四、附录<u30_flow.h> 与 <u30_flow.c>
    // up_flow.h

    #ifndef _up_flow_H
    #define _up_flow_H

    #include “stm32f4xx.h”
    #include “ms5611.h”

    void Flow_Init(void);
    void Flow_Duty(float dT);
    void Flow_Get(u8);

    extern struct flow_float flow_dat;

    extern float exp_rol_flow,exp_pit_flow;

    struct flow_integral_frame {
    unsigned short frame_count_since_last_readout;
    signed short pixel_flow_x_integral;
    signed short pixel_flow_y_integral;
    signed short gyro_x_rate_integral;
    signed short gyro_y_rate_integral;
    signed short gyro_z_rate_integral;
    unsigned int integration_timespan;
    unsigned int sonar_timestamp;
    unsigned short ground_distance;
    signed short gyro_temperature;
    unsigned char qual;
    } ;

    struct flow_float{
    float x;
    float y;
    unsigned short dt;
    unsigned char qual;
    unsigned char update;
    };#endif

    // up_flow.c

    #define LIMIT( x,min,max ) ( ((x) < (min)) ? (min) : ( ((x) > (max))? (max) : (x) ) )
    #define LPF_1_(hz,t,in,out) ((out) += ( 1 / ( 1 + 1 / ( (hz) *3.14f *(t) ) ) ) *( (in) - (out) )) //一阶低通滤波
    #define safe_div(numerator,denominator,safe_value) ( (denominator == 0)? (safe_value) : ((numerator)/(denominator)) )

    void filter_1(float base_hz,float gain_hz,float dT,float in,filter_1_st *f1) //动态调整滤波截止频率的一阶滤波
    {
    LPF_1
    (gain_hz,dT,(in - f1->out),f1->a); //低通后的变化量

    f1->b = my_pow(in - f1->out);  //求一个数平方函数
    
    f1->e_nr = LIMIT(safe_div(my_pow(f1->a),((f1->b) + my_pow(f1->a)),0),0,1); //变化量的有效率,LIMIT 将该数限制在0-1之间,safe_div为安全除法
    
    LPF_1_(base_hz *f1->e_nr,dT,in,f1->out); //低通跟踪
    

    }

    _xyz_f_st heading_coordinate_acc;

    _xyz_f_st heading_coordinate_speed_fus;
    _xyz_f_st heading_coordinate_speed_err_i;

    float fx_gyro_fix,fy_gyro_fix;
    float fx_o,fy_o;
    float f_out_x,f_out_y;
    float gyro_lpf_x,gyro_lpf_y;

    _filter_1_st f1_fx;
    _filter_1_st f1_fy;

    float f1_b,f1_g;

    //flow_dat.qual:x,y方向光流都有效:255,x有效:2,y有效:1,都无效:0;

    float gyro_x,gyro_y;

    void flow_fusion(float dT,float fx,float fy,s32 flow_height,u8 pos_hold)
    {
    float flow_t1 = 1.0,flow_t2 = 1.0;

    fx_o = fx *10 *flow_height;        //fx,fy(rad/s)-->flow speed (mm/s)
    fy_o = fy *10 *flow_height;	
    u32 use_height=100;
    
    if(flow_height<200)    //input height (cm/s)
    {
    	use_height = 100;
    }
    else if(flow_height<300)
    {
    	use_height = 150;
    }
    else if(flow_height<400)
    {
    	use_height = 200;
    }
    else if(flow_height<500)
    {
    	use_height = 250;
    }
    else if(flow_height<600)
    {
    	use_height = 300;
    }
    else if(flow_height<1000)
    {
    	use_height = 350;
    }
    else 
    {
    	use_height = 400;
    }
    
    
    if( pos_hold == 1)   //in pose hold mode
    {
    
    	gyro_y = (((s16)sensor.Gyro_deg.y/2 )*2 );   //degree per second
    	gyro_x = (((s16)sensor.Gyro_deg.x/2 )*2 );	
    	
            LPF_1_(3.0f,dT,gyro_y,gyro_lpf_y);     //gyro low pass filter (delay) for fitting flow data()
            LPF_1_(3.0f,dT,gyro_x,gyro_lpf_x);	
    		
    	fx_gyro_fix = ((fx  + LIMIT(((gyro_lpf_y)/57.3f),-flow_t1,flow_t1)) *10 *use_height ) ;  //rotation compensation
    	fy_gyro_fix = ((fy  - LIMIT(((gyro_lpf_x)/57.3f),-flow_t2,flow_t2)) *10 *use_height ) ;
    	
    	vec_3d_transition(&imu_data.z_vec, &imu_data.a_acc, &heading_coordinate_acc);   //机体坐标系下加速度到水平机体航向坐标系(将机体水平放置,没有偏航角,
    	                                                                                 //保持加速度与光流没有偏航方向的影响)
    				
    	f1_fx.out += ((s32)heading_coordinate_acc.x/10 *10 ) *dT;   //integrated  acceleration for speed
    	f1_fy.out += ((s32)heading_coordinate_acc.y/10 *10 ) *dT;
    	
    	f1_g = 2.5f;
    	if(flow_dat.qual <3)  //光流效果不好时
    	{
    		f1_b = 0.5f;		
    	}
    	else
    	{
    		if(f1_b<1.2f)
    		{
    			f1_b += 0.02f;
    		}	
    	}	
    	
    	filter_1(f1_b,f1_g,dT,fx_gyro_fix,&f1_fx);   //flow_data with acc integrated data complementary filtering
    	filter_1(f1_b,f1_g,dT,fy_gyro_fix,&f1_fy);
    	
    	heading_coordinate_speed_fus.x  = f1_fx.out;   //融合速度
    	heading_coordinate_speed_fus.y  = f1_fy.out;
    	
    	f_out_x = heading_coordinate_speed_fus.x + 0.1f *heading_coordinate_speed_err_i.x;  //融合速度二次修正,最终输出结果
    	f_out_y = heading_coordinate_speed_fus.y + 0.1f *heading_coordinate_speed_err_i.y;
    	
    	heading_coordinate_speed_err_i.x += (fx_gyro_fix - f_out_x) *dT;  
    	heading_coordinate_speed_err_i.y += (fy_gyro_fix - f_out_y) *dT;
    

    }

    }

    展开全文
  • 四轴无人机原理

    千次阅读 2019-07-19 00:52:00
    2、旋翼飞行器结构 3、空气动力学原理参考 无人机概述  无人驾驶飞机,简称无人机,英文Unmaned Aerial Vehicle, UAV。也就是说,无人机所表示的是...
  • 带你一起做 “Mini四轴无人机” -- 开篇

    千次阅读 多人点赞 2021-02-21 16:27:31
    这个系列都是很基础的如何调用相关的驱动,并没有具体的应用实例,所以,我再开一个系列《带你一起做 “Mini四轴无人机”》,我想通过这个系列,和喜欢并支持国产软件的工程师们共同交流,并起到抛砖引玉的作用。...
  • 无人机飞行器风靡一时,各种各样的无人机席卷了市场,无人机受到了电子爱好者的追捧,整理了电路城上8个四轴无人机方案,赶快学起来吧。 1、小马哥STM32开源RoboFly四轴飞行器原理图PCB工程源代码3D模型文件等 这款...
  • 设计一款基于STM32四轴飞行器,设计四轴飞行器包括IMU姿态解算,自稳控制,定高自动控制等,达到给他人进行稳定二次开发的目的,降低学习无人机门槛,提高无人机在国内的影响力度,让更多的人认识了解无人机学习...
  • 极客DIY:使用树莓派制作一架四轴无人机 如果你想DIY一台属于自己的无人机,那么接下来可以阅读这篇文章,阅读完毕之后也许对你会有启发。 这个项目主要用到的零件主要来自Erle Robotics(一个使用Linux系统的...
  • 图文并茂详细教程之--用pixhawk飞控组装一台F450四轴无人机(上) 原创 CJKK 苍穹四轴DIY 2019-11-15 前面的教程已经详细介绍了如何使用Pixhawk飞控组装一台S500无人机。因为很多朋友购买的是F450机架,搭配的是...
  • 四轴无人机diy制作教程 我从今年开始学习模版印刷和手刻字 ,并对此非常着迷。 这些古老的技术确实为明信片增添了一些特别之处,我通常在旅行时将其寄给自己,我的妻子和我的朋友们。 当然,我开始考虑如何使这些...
  • 无人机记录起飞的方向,飞行过程中,无人机响应摇杆的方向,始终以起飞时的方向为准,没有机头机尾的区别。油门摇杆使用自动回中的电位器,不再使用上面的拆机摇杆,所有摇杆都是新物料。 1. 将飞机水平放于地面,...
  • 从现在开始将会进入四轴无人机的制作,我是第一次制作四旋翼,从前没有接触过这个方面,手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码,所以代码逻辑设计方面肯定有所欠缺,大家可以积极留言讨论,...
  • 我碰巧有做一个无人机的想法,而且手上刚好有树莓派4b一个 树莓派支持pyrhon编程和实时调控 需要准备的材料 电流电压匹配的电机、电调和电池 我选择的是闲鱼买的90元个电机加电调加螺旋桨(未焊接) 电池选择2060...
  • 前面两次我们成功的将PPM信号的读取、储存和油门处理完成了,这次我们要开始真正的控制无人机,首先我们要了解无人机前后,左右,旋转,升降的原理。 2、动作原理 引用:...
  • 关注【二进制人工智能】微信公众号,回复无人机即可获得Solidworks文件
  • 对开源无人机来说,无人机机架的稳定性,困扰着很多人,尤其是前几年没有好的电机、电调,机架和开源无人机入手十分困难。Ardupilot/Pixhawk这套无人机系统备受诟病,稳定性很差,各种炸机不断。随着无人机工业的...
  • 1、前言 从现在开始我们要接触一个完整的工程,所以我们要对整个工程进行分析,将硬件设计、软件设计模块化,一个模块一个模块的完成,最后将各个模块融合在一起,...2、无人机设计整体思路 因为stm32是单线程cpu,所以
  • 竞赛 电子设计大赛 四轴无人机 建议

    千次阅读 多人点赞 2017-08-13 14:38:40
    电子设计大赛过多的就不说了,要了解自己查一下就行了。参加电子设计大赛的这一个暑假我觉得自己过的非常的有意义。虽然最终的结果自己不够满意,但是我衷心的感谢所有帮助过我的老师,同学。这一次的比赛我们准备的...
  • 四轴无人机的姿态解算(1)

    千次阅读 2019-07-23 03:04:38
    个数 [a,x,y,z]来表示一个旋转物体的姿态,a是角度,x,y,z表示一个三维向量,但向量既有长度又有方向,我们只需要一个向量来表示方向时,可以规定它是个单位向量。 然而这并不是 四元数 ,真正的四元数定义是...
  • 这次给大家分享个基于MultiWii飞控的安卓手机(平板)蓝牙控制的微型四轴飞行器 首先给大家分享一些我收集的一些参考资料 一些开源迷你多轴无人机官网 CREELINKS 官网Crazepony 官网cleanflight 官网flexbot官网...
  • 因为无人机属于比较危险的玩具,一旦失去控制后果不堪设想,从安全角度出发我使用比较稳妥的定时器输入捕获方法。 4、程序设计 定时器输入捕获的初始化不在赘述,在stm32基础篇有详细介绍。直接看PPM信号的接收,...
  • Stm32F1定时器的基本知识: 看一下常用的控制寄存器1:TIMx_CR1(16位) 其实我们主要用库函数来实现,不会去太关注寄存器怎么操作,就行HAL库一样,不过要想深入还是得有所了解,特别是在debug的时候,debug窗口...
  • (绿色小瓶为机头方向) 6、总结 本次我们只需要验证油门是否正确即可,下一次我们加入前后,左右,旋转三个动作,截止目前,总共使用了遥控器的个通道,辅助通道的数据可以执行什么操作我们自行设计。

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 284
精华内容 113
关键字:

四轴无人机