【Matlab 6自由度ロボット】モンテカルロ法に基づいてワークスペースを構築
過去のレビュー
【Matlab 6自由度ロボット】
1. ロボットモデルの確立
2. 運動学の正解
序文
この記事では主に、MATLAB でモンテカルロ ランダム サンプリング手法を実装する方法を紹介します。角度範囲内の各関節に対して多数のサンプリング ポイントをランダムに選択し、順運動学計算を実行して対応する終了位置を取得し、終了位置ポイントを描画してロボットのワークスペースを視覚化します。この記事は 2 部に分かれており、第 1 部ではモンテカルロ法
の基本特性とロボット ワークスペースについて説明し、第 2 部ではコードの実装を分析します。
文章
1. モンテカルロ法とロボットワークスペースの概要
ロボットの動作空間はマニピュレータの性能を評価するための重要な指標であり、マニピュレータの動作空間を解析する手法としては、幾何作図法、解析法、数値計算法の3つがあります。
モンテカルロ法とは数値計算手法の一つで、多数のサンプリング点をランダムに選択してロボットの完全な作業空間を可能な限り構築する手法です。
1. モンテカルロ法
マニピュレータの作業空間を解決する方法は主に次のとおりです。グラフィカルな方法、分析方法と数値法。ただし、グラフィック手法と解析手法は両方とも関節の数によって制限され、一部のマニピュレータでは正確に記述することができません。数値手法は計算量が多すぎ、一部の境界面の信頼性は保証できません。そこで、数値法から導出されるランダム確率に基づくアルゴリズム、モンテカルロ法が採用されます。
統計シミュレーション法としても知られるモンテカルロ法は、ランダムサンプリング (擬似乱数) を利用して数学的問題を解決する数値手法であり、特定のランダムな物理現象を記述するためにエンジニアリングで広く使用されています。この方法は、グラフィック表示機能の実現が容易で、計算速度が速くて簡単で、複雑な数学的導出と計算プロセスが省略され、あらゆる多関節マニピュレータのワークスペースを解決するのに適しています。関節変数の範囲に制限がなく、その誤差は寸法とは無関係です。
マニピュレータの作業空間を解くためにモンテカルロ法を適用する基本的な考え方
- ロボット アームの各関節は、対応する値の範囲内で動作します。
- すべてのジョイントは、対応する値の範囲内の値をランダムに移動します。
- エンドポイントのすべてのランダム値の集合がロボット アームのワークスペースを構成します。
2. ロボット作業スペース
ロボットのワークスペースは、ロボットが可能なすべてのアクションを実行するときにエンドエフェクターが掃引する空間の総体積です。作業スペースは、ロボットの形状と各関節の機械的制限によって制限されます。たとえば、6 自由度のロボットの各関節は、以前の記事: ロボット モデルの構築のように、異なる角度によって制限されます。床機能に応じて、6R ロボットのさまざまな関節はさまざまな程度に制限されます。
L1.qlim = [(-165/180)*pi,(165/180)*pi];
L2.qlim = [( -95/180)*pi, (70/180)*pi];
L3.qlim = [( -85/180)*pi, (95/180)*pi];
L4.qlim = [(-180/180)*pi,(180/180)*pi];
L5.qlim = [(-115/180)*pi,(115/180)*pi];
L6.qlim = [(-360/180)*pi,(360/180)*pi];
ワークスペースは一般に、アクセス可能なワークスペースとフレキシブル ワークスペースに分類できます。
到達可能ワークスペースとは、ロボットが到達できるすべての点の集合を指し、フレキシブルワークスペースとは、ロボットが任意の姿勢で到達できるすべての点の集合を指します。明らかに、フレキシブル ワークスペースは到達可能なスペースのサブセットです。したがって、この記事の主な内容とプログラミングの焦点は次のとおりです。アクセス可能なワークスペース。
2番目に、rand関数の応用
1.ランド関数
モンテカルロ法のランダム性については、 rand()
関数を使用してそれを表します。以下は rand()
関数の言い換えです。より詳細な説明については、MATLAB の公式 Web サイトを参照してください。一様分布乱数
rand()
関数の構文は次のとおりです。
文法 | 説明する |
---|---|
X = ランド | 区間 (0,1) 内の均一分布を返します。乱数 |
X = ランド(n) | n×nを返します乱数行列 |
X = rand(sz1,…,szN) | 乱数の sz1×…×szN 配列を返します。ここで、sz1,…,szN は各次元のサイズを示します。例: rand(3,4) は 3×4 行列を返します。 |
X = ランド(sz) | サイズ ベクトル sz が size(X) を指定する乱数の配列を返します。例: rand([3 4]) は 3×4 行列を返します。 |
X = ランド(___,タイプ名) | 戻るtypename データ型の乱数の配列。typename 入力には、「single」または「double」を指定できます。上記の構文では任意の入力パラメータを使用できます。 |
X = ランド(___,'like',p) | p などの乱数の配列、つまり p と同じオブジェクト タイプを返します。typename または 'like' を指定できます。但不能同时指定两者 |
X = ランド(s,___) | デフォルトのグローバル ストリームの代わりに乱数ストリームから数値を生成します。ストリームを作成するには、RandStream を使用します。'like' を含む組み合わせを除き、上記の構文で s の後にパラメーターの任意の組み合わせを指定します。この構文は「like」入力をサポートしていません |
注意!
rand 関数への 'seed'、'state'、および 'twister' 入力は非推奨になりました。
2.ランダムにドットを描く
上記の rand()
機能を理解した上で、角度範囲内でロボットの関節角度を乱数で選択する一般的なコードは次のとおりです。
thetamin*(pi/180) + (thetamax-thetamin)*(pi/180)*rand;
このコードの意味は、角度範囲の最小値と角度範囲内の乱数に基づいて、軸のジョイントの現在のランダムな角度値が取得されることです。
3. 運動学の正解法を用いたモンテカルロ法に基づくワークスペースの構築
1. 運動学の正解
コードスクリプトはここに直接貼り付けていますので、運動学の正解を知りたい方は前回の記事【Matlab 6自由度ロボット】運動学の正解をご覧ください。
スクリプトは次のとおりです。
function [T06] = MODtransmatrix(theta1,theta2,theta3,theta4,theta5,theta6)
%%
%连杆偏移
d1 = 398;
d2 = -0.299;
d3 = 0;
d4 = 556.925;
d5 = 0;
d6 = 165;
%连杆长度
a1 = 0;
a2 = 168.3;
a3 = 650.979;
a4 = 156.240;
a5 = 0;
a6 = 0;
%连杆扭角
alpha1 = 0;
alpha2 = pi/2;
alpha3 = 0;
alpha4 = pi/2;
alpha5 = -pi/2;
alpha6 = pi/2;
MDH = [theta1 d1 a1 alpha1;
theta2+pi/2 d2 a2 alpha2;
theta3 d3 a3 alpha3;
theta4 d4 a4 alpha4;
theta5 d5 a5 alpha5;
theta6 d6 a6 alpha6];
T01=[cos(MDH(1,1)) -sin(MDH(1,1)) 0 MDH(1,3);
sin(MDH(1,1))*cos(MDH(1,4)) cos(MDH(1,1))*cos(MDH(1,4)) -sin(MDH(1,4)) -sin(MDH(1,4))*MDH(1,2);
sin(MDH(1,1))*sin(MDH(1,4)) cos(MDH(1,1))*sin(MDH(1,4)) cos(MDH(1,4)) cos(MDH(1,4))*MDH(1,2);
0 0 0 1];
T12=[cos(MDH(2,1)) -sin(MDH(2,1)) 0 MDH(2,3);
sin(MDH(2,1))*cos(MDH(2,4)) cos(MDH(2,1))*cos(MDH(2,4)) -sin(MDH(2,4)) -sin(MDH(2,4))*MDH(2,2);
sin(MDH(2,1))*sin(MDH(2,4)) cos(MDH(2,1))*sin(MDH(2,4)) cos(MDH(2,4)) cos(MDH(2,4))*MDH(2,2);
0 0 0 1];
T23=[cos(MDH(3,1)) -sin(MDH(3,1)) 0 MDH(3,3);
sin(MDH(3,1))*cos(MDH(3,4)) cos(MDH(3,1))*cos(MDH(3,4)) -sin(MDH(3,4)) -sin(MDH(3,4))*MDH(3,2);
sin(MDH(3,1))*sin(MDH(3,4)) cos(MDH(3,1))*sin(MDH(3,4)) cos(MDH(3,4)) cos(MDH(3,4))*MDH(3,2);
0 0 0 1];
T34=[cos(MDH(4,1)) -sin(MDH(4,1)) 0 MDH(4,3);
sin(MDH(4,1))*cos(MDH(4,4)) cos(MDH(4,1))*cos(MDH(4,4)) -sin(MDH(4,4)) -sin(MDH(4,4))*MDH(4,2);
sin(MDH(4,1))*sin(MDH(4,4)) cos(MDH(4,1))*sin(MDH(4,4)) cos(MDH(4,4)) cos(MDH(4,4))*MDH(4,2);
0 0 0 1];
T45=[cos(MDH(5,1)) -sin(MDH(5,1)) 0 MDH(5,3);
sin(MDH(5,1))*cos(MDH(5,4)) cos(MDH(5,1))*cos(MDH(5,4)) -sin(MDH(5,4)) -sin(MDH(5,4))*MDH(5,2);
sin(MDH(5,1))*sin(MDH(5,4)) cos(MDH(5,1))*sin(MDH(5,4)) cos(MDH(5,4)) cos(MDH(5,4))*MDH(5,2);
0 0 0 1];
T56=[cos(MDH(6,1)) -sin(MDH(6,1)) 0 MDH(6,3);
sin(MDH(6,1))*cos(MDH(6,4)) cos(MDH(6,1))*cos(MDH(6,4)) -sin(MDH(6,4)) -sin(MDH(6,4))*MDH(6,2);
sin(MDH(6,1))*sin(MDH(6,4)) cos(MDH(6,1))*sin(MDH(6,4)) cos(MDH(6,4)) cos(MDH(6,4))*MDH(6,2);
0 0 0 1];
T06 = T01*T12*T23*T34*T45*T56;
end
知らせ!!!
これはtheta2+pi/2
、ロボットの 2 番目の関節に 90° の関節オフセットがあるため、それをtheta2
上記に追加する必要があるためですpi/2
。
2. ワークスペースを構築する
各関節の角度値制限を行った後、第 3 章第 1 節の運動学ポジティブソリューションのスクリプトを通じてMODtransmatrix
ロボットの終了位置を取得し、最後にplot3()
関数を通じて画像を描画し、最終的にロボットのおおよその作業空間に到達します。
コードは以下のように表示されます:
theta1min = -165;theta1max = 165;
theta2min = -95 ;theta2max = 70 ;
theta3min = -85 ;theta3max = 95 ;
theta4min = -180;theta4max = 180;
theta5min = -115;theta5max = 115;
theta6min = -360;theta6max = 360;
%
n = 30000;
x = zeros;y = zeros;z = zeros;
for i = 1:n
theta1 = theta1min*(pi/180) + (theta1max-theta1min)*(pi/180)*rand;
theta2 = theta2min*(pi/180) + (theta2max-theta2min)*(pi/180)*rand;
theta3 = theta3min*(pi/180) + (theta3max-theta3min)*(pi/180)*rand;
theta4 = theta4min*(pi/180) + (theta4max-theta4min)*(pi/180)*rand;
theta5 = theta5min*(pi/180) + (theta5max-theta5min)*(pi/180)*rand;
theta6 = theta6min*(pi/180) + (theta6max-theta6min)*(pi/180)*rand;
Tws = MODtransmatrix(theta1,theta2,theta3,theta4,theta5,theta6);
x(i) = Tws(1,4);
y(i) = Tws(2,4);
z(i) = Tws(3,4);
end
figure('color',[1 1 1]);
plot3(x,y,z,'b.','MarkerSize',0.5)
hold on
xlabel('x轴(millimeter)','color','k','fontsize',15);
ylabel('y轴(millimeter)','color','k','fontsize',15);
zlabel('z轴(millimeter)','color','k','fontsize',15);
grid on
3. コードの実行結果
結果は次のとおりです。
要約する
本稿では, MATLAB でモンテカルロランダムサンプリング法を実現する方法を主に紹介します. 角度範囲内の各関節に対して多数のサンプリング点がランダムに選択され, 順運動学を計算することによって対応する終了位置が得られます. 終了位置点の描画に従って, ロボットのワークスペースが構築されます.
参考文献
1. モンテカルロ法の MATLAB 実装
2. モンテカルロ法
4. マニピュレータ―6 軸マニピュレータアーム操作空間の動作解析
5. ロボット作業空間の可視化(モンテカルロ法)
6. モンテカルロ法に基づく 7 自由度擬人化マニピュレータ作業空間解析