四轴飞控

接触四轴飞行棋林林总总下来也将近半年时间了,期间使用APM做了一个四轴,玩了一段时间,对于APM的源代码也做了一些了解和学习,自己也写了一个飞控,虽然做的不好,但是还是可以勉强进行飞行了,下面把这个飞空代码编写流程做个梳理。
四周飞控主要也就是两个方面,姿态结算和电机控制。姿态结算正确,经过PID运算之后可以使用STM32很简单的调制出四路PWM波,送到电调去控制电机的转速。
姿态结算:
机体坐标系,惯性坐标系,两者之间的转化有姿态转移矩阵使用,两者时间可以进行自由的转化。
首先就是使用加速度计的数据去初始化四元数,至于四元数的概念也不是很清楚,查阅大量文献之后还是没有什么结果,四元数在适应过程中一定要进行初始化,然后通过陀螺仪的数据去进行姿态更新,其中解算微分方程的方法使用毕卡算法,还可以使用龙格库塔方法,最后就可以根据陀螺仪的数据去实时的更新机体的姿态数据,但是由于陀螺仪精度,零飘等因素的影响,使用陀螺仪得到的四元数需要转化为欧拉角的形式,这个角度会和角速度计得到的角度信息进互补滤波,互补滤波其实就是对一个因素进行低通滤波,对另一个因素进行高通滤波,有点类似于加权平均的意思。最后就可以得到飞行器的实时姿态信息了。这样整个的姿态结算流程算是结束了。
电机控制:
四轴飞行器最终实现六个自由度依靠改变四个电机的转速,改变转速的方式就是给予电子调速器不同的高电平时间,这样就可以调节转速。调速算法我使用串级PID的形式,角度环作为外环,角速度环作为内环,整个系统的输入就是遥控器的输入,捕获PWM波可以直接使用定时器的功能,需要注意的就是一定要把输入量和反馈量放在一个数量级上,具体的实现方式时把输入除以某个数值,也可以把反馈的角度信息放大到与输入量一个数量级上。
剩下的就是无止境的PID参数调试,注意调试方法,很快就可以得到一个满意的结果。
给出一个串级PID的实现代码:
void pid_calculate(void)
{
float angle_error;
float angle_neihuan_error;
float angle_error_sum;
float angle_neihuan_error_sum;
float waihuan_p_value;
float waihuan_i_value;
float waihuan_d_value;
float neihuan_p_value;
float neihuan_i_value;
float neihuan_d_value;
float neihuan_p_output;
float neihuan_i_output;
float neihuan_d_value;

angle_error=expect_value-feedback_value;
angle_error_sun+=angle_error;
 waihuan_p_output=angle_error*waihaun_p_value;

waihuan_i_output=angle_error_sum*waihuan_i_value;
waihuan_d_output=(angle_error-angle_last_error)*waihuan_d_value;

waihuan_output=waihuan_p_output+waihuan_i_output+waihuan_d_output;

angle_neihuan_error=waihuan_output-gyio.x;
angle_neihuan_error_sum+=angle_neihuan_error;
neihuan_p_output=angle_neihuan_error*neihuan_p_value;
neihuan_i_output=angle_neihuan_error_sum*neihuan_i_value;
neihuan_d_output=(angle_error-angle_error_last)waihuan_d_value;
angle_error_last=angle_error;
angle_neihuan_error_last=angle_neihuan_error;

return neihuan_p_output+neihuan_i_output+neihuan_d_output;
}
代码时现敲的,主要时为了说明思想,有很多细小的错误!有时间再改吧,这回出去吃饭!!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值