diff --git a/clover/launch/aruco.launch b/clover/launch/aruco.launch index 821d3fcf..75f8165e 100644 --- a/clover/launch/aruco.launch +++ b/clover/launch/aruco.launch @@ -8,8 +8,11 @@ + + + - + @@ -26,7 +29,7 @@ - + @@ -41,11 +44,11 @@ - - + + - - + + diff --git a/clover/launch/clover.launch b/clover/launch/clover.launch index bbf77e8b..58a05f3e 100644 --- a/clover/launch/clover.launch +++ b/clover/launch/clover.launch @@ -12,6 +12,7 @@ + @@ -33,7 +34,10 @@ - + + + + diff --git a/clover/src/selfcheck.py b/clover/src/selfcheck.py index 30febd6f..db3605c1 100755 --- a/clover/src/selfcheck.py +++ b/clover/src/selfcheck.py @@ -195,24 +195,27 @@ def check_fcu(): failure('no connection to the FCU (check wiring)') return + clover_tag = re.compile(r'-cl[oe]ver\.\d+$') + clover_fw = False + # Make sure the console is available to us mavlink_exec('\n') version_str = mavlink_exec('ver all') if version_str == '': info('no version data available from SITL') - r = re.compile(r'^FW (git tag|version): (v?\d\.\d\.\d.*)$') - is_clover_firmware = False - for ver_line in version_str.split('\n'): - match = r.search(ver_line) - if match is not None: - field, version = match.groups() - info('firmware %s: %s' % (field, version)) - if 'clover' in version or 'clever' in version: - is_clover_firmware = True + for line in version_str.split('\n'): + if line.startswith('FW version: '): + info(line[len('FW version: '):]) + elif line.startswith('FW git tag: '): # only Clover's firmware + tag = line[len('FW git tag: '):] + clover_fw = clover_tag.search(tag) + info(tag) + elif line.startswith('HW arch: '): + info(line[len('HW arch: '):]) - if not is_clover_firmware: - failure('not running Clover PX4 firmware, https://clover.coex.tech/firmware') + if not clover_fw: + info('not Clover PX4 firmware, check https://clover.coex.tech/firmware') est = get_param('SYS_MC_EST_GROUP') if est == 1: diff --git a/clover/src/vpe_publisher.cpp b/clover/src/vpe_publisher.cpp index 0c032dcd..500fddc9 100644 --- a/clover/src/vpe_publisher.cpp +++ b/clover/src/vpe_publisher.cpp @@ -141,11 +141,11 @@ int main(int argc, char **argv) { vpe_pub = nh_priv.advertise("vpe", 1); //vpe_cov_pub = nh_priv_.advertise("pose_cov_pub", 1); - if (nh_priv.param("publish_zero", false)) { + if (nh_priv.param("force_init", false) || nh_priv.param("publish_zero", false)) { // publish_zero is old name // publish zero to initialize the local position zero_timer = nh.createTimer(ros::Duration(0.1), &publishZero); - publish_zero_timout = ros::Duration(nh_priv.param("publish_zero_timout", 5.0)); - publish_zero_duration = ros::Duration(nh_priv.param("publish_zero_duration", 5.0)); + publish_zero_timout = ros::Duration(nh_priv.param("force_init_timeout", 5.0)); + publish_zero_duration = ros::Duration(nh_priv.param("force_init_duration", 5.0)); local_position_sub = nh.subscribe("mavros/local_position/pose", 1, &localPositionCallback); } diff --git a/docs/assets/qgc-params.png b/docs/assets/qgc-params.png deleted file mode 100644 index dd30f324..00000000 Binary files a/docs/assets/qgc-params.png and /dev/null differ diff --git a/docs/en/parameters.md b/docs/en/parameters.md index d05c7690..ace6af4a 100644 --- a/docs/en/parameters.md +++ b/docs/en/parameters.md @@ -1,20 +1,64 @@ # PX4 Parameters -Main article: https://dev.px4.io/en/advanced/parameter_reference.html +Full documentation on PX4 parameters: https://docs.px4.io/master/en/advanced_config/parameter_reference.html. -> **Note** This is a description some of the most important PX4 parameters as of version 1.8.0. The full list is available at the link above. +For changing PX4 parameters, use QGroundControl software, [connect to Clover over Wi-Fi](gcs_bridge.md) or USB. Go to *Vehicle Setup* panel (click on the QGroundControl logo in the top-left corner) and choose *Parameters* menu. -To change PX4 parameters, you can use the QGroundControl application [by connecting to Clover via Wi-Fi](gcs_bridge.md): +## Recommended values -![PX4 parameters in QGroundControl](../assets/qgc-params.png) +### Common parameters -## Main parameters +|Parameter|Value|Comment| +|-|-|-| +|`SENS_FLOW_ROT`|0 (*No rotation*)|If using *PX4Flow* hardware, keep the default value| +|`SENS_FLOW_MINHGT`|0.01|For [VL53L1X](laser.md) rangefinder| +|`SENS_FLOW_MAXHGT`|4.0|For [VL53L1X](laser.md) rangefinder| +|`SENS_FLOW_MAXR`|10.0|| +|`SYS_HAS_MAG`|0|If impossible to run the magnetometer (*No mags found* error)| -The most important parameters are listed in this paragraph. +### Estimator subsystem parameters -`SYS_MC_EST_GROUP` – select the estimator module. +In case of using LPE ([COEX patched firmware](firmware.md)): -This is a group of modules that calculates the current state of the copter using readings from the sensors. The copter state includes: +|Parameter|Value|Comment| +|-|-|-| +|`LPE_FUSION`|86|Checkboxes: *flow* + *vis* + *land Detector* + *gyro comp*. If flying over horizontal floor *pub agl as lpos down* checkbox is allowed.
Details: [Optical Flow](optical_flow.md), [ArUco markers](aruco_map.md), [GPS](gps.md).| +|`LPE_VIS_DELAY`|0.0|| +|`LPE_VIS_Z`|0.1|| +|`LPE_FLW_SCALE`|1.0|| +|`LPE_FLW_R`|0.2|| +|`LPE_FLW_RR`|0.0|| +|`LPE_FLW_QMIN`|10|| +|`ATT_W_EXT_HDG`|0.5|Enabling usage of external yaw angle (when navigating using [markers map](aruco_map.md))| +|`ATT_EXT_HDG_M`|1 (*Vision*)|| +|`ATT_W_MAG`|0|Disabling usage of the magnetometer (when navigating indoor)| + +In case of using EKF2 (official firmware): + + + +|Parameter|Value|Comment| +|-|-|-| +|`EKF2_AID_MASK`|27|Checkboxes: (optionally) *gps* + *flow* + *vision position* + *vision yaw*.
Details: [Optical Flow](optical_flow.md), [ArUco markers](aruco_map.md), [GPS](gps.md).| +|`EKF2_OF_DELAY`|0|| +|`EKF2_OF_QMIN`|10|| +|`EKF2_OF_N_MIN`|0.05|| +|`EKF2_OF_N_MAX`|0.2|| +|`EKF2_HGT_MODE`|2 (*Range sensor*)|If the [rangefinder](laser.md) is present and flying over horizontal floor| +|`EKF2_EVA_NOISE`|0.1|| +|`EKF2_EVP_NOISE`|0.1|| +|`EKF2_EV_DELAY`|0|| +|`EKF2_MAG_TYPE`|5 (*None*)|Disabling usage of the magnetometer (when navigating indoor)| + + + +> **Info** See also: list of default parameters of the [Clover simulator](simulation.md): https://github.com/CopterExpress/clover/blob/master/clover_simulation/airframes/4500_clover. + +## Additional information + +The `SYS_MC_EST_GROUP` parameter defines the estimator subsystem to use. + +Estimator subsystem is a group of modules that calculates the current state of the copter using readings from the sensors. The copter state includes: * Angle rate of the copter – pitch_rate, roll_rate, yaw_rate; * Copter orientation (in the local coordinate system) – pitch, roll, yaw (one of presentations); @@ -57,9 +101,7 @@ These parameters adjust the flight of the copter by position (POSCTL, OFFBOARD, ## LPE + Q attitude estimator -These parameters configure the behavior of the `lpe` and `q` modules, which compute the state (orientation, position) of the copter. These parameters apply **only** if the `SYS_MC_EST_GROUP` parameter is set to `1` (local_position_estimator, attitude_estimator_q) - -TODO +These parameters configure the behavior of the `lpe` and `q` modules, which compute the state (orientation, position) of the copter. These parameters apply **only** if the `SYS_MC_EST_GROUP` parameter is set to `1` (local_position_estimator, attitude_estimator_q). ## Commander @@ -68,5 +110,3 @@ Prearm checks, switching the modes and states of the copter. ## Sensors Enabling, disabling and configuring various sensors. - -TODO diff --git a/docs/en/setup.md b/docs/en/setup.md index 24b85a6f..b36a3832 100644 --- a/docs/en/setup.md +++ b/docs/en/setup.md @@ -27,28 +27,29 @@ Main article: https://docs.qgroundcontrol.com/en/SetupView/Firmware.html > **Note** Do not connect your flight controller prior to flashing. -We recommend using the modified version of PX4 by CopterExpress for the Clover drone, especially for autonomous flights. Download the latest stable version **from our GitHub**. +We recommend using the modified version of [PX4 with COEX patches](firmware.md) for the Clover drone, especially for autonomous flights. Download the latest stable version **from our GitHub**. -> **Info** For Pixhawk-based quadcopters there is a separate firmware version. See details in "[Pixhawk / Pixracer firmware flashing](firmware.md)" article. +To use all the most recent PX4 functions you also can use the latest official firmware version (experimentally). Flash the flight controller with this firmware: QGroundControl firmware upload -1. Launch QGroundControl software. -2. Open the *Vehicle Setup* tab. -3. Select the *Firmware* menu. +1. Disconnect the flight controller from computer (if connected). +2. Launch QGroundControl software. +3. Go to *Vehicle Setup* panel (click on the QGroundControl logo in the top-left corner) and select *Firmware* menu. 4. Connect your flight controller to your PC over USB. -5. Wait for the flight controller to connect to QGroundControl. -6. Select *PX4 Flight Stack* in the right bar. +5. Select *PX4 Flight Stack* in the right bar appeared. -To use the recommended Copter Express firmware: + QGroundControl firmware upload -* Check *Advanced Settings* checkbox. -* Select *Custom firmware file...* from the dropdown list. -* Press *OK* and select the file that you've downloaded. +6. To use **COEX patched firmware**: -To use the latest official stable firmware just press *OK*. + * Check *Advanced Settings* checkbox. + * Select *Custom firmware file...* from the dropdown list. + * Press *OK* and select the file that you've downloaded. + + To use the latest **official stable firmware** just press *OK*. Wait for QGroundControl to finish flashing the flight controller. @@ -82,7 +83,7 @@ This is how the main QGroundControl settings window will look like: ### Setting parameters -Open the *Vehicle Setup* tab and select the *Parameters* menu. You can use the *Search* field to find parameters by name. +Open the *Vehicle Setup* tab and select the *Parameters* menu. You can use the *Search* field to find parameters by name. Recommended parameters values are given in the further documentation and also in the [parameters summary article](parameters.md). QGroundControl parameters diff --git a/docs/en/simple_offboard.md b/docs/en/simple_offboard.md index d67ca9f4..832bd363 100644 --- a/docs/en/simple_offboard.md +++ b/docs/en/simple_offboard.md @@ -1,11 +1,4 @@ -Autonomous flight (OFFBOARD) -=== - -> **Note** In the image version **0.20** `clever` package was renamed to `clover`. See [previous version of the article](https://github.com/CopterExpress/clover/blob/v0.19/docs/en/simple_offboard.md) for older images. - - - -> **Hint** We recommend using our [custom PX4 firmware for Clover](firmware.md#modified-firmware-for-clover) for autonomous flights. +# Autonomous flight The `simple_offboard` module of the `clover` package is intended for simplified programming of the autonomous drone flight (`OFFBOARD` [flight mode](modes.md)). It allows setting the desired flight tasks, and automatically transforms [coordinates between frames](frames.md). @@ -13,8 +6,7 @@ The `simple_offboard` module of the `clover` package is intended for simplified Main services are [`get_telemetry`](#gettelemetry) (receive telemetry data), [`navigate`](#navigate) (fly to a given point along a straight line), [`navigate_global`](#navigateglobal) (fly to a point specified as latitude and longitude along a straight line), [`land`](#land) (switch to landing mode). -Python examples ---- +## Python usage You need to create proxies for services before calling them. Use the following template for your programs: @@ -37,8 +29,7 @@ land = rospy.ServiceProxy('land', Trigger) Unused proxy functions may be removed from the code. -API description ---- +## API description > **Note** Omitted numeric parameters are set to 0. @@ -312,14 +303,9 @@ Landing the drone (command line): rosservice call /land "{}" ``` - - -Additional materials ------------------------- +## Additional materials * [ArUco-based position estimation and navigation](aruco.md). * [Program samples and snippets](snippets.md). diff --git a/docs/ru/calibration.md b/docs/ru/calibration.md index 42ee9cbd..30c299eb 100644 --- a/docs/ru/calibration.md +++ b/docs/ru/calibration.md @@ -14,6 +14,8 @@ 4. Последовательно устанавливайте квадрокоптер в каждую из указанных ориентаций до появления желтой рамки. 5. Вращайте квадрокоптер по направлению стрелки до появления зеленой рамки. +> **Warning** Последние версии прошивки PX4 не поддерживают внутренний компас на полетном контроллере COEX Pix. При появлении ошибки *No mags found* перейдите во вкладку *Parameters*, установите параметры `SYS_HAS_MAG` в `0`, `EKF2_MAG_TYPE` в `None` и перезагрузите полетный контроллер (*Tools* => *Reboot Vehicle*). + Дополнительная информация: https://docs.px4.io/master/en/config/compass.html. ## Гироскоп diff --git a/docs/ru/parameters.md b/docs/ru/parameters.md index f5a678ed..fc784255 100644 --- a/docs/ru/parameters.md +++ b/docs/ru/parameters.md @@ -1,20 +1,64 @@ # Параметры PX4 -Основная статья: https://dev.px4.io/en/advanced/parameter_reference.html +Полная документация по параметрам PX4: https://docs.px4.io/master/en/advanced_config/parameter_reference.html. -> **Note** Это описание некоторых, наиболее важных параметров PX4 по состоянию на версию 1.8.0. Полный список см. по ссылке выше. +Для изменения параметров PX4 используйте программу QGroundControl, [подключившись к Клеверу по Wi-Fi](gcs_bridge.md) или USB. Перейдите в панель *Vehicle Setup* (кликнув на логотип QGroundControl в левом верхнем углу и выберите меню *Parameters*. -Для изменения параметров PX4 можно воспользоваться программой QGroundControl, [подключившись к Клеверу по Wi-Fi](gcs_bridge.md): +## Рекомендованные значения -![Параметры PX4 в QGroundControl](../assets/qgc-params.png) +### Общие параметры -## Основные параметры +|Параметр|Значение|Примечание| +|-|-|-| +|`SENS_FLOW_ROT`|0 (*No rotation*)|В случае использования "железного" [PX4Flow](px4flow.md), оставьте значение по умолчанию| +|`SENS_FLOW_MINHGT`|0.01|Для [дальномера VL53L1X](laser.md)| +|`SENS_FLOW_MAXHGT`|4.0|Для [дальномера VL53L1X](laser.md)| +|`SENS_FLOW_MAXR`|10.0|| +|`SYS_HAS_MAG`|0|При невозможности запуска магнитометра (ошибка *No mags found*)| -Наиболее важные параметры вынесены в этот параграф. +### Настройки подсистемы Estimator -`SYS_MC_EST_GROUP` – выбор модуля estimator'а. +В случае использования LPE ([прошивка COEX](firmware.md)): -Это группа модулей, которая вычисляет текущее состояние (state) коптера, используя показания с датчиков. В состояние коптера входит: +|Параметр|Значение|Примечание| +|-|-|-| +|`LPE_FUSION`|86|Чекбоксы: *flow* + *vis* + *land Detector* + *gyro comp*. При полете над ровным полом возможно включение *pub agl as lpos down*.
Подробнее: [Optical Flow](optical_flow.md), [ArUco-маркеры](aruco_map.md), [GPS](gps.md).| +|`LPE_VIS_DELAY`|0.0|| +|`LPE_VIS_Z`|0.1|| +|`LPE_FLW_SCALE`|1.0|| +|`LPE_FLW_R`|0.2|| +|`LPE_FLW_RR`|0.0|| +|`LPE_FLW_QMIN`|10|| +|`ATT_W_EXT_HDG`|0.5|Включение использования внешнего угла по рысканью (при навигации по [карте маркеров](aruco_map.md))| +|`ATT_EXT_HDG_M`|1 (*Vision*)|| +|`ATT_W_MAG`|0|Выключение магнитометра (при навигации внутри помещения)| + +В случае использования EKF2 (официальная прошивка): + + + +|Параметр|Значение|Примечание| +|-|-|-| +|`EKF2_AID_MASK`|27|Чекбоксы: (опционально) *gps* + *flow* + *vision position* + *vision yaw*.
Подробнее: [Optical Flow](optical_flow.md), [ArUco-маркеры](aruco_map.md), [GPS](gps.md).| +|`EKF2_OF_DELAY`|0|| +|`EKF2_OF_QMIN`|10|| +|`EKF2_OF_N_MIN`|0.05|| +|`EKF2_OF_N_MAX`|0.2|| +|`EKF2_HGT_MODE`|2 (*Range sensor*)|При наличии [дальномера](laser.md) и полете над ровным полом| +|`EKF2_EVA_NOISE`|0.1|| +|`EKF2_EVP_NOISE`|0.1|| +|`EKF2_EV_DELAY`|0|| +|`EKF2_MAG_TYPE`|5 (*None*)|Выключение магнитометра (при навигации внутри помещения)| + + + +> **Info** См. также: список параметров по умолчанию в [симуляторе](simulation.md): https://github.com/CopterExpress/clover/blob/master/clover_simulation/airframes/4500_clover. + +## Дополнительная информация + +Параметр `SYS_MC_EST_GROUP` отвечает за выбор Estimator'а. + +Estimator это подсистема, которая вычисляет текущее состояние (state) коптера, используя показания с датчиков. В состояние коптера входит: * угловая скорость коптера – pitch_rate, roll_rate, yaw_rate; * ориентация коптера (в локальной системе координат) – pitch (тангаж), roll (крен), yaw (рысканье) (одно из представлений); @@ -57,9 +101,7 @@ ## LPE + Q attitude estimator -Данные параметры настраивают поведение модулей `lpe` и `q`, которые вычисляют состояние (ориентацию, позицию) коптера. Эти параметры применяются **только** если параметр `SYS_MC_EST_GROUP` установлен в значение `1` (local_position_estimator, attitude_estimator_q) - -TODO +Данные параметры настраивают поведение модулей `lpe` и `q`, которые вычисляют состояние (ориентацию, позицию) коптера. Эти параметры применяются **только** если параметр `SYS_MC_EST_GROUP` установлен в значение `1` (local_position_estimator, attitude_estimator_q). ## Commander @@ -68,5 +110,3 @@ TODO ## Sensors Включение, выключение и настройка различных датчиков. - -TODO diff --git a/docs/ru/setup.md b/docs/ru/setup.md index 9562dba6..a1a3053c 100644 --- a/docs/ru/setup.md +++ b/docs/ru/setup.md @@ -16,39 +16,32 @@ Pixracer и MicroSD-карта -* Установите карту в компьютер (используйте адаптер при необходимости). -* Отформатируйте карту в файловую систему FAT32. Для этого кликните на значок SD-карты в "Проводнике" и нажмите "Форматирование" в Windows. Используйте "Дисковую утилиту" в macOS. -* Выполните "Безопасное извлечение" карты, извлеките карту. -* Установите карту в полетный контроллер. +1. Установите карту в компьютер (используйте адаптер при необходимости). +2. Отформатируйте карту в файловую систему FAT32. Для этого кликните на значок SD-карты в "Проводнике" и нажмите "Форматирование" в Windows. Используйте "Дисковую утилиту" в macOS. +3. Выполните "Безопасное извлечение" карты, извлеките карту. +4. Установите карту в полетный контроллер. ## Загрузка прошивки в полетный контроллер -Основная статья: https://docs.qgroundcontrol.com/en/SetupView/Firmware.html. +Наиболее оттестированной, в особенности для осуществления автономных полетов, является [версия прошивки с патчами COEX](firmware.md). Скачайте актуальную версию прошивки на GitHub — **скачать**. -> **Note** Перед осуществлением перепрошивки Pixracer не должен быть подключен к компьютеру по USB. +Для использования всех наиболее актуальных функций PX4 вы также можете использовать последнюю официальную версию прошивки (в экспериментальном режиме). -Для Клевера, в особенности для осуществления автономных полетов, рекомендуется использовать версию прошивки PX4 от Copter Express. Скачайте актуальную версию прошивки на GitHub — **скачать**. +1. Отключите полетный контроллер от компьютера (если он подключен). +2. Запустите программу QGroundControl. +3. Перейдите в панель *Vehicle Setup* (кликнув на логотип QGroundControl в левом верхнем углу) и выберите меню *Firmware*. +4. Подключите полетный контроллер к компьютеру по USB. +5. Выберите в появившемся меню справа *PX4 Flight Stack*. -> **Info** Для квадрокоптеров с Pixhawk (Клевер 2) существует отдельная версия прошивки. Подробности смотрите в статье "[Прошивка полетного контроллера](firmware.md)". + QGroundControl firmware upload -Загрузите прошивку в полетный контролер: +6. Для загрузки **прошивки COEX**: -QGroundControl firmware upload + * Выберите *Advanced settings*. + * В выпадающем меню выберите *Custom firmware file...* + * Нажмите *OK* и выберите скаченный файл прошивки. -1. Запустите программу QGroundControl. -2. Зайдите во вкладку *Vehicle Setup*. -3. Выберите меню *Firmware*. -4. Подключите Pixracer к компьютеру по USB. -5. Дождитесь подключения Pixracer к QGroundControl. -6. Выберите в меню справа *PX4 Flight Stack*. - -Для загрузки прошивки от Copter Express (рекомендуется): - -* Выберите *Advanced settings*. -* В выпадающем меню выберите *Custom firmware file...* -* Нажмите *OK* и выберите скаченный файл прошивки. - -Для загрузки последней версии стандартной прошивки сразу нажмите *OK*. + Для загрузки последней версии **стандартной прошивки** сразу нажмите *OK*. Дождитесь, пока QGroundControl загрузит прошивку и выполнит перезагрузку полетного контроллера. @@ -82,7 +75,7 @@ ### Параметры -Для настройки параметров полетного контроллера войдите во вкладку *Vehicle Setup* и выберите меню *Parameters*. Вы можете использовать поле *Search* для поиска параметров по имени. +Для настройки параметров полетного контроллера войдите во вкладку *Vehicle Setup* и выберите меню *Parameters*. Вы можете использовать поле *Search* для поиска параметров по имени. Рекомендуемые параметры для Клевера приведены в дальнейшей документации а также в соответствующей [сводной статье](parameters.md). QGroundControl parameters diff --git a/docs/ru/simple_offboard.md b/docs/ru/simple_offboard.md index 42502441..6e73f3e1 100644 --- a/docs/ru/simple_offboard.md +++ b/docs/ru/simple_offboard.md @@ -1,11 +1,4 @@ -Автономный полет (OFFBOARD) -=== - -> **Note** В версии образа **0.20** пакет `clever` был переименован в `clover`. Для более ранних версий см. документацию для версии [**0.19**](https://github.com/CopterExpress/clover/blob/v0.19/docs/ru/simple_offboard.md). - - - -> **Hint** Для автономных полетов рекомендуется использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера). +# Автономный полет Модуль `simple_offboard` пакета `clover` предназначен для упрощенного программирования автономного полета дрона ([режим](modes.md) `OFFBOARD`). Он позволяет устанавливать желаемые полетные задачи и автоматически трансформирует [систему координат](frames.md). @@ -13,8 +6,7 @@ Основные сервисы – [`get_telemetry`](#gettelemetry) (получение телеметрии), [`navigate`](#navigate) (полет в заданную точку по прямой), [`navigate_global`](#navigateglobal) (полет в глобальную точку по прямой), [`land`](#land) (переход в режим посадки). -Использование из языка Python ---- +## Использование из языка Python Для использования сервисов, необходимо создать объекты-прокси к ним. Используйте этот шаблон для вашей программы: @@ -37,8 +29,7 @@ land = rospy.ServiceProxy('land', Trigger) Неиспользуемые функции-прокси можно удалить из кода. -Описание API ---- +## Описание API > **Note** Незаполненные числовые параметры устанавливаются в значение 0. @@ -312,14 +303,9 @@ if res.success: rosservice call /land "{}" ``` - - -Дополнительные материалы ------------------------- +## Дополнительные материалы * [Полеты в поле ArUco-маркеров](aruco.md). * [Примеры программ и сниппеты](snippets.md).