可とう体としての掘削機ディッパー アームのモデル化
Reduced Order Flexible Solidブロックは、ボディの幾何学的、機械的特性を特徴付ける低次元化されたモデルに基づいて、変形可能なボディをモデル化します。低次元化されたモデルからインポートされる基本的なデータには以下が含まれます。
すべてのインターフェイス座標系の原点の位置を共通の基準座標系に対して相対的に指定する、座標の 3 要素のリスト。
可とう体の弾性特性を説明する対称剛性行列。
可とう体の慣性特性を説明する対称質量行列。
このブロックに必要な低次元化されたデータを生成するには、いくつかの方法があります。通常は、有限要素解析 (FEA) ツールを使用して、サブ構造体 (またはスーパー要素) を生成します。
この例では、Partial Differential Equation Toolbox™ を使用して、柔軟なディッパー アーム (掘削機やバックホーのアームなど) の低次元化されたモデルを作成します。ディッパー アームの CAD ジオメトリから開始して、有限要素メッシュを生成し、クレイグ-バンプトン FEA 部分構造法を適用し、低次元化されたモデルを生成します。モデル ReducedOrderFlexibleSolid
は、この例の低次元化されたデータを使用します。モデル内で、ディッパー アームは、試験リグの一部として回転タワーの上部に取り付けられます。詳細については、Reduced Order Flexible Solid ブロックの使用 - 柔軟なディッパー アームを参照してください。
ジオメトリ ファイルを現在の MATLAB® セッションの検索パスに追加します。
openExample("sm/ExcavatorDipperArmAsFlexibleBodyExample"); addpath(genpath("ExcavatorDipperArmAsFlexibleBodySupport"));
手順 1: ディッパー アームのジオメトリ特性と材料特性の定義
ファイル Dipper.STL
には、ディッパー アームの CAD ジオメトリを定義する三角形分割が含まれています。このファイルに保存されているジオメトリを表示するには、MATLAB® 関数stlread
およびtrisurf
を使用してください。
stlFile = 'Dipper.STL'; figure trisurf(stlread(stlFile)) axis equal
ディッパー アームは鋼鉄製です。その材料特性を表現するには、ヤング率、ポアソン比、質量密度に以下の値を設定します。
E = 200e9; % Young's modulus in Pa nu = 0.26; % Poisson's ratio (nondimensional) rho = 7800; % Mass density in kg/m^3
手順 2: インターフェイス座標系の場所の指定
ディッパー アームには 3 つのインターフェイス座標系があり、Simscape™ Multibody™ の他の要素 (ジョイント、拘束、力、センサーなど) を接続できます。
シリンダー接続点。アームを垂直方向に作動させる油圧シリンダーとアームを接続します。
バケット接続点。掘削機のバケットとアームを接続します。
支点。掘削機のブームとアームを接続します。
すべてのインターフェイス座標系の原点の位置は、メートル単位で、CAD ジオメトリと同じ共通の基準座標系に対して指定されます。
origins = [-0.500 0 0 % Frame 1: Cylinder connection point 1.500 0 0 % Frame 2: Bucket connection point 0 -0.130 0]; % Frame 3: Fulcrum point numFrames = size(origins,1);
手順 3: 有限要素メッシュの作成
ディッパー アームのメッシュを生成するには、まず関数createpde
(Partial Differential Equation Toolbox)を呼び出します。これにより、固体 (3 次元) 問題のモード解析のための構造モデルが作成されます。アームのジオメトリ特性と材料特性をインポート後、関数generateMesh
(Partial Differential Equation Toolbox)によってメッシュが作成されます。
feModel = createpde('structural','modal-solid'); importGeometry(feModel,stlFile); structuralProperties(feModel, ... 'YoungsModulus',E, ... 'PoissonsRatio',nu, ... 'MassDensity',rho); generateMesh(feModel, ... 'GeometricOrder','quadratic', ... 'Hmax',0.2, ... 'Hmin',0.02);
手順 4: インターフェイス座標系用の多点拘束の設定
ブロック上のインターフェイス座標系はそれぞれ、低次元化されたモデルに 6 つの自由度を与える各境界ノードに対応します。FEA 部分構造法で必要な自由度を確実に保持する方法がいくつかあります。たとえば、剛体拘束を作成して、ボディ上の有限要素ノードのサブセットに境界ノードを接続することができます。また、ビームやシェルの要素など、構造化要素を使用して、ノードに 6 つの自由度を導入することもできます。
この例では多点拘束 (MPC) を使用して、各境界ノードで 6 つの自由度を保持します。各 MPC と関連付ける幾何学的領域 (面、エッジ、頂点など) を識別するには、まず関数pdegplot
(Partial Differential Equation Toolbox)を使用してアームのジオメトリをプロットします。
figure pdegplot(feModel,'FaceLabels','on','FaceAlpha',0.5)
このイメージをズーム、回転、パンすることにより、境界ノードに対応する面のラベルを特定できます。以下の面により、ディッパー アームの境界ノードに関連付けられている MPC が定義されます。
シリンダー接続点: 面 1
バケット接続点: 面 27
支点: 面 23
faceIDs = [1,27,23]; % List in the same order as the interface frame origins
これらの値を検証するには、メッシュをプロットして選択した面を強調表示します。
figure pdemesh(feModel,'FaceAlpha',0.5) hold on colors = ['rgb' repmat('k',1,numFrames-3)]; assert(numel(faceIDs) == numFrames); for k = 1:numFrames nodeIdxs = findNodes(feModel.Mesh,'region','Face',faceIDs(k)); scatter3( ... feModel.Mesh.Nodes(1,nodeIdxs), ... feModel.Mesh.Nodes(2,nodeIdxs), ... feModel.Mesh.Nodes(3,nodeIdxs), ... 'ok','MarkerFaceColor',colors(k)) scatter3( ... origins(k,1), ... origins(k,2), ... origins(k,3), ... 80,colors(k),'filled','s') end hold off
関数structuralBC
(Partial Differential Equation Toolbox)を呼び出して、これらの面にある境界ノードの MPC を定義します。
for k = 1:numFrames structuralBC(feModel, ... 'Face',faceIDs(k), ... 'Constraint','multipoint', ... 'Reference',origins(k,:)); end
手順 5: 低次元化されたモデルの生成
関数reduce
(Partial Differential Equation Toolbox)は、クレイグ-バンプトン低次元化法を適用し、 ラジアン/秒の周波数までの固定インターフェイス モードをすべて保持します。
rom = reduce(feModel,'FrequencyRange',[0 1e4]);
低次元化の結果をデータ構造体 arm
に保存します。Partial Differential Equation Toolbox および Simscape Multibody で使用されるさまざまなレイアウト規則に対応するために、ReferenceLocations
行列を転置します。
arm.P = rom.ReferenceLocations'; % Interface frame locations (n x 3 matrix) arm.K = rom.K; % Reduced stiffness matrix arm.M = rom.M; % Reduced mass matrix
関数 computeModalDampingMatrix
(このページの下部で定義) は、0.05 の減衰比で、低次元化されたモーダル減衰行列を計算します。
dampingRatio = 0.05; arm.C = computeModalDampingMatrix(dampingRatio,rom.K,rom.M);
低次元化されたモデル内の境界ノードは、ブロック上の対応するインターフェイス座標系と同じ順序で指定しなければなりません。この順序は配列 origins
の行によって与えられます。MPC の順序が origins
で指定されている順序と異なる場合は、さまざまな行列の行と列を、元の順序と一致するように並べ替えます。
frmPerm = zeros(numFrames,1); % Frame permutation vector dofPerm = 1:size(arm.K,1); % DOF permutation vector assert(size(arm.P,1) == numFrames); for i = 1:numFrames for j = 1:numFrames if isequal(arm.P(j,:),origins(i,:)) frmPerm(i) = j; dofPerm(6*(i-1)+(1:6)) = 6*(j-1)+(1:6); continue; end end end assert(numel(frmPerm) == numFrames); assert(numel(dofPerm) == size(arm.K,1)); arm.P = arm.P(frmPerm,:); arm.K = arm.K(dofPerm,:); arm.K = arm.K(:,dofPerm); arm.M = arm.M(dofPerm,:); arm.M = arm.M(:,dofPerm); arm.C = arm.C(dofPerm,:); arm.C = arm.C(:,dofPerm);
手順 6: 低次元されたデータのインポート
モデル ReducedOrderFlexibleSolid
は、データ構造体 arm
を使用して Reduced Order Flexible Solid ブロックのパラメーターを設定します。ブロック内で、これらのパラメーターは低次元化されたデータをインポートします。
Origins:
arm.P
Stiffness Matrix:
arm.K(1:24,1:24)
Mass Matrix:
arm.M(1:24,1:24)
Damping Matrix:
arm.C(1:24,1:24)
詳細については、Reduced Order Flexible Solid ブロックの使用 - 柔軟なディッパー アームを参照してください。
モーダル減衰行列の計算
この関数は、剛性行列 K
および質量行列 M
と関連付けられているモーダル減衰行列を計算します。この関数は、K
および M
と関連付けられているすべての柔軟な (剛体ではない) ノーマル モードに対して、単一のスカラー減衰比を適用します。
function C = computeModalDampingMatrix(dampingRatio,K,M) % To avoid numerical issues (such as complex eigenvalues with very small % imaginary parts), make the matrices exactly symmetric. K = (K+K')/2; % Stiffness matrix M = (M+M')/2; % Mass matrix % Compute the eigen-decomposition associated with the mass and stiffness % matrices, sorting the eigenvalues in ascending order and permuting % the corresponding eigenvectors. [V,D] = eig(K,M); [d,sortIdxs] = sort(diag(D)); V = V(:,sortIdxs); % Due to small numerical errors, the six eigenvalues associated with the % rigid-body modes may not be exactly zero. To avoid numerical issues, % check that the first six eigenvalues are close enough to zero. Then % replace them with exact 0 values. assert(all(abs(d(1:6))/abs(d(7)) < 1e-9),'Error due to "zero" eigenvalues.'); d(1:6) = 0; % Vectors of generalized masses and natural frequencies MV = M*V; generalizedMasses = diag(V'*MV); naturalFrequencies = sqrt(d); % Compute the modal damping matrix associated with K and M C = MV * diag(2*dampingRatio*naturalFrequencies./generalizedMasses) * MV'; end
参考
Reduced Order Flexible Solid | stlread
| trisurf
| createpde
(Partial Differential Equation Toolbox) | importGeometry
(Partial Differential Equation Toolbox) | structuralProperties
(Partial Differential Equation Toolbox) | generateMesh
(Partial Differential Equation Toolbox) | pdegplot
(Partial Differential Equation Toolbox) | structuralBC
(Partial Differential Equation Toolbox) | reduce
(Partial Differential Equation Toolbox)