# 1.3.7 Компоненты ПО (ROS, Python и Linux)

Я снова отошлю Вас к Приложению, в котором описано всё ПО, на котором работает робот, но основные части я всё же рассмотрю здесь. ОС робота - Linux, запущенный на SBC Raspberry Pi 3. Мы используем ROS для соединения различных компонентов ПО между собой, также она помогает разобраться со всеми требовательными сетевыми задачами - установкой сокетов, соединения. ROS также идёт с огромной библиотекой с большим количеством функций, которыми мы в будущем сможем воспользоваться, например - создание интерфейса для управления с джойстика.

ROS это не ОС, управляющая компьютером, как Linux, а каркас для взаимодействия интерфейсов и упрощения связи между ними. ROS использует метод *издатель/подписчик* для передачи данных из одного места в другое, что позволяет разделить программы, создающие данные (датчики или камеры), и программы, использующие данные (контроллеры). Мы будем создавать огромное количество своих вещей и использовать лишь малую часть функций ROS. У Packt Publishing есть несколько хороших книг для изучения ROS. Моя любимая - *Learning ROS for Robotics*, написанная Аароном Мартинес и Энрике Фернандес.

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

* **Портируемость**: Python легко портируется между Windows, Mac и Linux. Вам придётся что-либо изменять при портировании только при использовании функций вне ОС, таких как открытие файла
* Как интерпретируемый язык, Python **не требует компиляции**. Некоторые программы, которые мы будем писать в этой книге, потребовали бы 10-20 минут на сборку, будь они написаны на С или С++. За это время можно сделать множество других вещей, а не просто ждать, пока закончится **сборка**
* **Изолированность**. Об этом преимуществе обычно не говорят, но, как человек с большим опытом ломания ОС для роботов, могу сказать, что тот факт, что интерпретатор Python изолирован от ядра ОС означает, что вряд ли Ваша программа на Python сможет когда-либо сломать Вам компьютер. Вылет компьютера означает перезагрузку и потерю всех данных, которые могли бы помочь в установлении причины вылета. У меня был проект робота, который после переноса с Python на С++ сразу же стал ломать ОС. При вылете программы на Python, другая программа может это отследить и перезапустить вылетевшую. Если же сломалась сама ОС, Вы не можете сделать ничего, кроме как нажать на кнопку *reset*. (Для большей информации почитайте [*Python Success Stories*](https://www.python.org/about/success/devil/))
