У вас есть робот, работающий под управлением ROS, и вы хотели бы иметь возможность контролировать его и/или управлять им с помощью внешнего интерфейса. Что такое экономически эффективное решение полного стека? Я представлю стек, который я использую в Robotnik, испанской робототехнической компании, которую недавно купила Universal Robots.
В этом посте я дам вам обзор стека, но в будущем я расскажу более подробно и предоставлю вам обучающие ресурсы для каждой части стека. И я разрабатываю шаблонный проект, чтобы помочь вам начать работу.
ROS (Robot Operating System) + CPP, Python
Это стандартный пакет промежуточного программного обеспечения для робототехники. ROS1 предлагает отличные инструменты для быстрой разработки программных систем для робототехники. ROS2 расширяет эти возможности, значительно повышая безопасность и производительность производственных роботов. C++ и Python являются наиболее поддерживаемыми языками программирования, но также доступны клиентские библиотеки для других языков. Я использую Python и C++ для создания частей стека Robotnik и работаю над добавлением этих компонентов в Robot Web Tools (см. ниже).
unittest, pytest, Google Test
unittest и pytest являются официально поддерживаемыми средами тестирования Python для ROS1 и ROS2 соответственно, а Google Test работает с кодом C++ для ROS1 и ROS2.
Акции на гитхабе
Лучший инструмент для автоматизации рабочих процессов CI/CD.
Веб-инструменты для роботов
Программный пакет, который позволяет программным компонентам, не относящимся к ROS, взаимодействовать с роботом/системой ROS. Веб-приложения JavaScript лучше всего поддерживаются с помощью библиотеки roslibjs с отличными библиотеками 2D и 3D визуализации. roslibjs поддерживает как ROS1, так и ROS2.
ТипСкрипт + HTML
TypeScript добавляет безопасность типов в JavaScript.
Стандартные веб-приложения JavaScript+HTML наиболее естественно подходят для roslibjs, но они также могут взаимодействовать с другими языками интерфейса; Dart, Kotlin и Swift прекрасно совместимы с JavaScript. Если вы хотите создавать 3D-визуализации с помощью библиотеки Robot Web Tools ros3djs, вы можете поместить ее в веб-представление Flutter, Android или iOS. Если бы Robotnik решил поддерживать несколько платформ, Flutter был бы на вершине списка.
Реагировать
ReactJS — это ультрапопулярная библиотека для рендеринга JavaScript, созданная и поддерживаемая Meta, также известной как Facebook. Это позволяет нам создавать повторно используемые реактивные веб-компоненты для рендеринга веб-приложений. С недавним Hooks API React поощряет более функциональный стиль разработки, который избегает использования классов.
React Native — еще один убедительный выбор: вы можете использовать его для создания iOS, Android и веб-приложений из единой кодовой базы. Но в настоящее время у Robotnik нет веских причин поддерживать несколько платформ.
Предупреждение: React лучше всего подходит для веб-приложений, а не для веб-сайтов. Чтобы обсудить, чем хорош React, ознакомьтесь с эпизодом JavaScript Jabber Web Performance with Alex Russell.
Недостаток библиотеки React заключается в том, что вам нужно сделать много вариантов для завершения внешнего стека, в отличие от внешних фреймворков, такие как Vue, и фреймворки с полным стеком, такие как Ruby on Rails. Именно поэтому я выбрал…
РедвудДжС
Этот полнофункциональный фреймворк React является детищем Тома Престона-Уорнера, основателя и бывшего генерального директора Github. Вдохновленный Rails, он объединяет многочисленные технологии в стек, четко разделяющий серверную часть и интерфейс.
- GraphQL
- Призма
- Сборник рассказов
- Собственное решение для маршрутизации с богатым набором функций RBAC (управление доступом на основе ролей).
Официальный Туториал — это полноценная книга из 7 глав, и у нее сильное сообщество — я посещаю еженедельник Makers Hour.
Я был бы одинаково доволен Ruby on Rails или Phoenix+Elixir, но предпочитаю не добавлять в наш стек дополнительный язык программирования.
Супабаза/Постгрес
Supabase — это саморазвертываемая BaaS с открытым исходным кодом (Back-End-as-a-Service). Supabase упрощает аутентификацию пользователей и доступ к базе данных. Если ваш вариант использования позволяет это, Google Firebase — это более многофункциональное и зрелое решение: облачное решение с закрытым исходным кодом для всей вашей серверной части. И Auth0 был бы моим выбором для аутентификации, если бы я мог полагаться на облачный доступ.
Supabase предоставляет API поверх Postgres, последний из которых является объектно-реляционной базой данных с открытым исходным кодом; он имеет традиционные функции SQL, но также поддерживает такие форматы хранения, как Binary JSON.
В основном я использую Supabase для его функций аутентификации, поскольку RedwoodJS уже предоставляет уровни API поверх баз данных SQL. Предупреждение об аутентификации Supabase: реализация RBAC неудобна, поэтому я бы использовал Auth0, если бы мог.
Вите
Высокопроизводительный и гибкий инструмент сборки с возможностью горячей перезагрузки. Он требует небольшой настройки, в отличие от ванильного вебпака. Если вы не используете фреймворк с полным стеком, такой как RedwoodJS, я все равно не верю, что есть еще какая-то причина использовать create-react-app.
В настоящее время я использую веб-пакет из-за стабильной поддержки RedwoodJS, но я планирую переключиться на Vite, когда RedwoodJS переведет поддержку Vite из бета-версии.
Материальный интерфейс + Эмоция
Фреймворки/решения для стилей — это слой стека, из-за которого мне больше всего некомфортно в веб-разработке; такие решения, как Flutter и SwiftUI, предоставляют 1–2 библиотеки визуальных компонентов и официальный способ стилизации каждого из них, в то время как количество решений, доступных для стилизации HTML, огромно.
Я оценил десятки вариантов и выбрал Material UI:
- С 2014 года они создают интуитивно понятные компоненты React, которые удовлетворяют потребности компаний любого размера.
- Их приверженность доступности непоколебима.
- Пользовательский интерфейс материалов соответствует элегантному стандарту Google Material Design 2.
Emotion — это стандартная библиотека CSS-in-JS для Material UI. Я доверяю мнению разработчиков Material UI, но эмоции — не всегда правильный выбор.
Вот и все на этот раз! По состоянию на 7 марта 2023 г., когда я отредактировал эту статью, включив в нее RedwoodJS, я реализовал RBAC в своем шаблоне и готов к работе с Python и C++ ROS.