当角度为弧度时,我的Matlab程序正常工作,因此我在下面的代码中调用cos和sin函数。当角度以度为单位,因此我称之为cosd和sind,我的程序无法按预期工作。
%Initial configuration of robot manipulator
%There are 7DOF( degrees of freedom) - 1 prismatic, 6 revolute
%vector qd represents these DOF
%indexes : d = gd( 1), q1 = qd( 2), ..., q6 = qd( 7)
qd( 1) = 1; % d = 1 m
qd( 2) = pi / 2; % q1 = 90 degrees
qd( 3 : 6) = 0; % q2 = ... = q6 = 0 degrees
qd( 7) = -pi / 2;
%Initial position of each joint - the tool is manipulated separately
%calculate sinusoids and cosines
[ c, s] = sinCos( qd( 2 : length( qd)));
这里是sinCos代码
function [ c, s] = sinCos( angles)
%takes a row array of angles in degrees and returns all the
%sin( angles( 1) + angles( 2) + ... + angles( i)) and
%cos( angles( 1) + angles( 2) + ... + angles( i)) where
%1 <= i <= length( angles)
sum = 0;
s = zeros( 1, length( angles)); % preallocate for speed
c = zeros( 1, length( angles));
for i = 1 : length( angles)
sum = sum + angles( i);
s( i) = sin( sum); % s( i) = sin( angles( 1) + ... + angles( i))
c( i) = cos( sum); % c( i) = cos( angles( 1) + ... + angles( i))
end % for
% end function
整个程序大约是700行,所以我只显示了上面的部分。我的程序模拟了一个冗余机器人的运动,它试图在避开两个障碍的同时达到目标。
那么,我的问题是否与cos和cosd有关? cos和cosd有不同的行为会影响我的程序吗?或者我的程序中有一个错误?
答案 0 :(得分:0)
根据差异,你的意思是小于.00001的顺序吗?因为浮点算术错误可以打折非常小的错误。计算机无法准确计算十进制数,因为它们能够存储它们。因此,您不应该直接比较两个浮点数;必须允许一系列错误。您可以在此处详细了解:http://en.wikipedia.org/wiki/Floating_point#Machine_precision_and_backward_error_analysis
如果您的错误大于.0001左右,您可以考虑在程序中搜索错误。如果您还没有使用matlab为您转换单位,请考虑这样做,因为我发现它可以消除许多“明显的”错误(在某些情况下会提高精度)。