یک مانع دیرینه برای استقرار ربات ها در دنیای واقعی نیاز مداوم به ایجاد رفتار ربات است. جمعآوری دادههای از راه دور – به ویژه جمعسپاری – به طور فزایندهای مورد توجه قرار میگیرد. در این مقاله، ما استدلالی را برای مقیاسبندی برنامهنویسی ربات برای جمعیت ارائه میکنیم و یک بررسی اولیه از امکانسنجی این روش پیشنهادی ارائه میکنیم. با استفاده از یک رابط برنامه نویسی ربات بصری خارج از قفسه، افراد غیر متخصص برنامه های ربات ساده ای را برای دو کار معمولی ربات (ناوبری و انتخاب و مکان) ایجاد کردند. برای تکمیل موفقیت آمیز برنامه ها، هر کدام به چهار کار فرعی با تعداد فزاینده ای از دستورات برنامه نویسی (تغییر if، حلقه while، متغیرها) نیاز داشتند. یافته های اولیه یک مطالعه آنلاین (N = 279) نشان می دهد که افراد غیرمتخصص، پس از حداقل آموزش، قادر به ایجاد برنامه های ساده با استفاده از یک رابط برنامه نویسی ربات شیراز بصری خارج از قفسه بودند. ما یافتههای خود را مورد بحث قرار میدهیم و راههای آینده را برای این خط از تحقیقات شناسایی میکنیم.
همانطور که روبات ها از محیط های صنعتی کنترل شده خارج می شوند و به دنیای واقعی می روند، یک چالش مداوم نیاز به گسترش رفتار ربات برای انطباق و پاسخ به موقعیت های دنیای واقعی بدون نظارت مستمر متخصص است. به عنوان مثال، راهنمای روباتی را در نظر بگیرید که برای کار در فضایی که درها همیشه باز هستند، ساخته شده است. اگر در محیط جدیدی قرار گیرد که با در بسته مواجه می شود، ممکن است با یک مورد خرابی مواجه شود، زیرا ممکن است با دنباله درستی از اقدامات که مشخص می کند در را قبل از ادامه باز کنید، برنامه ریزی نشده باشد. تطبیق پذیری برای ربات ها برای انجام موفقیت آمیز طیف گسترده ای از وظایف بسیار مهم است و تا حد زیادی به سهولت برنامه ریزی روبات ها بستگی دارد (لوزانو-پرز، 1983).
تا به امروز، برنامه نویسی ربات در درجه اول وظیفه مهندسین بوده است که به دانش ریاضی و برنامه نویسی ربات سطح بالایی نیاز دارد. این امر تعداد برنامه های ایجاد شده و به نوبه خود تطبیق پذیری را محدود کرده است. یکی از راههای پشتیبانی از رباتهای همهکاره، نظارت بر آنها و ایجاد برنامههای ربات ساده در حال پرواز است که به طور بالقوه میتواند شامل گسترش توانایی برنامهنویسی روباتها به افراد غیرمتخصص باشد. در حالی که یادگیری مهارت های افق کوتاه، مانند هل دادن و گرفتن اشیا، معمولاً از طریق یادگیری در مقیاس کوچک از نمایش (LfD) (Argall et al., 2009) یا کنترل مانند عملیات از راه دور، رفتار در سطح بالاتر (ترتیب اقداماتی برای انجام موفقیتآمیز یک کار) یا قوانین اضافی (به اتاق بعدی بروید، اما اگر در بسته است، ابتدا در را باز کنید) میتواند برای جمعیت مقیاس شود و مستقیماً در قالب برنامههای روبات ساده ارائه شود. مزیت اصلی ارائه چنین قوانین اضافی و رفتارهای سطح بالا ربات با استفاده از جمع سپاری دسترسی سریع و آسان به مجموعه بزرگی از افراد غیر متخصص است. به عنوان مثال، در یک کار انتخاب و مکان، اگر وظیفه یک ربات از برداشتن هر چیزی از سینی به برداشتن فقط اقلام صورتی تغییر کند، یک کارگر غیرمتخصص در هر نقطه از زمین و در هر زمانی از روز میتواند یک قانون ارائه کنید که مشخص می کند اقدامات به ترتیب و تحت چه شرایطی باید اجرا شوند (اگر آیتم صورتی است → آیتم را انتخاب کنید). بسیاری از وظایف یا قوانین ربات به دانشی نیاز دارند که معمولاً مردم دارند، مانند کارهای خانگی یا کارهای تعاملی. استفاده از crowdworkers برای نظارت بر ربات ها ممکن است مفید و کارآمد باشد، زیرا آنها می توانند تعدادی از این سناریوها را در یک زمان بدون نیاز به حضور در محل نظارت کنند.
با این حال، این روش برای استخدام افراد تازه کار به این بستگی دارد که افراد بتوانند نحوه برنامه ریزی سریع روبات های مختلف را درک کنند. ادبیات قبلی از رابط های برنامه نویسی ربات بصری برای کاهش مانع ورود برنامه نویسان تازه کار استفاده کرده است. به عنوان مثال، بسیاری از محققان محیط های برنامه ریزی بصری مبتنی بر جریان داده را برای این منظور توسعه داده اند (گلاس و همکاران، 2012؛ ساوپه و موتلو، 2014؛ الکساندروا و همکاران، 2015؛ گلاس و همکاران، 2016؛ پورفیریو و همکاران، 2018 ؛ سوگیتان و هافمن، 2019). یکی از عوامل محدودکننده رابطهای مبتنی بر جریان داده این است که ممکن است همیشه به خوبی با حالتهای فضایی بزرگ مقیاس نشوند (گلاس و همکاران، 2016؛ هوانگ و همکاران، 2016). این می تواند اصلاح یا حذف عناصر را دشوار کند، زیرا نمودار می تواند به سرعت به ترکیبی از عناصر و اتصالات آنها تبدیل شود (Coronado et al., 2020).
روش بالقوه دیگری که به افراد تازه کار اجازه می دهد تا برنامه نویسی ربات کنند، استفاده از رابط های مبتنی بر بلوک است (به عنوان مثال، Pot et al., 2009; Datta et al., 2012; Chung et al., 2016; Huang et al., 2016; Huang and Cakmak. ، 2017؛ Paramasivam و همکاران، 2017؛ Coronado و همکاران، 2018؛ Coronado و همکاران، 2019). ما از این آثار الهام گرفتهایم و علاقهمندیم این روشها را گسترش دهیم تا به کارگران غیرمتخصص اجازه دهیم قوانین و استثنائات بیشتری را برای رفتارهای معمولی روباتها ارائه کنند. در این کار، ما به جای طراحی و توسعه یک رابط جدید، بر بررسی اینکه آیا غیرمتخصصان میتوانند برنامههای ربات ساده را با استفاده از یک رابط بصری خارج از قفسه بدون آموزش گسترده ایجاد کنند، تمرکز میکنیم. با استفاده از کارهای قبلی که بر روی طراحی رابط متمرکز شده بود، ما علاقه مندیم ببینیم که آیا چنین واسط های خارج از قفسه ای را می توان مطابق با مورد خاص برنامه نویسی ربات ما سفارشی کرد.
علاوه بر نیاز به روشی برای کاربران برای برنامهریزی ربات، باید در نظر داشته باشیم که چگونه میتوان از یک محیط مشترک از راه دور استفاده کرد. برنامهنویسی ملموس موقعیتیافته به کاربرانی که آموزشهای کمی دارند اجازه میدهد تا با استفاده از بلوکهای برنامهنویسی برای ارجاع اشیا، رباتها را برنامهریزی کنند (سفیدگر و همکاران، 2017؛ سفیدگر و چاکمک، 2018). گسترش این روش شامل بازخورد بلادرنگی بود که بر روی فضای کاری ربات پیش بینی می شد و به طور موثر توسط افرادی با تجربه برنامه نویسی ربات سنتی قبلی استفاده می شد (سفیدگر و همکاران، 2018). استنمارک و همکاران (2017) یک رابط گرافیکی با اقدامات اساسی داخلی ایجاد کرد که با کاربرانی با تجربه فنی یا ریاضی آزمایش شد تا مهارتهای جدید ربات ایجاد کند. برخلاف این آثار، ما به جای تولید مهارتهای جدید، جمعآوری قوانین اضافی برای یک ربات را بررسی میکنیم و توجه خود را بر روی کاربران غیرمتخصص خارج از سایت متمرکز میکنیم.
به عنوان اولین قدم، ما نشان دادیم که کارگران غیرمتخصص می توانند ربات ها را روی دو کار معمولی ربات پس از حداکثر 1.5 دقیقه دستورالعمل برنامه ریزی کنند. با این حال، به نظر میرسید که کارگران در استفاده صحیح از بلوکهای حلقه، قرار دادن بلوک و استفاده متغیر با مشکل مواجه شوند. با بررسی اشتباهات رایج افراد و اظهار نظر پس از تکمیل کار، در مورد مسیرهای آینده برنامه نویسی ربات های غیر متخصص از طریق جمع سپاری بحث می کنیم. این مقاله مشارکت های زیر را ارائه می دهد:
هدف این کار کمک به روش های جدید برنامه نویسی ربات در مقیاس بزرگ برای کاربردهای دنیای واقعی است. همانطور که توسط لیت و همکاران اشاره شده است. (2013)، یک مانع طولانی مدت برای استقرار ربات ها در دنیای واقعی، نیاز مداوم به ایجاد رفتار ربات است. برای اینکه روباتها در محیطهای طبیعی بدون نیاز به کمک متخصص مستقر شوند، باید بتوانند دائماً رفتار (توالی) جدیدی را به مجموعه موجود خود اضافه کنند. به طور معمول، مهندسان و برنامه نویسان ربات مسئول تالیف رفتارهای ربات بوده اند، رویکردی که به خوبی به تعاملات طولانی مدت در دنیای واقعی مقیاس نمی شود (Leite et al., 2016). اخیراً، چندین مطالعه راههایی را برای دسترسی بیشتر برنامهنویسی ربات برای افرادی با سطوح مختلف تخصص برنامهنویسی بررسی کردهاند.
ما باید بدانیم که برنامه نویسی ربات می تواند برای تازه کارها ترسناک باشد (ایزنبرگ، 1997)، به دلیل بار شناختی بالا، زبان های پیچیده و مستعد خطا (باو و همکاران، 2017). رابط های گرافیکی کشیدن و رها کردن، مانند Google's Blockly و MIT's Scratch، معمولاً برای تسهیل این فرآیند استفاده می شوند. در این رابطها، بلوکهای بصری روشهای برنامهنویسی را نشان میدهند که میتوانند به صورت بصری با هم جمع شوند و نیاز به نوشتن کد واقعی و مقابله با خطاهای نحوی را از بین ببرند (Trower and Gray, 2015). زبانهای مبتنی بر بلوک به جای یادآوری واژگان برنامهنویسی، بر شناسایی بلوکها تمرکز میکنند، بار شناختی را با تقسیم کد به بلوکهای معنیدار کاهش میدهند، و مستعد خطا را کاهش میدهند زیرا کاربران نیازی به نوشتن کد ندارند (Bau et al., 2017).
بسیاری از محققین محیط های برنامه نویسی بصری مبتنی بر جریان را برای برنامه نویسی ربات توسعه داده اند اما این رابط ها ممکن است همیشه به خوبی مقیاس نشوند. حالات فضایی بزرگ (گلاس و همکاران، 2016؛ هوانگ و همکاران، 2016). سیستمهایی مانند Blossom ، بلوکهای تعامل (Sauppé و Mutlu، 2014) و RoboFlow (Alexandrova و همکاران، 2015) به کاربران اجازه میدهند الگوهای تعامل یا توالی رفتار را برای روباتهای اجتماعی مشخص کنند. از سوی دیگر، آثار دیگر استفاده از رابطهای کشیدن و رها کردن بصری را بررسی کردهاند (پات و همکاران، 2009؛ داتا و همکاران، 2012؛ چانگ و همکاران، 2016؛ هوانگ و همکاران، 2016؛ هوانگ و چاکمک، 2017 ؛ Paramasivam و همکاران، 2017؛ Coronado و همکاران، 2018؛ Coronado و همکاران، 2019). یک سری از اینها شامل CustomPrograms ، iCustomPrograms (Chung et al., 2016) و Code3 است که همگی به افراد غیرمتخصص اجازه می دهند تا یک ربات را برای انجام کارهای اجتماعی اولیه برنامه ریزی کنند. رفتارهایی با حداقل آموزش Code3 به کاربران امکان می دهد مدل هایی از اشیاء را ایجاد کنند تا از طریق نمایش رفتارهای جدید را به ربات آموزش دهند و ربات را از طریق یک رابط برنامه نویسی بصری به نام CodeIt برنامه ریزی کنند
برنامه نویسی ملموس موقعیتی به کاربران با حداقل آموزش این امکان را می دهد که ربات ها را در حالی که در زمینه وظیفه قرار دارند برنامه ریزی کنند و از بلوک های برنامه نویسی برای ارجاع اشیا استفاده کنند (سفیدگر و همکاران، 2017). گسترش این روش شامل بازخورد بلادرنگی بود که بر روی فضای کاری ربات پیش بینی می شد و به طور موثر توسط افرادی با تجربه برنامه نویسی ربات سنتی قبلی استفاده می شد (سفیدگر و همکاران، 2018).
استنمارک و همکاران (2017) یک رابط گرافیکی با اقدامات اساسی داخلی ایجاد کرد که با کاربرانی با تجربه فنی یا ریاضی آزمایش شد تا مهارتهای جدید ربات ایجاد کند. بر خلاف این کار، ما بر روی جمع آوری رفتار ربات از اقدامات از پیش تعریف شده تمرکز می کنیم تا تولید مهارت های جدید.
کار قبلی از جمعسپاری برای تولید گفتوگوی گفتاری برای سیستمهای مکالمه استفاده کرده است (Jurčíček و همکاران، 2011؛ Lasecki و همکاران، 2013؛ Mitchell و همکاران، 2014؛ Leite و همکاران، 2016؛ Yu و همکاران، 2016؛ Guo et al. همکاران، 2017؛ کندی و همکاران، 2017؛ هوانگ و همکاران، 2018؛ جونل و همکاران، 2019)، داده های تعاملی و رفتار غیرکلامی (اورکین و روی، 2007، اورکین و روی، 2009؛ چرنوا و همکاران .، 2010؛ راسن و لوک، 2012؛ بریزیل و همکاران، 2013؛ سانگ و همکاران، 2016). با این حال، هیچ کار قبلی روشی برای جمعآوری رفتارهای جدید ربات برای کارهای روزمره در مقیاس بزرگ با استفاده از افراد غیرمتخصص نیمه موقعیت ایجاد نکرده است.
در مجموع، برنامهنویسی و جمعسپاری ربات غیر متخصص هر دو در تحقیقات قبلی روباتیک و تعامل انسان و ربات (HRI) مورد بررسی قرار گرفتهاند. تا به امروز، هیچ تحقیقی این دو رویکرد را برای بررسی فرصتها و چالشهای برنامهنویسی ربات غیرمتخصص از راه دور در مقیاس بزرگ به عنوان روشی برای جمعآوری رفتار ربات ترکیب نکرده است.
ما یک رابط برنامه نویسی بصری بر اساس Scratch MIT ساختیم (رزنیک و همکاران، 2009)، یک ابزار برنامه نویسی ربات با قابلیت کشیدن و رها کردن بصری و قابل دسترس با استفاده از یک زبان همه منظوره که کار قبلی برای افراد غیر متخصص اثربخشی را نشان داده است (مالان و لایتنر، 2007). همانطور که قبلاً بحث شد، برنامه نویسی بصری یک ابزار محبوب برای برنامه نویسی غیر متخصص است و به ویژه با برنامه نویسی ربات ما از طریق موارد استفاده جمع سپاری مطابقت دارد زیرا امکان برنامه نویسی ربات بصری و غیر متخصص را بدون نیاز به آموزش گسترده فراهم می کند.
ما رابط اصلی Scratch را تطبیق دادیم تا به کارگران خود یک رابط تمیز متناسب با وظیفه برنامه نویسی روبات فعلی ارائه دهیم (شکل 1 را ببینید). این رابط بلوکهای کد از پیش تعریفشدهای را در اختیار کاربر قرار میدهد که میتوانیم به طور انعطافپذیر برای هر کار تعریف کنیم. ما مجموعه ای از بلوک ها را برای آزمایش عبارات برنامه نویسی مورد نظر تعریف کردیم. بلوک ها و عملکردهای غیر مرتبط با کار حذف شدند. بلوک ها را می توان به فضای کاری کشیده و به هم متصل کرد تا برنامه ای را تشکیل دهد که رفتار ربات مورد نظر را ایجاد کند. برنامه را می توان با کلیک بر روی نماد پرچم سبز آزمایش کرد و اجرای برنامه را می توان با کلیک بر روی دکمه توقف قرمز متوقف کرد. هنگامی که یک برنامه آزمایش می شود، مرحله (شکل 1C را ببینید) خروجی برنامه را تجسم می کند. برای هر برنامه نادرست، پیام های خطای ساده نشان می دهد که چه چیزی نادرست است و کاربر را تشویق می کند تا دوباره امتحان کند. برای کار انتخاب و مکان، ما یک ربات متحرک سه بعدی ایجاد کردیم که بازوهای خود را برای نشان دادن چیدن و قرار دادن سیلندرها حرکت می داد. برنامه مبتنی بر وب در اکثر مرورگرهای وب استاندارد اجرا می شود.
کارگران پلتفرم جمعسپاری Amazon Mechanical Turk (AMT) از طریق Human Intelligence Task (HIT) ما با این مشکل آشنا شدند که حاوی دستورالعملها، پیوند به برنامه وب با رابط برنامهنویسی بصری ما، پرسشنامه و آپلود فایل بود. هنگامی که برنامه وب در مرورگر وب کارگر باز بود، جلسه، از جمله حرکت مکان نما و کلیک های ماوس، روی صفحه ضبط شد و برای تجزیه و تحلیل کیفی ذخیره شد. از کارگران خواسته شد که برنامه خود را دانلود کرده و سپس آن را برای عبور از HIT در سرور ما آپلود کنند. این به ما فرصت داد تا هم روند مستمر برنامهنویسی کارگران و هم برنامه تمام شده را تحلیل کنیم.
این دو وظیفه با تحقیقات قبلی در مورد برنامهنویسی ربات مشخص شدهاند. یکی از کارها یک کار ناوبری است (شکل 2 را ببینید) که در آن ربات باید به مکان های از پیش تعریف شده حرکت کند، با الهام از هوانگ و همکاران. (2016). وظیفه دیگر یک کار انتخاب و مکان است (شکل 3 را ببینید)، که در آن ربات باید سیلندرهایی را مانند سفیدگر و همکارانش روی هم قرار دهد. (2017). اینها کارهای معمولی هستند که احتمالاً یک ربات باید رفتار خود را بر اساس محیط خاصی که در آن مستقر شده است (مانند کارخانه های مختلف، خانه و غیره) تطبیق دهد. با این حال، همانطور که قبلا ذکر شد، مورد استفاده برنامهنویسی ربات جمعسپاری ما با این دو کار نشان داده شده است، اما محدود به آن نیست.
در کار فرعی بلوکهای وظیفه ناوبری، کارگران با استفاده از بلوکهای موجود برنامهای ساختند (شکل 4 را ببینید) تا ربات [واقع در (1) در شکل 2]: 1) به ایستگاه شارژ خود که در راهرو قرار دارد حرکت کند. 2) باتری آن را شارژ کنید. و 3) به اتاق نشیمن برگردید. این ربات فقط میتوانست بین اتاقهایی حرکت کند که در مجاورت یکدیگر بودند و باتری آن در حین کار تخلیه میشد. در کار فرعی شرطی، گربه ای را معرفی کردیم [واقع در (2) در شکل 2] که به طور تصادفی ظاهر می شود و درب آشپزخانه به راهرو را مسدود می کند. این در دستورالعمل ذکر نشده است. در دنیای واقعی، تغییرات ناگهانی در محیط ممکن است باعث شود ربات ها در یک کار شکست بخورند. به عنوان مثال، ربات ممکن است وقتی گربه راهش را می بندد گیر کند. همانطور که در مقدمه به عنوان مثال ذکر شد، این می تواند یک در بسته نیز باشد. در این مورد، کارگران می توانند از یک شرطی برای تعیین دنباله ای از اقداماتی که ربات باید برای ادامه انجام دهد، استفاده کنند. در اینجا، آنها می توانند مشخص کنند که اگر گربه در را مسدود کرد، ربات باید "گربه را حرکت دهد" [نگاه کنید به (2) در شکل 4]. در زیرکار حلقه، ربات باید «تا زمانی که شارژ کامل شود» شارژ میشد، و ما یک بلوک حلقه را معرفی کردیم [به (3) در شکل 4 مراجعه کنید] که هر کدی را که در داخل آن قرار داده شده بود تا زمانی که شرط برآورده شود، تکرار میکرد. در نهایت، در زیرکار متغیر، هم شرطی و هم حلقه ثابت می ماندند، اما متغیرها باید برای تعیین شرایط این بلوک ها استفاده می شدند. به عنوان مثال، "تکرار تا زمانی که کاملاً شارژ شود" به "تکرار تا زمان نگهدارنده مکان" تغییر کرد، که در آن متغیری میتواند در داخل نگهدارنده قرار گیرد [به شکل 4(4) مراجعه کنید].