我一直在写一些四轴飞行器软件,我不确定将油门和PID输入映射到ESC电源的最佳方法是什么。

我的油门范围是0-1,PID输出是0-1。我的ESC的范围是1060us至1860us。

我已将电动机速度映射为:处于完美水平(即PID输出为0),我应用了全油门(1.0),然后将其映射到ESC电源,我将只获得四分之一电源(1260us)。如果我的油门在最大位置,那么我将获得最大功率?如果我的节气门是一半(0.5),那么我应该获得一半的功率加上PID值等。

有人可以帮我吗? br />

评论

也许这个问题对某些人有意义,但是如果没有上下文,那些函数调用就变得毫无意义了?

浮动图(float x,float in_min,float in_max,float out_min,float out_max); //在他的示例中,获取x的值,并将其从[0..4]范围线性重新映射到[1060..1860]范围。

#1 楼

对于每个电动机,输出应为:


这四个电动机的功率大致使四轴飞行器保持空中飞行的值,例如1500ms。油门。例如,如果油门在0:1范围内,则可以应用600 *(油门-0.5),这会将电动机输出设置在1200:1800ms范围内。
加减PID输出。例如,如果您的PID在0:1范围内,则可以添加200 *(PID-0.5)。单独的PID贡献将在-100:100范围内。对于+4配置,每个电动机要添加2个PID,因此输出将在1000:2000ms范围内。这是我对此未修改的代码。我的油门在-100:100范围内,我的PID已经在适当的范围内。我相信您可以轻松地将其转换为自己的规范。 />当您意识到可能的电动机输出超出ESC范围时,这是很糟糕的。限制输出不是一种完美的方法,因为它会使您的PID计算失败。维持电动机之间的速度比的一种更好的方法是为所有电动机添加或删除一个常数,以使所有输出恢复到范围内。这是我自己的代码中的一个示例,我希望它是有道理的。 >

评论


$ \ begingroup $
目前,我正在限制电动机输出。您描述的方法很有意义,我将尝试实现它。感谢您的回答。
$ \ endgroup $
–约瑟夫·罗伯茨(Joseph Roberts)
2014年5月16日14:43

$ \ begingroup $
嗨,我不确定油门部分。我的油门在-1和1之间,从您所说的开始,我应该尝试达到1100-1800的整个油门范围。这是否意味着我计算出油门基准的公式为1450 +(350 *油门)?我有一个X config quad,所以每个电机都有3个PID。它们的输出在-1和1之间。对于每一个,公式应为100 * PIDValue?这听起来正确吗?
$ \ endgroup $
–约瑟夫·罗伯茨(Joseph Roberts)
2014年5月21日在7:58



$ \ begingroup $
@JosephBaldwinRoberts,对于X设置,每个电机3个PID是正确的。如果您绑定了PID(我没有这样做),则需要确保您使用了适当的技术(反向计算等)。我推荐的油门公式实际上是A + B *油门。 A = 1450和B = 350是很好的值,但是如果在油门杆居中时四轴飞行器上升/下降,则可以使用A的其他值,而在移动油门杆时四轴飞行器上升/下降太快时,可以使用B的其他值。
$ \ endgroup $
– marcv81
2014年5月22日晚上11:16