硬件:KDS600直升机,pixhawk4飞控
软件:px4 1.11.0 QGC地面站
参考链接
https://docs.px4.io/master/en/airframes/airframe_reference.html
https://docs.px4.io/master/en/hardware/reference_design.html
https://docs.px4.io/master/en/concept/mixing.html#helicopter_mixer
https://docs.px4.io/master/en/getting_started/tunes.html#error-tune
PX4中的直升机有以下两种构型
上面的是共轴双旋翼,下面的是单旋翼带尾桨.
本文采用的是单旋翼带尾桨构型.
装机步骤如下:
第一步 设置机架类型
PX4中设置机架类型有两种方法,第一种是在地面站的机架那一栏进行设置,如下图,选择完对应机架的图标后,点击右上方应用并重启即可.这种方法不仅设置机架了类型,还会将其他参数设置为该载具的默认参数.
第二种方法在参数栏里直接设置机架参数.
搜索参数SYS_AUTOSTART
,将其改为16001即可,这种方法只会修改机架类型,而不会影响其他参数.考虑到不同的机型参数不一定适配(如PID参数),因此不建议通过此种方法修改机型.
第二步 禁用io输出
在设置完机架后发现飞控io无法启动,查阅后发现是固件的一个bug,因此笔者直接将io禁用.将参数SYS_USE_IO
设置为0即可.
需要注意的是,需要在设置完机架后,再设置此参数,因为通过机架设置栏设置机架后,会将此参数重置为1.
第三步 调舵机正反
经过前两步后,将舵机及电机按下图线序接到飞控,注意是接到FMU PWM OUT,而不是IO PWM OUT接口.如果是其他飞控则是接到AUX通道上.
然后就是校准传感器遥控器等,然后解锁,观察舵机和电机的正反是否有误,调舵机的的正反是通过下面的参数调节
如果想反向,将对应的通道的值改成1即可.
第四步 修改混控
根据自己的直升机硬件,修改混控.混控器文件在如下目录
找到blade130.main.mix
,内容如下
H: 3 //倾斜盘舵机数量
T: 0 3000 6000 8000 10000 // 推力曲线,分别为油门 0%,25%, 50%,75%,100%时的推力值
P: 500 1500 2500 3500 4500 //总矩曲线,分别为油门 0%,25%, 50%,75%,100%时的总矩值
/*下面三个为倾斜盘舵机混控.第一个参数为角度,以度为单位,0度为机头方向。从上面看,顺时钟方向为正.第二个参数
为标准化长度,10000等于1。如果所有伺服臂长度相同,则值应为10000。较大的臂长会减少伺服偏转量,较短的臂会增加
伺服偏转量。第三个参数为缩放值,伺服输出按<缩放值>/10000进行缩放。第四个参数为偏移量,该值应介于-10000和+10000
之间.控制量在缩放后,会加上偏移量。第五个参数为控制量下限,第六个参数为控制量上限.对于全伺服范围,下限和
上限应为-10000和+10000。*/
# Swash plate servos:
S: 0 10000 10000 0 -8000 8000
S: 140 13054 10000 0 -8000 8000
S: 220 13054 10000 0 -8000 8000
最后一个为尾桨舵机混控,采用简单混控,直接根据偏航控制量输出.
# Tail servo:
M: 1
S: 0 2 10000 10000 0 -10000 10000
从混控文件上看,油门曲线从略陡的坡度开始,在50%推力下达到6000(0.6)。在100%推力下,它继续以较低的坡度达到10000(1.0)。俯仰曲线是线性的,但不使用整个范围。节气门开度为0%时,总变桨设定值已为500(0.05)。在最大油门下,总节距仅为4500(0.45)。对这种类型的直升机使用更高的值会使桨叶失速。
该直升机的斜盘伺服装置位于0、140和220度角处。伺服臂长度不相等。与第一个伺服相比,第二个和第三个伺服的臂更长,比率为1.3054。伺服系统被限制在-8000和8000,因为它们受到机械约束。
由于实际的直升机硬件和PX4官方固件中的可能不一样,因此需要根据自己的直升机硬件修改倾斜盘舵机混控中的角度和臂长
修改完混控后,需要make clean
之后再进行编译
此外,px4中的原生的直升机模型的倾斜盘舵机布局如下
而笔者的如下
因此笔者的直升机的俯仰控制是反的,此时是不能通过舵机反向的参数进行调整的,因为舵机的控制还要考虑总矩.笔者直接将俯仰角的控制输入进行了取反.打开如下文件
将float pitch_cmd = get_control(0, 1);
改成float pitch_cmd = -get_control(0, 1);
修改完后重新编译并下载到飞控就可以了,需要注意的是,fmuv2的固件是不支持直升机的,本人实测赫星cube black(fmuv3)和PIXHAWK4(fmuv5)是可以用的.