Skip to content

Instantly share code, notes, and snippets.

@sfalexrog
Last active August 26, 2020 10:42
Show Gist options
  • Save sfalexrog/8012da779995866b8981ad6770221644 to your computer and use it in GitHub Desktop.
Save sfalexrog/8012da779995866b8981ad6770221644 to your computer and use it in GitHub Desktop.
То, что я буду кидать каждый раз, когда будет всплывать разговор о "запуске ROS на Windows"

Так уж получается, что у большинства людей до сих пор основной системой стоит Windows, и они прилагают максимум усилий для того, чтобы эта система у них была ещё и единственной, даже если они занимаются робототехникой. Я не осуждаю этот выбор, в конце концов, у меня у самого есть железки, поддержка которых в Windows гораздо лучше, чем в Linux - но хочу донести до них несколько простых мыслей по поводу Windows и ROS.

Ещё раз, я ни в коем случае не пытаюсь сказать, что Windows - плохая операционная система, не пытаюсь доказать превосходство GNU/Linux, я всего лишь стараюсь показать, почему запуск ROS в Windows/WSL/WSL2 - не "серебряная пуля", позволяющая работать с ROS столь же комфортно, как и на GNU/Linux, стоящей на "настоящем" железе.

Итак, поехали:

  1. Я начну с маленькой лжи: ROS - это не какая-то монолитная программа наподобие фотошопа, автокада или ворда. Ложь здесь заключается в том, что ни фотошоп, ни автокад, ни ворд на самом деле тоже не монолитны - у них у всех есть богатая система дополнений, плагинов. Для многих "установка автокада" - это только первый шаг к получению полноценного CAD'а для своего рабочего места. Но ROS изначально, по сути, существует только в виде множества пакетов, из которых можно выбрать те, которые нужны для той или иной задачи. В минимальном своём варианте ROS - это просто система передачи сообщений и удалённого вызова процедур, всё остальное "накатывается" сверху.

  2. Существует несколько способов "запустить ROS на Windows". Я начну с того, который достаточно мною исследован: "нативный" ROS для Windows.

    Существует довольно неплохая и понятная инструкция по установке, которая написана прямо в ROS Wiki. Я честно выполнил все пункты и получил некий аналог ros-melodic-desktop-full у себя на Windows 10. Результаты таковы:

    • Установка всего необходимого - Visual Studio (полноценного, не code) занимает где-то 15 Гб. Установка ROS и зависимостей - ещё ~10 Гб. В принципе, это не особо плохо, но, кажется, Ubuntu Linux + ros-melodic-desktop-full занимает куда меньше дискового пространства.
    • Работает всё, прямо скажем, не очень. rviz не всё корректно отображает, gazebo не запускается вообще. Про автодополнения в Windows, видимо, не слышали; если для roslaunch ещё можно запомнить названия пакетов и launch-файлов, то вот вызывать сервисы через rosservice уже несколько затруднительно.
    • А, ещё пользователя постоянно будет преследовать встроенный windows firewall, спрашивающий, можно ли ROS-нодам друг с другом общаться.
    • Если нужны пакеты, не входящие в ros-melodic-desktop-full (а таких вполне достаточно - как минимум mavros, cv_camera, web_video_server) - ну что же, извольте собирать их из исходников.
    • Всё, что связано с ROS, ставится исключительно на диск C, в папку opt. Не хватает места на "основном" диске? Очень жаль.

    К слову, установка ROS для Windows у меня заняла достаточно значительное время. Visual Studio у меня уже был, если бы надо было ставить ещё и его - я бы смело сказал, что поставить Ubuntu с нуля, накатить туда все нужные нам пакеты (в дополнение к ros-melodic-desktop-full), собрать наши ноды и запустить симулятор куда быстрее, чем вот этот огрызок ROS ставить на Windows.

  3. Есть чудесные три буквы, появившиеся в свежих версиях Windows 10: WSL, Windows Subsystem for Linux. Как и положено продуктам от Microsoft, у этих трёх букв есть как минимум две версии, работающие достаточно по-разному.

    WSL1 позволяет запускать приложения, написанные для Linux, за счёт перенаправления системных вызовов к ядру Windows. Результат - "почти нормально" работающие консольные приложения, и даже какие-то графические штуки работают (правда, довольно условно - об этом ниже).

    WSL2 - это уже "взрослая", честная виртуализация ядра Linux. Microsoft, кажется, решила, что такой путь более правильный, будет работать в этом направлении, и даже когда-то будет предлагать виртуализацию GPU.

    Важную часть я повторю ещё раз. Когда-то будет предлагать виртуализацию GPU.

    Что это значит? А значит это, что на данный момент нет возможности заставить программу, запущенную в WSL, использовать GPU.

    В целом это не так уж и страшно, mesa позволяет использовать программную растеризацию (рисование), просто оно будет в десятки, сотни или тысячи раз (в зависимости от задачи) медленнее, чем растеризация на GPU. Это не страшно, если WSL используется для запуска, например, веб-сервера, которому GPU никуда не упёрся, но вот если говорить про робототехнику, про симуляцию - там вот GPU весьма и весьма нужен.

    Кроме того, для отображения отрисованной графики в Windows нужны дополнительные программы (например, Xming или VcXsrv), которые ещё и настроить как-то правильно надо.

  4. Так откуда же постоянно всплывают истории успеха про ROS на Windows и WSL? Моя гипотеза - тем, кто так делает, не так важна скорость симуляции, скорость отрисовки, скорость взаимодействия с пользовательским интерфейсом. Ну и что, симуляция происходит с замедлением в 10-20 раз? Можно запустить своего робота и уйти, например, пить чай. Когда-то она всё равно досимулируется.

    Ещё не стоит забывать, что большая часть людей занимается роботами, не отрывающимися от земли, использующими лидары для навигации (их симуляция происходит немного не так, как в случае с камерами), в которых все части ПО написаны под ROS. В нашем случае все три эти вещи не являются истиной.

  5. Не могу ещё пару слов про облачные вычисления не сказать. Недавно в ROS Russia Community поднимался вопрос относительно AWS RoboMaker от Amazon. Казалось бы - огромная корпорация, почти бесконечные вычислительные ресурсы, датацентры с GPU - а всё же пользовательский интерфейс Gazebo перерисовывается пару раз в секунду.

    Я верю, что этот показатель можно значительно улучшить. Скорее всего, RoboMaker пока ещё сыроват, и в скором времени можно будет использовать для разработки чисто браузер. Больше того, уже сейчас можно использовать ресурсы RoboMaker'а для построения CI: как я понимаю, "локально" там ничего не тормозит, можно даже устраивать симуляции быстрее реального времени. Но пока что продукт откровенно сыроват.

    Ещё на PX4 Dev Summit'е ребята из Microsoft, кажется, показывали, как они запускали Airsim где-то в своём Azure-облаке, как у них всё прекрасно и замечательно. Возможно, что скоро ничего, кроме браузера и аккаунта в какой-то облачной системе, для начала пути в робототехнике не потребуется.

    Но пока что мы не там.

  6. Так и что же делать сейчас? Я бы сказал, что самый лучший вариант - просто честно поставить себе Ubuntu на рабочий комп. Если возможности это сделать ну вообще никакой нет - ну что же, придётся пользоваться виртуалкой. По сути, это как WSL2, только с виртуализацией GPU (и чуть большим количеством крутилок). Ну и, видимо, как-то выражать своё недовольство тем, кто пилит ROS, Windows, WSL и прочее.

Закончить хочется на чём-то позитивном, и поэтому я выражаю надежду на то, что через месяц, полгода, самое позднее - год эта заметка станет неактуальной, что в скором времени будет какое-то решение, позволяющее работать с ROS из-под любой операционки, не требующее никаких сложных телодвижений, скачивания огромных архивов, компиляции кучи пакетов. Я верю в то, что это вполне может быть реализовано руками таких корпораций, как Microsoft, Amazon, Nvidia, Intel. Надо только немного подождать - и поубеждать все эти корпорации, что оно того стоит.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment