我正在Arduino上对飞行控制器进行编程。我研究了其他人的写法,但是却没有做笔记,这常常使人感到困惑,以至于我决定编写自己的书会变得更容易和更好。

到目前为止,这是我的伪代码,

所有这些都将在恒定的Arduino循环内发生


读取RX信号
从RX计算所需的俯仰角,侧倾角和偏航角输入
使用PWM的信号ESC,以匹配来自RX输入的期望的俯仰,侧倾和偏航
收集IMU值(使用卡尔曼滤波器来降低噪声)
比较滤波后的IMU值与RX输入查找期望结果与实际结果中的错误
使用PID算法解决IMU与RX之间的错误
漂洗和重复

建议深表感谢

#1 楼

PID算法完成对错误的处理后,应使用PWM将信号发送给ESC。由PID计算得出的输出是PWM值,该值将被发送到ESC以致动电动机,使其运动以减小误差,从而获得所需的方向

,因此正确的顺序是:


读取RX信号
从RX输入计算所需的俯仰角,侧倾角和偏航角
收集IMU值(使用卡尔曼滤波器以降低噪声)
比较滤波后的IMU值与RX输入之间的差异,以找到期望结果与实际结果之间的误差(获取PID算法输入的误差(目标-测量值))
使用PID算法解决IMU与RX之间的误差
使用PID控制器的输出(假设增益已经正确调整)作为对ESC的PWM信号
漂洗并重复

这些资源将来可能会有所帮助:



Quadcopter PID算法
不同的PID架构
级联PID控制器说明
PID输出不能精确达到设定值
是否有可能稳定四轴飞行器公司是否只想角度测量?


评论


$ \ begingroup $
很棒的信息。在发布此答案之前,我不知道存在“级联PID”或“控制拆分”。这无疑使我开辟了一些新的可能性,就我而言,这是SE答案的最终目标。您当然是一位绅士和学者!
$ \ endgroup $
–杰克逊克
16年8月8日在15:31

$ \ begingroup $
很高兴能为您提供帮助:)祝您好运:)
$ \ endgroup $
–user123456098
16年8月10日在1:57