0

角度がラジアンの場合、私の 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行になるので、上の部分だけ表示しました。私のプログラムは、2 つの障害物を避けながらゴールに到達しようとする冗長ロボットの動きをシミュレートします。

それで、私の問題は cos と cosd に関連していますか? cos と cosd には、私のプログラムに影響を与える異なる動作がありますか? または、明らかになった私のプログラムにバグがありますか?

4

1 に答える 1

0

差とは、.00001 未満のオーダーのことを意味しますか? 浮動小数点演算エラーによる非常に小さなエラーは無視できるためです。コンピュータは、10 進数を格納できるほどの正確さで 10 進数を正確に計算することはできません。このため、2 つの浮動小数点数を直接比較してはいけません。一定範囲の誤差を許容する必要があります。詳細については、こちらをご覧ください: http://en.wikipedia.org/wiki/Floating_point#Machine_precision_and_backward_error_analysis

エラーが .0001 程度より大きい場合は、プログラムのバグを検索することを検討してください。まだ matlab を使用して単位を変換していない場合は、そうすることを検討してください。これにより、多くの「明らかな」エラーを排除できる (場合によっては精度が向上する) ことがわかっています。

于 2012-07-09T19:51:27.723 に答える