Чи потрібно будувати ROS для роботизованих досліджень / застосувань? Яка головна перевага? Коли або в яких ситуаціях ROS є обов'язковим?
Чи потрібно будувати ROS для роботизованих досліджень / застосувань? Яка головна перевага? Коли або в яких ситуаціях ROS є обов'язковим?
Відповіді:
Я повернувся до комп’ютера!
Як я вже говорив у цьому коментарі , ROS, як правило, не є обов'язковим. ROS - одна з багатьох платформ, відома здебільшого завдяки тому, що Willow Garage в якийсь момент роздав безкоштовних роботів тому, хто написав більшість модулів ROS. Однак, це не найкраща можлива платформа, і це, звичайно, нічого надмірно особливого. Зокрема, зазначений конкурс призвів до безлічі модулів низької якості лише для того, щоб збільшити кількість.
З часом якість модулів ROS покращилася, їх також багато. Таким чином, використовуючи ROS, ви маєте перевагу повторно використовувати багато що вже зроблено. Ви можете прочитати тут кілька причин, чому ви можете використовувати ROS.
Зважаючи на це, ви повинні також стежити за побічними ефектами.
З ROS у вас є багато вузлів, які спілкуються між собою через мережу. Іноді це добре і легко, але, як правило, призводить до різко різної затримки прийому повідомлень. Як результат, вам доведеться мати велику затримку управління, щоб переконатися, що всі повідомлення надходять, а це означає, що ви не можете швидко реагувати на події, а це, в свою чергу, означає, що вам потрібно переміщати робота з меншою швидкістю, щоб не пропустити ці події.
Вірите чи ні, люди насправді керують роботами через ROS ( MoveIt! - це назва відповідного набору компонентів). Повільно. Небезпечно. Але легко!
Навіть коли він не розповсюджується, ROS не є платформою в режимі реального часу. Це означає, що ви перебуваєте на повному розсуді ядра Linux, щоб планувати свої завдання в будь-який час, коли вважаєте за потрібне. Для деяких програм це нормально, а для інших не нормально. Тому потрібно дивитися на власні вимоги. Чи потрібно мати гарантію, що ваше завдання закінчиться у відомі часові рамки? Якщо так, вам потрібна система в режимі реального часу.
Ще один момент, який слід врахувати, полягає в тому, що, хоча ROS є загальним протоколом зв'язку, він по суті підтримується лише для розміщених середовищ. Розташований означає, що код працює над ядром, на відміну від автономного, що означає, що код безпосередньо керує обладнанням (наприклад, на мікроконтролері).
Якщо ваш додаток з робототехніки працює впритул до апаратного забезпечення, і тому вам знадобиться програма, яка працює на мікроконтролері, ROS вам не допоможе.
Не в останню чергу, розробка для ROS призводить до блокування платформи. Це означає, що якщо в майбутньому з тих чи інших причин ви вирішите базувати свою роботу на іншій робототехнічній платформі, такі як OROCOS, YARP тощо, це буде неприємно.
Ви також були б дещо заблоковані до Linux. Linux - це найкраще, без сумніву, але одного разу вам, можливо, доведеться підтримувати іншу систему, таку як QNX, VxWorks тощо, і у вас також будуть проблеми.
Якщо ви пишете для мікроконтролерів, то забудьте про ROS. Якщо ви пишете модулі високого рівня, настійно рекомендую писати портативний код. Наприклад, скажіть, що ви розробили новий датчик, і ви хочете написати модуль, який отримує дані з цього датчика, який підключений до комп'ютера через шину CAN.
Що ви можете зробити в цій ситуації - це написати незалежну бібліотеку з функціями, здатними працювати з вашим датчиком і отримувати дані. Можна навіть подумати про нерестовину нитки в бібліотеці, яка періодично збирає та запитує дані.
У вас є бібліотека помічників, ви можете написати CLI, GUI, модуль ROS, модуль OROCOS, модуль YARP, підключитися до Matlab або будь-що інше, що ви хочете використовувати для взаємодії зі своїм датчиком.
Заключне зауваження: те, що я тут говорив, в основному стосується всіх платформ робототехніки, а не лише ROS.
"ROS" - відносний термін, APM виконує повний користувацький код, спеціально розроблений для управління квадрокоптером, де користувальницький ROS може бути бажаним не захищатись, з іншого боку Navio + працює на ядрі Linux і виконує код, відмінний від автопілота, і досі вдається уберегти від аварій. Більшість ROS - це дійсно набір функцій поверх існуючої ОС на відміну від написання ОС з нуля. Як і в усьому, це залежить.
Відмова: Ця відповідь якимось чином є реакцією на пост Шахбаза, тому вона має упередженість R-ROS.
Я не вважаю, що ROS є обов'язковим, але це прекрасна відправна точка і варто витратити час на вкладення коштів. Він розпочався в межах Willow Garage, але ця компанія зникла, і ROS все ще живе, використовується і розвивається. Більшість ROS є повністю відкритим кодом, а також є комерційно придатним, тому немає можливості, що ROS просто зникне, якщо компанія більше не зацікавлена в ньому. Якість коду, звичайно, відрізняється між основними модулями та реалізацією передових алгоритмів, які опублікував студент-аспірант у своїй роботі.
ROS набирає все більшої швидкості в промислових умовах (я здивуюся, якщо у всьому світі є значна частина запуску робототехніки, яка не використовує ROS). Деякі алгоритми будуть надалі підтримуватися та розроблятися Рос-промисловим консорціумом, і якщо ви подивитесь на членів, це гарна обставина, що ROS стане стандартом у галузі:
http://rosindustrial.org/ric/current-members/
Розподілений спосіб використання ROS дуже допомагає створювати та підтримувати нові пакети, особливо в командах. Визначення повідомлень та дій дуже допомагають у визначенні інтерфейсів для швидкого обміну апаратними та алгоритмами. Це також допомагає інтегрувати нових членів команди, оскільки новий вузол призведе до збиття інших вузлів, якщо він вийде з ладу (доки він не з'їсть всю оперативну пам'ять ..), тому досить безпечно інтегрувати частково працюючі вузли в працюючу систему як їх ефект обмежений. Для зв'язку використовується TCP, який є надійним і швидким (на локальній машині), тому передача повідомлень відбувається дуже швидко (можливе кілька сотень Гц для циклу управління).
Не в режимі реального часу
На даний момент ROS не є в реальному часі, оскільки переважна більшість алгоритмів не потребує реального часу. Зондування чи планування в більшості випадків не мають обмежень у режимі реального часу (скільки людей будують самостійно за кермом автомобілів високої швидкості?). Досить, якщо кінцевий цикл управління працює в режимі реального часу, і це в багатьох випадках може бути зроблено безпосередньо на двигуні (куди відправляється кінцева позиція, наприклад, через CAN). Однак реальний час є однією з головних цілей ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ), тому навіть якщо вам це потрібно в майбутньому для всієї системи, ROS охопив вас .
Якщо ви дійсно хочете запустити вбудовані речі, звичайно, є з'єднання з arduino, так що ви можете записувати ROS-повідомлення безпосередньо на arduino, які потім надсилаються через послідовне з'єднання.
Запуск ROS в Windows наразі є досить болючим, але оскільки Windows наближається до Linux (навіть починаючи щось схоже на башти), це лише питання часу, поки це стане можливим. (Але хто хоче все-таки запустити робота з Windows?)
Апаратні інтерфейси та алгоритми:
Я думаю, що це справді є важливим моментом для ROS. Дуже багато комерційно доступних роботів вже поставляються з інтерфейсом ROS або хтось уже вклав певний час для впровадження інтерфейсу. Більшість комерційних озброєнь може використовуватися в MoveIt, тому велика частина роботи, щоб отримати програму для запуску з певною рукою, можна повторно використовувати з іншим обладнанням.
Спільнота:
Ще один сильний момент для ROS. Нові алгоритми отримують ROS-інтерфейс дуже швидко, і у багатьох людей були ті ж проблеми, що і у вас, тому ви знайдете когось, який допоможе вам.
http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf