ڈائنامکس کے بنیادی اصول
ایک روبوٹ آرم 2 kg کا وزن سیدھا باہر کی طرف پکڑے ہوئے ہے۔ اسے کوئی نہیں ہلا رہا، پھر بھی شولڈر (کاندھے) کی موٹر سخت محنت کر رہی ہے اور گرم ہو رہی ہے۔ اب آرم تیزی سے گھومتی ہے اور البو (کوہنی) کی موٹر اچانک جدوجہد کرنے لگتی ہے حالانکہ وزن نہیں بدلا۔ کائنیمیٹکس (Kinematics) ان میں سے کسی بات کی وضاحت نہیں کر سکتی۔ ڈائنامکس (Dynamics) کر سکتی ہے: یہ آپ کی موٹرز کے تیار کردہ ٹارکس (torques) کو حاصل ہونے والی حرکت سے جوڑتی ہے، اور آپ کو بتاتی ہے کہ کون سی موٹر خریدنی ہے۔
You will be able to
- وضاحت کریں کہ ریجڈ باڈی ڈائنامکس (rigid-body dynamics) کائنیمیٹکس میں کیا اضافہ کرتی ہے اور الفاظ میں Newton-Euler اور Lagrange کے طریقوں کو بیان کریں۔
- مینیپولیٹر مساوات کو لفظ بہ لفظ پڑھیں۔
- NumPy میں 2-لنک آرم کے لیے ماس میٹرکس، کوریولس (Coriolis) اور گریویٹی کی اصطلاحات کا حساب لگائیں۔
- فارورڈ اور انورس ڈائنامکس کا استعمال کریں، اور جوائنٹ ٹارک کی حدوں کے خلاف کسی حرکت کو چیک کریں۔
ڈائنامکس ہی کیوں؟
ڈائنامکساس بات کا مطالعہ کہ فورسز اور ٹارکس ماس اور انرشیا کو مدنظر رکھتے ہوئے حرکت کا باعث کیسے بنتے ہیں دو عملی سوالات کے جواب دیتی ہے۔
- انورس ڈائنامکس (Inverse dynamics): میری مطلوبہ حرکت (پوزیشنز، ویلوسٹیز، ایکسلریشنز) کے پیش نظر، مجھے کن جوائنٹ ٹارکس کی ضرورت ہے؟ کنٹرول کے لیے، موٹرز کا سائز طے کرنے کے لیے، اور یہ چیک کرنے کے لیے استعمال ہوتا ہے کہ آیا منصوبہ قابل عمل ہے۔
- فارورڈ ڈائنامکس (Forward dynamics): میرے لاگو کردہ ٹارکس کے پیش نظر، روبوٹ کیسے حرکت کرے گا؟ ہر فزکس سمیلیٹر کے ذریعہ استعمال کیا جاتا ہے، بشمول سیمولیشن ماڈیول والے۔
دونوں ایک ہی مساوات سے آتے ہیں۔ اس سے ملنے سے پہلے، ظاہر ہونے والی فورسز کے لیے بصیرت بنائیں۔
Newton-Euler بصیرت
جسم کے لیے نیوٹن کا قانون ہے۔ اس کا گھومتا ہوا جڑواں، یولر کا قانون، ہے (ٹارک روٹیشنل انرشیا ضرب اینگولر ایکسلریشن کے برابر ہے)۔ مومنٹ آف انرشیاماس کا گھومنے والا بدل: دیے گئے محور کے گرد کسی شے کی گھومنے کی رفتار کو بدلنا کتنا مشکل ہے (moment of inertia) ماس اور محور سے اس کے فاصلے دونوں پر منحصر ہوتا ہے۔ ایک لمبی آرم کو گھمانا شولڈر کے قریب رکھے گئے اسی ماس کے مقابلے میں کہیں زیادہ مشکل ہے۔
Newton-Euler طریقہ ان دونوں قوانین کو لنک بہ لنک لاگو کرتا ہے۔ ایک فارورڈ پاس بیس سے شروع ہوتا ہے اور باہر کی طرف کام کرتا ہے، ہر لنک کی ویلوسٹی اور ایکسلریشن کا حساب لگاتا ہے۔ ایک بیک ورڈ پاس ہینڈ سے شروع ہوتا ہے اور اندر کی طرف کام کرتا ہے، اس فورس اور ٹارک کا حساب لگاتا ہے جو ہر جوائنٹ کو اس حرکت کو پیدا کرنے اور اس سے آگے کے لنکس کو لے جانے کے لیے فراہم کرنا چاہیے۔ یہ موثر ہے، جوائنٹس کی تعداد کے متناسب وقت میں چلتا ہے، اور یہی زیادہ تر ریئل ٹائم ڈائنامکس لائبریریاں استعمال کرتی ہیں۔
Lagrange طریقہ توانائی سے انہی مساواتوں تک پہنچتا ہے۔ کائنیٹک انرجی اور پوٹینشل انرجی لکھیں، بنائیں، اور ڈیریویٹو فارمولا لاگو کریں۔ یہ چھوٹی آرمز کے لیے صاف ستھری علامتی (symbolic) مساواتیں دیتا ہے، یہی وجہ ہے کہ ہم اسے یہاں ہاتھ سے استعمال کرتے ہیں۔
مینیپولیٹر مساوات (manipulator equation)
کسی بھی سیریل آرم کے لیے نتیجہ کی شکل ایک جیسی ہوتی ہے:
ہر اصطلاح کا ایک مطلب ہے جسے آپ محسوس کر سکتے ہیں۔
- : انرشیا (inertia)۔ ماس میٹرکسایک متناسب، مثبت-مستقل میٹرکس جو آرم کے موثر انرشیا کی وضاحت کرتا ہے جیسا کہ ہر جوائنٹ پر دیکھا جاتا ہے، جو آرم کی ساخت (posture) پر منحصر ہوتا ہے ہے۔ یہ پوزیشن کے ساتھ بدلتا ہے: ایک پھیلی ہوئی آرم میں مڑی ہوئی آرم کے مقابلے میں شولڈر کے گرد زیادہ انرشیا ہوتا ہے۔
- : ویلوسٹی پر منحصر فورسز۔ سینٹری فیوگل فورسز (ایک گھومتا ہوا لنک باہر کی طرف اڑنا چاہتا ہے) اور کوریولس فورسز (ایک جوائنٹ کا جھولنا دوسرے پر دباؤ ڈالتا ہے)۔ وہ رفتار کے مربع کے ساتھ بڑھتے ہیں۔
- : گریویٹی (gravity)۔ آرم کو ساکت رکھنے کے لیے ضروری ٹارک۔ یہ پوسچر پر منحصر ہے لیکن رفتار پر نہیں۔
- : جوائنٹ ٹارکس جو آپ کی موٹرز فراہم کرتی ہیں۔ (حقیقی آرمز میں جوائنٹ فرکشن بھی ہوتی ہے، جسے ہم وضاحت کے لیے چھوڑ رہے ہیں)۔
ایک 2-لنک آرم، اعداد و شمار کے ساتھ
عمودی پلین (vertical plane) میں حرکت کرنے والی ایک پلینر آرم لیں، جس میں لنک ماسز ، ، لمبائیاں ، ، سینٹر آف ماس کا ہر جوائنٹ سے فاصلہ ، ، اور ان مراکز کے گرد انرشیا ، ہیں۔ جوائنٹ اینگلز کو افقی (horizontal) سے ناپا جاتا ہے۔ Lagrange طریقہ استعمال کرتے ہوئے، اجزاء ہیں
جہاں
اور، کی تعریف کرتے ہوئے،
تین مشاہدات۔ متناسب (symmetric) ہے۔ اس کی آف-ڈائیگونل اصطلاح جوائنٹس کو آپس میں جوڑتی ہے: جوائنٹ 2 کو تیز کرنے کے لیے جوائنٹ 1 پر ٹارک کی ضرورت ہوتی ہے۔ اور سب سے بڑا ہوتا ہے جب آرم افقی ہو () اور صفر ہوتا ہے جب یہ سیدھی اوپر یا نیچے کی طرف ہو۔
import numpy as np
m1, m2 = 2.0, 1.5 # link masses (kg)
l1, l2 = 0.4, 0.3 # link lengths (m)
lc1, lc2 = l1 / 2, l2 / 2 # centre of mass at the middle of each rod
I1 = m1 * l1**2 / 12 # thin-rod inertia about the centre
I2 = m2 * l2**2 / 12
G = 9.81
def mass_matrix(q):
c2 = np.cos(q[1])
m11 = m1 * lc1**2 + m2 * (l1**2 + lc2**2 + 2 * l1 * lc2 * c2) + I1 + I2
m12 = m2 * (lc2**2 + l1 * lc2 * c2) + I2
m22 = m2 * lc2**2 + I2
return np.array([[m11, m12], [m12, m22]])
def coriolis(q, qd):
h = -m2 * l1 * lc2 * np.sin(q[1])
return np.array([[h * qd[1], h * (qd[0] + qd[1])],
[-h * qd[0], 0.0]])
def gravity(q):
g1 = (m1 * lc1 + m2 * l1) * G * np.cos(q[0]) + m2 * lc2 * G * np.cos(q[0] + q[1])
g2 = m2 * lc2 * G * np.cos(q[0] + q[1])
return np.array([g1, g2])
def inverse_dynamics(q, qd, qdd):
"""Torques needed to produce acceleration qdd at state (q, qd)."""
return mass_matrix(q) @ qdd + coriolis(q, qd) @ qd + gravity(q)
def forward_dynamics(q, qd, tau):
"""Acceleration produced by torques tau at state (q, qd)."""
return np.linalg.solve(mass_matrix(q), tau - coriolis(q, qd) @ qd - gravity(q))
if __name__ == "__main__":
q = np.array([0.5, 0.8])
qd = np.array([1.0, -0.5])
qdd = np.array([2.0, 1.0])
tau = inverse_dynamics(q, qd, qdd)
print("torques needed:", np.round(tau, 3), "N·m")
print("forward dynamics recovers qdd:", np.allclose(forward_dynamics(q, qd, tau), qdd))
print("holding torque, arm horizontal:", np.round(gravity(np.array([0.0, 0.0])), 3), "N·m")
print("mass matrix eigenvalues (all > 0):", np.round(np.linalg.eigvalsh(mass_matrix(q)), 4))
راؤنڈ ٹرپ، انورس پھر فارورڈ ڈائنامکس، ایک ہی ایکسلریشن واپس کرنا کسی بھی ڈائنامکس کوڈ کے لیے ایک مفید سیلف ٹیسٹ ہے جو آپ لکھتے یا امپورٹ کرتے ہیں۔
گریویٹی کمپنسیشن (Gravity compensation) اور کمپیوٹر ٹارک
چونکہ اب آپ کے پاس اور موجود ہیں، آپ آرم کی اپنی ڈائنامکس کو منسوخ کر سکتے ہیں۔ فرض کریں کہ ایک سادہ کنٹرولر ایک مطلوبہ ایکسلریشن کا تقاضا کرتا ہے (پوزیشن کی غلطی سے شمار کیا جاتا ہے، جیسا کہ اگلے سبق میں ہے)۔ کمپیوٹڈ-ٹارک (computed-torque) کمانڈ ہے
اسے مینیپولیٹر مساوات میں لگانے سے ملتا ہے: غیر خطی (nonlinear) آرم اب سادہ، آزاد جوائنٹس کے ڈھیر کی طرح سلوک کرتی ہے جو آپ کی مانگی ہوئی کی اطاعت کرتے ہیں۔ اسے فیڈ بیک لینیئرائزیشن (feedback linearisation) کہا جاتا ہے۔ یہ ایک اچھے ماڈل پر منحصر ہے: غلط ماسز کا مطلب ہے نامکمل منسوخی، یہی ایک وجہ ہے کہ حقیقی کنٹرولرز فیڈ بیک کو اوپر رکھتے ہیں۔
ہینڈ (Hand) پر فورسز
اکثر آپ ہینڈ پر فورس کی پرواہ کرتے ہیں: میز پر اسفنج کو دبانا، دروازے کو دھکیلنا۔ آخری سبق کا جیکوبین (Jacobian) ایک ہینڈ فورس کو جوائنٹ ٹارکس میں تبدیل کرتا ہے جو اسے پیدا کرتے ہیں:
یہ وہی جیکوبین ہے، ٹرانسپوز (transposed)۔ یہ سنگولیریٹیز (singularities) کے بارے میں ایک مفید حقیقت کی وضاحت بھی کرتا ہے: جس سمت میں آرم حرکت نہیں کر سکتی، وہاں ہینڈ فورس کو تقریباً کسی جوائنٹ ٹارک کی ضرورت نہیں ہوتی، کیونکہ سخت سیدھے لنکس بوجھ اٹھاتے ہیں۔ ایک پھیلی ہوئی آرم سختی سے جمی رہ سکتی ہے، لیکن وہ اس سمت میں آہستہ سے حرکت نہیں کر سکتی یا محسوس نہیں کر سکتی۔ یہ تعلق امپیڈینس کنٹرول (impedance control) کی بھی بنیاد ہے جس سے آپ اس ماڈیول کے آخر میں ملیں گے۔
ٹارک کی حدیں اور ان کا کیا مطلب ہے
ہر موٹر اور گیئر باکس کا ایک پیک ٹارک (peak torque) (مختصر دھماکوں کے لیے) اور کنٹینیوئس ٹارک (continuous torque) (جو یہ بغیر اوور ہیٹ ہوئے لامحدود طور پر فراہم کر سکتا ہے) ہوتا ہے۔ ڈائنامکس آپ کو حرکت کو چلانے سے پہلے ان کے خلاف چیک کرنے دیتی ہے۔
- اگر صرف ہولڈنگ ٹارک کنٹینیوئس ریٹنگ سے تجاوز کر جاتا ہے، تو "ساکت کھڑے رہنے" پر بھی جوائنٹ اوور ہیٹ ہو جائے گا۔
- تیز حرکات اور کو بڑھاتی ہیں۔ سوئنگ کی رفتار کو دوگنا کرنے سے کوریولس ٹارک تقریباً چار گنا بڑھ جاتا ہے۔
- ایک پے لوڈ (payload) آخری لنک کے ماس میں اضافہ کرتا ہے۔ بہت سی آرمز ٹارک سے محدود پے لوڈ بنام ریچ (payload versus reach) کے منحنی خطوط کی وضاحت کرتی ہیں: لمبی پہنچ پر زیادہ وزن لے جانے کے لیے شولڈر کے زیادہ ٹارک کی ضرورت ہوتی ہے۔
ٹارک کی حدوں کو نظر انداز کرنے والا پلانر ایسا راستہ بنا سکتا ہے جو جیومیٹری کے لحاظ سے بالکل درست ہو اور فزکس کے لحاظ سے ناممکن ہو۔ ٹائم-آپٹیمل ٹریجیکٹری کے طریقے، جیسے کہ ٹائم-آپٹیمل پاتھ پیرامیٹرائزیشن، بالکل اسی وجہ سے ان حدوں کو اسپیڈ پروفائل میں شامل کرتے ہیں۔
حقیقی آرم پر پہلی بار کسی نئی، تیز رفتار حرکت کو سمیلیٹر میں یا سست ٹرائل کے ساتھ ٹارک اور اسپیڈ کی حدوں کے خلاف چیک کیے بغیر کبھی نہ چلائیں۔ تیز حرکت کے درمیان سیچوریٹ (saturate) ہونے والا جوائنٹ آرم کو طے شدہ راستے سے اچانک ہٹا سکتا ہے۔
عملی لیب (Hands-on lab)
آپ ایک حرکت کے لیے موٹرز کا سائز طے کریں گے۔
dynamics.pyکو محفوظ کریں اور اسے چلائیں۔ تصدیق کریں کہ راؤنڈ ٹرپTrueپرنٹ کرتا ہے۔- ایک فنکشن
tau_for_trajectoryلکھیں جو 2 سیکنڈ کے لیے 100 Hz پر سیمپل کیے گئے جوائنٹ پاتھز لیتا ہے، جو سے تک ایک ہموار کیوبک پروفائل کے ساتھ جاتا ہے جہاں ہے۔ تحلیلی طور پر (analytically) یاnp.gradientکے ساتھ اور کا حساب لگائیں۔ - ہر سیمپل کے لیے،
inverse_dynamicsکو کال کریں، اور ہر جوائنٹ پر پیک ایبسولیوٹ (peak absolute) ٹارک پرنٹ کریں۔ m2میں 1.0 کا اضافہ کر کے اور دوبارہ چلا کر 1 kg پے لوڈ شامل کریں۔ شولڈر کا پیک ٹارک کتنا بڑھا؟- فرض کریں کہ شولڈر موٹر کی پیک ریٹنگ 20 N·m ہے۔ کیا آپ کی حرکت اس کا احترام کرتی ہے؟ اگر نہیں، تو حرکت کا وقت لمبا کریں اور دوبارہ چیک کریں۔
آپ کو معلوم ہوگا کہ یہ کام کر گیا جب پے لوڈ کے ساتھ شولڈر کا پیک ٹارک نمایاں طور پر بڑھ جاتا ہے اور جب آپ حرکت کو سست کرتے ہیں تو گر جاتا ہے۔
مشقیں
ہولڈنگ ٹارکBeginner
2 kg ماس اور 0.5 m لمبائی کی ایک یکساں چھڑ (uniform rod) کو ایک سرے پر موٹر کے ذریعہ افقی طور پر پکڑا جاتا ہے۔ کس سٹیٹک ٹارک کی ضرورت ہے؟ وزن مرکز پر عمل کرتا ہے، جوائنٹ سے 0.25 m دور، اس لیے N·m۔ اگر چھڑ سیدھی اوپر کی طرف اشارہ کرتی ہے، تو ٹارک صفر ہو جاتا ہے (رگڑ کو نظر انداز کرتے ہوئے)، کیونکہ وزن کی لکیر جوائنٹ سے گزرتی ہے۔Show solutionHide solution
کون سی اصطلاح غالب ہے؟Intermediate
dynamics.py کا استعمال کرتے ہوئے، پر ، کے لیے تینوں ٹارک کی شراکتوں کا الگ الگ اندازہ لگائیں، پھر دوبارہ کے ساتھ کریں۔ بیان کریں کہ حصص کیسے بدلتے ہیں۔Show solutionHide solution
mass_matrix(q) @ qdd، coriolis(q, qd) @ qd اور gravity(q) کا الگ الگ حساب لگائیں۔ سست رفتار پر گریویٹی غالب ہوتی ہے اور کوریولس کی اصطلاح بہت چھوٹی ہوتی ہے۔ تیز رفتار پر ویلوسٹیز 15 سے 20 گنا زیادہ ہوتی ہیں، اور چونکہ کوریولس کی اصطلاح ویلوسٹی کے مربع کے ساتھ بڑھتی ہے اس لیے یہ چند سو گنا بڑی ہو جاتی ہے، جبکہ گریویٹی بغیر کسی تبدیلی کے رہتی ہے۔ سبق: گریویٹی سکون اور سست رفتار پر اہم ہے، ویلوسٹی کی اصطلاحات تیز حرکت کے دوران اہم ہوتی ہیں۔
M متناسب اور مثبت-مستقل (positive definite) کیوں ہے؟Advanced
ایک فزیکل وجہ بتائیں کہ کی ہر آئگن ویلیو (eigenvalue) کا مثبت ہونا کیوں ضروری ہے۔ آرم کی کائنیٹک انرجی ہے۔ ماس والے جسم کی کسی بھی حقیقی حرکت میں یقینی طور پر مثبت کائنیٹک انرجی ہوتی ہے، اس لیے ہر غیر صفر کے لیے ہوتا ہے۔ یہ پوزیٹو ڈیفینیٹ کی تعریف ہے۔ یہ اس بات کی بھی ضمانت دیتا ہے کہ کا انورس ممکن ہے، یہی وجہ ہے کہ فارورڈ ڈائنامکس ہمیشہ کے لیے حل کر سکتی ہے۔Show solutionHide solution
اپنی تفہیم کو جانچیں
Takeaways
- ڈائنامکس جوائنٹ ٹارکس کو حرکت سے جوڑتی ہے۔ صرف کائنیمیٹکس یہ نہیں بتا سکتی کہ موٹر کو کیا فراہم کرنا چاہیے۔
- مینیپولیٹر مساوات میں انرشیا، ویلوسٹی پر منحصر، اور گریویٹی کی اصطلاحات کے ساتھ لاگو کردہ ٹارک ہوتا ہے۔
- انورس ڈائنامکس مطلوبہ حرکت کے لیے ٹارکس دیتی ہے؛ فارورڈ ڈائنامکس ٹارکس سے حرکت دیتی ہے اور سمیلیٹرز کو طاقت فراہم کرتی ہے۔
- سست حرکات کے لیے گریویٹی عام طور پر سب سے بڑا ٹارک ہوتی ہے؛ ویلوسٹی کی اصطلاحات رفتار کے مربع کے ساتھ بڑھتی ہیں۔
- ماس میٹرکس متناسب (symmetric) اور مثبت-مستقل (positive definite) ہے، اور پوسچر پر منحصر ہے۔
- ہارڈ ویئر پر چلانے سے پہلے طے شدہ حرکات کو کنٹینیوئس اور پیک ٹارک کی حدوں کے خلاف چیک کریں۔
پھنس گئے ہیں؟ کورس کے اسسٹنٹ، Rivet سے نیچے دائیں جانب پوچھیں۔
مزید گہرائی میں جائیں
- Modern Robotics, chapter 8 (dynamics of open chains): Lagrange اور Newton-Euler کی تفصیل۔
- Pinocchio documentation: ریجڈ باڈی الگورتھم (RNEA, CRBA) جو کسی بھی روبوٹ کے لیے ان اصطلاحات کا حساب لگاتے ہیں۔
- Featherstone, Rigid Body Dynamics Algorithms: موثر ڈائنامکس کے لیے معیاری مرجع (standard reference)۔
اگلا: کنٹرول اور PID
Finished the lab and the quiz?
Mark it done to track your progress through the course.