Ответ на вопрос
MAVProxy
MAVProxy — свободная консольная наземная станция для управления беспилотными летательными аппаратами по протоколу MAVLink[1]. Программа написана на Python, распространяется по лицензии GNU GPL версии 3 или новее и развивается в составе экосистемы открытого автопилота ArduPilot[2]. Она спроектирована как минималистичный, портируемый и расширяемый модулями инструмент разработчика: работает из командной строки, маршрутизирует телеметрию между бортом и несколькими потребителями и дополняет собой графические станции Mission Planner, APM Planner 2 и QGroundControl[1].
MAVProxy занимает среди наземных станций ArduPilot нишу «станции разработчика»: графические оболочки вроде Mission Planner и QGroundControl ориентированы на оператора, тогда как консольная станция обслуживает отладку, автоматизацию и маршрутизацию потоков MAVLink[1]. MAVProxy была создана командой CanberraUAV для участия в австралийских соревнованиях беспилотных систем Outback Challenge и выложена на GitHub в мае 2012 года[2]. Ведущими разработчиками являются Эндрю Триджелл — автор утилиты rsync и пакета Samba — и Питер Баркер[2]. За годы развития программа стала одним из самых гибких инструментов экосистемы ArduPilot: ряд функций современных наземных станций берёт начало в модулях MAVProxy[1].
Общие сведения
Что важно знать
| MAVProxy | |
|---|---|
| Область использования | разработка и эксплуатация беспилотных летательных аппаратов, тестирование автопилотов, воздушный мониторинг |
| Дата появления | 2012 |
| Место появления | Канберра |
| Автор понятия | Andrew Tridgell |
| Ключевые слова | наземная станция, MAVLink, телеметрия, модуль, консоль |
| Базовые понятия | беспилотный летательный аппарат, наземная станция, телеметрия, автопилот |
История
Предпосылки и создание (2009—2012)
В конце 2000-х годов распространение недорогих микроконтроллеров и готовых автопилотов сделало доступной сборку небольших квадрокоптеров и самолётов с автономным полетом[3]. Для настройки, планирования заданий и наблюдения за полетом такой аппарат требует наземной станции управления — компьютера с программой, принимающей телеметрию и отправляющей команды[4]. Австралийская команда CanberraUAV готовила к соревнованиям беспилотных систем Outback Challenge аппарат на базе открытого автопилота ArduPilot и параллельного вычислителя Pandaboard; для его обслуживания была написана консольная станция MAVProxy, умевшая работать с несколькими каналами связи одновременно[1][5].
В октябре 2012 года CanberraUAV выиграла соревнования Outback Challenge с аппаратом на плате APM2 и вычислителе Pandaboard, продемонстрировав связку автопилота, бортового компьютера и наземной станции в дальнем полете[5]. К этому моменту исходный код станции уже был открыт: репозиторий MAVProxy на GitHub создан 2 мая 2012 года[6], проект распространялся на условиях GNU GPL версии 3 и новее[2]. Название программы отражает первоначальный замысел — «прокси» протокола MAVLink, посредник между бортом и потребителями телеметрии[2]. В сентябре 2014 года Триджелл и CanberraUAV выиграли Outback Challenge второй раз — уже с самолётом на базе ArduPilot, что закрепило за связкой автопилота и консольной станции репутацию решения для дальних автономных полетов[5]. Открытая прошивка с платами APM к этому времени стала массовой основой самодельных аппаратов: второе поколение платы вышло в 2011 году, версии APM2.5/2.6 — в 2012-м, а энтузиасты публиковали автотестеры прошивок и сторонние наземные станции[5].
Развитие в экосистеме ArduPilot (2013 — настоящее время)
После соревнований MAVProxy сохранила самостоятельную жизнь в составе экосистемы ArduPilot: документация проекта описывает её как полнофункциональную наземную станцию для любой автономной системы с поддержкой MAVLink[1]. Развитие самой экосистемы совпало по времени с ростом станции: в январе 2013 года код ArduPilot был перенесён с Google Code на GitHub, в октябре 2014 года сложилась ассоциация Dronecode, объединившая разработчиков MAVLink-проектов под эгидой Linux Foundation[5]. MAVProxy при этом осталась проектом сообщества: мейнтейнеры координируют работу через публичный чат, а ведущие направления закреплены за конкретными разработчиками — от ядра под Windows до сборок под macOS[2]. Ведущими разработчиками после Эндрю Триджелла и Питера Баркера стали мейнтейнер Windows Стивен Дейд и мейнтейнер macOS Рис Майнваринг; обсуждение разработки ведётся в канале проекта на сервере Discord[2]. Документация отмечает, что многие функции, которые пользователи видят сегодня в других наземных станциях, берут начало в MAVProxy[1].
Программа выросла из средства соревновательной команды в универсальный инструмент: она включена в штатную документацию ArduPilot, поставляется готовыми сборками для основных операционных систем и применяется как отладочный хаб при разработке прошивок и бортовых вычислителей[1]. Отдельным направлением стало использование станции в учебных проектах по сборке дронов: литература по любительскому дроностроению описывает MAVLink-инструменты как стандартный способ наблюдения за телеметрией самодельного аппарата[7].
Принцип работы
Протокол MAVLink
MAVProxy общается с бортовой аппаратурой по протоколу MAVLink — бинарному протоколу информационного взаимодействия между аппаратом (MAV) и станцией наземного управления (GCS)[8][9]. Базовой сущностью протокола является пакет длиной от 8 до 263 байт[10][8]. В нём передаются признак начала сообщения (STX), длина полезной нагрузки (LEN), счётчик пакетов (SEQ), идентификаторы отправляющей системы (SYS) и компонента (COMP), тип сообщения (MSG), полезная нагрузка (PAYLOAD) и два байта контрольной суммы (CKA, CKB). Счётчик пакетов помогает выявлять потери сообщений в канале, а идентификатор системы у станций наземного управления по обычаю сообщества равен 255[10]. Протокол допускает обмен между несколькими системами и компонентами: каждая станция и каждое бортовое устройство получают собственные идентификаторы[9]. Служебное сообщение heartbeat подтверждает присутствие участника в сети: по регулярности этих сообщений участники узнают о появлении и отключении систем, а на радиотелеметрии их рассылают с частотой около одного герца[9][11]. MAVLink развивается в двух мажорных версиях — v1.0 и v2.0, причём вторая обратно совместима с первой: реализации v2.0 читают и посылают пакеты обоих форматов[9]. Потоки телеметрии передаются в групповом режиме без подтверждений, а операции, требующие гарантированной доставки, — загрузка заданий, обмен параметрами, команды — выделены в отдельные протоколы-«микросервисы»: миссии, параметров, команд, ручного управления, камеры и стабилизатора камеры[9]. Протокол создан Лоренцем Майером и впервые выпущен в 2009 году; сеть MAVLink допускает до 255 одновременных систем — аппаратов, станций и бортовых устройств[12]. Пакеты защищаются контрольной суммой, а разбор потока удобно вести в анализаторе сетевых пакетов Wireshark[10].
Новые сообщения протокола описываются на языке XML в файлах-диалектах, из которых генераторы mavgen и mavgenerate собирают библиотеки для конкретных языков программирования[8]. Словарь сообщений разделён на наборы: минимальный каркас, общий набор common, набор development для экспериментальных сообщений и сводные файлы всех диалектов[9]. Такой подход позволяет добавить в протокол собственные команды, не ломая совместимость со стандартным словарём сообщений[8].
Связь с беспилотником
Станция запускается командой mavproxy.py из командной строки и подключается к полетному контроллеру через последовательный порт, USB, сеть UDP или TCP[13]. Список опций запуска охватывает выбор источника данных (--master) и его скорость (--baudrate), адресатов телеметрии (--out), подключение к симулятору (--sitl)[13]. Отдельные опции задают частоту запроса телеметрических потоков (--streamrate), идентификаторы станции в сети MAVLink (--source-system, --target-system), файл журнала и каталог проекта (--aircraft)[13]. Повторяемую конфигурацию сохраняют в файле mavinit.py: он выполняется при каждом старте станции и задаёт привычные модули и настройки[13]. Если к компьютеру подключён один автопилот, опцию --master можно опустить: станция сама обнаружит порт, а поток можно вещать широковещательным UDP на всю локальную сеть[14]. Типовой запуск выглядит так: mavproxy.py --master=/dev/ttyUSB0 --baudrate=57600 --out=udp:192.168.1.10:14550 — станция открывает последовательный порт телеметрического модема и дублирует поток в сеть[13]. В полете станция принимает поток телеметрии — координаты, высоту, скорость, состояние бортовых систем, — а также отправляет команды: переключение режимов полета, загрузку заданий, запросы параметров[1][4].
Для управления БПЛА, помимо аппаратуры радиоуправления частотой 2,4 ГГц, применяется и телеметрия MAVLink: через станцию оператор подает команды и получает данные с борта, а полетный контроллер объединяет сигналы приемника и телеметрического канала[3].
Телеметрия и форвардинг
Ключевая функция MAVProxy — пересылка полученных MAVLink-сообщений другим потребителям[1]. Станция принимает поток с борта и дублирует его по сети UDP или TCP на несколько адресов: так к одному аппарату одновременно подключаются графическая станция на ноутбуке, карта на планшете и другие инструменты[15]. Один и тот же поток направляется нескольким получателям сразу — резервной станции, планшету пилота, системе протоколирования. Возможна и обратная ситуация: несколько каналов связи с бортом — радиомодем, Wi-Fi, бортовой канал сотовой сети — сходятся в MAVProxy, которая объединяет их в один логический линк[1].
Подобная архитектура повторяет организацию наземного пункта управления БПЛА, описанную в инженерной литературе: станция управления собирает телеметрическую информацию, вырабатывает команды и распределяет данные между потребителями[4][16]. Вся принятая телеметрия автоматически записывается в журнал mav.tlog: файлы используются для разбора полёта после посадки и повторного проигрывания, а опция --aircraft раскладывает журналы по именным папкам с датами[17].
Интерфейс и модули
Консоль и графические надстройки
Основной интерфейс MAVProxy — текстовая консоль: команды набираются в командной строке, телеметрия выводится в текстовом виде, а модуль консоли дополняет ввод подсказками по клавише табуляции[1]. Такой формат считается «станцией разработчика»: он ориентирован на отладку, автоматизацию и повторяемые сценарии, а не на наблюдение за полетом глазами оператора[1]. При этом MAVProxy рассчитана на совместную работу с графическими наземными станциями — Mission Planner, APM Planner 2, QGroundControl: станция-прокси предоставляет им поток данных, а графическая оболочка отображает его оператору[1].
Модули
Возможности станции расширяются загружаемыми модулями на Python[18]. Часть модулей стартует вместе со станцией по умолчанию[18]. Это обработка данных ADS-B, армирование и дезармирование двигателя, контроль батареи, калибровка, управление геозоной (fence), передача файлов по FTP, построение графиков, управление каналами связи, журнал и режимы полета[18]. Отдельные модули ведут вывод MAVLink, параметры, точки ожидания (rally), обработку команд пульта, реле, подписание сообщений, рельеф местности и работу с путевыми точками[18]. Галерея подключаемых модулей шире[18]: слежение за воздушными и морскими целями, наведение антенны, просмотр камеры, чат, контрольные списки, журналы DataFlash, прямая работа с шинами SPI и I²C, дифференциальный GPS[18]. Дополнительно доступны управление прошивкой, «ложный GPS» и режим следования за оператором[18]. В комплект входят также модули текстовой консоли, движущейся карты, поддержки джойстика и слежения антенны[1]. Модуль загружается командой module load прямо во время работы станции, а собственные модули пишутся на том же языке, что и ядро программы, — это делает MAVProxy типовой платформой для экспериментов с телеметрией[18]. Вспомогательные модули вынесены в отдельный каталог и работают через общий интерфейс очередей сообщений: фильтрация команд, управление питанием, мультиплексирование потоков[18]. Набор загружаемых модулей задается в файле mavinit.py, поэтому при каждом запуске станция восстанавливает привычную конфигурацию[13]. Архитектурно такой подход соответствует модульному программированию: ядро отвечает за связь и маршрутизацию сообщений, модули — за конкретные функции[1].
Применение
Разработка и симуляция
MAVProxy — стандартный инструмент при разработке прошивок ArduPilot: новые сборки автопилота испытываются в симуляторе SITL (software in the loop), который имитирует полет без реального аппарата, а станция выступает отладочной консолью симулятора[1]. Симулятор собирается обычным компилятором C++ в исполняемый файл и позволяет запускать Plane, Copter и Rover без аппаратуры[19]. Опция --sitl превращает подключение в локальное: станция и симулятор обмениваются пакетами на той же машине, что ускоряет цикл «правка кода — сборка — полет» до секунд[13]. Документация прямо называет MAVProxy «станцией разработчика»: с неё начинаются и проверка новых сборок, и отладка бортовых вычислителей, и прогон заданий перед выездом в поле[1]. В той же конфигурации отлаживаются модули самой станции: автор проверяет новую обработку телеметрии на симуляторном потоке, не рискуя аппаратом[18][13]. Разработчик подключается к симулятору так же, как к настоящему борту, меняет параметры, отдает команды и смотрит телеметрию, поэтому один и тот же набор команд проверяет и виртуальный, и реальный аппарат[1]. Генераторы протокола MAVLink дополняют цепочку: новая команда описывается в XML-диалекте, из него собирается библиотека, после чего станция и автопилот проверяются в связке[8].
Полевая эксплуатация
В полевых условиях MAVProxy используется как легкая станция на маломощном компьютере: минималистичная программа запускается даже на нетбуках, а потребность в ресурсах снижается за счет отсутствия тяжелого графического интерфейса[1]. Станция обслуживает наземный пункт управления: собирает телеметрию, отображает карту полета при подключенном модуле карты, следит за направлением антенны с помощью модуля слежения, дублирует поток на дополнительные устройства операторов[18][16]. Одна станция может обслуживать сразу несколько аппаратов: благодаря маршрутизации MAVLink оператор видит в одном окне телеметрию группы БПЛА, различая их по идентификаторам систем[15][16]. Модули геозоны и точек ожидания ограничивают пространство полета и держат резервные позиции, рельеф местности помогает автопилоту обходить подстилающую поверхность, а подпись MAVLink-пакетов защищает канал от посторонних станций[18]. Режим следования за оператором и просмотр камеры на борту делают станцию удобной для воздушного наблюдения и съемки[18]. Сфера применения совпадает с задачами гражданских БПЛА: аэрофотосъемка, мониторинг территории и объектов, дистанционное зондирование[16]. Инженерная литература описывает наземный пункт управления БПЛА как совокупность систем управления, связи и навигации, работающих с бортовой подсистемой по радиолиниям передачи данных[4]. Консольные станции вроде MAVProxy берут на себя программную часть такой инфраструктуры — обработку телеметрии, журналирование и автоматизацию, — оставляя аппаратную сторону специализированным средствам[4][16]. В учебных проектах MAVLink-станции служат первым знакомством с телеметрией самодельного аппарата: литература по дроностроению описывает сборку дрона как единый контур из полетного контроллера, каналов связи и наземной станции наблюдения[20]. Начинающим разработчикам такие эксперименты дают целостное представление о взаимодействии борта и земли — от микроконтроллера и датчиков до вывода телеметрии на экране[7].
Сравнение с другими наземными станциями
Экосистема ArduPilot включает несколько наземных станций, рассчитанных на разные сценарии; выбор зависит от задачи: наблюдение за полетом, автоматизация испытаний или работа серверной части наземного пункта[1]. Mission Planner — полнофункциональная графическая станция с настройкой, планированием заданий и анализом журналов; APM Planner 2 — упрощенная кроссплатформенная оболочка; QGroundControl — независимая графическая станция для широкого круга MAVLink-совместимых автопилотов[1][9]. MAVProxy занимает среди них отдельную нишу: она не претендует на графический интерфейс, зато работает как маршрутизатор телеметрии и консоль автоматизации, объединяя графические станции, модули и скрипты в один контур[1][15]. На практике станции не конкурируют, а дополняют друг друга: графическая оболочка отображает полет, консольная станция маршрутизирует потоки между несколькими компьютерами и записывает журнал; при отказе одного из клиентов поток продолжает поступать остальным[15]. Независимость от рабочего стола позволяет запускать станцию там, где графическая оболочка недоступна, — на одноплатных компьютерах в составе наземного пункта[1]. Тем самым MAVProxy закрывает нижний слой стека управления — сбор телеметрии, маршрутизацию и автоматизацию, — а верхний слой отображения остаётся за графическими станциями и самописными инструментами оператора[1][15]. Для инженерных комплексов управления БПЛА такая связка соответствует классической структуре наземного пункта: средства отображения отделены от средств сбора телеметрии и могут наращиваться независимо[4].
Ограничения
MAVProxy работает только с системами, поддерживающими протокол MAVLink: автопилоты с иными протоколами телеметрии требуют собственных станций[1][10]. Консольный интерфейс предъявляет требования к квалификации оператора: без модулей карты и графических оболочек станция показывает телеметрию текстом, что непригодно для оперативного наблюдения за полетом[1]. Документация по установке предполагает знакомство с командной строкой и сетевыми настройками: оператору нужно выбрать источник данных, скорость порта и адресатов пересылки до первого запуска[13]. Модульная система и скрипты автоматизации завязаны на окружение Python и требуют установки интерпретатора и зависимостей, а готовые сборки отстают от текущего кода репозитория[18][2]. Наконец, станция не заменяет сертифицированные комплексы управления, которые требуются в задачах с повышенными требованиями к надежности канала и автономности[16]. Вопросы сопровождения решает сообщество: ошибки регистрируются в репозитории GitHub, обсуждение идет в чате проекта, а справочное руководство обновляется вместе с кодом[2][1].
Связь с другими технологиями
Экосистема ArduPilot
MAVProxy входит в набор инструментов экосистемы ArduPilot наряду с прошивками Copter, Plane, Rover и Sub для полетных контроллеров и симулятором SITL[1][5]. Полетный контроллер строится на микроконтроллере семейства ARM с датчиками ориентации и приемниками GPS-сигнала; обмен со станцией идет через последовательный порт или телеметрический модем[3]. Бортовой вычислитель — «companion computer» вроде Pandaboard — подключается к тому же MAVLink-обмену и выполняет задачи машинного зрения и управления полезной нагрузкой; MAVProxy исторически создавалась именно для таких связок[5].
Открытый протокол и свободное программное обеспечение
MAVLink — открытый протокол, принятый множеством автопилотов и наземных станций; словарь его сообщений описывается теми же XML-диалектами, которые обслуживают MAVProxy[9][8]. Благодаря общей спецификации станция работает и с аппаратами других производителей, чьи прошивки говорят на MAVLink, — совместимость не ограничивается экосистемой ArduPilot[9]. Сама станция развивается как свободное программное обеспечение под лицензией GNU GPL v3+: исходный код опубликован на GitHub, допускается любое использование с сохранением лицензии[2]. Автор MAVProxy Эндрю Триджелл известен и другими свободными проектами — утилитой rsync и сервером Samba; преподавание и разработка связывают его с Австралийским национальным университетом[2]. Программа написана на Python и использует библиотеку pyserial для работы с последовательными портами и стандартные средства мультиплексирования ввода-вывода[1][2]. Благодаря этому станция работает на любой POSIX-совместимой платформе с интерпретатором — в Linux, macOS, Windows, на нетбуках и одноплатных машинах. Станция распространяется через пакетный индекс PyPI: под Windows выпускается готовый установщик, а в Debian-совместимых системах пакет ставится средствами pip[21]. По классификации свободных лицензий MAVProxy относится к свободному программному обеспечению с копилефт-условиями: производные работы обязаны сохранять ту же лицензию[2].
Примечания
- ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 MAVProxy — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 ArduPilot/MAVProxy: MAVLink proxy and command line ground station (англ.). GitHub (2 мая 2012). Дата обращения: 9 октября 2026.
- ↑ 1 2 3 Бобылев Ф. А., Маркелов М. К. Пример создания полетного контроллера беспилотного летательного аппарата на базе МК STM32 // Вестник Пензенского государственного университета. — 2023.
- ↑ 1 2 3 4 5 6 Токарев Ю. П., Макеев М. И., Юмаев К. Р. Построение комплекса управления беспилотными летательными аппаратами с использованием стандартных компонент // Информатика, телекоммуникации и управление. — 2010.
- ↑ 1 2 3 4 5 6 7 History of ArduPilot — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ GitHub API: ArduPilot/MAVProxy (англ.). GitHub. Дата обращения: 9 октября 2026.
- ↑ 1 2 Kilby T., Kilby B. Getting Started with Drones (англ.). — Maker Media, 2015. — ISBN 9781457183300.
- ↑ 1 2 3 4 5 6 Бизюк А. В. Генерация протокола информационного взаимодействия с дронами, на базе библиотеки MAVLink // Вестник науки. — 2024.
- ↑ 1 2 3 4 5 6 7 8 9 Protocol Overview (англ.). MAVLink Guide. Дата обращения: 9 октября 2026.
- ↑ 1 2 3 4 Разбираемся в MAVLink. Часть 1. Хабр. Дата обращения: 9 октября 2026.
- ↑ Heartbeat/Connection Protocol (англ.). MAVLink Guide. Дата обращения: 9 октября 2026.
- ↑ MAVLink Developer Guide (англ.). MAVLink Guide. Дата обращения: 9 октября 2026.
- ↑ 1 2 3 4 5 6 7 8 9 Startup Options — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ Quickstart — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ 1 2 3 4 5 Telemetry Forwarding — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ 1 2 3 4 5 6 Макаров К. С. Структурная схема комплекса с беспилотным летательным аппаратом, предназначенного для мониторинга территории и объектов в условиях низкой доступности каналов связи // Auditorium. — 2019.
- ↑ Logfiles — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Modules — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ SITL Simulator (Software in the Loop) (англ.). ArduPilot Dev documentation. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
- ↑ McGriffy D. Make: Drones (англ.). — Maker Media, 2016. — ISBN 9781680451719.
- ↑ Download and Installation — MAVProxy documentation (англ.). ArduPilot. ArduPilot Dev Team. Дата обращения: 9 октября 2026.
Литература
- Бизюк А. В. Генерация протокола информационного взаимодействия с дронами, на базе библиотеки MAVLink // Вестник науки. — 2024.
- Бобылев Ф. А., Маркелов М. К. Пример создания полетного контроллера беспилотного летательного аппарата на базе МК STM32 // Вестник Пензенского государственного университета. — 2023.
- Макаров К. С. Структурная схема комплекса с беспилотным летательным аппаратом, предназначенного для мониторинга территории и объектов в условиях низкой доступности каналов связи // Auditorium. — 2019.
- Токарев Ю. П., Макеев М. И., Юмаев К. Р. Построение комплекса управления беспилотными летательными аппаратами с использованием стандартных компонент // Информатика, телекоммуникации и управление. — 2010.
- Austin R. Unmanned Aircraft Systems: UAVS Design, Development and Deployment (англ.). — Wiley, 2010. — ISBN 9780470058190.
- Beard R. W., McLain T. W. Small Unmanned Aircraft: Theory and Practice (англ.). — Princeton University Press, 2012. — ISBN 9780691149219.
- Cinnamon I., Kadri R., Tepper F. DIY Drones for the Evil Genius (англ.). — McGraw-Hill Education, 2016. — ISBN 9781259861468.
- Kilby T., Kilby B. Getting Started with Drones (англ.). — Maker Media, 2015. — ISBN 9781457183300.
- McGriffy D. Make: Drones (англ.). — Maker Media, 2016. — ISBN 9781680451719.
- Quan Q. Introduction to Multicopter Design and Control (англ.). — Springer, 2017. — ISBN 9789811033810.
Дополнительно по теме
| Правообладателем данного материала является АНО «Интернет-энциклопедия «РУВИКИ». Использование данного материала на других сайтах возможно только с согласия АНО «Интернет-энциклопедия «РУВИКИ». |