نرم‌افزار ربات

**نرم‌افزار ربات** () مجموعه‌ای از دستورات کدگذاری‌شده یا دستورالعمل‌هایی است که به یک دستگاه مکانیکی و سامانه الکترونیکی، که با هم به عنوان یک ربات شناخته می‌شوند، می‌گوید که چه وظایفی را انجام دهد. نرم‌افزار ربات برای انجام وظایف خودکار استفاده می‌شود. بسیاری از سامانه‌ها و چارچوب‌های نرم‌افزاری برای آسان‌تر کردن برنامه‌نویسی ربات‌ها پیشنهاد شده‌اند.

برخی از نرم‌افزارهای ربات با هدف توسعه دستگاه‌های مکانیکی هوشمند ایجاد شده‌اند. وظایف رایج شامل حلقه‌های بازخورد، کنترل، مسیریابی، فیلتر کردن داده‌ها، مکان‌یابی و هم‌رسانی داده‌ها است.

## مقدمه
اگرچه نرم‌افزارهای رباتیک نوع خاصی از نرم‌افزار به حساب می‌آیند، اما تنوع زیادی دارند. هر شرکت سازنده ربات، نرم‌افزار منحصربه‌فرد خود را برای ربات‌هایش طراحی می‌کند. اکثر نرم‌افزارها برای پردازش و تغییر اطلاعات طراحی شده‌اند و نتیجه کارشان روی صفحه نمایش قابل مشاهده است، اما نرم‌افزارهای رباتیک برای کنترل و حرکت دادن اشیا و ابزارها در دنیای واقعی استفاده می‌شوند.

## نرم‌افزار ربات صنعتی
نرم‌افزار ربات‌های صنعتی از دو بخش اصلی تشکیل شده است: داده‌ها و دستورالعمل‌ها. دستورالعمل‌ها که به آن‌ها «جریان برنامه» هم گفته می‌شود، فهرستی از کارهایی هستند که ربات باید انجام دهد.
مثلا:

 برو به Jig1

این دستورالعملی برای ربات است که به داده‌های موقعیتی به نام Jig1 برود. البته، برنامه‌ها همچنین می‌توانند حاوی داده‌های ضمنی باشند، به عنوان مثال

 به محور ۱ بگویید ۳۰ درجه حرکت کند.

اطلاعات و برنامه‌های ربات معمولاً در بخش‌های جداگانه‌ای از حافظه سامانهٔ کنترل ربات ذخیره می‌شوند. این به این معنی است که شما می‌توانید اطلاعات را بدون نیاز به تغییر برنامه و برعکس، تغییر دهید. برای مثال، می‌توانید یک برنامه جدید بنویسید که از همان موقعیت Jig1 استفاده کند یا می‌توانید موقعیت Jig1 را بدون تغییر برنامه‌هایی که از آن استفاده می‌کنند، تنظیم کنید.

## نمونه‌هایی از زبان‌های برنامه‌نویسی برای ربات‌های صنعتی
از آنجایی که نرم‌افزارهای رباتیک بسیار تخصصی هستند، اکثر تولیدکنندگان ربات، نرم‌افزار مخصوص خودشان را هم ارائه می‌دهند. این موضوع در سامانه‌های کنترل خودکار دیگر هم رایج است، اما نبود یک استاندارد مشخص برای برنامه‌نویسی ربات‌ها، مشکلاتی را ایجاد می‌کند. به عنوان مثال، بیش از ۳۰ شرکت مختلف ربات‌های صنعتی تولید می‌کنند و هر کدام زبان برنامه‌نویسی خاص خود را دارند. البته، شباهت‌های زیادی بین ربات‌های مختلف وجود دارد، بنابراین می‌توان اصول کلی برنامه‌نویسی ربات‌ها را یادگرفت، بدون اینکه نیاز باشد زبان برنامه‌نویسی هر شرکت را جداگانه یادگرفت.

یکی از روش‌های کنترل ربات‌ها از چندین تولیدکننده، استفاده از یک پساپردازشگر (پُست‌پروسسور) و نرم‌افزار برنامه‌نویسی آفلاین است. با این روش، می‌توان زبان برنامه‌نویسی خاص هر شرکت را به یک زبان برنامه‌نویسی عمومی‌تر، مثل پایتون، تبدیل کرد. با این حال، این روش محدودیت‌هایی هم دارد. برای مثال، چون کد برنامه از قبل نوشته و به سامانه کنترل ربات منتقل می‌شود، ربات نمی‌تواند با تغییرات محیط اطرافش سازگار شود و واکنش نشان دهد. در حال حاضر، چند ابزار جانبی وجود دارند که امکان کنترل تطبیقی و بلادرنگ را برای انواع ربات‌ها فراهم می‌کنند.

در زیر چند نمونه از زبان‌های برنامه‌نویسی منتشر شده برای ربات‌ها آورده شده است:

 Move to P1 (a general safe position)
 Move to P2 (an approach to P3)
 Move to P3 (a position to pick the object)
 Close gripper
 Move to P4 (an approach to P5)
 Move to P5 (a position to place the object)
 Open gripper
 Move to P1 and finish

زبان اسمبلی متغیر (VAL) یکی از اولین «زبان‌های» ربات بود و در ربات‌های یونیمیت استفاده می‌شد. انواع مختلفی از VAL توسط تولیدکنندگان دیگر از جمله Adept Technology استفاده شده است. اشتویبلی (Stäubli) در حال حاضر از VAL3 استفاده می‌کند.

مثال برنامه:

 PROGRAM PICKPLACE
   1. MOVE P1
   2. MOVE P2
   3. MOVE P3
   4. CLOSEI 0.00
   5. MOVE P4
   6. MOVE P5
   7. OPENI 0.00
   8. MOVE P1
 .END

نمونه‌ای از برنامه وال۳ اشتویبلی:

 begin
   movej(p1,tGripper,mNomSpeed)
   movej(appro(p3,trAppro),tGripper,mNomSpeed)
   movel(p3,tGripper,mNomSpeed)
   close(tGripper)
   movej(appro(p5,trAppro),tGripper,mNomSpeed)
   movel(p5,tGripper,mNomSpeed)
   open(tGripper)
   movej(p1,tGripper,mNomSpeed)
 end

trAppro یک متغیر تبدیل دکارتی است. اگر از آن با دستور `appro` استفاده کنیم، نیازی به آموزش نقاط P2 و P4 نداریم، بلکه به صورت پویا یک رویکرد به موقعیت برداشتن و قرار دادن برای تولید مسیر تبدیل می‌کنیم.

Epson RC+ (مثالی برای برداشتن با مکش):

 Function PickPlace
        Jump P1
        Jump P2
        Jump P3
        On vacuum
        Wait .1
        Jump P4
        Jump P5
        Off vacuum
        Wait .1
        Jump P1
 Fend

ROBOFORTH (زبانی مبتنی بر فورث):

```forth
: PICKPLACE
P1
P3 GRIP WITHDRAW
P5 UNGRIP WITHDRAW
P1
;
```


(با Roboforth می‌توانید موقعیت‌های نزدیک شدن برای مکان‌ها را مشخص کنید، بنابراین به P2 و P4 نیازی ندارید)

واضح است که ربات نباید حرکت بعدی را تا زمانی که گیره کاملاً بسته نشده است ادامه دهد. تأیید یا زمان مجاز در مثال‌های بالا CLOSEI و GRIP ضمنی است در حالی که دستور On vacuum به تأخیر زمانی نیاز دارد تا مکش رضایت‌بخش تضمین شود.

## سایر زبان‌های برنامه‌نویسی ربات
### زبان برنامه‌نویسی بصری
زبان برنامه‌نویسی LEGO Mindstorms EV3 یک زبان ساده برای تعامل کاربران با آن است. این یک رابط کاربری گرافیکی (GUI) است که با لب‌ویو (LabVIEW) نوشته شده است. رویکرد این است که به جای داده‌ها با برنامه شروع شود. برنامه با کشیدن نمادها به داخل ناحیه برنامه و اضافه کردن یا درج در دنباله ساخته می‌شود. برای هر نماد، پارامترها (داده‌ها) را مشخص می‌کنید. به عنوان مثال، برای نماد درایو موتور، مشخص می‌کنید که کدام موتورها و چقدر حرکت می‌کنند. هنگامی که برنامه نوشته می‌شود، برای تست در 'آجر' Lego NXT (میکروکنترلر) بارگیری می‌شود.

### زبان‌های اسکریپت‌نویسی
زبان اسکریپت‌نویسی یک زبان برنامه‌نویسی سطح بالا است که برای کنترل برنامه نرم‌افزاری استفاده می‌شود و به جای کامپایل شدن از قبل، در زمان واقعی تفسیر می‌شود یا «در حال پرواز ترجمه می‌شود». یک زبان اسکریپت‌نویسی ممکن است یک زبان برنامه‌نویسی همه منظوره باشد یا ممکن است به توابع خاصی محدود شود که برای تقویت اجرای یک برنامه کاربردی یا برنامه سیستمی استفاده می‌شود. برخی از زبان‌های اسکریپت‌نویسی، مانند RoboLogix، دارای اشیاء داده‌ای هستند که در ثبات‌ها قرار دارند و جریان برنامه نشان‌دهنده لیست دستورالعمل‌ها یا مجموعه دستورالعمل‌هایی است که برای برنامه‌ریزی ربات استفاده می‌شود.

زبان‌های برنامه‌نویسی عموماً برای ساخت ساختمان‌های داده و الگوریتم‌ها از صفر طراحی شده‌اند، در حالی که زبان‌های اسکریپت‌نویسی بیشتر برای اتصال یا «چسباندن» اجزا و دستورالعمل‌ها به یکدیگر در نظر گرفته شده‌اند. در نتیجه، مجموعه دستورالعمل‌های زبان اسکریپت‌نویسی معمولاً یک لیست ساده از دستورات برنامه است که برای ساده‌سازی فرایند برنامه‌نویسی و ارائه توسعه سریع برنامه‌ها استفاده می‌شود.

### زبان‌های موازی
رویکرد جالب دیگری که شایان ذکر است، زبان‌های برنامه‌نویسی موازی هستند. همه کاربردهای رباتیک به برنامه‌نویسی موازی و مبتنی بر رویداد نیاز دارند. موازی‌سازی زمانی است که ربات دو یا چند کار را همزمان انجام می‌دهد. این امر نیازمند سخت‌افزار و نرم‌افزار مناسب است. اکثر زبان‌های برنامه‌نویسی برای مدیریت موازی‌سازی و پیچیدگی‌های ناشی از آن، مانند دسترسی همزمان به منابع مشترک، به رشته‌ها یا کلاس‌های انتزاعی پیچیده متکی هستند. URBI با ادغام موازی‌سازی و رویدادها در هسته معنایی زبان، سطح بالاتری از انتزاع را فراهم می‌کند. 


```urbiscript
whenever(face.visible)
 {
   headPan.val  += camera.xfov * face.x
   &
   headTilt.val += camera.yfov * face.y
 }
```


کد بالا موتورهای headPan و headTilt را به صورت موازی حرکت می‌دهد تا سر ربات هر زمان که صورتی توسط ربات دیده شود، چهره انسان قابل مشاهده در ویدیوی گرفته شده توسط دوربین خود را دنبال کند.

## نرم‌افزار کاربردی ربات
صرف نظر از اینکه از چه زبانی استفاده می‌شود، نتیجه نرم‌افزار ربات، ایجاد برنامه‌های رباتیکی است که به مردم کمک می‌کند یا آن‌ها را سرگرم می‌کند. برنامه‌های کاربردی شامل نرم‌افزار فرمان و کنترل و وظایف هستند. نرم‌افزار فرمان و کنترل شامل رابط‌های کاربری گرافیکی (GUI) کنترل ربات برای ربات‌های از راه دور، نرم‌افزار فرمان نقطه‌ای برای ربات‌های خودمختار، و نرم‌افزار زمان‌بندی برای ربات‌های متحرک در کارخانه‌ها می‌شود. نرم‌افزار وظایف شامل رابط‌های ساده کشیدن و رها کردن برای تنظیم مسیرهای تحویل، گشت‌های امنیتی و تورهای بازدیدکنندگان است. همچنین شامل برنامه‌های سفارشی نوشته شده برای استقرار برنامه‌های کاربردی خاص است. نرم‌افزار کاربردی ربات همه منظوره بر روی پلتفرم‌های رباتیک به‌طور گسترده توزیع شده است.

### ملاحظات ایمنی
خطاهای برنامه‌نویسی یک ملاحظه ایمنی جدی است، به ویژه در ربات‌های صنعتی بزرگ. قدرت و اندازه ربات‌های صنعتی به این معنی است که در صورت برنامه‌ریزی نادرست یا استفاده ناایمن، قادر به ایجاد صدمات شدید هستند. با توجه به جرم و سرعت بالای ربات‌های صنعتی، ماندن انسان در محل کار ربات در حین کار خودکار همیشه ناامن است. سامانه می‌تواند در زمان‌های غیرمنتظره شروع به حرکت کند و یک انسان در بسیاری از موقعیت‌ها، حتی اگر آماده انجام این کار باشد، نمی‌تواند به اندازه کافی سریع واکنش نشان دهد؛ بنابراین، حتی اگر نرم‌افزار عاری از خطاهای برنامه‌نویسی باشد، باید دقت زیادی کرد تا یک ربات صنعتی برای کارگران انسانی یا تعامل انسانی، مانند بارگیری یا تخلیه قطعات، پاکسازی قطعات گیر کرده یا انجام تعمیر و نگهداری، ایمن باشد. کتاب "استاندارد ملی آمریکا ANSI/RIA R15.06-1999 برای ربات‌های صنعتی و سامانه‌های ربات - الزامات ایمنی (بازنگری ANSI/ R15.06-1992)" از انجمن صنایع رباتیک، استاندارد پذیرفته شده در مورد ایمنی ربات است. این شامل دستورالعمل‌هایی برای طراحی ربات‌های صنعتی و همچنین پیاده‌سازی یا ادغام و استفاده از ربات‌های صنعتی در کارخانه است. مفاهیم ایمنی متعددی مانند کنترل‌کننده‌های ایمنی، حداکثر سرعت در طول حالت آموزش، و استفاده از موانع فیزیکی پوشش داده شده است.

## منابع

* 

رده:نرم‌افزار رباتیک