将角度从 [-180,180] 标准化为 [0,180]

normalize angles from [-180,180] to [0,180]

我有伺服电机只能从0转到180 我的角度范围从 -180 到 180 发送到伺服 我怎样才能在这两个范围之间进行归一化? 如果有任何 MATLAB 函数可以做到这一点? 谢谢

您可以按照@High Performance Mark 为您的特定问题建议的那样加 180 并除以 2,或者这是基于 This post.

的通用版本

这个等式适用于任何限制

我写了一个基于等式的简单函数:

function [out] = normalizeLim( A,oldL,oldR,newL,newR )

    out = newL*(1-((A-oldL)./(oldR-oldL))) + newR*((A-oldL)./(oldR-oldL));

end

示例:

x = randi([-180,180],1,8); %//  Generating a random vector within the range -180 to 180

>> x

x =

-153  -161    11   101   157  -134    25   -11

>> normalizeLim(x,-180,180,0,180) %// Specifying old and new required limits

ans =

13.5000    9.5000   95.5000  140.5000  168.5000   23.0000  102.5000   84.5000

如果您希望它们是整数,您可以使用 round 函数

对它们进行四舍五入

希望对您有所帮助!!