wujingyu 发表于 2015-7-9 15:53:24

DIY MWC四轴飞行器的装配与调试

本帖最后由 wujingyu 于 2015-9-23 19:55 编辑

各相关论坛里关于四轴飞行器的帖子很多,我从中也学到了很多东西,前段时间一直在忙别的工作,趁这几天有点空,将之前做过的一些工作整理出来,对实际操作自我感觉有价值的帖子(或部分内容)汇总在此,并对一些本人觉得不妥的地方加以说明和修正。


一、四轴飞行器的组装(转:请参考相关内容)
二、MWC的硬件设计
三、MWC的固件配置
四、MWC的连接
五、四轴飞行器整机调试(一)
六、四轴飞行器整机调试(二)
七、其他
八、视频
九、Q250 + MINI_MWC



wujingyu 发表于 2015-7-10 23:52:48

henrypcw 发表于 2015-7-10 20:45 static/image/common/back.gif
老大,视频里怎么不见你控制?   连控制也自动了?

就我一个人,所以只做了定高、定点飞行模式,所以就不用控制,才能腾出手来拍摄视频。

wujingyu 发表于 2015-7-10 11:52:16

本帖最后由 wujingyu 于 2015-7-10 19:38 编辑

八、视频

MWC四轴飞行器

wujingyu 发表于 2015-7-10 09:06:00

本帖最后由 wujingyu 于 2015-7-10 11:20 编辑

二、MWC的硬件设计
1、原理图

2、PCB布局图

3、实物照片

4、材料清单

这种配置完全是为那些没有多少经费的初学者选配的!!!

遥控器选择的是MC6H航模遥控器 6通道2.4g 带接收器




wujingyu 发表于 2015-7-10 09:27:28

本帖最后由 wujingyu 于 2016-7-12 19:06 编辑

三、MWC的固件配置
1、Arduino IDE的安装
Arduino集成开发环境下载:http://pan.baidu.com/s/1o9XCU(1.6.3下载)
如果你下载的是windows 安装版(exe后缀),那么直接安装即可,其他则直接解压即可使用。

运行后的界面如下:


2、MulltiWii程序配置
MWC2.3官方原程序



双击运行MultiWii.ino程序。

初始界面显示如下:


选择config.h文件,选择后如下:

按Ctrl+F,寻找“QUADX”


将“//#define QUADX”前面的双斜杠删除掉,变为:

其他后续部分作同样的处理,见图,没有特殊情况,就不加以说明了。


对于简单的6轴传感器(三轴陀螺仪+三轴加速度)GY_521,请选择“#define GY_521”,对于10DOF模块(三轴陀螺仪+三轴加速度+三轴磁场+气压)的GY-86传感器,则选择“#define GY_86”。

注意:低通滤波频率设置为20Hz,有些情况下,这个频率设高了的话,油门推到最大都飞不起来。

关闭串口GPS。

如果使用GPS,就要开启I2C_GPS;如果使用超声波测距,就要开启I2C_GPS_SONAR。

如果你想使用 GPS 自动返航等功能,一定要设置磁偏角,查询磁偏角的最好方法是在手机GUI上查看。首先运行下图中的MultiWii EZ-GUI程序,点击“GPS信息”按钮,最下面倒数第二行即为你所处地方的磁偏角。




飞控解锁后,马达不转。这个功能,有好有坏,马达旋转可以提示你,飞控已经解锁,注意安全。我习惯解锁后马达不转。

还有一项接收机的AUX2通道设置,设置参照下图。

wujingyu 发表于 2015-7-10 10:51:58

本帖最后由 wujingyu 于 2015-7-10 11:21 编辑

四、MWC的连接
1、遥控器对频

[*]关闭发射机和接收机电源
[*]把黑色“对频线”插头连接到接收机的“ID SET”接口
[*]把电调的信号线连接到接收机的第三通道,然后电调连接电池通电
[*]此时需要注意的是,接收机LED将有一个持续闪烁绿灯
[*]将发射机油门摇杆调到最低的位置,然后打开发射机
[*]当接收机的绿色LED灯熄灭,此时接收机已对好频
[*]关闭遥控器电源
[*]从接收器拆下“对频线”插头,断开电池、电调连接线。

2、接收机连接

注:这里只有D2是通过GVS的3P线连接到飞控板的,其他通过单P线连接即可。因为遥控的所有接收端 GND和VCC是相通的。
3、电调连接

数字与飞控板舵机控制部分数字标号一一对应,数字周围的箭头,表示这个位置的电机旋转方向,请与图示标注保持一致。

4、电调校准

去掉//#define ESC_CALIB_CANNOT_FLY这句代码前面的两条斜线,启用这句代码,并将改过的程序烧录到飞控板里。断开USB下载线,接上飞行器的电池,在一段音调之后,等待一分钟左右,拔掉电池。将#define ESC_CALIB_CANNOT_FLY这句代码注释掉,接上USB下载线,重新下载程序到飞控板里,至此校准电调完成。电调校准时不要安装螺旋桨!!!
5、GPS连接
按照原理图和PCB板图上的5V、GTX、GRX、GND分别与GPS模块的相应端子相连接,注意GTX与GPS模块的RX相连,GRX与GPS模块的TX相连。
6、超声波连接
按照原理图和PCB板图上的V、T、E、G分别与超声波模块的VCC、Trig、Echo、GND对应相连。

wujingyu 发表于 2015-7-10 11:11:15

本帖最后由 wujingyu 于 2015-7-10 11:24 编辑

五、四轴飞行器整机调试(一)
1、MultiWii GUI启动、连接
请先安装JAVA插件:
http://www.java.com/zh_CN/download/windows_ie.jsp?locale=zh_CN
安装即可(注意:需要连接网络才可以安装此安装文件),如果你的电脑是win7 64位的系统,安装了JAVA虚拟机后GUI仍然运行不了,那你就需要到C:\Program Files(x86)\Java\jre7\bin\找到并复制javaw.exe,然后粘贴到C:\Windows\SysWOW64\这个文件夹下面,再重新运行GUI即可。
接着运行“application.windows32MultiWiiConf.exe”。

点击“READ”和“START”按钮,就可看到飞控的默认初始数据和传感器的数据曲线图了。

2、传感器校准与测试
a、加速度计校准

加速度计(ACC)在飞行器静止时,三轴读数会相对稳定,如果前后/左右/上下移动飞行器,对应的PITCH / ROLL / Z会有读数变化,这表面加速度计工作正常。这时如果需要校准加速度计,请将飞行器放在尽量平的地面上,点按CALIB_ACC按钮,等待大约5秒钟,加速度计校准完成后,ROLL/PITCH会显示为0,校准完成。校准完成后别忘了点击“WRITE”保存。
b、陀螺仪测试
陀螺(GYRO)在飞行器静止的时候,ROLL / PITCH / YAW三组数据都为0,拿起飞行器,分别朝向三个轴向摆动,会看到三组数据会跟随变化,同时右边的状态图会跟着摆动的方向做指示。左右倾斜飞行器,右边的ROLL不会保持水平状态,会有对应的倾斜动作,前后倾斜飞行器,PITCH也会产生相应变化,转动飞行器,有图中的四轴飞行器也会有对应动作。
c、磁场计校准
磁阻(MAG)读数中我们只需关心ROLL这一项,当水平转动飞行器指向北的时候,此读数与下面的HEAD都为0,同时右边的指北针也指向N位置,说明磁阻工作正常。如需校准磁阻,请点按CALIB_MAG按钮,在30秒钟内把飞行器朝三个轴向分别旋转至少一圈再放回地面,即可完成校准。
d、气压计测试
气压计(ALT)读数并不是绝对值,每个飞控都有可能不一样,请不用担心,我们只是需要相对的数据。测试气压计时可以上下移动飞行器超过1米高度差,或者用手按着气压计的金属盖,会看到读数出现变化,当气压变高时,显示海拔下降,这时正常情况。
3、GPS设置
源程序:
a、导航程序配置
导航板软件I2C_GPS_NAV_v2_2的config.h文件中修改下列代码,打开SONAR部分。



下载导航程序到GPS Arduino模块。
b、飞控软件 MWC2.3代码修改
代码修改
(1)config.h文件,打开I2C_GPS和I2C_GPS_SONAR的设置
#define I2C_GPS
    // If your I2C GPS board has Sonar support enabled
#define I2C_GPS_SONAR
(2)IMU.cpp 文件,增加逻辑:当超声波读数低于3米时,代替气压计读数
uint16_tcurrentT = micros();
uint16_tdTime;
static int32_t tmpEstAlt = 0; //in cm 用于替换原气压高度的LPF运算,方便与超声波读数切换

dTime =currentT - previousT;
if(dTime < UPDATE_INTERVAL) return 0;
previousT = currentT;

if(calibratingB > 0) {
   logBaroGroundPressureSum = log(baroPressureSum);
   baroGroundTemperatureScale = (baroTemperature + 27315) *29.271267f;
    calibratingB--;
}

//baroGroundPressureSum is not supposed to be 0 here 气压地面压力和不应为0
// see:https://code.google.com/p/ardupi ... AP_Baro/AP_Baro.cpp
BaroAlt= ( logBaroGroundPressureSum - log(baroPressureSum) ) *baroGroundTemperatureScale;

// 用tmpEstAlt变量替换原alt.EstAlt变量进行气压高度低通滤波
tmpEstAlt = (tmpEstAlt * 6 + BaroAlt * 2) >> 3; //additional LPF to reduce baro noise (faster by 30 μs)

//在这里给alt.EstAlt赋值
if(sonarAlt>0 && sonarAlt<300 ) {
         alt.EstAlt = sonarAlt; //来自声呐的值
}
else {
         alt.EstAlt = tmpEstAlt; //来自气压计的值
}

#if(defined(VARIOMETER) && (VARIOMETER != 2)) ||!defined(SUPPRESS_BARO_ALTHOLD)
c、GPS模块设置
安装u-center软件,将GPS模块通过USB转TTL模块与PC机相连,并运行u-center。

按F6、F7、F8打开三个窗口,观察GPS是否有数据输出。


选择不同的波特率,看看选择哪个波特率时,窗口有数据不断的输出,就说明GPS模块的波特率就是所选的值。

如果波特率不是115200,进行如下设置。点击 ViewMessages View,调出该窗口,然后点击 UBXCFG(Config)PRT(Ports),设置 Baudrate 为 115200。同时设置串口1的输出格式为NMEA。

在配置好了之后,点击窗口左下角的 Send 按钮,就可以将配置发往 ATK-NEO-6M GPS模块。这样,我们就设置模块波特率为 115200 了,此时 u-center 必须重新设置串口波特率为115200,才可以和模块进行通信。
设置好之后, u-center 即可与模块重新通信,但是模块的波特率数据,并没有保存在EEPROM 里面,只要模块一断电,下次上电,波特率就还是以前的出厂设定值。
因此我们还需要对刚刚的配置进行一个保存操作, 在 Messages View 窗口,选择UBXCFG(Config)CFG(Configuration),选择 Save current configuration, Device 选择: 2-I2C-EEPROM。在设置好了之后,点击窗口左下角的 Send 按钮,就可以将指令发往 ATK-NEO-6M GPS模块,从而将当前的模块配置信息,保存在 EEPROM 里面。

GPS输出信息设定,MWC的导航部分仅需要GGA、GSA、RMC,在 Messages View 窗口,选择NMEA,首先,鼠标右键点击NMEA,选择Disable Child Message,这是没有任何信息输出。再分别选择GxGGAGPGGA,鼠标右键点击选择Enable Message;GxGSAGPGSA和GxRMCGPRMC按同样方法设置使能输出。
下面设置测量频率,还是在 Messages View 窗口,点击 UBXCFG(Config)RATE(Rates), 设置 Measurement Period 为 200ms。

在配置好了之后,点击窗口左下角的 Send 按钮,就可以将配置发往 ATK-NEO-6M GPS模块。然后,可以看到其他信息窗口的数据更新速度明显变快了,说明我们的设置成功了。同样,如果要保存该设置,前面波特率设置时所介绍的保存操作方法,进行保存。
4、超声波测距测试
超声波没什么可调式的,如果硬件、软件没有什么问题,直接在MultiWii GUI的界面上就可以看到超声波的高度数据。

wujingyu 发表于 2015-7-10 11:15:42

本帖最后由 wujingyu 于 2016-7-31 17:34 编辑

六、四轴飞行器整机调试(二)
5、参数调整
a、PID参数调整
MWC是用PID算法进行飞行稳定性控制的程序,三个字母分别代表比例(P)-积分(I)-微分(D)。
PID三个参数的直观作用:
P(比例):这是一个增益因子,当多轴飞行器受风等的影响发生向一边倾斜时,P值直接决定多轴飞行器的抵抗这种倾斜的力的大小。P越大,多轴飞行器抵抗意外倾斜的能力越强,但P过于大时会引起多轴飞行器抖动甚至猛烈侧翻。P越小,多轴飞行器抵抗意外倾斜的能力越弱,但P过小时会引起多轴飞行器自平衡能力不足甚至朝一边侧翻(如顺着风的方向)。
I(积分):这个参数决定了飞行控制器对过往飞行状态的依赖程度。如果I值太小,会使飞行器过度依赖当前的误差,不能抑制“过敏”现象,从而造成飞行颠簸;如果I值太大,则会过度削弱系统对误差的反应能力,造成反应迟缓。
D(微分):一旦多轴飞行器发生倾斜,则认为多轴飞行器会继续向同一方向倾斜,合适的D参数的能有效抑制未来可能发生的倾斜。如果D值太小,您会觉得多轴飞行器反应不够灵敏;如果D值太大,也会引起“过敏”。相较于P而言,D反映得更多的是灵敏度,而P反映的是纠正误差的力度。
具体操作:将鼠标定位在待调整的PID参数上,按住鼠标左键左右移动鼠标即可调整该数值。初期PID参数默认即可,不必调整,默认参数就能飞的很稳。
b、油门曲线调整
如果你在试飞过程中发现四轴悬停非常难,油门非常不好把握,一拉油门就升老高,一降油门就直接落到地上,那你应该调整油门曲线。比如MID设为0.4,EXPO设为0.7等。遥控曲线不必设置,默认参数就很好。
6、遥控器设置
a、MWC的遥控动态范围设定
如果遥控器的动态范围不够,也就是调整范围最小无法小于1100,最大无法超过1900,则可以通过在MWCMultiWii.h中修改下列两个参数,即可解决此问题。
#define MINCHECK 1150 //遥控器动态范围最小设定值
#define MAXCHECK 1850 //遥控器动态范围最大设定值
b、通道设置
打开遥控器开关。这时观察GUI上遥控器各通道示数会有变化。
首先检查各通道正反是否正确。推动前四个通道的摇杆,正反设置正确的标志如下。

[*]油门通道:向前推动摇杆,GUI里THROT通道示数变大;向后拉摇杆,GUI里THROT通道示数变小。
[*]升降舵通道:向前推动摇杆,GUI里PITCH通道示数变大;向后拉摇杆,GUI里PITCH通道示数变小;自动回中GUI示数在1500左右。
[*]副翼通道:向右推动摇杆,GUI里ROLL通道示数变大;向左推动摇杆,GUI里ROLL通道示数变小;自动回中GUI示数在1500左右。
[*]方向舵通道:向右推动摇杆,GUI里YAW通道示数变大;向左推动摇杆,GUI里YAW通道示数变小;自动回中GUI示数在1500左右。
[*]三档开关通道:低档GUI示数1000左右;中档GUI示数1500左右;高档GUI示数2000左右。

若正反向不正确,则在遥控器设置里进行舵机相位的正反相设置即可。
正反设置完成之后需要校准各通道行程,要求各通道最小值在1050以下,最大值在1950以上。
然后升降舵、副翼、方向舵三个通道需要校准中立点(即摇杆自动回中那个值),利用遥控器各通道旁边的微调开关,将以上三通道的中立点校准到1500左右,偏差不超过正负4。
c、飞行模式设定
设置完遥控器各通道的行程和中立点后,可进入飞行模式设置,操作界面如下:

右侧中部浅蓝色框中“ACC”、“BARO”、“MAG”、“GPS”和“SONAR”均为绿色,说明这些传感器均设置为工作状态。
上面黄色框中为飞行模式设定,框的左侧由上往下依次为:

[*]ARM:解锁指示(解锁成功后会变成绿色)
[*]ANGLE:自稳功能(2.2以前的固件显示为ACC.需要加速度计,MWC-2012 MWC-MEGA都支持)
[*]HORIZON:3D模式(激活后自动关闭ANGLE功能,请初级玩家慎用)
[*]BARO:高度保持功能(需要气压计, MWC-2012 MWC-MEGA都支持)
[*]MAG:航向保持功能(需要磁阻,MWC-2012 MWC-MEGA都支持)
[*]HEADFREE:CF功能,也就是俗称的无头功能(需要同时激活MAG)
[*]CAMSTAB:云台自稳功能(需要在固件中开启云台功能)
[*]GPSHOME:自动回航功能(需要GPS模块,并且同时激活MAG)
[*]GPSHOLD:定点功能(需要GPS模块)

设置方法用鼠标点击“灰色”小方块,使其变为“白色”,对应功能即变成有效。
譬如AUX2的MID列对应的功能为:自稳+定高+锁定航向。设置完成后需要点击“WRITE”按钮保存。这时你可改变遥控器辅助通道的状态,相应的飞行模式就由暗红色变成了绿色。
注意: GPS没有卫星信号的时候,不管你怎样操作遥控器上的开关,GPS Hold 和 GPS Home都无法激活。
MAG:航向保持功能,是指通过磁阻来保持航向,可以避免飞行器的非操控原因的自旋,第一次打开时,机头会自动转向(指向解锁时还是上电时或真北我没注意,因为我们的飞场三个方向是一样的)。
HEADFREE:CF功能,也就是俗称的无头功能,不需要同时激活MAG,是指飞行器的倾斜与横滚根据飞行器解锁时机头指向关联,与飞行器实际的机头指向无关。例如,无论飞行时机头如何指向,往前推杆,飞行器就向解锁时机头指向的前方飞去。注意,是解锁时机头指向。(具体无头模式功能的详细说明你可以看其他帖子)
另外,打开GPSHOME或GPSHOLD时,都需要磁阻的辅助,不需要同时打开MAG,也不会自动打开MAG。但需要打开ANGLE功能,否则不工作。
在GPSHOME时,打开MAG,机头会自动转向HOME点方向后开始返航,到HOME点后,机头再转向到解锁时的方向。

d、解锁
油门摇杆打到右下角为解锁,左下角为加锁。解锁后ARM为绿色,加锁后为暗红色。
7、电机测试
飞行器上电,打开遥控器电源,解锁,推油门,看看电机转速是否正常,桨叶安装是否牢靠。

wujingyu 发表于 2015-7-10 11:16:53

本帖最后由 wujingyu 于 2015-7-13 10:03 编辑

七、其他
1、电机不同时转
油门推到60%的时候只有两个电机转,另外两个不转,当油门继续加大第三个电机开始旋转,再继续加大油门第四个电机才转起来。最后发现是“MultiWii”与“MultiWiiConf(MultiWii GUI)”不配套造成的。运行相应的配套“MultiWii GUI”程序,重新校准加速度计后,一切均正常了。

2、GPS导航部分出现的问题
I2C_GPS_NAV_v2_2 程序的 config.h 中下面这段:
……
//#define NMEA
#define UBLOX
//#define MTK_BINARY16
//#define MTK_BINARY19
//#define INIT_MTK_GPS
……

如果设置为“UBLOX”,编译是通不过,我在一些论坛上也求助过,没有人回答,后来通过我自己试验,选择“NMEA”成功了!
……
#define NMEA
//#define UBLOX
//#define MTK_BINARY16
//#define MTK_BINARY19
//#define INIT_MTK_GPS
……

参见:MWC接GPS和声纳的方法经验以及我遇到的问题

3、入门级的其他部件选型
有很多人都说 XXD 的不好,绝对不要用,其实对于没有多少钱的入门者,我感觉还是可以用的,对于我来说,钱不是问题,但做个简单的,也就是尝试一下而已,也没有必要非得选那么好的,从使用角度上来看,也没发现什么问题。
如果没有配自锁桨的新手,一定要注意桨叶一定要安装牢靠(具体标准大家自己网上找吧),否则要是射桨(百度看射桨)了的话,问题就大了……

4、电调输出并联问题
线性降压电调的输出并联没有什么问题,但开关降压电调的输出是不能并联在一起的!!!

简单侣图 发表于 2015-7-10 11:57:06

:)资料详尽了,慢慢消化,有空再做

请叫我小萌兽 发表于 2015-7-10 14:24:09

wujingyu 发表于 2015-7-10 11:52 static/image/common/back.gif
八、视频

密码:MWC0613

果断收藏,慢慢抄袭:lol

henrypcw 发表于 2015-7-10 20:45:03

老大,视频里怎么不见你控制?   连控制也自动了?

shihaipeng04 发表于 2015-7-10 21:33:32

艾玛,这个太详细了。菜鸟也可以搞了,信息量有点大,慢慢消化ing

潇洒哥 发表于 2015-7-11 12:44:53

很好的学习资料,其实楼主可以使用两块arduino pro mini来做飞控板,外加一块FTDI下载模块,这样成本能少点,
我开始也想自己做飞控,但是怕做出来的飞控稳定性不好,就买了成品MWCSE 2.5飞控
还没调试好!
准备加GPS,感谢楼主的资料
我这里有MWC2.4的固件

wujingyu 发表于 2015-7-11 16:31:13

潇洒哥 发表于 2015-7-11 12:44 static/image/common/back.gif
很好的学习资料,其实楼主可以使用两块arduino pro mini来做飞控板,外加一块FTDI下载模块,这样成本能少点 ...

现在Arduino Nano的两块比Arduino Pro Mini两块 + FTDI 下载模块好像还便宜一些吧,早期我做平衡车时用的就是Arduino Pro Mini + FTDI 下载模块,感觉不太方便
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: DIY MWC四轴飞行器的装配与调试