カスタマイズ可能なソルバーモデル
パラメトリックなオブジェクトとモデル
- 材料は鋼鉄です。密度: rho=7800 Kg/m3
- 球体の半径: r
- 球体の質量: m = (4/3) * pi * r3 * rho Kg
- 球体の中心の周りの慣性: Ixx = Iyy = Izz = ½ * m * r2
def sphere (r, rho, loc, label):
mass = (4/3) * math.pi * (r**3) * rho
ixx = iyy = izz = 0.5 * mass * r**2
sphere = Part (mass=mass, ip=[ixx,iyy,izz], label=label)
sphere.cm = Marker (part=sphere, qp=loc, label=label + "_CM")
return sphere
# Steel sphere of radius 0.1 m (10 cm)
r1 = 0.10
rho1 = 7800
loc1 = [0,10,-25]
sph1 = sphere (r1, rho1, loc1, "Steel-Sphere")
# Aluminum sphere of radius 0.05 m (5 cm)
r2 = 0.05
rho2 = 2700
loc2 = [23, 34, 45]
sph2 = sphere (r2, rho2, loc2, "Aluminum-Sphere")
設計可能なオブジェクトとモデル
設計可能なオブジェクトとは、MotionSolve側でパラメトリック関係が認識されているオブジェクトのことです。結果として、MotionSolveは、そのオブジェクトをパラメータ化するために使用される設計変数に関して、任意のシステム応答の感度を計算する方法も認識します。
- 設計変数を作成します。これは、MotionSolveに最近導入された新しいオブジェクトクラスです。
- 設計変数を使用してモデルをパラメータ化します。
- モデルレベルで、応答変数を作成します。
- DSA(Design Sensitivity Analysis)をオンにした状態でシミュレーションを実行します。
- MotionSolveによって、設計変数の変化に対する応答変数の感度が計算されます。この情報は、さまざまな方法でユーザーに提供されます。
- 設計変数
- 設計変数(Dv)は、ラベルと値が格納されているオブジェクトです。ラベルはそのDvの名前であり、値はそのDvの値です。次に、設計変数の例を示します:
bx = Dv ( label="X coordinate of Point B", b=1.0/math.sqrt(2))
- ポイントとベクトル
- MotionViewでのモデリングとパラメータ化のほとんどは、ポイントとベクトルを使用して実行されます。MotionSolve-Pythonインターフェースは、PointクラスとVectorクラスをサポートしています。これらのヘルパークラスの目的は、MotionSolveモデルを簡素化し、MotionSolveモデルでのMotionViewモデルのパラメータ化を容易に捕捉することです。
- Vectorクラス
- ベクトルは、大きさと方向を持つオブジェクトです。このリリースでは、ベクトルは常に全体参照フレーム内で定義されます。ベクトルは、モデル内のどのボディとも一緒に回転したり移動したりすることはありません。
- Pointクラス
- ポイントは、空間内の位置です。これは、3つの実数値のリストとして表されます。Pointには、他のデータタイプを指定することはできません。これらの3つの値は、他のポイントを基準にした空間内の位置の座標です。ポイントに対して操作が実行される際は常に、すべてのポイント座標が同じ座標系で表されていることを確認する必要があります。ポイントでは多くのメソッドがサポートされているため、さまざまな方法でポイントを使用できます。以下に、ポイントのいくつかの組み込みメソッドを示します。
ポイントの作成 ポイントのコピーの作成 ポイントへのインデックス付け >>> p=Point(1,2,3) >>> P Point (1.0, 2.0, 3.0) >>> q=Vector(-3,0,1) >>> v Point (-3.0, 0.0, 1.0)
>>>r = p.copy() >>> r Point (1.0, 2.0, 3.0)
>>> u.x 1 >>> u.y 2 >>> u[2] 3
単項マイナス 加算 減算 >>> -P Point (-1.0, -2.0, -3.0)
>>> p+q Point (-2.0, 2.0, 4.0)
>>> p-q Point (4.0, 2.0, 2.0)
2つのポイント間の距離 沿った距離 スケーリング >>> p.distanceTo(q) 4.898979485566356 >>> q.distanceTo(p) 4.898979485566356
>>> p.along(q, 10) Point (5.08248290464, -2.08248290464, -5.16496580928)
>>> p*10 Vector (10.0, 20.0, 30.0) >>> p.scale(10) Vector (10.0, 20.0, 30.0
ポイントとベクトルを使用した設計可能なエンティティ
>>> px = Dv (b=1)
>>> py = Dv (b=2)
>>> pz = Dv (b=3)
>>> p = Point(px,py,pz)
>>> p
Point (1.0, 2.0, 3.0)
>>> #Create a Part
>>> p2 = Part (mass=1, ip=[1e-4,1e-4,1e-4])
>>> p2.cm = Marker (body=p2)
>>> #Create a designable Marker - its origin and orientation are designable
>>> p2.left = Marker (body=p2, qp=p, zp=p+[0,0,1], label="Left end")
>>> p2.left.qp
Point (1.0, 2.0, 3.0)
これで、これらの設計可能なMBSエンティティを使用して設計感度解析を実行できるようになりました。Pythonインターフェースは、MotionSolveモデル内のすべての適切なMotionViewパラメータ化を捕捉できます。
def cyl_mass_prop (l, r, rho):
"""
calculate mass properties of a cylinder, given
(1) length = l
(2) radius = r
(3) density =rho
"""
r2 = r*r
l2 = l*l
mass = math.pi * r2 * l * rho
ixx = iyy = mass * (3 * r2 + l2) / 12
izz = mass * r2 / 2
return mass, ixx, iyy, izz
# Define the design variables (Units are Kg-mm-sec-Newton)
ax = Dv ( label="X coordinate of Point A", b=0)
ay = Dv ( label="Y coordinate of Point A", b=0)
bx = Dv ( label="X coordinate of Point B", b=40)
by = Dv ( label="Y coordinate of Point B", b=200)
rad = Dv ( label="Cylinder radius", b=10)
rho = Dv ( label="Cylinder density", b=7.8E-6)
# Define the points A, B
pa = Point (ax,ay,0) # 0, 0, 0
pb = Point (bx,by,0) # 40, 200, 0
# Link length
lab = pa.distanceTo (pb)
# Crank: cylinder of length lab, radius=rad, density=rho
m2, ixx2, iyy2, izz2 = cyl_mass_prop (lab, rad, rho)
p2 = Part (mass=m2, ip=[ixx2, iyy2, izz2, 0, 0, 0], label="Body Crank")
qploc = (pa+pb)/2
xploc = qploc + [0,0,1]
p2.cm = Marker (body=p2, qp=qploc, zp=pb, xp=xploc, label="Crank cm marker")
- パートp2は設計可能です。MotionSolveは、このパートの質量と慣性が、ポイントA(設計変数ax、ayによって定義)とポイントB(設計変数bx、byによって定義)の位置、シリンダーの半径rad、およびシリンダーの密度rhoの関数であると認識しています。
- 同様に、マーカー
p2.cm
は設計可能です。このマーカーの位置と向きは、設計変数ax、ay、bx、byによって決まります。