ٹرٹل سِم کے ساتھ PID کنٹرول
خلاصہ
Move Turtle ایک سادہ ROS python اسکرپٹ ہے جو ROS کے TurtleSim میں ٹرٹل کو مخصوص نقاط (پوائنٹس) تک حرکت دیتا ہے۔ یہ پروجیکٹ کولوراڈو اسکول آف مائنز (CSOM) میں CSCI473 کے لیے ایک جماعتی پروجیکٹ کے طور پر شروع ہوا اور بعد میں ایک ایسے پروجیکٹ میں تبدیل ہو گیا جسے میں نے یہ سیکھنے میں مدد کے لیے استعمال کیا کہ کلوز-لوپ نظام کیسے بنائے جا سکتے ہیں، اور اس سے حاصل ہونے والے علم نے CSOM کی Human Center Robotics (HCR) Lab میں میرے کام میں مدد کی۔
پس منظر
کچھ پس منظر کے لیے، ROS سے مراد Robot Operating Systems ہے۔ ROS ایک اوپن سورس روبوٹکس مڈل ویئر ہے، جسے عموماً Ubuntu آپریٹنگ سسٹم کے ساتھ استعمال کیا جاتا ہے، اور یہ روبوٹک نظام کے سافٹ ویئر اجزا/کلسٹرز کو بہتر طور پر منظم کرنے کے لیے استعمال ہوتا ہے۔ آپ ROS کے استعمال کے بارے میں ROS کی سرکاری wiki کے ذریعے مزید سیکھ سکتے ہیں۔ ROS میں آپ جو کوڈ لکھتے ہیں وہ C++ یا Python میں ہوتا ہے۔
TurtleSim ایک سادہ 2D روبوٹ سمیولیٹر ہے جو ROS کے نئے صارفین کے لیے ROS اور ROS پیکیجز کے تعارف کے طور پر استعمال ہوتا ہے۔ TurtleSim صرف ایک سادہ 2D ڈسپلے کھولتا ہے جس میں ایک ٹرٹل ہوتا ہے۔ وہ ٹرٹل “روبوٹ” کے طور پر کام کرتا ہے اور آپ اس “روبوٹ” کو حرکت کرنے اور/یا مڑنے کے لیے پیغامات بھیج سکتے ہیں۔ حرکت کرتے ہوئے، TurtleSim حقیقی دنیا کی طبیعیات کی سادہ انداز میں نقل کرنے کے لیے کچھ بے ترتیب غلطی بھی پیدا کرتا ہے۔
یہ جاننے کے بعد کہ ROS اور TurtleSim کیا ہیں، میں انہیں کیوں استعمال کر رہا تھا؟ بات یہ ہے کہ 2020 کے موسمِ بہار میں، میں کولوراڈو اسکول آف مائنز میں اپنی انڈرگریجویٹ کمپیوٹر سائنس کی جماعت کے حصے کے طور پر “Human Centered Robotics” نامی ایک کلاس لے رہا تھا۔ یہ کلاس ڈاکٹر ہاؤ ژانگ نے پڑھائی تھی۔ کلاس تین پروجیکٹس پر مشتمل تھی، اور پہلے پروجیکٹ میں ROS کو ترتیب دینا، ROS استعمال کرنے کا طریقہ سیکھنا، اور ایسا اوپن-لوپ یا کلوز-لوپ الگورتھم نافذ کرنا شامل تھا جو TurtleSim میں موجود ٹرٹل سے M بنواتا۔ اصل پروجیکٹ کی تفصیل یہاں دیکھی جا سکتی ہے۔
جب میں یہ کلاس لے رہا تھا، تو میں نے اوپن-لوپ الگورتھم نافذ کرکے یہ پروجیکٹ مکمل کیا۔ یہ حل کام کرتا تھا، لیکن یہ واقعی بہت خراب تھا اور اس نے ایک ایسا A بنایا جو “کافی اچھا” تھا، مگر “شاندار” سے بہت دور تھا۔ فروری 2020 کے وسط کے قریب پروجیکٹ جمع کرانے کے بعد، میں تقریباً ایک سال بعد، فروری 2021 کے آس پاس تک اسے بھول گیا۔
چیلنج
فروری 2021 میں، مجھے کولوراڈو اسکول آف مائنز کی Human Centered Robotics (HCR) Lab میں Research Assistant کی ملازمت مل گئی، جہاں میں نے ڈاکٹر ہاؤ ژانگ کے ماتحت کام کیا۔ لیب کا مقصد “طویل مدتی اشتراکی خودمختاری پر تحقیق کرنا، اس مقصد کے ساتھ کہ روبوٹس کو طویل عرصے تک کام کرنے اور خود کو ڈھالنے کے قابل بنایا جائے” ہے۔ 9-1-2022 (1 ستمبر 2022) تک، لیب کولوراڈو اسکول آف مائنز سے University of Massachusetts Amherst منتقل ہو چکی ہے۔ لیکن جب میں وہاں کام کرتا تھا، تو وہ اب بھی کولوراڈو میں واقع تھی۔
HCR Lab میں، مجھے Triton پروجیکٹ پر کام کرنے کا کام سونپا گیا۔ Triton پروجیکٹ میں متعدد، درجنوں، روبوٹس شامل تھے جنہیں Tritons کہا جاتا تھا۔ Tritons مثلثی omni wheel زمینی روبوٹس تھے جو کچھ اس طرح دکھائی دیتے تھے:
Tritons کے ساتھ، OptiTrack کے آٹھ IR Cameras زمین سے چند فٹ اوپر ایک “octagon order” میں ترتیب دیے گئے تھے۔ ان کیمروں، Optitrack کے Motive سافٹ ویئر، Windows 10 چلانے والے ایک PC، اور ROS کا استعمال کرتے ہوئے 2 میٹر بائی 2 میٹر بائی 2 میٹر (x, y, z) جگہ بنائی جاتی ہے، جہاں motion capture markers والی اشیا کی حقیقی دنیا میں درست پوزیشن معلوم کی جا سکتی ہے۔
Triton پروجیکٹ کے ساتھ میرا پہلا کام ایسی اسکرپٹس بنانا تھا جو Triton روبوٹ کو حقیقی دنیا کی کسی مخصوص پوزیشن تک لے جائیں۔ اس وقت، مجھے یقین نہیں تھا کہ یہ کیسے حاصل کیا جائے، لیکن مجھے CSCI473 کا پہلا پروجیکٹ یاد تھا، جہاں کلوز-لوپ نظام کا تصور مجھ سے متعارف کرایا گیا تھا، اس لیے میں نے کلوز-لوپ نظاموں اور نتیجتاً فیڈبیک نظاموں پر سنجیدگی سے تحقیق شروع کر دی۔
تحقیق
اپنی تحقیق کے دوران، مجھے AerospaceControlsLab کی یہ بہترین ویڈیو ملی:
اس ویڈیو میں، PID نظام کا تصور مجھے دکھایا اور سمجھایا گیا۔ PID نظام ایک کلوز-لوپ، کنٹرول لوپ، نظام ہے جو حقیقی دنیا کے ڈیٹا کی بنیاد پر مخصوص آؤٹ پٹ (آؤٹ پٹس) پیدا کرتا ہے۔ بنیادی الفاظ میں، یہ ایک فیڈبیک نظام ہے جو مطلوبہ قدر اور ناپی گئی قدر کے درمیان فرق کی بنیاد پر اپنے آؤٹ پٹ کو ایڈجسٹ کرتا ہے۔ PID کنٹرولر کا فارمولا یہ ہے:
$$ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} $$
- $u(t)$ کنٹرول سگنل ہے۔
- $K_p$, $K_i$, $K_d$ بالترتیب تناسبی، انٹیگرل، اور ڈیریویٹو گینز ہیں۔
- $e(t)$ ایرر سگنل ہے (مطلوبہ اور حقیقی آؤٹ پٹ کے درمیان فرق)۔
- $\int e(t) dt$ وقت کے ساتھ ایرر کا انٹیگرل ہے۔
- $\frac{de(t)}{dt}$ ایرر کا ڈیریویٹو ہے۔
اس کے بارے میں مزید سیکھنے کے لیے AerospaceControlsLab کی ویڈیو یا یہ شاندار wikipedia مضمون دیکھیں، جہاں سے یہ فارمولا لیا گیا ہے۔
اپنی تحقیق کرنے اور اپنے ذہین دوستوں اور پروفیسروں سے کچھ مدد حاصل کرنے کے بعد، میں نے طے کیا کہ Triton کو کسی مخصوص کوآرڈینیٹ تک پہنچانے میں مدد کے لیے Proportional Controller، یعنی P Controller، کا استعمال بہترین ہوگا۔
چونکہ Triton ایک زمینی روبوٹ ہے، اس لیے مجھے صرف X اور Y کوآرڈینیٹس کی فکر کرنے کی ضرورت ہے۔ یہ جاننے کے بعد، مجھے پھر یہ طے کرنا تھا کہ P Controller(s) کے اندر کن مطلوبہ قدروں اور ناپی گئی قدروں کو ناپ کر پراسیس کرنا ہے۔ اپنی تحقیق میں مجھے ROS wiki پر Go to Goal نامی یہ شاندار پوسٹ ملی، جہاں انہوں نے درج ذیل ایررز پر توجہ مرکوز کی:
- Distance Error: مطلوبہ مقام (X, Y) اور موجودہ مقام (X, Y) کے درمیان فاصلے کا فرق۔
- Theta Error: مطلوبہ سمت اور موجودہ سمت کے درمیان فرق۔
مجوزہ حل
یہ سب جاننے کے بعد، Triton کو حقیقی دنیا کے کسی مخصوص کوآرڈینیٹ تک لے جانے کا حل یہ ہے کہ Triton کے فاصلے کے ایرر اور تھیٹا ایرر کے لیے، ہدف کوآرڈینیٹ اور Triton کے موجودہ کوآرڈینیٹ کے لحاظ سے، Proportional Controller استعمال کیا جائے۔ لیکن اسے کسی طبعی نظام میں نافذ کرنے سے پہلے، میں اس خیال کو ایک سمیولیشن میں آزمانا چاہتا تھا اور اس وقت، میں نے سوچا کہ سمیولیشن کے طور پر TurtleSim استعمال کرنا بہترین انتخاب ہوگا۔
سمیولیشن میں جانچ
نظری حل واضح کیے جانے کے بعد، میں نے حقیقی دنیا کے منظرنامے کے بجائے ابتدا میں سمیولیشن کے ذریعے اس کی توثیق کرنے کا فیصلہ کیا۔ حقیقی دنیا اکثر ایسے شور سے بھری ہوتی ہے جو حل کی مؤثریت کو دھندلا سکتا ہے اور غیر متعلقہ مسائل سے نمٹنے کا باعث بن سکتا ہے۔ اس بات کو تسلیم کرتے ہوئے، میں نے CSCI473 کے اپنے پروجیکٹ پر دوبارہ کام کیا اور اسے اس نظری حل کے لیے آزمائشی میدان کے طور پر ڈھال لیا۔
پرانے کوڈ کو ROS Melodic سے ROS Noetic پر منتقل کرنے اور کچھ تکراری اصلاحات کے بعد، میں نے TurtleSim میں مجوزہ حل کو واقعی کام کرتا ہوا حاصل کر لیا۔ اس کی فعالیت کے مظاہرے، کچھ عمدہ ہدف کوآرڈینیٹ راستوں کے ساتھ، اس بلاگ پوسٹ کے آخر میں مل سکتے ہیں۔ اس سب کا کوڈ یہاں دیکھا جا سکتا ہے۔
نتیجہ
خلاصہ یہ کہ، اس پروجیکٹ کے ذریعے، TurtleSim کا ٹرٹل کلوز-لوپ نظام استعمال کرتے ہوئے مقررہ کوآرڈینیٹس تک مؤثر طریقے سے پہنچتا ہے، اور 2020 کے میرے ابتدائی اوپن-لوپ نظام سے نمایاں طور پر بہتر کارکردگی دکھاتا ہے۔ کامیابی سے جانچنے کے بعد، میں نے یہ حل Triton روبوٹس کے ساتھ نافذ کیا۔ لیکن حقیقی دنیا کے شور نے غیر متوقع مسائل پیدا کیے، جنہیں حل کرنے کے لیے کئی ہفتوں کی ڈیبگنگ اور حقیقی دنیا میں جانچ کی ضرورت پڑی۔ ان ہفتوں کے بعد، میں نے بالآخر TurtleSim میں آزمائے گئے حل کو استعمال کرتے ہوئے Triton کو حقیقی دنیا کے مخصوص کوآرڈینیٹس تک پہنچا دیا۔ یہ TurtleSim میں آزمائے گئے طریقے کو استعمال کرتے ہوئے Triton کے حقیقی دنیا کے مخصوص کوآرڈینیٹس تک حرکت کرنے کا ایک مظاہرہ ہے:
پیچھے مڑ کر دیکھوں تو، کاش میں نے ایسی سمیولیشن استعمال کی ہوتی جو حقیقی دنیا کی طبیعیات کی بہتر نقل کرتی۔ TurtleSim سیکھنے کے لیے بہترین ہے، لیکن حقیقی دنیا کے روبوٹکس کے خیالات کی جانچ کے لیے اچھا نہیں ہے۔ اس وقت، میں نے سوچا تھا کہ میرے سادہ استعمال کے معاملے کے لیے یہ کافی اچھا ہوگا، لیکن بعد میں ثابت ہوا کہ ایسا نہیں تھا۔
اس بلاگ پوسٹ کا بنیادی مقصد ایک ایسے کلوز-لوپ نظام کی تخلیق کو بیان کرنا تھا جو TurtleSim کے ٹرٹل، اور بعد ازاں Triton روبوٹس، کو مخصوص ہدف کی پوزیشنوں (X, Y) تک درستگی سے پہنچنے کے قابل بنائے۔ مجھے یقین ہے کہ یہ مقصد حاصل کر لیا گیا، لیکن شاید اس سے HCR Lab میں میرے کام میں کچھ دلچسپی پیدا ہوئی ہو۔ یہ جانتے ہوئے، میرے پاس HCR Lab میں اپنے کام کے تجربے کے بارے میں مزید بلاگ پوسٹس لکھنے کے منصوبے موجود ہیں…
متحرک ٹرٹل (TurtleSim) کے مظاہرے
اس ویڈیو میں درج ذیل مظاہرے شامل ہیں:
- Cayley Nodal: ایک سادہ Cayley Nodal ڈیزائن
- دائرے: مکڑی کے جالے جیسا ڈیزائن
- اندرونی دائرے: “دائروں کے اندر دائرے” کا ڈیزائن
- M: ایک نہایت سادہ M ڈیزائن